/// <summary>
        ///     Edits a bill in the database.
        /// </summary>
        /// <param name="bill">The edited bill.</param>
        /// <returns>The updated bill data model.</returns>
        public async Task <BillDataModel> EditBill(BillDataModel bill)
        {
            using (var context = new DatabaseContext())
            {
                var toEdit = await GetBill(bill.Id);

                if (toEdit == null)
                {
                    throw new Exception(Bill.Error_CouldNotFindBill);
                }

                bill.CreationTime = toEdit.CreationTime;

                var category = await categoryRepository.GetOrAdd(bill.Category);

                bill.Category   = category;
                bill.CategoryId = category.Id;

                context.Bills.Attach(bill);
                context.Entry(bill).State = EntityState.Modified;

                var rows = await context.SaveChangesAsync();

                return(rows > 0 ? bill : null);
            }
        }
Example #2
0
        public Boolean SendTemplateMsg(BillDataModel billData)
        {
            var accessToken = AccessTokenContainer.GetAccessToken(Config.APPID);
            //由于源代码采用分支管理,这里将不再编写兼容所有模板消息的代码
            var templateId = "KpddG3wzOIVa5WOqFIYO4rBQL7knr0UJltcUWUqokAc";

            var data = new
            {
                first    = new TemplateDataItem(""),
                keyword1 = new TemplateDataItem(billData.ACC_MONEY),
                keyword2 = new TemplateDataItem(billData.ACC_WATER),
                remark   = new TemplateDataItem(billData.BILLING_MONTH.ToString())
            };

            string url = "";

            SendTemplateMessageResult result = TemplateApi.SendTemplateMessage(Config.APPID, billData.openID, templateId, url, data);

            if (result.errmsg == "ok")
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #3
0
        /// <summary>
        /// 获取账单信息并推送账单
        /// </summary>
        public void GetMsgData()
        {
            Boolean isContinue = true;

            while (isContinue)
            {
                String sql = @"select top 100
                                                    ID,
                                                    openID ,
                                                    CARD_ID ,
                                                    CARD_ADDRESS ,
                                                    ACC_MONEY ,
                                                    ACC_WATER ,
                                                    BILLING_MONTH
                                            from    dbo.PushBill
                                            where   State = 0
                                                    and SendNum < 4;";

                try
                {
                    DataTable dt = SqlHelper.ExecuteDataset(Config.WeChatConnString, CommandType.Text, sql).Tables[0];
                    if (dt != null && dt.Rows.Count > 0)
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            BillDataModel model = new BillDataModel();
                            foreach (var item in model.GetType().GetProperties())
                            {
                                if (dr.Table.Columns.Contains(item.Name))
                                {
                                    if (DBNull.Value != dr[item.Name])
                                    {
                                        item.SetValue(model, Convert.ChangeType(dr[item.Name], item.PropertyType), null);
                                    }
                                }
                            }

                            if (SendTemplateMsg(model))
                            {
                                SetState(dr["ID"].ToString());
                            }
                            else  //修改推送次数
                            {
                                UpdateSendNum(dr["ID"].ToString());
                            }
                        }
                    }
                    else
                    {
                        isContinue = false;
                    }
                }
                catch (Exception ex)
                {
                    isContinue = false;
                    _logger.Error("推送账单出错,错误信息:" + ex.Message + "堆栈信息:" + ex.StackTrace);
                }
            }
        }
        public async Task <IActionResult> DwonLoadTosql([FromBody] BillDataModel request)
        {
            var hosts = HttpContext.Request.Host;

            _Apiloger.LogDebug($"{hosts.Host}正在请求SortArray 端口是 {hosts.Port},{hosts.Value}");
            var Count = await _downLoadInterface.GetFXStmtLines(request.BillDate);

            return(Ok(new SucessModelCount(Count)));
        }
Example #5
0
        private static string PrepareQuery(BillDataModel bill)
        {
            string searchTerm = bill.Title;

            if (bill.Title.Contains("Act"))
            {
                searchTerm = searchTerm.ToLower().Replace("act", "bill");
                searchTerm = Regex.Replace(searchTerm, @"\d+$", String.Empty);
            }
            return(searchTerm);
        }
Example #6
0
        /// <summary>
        ///     Creates an instance of the <see cref="EditBillResponse" /> class.
        /// </summary>
        /// <param name="model">The data model.</param>
        /// <param name="requestReference">The request reference.</param>
        /// <returns>
        ///     The response object.
        /// </returns>
        public EditBillResponse NewEditBillResponse(BillDataModel model, Guid requestReference)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            if (requestReference.Equals(Guid.Empty))
            {
                throw new ArgumentNullException(nameof(requestReference));
            }

            return(new EditBillResponse {
                Bill = BillDataModelToProxy(model), RequestReference = requestReference
            });
        }
