Exemple #1
0
        public static List <FormulaItem> BuildArgs(string text, StrategyModel model)
        {
            var words      = Tokens.Parse(text).ToList();
            var argBuilder = new FormulaItemBuilder(model);
            var args       = new List <FormulaItem>();

            foreach (var token in words)
            {
                switch (token.TokenType)
                {
                case Token.Type.Operator:
                    args.Add(argBuilder.Build());
                    args.Add(FormulaItem.BuildeOperand(token.Data));

                    argBuilder = new FormulaItemBuilder(model);
                    break;

                case Token.Type.Number:
                case Token.Type.Word:
                    if (!argBuilder.TryAddWord(token))
                    {
                        throw new InvalidSemanticItemException(null, text, message: $"Unknown or unsupported value {token.Data}");
                    }
                    break;
                }
            }
            args.Add(argBuilder.Build());

            return(args);
        }
Exemple #2
0
        public override Formula Add(Formula entity)
        {
            using (var tx = this.m_UnitOfWork.BeginTransaction())
            {
                Formula formula = null;
                try
                {
                    formula = base.Add(entity);
                    this.m_UnitOfWork.Flush();

                    IRepositoryBase <FormulaItem> itemResp = this.m_UnitOfWork.GetRepositoryBase <FormulaItem>();
                    IRepositoryBase <StuffType>   typeResp = this.m_UnitOfWork.GetRepositoryBase <StuffType>();
                    IList <StuffType>             list     = typeResp.Query().Where(m => (m.TypeID == "StuffType" && m.IsUsed)).OrderBy(m => m.OrderNum).ToList();

                    foreach (StuffType item in list)
                    {
                        FormulaItem temp = new FormulaItem();
                        temp.StuffTypeID    = item.ID;
                        temp.StuffAmount    = 0;
                        temp.StandardAmount = 0;
                        temp.FormulaID      = formula.ID;
                        itemResp.Add(temp);
                    }
                    tx.Commit();
                }
                catch
                {
                    tx.Rollback();
                    throw;
                }
                return(formula);
            }
        }
        private List <FormulaItem> BuildFormula(List <string> lines, SearchableContent searchData)
        {
            List <FormulaItem> formulaItems = new List <FormulaItem>();

            foreach (string line in lines)
            {
                List <string> casArray = helpers.GetCASNumbers(line);

                foreach (string cas in casArray)
                {
                    FormulaItem formulaItem = new FormulaItem
                    {
                        CASNumber = cas,
                        OtherInfo = line
                    };

                    if (searchData.KnownChemicals.Exists(c => c.CAS == cas))
                    {
                        formulaItem.ChemName = searchData.KnownChemicals.Where(c => c.CAS == cas).FirstOrDefault().ChemName;
                        formulaItem.Score    = (int)Scores.HIGH_SCORE;
                    }
                    else
                    {
                        formulaItem.ChemName = "NAME NOT FOUND";
                        formulaItem.Score    = (int)Scores.MEDIUM_SCORE;
                    }

                    formulaItems.Add(formulaItem);
                }
            }

            return(formulaItems);
        }
        public void BaseSaveAndUpdateTest()
        {
            Formula formual = Formula.Create("F1", "AC20-120-水下", null);

            formual.AddFormulaItem(FormulaItem.Create(string.Empty, "B1", "N1", 10));
            formual.AddFormulaItem(FormulaItem.Create(string.Empty, "B2", "N2", 20));
            formual.AddFormulaItem(FormulaItem.Create(string.Empty, "B3", "N3", 30));

            Assert.Equal(3, formual.FormulaItemCount);

            DbContextOptions <FormulaContext> options = InMemoryDbContextFactory.CreateOptions <FormulaContext>("Formula-Base");

            using (FormulaContext content = new FormulaContext(options))
            {
                var obj = content.Formulas.Find("F1");
                Assert.Null(obj);

                content.Formulas.Add(formual);
                content.SaveChanges();

                var objRead = content.Formulas.Find("F1");
                Assert.NotNull(objRead);
                Assert.Equal(3, objRead.FormulaItemCount);
            }
        }
        public static MetaFormulaItem Create(FormulaItem argument)
        {
            if (argument == null)
            {
                return(null);
            }

            return(new MetaFormulaItem(argument));
        }
        private bool IsBoolParameter(FormulaItem item)
        {
            if (item.ValueType != FormulaItem.PARAM)
            {
                return(false);
            }
            var param = _model.Parameters.Where(p => p.Id == item.Value).First();

            return(param.ParameterType == StrategyParameter.BOOLEAN);
        }
