public CommonController(SiteSettingService settingService, UserService userService, ImageStorageService imageService, ImageProcessor imageProcessor, ILogger <CommonController> logger) : base(userService) { _settingService = settingService; _imageService = imageService; _imageProcessor = imageProcessor; _logger = logger; }
public void Execute(IJobExecutionContext context) { Entity.Entities entity = new Entities(); var settings = new SiteSettingService().GetSiteSettings(); var expried = settings.SalesReturnTimeout; var now = DateTime.Now; var exday = now.AddDays(-expried); var t = entity.BrokerageIncomeInfo.Where(a => a.Status == Model.BrokerageIncomeInfo.BrokerageStatus.NotSettled); var order = entity.OrderInfo.Where(b => b.OrderStatus == Model.OrderInfo.OrderOperateStatus.Finish && b.FinishDate.Value <= exday); var models = t.Join(order, a => a.OrderId, b => b.Id, (a, b) => new { a.Id, a.OrderId, a.OrderTime, a.OrderItemId, a.Brokerage, a.Himall_BrokerageRefund, a.ProductID, a.UserId, b.FinishDate, b.OrderStatus, }).ToList(); foreach (var model in models) { using (TransactionScope transaction = new TransactionScope()) { IMemberCapitalService capitalServicer = Himall.ServiceProvider.Instance <IMemberCapitalService> .Create; CapitalDetailModel capita = new CapitalDetailModel { UserId = model.UserId, SourceType = CapitalDetailInfo.CapitalDetailType.Brokerage, CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; capita.Amount = model.Brokerage; var refund = model.Himall_BrokerageRefund.FirstOrDefault(); if (refund != null) { capita.Amount = model.Brokerage - refund.Brokerage; } var paid = entity.ProductBrokerageInfo.Where(a => a.ProductId == model.ProductID).FirstOrDefault(); var b = entity.BrokerageIncomeInfo.Where(a => a.OrderItemId == model.OrderItemId && a.Status == BrokerageIncomeInfo.BrokerageStatus.NotSettled).FirstOrDefault(); if (b != null) { b.Status = BrokerageIncomeInfo.BrokerageStatus.Settled; b.SettlementTime = DateTime.Now; paid.BrokerageAmount += capita.Amount; capita.Remark = "分佣佣金,预约单Id:" + model.OrderId + ",诊疗项目ID:" + model.ProductID; capita.SourceData = model.OrderId.HasValue ? model.OrderId.Value.ToString() : ""; capitalServicer.AddCapital(capita); //已结算累加 entity.SaveChanges(); transaction.Complete(); } } } }
public CommonController(SiteSettingService settingService, UserService userService, ImageStorageService imageService) : base(userService) { _settingService = settingService; _imageService = imageService; }
public void AutoSettlement() { //using (TransactionScope transaction = new TransactionScope()) //{ try { Himall.Entity.Entities entity = new Entities(); var checkDate = DateTime.MinValue; Log.Debug("AccountJob : start"); // var settings = new SiteSettingService().GetSiteSettings(); var settings = new SiteSettingService().GetSiteSettingsByObjectCache(); if (settings.WeekSettlement < 1) { Log.Error("结算周期设置不正确! "); return; } var account = entity.AccountInfo.OrderByDescending(a => a.Id).FirstOrDefault(); if (account == null) { //第一笔结算数据 checkDate = GetDate(entity, checkDate).Date; } else { checkDate = account.EndDate.Date;//上一次结束日期(2015-11-23 00:00:00),作为开始时间 } if (checkDate.Equals(DateTime.MinValue)) { return; } DateTime startDate = checkDate.Date; DateTime endDate = startDate.AddDays(settings.WeekSettlement); Log.Debug("AccountJob:endDate" + endDate + "DateTime:" + DateTime.Now.Date + "result:" + (endDate < DateTime.Now.Date)); while (endDate < DateTime.Now) { //结算日期内的待结算预约单 不计算开始时间,防止漏单 var pendingSetllementData = entity.PendingSettlementOrdersInfo.Where(c => c.OrderFinshTime < endDate).OrderByDescending(c => c.OrderFinshTime).ToList(); Log.Debug("Count:" + pendingSetllementData.Count()); var accountInfo = new AccountInfo(); accountInfo.ShopId = 0; accountInfo.ShopName = "系统定时任务结算"; accountInfo.AccountDate = DateTime.Now; accountInfo.StartDate = startDate; accountInfo.EndDate = endDate; accountInfo.Status = AccountInfo.AccountStatus.Accounted; accountInfo.ProductActualPaidAmount = pendingSetllementData.Sum(a => a.ProductsAmount); accountInfo.FreightAmount = pendingSetllementData.Sum(b => b.FreightAmount); accountInfo.CommissionAmount = pendingSetllementData.Sum(c => c.PlatCommission); accountInfo.RefundCommissionAmount = pendingSetllementData.Sum(d => d.PlatCommissionReturn); accountInfo.RefundAmount = pendingSetllementData.Sum(e => e.RefundAmount); accountInfo.AdvancePaymentAmount = 0; accountInfo.Brokerage = pendingSetllementData.Sum(f => f.DistributorCommission); accountInfo.ReturnBrokerage = pendingSetllementData.Sum(g => g.DistributorCommissionReturn); accountInfo.PeriodSettlement = pendingSetllementData.Sum(h => h.SettlementAmount); //结算主表汇总数据 foreach (var item in pendingSetllementData) { var accountDetail = new AccountDetailInfo { //AccountId = result.Id, ShopId = item.ShopId, ShopName = item.ShopName, OrderType = Himall.Model.AccountDetailInfo.EnumOrderType.FinishedOrder, Date = DateTime.Now, OrderFinshDate = item.OrderFinshTime, OrderId = item.OrderId, ProductActualPaidAmount = item.ProductsAmount, FreightAmount = item.FreightAmount, CommissionAmount = item.PlatCommission, RefundCommisAmount = item.PlatCommissionReturn, OrderRefundsDates = "", RefundTotalAmount = item.RefundAmount, OrderAmount = item.OrderAmount, BrokerageAmount = item.DistributorCommission, ReturnBrokerageAmount = item.DistributorCommissionReturn, SettlementAmount = item.SettlementAmount, PaymentTypeName = item.PaymentTypeName }; accountInfo.Himall_AccountDetails.Add(accountDetail); //var detail = entity.AccountDetailInfo.Add(accountDetail); } entity.AccountInfo.Add(accountInfo); entity.SaveChanges(); Random r = new Random(); var plat = entity.PlatAccountInfo.FirstOrDefault();//平台账户 //写平台资金明细表 var platAccountItem = new PlatAccountItemInfo(); platAccountItem.AccoutID = plat.Id; platAccountItem.CreateTime = DateTime.Now; platAccountItem.AccountNo = string.Format("{0:yyyyMMddHHmmssfff}{1}", DateTime.Now, r.Next(1000, 9999)); platAccountItem.Amount = accountInfo.CommissionAmount - accountInfo.RefundCommissionAmount; //平台佣金-平台佣金退还 platAccountItem.Balance = plat.Balance + platAccountItem.Amount; //账户余额+平台佣金-平台佣金退还 platAccountItem.TradeType = PlatAccountType.SettlementIncome; platAccountItem.IsIncome = true; platAccountItem.ReMark = DateTime.Now + "平台结算" + accountInfo.Id; platAccountItem.DetailId = accountInfo.Id.ToString(); entity.PlatAccountItemInfo.Add(platAccountItem); if (plat != null) { //平台账户总金额(加这次平台的佣金) plat.Balance += platAccountItem.Amount; //平台佣金-平台佣金退还 //平台待结算金额 plat.PendingSettlement -= accountInfo.PeriodSettlement; //本次结算的总金额。//platAccountItem.Amount;//平台佣金-平台佣金退还 //平台已结算金额 plat.Settled += accountInfo.PeriodSettlement; //本次结算的总金额。//platAccountItem.Amount;//平台佣金-平台佣金退还 } var shoppendingSetllement = pendingSetllementData.GroupBy(a => a.ShopId).ToList(); foreach (var item in shoppendingSetllement) { //商户资金明细表 var shopAccount = entity.ShopAccountInfo.Where(a => a.ShopId == item.Key).FirstOrDefault(); var shopAccountItemInfo = new ShopAccountItemInfo(); shopAccountItemInfo.AccoutID = shopAccount.Id; shopAccountItemInfo.AccountNo = string.Format("{0:yyyyMMddHHmmssfff}{1}", DateTime.Now, r.Next(1000, 9999)); shopAccountItemInfo.ShopId = shopAccount.ShopId; shopAccountItemInfo.ShopName = shopAccount.ShopName; shopAccountItemInfo.CreateTime = DateTime.Now; shopAccountItemInfo.Amount = item.Sum(a => a.SettlementAmount); //结算金额 shopAccountItemInfo.Balance = shopAccount.Balance + shopAccountItemInfo.Amount;; //账户余额+结算金额 shopAccountItemInfo.TradeType = ShopAccountType.SettlementIncome; shopAccountItemInfo.IsIncome = true; shopAccountItemInfo.ReMark = "诊所结算明细" + accountInfo.Id;; shopAccountItemInfo.DetailId = accountInfo.Id.ToString(); shopAccountItemInfo.SettlementCycle = settings.WeekSettlement; entity.ShopAccountItemInfo.Add(shopAccountItemInfo); if (shopAccount != null) { shopAccount.Balance += shopAccountItemInfo.Amount; //结算金额 shopAccount.PendingSettlement -= shopAccountItemInfo.Amount; shopAccount.Settled += shopAccountItemInfo.Amount; //平台佣金-平台佣金退还 } } entity.PendingSettlementOrdersInfo.RemoveRange(pendingSetllementData);//结算完了删除已结算数据 entity.SaveChanges(); //transaction.Complete(); account = entity.AccountInfo.Where(c => c.StartDate >= startDate).OrderByDescending(c => c.EndDate).FirstOrDefault(); if (account != null) { checkDate = account.EndDate.Date;//上一次结束日期(2015-11-23 00:00:00),作为开始时间 } else { checkDate = startDate.AddDays(settings.WeekSettlement); } startDate = checkDate.Date; endDate = startDate.AddDays(settings.WeekSettlement); } } catch (System.Data.Entity.Validation.DbEntityValidationException ex) { Log.Error("AccountJob : " + ex.Message); } catch (Exception ex) { Log.Error("AccountJob : " + ex.Message); } }