예제 #1
0
        public override async Task <VoidRsp> CreateAsync(UserReq user)
        {
            VoidRsp rsp = new VoidRsp();

            rsp.Status  = 0;
            rsp.Message = "test";
            try
            {
                Logger.Debug("receive CreateAsync,data=" + Google.Protobuf.JsonFormatter.Default.Format(user));

                UserReq existing = await this._repo.FindByNameAsync(user.Account);

                if (existing != null)
                {
                    Logger.Debug("user already exists:{0}", user.Account);
                }
                Assert.IsNotNull(existing, "user already exists:" + user.Account);

                user.Password = CryptographyManager.Md5Encrypt(user.Account + "$" + user.Password);
                Logger.Debug("saving db");
                await this._repo.SaveUserAsync(user);

                Logger.Debug("saving db success");
            }
            catch (Exception ex) {
                rsp.Status  = -1;
                rsp.Message = ex.Message;
            }

            return(rsp);
        }
예제 #2
0
        public override async Task <VoidRsp> SaveAsync(AccountReq req)
        {
            VoidRsp rsp = new VoidRsp();

            //数据校验
            try
            {
                using (var scope = _accountRep.GetTransScope())
                {
                    await this._accountRep.UpdateUserInfoAsync(req);

                    req.Saving.Account = req.Name;

                    await this._accountRep.UpdateAccountSavingAsync(req.Saving);


                    await this._accountRep.DeleteIncomesAsync(req.Name);

                    await this._accountRep.DeleteExpensesAsync(req.Name);

                    await this._accountRep.AddIncomesAsync(req.Name, req.Incomes);

                    await this._accountRep.AddExpensesAsync(req.Name, req.Expenses);

                    Logger.Debug("SaveAsync Receieve Data:{0}", req.ToString());
                    //调用远端服务
                    var statClient = ClientProxy.GetClient <StatisticServiceClient>();
                    var statRsp    = await statClient.UpdateStatisticsAsync(req);

                    if (statRsp.Status != 0)
                    {
                        rsp.Status  = statRsp.Status;
                        rsp.Message = statRsp.Message;
                        return(rsp);
                    }
                    scope.Complete();
                }



                Logger.Debug("add account stat success");
            }
            catch (Exception ex) {
                rsp.Status  = -1;
                rsp.Message = ex.Message + ex.StackTrace;

                Logger.Error(ex, "save error:" + ex.Message + ex.StackTrace);
            }

            return(new VoidRsp());
        }
예제 #3
0
        public override async Task <VoidRsp> UpdateStatisticsAsync(AccountReq request)
        {
            var rsp = new VoidRsp();

            try
            {
                DataPoint dp = new DataPoint()
                {
                    Account = request.Name,
                    Date    = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                };
                double incomeAmout  = 0;
                double expenseAmout = 0;

                foreach (var income in request.Incomes)
                {
                    var item = new ItemMetric()
                    {
                        Title  = income.Title,
                        Amount = ConvertToRMB(income.Currency, income.Amount)
                    };
                    dp.Incomes.Add(item);
                    incomeAmout += item.Amount;
                }

                foreach (var expense in request.Expenses)
                {
                    var item = new ItemMetric()
                    {
                        Title  = expense.Title,
                        Amount = ConvertToRMB(expense.Currency, expense.Amount)
                    };
                    dp.Expenses.Add(item);
                    expenseAmout += item.Amount;
                }

                var incomeDps = new DataPointStat()
                {
                    Amount     = incomeAmout,
                    StatMetric = StatMetric.Saving
                };
                var expenseDps = new DataPointStat()
                {
                    Amount     = expenseAmout,
                    StatMetric = StatMetric.Saving
                };
                var savingDps = new DataPointStat()
                {
                    Amount     = ConvertToRMB(request.Saving.Currency, request.Saving.Amount),
                    StatMetric = StatMetric.Saving
                };
                dp.Stat.Add(incomeDps);
                dp.Stat.Add(expenseDps);
                dp.Stat.Add(savingDps);

                //操作数据库

                using (var trans = _repo.GetTransScope())
                {
                    int dpId = await _repo.SaveDataPointAsync(dp);

                    if (dpId <= 0)
                    {
                        throw new RpcBizException("save datapoint error");
                    }
                    _repo.SaveDataPointIncomesAsync(dpId, dp.Incomes);
                    _repo.SaveDataPointExpensesAsync(dpId, dp.Expenses);
                    _repo.SaveDataPointRateAsync(dpId, _rateService.GetRates());
                    _repo.SaveDataPointStatAsync(dpId, dp.Stat);
                    trans.Complete();
                }
            }
            catch (Exception ex)
            {
                rsp.Status  = -1;
                rsp.Message = ex.Message;
                Logger.Error(ex, "Update Statistics Erorr:" + ex.Message + ex.StackTrace);
            }

            return(rsp);
        }