| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747 | 
							- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using System.Data.Entity;
 
- using System.Data.Entity.Infrastructure;
 
- using System.Linq;
 
- using System.Net;
 
- using System.Web;
 
- using System.Web.Http;
 
- using System.Web.Http.Description;
 
- using DevExpress.Office.Utils;
 
- using iBemsDataService.Model;
 
- using iBemsDataService.Util;
 
- using System.Data.Entity.Validation;
 
- using System.Text;
 
- using System.Text.RegularExpressions;
 
- using iBemsDataService.Controllers.Bems.Formula;
 
- using System.Diagnostics;
 
- using iBemsDataService.Controllers.Bems.Common;
 
- using System.Transactions;
 
- namespace iBemsDataService.Controllers
 
- {
 
-     public class BemsFormulaController : ApiController
 
-     {
 
-         private iBemsEntities db;
 
-         private PointHistoryValueManager pointHistoryValueManager;
 
-         private static Regex regexParameter = new Regex(@"\b[A-Z]\b", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase);
 
-         private static Regex regexFunction = new Regex(@"\$([\w]+).+\$", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase);
 
-         private static FormulaTableManager tableManager = new FormulaTableManager();
 
-         //private BemsMonitoringPointHistoryController pointHistoryController;
 
-         public BemsFormulaController()
 
-         {
 
-             db = new iBemsEntities();
 
-             pointHistoryValueManager = new PointHistoryValueManager(db);
 
-         }
 
-         public BemsFormulaController(iBemsEntities bemsDb)
 
-         {
 
-             db = bemsDb;
 
-         }
 
-         [ActionName("Calculation")]
 
-         public List<CalculationResult> GetBemsFormula()
 
-         {
 
-             Uri uri = Request.RequestUri;
 
-             var uriQuery = HttpUtility.ParseQueryString(uri.Query);
 
-             string uriSiteId = uriQuery.Get("SiteId");
 
-             string uriFacilityTypeId = uriQuery.Get("FacilityTypeId");
 
-             string uriFormulaId = uriQuery.Get("FormulaId");
 
-             string uriTimeIntervalType = uriQuery.Get("TimeIntervalType");
 
-             string uriStartDate = uriQuery.Get("StartDate");
 
-             string uriEndDate = uriQuery.Get("EndDate");
 
-             string uriFacilityCode = uriQuery.Get("FacilityCode");
 
-             int siteId = -1, facilityTypeId = -1, formulaId = -1, timeIntervalType = -1, facilityCode = -1;
 
-             DateTime startDate, endDate;
 
-             if (int.TryParse(uriSiteId, out siteId) == false ||
 
-                 int.TryParse(uriFacilityTypeId, out facilityTypeId) == false ||
 
-                 int.TryParse(uriFormulaId, out formulaId) == false ||
 
-                 int.TryParse(uriTimeIntervalType, out timeIntervalType) == false ||
 
-                 int.TryParse(uriFacilityCode, out facilityCode) == false ||
 
-                 DateTime.TryParse(uriStartDate, out startDate) == false ||
 
-                 DateTime.TryParse(uriEndDate, out endDate) == false)
 
-             {
 
-                 throw new Exception(string.Format("Not Found FFFF Parameters: {0},{1},{2},{3},{4},{5},{6}",
 
-                     uriSiteId, uriFacilityTypeId, facilityCode, uriFormulaId, uriTimeIntervalType, uriStartDate, uriEndDate));
 
-             }
 
-             return GetBemsFormulaReal(siteId, facilityTypeId, facilityCode, formulaId, startDate, endDate, timeIntervalType);
 
-         }
 
-         public List<CalculationResult> GetBemsFormulaReal(int siteId, int facilityTypeId, int facilityCode, int formulaId, DateTime startDate, DateTime endDate, int timeIntervalType)
 
-         {
 
-             List<CalculationResult> list = new List<CalculationResult>();
 
-             BemsFormula formula = GetFormula(siteId, facilityTypeId, facilityCode, formulaId);
 
-             if (formula == null) return list;
 
-             TimeInterval timeInterval = (TimeInterval)timeIntervalType;
 
-             ArrayList parameters = new ArrayList();
 
-             MathCalculator calculator = new MathCalculator();
 
-             if (false == calculator.Compile(formula.Formula))
 
-             {
 
-                 throw new Exception("Failed to compile formula: " + formula.Formula);
 
-             }
 
-             var match = regexParameter.Match(formula.Formula);
 
-             if (match.Success)
 
-             {
 
-                 var queryParameters = db.BemsFormulaParameter.Where(x =>
 
-                     x.SiteId == siteId &&
 
-                     x.FacilityTypeId == facilityTypeId &&
 
-                         //x.FacilityCode == facilityCode &&
 
-                         //(facilityTypeId >= 24 || x.FacilityCode == facilityCode) && // hcLee 2015 04 21
 
-                     (facilityTypeId >= 100 || x.FacilityCode == facilityCode) && // hcLee 2015 04 28
 
-                     x.FormulaId == formulaId);
 
-                 if (queryParameters == null || queryParameters.Any() == false)
 
-                 {
 
-                     throw new Exception(string.Format("Not Found Formula Parameters: {0},{1},{2},{3}", siteId, facilityTypeId, facilityCode, formulaId));
 
-                 }
 
-                 List<MathParameterValue> parametersForArray = new List<MathParameterValue>();
 
-                 foreach (var p in queryParameters)
 
-                 {
 
-                     char parameter = p.ParameterId[0];
 
-                     var pValue = new MathParameterValue
 
-                     {
 
-                         Variable = (MathCalculator.Parameter)(parameter - 'A'),
 
-                         Value = 0,
 
-                     };
 
-                     parametersForArray.Add(pValue);
 
-                     var values = CreateCalculationValues(startDate, endDate, timeInterval);  //2015 04 22 hcLee
 
-                     var pointvalues = pointHistoryValueManager.GetPointValues(siteId, p.ParameterFacilityCode,
 
-                         p.ParameterPropertyId, timeInterval, startDate, endDate);
 
-                     if (pointvalues == null)
 
-                         continue;
 
-                     int index = 0;
 
-                     CalculationValue pp = null;
 
-                     CalculationValue v = null;
 
-                     for (var i = 0; i < values.Length; i++)
 
-                     {
 
-                         v = values[i];
 
-                         if (pp == null)
 
-                         {
 
-                             if (pointvalues.Length <= index) break;
 
-                             pp = pointvalues[index];
 
-                         }
 
-                         if (pp.DateTime == v.DateTime)
 
-                         {
 
-                             v.Value += pp.Value;
 
-                             pp = null;
 
-                             index++;
 
-                             if (pointvalues.Length <= index) break;
 
-                         }
 
-                     }
 
-                     parameters.Add(new CalculationParameter
 
-                     {
 
-                         ParameterValue = pValue,
 
-                         Values = values
 
-                     });
 
-                 }
 
-                 calculator.SetParameter(parametersForArray.ToArray());
 
-             }
 
-             {
 
-                 var functions = calculator.GetFunctions();
 
-                 if (functions.Any())
 
-                 {
 
-                     foreach (var f in functions)
 
-                     {
 
-                         var tableValues = tableManager.GetTableValues(f.Function.FunctionName);
 
-                         if (tableValues == null)
 
-                         {
 
-                             throw new Exception("Not Found Function.");
 
-                         }
 
-                         f.Function.FunctionDelegate = (x) =>
 
-                         {
 
-                             //Trace.WriteLine( typeof( x ) );
 
-                             var index = Array.BinarySearch(tableValues, new FormulaTableManager.TableComparerValue { XValue = (double)x });
 
-                             if (index < 0)
 
-                             {
 
-                                 index = ~index;
 
-                                 if (index == 0)
 
-                                 {
 
-                                     //return (decimal)tableValues[0].YValue;
 
-                                     return Math.Round((decimal)tableValues[0].YValue, 2);
 
-                                 }
 
-                                 else if (index == tableValues.Length)
 
-                                 {
 
-                                     //return (decimal)tableValues[tableValues.Length - 1].YValue;
 
-                                     return Math.Round((decimal)tableValues[tableValues.Length - 1].YValue, 2);
 
-                                 }
 
-                             }
 
-                             //return (decimal)tableValues[index].YValue;
 
-                             return Math.Round((decimal)tableValues[index].YValue, 2);
 
-                         };
 
-                     }
 
-                 }
 
-             }
 
-             //Trace.WriteLine( calculator.Calculate() );
 
-             DateTime dateTime = DateTime.Now;
 
-             if (parameters.Count > 0)
 
-             {
 
-                 var ps = parameters.Cast<CalculationParameter>().ToArray();
 
-                 ParameterBox parameterBox = new ParameterBox(ps);
 
-                 while (parameterBox.Sync())
 
-                 {
 
-                     var value = calculator.Calculate();
 
-                     if (value != null)
 
-                     {
 
-                         list.Add(new CalculationResult
 
-                         {
 
-                             DateTime = parameterBox.DateTime,
 
-                             Value = Math.Round((double)value, 2)
 
-                             //Value = (double)value
 
-                         });
 
-                     }
 
-                     if (parameterBox.NextStage() == false)
 
-                     {
 
-                         break;
 
-                     }
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 /*       2015 06 12 hcLee 막음,  데이터가 하나도 없는 경우 현재시간으로 이상한 값이 한개 오는 현상 
 
-                 var value = calculator.Calculate();
 
-                 if( value != null )
 
-                 {
 
-                     list.Add( new CalculationResult
 
-                     {
 
-                         DateTime = dateTime ,
 
-                         Value = (double)value
 
-                     } );
 
-                 }     */
 
-             }
 
-             return list;
 
-         }
 
-         [ResponseType(typeof(void))]
 
-         [ActionName("ControlPoint")]
 
-         public IHttpActionResult PostControlPoint()
 
-         {
 
-             Uri uri = Request.RequestUri;
 
-             var uriQuery = HttpUtility.ParseQueryString(uri.Query);
 
-             string uriSiteId = uriQuery.Get("SiteId");
 
-             string uriFacilityTypeId = uriQuery.Get("FacilityTypeId");
 
-             string uriFacilityCode = uriQuery.Get("FacilityCode");
 
-             string uriFormulaId = uriQuery.Get("FormulaId");
 
-             string uriControlValue = uriQuery.Get("ControlValue");
 
-             int siteId = -1, facilityTypeId = -1, formulaId = -1, facilityCode = -1;
 
-             double controlValue = 0;
 
-             if (int.TryParse(uriSiteId, out siteId) == false ||
 
-                 int.TryParse(uriFacilityTypeId, out facilityTypeId) == false ||
 
-                 int.TryParse(uriFormulaId, out formulaId) == false ||
 
-                 int.TryParse(uriFacilityCode, out facilityCode) == false ||
 
-                 double.TryParse(uriControlValue, out controlValue) == false)
 
-             {
 
-                 throw new Exception(string.Format("Not Found FFFF Parameters: {0},{1},{2},{3},{4} ", uriSiteId, uriFacilityTypeId, facilityCode, uriFormulaId, uriControlValue));
 
-             }
 
-             BemsFormula formula = GetFormula(siteId, facilityTypeId, facilityCode, formulaId);
 
-             if (formula == null) return StatusCode(HttpStatusCode.NoContent);
 
-             ArrayList parameters = new ArrayList();
 
-             MathCalculator calculator = new MathCalculator();
 
-             if (false == calculator.Compile(formula.Formula))
 
-             {
 
-                 throw new Exception("Failed to compile formula: " + formula.Formula);
 
-             }
 
-             var match = regexParameter.Match(formula.Formula);
 
-             if (match.Success)
 
-             {
 
-                 var queryParameters = db.BemsFormulaParameter.Where(x =>
 
-                     x.SiteId == siteId &&
 
-                     x.FacilityTypeId == facilityTypeId &&
 
-                         //x.FacilityCode == facilityCode &&
 
-                         //(facilityTypeId >= 24 || x.FacilityCode == facilityCode) && // hcLee 2015 04 21
 
-                     (facilityTypeId >= 100 || x.FacilityCode == facilityCode) && // hcLee 2015 04 28
 
-                     x.FormulaId == formulaId);
 
-                 if (queryParameters.Any() == false)
 
-                 {
 
-                     throw new Exception(string.Format("Not Found 2222 Parameters: {0},{1},{2},{3},{4}", siteId, facilityTypeId, facilityCode, formulaId, uriControlValue));
 
-                 }
 
-                 List<MathParameterValue> parametersForArray = new List<MathParameterValue>();
 
-                 using (var transaction = new TransactionScope())
 
-                 {
 
-                     foreach (var p in queryParameters)
 
-                     {
 
-                         char parameter = p.ParameterId[0];
 
-                         var pValue = new MathParameterValue
 
-                         {
 
-                             Variable = (MathCalculator.Parameter)(parameter - 'A'),
 
-                             Value = 0,
 
-                         };
 
-                         DateTime currentTime = DateTime.Now;
 
-                         try
 
-                         {
 
-                             {
 
-                                 var control = new BemsControlPointHistory
 
-                                 {
 
-                                     SiteId = siteId,
 
-                                     //FacilityTypeId = facilityTypeId,    // 2015 08 05 두소장과 통화중 일단 결정함.
 
-                                     FacilityTypeId = facilityTypeId,    // 2015 08 05 두소장과 통화중 일단 결정함.
 
-                                     FacilityCode = p.ParameterFacilityCode,
 
-                                     PropertyId = p.ParameterPropertyId,    // ???? hcLee
 
-                                     CreateDateTime = currentTime,
 
-                                     ControlValue = controlValue,
 
-                                     WriteServiceName = null,
 
-                                     ActionDateTime = null
 
-                                 };
 
-                                 db.BemsControlPointHistory.Add(control);
 
-                                 db.SaveChanges();
 
-                             }
 
-                         }
 
-                         catch (Exception e)
 
-                         {
 
-                             Trace.WriteLine(e.Message);
 
-                             //throw e;
 
-                             throw;
 
-                         }
 
-                     }
 
-                     transaction.Complete();
 
-                 }
 
-                 //calculator.SetParameter(parametersForArray.ToArray());
 
-             }
 
-             return StatusCode(HttpStatusCode.NoContent);
 
-         }
 
-         private CalculationValue[] CreateCalculationValues(DateTime startDate, DateTime endDate, TimeInterval timeIntervalType)
 
-         {
 
-             DateTime datetime = startDate;
 
-             int count = GetCountInTimeRange(startDate, endDate, timeIntervalType);
 
-             CalculationValue[] values = new CalculationValue[count];
 
-             for (var i = 0; i < values.Length; i++)
 
-             {
 
-                 values[i] = new CalculationValue
 
-                 {
 
-                     DateTime = datetime,
 
-                     Value = 0
 
-                 };
 
-                 NextTimeFromTimeInterval(ref datetime, timeIntervalType);
 
-             }
 
-             return values;
 
-         }
 
-         private void NextTimeFromTimeInterval(ref DateTime datetime, TimeInterval timeIntervalType)
 
-         {
 
-             switch (timeIntervalType)
 
-             {
 
-                 case TimeInterval.QuarterMin:
 
-                     datetime = datetime.AddMinutes(15);
 
-                     break;
 
-                 case TimeInterval.Hour:
 
-                     datetime = datetime.AddHours(1);
 
-                     break;
 
-                 case TimeInterval.Day:
 
-                     datetime = datetime.AddDays(1);
 
-                     break;
 
-                 case TimeInterval.Month:
 
-                     datetime = datetime.AddMonths(1);
 
-                     break;
 
-                 default: // TimeInterval.Year:
 
-                     datetime = datetime.AddYears(1);
 
-                     break;
 
-             }
 
-         }
 
-         private int GetCountInTimeRange(DateTime startDate, DateTime endDate, TimeInterval timeIntervalType)
 
-         {
 
-             TimeSpan ts = endDate - startDate;
 
-             switch (timeIntervalType)
 
-             {
 
-                 case TimeInterval.QuarterMin:
 
-                     return (int)ts.TotalMinutes / 15 + 1;
 
-                 case TimeInterval.Hour:
 
-                     return (int)ts.TotalHours + 1;
 
-                 case TimeInterval.Day:
 
-                     return (int)ts.TotalDays + 1;
 
-                 case TimeInterval.Month:
 
-                     {
 
-                         int count = 0;
 
-                         DateTime date = startDate;
 
-                         //while (date.Year <= endDate.Year && date.Month <= endDate.Month)
 
-                         while (date <= endDate)
 
-                         {
 
-                             count++;
 
-                             date = date.AddMonths(1);
 
-                         }
 
-                         return count;
 
-                     }
 
-                 default: // TimeInterval.Year:
 
-                     {
 
-                         int count = 0;
 
-                         DateTime date = startDate;
 
-                         while (date.Year <= endDate.Year)
 
-                         {
 
-                             count++;
 
-                             date = date.AddYears(1);
 
-                         }
 
-                         return count;
 
-                     }
 
-             }
 
-         }
 
-         /*
 
-                 [ActionName("ServiceType")]
 
-                 public List<CalculationResult> GetBemsFormulaService()
 
-                 {
 
-                     Uri uri = Request.RequestUri;
 
-                     var uriQuery = HttpUtility.ParseQueryString(uri.Query);
 
-                     string uriSiteId = uriQuery.Get("SiteId");
 
-                     string uriFacilityTypeId = uriQuery.Get("FacilityTypeId");
 
-                     string uriFormulaId = uriQuery.Get("FormulaId");
 
-                     string uriTimeIntervalType = uriQuery.Get("TimeIntervalType");
 
-                     string uriStartDate = uriQuery.Get("StartDate");
 
-                     string uriEndDate = uriQuery.Get("EndDate");
 
-                     string uriFacilityCode = uriQuery.Get("FacilityCode");
 
-                     string uriServiceTypeId = uriQuery.Get("ServiceTypeId");
 
-                     int siteId = -1, facilityTypeId = -1, formulaId = -1, timeIntervalType = -1, facilityCode = -1;
 
-                     int serviceTypeId = -1;
 
-                     DateTime startDate, endDate;
 
-                     if (int.TryParse(uriSiteId, out siteId) == false ||
 
-                         int.TryParse(uriFacilityTypeId, out facilityTypeId) == false ||
 
-                         int.TryParse(uriFormulaId, out formulaId) == false ||
 
-                         int.TryParse(uriTimeIntervalType, out timeIntervalType) == false ||
 
-                         int.TryParse(uriFacilityCode, out facilityCode) == false ||
 
-                         DateTime.TryParse(uriStartDate, out startDate) == false ||
 
-                         DateTime.TryParse(uriEndDate, out endDate) == false
 
-                         || int.TryParse(uriServiceTypeId, out serviceTypeId) == false)
 
-                     {
 
-                         throw new Exception(string.Format("Not Found Parameters: {0},{1},{2},{3},{4},{5},{6}, {7}",
 
-                             uriSiteId, uriFacilityTypeId, facilityCode, uriFormulaId, uriTimeIntervalType, uriStartDate, uriEndDate, uriServiceTypeId));
 
-                     }
 
-                     TimeInterval timeInterval = (TimeInterval)timeIntervalType;
 
-                     BemsFormula formula = GetFormula(siteId, facilityTypeId, facilityCode, formulaId);
 
-                     ArrayList parameters = new ArrayList();
 
-                     MathCalculator calculator = new MathCalculator();
 
-                     if (false == calculator.Compile(formula.Formula))
 
-                     {
 
-                         throw new Exception("Failed to compile formula: " + formula.Formula);
 
-                     }
 
-                     var match = regexParameter.Match(formula.Formula);
 
-                     if (match.Success)
 
-                     {
 
-                         var queryParameters = db.BemsFormulaParameter.Where(x =>
 
-                             x.SiteId == siteId &&
 
-                             x.FacilityTypeId == facilityTypeId &&
 
-                             x.FacilityCode == facilityCode &&
 
-                             x.FormulaId == formulaId);
 
-                         if (queryParameters.Any() == false)
 
-                         {
 
-                             throw new Exception(string.Format("Not Found Parameters: {0},{1},{2},{3}", siteId, facilityTypeId, facilityCode, formulaId));
 
-                         }
 
-                         List<MathParameterValue> parametersForArray = new List<MathParameterValue>();
 
-                         foreach (var p in queryParameters)
 
-                         {
 
-                             char parameter = p.ParameterId[0];
 
-                             var pValue = new MathParameterValue
 
-                             {
 
-                                 Variable = (MathCalculator.Parameter)(parameter - 'A'),
 
-                                 Value = 0,
 
-                             };
 
-                             parametersForArray.Add(pValue);
 
-                             var values = pointHistoryValueManager.GetPointValues(siteId, p.ParameterFacilityCode,
 
-                                 p.ParameterPropertyId, timeInterval, startDate, endDate);
 
-                             parameters.Add(new CalculationParameter
 
-                             {
 
-                                 ParameterValue = pValue,
 
-                                 Values = values
 
-                             });
 
-                         }
 
-                         calculator.SetParameter(parametersForArray.ToArray());
 
-                     }
 
-                     {
 
-                         var functions = calculator.GetFunctions();
 
-                         if (functions.Any())
 
-                         {
 
-                             foreach (var f in functions)
 
-                             {
 
-                                 var tableValues = tableManager.GetTableValues(f.Function.FunctionName);
 
-                                 if (tableValues == null)
 
-                                 {
 
-                                     throw new Exception("Not Found Function.");
 
-                                 }
 
-                                 f.Function.FunctionDelegate = (x) =>
 
-                                 {
 
-                                     //Trace.WriteLine( typeof( x ) );
 
-                                     var index = Array.BinarySearch(tableValues, new FormulaTableManager.TableComparerValue { XValue = (double)x });
 
-                                     if (index < 0)
 
-                                     {
 
-                                         index = ~index;
 
-                                         if (index == 0)
 
-                                         {
 
-                                             return (decimal)tableValues[0].YValue;
 
-                                         }
 
-                                         else if (index == tableValues.Length)
 
-                                         {
 
-                                             return (decimal)tableValues[tableValues.Length - 1].YValue;
 
-                                         }
 
-                                     }
 
-                                     return (decimal)tableValues[index].YValue;
 
-                                 };
 
-                             }
 
-                         }
 
-                     }
 
-                     //Trace.WriteLine( calculator.Calculate() );
 
-                     List<CalculationResult> list = new List<CalculationResult>();
 
-                     DateTime dateTime = DateTime.Now;
 
-                     if (parameters.Count > 0)
 
-                     {
 
-                         var ps = parameters.Cast<CalculationParameter>().ToArray();
 
-                         ParameterBox parameterBox = new ParameterBox(ps);
 
-                         while (parameterBox.Sync())
 
-                         {
 
-                             var value = calculator.Calculate();
 
-                             if (value != null)
 
-                             {
 
-                                 list.Add(new CalculationResult
 
-                                 {
 
-                                     DateTime = parameterBox.DateTime,
 
-                                     Value = (double)value
 
-                                 });
 
-                             }
 
-                             if (parameterBox.NextStage() == false)
 
-                             {
 
-                                 break;
 
-                             }
 
-                         }
 
-                     }
 
-                     else
 
-                     {
 
-                         var value = calculator.Calculate();
 
-                         if (value != null)
 
-                         {
 
-                             list.Add(new CalculationResult
 
-                             {
 
-                                 DateTime = dateTime,
 
-                                 Value = (double)value
 
-                             });
 
-                         }
 
-                     }
 
-                     return list;
 
-                 }
 
-         */
 
-         [ResponseType(typeof(void))]
 
-         public IHttpActionResult PostBemsFormula(FormulaData formula)
 
-         {
 
-             if (!ModelState.IsValid)
 
-             {
 
-                 return BadRequest(ModelState);
 
-             }
 
-             var queryFormula = db.BemsFormula.Where(x =>
 
-                 x.SiteId == formula.SiteId &&
 
-                 x.FacilityTypeId == formula.FacilityTypeId &&
 
-                 x.FacilityCode == formula.FacilityCode &&
 
-                 x.FormulaId == formula.FormulaId);
 
-             BemsFormula f = null;
 
-             bool isNewFormula = false;
 
-             if (queryFormula.Any())
 
-             {
 
-                 f = queryFormula.First();
 
-             }
 
-             else
 
-             {
 
-                 f = new BemsFormula();
 
-                 isNewFormula = true;
 
-             }
 
-             f.SiteId = formula.SiteId;
 
-             f.FacilityTypeId = formula.FacilityTypeId;
 
-             f.FacilityCode = formula.FacilityCode;
 
-             f.FormulaId = formula.FormulaId;
 
-             f.Formula = formula.Formula;
 
-             if (isNewFormula)
 
-             {
 
-                 db.BemsFormula.Add(f);
 
-             }
 
-             var parameterQuery = db.BemsFormulaParameter.Where(x =>
 
-                 x.SiteId == formula.SiteId &&
 
-                 x.FacilityTypeId == formula.FacilityTypeId &&
 
-                 x.FacilityCode == formula.FacilityCode &&
 
-                 x.FormulaId == formula.FormulaId);
 
-             var qm = new QueryManager<BemsFormulaParameter>(db);
 
-             try
 
-             {
 
-                 qm.DeleteAndInsert(db.BemsFormulaParameter, formula.Paramters, parameterQuery);
 
-                 if (formula.Paramters.Count == 0)
 
-                 {
 
-                     db.BemsFormula.Remove(queryFormula.FirstOrDefault());
 
-                 }
 
-             }
 
-             catch (DbEntityValidationException ex)
 
-             {
 
-                 StringBuilder sb = new StringBuilder();
 
-                 foreach (var failure in ex.EntityValidationErrors)
 
-                 {
 
-                     sb.AppendFormat("{0} failed validation\n", failure.Entry.Entity.GetType());
 
-                     foreach (var error in failure.ValidationErrors)
 
-                     {
 
-                         sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
 
-                         sb.AppendLine();
 
-                     }
 
-                 }
 
-                 return BadRequest(sb.ToString());
 
-                 //                throw ex;
 
-             }
 
-             catch (Exception) { throw; }
 
-             db.SaveChanges();
 
-             return StatusCode(HttpStatusCode.NoContent);
 
-         }
 
-         protected override void Dispose(bool disposing)
 
-         {
 
-             if (disposing)
 
-             {
 
-                 db.Dispose();
 
-             }
 
-             base.Dispose(disposing);
 
-         }
 
-         //private BemsFormula GetFormula( int siteId , int facilityTypeId ,
 
-         public BemsFormula GetFormula(int siteId, int facilityTypeId,
 
-             int facilityCode, int formulaId)
 
-         {
 
-             /*
 
-             var queryFormula = db.BemsFormula.Where( x =>
 
-                 x.SiteId == siteId &&
 
-                 x.FacilityTypeId == facilityTypeId &&
 
-                 //x.FacilityCode == facilityCode) &&
 
-                 //(facilityTypeId >= 24 || x.FacilityCode == facilityCode) && // hcLee 2015 04 16
 
-                 (facilityTypeId >= 100 || x.FacilityCode == facilityCode) && // hcLee 2015 04  28
 
-                 x.FormulaId == formulaId );*/
 
-             var queryFormula = from f in db.BemsFormula
 
-                                where f.SiteId == siteId && f.FacilityTypeId == facilityTypeId &&
 
-                                    (facilityTypeId >= 100 || f.FacilityCode == facilityCode) && f.FormulaId == formulaId
 
-                                select f;
 
-             if (queryFormula == null || queryFormula.Any() == false)
 
-             {
 
-                 //throw new Exception(string.Format("Not Found FFFF Formula: {0},{1},{2},{3}", siteId, facilityTypeId, facilityCode, formulaId));
 
-                 //throw new Exception(string.Format("설비 {0}의 {1}번 성능분석 수식이 필요합니다!", facilityCode, formulaId));
 
-                 //throw new Exception(string.Format("성능분석 수식이 필요합니다!", facilityCode, formulaId));
 
-                 //return null;
 
-                 //throw new Exception("성능분석 수식이 필요합니다!");
 
-                 //throw new Exception("Make Fornula please");
 
-                 return null;
 
-             }
 
-             //if (queryFormula == null || queryFormula.Any() == false) return null;
 
-             return queryFormula.Single();
 
-         }
 
-     }
 
-     public class CalculationParameter
 
-     {
 
-         public MathParameterValue ParameterValue { get; set; }
 
-         //public string FacilityCode { get; set; }
 
-         //public int PropertyId { get; set; }
 
-         public CalculationValue[] Values { get; set; }
 
-         public DateTime SetValueFromIndex(int index)
 
-         {
 
-             var value = this.Values[index];
 
-             this.ParameterValue.Value = (decimal)value.Value;
 
-             return value.DateTime;
 
-         }
 
-     };
 
-     public class FormulaData
 
-     {
 
-         public int SiteId { get; set; }
 
-         public int FacilityTypeId { get; set; }
 
-         public int FacilityCode { get; set; }
 
-         public int FormulaId { get; set; }
 
-         public string Formula { get; set; }
 
-         public List<FormulaParameterData> Paramters { get; set; }
 
-     };
 
-     public class FormulaParameterData
 
-     {
 
-         public int SiteId { get; set; }
 
-         public int FacilityTypeId { get; set; }
 
-         public int FacilityCode { get; set; }
 
-         public int FormulaId { get; set; }
 
-         public string ParameterId { get; set; }
 
-         public int ParameterFacilityCode { get; set; }
 
-         public int ParameterPropertyId { get; set; }
 
-     };
 
- }
 
 
  |