Beispiel #1
0
        public void TestCalculateValue()
        {
            CalculateValue CalcVal = new CalculateValue();
            int            res     = CalcVal.Calc(5);

            Assert.IsTrue(res == 10);
        }
        // POST odata/CalculateValues
        public async Task <IHttpActionResult> Post(CalculateValue calculatevalue)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.CalculateValues.Add(calculatevalue);

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (CalculateValueExists(calculatevalue.Id))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            return(Created(calculatevalue));
        }
        // PUT odata/CalculateValues(5)
        public async Task <IHttpActionResult> Put([FromODataUri] Guid key, CalculateValue calculatevalue)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (key != calculatevalue.Id)
            {
                return(BadRequest());
            }

            db.Entry(calculatevalue).State = EntityState.Modified;

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!CalculateValueExists(key))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(Updated(calculatevalue));
        }
        public async Task <IHttpActionResult> Patch([FromODataUri] Guid key, Delta <CalculateValue> patch)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            CalculateValue calculatevalue = await db.CalculateValues.FindAsync(key);

            if (calculatevalue == null)
            {
                return(NotFound());
            }

            patch.Patch(calculatevalue);

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!CalculateValueExists(key))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(Updated(calculatevalue));
        }
        private void Button_Click_5(object sender, RoutedEventArgs e)
        {
            CalculateValue val = dataGrid.CurrentItem as CalculateValue;

            ObservableCollection <CalculateValue> collection = dataGrid.ItemsSource as ObservableCollection <CalculateValue>;

            collection.Remove(val);
        }
Beispiel #6
0
        private void saveData(AppIntegratedInfo appInfo, DataTable table)
        {
            DateTimeOffset maxDate = DateTimeOffset.MinValue;

            if (appInfo.CalcValues.Count > 0)
            {
                //最后一次数据
                maxDate = appInfo.CalcValues[0].Date;
            }

            foreach (DataRow row in table.Rows)
            {
                DateTimeOffset date = (DateTimeOffset)row[PubConstant.timeColumnName];
                if (date > maxDate)
                {
                    foreach (MessureParam item in appInfo.MesParams)
                    {
                        MessureValue mv = new MessureValue();
                        mv.Date    = date;
                        mv.Id      = Guid.NewGuid();
                        mv.ParamId = item.Id;
                        mv.Val     = row[item.ParamName] as double?;

                        appInfo.DbContext.AddToMessureValues(mv);
                    }

                    foreach (CalculateParam item in appInfo.CalcParams)
                    {
                        CalculateValue mv = new CalculateValue();
                        mv.Date    = date;
                        mv.Id      = Guid.NewGuid();
                        mv.ParamId = item.Id;
                        mv.Val     = row[item.ParamName] as double?;


                        appInfo.DbContext.AddToCalculateValues(mv);
                    }

                    object remarkVal = row[PubConstant.remarkColumnName];
                    if (remarkVal != null && remarkVal.ToString().Trim().Length != 0)
                    {
                        Remark remark = new Remark();
                        remark.Id         = Guid.NewGuid();
                        remark.AppId      = appInfo.CurrentApp.Id;
                        remark.Date       = date;
                        remark.RemarkText = remarkVal.ToString().Trim();

                        appInfo.DbContext.AddToRemarks(remark);
                    }
                }
            }
            appInfo.Update();
        }
        // DELETE odata/CalculateValues(5)
        public async Task <IHttpActionResult> Delete([FromODataUri] Guid key)
        {
            CalculateValue calculatevalue = await db.CalculateValues.FindAsync(key);

            if (calculatevalue == null)
            {
                return(NotFound());
            }

            db.CalculateValues.Remove(calculatevalue);
            await db.SaveChangesAsync();

            return(StatusCode(HttpStatusCode.NoContent));
        }