Exemple #7
0
        /// <summary>
        /// CustMixprop表数据导入到Formula表
        /// </summary>
        /// <param name="sid">CustMixprop表主键ID</param>
        /// <returns></returns>
        public bool CU2FO(string sid, string did)
        {
            using (IGenericTransaction tx = this.m_UnitOfWork.BeginTransaction())
            {
                try
                {
                    CustMixprop obj    = this.m_UnitOfWork.GetRepositoryBase <CustMixprop>().Get(sid);
                    Formula     newobj = new Formula();
                    if (did.Length > 0)
                    {
                        newobj.ID = did;
                    }
                    newobj.CarpRadii   = obj.CarpRadii;
                    newobj.CementType  = obj.CementType;
                    newobj.ConStrength = obj.ConStrength;
                    newobj.ImpGrade    = obj.ImpGrade;
                    newobj.Mesh        = obj.Mesh;
                    newobj.FormulaName = obj.MixpropCode;
                    newobj.SCRate      = obj.SCRate;
                    newobj.Slump       = obj.Slump;
                    newobj.WCRate      = obj.WCRate;
                    newobj.Weight      = obj.Weight;
                    newobj             = this.m_UnitOfWork.GetRepositoryBase <Formula>().Add(newobj);

                    IList <CustMixpropItem> list = obj.CustMixpropItems;
                    foreach (CustMixpropItem item in list)
                    {
                        IList <StuffType> slist = this.m_UnitOfWork.GetRepositoryBase <StuffType>().All();
                        foreach (StuffType stype in slist)
                        {
                            if (item.StuffInfo.StuffType.ID == stype.ID)
                            {
                                FormulaItem temp = new FormulaItem();
                                temp.StandardAmount = item.StandardAmount ?? 0;
                                temp.StuffAmount    = item.Amount ?? 0;
                                temp.StuffType      = stype;
                                temp.StuffTypeID    = stype.ID;
                                temp.Formula        = newobj;
                                temp.FormulaID      = newobj.ID;
                                this.m_UnitOfWork.GetRepositoryBase <FormulaItem>().Add(temp);
                            }
                        }
                    }
                    tx.Commit();
                    return(true);
                }
                catch (Exception ex)
                {
                    tx.Rollback();
                    logger.Error(ex.Message);
                    throw;
                }
            }
        }
        private string ArgumentToString(FormulaItem arg)
        {
            switch (arg.ValueType)
            {
            case FormulaItem.VALUE:
                return(arg.Value);

            case FormulaItem.STREAM_VALUE:
            case FormulaItem.STREAM:
                if (string.IsNullOrEmpty(arg.Substream))
                {
                    return(arg.Value);
                }
                return($"[{arg.Value}.{arg.Substream}]");
            }
            throw new ParserException(model, message: $"Failed to parse the input string");
        }
