private void Sava() { Model.AccountInfo account = new Model.AccountInfo(this.AddTime, this.Money, this.Remark); //MainViewModel.Moneys.Add(account); this.CloseCommand.Execute(null); }
private void CalculationMoney(DateTime startDate, DateTime endDate) { Entity.Entities entity = new Entities(); //退货单的详细 var hasRefundOrdersDetails = ( from p in entity.OrderInfo join o in entity.OrderRefundInfo on p.Id equals o.OrderId join x in entity.OrderItemInfo on o.OrderId equals x.OrderId where p.OrderStatus == Himall.Model.OrderInfo.OrderOperateStatus.Finish && o.ManagerConfirmDate >= startDate && o.ManagerConfirmDate < endDate && o.ManagerConfirmStatus == Himall.Model.OrderRefundInfo.OrderRefundConfirmStatus.Confirmed select new { Order = p, OrderRefund = o, OrderItem = x } ).Distinct().ToList(); //符合标准的所有的订单 var ordersDetails = ( from p in entity.OrderInfo join o in entity.OrderItemInfo on p.Id equals o.OrderId where p.OrderStatus == Himall.Model.OrderInfo.OrderOperateStatus.Finish && p.FinishDate >= startDate && p.FinishDate < endDate select new { Order = p, OrderItem = o } ).ToList(); //分组店铺统计 List <long> shopIds = new List <long>(); shopIds.AddRange(hasRefundOrdersDetails.Select(c => c.Order.ShopId)); shopIds.AddRange(ordersDetails.Select(c => c.Order.ShopId)); //shopIds.AddRange(finishedPurchaseAgreement.Select(c => c.ShopId)); shopIds = shopIds.Distinct().ToList(); using (TransactionScope transaction = new TransactionScope()) { try { //插入Himall_Accounts 统计表 foreach (var shopId in shopIds) { var orders = ordersDetails.Where(c => c.Order.ShopId == shopId).Select(c => c.Order).Distinct().ToList(); decimal productActualPaidAmount = orders.Sum(c => c.ProductTotalAmount) - orders.Sum(c => c.DiscountAmount); //退单的运费不要加 decimal freightAmount = orders.Sum(c => c.Freight); //佣金 decimal commissionAmount = CalculationTotalCommission(ordersDetails.Where(c => c.Order.ShopId == shopId).Select(c => c.OrderItem).Distinct().ToList()); //分销佣金 decimal Brokerage = CalculationTotalBrokerage(ordersDetails.Where(c => c.Order.ShopId == shopId).Select(c => c.OrderItem).Distinct().ToList()); decimal ReturnBrokerage = CalculationTotalRefundBrokerage(hasRefundOrdersDetails.Where(c => c.OrderRefund.ShopId == shopId).Select(c => c.OrderRefund).Distinct().ToList()); decimal refundCommissionAmount = CalculationTotalRefundCommission(hasRefundOrdersDetails.Where(c => c.OrderRefund.ShopId == shopId).Select(c => c.OrderItem).Distinct().ToList()); decimal refundAmount = hasRefundOrdersDetails.Where(c => c.OrderRefund.ShopId == shopId).Select(c => c.OrderRefund).Distinct().Sum(c => c.Amount); //decimal advancePaymentAmount = finishedPurchaseAgreement.Where(c => c.ShopId == shopId).Sum(c => c.AdvancePayment.Value); //decimal accMetaAmount = acc.Where(e => e.ShopId == shopId).FirstOrDefault().Price;//服务费用 //本期应结=商品实付总额+运费—佣金—退款金额+退还佣金-服务费用-分销佣金+退还分销佣金 decimal periodSettlement = productActualPaidAmount + freightAmount - commissionAmount - refundAmount + refundCommissionAmount - Brokerage + ReturnBrokerage; var accountInfo = new Model.AccountInfo(); accountInfo.ShopId = shopId; accountInfo.ShopName = entity.ShopInfo.Where(c => c.Id == shopId).FirstOrDefault().ShopName; accountInfo.AccountDate = DateTime.Now; accountInfo.StartDate = startDate; accountInfo.EndDate = endDate.AddSeconds(-1); accountInfo.Status = Model.AccountInfo.AccountStatus.UnAccount; accountInfo.ProductActualPaidAmount = productActualPaidAmount; accountInfo.FreightAmount = freightAmount; accountInfo.CommissionAmount = commissionAmount; accountInfo.RefundCommissionAmount = refundCommissionAmount; accountInfo.RefundAmount = refundAmount; //accountInfo.AdvancePaymentAmount = advancePaymentAmount; accountInfo.PeriodSettlement = periodSettlement; accountInfo.Brokerage = Brokerage; accountInfo.ReturnBrokerage = ReturnBrokerage; accountInfo.Remark = string.Empty; entity.AccountInfo.Add(accountInfo); //插入Himall_AccountDetails 订单的结算详情表 //含有退款的订单 foreach (var order in hasRefundOrdersDetails.Where(c => c.Order.ShopId == shopId).Select(c => c.Order).Distinct().ToList()) { var accountDetail = new Model.AccountDetailInfo(); accountDetail.Himall_Accounts = accountInfo; accountDetail.ShopId = order.ShopId; accountDetail.Date = order.FinishDate.Value; accountDetail.OrderType = Model.AccountDetailInfo.EnumOrderType.ReturnOrder; accountDetail.OrderId = order.Id; accountDetail.ProductActualPaidAmount = order.ProductTotalAmount - order.DiscountAmount; accountDetail.FreightAmount = order.Freight; accountDetail.CommissionAmount = CalculationTotalCommission(hasRefundOrdersDetails.Where(c => c.OrderRefund.OrderId == order.Id).Select(c => c.OrderItem).Distinct().ToList()); accountDetail.RefundCommisAmount = CalculationTotalRefundCommission(hasRefundOrdersDetails.Where(c => c.OrderRefund.OrderId == order.Id).Select(c => c.OrderItem).Distinct().ToList()); //YZY分销退款佣金 accountDetail.BrokerageAmount = CalculationTotalBrokerage(hasRefundOrdersDetails.Where(c => c.OrderRefund.OrderId == order.Id).Select(c => c.OrderItem).Distinct().ToList()); accountDetail.ReturnBrokerageAmount = CalculationTotalRefundBrokerage(hasRefundOrdersDetails.Where(c => c.OrderRefund.OrderId == order.Id).Select(c => c.OrderRefund).Distinct().ToList()); accountDetail.RefundTotalAmount = hasRefundOrdersDetails.Where(c => c.OrderRefund.OrderId == order.Id).Select(c => c.OrderRefund).Distinct().Sum(c => c.Amount); accountDetail.OrderDate = order.OrderDate; accountDetail.OrderRefundsDates = string.Join(";", hasRefundOrdersDetails.Where(c => c.OrderRefund.OrderId == order.Id).Select(c => c.OrderRefund.ManagerConfirmDate).Distinct()); entity.AccountDetailInfo.Add(accountDetail); } foreach (var order in orders) { var accountDetail = new Model.AccountDetailInfo(); accountDetail.Himall_Accounts = accountInfo; accountDetail.ShopId = order.ShopId; accountDetail.Date = order.FinishDate.Value; accountDetail.OrderType = Model.AccountDetailInfo.EnumOrderType.FinishedOrder; accountDetail.OrderId = order.Id; accountDetail.ProductActualPaidAmount = order.ProductTotalAmount - order.DiscountAmount; accountDetail.FreightAmount = order.Freight; accountDetail.CommissionAmount = CalculationTotalCommission(ordersDetails.Where(c => c.Order.Id == order.Id).Select(c => c.OrderItem).Distinct().ToList()); accountDetail.RefundCommisAmount = decimal.Zero; accountDetail.RefundTotalAmount = decimal.Zero; accountDetail.BrokerageAmount = decimal.Zero; accountDetail.ReturnBrokerageAmount = decimal.Zero; accountDetail.OrderDate = order.OrderDate; accountDetail.OrderRefundsDates = string.Empty; entity.AccountDetailInfo.Add(accountDetail); } } int rows = entity.SaveChanges(); transaction.Complete(); } catch (Exception ee) { Log.Error("CalculationMoney :startDate=" + startDate.ToString() + " endDate=" + endDate.ToString() + "/r/n" + ee.Message); } } #region 营销费用************************* try { /* * var acc = (from a in entity.AccountInfo * join m in * (from AM in entity.ActiveMarketServiceInfo * join M in entity.MarketSettingInfo on AM.TypeId equals M.TypeId * where AM.MarketServiceRecordInfo.Max(m => m.EndTime) >= endDate * select new * { * ShopId = AM.ShopId, * Price = M.Price, * TypeId = M.TypeId * }) on a.ShopId equals m.ShopId * where (a.StartDate.Year <= startDate.Year && a.StartDate.Month <= startDate.Month) && a.EndDate >= endDate * select new * { * ShopId = m.ShopId, * Price = m.Price, * TypeId = m.TypeId, * Id = a.Id * }).ToList();*/ //未结算的营销费用(当前结算开始日期之前最近的记录) var market = (from b in entity.ActiveMarketServiceInfo join c in entity.MarketServiceRecordInfo on b.Id equals c.MarketServiceId join d in shopIds on b.ShopId equals d join aa in entity.MarketSettingInfo on b.TypeId equals aa.TypeId where c.SettlementFlag == 0 select new { ShopId = b.ShopId, TypeId = b.TypeId, Price = (c.EndTime.Year * 12 + c.EndTime.Month - (c.StartTime.Year * 12 + c.StartTime.Month)) * aa.Price, //购买的月数 MSRecordId = c.Id, StartTime = c.StartTime, EndTime = c.EndTime }).ToList(); var account = entity.AccountInfo.Where(e => e.StartDate == startDate).ToList(); var marketShop = market.Select(e => e.ShopId).Distinct(); foreach (var item in account) { var accInfo = market.Where(e => e.ShopId == item.ShopId); foreach (var serviceType in accInfo) { item.PeriodSettlement = item.PeriodSettlement - serviceType.Price; //减掉营销服务费用 item.AdvancePaymentAmount = item.AdvancePaymentAmount + serviceType.Price; //存放营销服务费用 entity.AccountMetaInfo.Add(new Model.AccountMetaInfo { AccountId = item.Id, MetaKey = serviceType.TypeId.ToDescription(), MetaValue = serviceType.Price.ToString("f2"), ServiceStartTime = serviceType.StartTime, ServiceEndTime = serviceType.EndTime }); } } var MSRecordInfos = (from a in entity.MarketServiceRecordInfo join b in entity.ActiveMarketServiceInfo on a.MarketServiceId equals b.Id join c in marketShop on b.ShopId equals c where a.SettlementFlag == 0 select new { Shopid = b.ShopId, TypeId = b.TypeId, Msrecordid = a.Id }).ToList(); foreach (var record in MSRecordInfos) { var recordModel = entity.MarketServiceRecordInfo.FirstOrDefault(e => e.Id == record.Msrecordid); recordModel.SettlementFlag = 1; } entity.SaveChanges(); } catch (Exception ex) { Log.Error("CalculationMoney 服务费:startDate=" + startDate.ToString() + " endDate=" + endDate.ToString() + "/r/n" + ex.Message); } #endregion 营销费用 }