/// <summary> /// 取消订单时,回退用户易捷币 /// </summary> public static ResultDTO CancelOrder(ContextSession contextSession, CommodityOrder commodityOrder) { if (commodityOrder.EsAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId) { return(ResultDTO.Successed); } decimal yjbMoney = OrderPayDetail.ObjectSet() .Where(t => t.OrderId == commodityOrder.Id && (t.ObjectType == 10 || t.ObjectType == 15) && t.Amount > 0) .Select(t => t.Amount).FirstOrDefault(); if (yjbMoney <= 0) { return(ResultDTO.Successed); } var result = YJBSV.RefundAllOrderJournal(commodityOrder.Id); if (!result.IsSuccess) { if (result.Code != "OrderNotFound") { LogHelper.Error("取消订单时,回退用户易捷币失败,订单ID:" + commodityOrder.Id + ",错误内容:" + result.Message); LogOrderErrorInfo(contextSession, commodityOrder, "取消订单时,回退用户易捷币失败"); } } return(result); }
/// <summary> /// 创建订单时,扣除用户易捷币和易捷抵现劵 /// </summary> public static ResultDTO CreateOrder(Guid esAppId, CreateOrderInputDTO input) { if (esAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId) { return(ResultDTO.Successed); } return(YJBSV.CreateOrderJournal(input)); }
/// <summary> /// 支付成功时时,解冻用户易捷币和易捷抵现劵 /// </summary> public static ResultDTO PayOrder(CommodityOrder order) { LogHelper.Info("YJBHelper.PayOrder, OrderId: " + order.Id); if (order.EsAppId.HasValue && order.EsAppId.Value == YJBConsts.YJAppId) { return(YJBSV.PayOrderJournal(order)); } return(ResultDTO.Successed); }
/// <summary> /// 查询商品的易捷币抵用信息 /// </summary> public static OrderInsteadCashDTO GetCommodityCashPercentWithoutUser(Guid?esAppId, List <OrderInsteadCashInputCommodityDTO> commodities) { if (!esAppId.HasValue || esAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId) { return(new OrderInsteadCashDTO { Enabled = false }); } return(YJBSV.GetCommodityCashPercentWithoutUser(commodities)); }
/// <summary> /// 根据卡绑定人获取易捷卡面值 /// </summary> /// <param name="UserId"></param> /// <returns></returns> public static decimal GetYJCardAcount(Guid UserId) { var result = YJBSV.GetYJCardAcount(UserId); if (result == 0) { LogHelper.Error("退款时,回退用户易捷卡失败,用户ID:" + UserId); } return(result); }
/// <summary> /// 退回易捷卡 /// </summary> /// <param name="UserId"></param> /// <param name="Refund"></param> /// <returns></returns> public static ResultDTO RetreatYjc(Guid UserId, Decimal Refund, Guid orderId, Guid orderItemId) { var result = YJBSV.RetreatYjc(UserId, Refund, orderId, orderItemId); if (!result.IsSuccess) { LogHelper.Error("退款时,回退用户易捷卡失败,用户ID:" + UserId + ",错误内容:" + result.Message); } return(result); }
/// <summary> /// 退款时把金额退回到易捷卡 /// </summary> /// <param name="UserId"></param> /// <param name="Refund"></param> /// <returns></returns> public static ResultDTO UpdateCardCash(Guid UserId, Decimal Refund) { var result = YJBSV.UpdateCardCash(UserId, Refund); if (!result.IsSuccess) { LogHelper.Error("退款时,回退用户易捷卡失败,用户ID:" + UserId + ",错误内容:" + result.Message); } return(result); }
/// <summary> /// 获取商品的油卡兑换券额度 /// </summary> /// <param name="esAppId"></param> /// <param name="input"></param> /// <returns></returns> public static List <CommodityYouKaDTO> GetCommodityYouKaPercent(Guid esAppId, List <Guid> commodityIdList) { //易捷APP才显示 if (esAppId != YJBConsts.YJAppId || commodityIdList == null || commodityIdList.Count == 0) { return(new List <CommodityYouKaDTO>()); } return(YJBSV.GetCommodityYouKaPercent(new GetYouKaPersentDTO { EsAppId = esAppId, CommodityIdList = commodityIdList })); }
/// <summary> /// 售中退款时,回退用户易捷币和易捷抵用券 /// </summary> public static ResultDTO OrderRefund(ContextSession contextSession, CommodityOrder commodityOrder, OrderRefund orderRefund, decimal commodityPrice, Guid useryjcouponid) { if (commodityOrder.EsAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId) { return(ResultDTO.Successed); } //var result = YJBSV.RefundAllOrderJournal(commodityOrder.Id); //if (!result.IsSuccess) //{ // LogHelper.Error("售中退款时,回退用户易捷币失败,订单ID:" + commodityOrder.Id + ",错误内容:" + result.Message); // LogOrderErrorInfo(contextSession, commodityOrder, "售中退款时,回退用回退用户易捷币失败户易捷币"); //} //return result; #region 记录抵用券退款明细表 var orderitemorder = (from i in OrderItem.ObjectSet() where commodityOrder.Id == i.CommodityOrderId select i).ToList(); var user = CBCSV.GetUserNameAndCode(commodityOrder.UserId); foreach (var item in orderitemorder) { CouponRefundDetail couponRefundDetailDTO = new CouponRefundDetail(); couponRefundDetailDTO.Id = Guid.NewGuid(); couponRefundDetailDTO.SubTime = DateTime.Now; couponRefundDetailDTO.ModifiedOn = DateTime.Now; couponRefundDetailDTO.RefundTime = DateTime.Now; couponRefundDetailDTO.ReceiveAccount = user != null ? user.Item2 : ""; couponRefundDetailDTO.ReceiveName = user != null ? user.Item1 : ""; couponRefundDetailDTO.CommodityCouponMoney = commodityPrice; couponRefundDetailDTO.FreightCouponMoney = 0; couponRefundDetailDTO.CommodityRefundMoney = orderRefund.RefundMoney; couponRefundDetailDTO.FreightRefundMoney = orderRefund.RefundFreightPrice; couponRefundDetailDTO.RefundTotalMoney = commodityPrice + orderRefund.RefundMoney + orderRefund.RefundFreightPrice; couponRefundDetailDTO.ShopName = commodityOrder.AppName; couponRefundDetailDTO.OrderNo = commodityOrder.Code; couponRefundDetailDTO.CommoidtyName = item.Name; couponRefundDetailDTO.ReceivePhone = commodityOrder.ReceiptPhone; couponRefundDetailDTO.ConsigneeName = commodityOrder.ReceiptUserName; couponRefundDetailDTO.Remark = ""; couponRefundDetailDTO.EntityState = System.Data.EntityState.Added; contextSession.SaveObject(couponRefundDetailDTO); } contextSession.SaveChanges(); #endregion var mobile = user != null ? user.Item2 : ""; var result = YJBSV.RefundOrderJournal(commodityOrder.Id, orderRefund.RefundYJBMoney, commodityPrice, mobile, commodityOrder.UserId, useryjcouponid); if (!result.IsSuccess) { LogHelper.Error("售中退款时,回退用户易捷币失败,订单ID:" + commodityOrder.Id + ",错误内容:" + result.Message); LogOrderErrorInfo(contextSession, commodityOrder, "售中退款时,回退用回退用户易捷币失败户易捷币"); } return(result); }
/// <summary> /// 创建订单失败时,回退用户易捷币 /// </summary> public static ResultDTO CreateOrderFail(ContextSession contextSession, CommodityOrder commodityOrder) { if (commodityOrder.EsAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId) { return(ResultDTO.Successed); } var result = YJBSV.CancelOrderJournal(commodityOrder.Id); if (!result.IsSuccess) { LogHelper.Error("创建订单失败时,回退用户易捷币失败,订单ID:" + commodityOrder.Id + ",错误内容:" + result.Message); LogOrderErrorInfo(contextSession, commodityOrder, "创建订单失败时,回退用户易捷币"); } return(result); }
/// <summary> /// 查询商品的易捷币抵用信息 /// </summary> public static CanInsteadCashDTO GetCommodityCashPercent(Guid?esAppId, OrderInsteadCashInputDTO input) { var emptyResult = new CanInsteadCashDTO { YJBInfo = new OrderInsteadCashDTO { Enabled = false }, YJCouponInfo = null }; if (!esAppId.HasValue) { return(emptyResult); } if (esAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId) { return(emptyResult); } return(YJBSV.GetCommodityCashPercent(input)); }
/// <summary> /// 根据订单生成待结算项 /// </summary> public static SettleAccountsDetails CreateSettleAccountDetails(ContextSession contextSession, CommodityOrder commodityOrder, MallApply mall, int?orderServiceState = null) { //LogHelper.Info("开始生成结算项,订单ID:" + commodityOrder.Id); var currentDate = DateTime.Now; // 1:商家,2:金和众销(给金和分的钱),3:商贸众销(给分享者分的钱),4:商贸众筹,5:推广主分成,6:应用主分成,7金和分润,8买家,9一级分销,10二级分销,11三级分销,12渠道推广,20:一级代理,21:二级代理 //var payeeType = new List<int> { 3, 5, 9, 10, 11, 20, 21 }; //var orderitemlist = OrderItem.ObjectSet().Where(n => n.CommodityOrderId == commodityOrder.Id). // GroupJoin(OrderItemShare.ObjectSet().Where(s => payeeType.Contains(s.PayeeType)), o => o.Id, s => s.OrderItemId, (o, s) => // new { o.Id, o.Name, o.Number, o.RealPrice, o.CommodityId, o.ComCategoryId, Commission = s.Sum(_ => (decimal?)_.Commission) }).ToList(); // 暂不计算推广佣金 var orderitemlist = OrderItem.ObjectSet().Where(n => n.CommodityOrderId == commodityOrder.Id).Select(o => new { o.Id, o.Name, o.Number, o.RealPrice, o.CommodityId, o.ComCategoryId, o.CommodityAttributes }).ToList(); bool isSetSettleAmount = true; List <SettleAccountsOrderItem> items = new List <SettleAccountsOrderItem>(); var payTime = commodityOrder.PaymentTime.Value; foreach (var orderItem in orderitemlist) { // 结算单订单项 SettleAccountsOrderItem saItem = new SettleAccountsOrderItem(); saItem.Id = saItem.OrderItemId = orderItem.Id; saItem.ModifiedOn = saItem.SubTime = currentDate; saItem.OrderId = commodityOrder.Id; saItem.OrderItemRefundAmount = 0; // 暂无单品退货 saItem.OrderItemPromotionCommissionAmount = 0M; // orderItem.Commission ?? 0M; saItem.OrderItemName = orderItem.Name; saItem.OrderItemNumber = orderItem.Number; saItem.OrderItemPrice = orderItem.RealPrice.Value; // 自营他配 if (mall.Type == 0) { var commoditySettleAmount = CommoditySettleAmount.ObjectSet() .Where(c => c.CommodityId == orderItem.CommodityId && c.EffectiveTime < payTime) .OrderByDescending(c => c.SubTime) .ThenByDescending(c => c.EffectiveTime) .FirstOrDefault(); if (commoditySettleAmount == null) { // 未设置结算价,暂不结算 //LogHelper.Info("开始生成结算项,订单ID:" + commodityOrder.Id + ",自营商家,未设置结算价,商品ID:" + orderItem.CommodityId); return(null); } //LogHelper.Info("开始生成结算项,订单ID:" + commodityOrder.Id + ",自营商家,商品ID:" + orderItem.CommodityId + ",商品属性:" + orderItem.CommodityAttributes + ",结算价:" + commoditySettleAmount.CommodityAttrJson); var saAttrs = JsonHelper.JsonDeserialize <List <Jinher.AMP.BTP.Deploy.CustomDTO.CommodityAttributePrice> >(commoditySettleAmount.CommodityAttrJson); var attrs = (orderItem.CommodityAttributes ?? "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (attrs.Length == 0) { // 无属性 saItem.SettleAmount = saAttrs[0].SettlePrice.Value; } else if (attrs.Length == 1) { // 单属性 var settlePrice = saAttrs.Where(a => a.AttributeValue == attrs[0]).FirstOrDefault(); if (settlePrice == null) { LogHelper.Error("SettleAccountHelper.CreateSettleAccountDetails 生成结算单失败,结算价设置异常,商品ID:" + orderItem.CommodityId + ",商品属性:" + orderItem.CommodityAttributes + ",结算价ID:" + commoditySettleAmount.Id + ",结算价属性:" + commoditySettleAmount.CommodityAttrJson); return(null); } saItem.SettleAmount = settlePrice.SettlePrice.Value; } else if (attrs.Length == 2) { // 双属性 var settlePrice = saAttrs.Where(a => (a.AttributeValue == attrs[0] && a.SecAttributeValue == attrs[1]) || (a.AttributeValue == attrs[1] && a.SecAttributeValue == attrs[0])) .FirstOrDefault(); if (settlePrice == null) { LogHelper.Error("SettleAccountHelper.CreateSettleAccountDetails 生成结算单失败,结算价设置异常,商品ID:" + orderItem.CommodityId + ",商品属性:" + orderItem.CommodityAttributes + ",结算价ID:" + commoditySettleAmount.Id + ",结算价属性:" + commoditySettleAmount.CommodityAttrJson); return(null); } saItem.SettleAmount = settlePrice.SettlePrice.Value; } else { LogHelper.Error("SettleAccountHelper.CreateSettleAccountDetails 生成结算单失败,商品属性异常,商品ID:" + orderItem.CommodityId + ",商品属性:" + orderItem.CommodityAttributes); return(null); } //orderItem.com } // 第三方 else if (mall.Type == 1) { // 查询商品易捷币抵用数量 var yjbInfo = YJBSV.GetOrderItemYJBInfo(commodityOrder.EsAppId.Value, commodityOrder.Id); if (!yjbInfo.IsSuccess) { saItem.OrderItemYJBAmount = 0; } else { var currentCommodityYJBInfo = yjbInfo.Data.Items.Where(c => c.CommodityId == orderItem.CommodityId).FirstOrDefault(); if (currentCommodityYJBInfo != null && currentCommodityYJBInfo.IsMallYJB) { saItem.OrderItemYJBAmount = currentCommodityYJBInfo.InsteadCashAmount; } } // 计算实际成交价 #region 计算商品佣金比例 // 获取佣金比例:按结算日期获取有效的(启用日期小于等于结算日期的最近一次设置的佣金比例)佣金比例【基础、类目、商品】; saItem.BaseCommission = BaseCommission.ObjectSet().Join(MallApply.ObjectSet(), b => b.MallApplyId, m => m.Id, (b, m) => new { b.Commission, b.EffectiveTime, b.SubTime, m.AppId, m.EsAppId }). Where(t => t.EsAppId == commodityOrder.EsAppId && t.AppId == commodityOrder.AppId && t.EffectiveTime < payTime). OrderByDescending(t => t.SubTime).Select(t => (decimal?)t.Commission).FirstOrDefault(); // 查询当前商品的类目 List <Guid> categoryIds = new List <Guid>(); var tempCategories = CommodityCategory.ObjectSet().Where(c => c.AppId == commodityOrder.EsAppId && c.CommodityId == orderItem.CommodityId).Join(Category.ObjectSet(), cc => cc.CategoryId, c => c.Id, (cc, c) => new { c.Id, c.CurrentLevel, c.ParentId, cc.IsDel }).ToList(); foreach (var item in tempCategories) { if (item.IsDel.HasValue && item.IsDel.Value) { continue; } if (item.CurrentLevel == 3 || item.CurrentLevel == 4 || item.CurrentLevel == 5) { var lv2 = Category.FindByID(item.ParentId.Value); if (item.CurrentLevel == 3) { categoryIds.Add(lv2.ParentId.Value); continue; } var lv3 = Category.FindByID(lv2.ParentId.Value); if (item.CurrentLevel == 4) { categoryIds.Add(lv3.ParentId.Value); continue; } var lv4 = Category.FindByID(lv3.ParentId.Value); categoryIds.Add(lv4.ParentId.Value); } else if (item.CurrentLevel == 2) { categoryIds.Add(item.ParentId.Value); } else if (item.CurrentLevel == 1) { categoryIds.Add(item.Id); } } var commissions = CategoryCommission.ObjectSet(). Join(MallApply.ObjectSet(), b => b.MallApplyId, m => m.Id, (b, m) => new { b.CategoryId, b.Commission, b.EffectiveTime, b.SubTime, m.AppId, m.EsAppId }). Where(t => t.EsAppId == commodityOrder.EsAppId && t.AppId == commodityOrder.AppId && categoryIds.Contains(t.CategoryId) && t.EffectiveTime < payTime). GroupBy(t => t.CategoryId). Select(group => group.OrderByDescending(g => g.SubTime).Select(g => g.Commission).FirstOrDefault()). ToList(); if (commissions.Count > 0) { saItem.CategoryCommission = commissions.Min(); } saItem.CommodityCommission = CommodityCommission.ObjectSet().Join(MallApply.ObjectSet(), b => b.MallApplyId, m => m.Id, (b, m) => new { b.CommodityId, b.Commission, b.EffectiveTime, b.SubTime, m.AppId, m.EsAppId }). Where(t => t.EsAppId == commodityOrder.EsAppId && t.AppId == commodityOrder.AppId && t.CommodityId == orderItem.CommodityId && t.EffectiveTime < payTime). OrderByDescending(t => t.SubTime).Select(t => (decimal?)t.Commission).FirstOrDefault(); #endregion // 商城佣金计算公式:商品销售价*佣金比例【商品佣金优先,类目佣金其次、基础佣金最后,三选一计算】* 购买数量; saItem.PromotionAmount = Math.Truncate( (saItem.CommodityCommission.HasValue ? saItem.CommodityCommission.Value : (saItem.CategoryCommission.HasValue ? saItem.CategoryCommission.Value : (saItem.BaseCommission.HasValue ? saItem.BaseCommission.Value : 0) )) * saItem.OrderItemPrice * saItem.OrderItemNumber) / 100; } saItem.EntityState = EntityState.Added; items.Add(saItem); } // 结算单订单详情 SettleAccountsDetails sad = new SettleAccountsDetails(); sad.Id = sad.OrderId = commodityOrder.Id; sad.EntityState = EntityState.Added; sad.ModifiedOn = sad.SubTime = currentDate; sad.IsSettled = false; sad.AppId = commodityOrder.AppId; sad.EsAppId = commodityOrder.EsAppId.Value; sad.OrderCode = commodityOrder.Code; sad.OrderSubTime = payTime; sad.OrderAmount = commodityOrder.Price; sad.OrderRealAmount = commodityOrder.RealPrice.Value; sad.OrderFreight = commodityOrder.Freight; sad.IsSetSettleAmount = isSetSettleAmount; // 导入订单时,记录退款金额 if (commodityOrder.State == 7 || orderServiceState == 7) { var refund = OrderRefundAfterSales.ObjectSet().Where(o => o.OrderId == commodityOrder.Id).FirstOrDefault(); // 全额退款 不计入结算单 if (refund.IsFullRefund == 1) { sad.IsSettled = true; if (contextSession != null) { foreach (var item in items) { contextSession.SaveObject(item); } contextSession.SaveObject(sad); } return(sad); } else { sad.OrderRefundAmount = refund.RefundMoney; } } else { sad.OrderRefundAmount = 0; // 暂无单品退货 } //// 计算商城优惠券金额 //var orderP ayDetailId = OrderPayDetail.ObjectSet().Where(c => c.OrderId == commodityOrder.Id && c.ObjectType == 1).Select(c => c.ObjectId).FirstOrDefault(); //if (orderPayDetailId != Guid.Empty) //{ // var request = new Coupon.Deploy.CustomDTO.ListCouponNewRequestDTO // { // CouponIds = new List<Guid> { orderPayDetailId }, // UserId = commodityOrder.UserId // }; // var coupons = CouponSV.Instance.GetUserCouponsByIds(request); // if (coupons.IsSuccess) // { // var firstCoupon = coupons.Data[0]; // sad.OrderCouponAmount = firstCoupon.Cash; // // 判断是否为电商馆 // sad.IsMallCoupon = ZPHSV.Instance.IsAppPavilion(firstCoupon.ShopId); // } // else // { // LogHelper.Error(string.Format("CouponSV.GetUserCouponsByIds返回结果不成功,入参 CouponIds: {0} UserId: {1},出参 Code: {2} Info: {3}。", orderPayDetailId, commodityOrder.UserId, coupons.Code, coupons.Info)); // } //} // 计算商家结算金额 decimal spreadMoney = 0; if (commodityOrder.SpreadGold > 0) { spreadMoney = commodityOrder.SpreadGold.ToMoney(); } sad.OrderSpreadAmount = spreadMoney; // 1.第三方 if (mall.Type == 1) { sad.OrderYJBAmount = items.Sum(i => i.OrderItemYJBAmount); // 商城佣金 sad.PromotionAmount = items.Sum(i => i.PromotionAmount); // 优先级:1推广主、2三级分销、 3众销 //sad.OrderPromotionCommissionAmount = commodityOrder.SpreadGold > 0 ? commodityOrder.SpreadGold.ToMoney() : // commodityOrder.DistributeMoney > 0 ? commodityOrder.DistributeMoney : commodityOrder.Commission; // 老版本,已弃 商家结算金额 = 订单总额 + 商城优惠券总金额 - 退款总金额 - 推广佣金总额 - 商城佣金总额 // 版本1:商家结算金额 = 实收款 + 商城易捷币抵用金额 - 退款金额 - 商城佣金 // 版本2:商家结算金额 = 实收款 + 商城易捷币抵用金额 - 退款金额 - 商城佣金 - 推广佣金总额 // 商家结算金额 sad.SellerAmount = Math.Truncate((sad.OrderRealAmount + sad.OrderYJBAmount - sad.OrderRefundAmount - sad.PromotionAmount - sad.OrderSpreadAmount.Value) * 100) / 100; } // 0.自营他配 else if (mall.Type == 0) { // 商品结算价 decimal totalsSettlePrice = 0; foreach (var item in items) { totalsSettlePrice += item.SettleAmount * item.OrderItemNumber; } sad.SettleAmount = totalsSettlePrice; // 商家结算金额 = 商品结算价*数量 + 运费 - 退款金额 sad.SellerAmount = Math.Truncate((sad.SettleAmount + sad.OrderFreight - sad.OrderRefundAmount) * 100) / 100; // 商城佣金 sad.PromotionAmount = Math.Truncate((sad.OrderRealAmount - sad.SellerAmount - sad.OrderSpreadAmount.Value) * 100) / 100; } // 2.自营自配自采 // 3.自营自配统采 if (contextSession != null) { foreach (var item in items) { contextSession.SaveObject(item); } contextSession.SaveObject(sad); } return(sad); }
public static string RepairOrderItemYjbPrice(int days) { LogHelper.Debug("进入易捷币抵现订单,按照商品进行拆分,开始时间:" + DateTime.Now); HashSet <Guid> orderIds = new HashSet <Guid>(); HashSet <Guid> errorOrderIds = new HashSet <Guid>(); try { ContextSession contextSession = ContextFactory.CurrentThreadContext; var lastTime = DateTime.Now.AddDays(-days); var commodityOrders = CommodityOrder.ObjectSet().Where(t => t.EsAppId == YJB.Deploy.CustomDTO.YJBConsts.YJAppId && t.SubTime >= lastTime); LogHelper.Debug("进入易捷币抵现订单,按照商品进行拆分,商品ids:" + JsonHelper.JsSerializer(commodityOrders.Select(t => t.Id))); foreach (var commodityOrder in commodityOrders) { // 查询商品易捷币抵用数量 var yjInfo = YJBSV.GetOrderItemYJInfo(commodityOrder.EsAppId.Value, commodityOrder.Id); if (yjInfo.IsSuccess) { var yjbInfo = yjInfo.Data.YJBInfo; if (yjbInfo == null) { LogHelper.Debug("进入易捷币抵现订单,按照商品进行拆分,使用易捷币抵现订单Id:" + commodityOrder.Id + ",Items: null"); } else { LogHelper.Debug("进入易捷币抵现订单,按照商品进行拆分,使用易捷币抵现订单Id:" + commodityOrder.Id + ",Items:" + JsonHelper.JsSerializer(yjbInfo.Items)); } var yjCouponInfo = yjInfo.Data.YJCouponInfo; if (yjCouponInfo == null) { LogHelper.Debug("进入易捷抵现劵抵现订单,按照商品进行拆分,使用易捷抵现劵抵现订单Id:" + commodityOrder.Id + ",Items: null"); } else { LogHelper.Debug("进入易捷抵现劵抵现订单,按照商品进行拆分,使用易捷抵现劵抵现订单Id:" + commodityOrder.Id + ",Items:" + JsonHelper.JsSerializer(yjCouponInfo.Items)); } var orderItems = OrderItem.ObjectSet().Where(t => t.CommodityOrderId == commodityOrder.Id).ToList().OrderBy(_ => _.CommodityId).ThenByDescending(_ => _.Number).ToList(); var dirCommodityIndex = orderItems.Select(_ => _.CommodityId).Distinct().ToDictionary(_ => _, _ => 0); foreach (var orderItem in orderItems) { bool needUpdate = false; if (yjbInfo != null && yjbInfo.Items != null) { var yjbInfoItems = yjbInfo.Items.Where(c => c.CommodityId == orderItem.CommodityId).ToList(); if (yjbInfoItems.Count > dirCommodityIndex[orderItem.CommodityId]) { var currentCommodityYjbInfo = yjbInfoItems[dirCommodityIndex[orderItem.CommodityId]]; if (currentCommodityYjbInfo != null /*&& currentCommodityYjbInfo.IsMallYJB*/ && currentCommodityYjbInfo.InsteadCashAmount > 0) { if (orderItem.YjbPrice != currentCommodityYjbInfo.InsteadCashAmount) { needUpdate = true; orderItem.YjbPrice = currentCommodityYjbInfo.InsteadCashAmount; } } dirCommodityIndex[orderItem.CommodityId]++; } } if (yjCouponInfo != null && yjCouponInfo.Items != null) { if (yjCouponInfo.Items.Count == 0) { errorOrderIds.Add(orderItem.CommodityOrderId); continue; } var yjCouponPrice = orderItem.YJCouponPrice; if (yjCouponInfo.Items.FirstOrDefault().OrderItemId != Guid.Empty) { yjCouponPrice = yjCouponInfo.Items.Where(_ => _.OrderItemId == orderItem.Id).Sum(_ => _.InsteadCashAmount); } else { yjCouponPrice = yjCouponInfo.Items.Where(_ => _.CommodityId == orderItem.CommodityId).Sum(_ => _.InsteadCashAmount); } if (yjCouponPrice != orderItem.YJCouponPrice) { needUpdate = true; orderItem.YJCouponPrice = yjCouponPrice; } } if (needUpdate) { orderItem.ModifiedOn = DateTime.Now; orderIds.Add(orderItem.CommodityOrderId); } } } } var count = contextSession.SaveChanges(); LogHelper.Debug("进入易捷币抵现订单,按照商品进行拆分,结束时间:" + DateTime.Now); } catch (Exception ex) { LogHelper.Error(String.Format("易捷币抵现订单,按照商品进行拆分:" + ex.Message), ex); } return("错误订单:" + string.Join(",", errorOrderIds) + "---------修复订单:" + string.Join(",", orderIds)); }