Exemple #9
0
        private bool TryApplyStreamWithSubstream(string word)
        {
            if (formulaItem != null)
            {
                return(false);
            }

            if (word.Contains("."))
            {
                var streamAndSubstream = word.Split('.');
                if (streamAndSubstream.Count() == 2)
                {
                    var source = model?.Sources?.Where(s => s.Id == streamAndSubstream[0])?.FirstOrDefault();
                    if (model != null && source == null)
                    {
                        return(false);
                    }
                    formulaItem = new FormulaItem()
                    {
                        Value      = streamAndSubstream[0],
                        Substream  = streamAndSubstream[1],
                        ValueType  = FormulaItem.STREAM,
                        StreamType = source.SourceType == Source.INDICATOR ? FormulaItem.INDICATOR : FormulaItem.INSTRUMENT
                    };
                    return(true);
                }
            }
            if (model == null)
            {
                var source = model.Sources?.Where(s => s.Id == word)?.FirstOrDefault();
                if (source == null)
                {
                    return(false);
                }
                formulaItem = new FormulaItem()
                {
                    Value      = word,
                    ValueType  = FormulaItem.STREAM,
                    StreamType = source.SourceType == Source.INDICATOR ? FormulaItem.INDICATOR : FormulaItem.INSTRUMENT
                };
                return(true);
            }
            return(false);
        }
Exemple #10
0
        public static SqrtResultModel FindNumSqrtInteger(int num)
        {
            int integerNumber = (int)(Math.Sqrt(num));

            if (integerNumber * integerNumber == num)
            {
                return(null);
            }
            ;
            SqrtResultModel result = new SqrtResultModel()
            {
                IntegerNumber = integerNumber,
                Sequrence     = new List <FormulaItem>()
            };
            Dictionary <string, object> dic = new Dictionary <string, object>();
            int nextIntegerNumber           = integerNumber;
            int temp            = num;
            int tempDenominator = 1;

            while (true)
            {
                int nextDenominator = temp - nextIntegerNumber * nextIntegerNumber;
                nextDenominator /= tempDenominator;
                int tempIntegerNum = nextIntegerNumber;
                nextIntegerNumber = (int)((Math.Sqrt(temp) + nextIntegerNumber) / nextDenominator);
                int nextSubNum = nextIntegerNumber * nextDenominator - tempIntegerNum;

                FormulaItem fi = new FormulaItem()
                {
                    Denominator   = nextDenominator,
                    IntegerNumber = nextIntegerNumber,
                    Subtractor    = nextSubNum
                };
                if (dic.ContainsKey(fi.ToString()))
                {
                    break;
                }
                dic.Add(fi.ToString(), null);
                result.Sequrence.Add(fi);
                nextIntegerNumber = nextSubNum;
                tempDenominator   = nextDenominator;
            }
            return(result);
        }
Exemple #11
0
        private bool TryApplyStream(string word)
        {
            if (formulaItem != null)
            {
                return(false);
            }
            var stream = model?.Sources?.Where(s => s.Id == word).FirstOrDefault();

            if (stream != null)
            {
                formulaItem = new FormulaItem()
                {
                    Value      = word,
                    Substream  = stream.SourceType == Source.INDICATOR ? null : "",
                    ValueType  = FormulaItem.STREAM,
                    StreamType = stream.SourceType == Source.INDICATOR ? FormulaItem.INDICATOR : FormulaItem.INSTRUMENT
                };
                return(true);
            }
            return(TryApplyStreamWithSubstream(word));
        }
        public static SqrtResultModel FindNumSqrtInteger(int num)
        {
            int integerNumber = (int)(Math.Sqrt(num));
            if (integerNumber * integerNumber == num)
            {
                return null;
            };
            SqrtResultModel result = new SqrtResultModel()
            {
                IntegerNumber = integerNumber,
                Sequrence = new List<FormulaItem>()
            };
            Dictionary<string, object> dic = new Dictionary<string, object>();
            int nextIntegerNumber = integerNumber;
            int temp = num;
            int tempDenominator = 1;
            while (true)
            {
                int nextDenominator = temp - nextIntegerNumber * nextIntegerNumber;
                nextDenominator /= tempDenominator;
                int tempIntegerNum = nextIntegerNumber;
                nextIntegerNumber = (int)((Math.Sqrt(temp) + nextIntegerNumber) / nextDenominator);
                int nextSubNum = nextIntegerNumber * nextDenominator - tempIntegerNum;

                FormulaItem fi = new FormulaItem()
                {
                    Denominator = nextDenominator,
                    IntegerNumber = nextIntegerNumber,
                    Subtractor = nextSubNum
                };
                if (dic.ContainsKey(fi.ToString()))
                    break;
                dic.Add(fi.ToString(), null);
                result.Sequrence.Add(fi);
                nextIntegerNumber = nextSubNum;
                tempDenominator = nextDenominator;
            }
            return result;
        }