Example #7
0
 /// <summary>
 ///     Converts a bill data model to a proxy.
 /// </summary>
 /// <param name="model">The model.</param>
 /// <returns>The proxy.</returns>
 private static BillProxy BillDataModelToProxy(BillDataModel model)
 {
     return(new BillProxy
     {
         Amount = model.Amount,
         Category = new CategoryProxy {
             Id = model.Category.Id, Name = model.Category.Name
         },
         CategoryId = model.CategoryId,
         Id = model.Id,
         Name = model.Name,
         ReoccurringPeriod = model.ReoccurringPeriod,
         StartDate = model.StartDate,
         UserId = model.UserId
     });
 }
Example #8
0
        /// <summary>
        ///     Creates a new instance of the <see cref="GetBillResponse" />class.
        /// </summary>
        /// <param name="bill">The bill.</param>
        /// <param name="requestReference">The request reference.</param>
        /// <returns>The response object.</returns>
        public GetBillResponse NewGetBillResponse(BillDataModel bill, Guid requestReference)
        {
            if (bill == null)
            {
                throw new ArgumentNullException(nameof(bill));
            }

            if (requestReference.Equals(Guid.Empty))
            {
                throw new ArgumentNullException(nameof(requestReference));
            }

            return(new GetBillResponse {
                RequestReference = requestReference, Bill = BillDataModelToProxy(bill)
            });
        }
Example #9
0
 public BillViewModel MapBillDataModel(BillDataModel model)
 {
     Id            = model.Id;
     Stage         = model.Stage;
     Title         = model.Title;
     Description   = model.Description;
     House         = model.House;
     BillType      = model.BillType;
     UpdatedDate   = model.UpdatedDate;
     Url           = model.Url;
     SocialScore   = model.SocialScore;
     EconomicScore = model.EconomicScore;
     IsNew         = model.IsNew;
     IsUpdated     = model.IsUpdated;
     return(this);
 }
        /// <summary>
        ///     Adds a bill to the database.
        /// </summary>
        /// <param name="dataModel">The data model.</param>
        /// <returns>
        ///     The bill data model.
        /// </returns>
        public async Task <BillDataModel> AddBill(BillDataModel dataModel)
        {
            using (var context = new DatabaseContext())
            {
                dataModel.Id = Guid.NewGuid();

                var category = await categoryRepository.GetOrAdd(dataModel.Category);

                dataModel.Category   = category;
                dataModel.CategoryId = category.Id;

                dataModel.CreationTime = DateTime.Now;
                context.Bills.Add(dataModel);

                var rows = await context.SaveChangesAsync();

                return(rows > 0 ? dataModel : null);
            }
        }
Example #11
0
        public void SetUp()
        {
            validGuid      = Guid.NewGuid();
            validDataModel = new BillDataModel
            {
                Amount   = 1,
                Category =
                    new CategoryDataModel
                {
                    CreationTime = DateTime.Now,
                    Id           = validGuid,
                    Name         = "TEST"
                },
                CategoryId        = validGuid,
                CreationTime      = DateTime.Now,
                Id                = validGuid,
                Name              = "TEST",
                ReoccurringPeriod = 1,
                StartDate         = DateTime.Now,
                UserId            = validGuid
            };

            validProxy = new BillProxy
            {
                Amount   = 1,
                Category = new CategoryProxy {
                    Id = validGuid, Name = "TEST"
                },
                CategoryId        = validGuid,
                Id                = validGuid,
                Name              = "TEST",
                ReoccurringPeriod = 1,
                StartDate         = DateTime.Now,
                UserId            = validGuid
            };

            assembler = new BillAssembler();
        }