Beispiel #8
0
        // GET api/values/5
        public string GetValue(int currentValue)
        {
            CalculateValue CalcVal = new CalculateValue();

            currentValue = CalcVal.Calc(currentValue);

            ExternalApi ExtApi = new ExternalApi();

            currentValue = ExtApi.GetValue(currentValue);

            Value vl = new Value();

            vl.value = currentValue;
            repo.Create(vl);
            repo.Save();
            //db.Values.Add(vl);
            //db.SaveChanges();
            return(currentValue.ToString());
        }
 private bool SetValue <T, U>(Dictionary <string, object> options, string key, Action <U> callback, CalculateValue <T, U> valueCallback)
 {
     if (options != null && !string.IsNullOrEmpty(key) &&
         options.ContainsKey(key) && options[key] is T)
     {
         if (callback != null && valueCallback != null)
         {
             callback(valueCallback((T)options[key]));
         }
         return(true);
     }
     return(false);
 }
Beispiel #10
0
        protected override void Seed(Hammergo.Data.DamWCFContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method
            //  to avoid creating duplicate seed data. E.g.
            //
            //    context.People.AddOrUpdate(
            //      p => p.FullName,
            //      new Person { FullName = "Andrew Peters" },
            //      new Person { FullName = "Brice Lambson" },
            //      new Person { FullName = "Rowan Miller" }
            //    );
            //

            var type1 = new ApparatusType();

            type1.Id       = Guid.NewGuid();
            type1.TypeName = "第一种类型";



            var type2 = new ApparatusType();

            type2.Id       = Guid.NewGuid();
            type2.TypeName = "第二种类型";

            context.ApparatusTypes.AddOrUpdate(type1, type2);

            //添加工程部位
            var root = new ProjectPart()
            {
                Id         = Guid.NewGuid(),
                PartName   = "root",
                ParentPart = null,
            };

            var p1 = new ProjectPart()
            {
                Id         = Guid.NewGuid(),
                PartName   = "p1",
                ParentPart = root.Id,
            };

            var p2 = new ProjectPart()
            {
                Id         = Guid.NewGuid(),
                PartName   = "p2",
                ParentPart = root.Id,
            };


            context.ProjectParts.AddOrUpdate(root, p1, p2);


            //添加仪器
            var app1 = new App();

            app1.Id            = Guid.NewGuid();
            app1.AppName       = "第一支仪器";
            app1.CalculateName = "FirstApp";
            app1.AppTypeID     = type1.Id;
            app1.ProjectPartID = p1.Id;

            var app2 = new App();

            app2.Id            = Guid.NewGuid();
            app2.AppName       = "第二支仪器";
            app2.CalculateName = "SecondApp";
            app2.AppTypeID     = type2.Id;
            app2.ProjectPartID = p2.Id;


            var app3 = new App();

            app3.Id            = Guid.NewGuid();
            app3.AppName       = "第三支仪器";
            app3.CalculateName = "ThirdApp";
            app3.AppTypeID     = type2.Id;
            app3.ProjectPartID = p2.Id;

            context.Apps.AddOrUpdate(app1, app2, app3);



            var remark3 = new Remark()
            {
                Id         = Guid.NewGuid(),
                Date       = DateTime.Now,
                RemarkText = "remark",
                AppId      = app2.Id,
            };

            context.Remarks.AddOrUpdate(remark3);

            var conParam1 = new ConstantParam()
            {
                Id           = Guid.NewGuid(),
                AppId        = app1.Id,
                ParamName    = "c1",
                ParamSymbol  = "c1",
                PrecisionNum = 2,
                UnitSymbol   = "no",
                Val          = 1,
                Order        = 1,
                Description  = "no description",
            };

            var mesParam1 = new MessureParam()
            {
                Id           = Guid.NewGuid(),
                AppId        = app1.Id,
                ParamName    = "m1",
                ParamSymbol  = "m1",
                PrecisionNum = 2,
                UnitSymbol   = "no",
                Order        = 1,
                Description  = "no description",
            };


            var calcParam1 = new CalculateParam()
            {
                Id           = Guid.NewGuid(),
                AppId        = app1.Id,
                ParamName    = "cal1",
                ParamSymbol  = "cal1",
                PrecisionNum = 2,
                UnitSymbol   = "no",
                Order        = 1,
                Description  = "no description",
            };

            context.AppParams.AddOrUpdate(conParam1, mesParam1, calcParam1);
            //添加第一支仪器的数据
            DateTimeOffset date  = DateTimeOffset.Now;
            int            count = 20;

            for (int i = 0; i < count; i++)
            {
                MessureValue mv = new MessureValue()
                {
                    Id      = Guid.NewGuid(),
                    ParamId = mesParam1.Id,
                    Date    = date.AddDays(-i),
                    Val     = i
                };

                CalculateValue cv = new CalculateValue()
                {
                    Id      = Guid.NewGuid(),
                    ParamId = calcParam1.Id,
                    Date    = date.AddDays(-i),
                    Val     = i
                };

                var remark = new Remark()
                {
                    Id         = Guid.NewGuid(),
                    Date       = date.AddDays(-i),
                    RemarkText = "remark" + i,
                    AppId      = app1.Id,
                };


                context.MessureValues.AddOrUpdate(mv);
                context.CalculateValues.AddOrUpdate(cv);
                context.Remarks.AddOrUpdate(remark);
            }

            //添加第三支仪器的参数
            var conParam1_third = new ConstantParam()
            {
                Id           = Guid.NewGuid(),
                AppId        = app3.Id,
                ParamName    = "c1",
                ParamSymbol  = "c1",
                PrecisionNum = 2,
                UnitSymbol   = "no",
                Val          = 1,
                Order        = 1,
                Description  = "no description",
            };

            var mesParam1_third = new MessureParam()
            {
                Id           = Guid.NewGuid(),
                AppId        = app3.Id,
                ParamName    = "m1",
                ParamSymbol  = "m1",
                PrecisionNum = 2,
                UnitSymbol   = "no",
                Order        = 1,
                Description  = "no description",
            };


            var calcParam1_third = new CalculateParam()
            {
                Id           = Guid.NewGuid(),
                AppId        = app3.Id,
                ParamName    = "cal1",
                ParamSymbol  = "cal1",
                PrecisionNum = 2,
                UnitSymbol   = "no",
                Order        = 1,
                Description  = "no description",
            };

            context.AppParams.AddOrUpdate(conParam1_third, mesParam1_third, calcParam1_third);

            ///first app fomula

            var formula = new Formula()
            {
                Id                = Guid.NewGuid(),
                ParamId           = calcParam1.Id,
                StartDate         = DateTimeOffset.MinValue,
                EndDate           = DateTimeOffset.MaxValue,
                CalculateOrder    = 1,
                FormulaExpression = "c1+m1"
            };

            context.Formulae.AddOrUpdate(formula);


            var formula_third = new Formula()
            {
                Id                = Guid.NewGuid(),
                ParamId           = calcParam1_third.Id,
                StartDate         = DateTimeOffset.MinValue,
                EndDate           = DateTimeOffset.MaxValue,
                CalculateOrder    = 1,
                FormulaExpression = "c1+m1+FirstApp.cal1"
            };

            context.Formulae.AddOrUpdate(formula_third);



            //添加第三支仪器的数据
            count = 10;
            for (int i = 0; i < count; i++)
            {
                MessureValue mv = new MessureValue()
                {
                    Id      = Guid.NewGuid(),
                    ParamId = mesParam1_third.Id,
                    Date    = date.AddDays(-i),
                    Val     = i + 1
                };

                CalculateValue cv = new CalculateValue()
                {
                    Id      = Guid.NewGuid(),
                    ParamId = calcParam1_third.Id,
                    Date    = date.AddDays(-i),
                    Val     = i + 2
                };

                var remark = new Remark()
                {
                    Id         = Guid.NewGuid(),
                    Date       = date.AddDays(-i),
                    RemarkText = "remark" + i + 1,
                    AppId      = app3.Id,
                };


                context.MessureValues.AddOrUpdate(mv);
                context.CalculateValues.AddOrUpdate(cv);
                context.Remarks.AddOrUpdate(remark);
            }
        }