Exemple #13
0
        public bool ExportStuff(string formulaid)
        {
            using (var tx = this.m_UnitOfWork.BeginTransaction())
            {
                try
                {
                    IRepositoryBase <FormulaItem> itemResp = this.m_UnitOfWork.GetRepositoryBase <FormulaItem>();
                    IRepositoryBase <StuffType>   typeResp = this.m_UnitOfWork.GetRepositoryBase <StuffType>();
                    IList <StuffType>             list     = typeResp.Query().Where(m => m.TypeID == "StuffType").ToList();

                    IList <FormulaItem> items = itemResp.Query()
                                                .Where(m => m.FormulaID == formulaid)
                                                .ToList();
                    foreach (FormulaItem item in items)
                    {
                        itemResp.Delete(item);
                    }
                    foreach (StuffType item in list)
                    {
                        FormulaItem temp = new FormulaItem();
                        temp.StuffTypeID    = item.ID;
                        temp.StuffAmount    = 0;
                        temp.StandardAmount = 0;
                        temp.FormulaID      = formulaid;
                        itemResp.Add(temp);
                    }
                    tx.Commit();

                    return(true);
                }
                catch (Exception ex)
                {
                    tx.Rollback();
                    logger.Error(ex.Message);
                    return(false);
                }
            }
        }
Exemple #14
0
        private IParsingResult ApplyResult(IEnumerable <IParsingResult> results)
        {
            foreach (var result in results.OrderByDescending(r => r.Priority))
            {
                switch (result)
                {
                case DefaultStreamParsingResult defaultStreamResult:
                    formulaItem = new FormulaItem()
                    {
                        Substream  = defaultStreamResult.StreamName,
                        ValueType  = FormulaItem.STREAM,
                        StreamType = FormulaItem.INSTRUMENT
                    };
                    return(defaultStreamResult);

                case NumberParsingResult numberResult:
                    formulaItem = new FormulaItem()
                    {
                        Value      = numberResult.Number.ToString("0.0#", CultureInfo.InvariantCulture),
                        ValueType  = FormulaItem.VALUE,
                        StreamType = FormulaItem.NOT_USED
                    };
                    return(numberResult);

                case ParameterParsingResult parameterResult:
                    formulaItem = new FormulaItem()
                    {
                        Value      = parameterResult.ParameterName,
                        ValueType  = FormulaItem.PARAM,
                        StreamType = FormulaItem.NOT_USED
                    };
                    return(parameterResult);
                }
            }
            return(null);
        }
