f89fece51f921970c6063e2fd2634ff3e9bd4a51.svn-base 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Data.Entity;
  5. using System.Data.Entity.Infrastructure;
  6. using System.Linq;
  7. using System.Net;
  8. using System.Web;
  9. using System.Web.Http;
  10. using System.Web.Http.Description;
  11. using DevExpress.Office.Utils;
  12. using iBemsDataService.Model;
  13. using iBemsDataService.Util;
  14. using System.Data.Entity.Validation;
  15. using System.Text;
  16. using System.Text.RegularExpressions;
  17. using iBemsDataService.Controllers.Bems.Formula;
  18. using System.Diagnostics;
  19. using iBemsDataService.Controllers.Bems.Common;
  20. using System.Transactions;
  21. namespace iBemsDataService.Controllers
  22. {
  23. public class BemsFormulaController : ApiController
  24. {
  25. private iBemsEntities db;
  26. private PointHistoryValueManager pointHistoryValueManager;
  27. private static Regex regexParameter = new Regex(@"\b[A-Z]\b", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase);
  28. private static Regex regexFunction = new Regex(@"\$([\w]+).+\$", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase);
  29. private static FormulaTableManager tableManager = new FormulaTableManager();
  30. //private BemsMonitoringPointHistoryController pointHistoryController;
  31. public BemsFormulaController()
  32. {
  33. db = new iBemsEntities();
  34. pointHistoryValueManager = new PointHistoryValueManager(db);
  35. }
  36. public BemsFormulaController(iBemsEntities bemsDb)
  37. {
  38. db = bemsDb;
  39. }
  40. [ActionName("Calculation")]
  41. public List<CalculationResult> GetBemsFormula()
  42. {
  43. Uri uri = Request.RequestUri;
  44. var uriQuery = HttpUtility.ParseQueryString(uri.Query);
  45. string uriSiteId = uriQuery.Get("SiteId");
  46. string uriFacilityTypeId = uriQuery.Get("FacilityTypeId");
  47. string uriFormulaId = uriQuery.Get("FormulaId");
  48. string uriTimeIntervalType = uriQuery.Get("TimeIntervalType");
  49. string uriStartDate = uriQuery.Get("StartDate");
  50. string uriEndDate = uriQuery.Get("EndDate");
  51. string uriFacilityCode = uriQuery.Get("FacilityCode");
  52. int siteId = -1, facilityTypeId = -1, formulaId = -1, timeIntervalType = -1, facilityCode = -1;
  53. DateTime startDate, endDate;
  54. if (int.TryParse(uriSiteId, out siteId) == false ||
  55. int.TryParse(uriFacilityTypeId, out facilityTypeId) == false ||
  56. int.TryParse(uriFormulaId, out formulaId) == false ||
  57. int.TryParse(uriTimeIntervalType, out timeIntervalType) == false ||
  58. int.TryParse(uriFacilityCode, out facilityCode) == false ||
  59. DateTime.TryParse(uriStartDate, out startDate) == false ||
  60. DateTime.TryParse(uriEndDate, out endDate) == false)
  61. {
  62. throw new Exception(string.Format("Not Found FFFF Parameters: {0},{1},{2},{3},{4},{5},{6}",
  63. uriSiteId, uriFacilityTypeId, facilityCode, uriFormulaId, uriTimeIntervalType, uriStartDate, uriEndDate));
  64. }
  65. return GetBemsFormulaReal(siteId, facilityTypeId, facilityCode, formulaId, startDate, endDate, timeIntervalType);
  66. }
  67. public List<CalculationResult> GetBemsFormulaReal(int siteId, int facilityTypeId, int facilityCode, int formulaId, DateTime startDate, DateTime endDate, int timeIntervalType)
  68. {
  69. List<CalculationResult> list = new List<CalculationResult>();
  70. BemsFormula formula = GetFormula(siteId, facilityTypeId, facilityCode, formulaId);
  71. if (formula == null) return list;
  72. TimeInterval timeInterval = (TimeInterval)timeIntervalType;
  73. ArrayList parameters = new ArrayList();
  74. MathCalculator calculator = new MathCalculator();
  75. if (false == calculator.Compile(formula.Formula))
  76. {
  77. throw new Exception("Failed to compile formula: " + formula.Formula);
  78. }
  79. var match = regexParameter.Match(formula.Formula);
  80. if (match.Success)
  81. {
  82. var queryParameters = db.BemsFormulaParameter.Where(x =>
  83. x.SiteId == siteId &&
  84. x.FacilityTypeId == facilityTypeId &&
  85. //x.FacilityCode == facilityCode &&
  86. //(facilityTypeId >= 24 || x.FacilityCode == facilityCode) && // hcLee 2015 04 21
  87. (facilityTypeId >= 100 || x.FacilityCode == facilityCode) && // hcLee 2015 04 28
  88. x.FormulaId == formulaId);
  89. if (queryParameters == null || queryParameters.Any() == false)
  90. {
  91. throw new Exception(string.Format("Not Found Formula Parameters: {0},{1},{2},{3}", siteId, facilityTypeId, facilityCode, formulaId));
  92. }
  93. List<MathParameterValue> parametersForArray = new List<MathParameterValue>();
  94. foreach (var p in queryParameters)
  95. {
  96. char parameter = p.ParameterId[0];
  97. var pValue = new MathParameterValue
  98. {
  99. Variable = (MathCalculator.Parameter)(parameter - 'A'),
  100. Value = 0,
  101. };
  102. parametersForArray.Add(pValue);
  103. var values = CreateCalculationValues(startDate, endDate, timeInterval); //2015 04 22 hcLee
  104. var pointvalues = pointHistoryValueManager.GetPointValues(siteId, p.ParameterFacilityCode,
  105. p.ParameterPropertyId, timeInterval, startDate, endDate);
  106. if (pointvalues == null)
  107. continue;
  108. int index = 0;
  109. CalculationValue pp = null;
  110. CalculationValue v = null;
  111. for (var i = 0; i < values.Length; i++)
  112. {
  113. v = values[i];
  114. if (pp == null)
  115. {
  116. if (pointvalues.Length <= index) break;
  117. pp = pointvalues[index];
  118. }
  119. if (pp.DateTime == v.DateTime)
  120. {
  121. v.Value += pp.Value;
  122. pp = null;
  123. index++;
  124. if (pointvalues.Length <= index) break;
  125. }
  126. }
  127. parameters.Add(new CalculationParameter
  128. {
  129. ParameterValue = pValue,
  130. Values = values
  131. });
  132. }
  133. calculator.SetParameter(parametersForArray.ToArray());
  134. }
  135. {
  136. var functions = calculator.GetFunctions();
  137. if (functions.Any())
  138. {
  139. foreach (var f in functions)
  140. {
  141. var tableValues = tableManager.GetTableValues(f.Function.FunctionName);
  142. if (tableValues == null)
  143. {
  144. throw new Exception("Not Found Function.");
  145. }
  146. f.Function.FunctionDelegate = (x) =>
  147. {
  148. //Trace.WriteLine( typeof( x ) );
  149. var index = Array.BinarySearch(tableValues, new FormulaTableManager.TableComparerValue { XValue = (double)x });
  150. if (index < 0)
  151. {
  152. index = ~index;
  153. if (index == 0)
  154. {
  155. //return (decimal)tableValues[0].YValue;
  156. return Math.Round((decimal)tableValues[0].YValue, 2);
  157. }
  158. else if (index == tableValues.Length)
  159. {
  160. //return (decimal)tableValues[tableValues.Length - 1].YValue;
  161. return Math.Round((decimal)tableValues[tableValues.Length - 1].YValue, 2);
  162. }
  163. }
  164. //return (decimal)tableValues[index].YValue;
  165. return Math.Round((decimal)tableValues[index].YValue, 2);
  166. };
  167. }
  168. }
  169. }
  170. //Trace.WriteLine( calculator.Calculate() );
  171. DateTime dateTime = DateTime.Now;
  172. if (parameters.Count > 0)
  173. {
  174. var ps = parameters.Cast<CalculationParameter>().ToArray();
  175. ParameterBox parameterBox = new ParameterBox(ps);
  176. while (parameterBox.Sync())
  177. {
  178. var value = calculator.Calculate();
  179. if (value != null)
  180. {
  181. list.Add(new CalculationResult
  182. {
  183. DateTime = parameterBox.DateTime,
  184. Value = Math.Round((double)value, 2)
  185. //Value = (double)value
  186. });
  187. }
  188. if (parameterBox.NextStage() == false)
  189. {
  190. break;
  191. }
  192. }
  193. }
  194. else
  195. {
  196. /* 2015 06 12 hcLee 막음, 데이터가 하나도 없는 경우 현재시간으로 이상한 값이 한개 오는 현상
  197. var value = calculator.Calculate();
  198. if( value != null )
  199. {
  200. list.Add( new CalculationResult
  201. {
  202. DateTime = dateTime ,
  203. Value = (double)value
  204. } );
  205. } */
  206. }
  207. return list;
  208. }
  209. [ResponseType(typeof(void))]
  210. [ActionName("ControlPoint")]
  211. public IHttpActionResult PostControlPoint()
  212. {
  213. Uri uri = Request.RequestUri;
  214. var uriQuery = HttpUtility.ParseQueryString(uri.Query);
  215. string uriSiteId = uriQuery.Get("SiteId");
  216. string uriFacilityTypeId = uriQuery.Get("FacilityTypeId");
  217. string uriFacilityCode = uriQuery.Get("FacilityCode");
  218. string uriFormulaId = uriQuery.Get("FormulaId");
  219. string uriControlValue = uriQuery.Get("ControlValue");
  220. int siteId = -1, facilityTypeId = -1, formulaId = -1, facilityCode = -1;
  221. double controlValue = 0;
  222. if (int.TryParse(uriSiteId, out siteId) == false ||
  223. int.TryParse(uriFacilityTypeId, out facilityTypeId) == false ||
  224. int.TryParse(uriFormulaId, out formulaId) == false ||
  225. int.TryParse(uriFacilityCode, out facilityCode) == false ||
  226. double.TryParse(uriControlValue, out controlValue) == false)
  227. {
  228. throw new Exception(string.Format("Not Found FFFF Parameters: {0},{1},{2},{3},{4} ", uriSiteId, uriFacilityTypeId, facilityCode, uriFormulaId, uriControlValue));
  229. }
  230. BemsFormula formula = GetFormula(siteId, facilityTypeId, facilityCode, formulaId);
  231. if (formula == null) return StatusCode(HttpStatusCode.NoContent);
  232. ArrayList parameters = new ArrayList();
  233. MathCalculator calculator = new MathCalculator();
  234. if (false == calculator.Compile(formula.Formula))
  235. {
  236. throw new Exception("Failed to compile formula: " + formula.Formula);
  237. }
  238. var match = regexParameter.Match(formula.Formula);
  239. if (match.Success)
  240. {
  241. var queryParameters = db.BemsFormulaParameter.Where(x =>
  242. x.SiteId == siteId &&
  243. x.FacilityTypeId == facilityTypeId &&
  244. //x.FacilityCode == facilityCode &&
  245. //(facilityTypeId >= 24 || x.FacilityCode == facilityCode) && // hcLee 2015 04 21
  246. (facilityTypeId >= 100 || x.FacilityCode == facilityCode) && // hcLee 2015 04 28
  247. x.FormulaId == formulaId);
  248. if (queryParameters.Any() == false)
  249. {
  250. throw new Exception(string.Format("Not Found 2222 Parameters: {0},{1},{2},{3},{4}", siteId, facilityTypeId, facilityCode, formulaId, uriControlValue));
  251. }
  252. List<MathParameterValue> parametersForArray = new List<MathParameterValue>();
  253. using (var transaction = new TransactionScope())
  254. {
  255. foreach (var p in queryParameters)
  256. {
  257. char parameter = p.ParameterId[0];
  258. var pValue = new MathParameterValue
  259. {
  260. Variable = (MathCalculator.Parameter)(parameter - 'A'),
  261. Value = 0,
  262. };
  263. DateTime currentTime = DateTime.Now;
  264. try
  265. {
  266. {
  267. var control = new BemsControlPointHistory
  268. {
  269. SiteId = siteId,
  270. //FacilityTypeId = facilityTypeId, // 2015 08 05 두소장과 통화중 일단 결정함.
  271. FacilityTypeId = facilityTypeId, // 2015 08 05 두소장과 통화중 일단 결정함.
  272. FacilityCode = p.ParameterFacilityCode,
  273. PropertyId = p.ParameterPropertyId, // ???? hcLee
  274. CreateDateTime = currentTime,
  275. ControlValue = controlValue,
  276. WriteServiceName = null,
  277. ActionDateTime = null
  278. };
  279. db.BemsControlPointHistory.Add(control);
  280. db.SaveChanges();
  281. }
  282. }
  283. catch (Exception e)
  284. {
  285. Trace.WriteLine(e.Message);
  286. //throw e;
  287. throw;
  288. }
  289. }
  290. transaction.Complete();
  291. }
  292. //calculator.SetParameter(parametersForArray.ToArray());
  293. }
  294. return StatusCode(HttpStatusCode.NoContent);
  295. }
  296. private CalculationValue[] CreateCalculationValues(DateTime startDate, DateTime endDate, TimeInterval timeIntervalType)
  297. {
  298. DateTime datetime = startDate;
  299. int count = GetCountInTimeRange(startDate, endDate, timeIntervalType);
  300. CalculationValue[] values = new CalculationValue[count];
  301. for (var i = 0; i < values.Length; i++)
  302. {
  303. values[i] = new CalculationValue
  304. {
  305. DateTime = datetime,
  306. Value = 0
  307. };
  308. NextTimeFromTimeInterval(ref datetime, timeIntervalType);
  309. }
  310. return values;
  311. }
  312. private void NextTimeFromTimeInterval(ref DateTime datetime, TimeInterval timeIntervalType)
  313. {
  314. switch (timeIntervalType)
  315. {
  316. case TimeInterval.QuarterMin:
  317. datetime = datetime.AddMinutes(15);
  318. break;
  319. case TimeInterval.Hour:
  320. datetime = datetime.AddHours(1);
  321. break;
  322. case TimeInterval.Day:
  323. datetime = datetime.AddDays(1);
  324. break;
  325. case TimeInterval.Month:
  326. datetime = datetime.AddMonths(1);
  327. break;
  328. default: // TimeInterval.Year:
  329. datetime = datetime.AddYears(1);
  330. break;
  331. }
  332. }
  333. private int GetCountInTimeRange(DateTime startDate, DateTime endDate, TimeInterval timeIntervalType)
  334. {
  335. TimeSpan ts = endDate - startDate;
  336. switch (timeIntervalType)
  337. {
  338. case TimeInterval.QuarterMin:
  339. return (int)ts.TotalMinutes / 15 + 1;
  340. case TimeInterval.Hour:
  341. return (int)ts.TotalHours + 1;
  342. case TimeInterval.Day:
  343. return (int)ts.TotalDays + 1;
  344. case TimeInterval.Month:
  345. {
  346. int count = 0;
  347. DateTime date = startDate;
  348. //while (date.Year <= endDate.Year && date.Month <= endDate.Month)
  349. while (date <= endDate)
  350. {
  351. count++;
  352. date = date.AddMonths(1);
  353. }
  354. return count;
  355. }
  356. default: // TimeInterval.Year:
  357. {
  358. int count = 0;
  359. DateTime date = startDate;
  360. while (date.Year <= endDate.Year)
  361. {
  362. count++;
  363. date = date.AddYears(1);
  364. }
  365. return count;
  366. }
  367. }
  368. }
  369. /*
  370. [ActionName("ServiceType")]
  371. public List<CalculationResult> GetBemsFormulaService()
  372. {
  373. Uri uri = Request.RequestUri;
  374. var uriQuery = HttpUtility.ParseQueryString(uri.Query);
  375. string uriSiteId = uriQuery.Get("SiteId");
  376. string uriFacilityTypeId = uriQuery.Get("FacilityTypeId");
  377. string uriFormulaId = uriQuery.Get("FormulaId");
  378. string uriTimeIntervalType = uriQuery.Get("TimeIntervalType");
  379. string uriStartDate = uriQuery.Get("StartDate");
  380. string uriEndDate = uriQuery.Get("EndDate");
  381. string uriFacilityCode = uriQuery.Get("FacilityCode");
  382. string uriServiceTypeId = uriQuery.Get("ServiceTypeId");
  383. int siteId = -1, facilityTypeId = -1, formulaId = -1, timeIntervalType = -1, facilityCode = -1;
  384. int serviceTypeId = -1;
  385. DateTime startDate, endDate;
  386. if (int.TryParse(uriSiteId, out siteId) == false ||
  387. int.TryParse(uriFacilityTypeId, out facilityTypeId) == false ||
  388. int.TryParse(uriFormulaId, out formulaId) == false ||
  389. int.TryParse(uriTimeIntervalType, out timeIntervalType) == false ||
  390. int.TryParse(uriFacilityCode, out facilityCode) == false ||
  391. DateTime.TryParse(uriStartDate, out startDate) == false ||
  392. DateTime.TryParse(uriEndDate, out endDate) == false
  393. || int.TryParse(uriServiceTypeId, out serviceTypeId) == false)
  394. {
  395. throw new Exception(string.Format("Not Found Parameters: {0},{1},{2},{3},{4},{5},{6}, {7}",
  396. uriSiteId, uriFacilityTypeId, facilityCode, uriFormulaId, uriTimeIntervalType, uriStartDate, uriEndDate, uriServiceTypeId));
  397. }
  398. TimeInterval timeInterval = (TimeInterval)timeIntervalType;
  399. BemsFormula formula = GetFormula(siteId, facilityTypeId, facilityCode, formulaId);
  400. ArrayList parameters = new ArrayList();
  401. MathCalculator calculator = new MathCalculator();
  402. if (false == calculator.Compile(formula.Formula))
  403. {
  404. throw new Exception("Failed to compile formula: " + formula.Formula);
  405. }
  406. var match = regexParameter.Match(formula.Formula);
  407. if (match.Success)
  408. {
  409. var queryParameters = db.BemsFormulaParameter.Where(x =>
  410. x.SiteId == siteId &&
  411. x.FacilityTypeId == facilityTypeId &&
  412. x.FacilityCode == facilityCode &&
  413. x.FormulaId == formulaId);
  414. if (queryParameters.Any() == false)
  415. {
  416. throw new Exception(string.Format("Not Found Parameters: {0},{1},{2},{3}", siteId, facilityTypeId, facilityCode, formulaId));
  417. }
  418. List<MathParameterValue> parametersForArray = new List<MathParameterValue>();
  419. foreach (var p in queryParameters)
  420. {
  421. char parameter = p.ParameterId[0];
  422. var pValue = new MathParameterValue
  423. {
  424. Variable = (MathCalculator.Parameter)(parameter - 'A'),
  425. Value = 0,
  426. };
  427. parametersForArray.Add(pValue);
  428. var values = pointHistoryValueManager.GetPointValues(siteId, p.ParameterFacilityCode,
  429. p.ParameterPropertyId, timeInterval, startDate, endDate);
  430. parameters.Add(new CalculationParameter
  431. {
  432. ParameterValue = pValue,
  433. Values = values
  434. });
  435. }
  436. calculator.SetParameter(parametersForArray.ToArray());
  437. }
  438. {
  439. var functions = calculator.GetFunctions();
  440. if (functions.Any())
  441. {
  442. foreach (var f in functions)
  443. {
  444. var tableValues = tableManager.GetTableValues(f.Function.FunctionName);
  445. if (tableValues == null)
  446. {
  447. throw new Exception("Not Found Function.");
  448. }
  449. f.Function.FunctionDelegate = (x) =>
  450. {
  451. //Trace.WriteLine( typeof( x ) );
  452. var index = Array.BinarySearch(tableValues, new FormulaTableManager.TableComparerValue { XValue = (double)x });
  453. if (index < 0)
  454. {
  455. index = ~index;
  456. if (index == 0)
  457. {
  458. return (decimal)tableValues[0].YValue;
  459. }
  460. else if (index == tableValues.Length)
  461. {
  462. return (decimal)tableValues[tableValues.Length - 1].YValue;
  463. }
  464. }
  465. return (decimal)tableValues[index].YValue;
  466. };
  467. }
  468. }
  469. }
  470. //Trace.WriteLine( calculator.Calculate() );
  471. List<CalculationResult> list = new List<CalculationResult>();
  472. DateTime dateTime = DateTime.Now;
  473. if (parameters.Count > 0)
  474. {
  475. var ps = parameters.Cast<CalculationParameter>().ToArray();
  476. ParameterBox parameterBox = new ParameterBox(ps);
  477. while (parameterBox.Sync())
  478. {
  479. var value = calculator.Calculate();
  480. if (value != null)
  481. {
  482. list.Add(new CalculationResult
  483. {
  484. DateTime = parameterBox.DateTime,
  485. Value = (double)value
  486. });
  487. }
  488. if (parameterBox.NextStage() == false)
  489. {
  490. break;
  491. }
  492. }
  493. }
  494. else
  495. {
  496. var value = calculator.Calculate();
  497. if (value != null)
  498. {
  499. list.Add(new CalculationResult
  500. {
  501. DateTime = dateTime,
  502. Value = (double)value
  503. });
  504. }
  505. }
  506. return list;
  507. }
  508. */
  509. [ResponseType(typeof(void))]
  510. public IHttpActionResult PostBemsFormula(FormulaData formula)
  511. {
  512. if (!ModelState.IsValid)
  513. {
  514. return BadRequest(ModelState);
  515. }
  516. var queryFormula = db.BemsFormula.Where(x =>
  517. x.SiteId == formula.SiteId &&
  518. x.FacilityTypeId == formula.FacilityTypeId &&
  519. x.FacilityCode == formula.FacilityCode &&
  520. x.FormulaId == formula.FormulaId);
  521. BemsFormula f = null;
  522. bool isNewFormula = false;
  523. if (queryFormula.Any())
  524. {
  525. f = queryFormula.First();
  526. }
  527. else
  528. {
  529. f = new BemsFormula();
  530. isNewFormula = true;
  531. }
  532. f.SiteId = formula.SiteId;
  533. f.FacilityTypeId = formula.FacilityTypeId;
  534. f.FacilityCode = formula.FacilityCode;
  535. f.FormulaId = formula.FormulaId;
  536. f.Formula = formula.Formula;
  537. if (isNewFormula)
  538. {
  539. db.BemsFormula.Add(f);
  540. }
  541. var parameterQuery = db.BemsFormulaParameter.Where(x =>
  542. x.SiteId == formula.SiteId &&
  543. x.FacilityTypeId == formula.FacilityTypeId &&
  544. x.FacilityCode == formula.FacilityCode &&
  545. x.FormulaId == formula.FormulaId);
  546. var qm = new QueryManager<BemsFormulaParameter>(db);
  547. try
  548. {
  549. qm.DeleteAndInsert(db.BemsFormulaParameter, formula.Paramters, parameterQuery);
  550. if (formula.Paramters.Count == 0)
  551. {
  552. db.BemsFormula.Remove(queryFormula.FirstOrDefault());
  553. }
  554. }
  555. catch (DbEntityValidationException ex)
  556. {
  557. StringBuilder sb = new StringBuilder();
  558. foreach (var failure in ex.EntityValidationErrors)
  559. {
  560. sb.AppendFormat("{0} failed validation\n", failure.Entry.Entity.GetType());
  561. foreach (var error in failure.ValidationErrors)
  562. {
  563. sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
  564. sb.AppendLine();
  565. }
  566. }
  567. return BadRequest(sb.ToString());
  568. // throw ex;
  569. }
  570. catch (Exception) { throw; }
  571. db.SaveChanges();
  572. return StatusCode(HttpStatusCode.NoContent);
  573. }
  574. protected override void Dispose(bool disposing)
  575. {
  576. if (disposing)
  577. {
  578. db.Dispose();
  579. }
  580. base.Dispose(disposing);
  581. }
  582. //private BemsFormula GetFormula( int siteId , int facilityTypeId ,
  583. public BemsFormula GetFormula(int siteId, int facilityTypeId,
  584. int facilityCode, int formulaId)
  585. {
  586. /*
  587. var queryFormula = db.BemsFormula.Where( x =>
  588. x.SiteId == siteId &&
  589. x.FacilityTypeId == facilityTypeId &&
  590. //x.FacilityCode == facilityCode) &&
  591. //(facilityTypeId >= 24 || x.FacilityCode == facilityCode) && // hcLee 2015 04 16
  592. (facilityTypeId >= 100 || x.FacilityCode == facilityCode) && // hcLee 2015 04 28
  593. x.FormulaId == formulaId );*/
  594. var queryFormula = from f in db.BemsFormula
  595. where f.SiteId == siteId && f.FacilityTypeId == facilityTypeId &&
  596. (facilityTypeId >= 100 || f.FacilityCode == facilityCode) && f.FormulaId == formulaId
  597. select f;
  598. if (queryFormula == null || queryFormula.Any() == false)
  599. {
  600. //throw new Exception(string.Format("Not Found FFFF Formula: {0},{1},{2},{3}", siteId, facilityTypeId, facilityCode, formulaId));
  601. //throw new Exception(string.Format("설비 {0}의 {1}번 성능분석 수식이 필요합니다!", facilityCode, formulaId));
  602. //throw new Exception(string.Format("성능분석 수식이 필요합니다!", facilityCode, formulaId));
  603. //return null;
  604. //throw new Exception("성능분석 수식이 필요합니다!");
  605. //throw new Exception("Make Fornula please");
  606. return null;
  607. }
  608. //if (queryFormula == null || queryFormula.Any() == false) return null;
  609. return queryFormula.Single();
  610. }
  611. }
  612. public class CalculationParameter
  613. {
  614. public MathParameterValue ParameterValue { get; set; }
  615. //public string FacilityCode { get; set; }
  616. //public int PropertyId { get; set; }
  617. public CalculationValue[] Values { get; set; }
  618. public DateTime SetValueFromIndex(int index)
  619. {
  620. var value = this.Values[index];
  621. this.ParameterValue.Value = (decimal)value.Value;
  622. return value.DateTime;
  623. }
  624. };
  625. public class FormulaData
  626. {
  627. public int SiteId { get; set; }
  628. public int FacilityTypeId { get; set; }
  629. public int FacilityCode { get; set; }
  630. public int FormulaId { get; set; }
  631. public string Formula { get; set; }
  632. public List<FormulaParameterData> Paramters { get; set; }
  633. };
  634. public class FormulaParameterData
  635. {
  636. public int SiteId { get; set; }
  637. public int FacilityTypeId { get; set; }
  638. public int FacilityCode { get; set; }
  639. public int FormulaId { get; set; }
  640. public string ParameterId { get; set; }
  641. public int ParameterFacilityCode { get; set; }
  642. public int ParameterPropertyId { get; set; }
  643. };
  644. }