Beispiel #11
0
        protected override void bgw_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            try
            {
                using (DamWCFContext dam6Entities = new DamWCFContext(false))
                {
                    ResetConnectionString(dam6Entities);

                    using (EF5x.Models.DamDBContext dam5Entities = new EF5x.Models.DamDBContext())
                    {
                        ResetConnectionString(dam5Entities);
                        _allRowCnt = dam5Entities.CalculateParams.Count();
                        DateTime minDate = new DateTime(1970, 1, 1);
                        var      newItem = new CalculateValue();

                        foreach (var paramItem in dam5Entities.CalculateParams.AsNoTracking())
                        {
                            //寻找已有数据中的最大date
                            DateTimeOffset maxDate = (from i in dam6Entities.CalculateValues
                                                      where i.ParamId == paramItem.CalculateParamID
                                                      select i.Date).DefaultIfEmpty(minDate).Max();
                            //get all mes values which >maxDate
                            var query = from i in dam5Entities.CalculateValues.AsNoTracking()
                                        where i.calculateParamID == paramItem.CalculateParamID && i.Date > maxDate
                                        select i;

                            foreach (var item in query)
                            {
                                newItem.Id      = Guid.NewGuid();
                                newItem.ParamId = item.calculateParamID;
                                newItem.Date    = item.Date;
                                newItem.Val     = item.Val;

                                dam6Entities.CalculateValues.Add(newItem);


                                dam6Entities.SaveChanges();
                                dam6Entities.Entry(newItem).State = System.Data.Entity.EntityState.Detached;;
                            }

                            handledCnt++;
                            reportProgress();
                        }
                    }
                }
                reportProgress();

                bgwResult = "导入成功!";
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                {
                    bgwResult = ex.InnerException.Message;
                }
                else
                {
                    bgwResult = ex.Message;
                }
            }
        }
