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); }
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); }
/// <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"); }
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); }
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); }
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; }
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); } } }
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); }
//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)); } }
public override bool Equals(object obj) { FormulaItem item = (FormulaItem)obj; return(item.IntegerNumber == this.IntegerNumber && item.Subtractor == this.Subtractor && item.Denominator == this.Denominator); }