Exemple #15
0
        //public ActionResult SaveDeFormula(FormCollection forms) {
        //    var ids = forms["FormulaName"];
        //    var ere = forms["FormulaType"];
        //    return OperateResult(true, Lang.Msg_Operate_Success, true);
        //}

        /// <summary>
        /// 配合比设计后保存为理论配比
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public ActionResult SaveDeFormula(FormulaDesignModel data)
        {
            try
            {
                Formula temp = this.m_ServiceBase.Add(data.Formula);

                //保存水泥用量
                FormulaItem ceitem = new FormulaItem();
                ceitem.FormulaID      = temp.ID;
                ceitem.StandardAmount = data.CEAmount_S == null ? 0 : (decimal)data.CEAmount_S;
                ceitem.StuffAmount    = data.CEAmount_R == null ? 0 : (decimal)data.CEAmount_R;
                ceitem.StuffTypeID    = "CE";
                this.service.FormulaItem.Add(ceitem);
                //this.service.GetGenericService<FormulaItem>().Add(ceitem);

                //保存饮用水用量
                FormulaItem waitem = new FormulaItem();
                waitem.FormulaID      = temp.ID;
                waitem.StandardAmount = data.WaAmount_S == null ? 0 : (decimal)data.WaAmount_S;
                waitem.StuffAmount    = data.WaAmount_R == null ? 0 : (decimal)data.WaAmount_R;
                waitem.StuffTypeID    = "WA";
                this.service.FormulaItem.Add(waitem);

                //保存粗骨料用量
                FormulaItem caitem = new FormulaItem();
                caitem.FormulaID      = temp.ID;
                caitem.StandardAmount = data.CaAmount_S == null ? 0 : (decimal)data.CaAmount_S;
                caitem.StuffAmount    = data.CaAmount_R == null ? 0 : (decimal)data.CaAmount_R;
                caitem.StuffTypeID    = "CA";
                this.service.FormulaItem.Add(caitem);

                //保存细骨料用量
                FormulaItem faitem = new FormulaItem();
                faitem.FormulaID      = temp.ID;
                faitem.StandardAmount = data.FaAmount_S == null ? 0 : (decimal)data.FaAmount_S;
                faitem.StuffAmount    = data.FaAmount_R == null ? 0 : (decimal)data.FaAmount_R;
                faitem.StuffTypeID    = "FA";
                this.service.FormulaItem.Add(faitem);


                //保存掺合料一用量
                FormulaItem air1item = new FormulaItem();
                air1item.FormulaID      = temp.ID;
                air1item.StandardAmount = data.AIR1Amount_S == null ? 0 : (decimal)data.AIR1Amount_S;
                air1item.StuffAmount    = data.AIR1Amount_R == null ? 0 : (decimal)data.AIR1Amount_R;
                air1item.StuffTypeID    = "AIR1";
                this.service.FormulaItem.Add(air1item);

                //保存掺合料二用量
                FormulaItem air2item = new FormulaItem();
                air2item.FormulaID      = temp.ID;
                air2item.StandardAmount = data.AIR2Amount_S == null ? 0 : (decimal)data.AIR2Amount_S;
                air2item.StuffAmount    = data.AIR2Amount_R == null ? 0 : (decimal)data.AIR2Amount_R;
                air2item.StuffTypeID    = "AIR2";
                this.service.FormulaItem.Add(air2item);

                //保存外加剂一用量
                FormulaItem adm1item = new FormulaItem();
                adm1item.FormulaID      = temp.ID;
                adm1item.StandardAmount = data.ADM1Amount_S == null ? 0 : (decimal)data.ADM1Amount_S;
                adm1item.StuffAmount    = data.ADM1Amount_R == null ? 0 : (decimal)data.ADM1Amount_R;
                adm1item.StuffTypeID    = "ADM1";
                this.service.FormulaItem.Add(adm1item);

                //保存外加剂二用量
                FormulaItem adm2item = new FormulaItem();
                adm2item.FormulaID      = temp.ID;
                adm2item.StandardAmount = data.ADM2Amount_S == null ? 0 : (decimal)data.ADM2Amount_S;
                adm2item.StuffAmount    = data.ADM2Amount_R == null ? 0 : (decimal)data.ADM2Amount_R;
                adm2item.StuffTypeID    = "ADM2";
                this.service.FormulaItem.Add(adm2item);


                if (temp != null)
                {
                    return(OperateResult(true, Lang.Msg_Operate_Success, true));
                }
                else
                {
                    return(OperateResult(false, Lang.Msg_Operate_Failed, false));
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                return(OperateResult(false, ex.Message, false));
            }
        }
Exemple #16
0
            public override bool Equals(object obj)
            {
                FormulaItem item = (FormulaItem)obj;

                return(item.IntegerNumber == this.IntegerNumber && item.Subtractor == this.Subtractor && item.Denominator == this.Denominator);
            }