Beispiel #12
0
        /// <summary>
        /// 由于messure values更改了,需要重新计算calc values的值
        /// </summary>
        /// <param name="appInfo"></param>
        /// <param name="currentRow"></param>
        /// <param name="date"></param>
        internal static void reCalcValues(AppIntegratedInfo appInfo, DataRow currentRow, DateTimeOffset date)
        {
            hammergo.caculator.CalcFunction calc = new hammergo.caculator.CalcFunction();
            hammergo.caculator.MyList       list = new hammergo.caculator.MyList();

            //填充自身,要求在appInfo中的数据是更新后的数据
            fillListByCalcName_Date(list, date, false, appInfo);

            //分析此仪器是否引用了其它仪器的数据
            hammergo.caculator.MyList appCalcNameList = new hammergo.caculator.MyList();//引用的其它仪器名称的集合

            var sortedParams = new SortedDictionary <byte, ParamHelper>();



            //这里必须按照calc order 的顺序
            foreach (CalculateParam cp in appInfo.CalcParams)
            {
                Formula formulaEntity = appInfo.AllFormulae.SingleOrDefault(s => s.ParamId == cp.Id && s.StartDate <= date && date < s.EndDate);

                if (formulaEntity == null)
                {
                    throw new Exception(string.Format("找不到对应时间:{0:u}的工式,请检查测点的参数信息", date));
                }

                sortedParams.Add(formulaEntity.CalculateOrder, new ParamHelper {
                    FormulaEntity = formulaEntity, Param = cp
                });

                string formulaString = formulaEntity.FormulaExpression;//获取表达式

                System.Collections.ArrayList vars = calc.getVaribles(formulaString);
                //为了避免对某个测点的数据重复查询,将一次性填充一支仪器的数据


                for (int j = 0; j < vars.Count; j++)
                {
                    string vs  = (string)vars[j];
                    int    pos = vs.IndexOf('.');
                    if (pos != -1)
                    {
                        //引用了其它测点
                        string otherID = vs.Substring(0, pos);
                        appCalcNameList.add(otherID, 0);
                        //避免由于计算时依赖其它仪器,而其它仪器没有此刻的记录时,导致异常
                        list.add(vs, 0);
                    }
                }
            }

            //填充带点的参数
            for (int i = 0; i < appCalcNameList.Length; i++)
            {
                AppIntegratedInfo simpleAppInfo = new AppIntegratedInfo(appCalcNameList.getKey(i), date);
                fillListByCalcName_Date(list, date, true, simpleAppInfo);
            }

            //可以进行表达式求值了

            //根据计算顺序
            for (int i = 0; i < sortedParams.Count; i++)
            {
                var helperobj = sortedParams.ElementAt(i).Value;
                var cp        = helperobj.Param;
                //顺序是以order 升序排列
                string formula = helperobj.FormulaEntity.FormulaExpression;//获取表达式

                double v = calc.compute(formula, list);

                byte precision = cp.PrecisionNum;

                if (precision >= 0)
                {
                    v = Helper.Round(v, precision);
                }



                CalculateValue calcValue = appInfo.CalcValues.Find(delegate(CalculateValue item)
                {
                    return(item.Date == date && item.ParamId == cp.Id);
                });

                if (calcValue == null)
                {
                    //create new object
                    calcValue         = new CalculateValue();
                    calcValue.Date    = date;
                    calcValue.ParamId = cp.Id;

                    appInfo.CalcValues.Add(calcValue);

                    //添加到dbcontext中
                    appInfo.DbContext.AddToCalculateValues(calcValue);
                }

                calcValue.Val = v;

                appInfo.DbContext.UpdateObject(calcValue);

                //在填充时已添加,这里就不能添加
                list[cp.ParamSymbol] = v;

                if (currentRow != null)
                {
                    currentRow[cp.ParamName] = v;
                }
            }
        }
