public async Task <bool> AddBaseFormulaAsync(BaseFormula baseFormula)
            {
                _context.BaseFormulas.Add(baseFormula);
                bool check = await _context.SaveChangesAsync() > 0;

                return(check);
            }
Пример #2
0
 public int UpdateBaseFormula(BaseFormula item)
 {
     using (var context = UnitOfWork.Get(Unity.ContainerName))
     {
         return(new BaseFormulaRepository(context).UpdateBaseFormula(item));
     }
 }
 public async Task <bool> DeleteBaseFormulaAsync(BaseFormula baseFormula)
 {
     _context.BaseFormulas.Remove(baseFormula);
     return(await _context.SaveChangesAsync() > 0);
 }
        public async Task <ActionResult <CalculatonResponse> > Caculate([FromBody] List <Operand> operands, int id)
        {
            //get user input
            try
            {
                List <Operand> request     = operands;
                BaseFormula    baseFormula = await _context.BaseFormulas.Where(x => x.ID == id).FirstOrDefaultAsync();

                List <Operand> operandT = await _context.Operands
                                          .Where(x => x.BaseFormulaID == id &&
                                                 x.Type != (int)OperandTypeValue.INPUT &&
                                                 x.OperandID == x.ID).ToListAsync();

                //parse inputed value
                VariableSet vSetBaseFormula = new VariableSet();
                var         ep = new ExpressionParser();
                foreach (var item in request)
                {
                    //keyValuesOperand.Add(item.Name, item.Value);
                    vSetBaseFormula.RegisterVariable(OperandType.Double, item.Name, item.Value);
                }

                //-----------------------------
                if (operandT != null)
                {
                    foreach (var item in operandT)
                    {
                        if (item.Childs != null)
                        {
                            List <Operand> childs = item.Childs.ToList();
                            if (childs.Count > 0)
                            {
                                Console.WriteLine(item.Name + "x " + item.Value);
                                vSetBaseFormula = await GetOperandChildsAsync(item, vSetBaseFormula);
                            }
                            else
                            {
                                var compiledExpression = ep.Parse(item.Expression);
                                var resultStack        = compiledExpression.Evaluate(vSetBaseFormula);
                                var tmp = Convert.ToDouble(resultStack.Pop().GetValue());
                                if (vSetBaseFormula.Where(x => x.VariableName.Equals(item.Name)).FirstOrDefault() == null)
                                {
                                    vSetBaseFormula.RegisterVariable(OperandType.Double, item.Name, tmp);
                                }
                            }
                        }
                    }
                }

                var ce = ep.Parse(baseFormula.Expression);
                foreach (var item in vSetBaseFormula)
                {
                    Console.WriteLine(item.VariableName + " " + item.Value);
                }
                var    resul = ce.Evaluate(vSetBaseFormula);
                double value = Convert.ToDouble(resul.Pop().GetValue());
                operandT.AddRange(request);
                List <Operand>     resultOp           = operandT.Where(x => x.OperandID == x.ID).ToList();
                CalculatonResponse calculatonResponse = new CalculatonResponse();
                calculatonResponse.Operands = resultOp;
                calculatonResponse.Result   = value;
                GoogleSheetData.AddEntries(baseFormula.Name);
                return(Ok(calculatonResponse));
            }
            catch (Exception e)
            {
                var response = new { Message = e.Message };
                //LogException(e);
                return(StatusCode(StatusCodes.Status500InternalServerError, response));
            }
        }
Пример #5
0
 /// <summary>
 /// 更新公式
 /// </summary>
 /// <param name="item">公式实体</param>
 /// <returns></returns>
 public int UpdateBaseFormula(BaseFormula item)
 {
     return(Update <BaseFormula>(item));
 }
Пример #6
0
 /// <summary>
 /// 添加公式
 /// </summary>
 /// <param name="item">公式实体</param>
 /// <returns></returns>
 public long AddBaseFormula(BaseFormula item)
 {
     return(Add <BaseFormula, long>(item, p => p.AttID));
 }