Example #12
0
        public void SetUp()
        {
            userId        = Guid.NewGuid();
            expenditureId = Guid.NewGuid();

            validData = new List <BillDataModel>();

            invalidDeleteBillRequest = new DeleteBillRequest();
            invalidEditBillRequest   = new EditBillRequest();
            invalidGetBillsForUserForMonthRequest = new GetBillsForUserForMonthRequest();
            invalidGetBillsForUserRequest         = new GetBillsForUserRequest();
            invalidGetBillRequest = new GetBillRequest();
            invalidAddBillRequest = new AddBillRequest();

            validBillDataModel =
                new BillDataModel
            {
                Amount   = 1,
                Category =
                    new CategoryDataModel
                {
                    CreationTime = DateTime.Now,
                    Id           = Guid.NewGuid(),
                    Name         = "TEST"
                },
                CreationTime = DateTime.Now,
                CategoryId   = Guid.NewGuid(),
                Id           = Guid.NewGuid(),
                UserId       = Guid.NewGuid()
            };

            expenditureProxy = new BillProxy
            {
                Amount   = 1.0,
                Category =
                    new CategoryProxy {
                    Id = Guid.NewGuid(), Name = "TEST"
                },
                CategoryId = Guid.NewGuid(),
                Id         = Guid.NewGuid(),
                UserId     = Guid.NewGuid()
            };

            validDeleteBillRequest =
                new DeleteBillRequest {
                BillId = Guid.NewGuid(), Username = "******"
            };

            validGetBillsForUserForMonthRequest =
                new GetBillsForUserForMonthRequest {
                MonthNumber = 1, UserId = userId, Username = "******"
            };

            validAddBillRequest =
                new AddBillRequest {
                Bill = expenditureProxy, Username = "******"
            };

            validGetBillsForUserRequest = new GetBillsForUserRequest {
                UserId = userId, Username = "******"
            };

            validGetBillRequest = new GetBillRequest {
                BillId = expenditureId, Username = "******"
            };

            validEditBillRequest =
                new EditBillRequest {
                Bill = expenditureProxy, Username = "******"
            };

            validGetBillsForUserResponse =
                new GetBillsForUserResponse {
                Bills = new List <BillProxy> {
                    expenditureProxy
                }
            };
            validGetBillResponse = new GetBillResponse {
                Bill = expenditureProxy
            };
            validAddBillResponse = new AddBillResponse {
                Bill = expenditureProxy
            };
            validEditBillResponse = new EditBillResponse {
                Bill = expenditureProxy
            };
            validDeleteBillResponse = new DeleteBillResponse {
                DeleteSuccess = true
            };
            validGetBillsForUserForMonthResponse =
                new GetBillsForUserForMonthResponse {
                Data = new List <KeyValuePair <DateTime, double> > {
                    new KeyValuePair <DateTime, double>(DateTime.Now, 1.0)
                }
            };

            assembler       = Substitute.For <IBillAssembler>();
            repository      = Substitute.For <IBillRepository>();
            dataTransformer = Substitute.For <IBillDataTransformer>();

            repository.AddBill(validBillDataModel).Returns(validBillDataModel);
            repository.AddBill(null).Throws(new Exception("TEST"));

            repository.DeleteBill(validDeleteBillRequest.BillId).Returns(true);
            repository.DeleteBill(invalidDeleteBillRequest.BillId).Throws(new Exception("TEST"));

            repository.EditBill(validBillDataModel).Returns(validBillDataModel);
            repository.EditBill(null).Throws(new Exception("TEST"));

            repository.GetBill(expenditureId).Returns(validBillDataModel);
            repository.GetBill(Guid.Empty).Throws(new Exception("TEST"));

            repository.GetBillsForUser(validGetBillsForUserRequest.UserId)
            .Returns(new List <BillDataModel> {
                validBillDataModel
            });
            repository.GetBillsForUser(Guid.Empty).Throws(new Exception("TEST"));

            dataTransformer.GetOutgoingBillsForMonth(Arg.Any <int>(), Arg.Any <List <BillDataModel> >())
            .Returns(
                new List <KeyValuePair <DateTime, double> > {
                new KeyValuePair <DateTime, double>(DateTime.Now, 1.0)
            });

            dataTransformer.GetBillCategoryChartData(Arg.Any <List <BillDataModel> >())
            .Returns(new List <KeyValuePair <string, int> > {
                new KeyValuePair <string, int>()
            });

            assembler.NewAddBillResponse(validBillDataModel, validAddBillRequest.RequestReference)
            .Returns(validAddBillResponse);

            assembler.NewDeleteBillResponse(true, validDeleteBillRequest.BillId)
            .Returns(validDeleteBillResponse);

            assembler.NewEditBillResponse(
                validBillDataModel,
                validEditBillRequest.RequestReference)
            .Returns(validEditBillResponse);

            assembler.NewBillDataModel(expenditureProxy).Returns(validBillDataModel);

            assembler.NewGetBillsForUserForMonthResponse(
                Arg.Any <List <KeyValuePair <DateTime, double> > >(),
                validGetBillsForUserForMonthRequest.RequestReference)
            .Returns(validGetBillsForUserForMonthResponse);

            assembler.NewGetBillsForUserResponse(
                Arg.Any <List <BillDataModel> >(),
                validGetBillsForUserRequest.RequestReference)
            .Returns(validGetBillsForUserResponse);

            assembler.NewDeleteBillResponse(true, validDeleteBillRequest.RequestReference)
            .Returns(validDeleteBillResponse);

            assembler.NewGetBillResponse(validBillDataModel, validGetBillRequest.RequestReference)
            .Returns(validGetBillResponse);

            errorHelper = Substitute.For <IErrorHelper>();

            errorHelper.Create(Arg.Any <Exception>(), Arg.Any <string>(), Arg.Any <Type>(), Arg.Any <string>())
            .Returns(new ResponseErrorWrapper());
            errorHelper.Create(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <Type>(), Arg.Any <string>())
            .Returns(new ResponseErrorWrapper());

            orchestrator = new BillOrchestrator(assembler, repository, dataTransformer, errorHelper);
        }