Beispiel #13
0
        //重新计算相关值,并反映在gridview中
        public static void redirectToObjects(AppIntegratedInfo appInfo, DataRow row, string feildName)
        {
            DateTimeOffset date = (DateTimeOffset)row[PubConstant.timeColumnName];
            MessureParam   mp   = appInfo.MesParams.FirstOrDefault(s => s.ParamName == feildName);

            if (mp != null)
            {
                MessureValue editedValue = appInfo.MesValues.Find(delegate(MessureValue item)
                {
                    return(item.Date == date && item.ParamId == mp.Id);
                });

                if (editedValue == null)
                {
                    //create new object
                    editedValue         = new MessureValue();
                    editedValue.Date    = date;
                    editedValue.ParamId = mp.Id;
                    appInfo.MesValues.Add(editedValue);

                    appInfo.DbContext.AddToMessureValues(editedValue);
                }


                editedValue.Val = (double)row[feildName];

                appInfo.DbContext.UpdateObject(editedValue);

                //recalculate the calc values
                reCalcValues(appInfo, row, date);
            }
            else
            {
                //直接编辑成果值,所有不用计算本测点的数据,但需要更新引用测点的数据
                CalculateParam cp = appInfo.CalcParams.Find(delegate(CalculateParam item)
                {
                    return(item.ParamName == feildName);
                });

                if (cp != null)
                {
                    CalculateValue calcValue = appInfo.CalcValues.Find(delegate(CalculateValue item)
                    {
                        return(item.Date == date && item.ParamId == cp.Id);
                    });

                    if (calcValue == null)
                    {
                        //create new object
                        calcValue         = new CalculateValue();
                        calcValue.Date    = date;
                        calcValue.ParamId = cp.Id;
                        appInfo.CalcValues.Add(calcValue);

                        appInfo.DbContext.AddToCalculateValues(calcValue);
                    }

                    calcValue.Val = (double)row[feildName];

                    //dbcontext标记要更新
                    appInfo.DbContext.UpdateObject(calcValue);
                }
            }

            //may be need reset the filter to null
        }
Beispiel #14
0
 public DelegateFuture(CalculateValue <T> calculateMethod) => this._delegate = calculateMethod;
 public double PerformCalculation(CalculateValue calculate, double first, double second)
 {
     return(calculate(first, second));
 }