public static ResultDTO CancelRefund(ContextSession contextSession, OrderRefundAfterSales refund) { var jdOrderRefundAfterSales = JdOrderRefundAfterSales.ObjectSet().Where(_ => _.OrderRefundAfterSalesId == refund.Id).FirstOrDefault(); if (jdOrderRefundAfterSales == null) { return(new ResultDTO { isSuccess = true, Message = "非京东订单,跳过。" }); } if (string.IsNullOrEmpty(jdOrderRefundAfterSales.AfsServiceId)) { return(new ResultDTO { isSuccess = false, Message = "未获取到京东退款服务单号。", ResultCode = -1 }); } ResultDTO result = null; if (jdOrderRefundAfterSales.CommodityNum.HasValue && jdOrderRefundAfterSales.CommodityNum.Value > 1 && !string.IsNullOrWhiteSpace(jdOrderRefundAfterSales.AfsServiceIds)) { result = JDSV.AuditMultipulCancel(jdOrderRefundAfterSales.AfsServiceId.Split(',').ToList(), "用户取消"); } else { result = JDSV.AuditCancel(jdOrderRefundAfterSales.AfsServiceId, "用户取消"); } if (result.isSuccess) { jdOrderRefundAfterSales.Cancel = 0; contextSession.SaveObject(jdOrderRefundAfterSales); } return(result); }
/// <summary> /// 退款结果回调 /// </summary> /// <param name="result"></param> public static void OrderRefundResult(RefundResult result) { try { Guid orderId; Guid.TryParse(result.orderId, out orderId); LogHelper.Debug("进入 YXOrderHelper.OrderRefundResult,Input:" + JsonConvert.SerializeObject(result)); var orderRefund = OrderRefundAfterSales.ObjectSet().Where(_ => _.ApplyId == result.applyId).FirstOrDefault(); if (orderRefund == null) { LogHelper.Error("YXOrderHelper.OrderRefundResult 失败,未找到退款记录,Input:" + JsonConvert.SerializeObject(result)); } var orderItem = OrderItem.FindByID(orderRefund.OrderItemId.Value); string skuId; if (orderItem.CommodityStockId == null || orderItem.CommodityStockId.Value == Guid.Empty || orderItem.CommodityStockId == orderItem.CommodityId) { var commodity = Commodity.FindByID(orderItem.CommodityId); skuId = commodity.JDCode; } else { var comStock = CommodityStock.FindByID(orderItem.CommodityStockId.Value); skuId = comStock.JDCode; } var skuResult = result.refundSkuList.Where(_ => _.skuId == skuId).FirstOrDefault(); var skuOperateResult = skuResult.operateSkus.Where(_ => _.skuId == skuId).FirstOrDefault(); if (skuOperateResult.status == OrderRefundApplySkuOperateStatusEnum.审核通过) { var refundResult = OrderHelper.ApproveOrderRefundAfterSales(orderRefund.OrderId, orderRefund.OrderItemId ?? Guid.Empty); if (refundResult.ResultCode != 0) { // 失败 LogHelper.Error("YXOrderHelper.OrderRefundResult 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); } } else if (skuOperateResult.status == OrderRefundApplySkuOperateStatusEnum.已拒绝) { var refundResult = OrderHelper.RejectOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty, skuOperateResult.reason); if (refundResult.ResultCode != 0) { // 失败 LogHelper.Error("YXOrderHelper.RejectOrderRefund 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); } } else { LogHelper.Error("YXOrderHelper.RejectOrderRefund -> OrderId: " + orderId + ", ApplyId: " + result.applyId + ", 忽略的状态:" + skuOperateResult.status.ToString()); } } catch (Exception ex) { LogHelper.Error("YXOrderHelper.OrderRefundResult 异常,Input:" + JsonConvert.SerializeObject(result), ex); } }
/// <summary> /// 严选系统取消退货回调 /// </summary> /// <param name="result"></param> public static void SystemCancelOrderRefund(SystemCancel result) { try { Guid orderId; Guid.TryParse(result.orderId, out orderId); LogHelper.Debug("进入 YXOrderHelper.SystemCancelOrderRefund,Input:" + JsonConvert.SerializeObject(result)); var orderRefund = OrderRefundAfterSales.ObjectSet().Where(_ => _.ApplyId == result.applyId).FirstOrDefault(); if (orderRefund == null) { LogHelper.Error("YXOrderHelper.SystemCancelOrderRefund 失败,未找到退款记录,Input:" + JsonConvert.SerializeObject(result)); } var refundResult = OrderHelper.RejectOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty, result.errorMsg); if (refundResult.ResultCode != 0) { // 失败 LogHelper.Error("YXOrderHelper.SystemCancelOrderRefund 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); } //if (result.applyId.StartsWith("s")) //{ // // 售后 // var orderRefund = OrderRefundAfterSales.FindByID(new Guid(result.applyId.Substring(1))); // if (orderRefund == null) // { // LogHelper.Error("YXOrderHelper.SystemCancelOrderRefund 失败,未找到退款记录,Input:" + JsonConvert.SerializeObject(result)); // } // var refundResult = OrderHelper.RejectOrderRefund(orderId, orderRefund.OrderItemId ?? Guid.Empty, result.errorMsg); // if (refundResult.ResultCode != 0) // { // // 失败 // LogHelper.Error("YXOrderHelper.SystemCancelOrderRefund 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); // } //} //else //{ // //售前 // var orderRefund = OrderRefund.FindByID(new Guid(result.applyId)); // if (orderRefund == null) // { // LogHelper.Error("YXOrderHelper.v 失败,未找到退款记录,Input:" + JsonConvert.SerializeObject(result)); // } // var refundResult = OrderHelper.RejectOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty, result.errorMsg); // if (refundResult.ResultCode != 0) // { // // 失败 // LogHelper.Error("YXOrderHelper.SystemCancelOrderRefund 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); // } //} } catch (Exception ex) { LogHelper.Error("YXOrderHelper.SystemCancelOrderRefund 异常,Input:" + JsonConvert.SerializeObject(result), ex); } }
/// <summary> /// 取消整单退款时调用(售后) /// </summary> public static ResultDTO OnCancelOrderRefundAfterSales(CommodityOrder order, OrderRefundAfterSales refund) { // 判断严选订单 if (ThirdECommerceHelper.IsWangYiYanXuan(order.AppId)) { } return(new ResultDTO { isSuccess = true }); }
/// <summary> /// 获取售后信息 /// </summary> /// <param name="orderId"></param> /// <returns></returns> public static Jinher.AMP.BTP.Deploy.OrderRefundAfterSalesDTO GetOrderRefundAfterSalesInfo(Guid orderId) { var info = OrderRefundAfterSales.ObjectSet().Where(_ => _.OrderId == orderId).OrderByDescending(_ => _.SubTime).FirstOrDefault(); if (info == null) { return(null); } return(info.ToEntityData()); }
/// <summary> /// 整单退款时调用(售后) /// </summary> /// <param name="order"></param> /// <param name="orderItrefundem"></param> public static ResultDTO OnOrderRefundAfterSales(CommodityOrder order, OrderRefundAfterSales refund) { // 判断严选订单 if (ThirdECommerceHelper.IsWangYiYanXuan(order.AppId)) { return(new ResultDTO { isSuccess = false, ResultCode = 1, Message = "该订单不支持整单退款,请选择单品退款~" }); } return(new ResultDTO { isSuccess = true }); }
/// <summary> /// 添加退货物流信息时调用(售后) /// </summary> public static ResultDTO OnOrderRefundOfferExpress(CommodityOrder order, OrderRefundAfterSales refund, string trackingCompany, string trackingNum) { // 判断严选订单 if (ThirdECommerceHelper.IsWangYiYanXuan(order.AppId)) { return(YXSV.ExpressOfferRefundOrder(refund.ApplyId, new List <ExpressInfo> { new ExpressInfo { trackingCompany = trackingCompany, trackingNum = trackingNum } })); } return(new ResultDTO { isSuccess = true }); }
public ResultDTO <ListResult <Jinher.AMP.BTP.Deploy.CustomDTO.OrderRefundCompareDTO> > GetOrderRefundExt(Jinher.AMP.BTP.Deploy.CustomDTO.OrderRefundSearchDTO search) { var result = new ResultDTO <ListResult <OrderRefundCompareDTO> >(); try { var refunds = (from o in OrderRefund.ObjectSet() where o.OrderRefundMoneyAndCoupun != o.RefundYJCouponMoney + o.RefundFreightPrice + o.RefundYJBMoney + o.RefundMoney select new Deploy.CustomDTO.OrderRefundCompareDTO { SubTime = o.SubTime, OrderRefundMoneyAndCoupun = o.OrderRefundMoneyAndCoupun, RefundYJCouponMoney = o.RefundYJCouponMoney, RefundFreightPrice = o.RefundFreightPrice, RefundYJBMoney = o.RefundYJBMoney, RefundMoney = o.RefundMoney, OrderId = o.OrderId }) .Union(from a in OrderRefundAfterSales.ObjectSet() where a.OrderRefundMoneyAndCoupun != a.RefundYJCouponMoney + a.RefundFreightPrice + a.RefundYJBMoney + a.RefundMoney select new Deploy.CustomDTO.OrderRefundCompareDTO { SubTime = a.SubTime, OrderRefundMoneyAndCoupun = a.OrderRefundMoneyAndCoupun, RefundYJCouponMoney = a.RefundYJCouponMoney, RefundFreightPrice = a.RefundFreightPrice, RefundYJBMoney = a.RefundYJBMoney, RefundMoney = a.RefundMoney, OrderId = a.OrderId }); result.isSuccess = true; var data = refunds.OrderByDescending(x => x.SubTime).Skip(search.PageSize * (search.PageIndex - 1)).Take(search.PageSize).ToList(); result.Data = new ListResult <OrderRefundCompareDTO> { List = data, Count = refunds.Count() }; return(result); } catch (Exception ex) { LogHelper.Error("JdCommodityBP.GetJdCommodityListExt 异常", ex); return(new ResultDTO <ListResult <OrderRefundCompareDTO> > { isSuccess = false, Data = null }); } }
public static ResultDTO SubmitRefund(ContextSession contextSession, CommodityOrder order, OrderItem orderItem, OrderRefundAfterSales refund, AddressInfo address) { if (address == null) { return(new ResultDTO { isSuccess = false, Message = "取件地址不能为空。" }); } var strCommodityOrderId = orderItem.CommodityOrderId.ToString(); var jdorderitem = JdOrderItem.ObjectSet() .Where(_ => _.CommodityOrderId == strCommodityOrderId && _.TempId == orderItem.CommodityId).FirstOrDefault(); if (jdorderitem == null) { return(new ResultDTO { isSuccess = false, ResultCode = 1, Message = "该订单不是京东订单。" }); } AfterSaleDto dto = new AfterSaleDto(); dto.jdOrderId = jdorderitem.JdOrderId; dto.customerExpect = 10; dto.questionDesc = refund.RefundDesc; dto.questionPic = refund.OrderRefundImgs; dto.asCustomerDto = new AfterSaleCustomerDto() { jdOrderId = jdorderitem.JdOrderId, customerContactName = address.customerContactName, customerTel = address.customerTel }; dto.asPickwareDto = new AfterSalePickwareDto() { pickwareType = 4, pickwareProvince = address.pickwareProvince, pickwareCity = address.pickwareCity, pickwareCounty = address.pickwareCounty, pickwareVillage = address.pickwareVillage, pickwareAddress = address.pickwareAddress }; dto.asReturnwareDto = new AfterSaleReturnwareDto { returnwareType = 10, returnwareCity = address.pickwareCity, returnwareCounty = address.pickwareCounty, returnwareProvince = address.pickwareProvince, returnwareVillage = address.pickwareVillage, returnwareAddress = address.pickwareAddress }; dto.asDetailDto = new AfterSaleDetailDto() { skuId = jdorderitem.CommoditySkuId, skuNum = orderItem.Number }; var result = JDSV.CreateAfsApply(dto); if (result.isSuccess) { // 保存到 JdOrderRefundAfterSales var jdOrderRefundAfterSales = JdOrderRefundAfterSales.CreateJdOrderRefundAfterSales(); jdOrderRefundAfterSales.AppId = order.AppId; jdOrderRefundAfterSales.OrderRefundAfterSalesId = refund.Id; jdOrderRefundAfterSales.OrderId = orderItem.CommodityOrderId; jdOrderRefundAfterSales.OrderItemId = orderItem.Id; jdOrderRefundAfterSales.JdOrderId = jdorderitem.JdOrderId; jdOrderRefundAfterSales.CommodityId = orderItem.CommodityId; jdOrderRefundAfterSales.CommodityNum = orderItem.Number; jdOrderRefundAfterSales.SkuId = jdorderitem.CommoditySkuId; jdOrderRefundAfterSales.Cancel = 1; jdOrderRefundAfterSales.PickwareType = 4; jdOrderRefundAfterSales.CustomerContactName = address.customerContactName; jdOrderRefundAfterSales.CustomerTel = address.customerTel; jdOrderRefundAfterSales.PickwareAddress = address.ProviceCityStr + address.pickwareAddress; jdOrderRefundAfterSales.AfsServiceStep = 10; jdOrderRefundAfterSales.AfsServiceStepName = "申请阶段"; contextSession.SaveObject(jdOrderRefundAfterSales); } else { bool isWriteLog = false; switch (result.ResultCode) { case -1: // 系统异常 break; //京东异常 case 2000: result.Message = "提交失败,请重试~"; break; case 6000: result.Message = "网络异常,请稍后重试~"; break; case 6001: case 6002: case 6003: case 6004: case 6006: case 6007: case 6011: case 6012: isWriteLog = true; break; case 6005: result.Message = "收货后才能申请退货~"; break; case 6008: result.Message = "收货后才能申请退货~"; break; case 6009: result.Message = "该商品不支持售后~"; break; case 6010: result.Message = "退货申请商品数量超过订单商品数量~"; isWriteLog = true; break; case 6013: result.Message = "售后申请审核未通过,如有异议,请联系客服处理~"; break; default: break; } if (isWriteLog) { var log = new Jinher.AMP.BTP.Deploy.JdlogsDTO { Id = Guid.NewGuid(), Content = "【" + order.Code + "】中的" + orderItem.Name + "商品【" + jdorderitem.CommoditySkuId + "】,提交售后申请失败,失败原因:【" + result.ResultCode + ":" + result.Message + "】" }; JdlogsFacade facade = new JdlogsFacade(); facade.SaveJdlogs(log); } } return(result); }
/// <summary> /// 售后退货时,记录退款金额 /// </summary> public static void OrderRefund(ContextSession contextSession, CommodityOrder commodityOrder, OrderRefundAfterSales orderRefundAfterSales) { if (orderRefundAfterSales.IsFullRefund.HasValue && orderRefundAfterSales.IsFullRefund == 1) { CancelOrder(contextSession, commodityOrder); } else { LogHelper.Info("结算单记录售后退款信息,订单ID:" + commodityOrder.Id + ",退款:" + orderRefundAfterSales.RefundMoney); try { var sad = SettleAccountsDetails.FindByID(commodityOrder.Id); if (sad != null) { if (sad.OrderRefundAmount == 0) { sad.OrderRefundAmount = orderRefundAfterSales.RefundMoney; sad.SellerAmount -= orderRefundAfterSales.RefundMoney; } sad.EntityState = EntityState.Modified; contextSession.SaveObject(sad); } } catch (Exception ex) { LogHelper.Error("结算单记录售后退款信息,订单ID:" + commodityOrder.Id + ",退款:" + orderRefundAfterSales.RefundMoney + ",异常:", ex); } } }
/// <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); }
/// <summary> /// 第三方电商售后服务退货结果回调 /// </summary> /// <param name="resultJsonStr"></param> /// <returns></returns> public static ThirdResponse RefundResultCallback(string resultJsonStr) { LogHelper.Debug("ThirdECommerceServiceHelper.RefundResultCallback第三方电商售后服务退货结果回调,Input:" + resultJsonStr); if (string.IsNullOrEmpty(resultJsonStr)) { return new ThirdResponse { Code = 20500, Msg = "缺少参数serviceRefundResult" } } ; var result = new ThirdResponse { Code = 200, Msg = "ok" }; try { var serviceResult = JsonConvert.DeserializeObject <ThirdServiceRefundResult>(resultJsonStr); if (serviceResult == null) { return new ThirdResponse { Code = 20501, Msg = "非法参数serviceRejectResult" } } ; Guid orderId, serviceId; DateTime auditTime; Guid.TryParse(serviceResult.OrderId, out orderId); Guid.TryParse(serviceResult.ServiceId, out serviceId); DateTime.TryParse(serviceResult.AuditTime, out auditTime); if (orderId == Guid.Empty) { return new ThirdResponse { Code = 20502, Msg = "非法参数OrderId" } } ; if (serviceId == Guid.Empty) { return new ThirdResponse { Code = 20503, Msg = "非法参数ServiceId" } } ; if (string.IsNullOrEmpty(serviceResult.SkuId)) { return new ThirdResponse { Code = 20504, Msg = "非法参数SkuId" } } ; if (auditTime == DateTime.MinValue) { return new ThirdResponse { Code = 20505, Msg = "非法参数AuditTime" } } ; if (serviceResult.RefundStatus < 0 || serviceResult.RefundStatus > 1) { return new ThirdResponse { Code = 20506, Msg = "非法参数RefundStatus" } } ; if (serviceResult.RefundStatus == 1 && string.IsNullOrEmpty(serviceResult.RejectReason)) { return new ThirdResponse { Code = 20507, Msg = "缺少参数RejectReason" } } ; #region 判断是否第三方电商售后服务单及获取售后服务单信息 var service = ThirdECService.ObjectSet().FirstOrDefault(o => o.OrderId == orderId && o.OrderRefundAfterSalesId == serviceId && o.SkuId == serviceResult.SkuId); if (service == null) { return new ThirdResponse { Code = 20508, Msg = "未找到此服务单" } } ; var orderRefund = OrderRefundAfterSales.ObjectSet().FirstOrDefault(p => p.Id == service.OrderRefundAfterSalesId); if (service == null) { return new ThirdResponse { Code = 20509, Msg = "未找到此服务单" } } ; if (service.AgreeRefundTime.HasValue || service.RejectRefundTime.HasValue) { return(result); } #endregion #region 退款处理 var errorMessage = string.Empty; if (serviceResult.RefundStatus == 0) { var refundResult = OrderHelper.ApproveOrderRefundAfterSales(orderRefund.OrderId, orderRefund.OrderItemId ?? Guid.Empty); if (refundResult.ResultCode == 0) { service.AgreeRefundTime = auditTime; service.StateName = "允许退货"; service.StateDesc = "售后服务退货结果回调:允许退货"; } else { errorMessage = refundResult.Message; result = new ThirdResponse { Code = 20510, Msg = "内部异常" }; } } else { var refundResult = OrderHelper.RejectOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty, serviceResult.RejectReason); if (refundResult.ResultCode == 0) { service.RejectRefundTime = auditTime; service.StateName = "拒绝退货"; service.StateDesc = "售后服务退货结果回调:拒绝退货," + serviceResult.RejectReason; } else { errorMessage = refundResult.Message; result = new ThirdResponse { Code = 20511, Msg = "内部异常" }; } } #endregion #region 保存ThirdECOrderJournal var journal = new ThirdECServiceJournal { Id = Guid.NewGuid(), OrderId = service.OrderId, OrderCode = service.OrderCode, OrderItemId = service.OrderItemId, OrderRefundAfterSalesId = service.OrderRefundAfterSalesId, Name = serviceResult.RefundStatus == 0 ? "允许退货" : "拒绝退货", Details = string.IsNullOrEmpty(errorMessage) ? service.StateDesc : errorMessage, Json = resultJsonStr, EntityState = EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(journal); #endregion int count = ContextFactory.CurrentThreadContext.SaveChanges(); if (count == 0) { LogHelper.Error(string.Format("ThirdECommerceServiceHelper.RefundResultCallback第三方电商售后服务退货结果回调数据保存失败,入参:{0}", resultJsonStr)); result = new ThirdResponse { Code = 20512, Msg = "内部异常" }; } } catch (Exception ex) { LogHelper.Error("ThirdECommerceServiceHelper.RefundResultCallback第三方电商售后服务退货结果回调异常,Input:" + resultJsonStr, ex); result = new ThirdResponse { Code = 20513, Msg = "内部异常" }; } return(result); } #endregion }
/// <summary> /// 第三方电商允许售后结果回调 /// </summary> /// <param name="resultJsonStr"></param> public static ThirdResponse AgreeServiceCallback(string resultJsonStr) { LogHelper.Debug("ThirdECommerceServiceHelper.AgreeServiceCallback第三方电商允许售后结果回调,Input:" + resultJsonStr); if (string.IsNullOrEmpty(resultJsonStr)) { return new ThirdResponse { Code = 20100, Msg = "缺少参数serviceAgreeResult" } } ; var result = new ThirdResponse { Code = 200, Msg = "ok" }; try { var serviceResult = JsonConvert.DeserializeObject <ThirdServiceAgreeResult>(resultJsonStr); if (serviceResult == null) { return new ThirdResponse { Code = 20101, Msg = "非法参数serviceAgreeResult" } } ; Guid orderId, serviceId; DateTime agreeTime; Guid.TryParse(serviceResult.OrderId, out orderId); Guid.TryParse(serviceResult.ServiceId, out serviceId); DateTime.TryParse(serviceResult.AgreeTime, out agreeTime); if (orderId == Guid.Empty) { return new ThirdResponse { Code = 20102, Msg = "非法参数OrderId" } } ; if (serviceId == Guid.Empty) { return new ThirdResponse { Code = 20103, Msg = "非法参数ServiceId" } } ; if (agreeTime == DateTime.MinValue) { return new ThirdResponse { Code = 20104, Msg = "非法参数AgreeTime" } } ; if (serviceResult.Address == null) { return new ThirdResponse { Code = 20105, Msg = "非法参数Address" } } ; if (string.IsNullOrEmpty(serviceResult.Address.Name)) { return new ThirdResponse { Code = 20106, Msg = "缺少参数Address.Name" } } ; if (string.IsNullOrEmpty(serviceResult.Address.Phone)) { return new ThirdResponse { Code = 20107, Msg = "缺少参数Address.Phone" } } ; //if (string.IsNullOrEmpty(serviceResult.Address.ProvinceName)) return new ThirdResponse { Code = 20108, Msg = "缺少参数Address.ProvinceName" }; //if (string.IsNullOrEmpty(serviceResult.Address.CityName)) return new ThirdResponse { Code = 20109, Msg = "缺少参数Address.CityName" }; //if (string.IsNullOrEmpty(serviceResult.Address.CountyName)) return new ThirdResponse { Code = 20110, Msg = "缺少参数Address.CountyName" }; //if (string.IsNullOrEmpty(serviceResult.Address.TownName)) return new ThirdResponse { Code = 20111, Msg = "缺少参数Address.TownName" }; //if (string.IsNullOrEmpty(serviceResult.Address.AddressDetail)) return new ThirdResponse { Code = 20112, Msg = "缺少参数Address.AddressDetail" }; if (string.IsNullOrEmpty(serviceResult.Address.FullAddress)) { return new ThirdResponse { Code = 20113, Msg = "缺少参数Address.FullAddress" } } ; #region 判断是否第三方电商售后服务单及获取售后服务单信息 var service = ThirdECService.ObjectSet().FirstOrDefault(o => o.OrderId == orderId && o.OrderRefundAfterSalesId == serviceId); if (service == null) { return new ThirdResponse { Code = 20114, Msg = "未找到此服务单" } } ; var orderRefund = OrderRefundAfterSales.ObjectSet().FirstOrDefault(p => p.Id == service.OrderRefundAfterSalesId); if (service == null) { return new ThirdResponse { Code = 20115, Msg = "未找到此服务单" } } ; if (service.AgreeApplyTime.HasValue) { return(result); } #endregion #region 退款处理 var refundResult = OrderHelper.ApproveOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty); if (refundResult.ResultCode == 0) { service.AgreeApplyTime = agreeTime; service.StateName = "允许售后"; service.StateDesc = "售后服务申请审核结果回调:允许售后"; orderRefund.RefundReceiveFullAddress = serviceResult.Address.FullAddress; orderRefund.RefundReceiveMobile = serviceResult.Address.Phone; orderRefund.RefundReceiveName = serviceResult.Address.Name; } else { result = new ThirdResponse { Code = 20116, Msg = "内部异常" } }; #endregion #region 保存ThirdECOrderJournal var journal = new ThirdECServiceJournal { Id = Guid.NewGuid(), OrderId = service.OrderId, OrderCode = service.OrderCode, OrderItemId = service.OrderItemId, OrderRefundAfterSalesId = service.OrderRefundAfterSalesId, Name = "售后服务申请审核结果回调:允许售后", Details = refundResult.ResultCode == 0 ? "售后服务申请审核结果回调:允许售后" : refundResult.Message, Json = resultJsonStr, EntityState = EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(journal); #endregion int count = ContextFactory.CurrentThreadContext.SaveChanges(); if (count == 0) { LogHelper.Error(string.Format("ThirdECommerceServiceHelper.AgreeServiceCallback第三方电商允许售后结果回调数据保存失败,入参:{0}", resultJsonStr)); result = new ThirdResponse { Code = 20117, Msg = "内部异常" }; } } catch (Exception ex) { LogHelper.Error("ThirdECommerceServiceHelper.AgreeServiceCallback第三方电商允许售后结果回调异常,Input:" + resultJsonStr, ex); result = new ThirdResponse { Code = 20118, Msg = "内部异常" }; } return(result); }
/// <summary> /// 第三方电商发起售后服务申请 /// </summary> /// <returns></returns> public static ResultDTO CreateService(CommodityOrder order, OrderItem orderItem, OrderRefundAfterSales refund) { string param = string.Format("orderId={0}&refundId={1}", order.Id, refund.Id); LogHelper.Debug(string.Format("ThirdECommerceServiceHelper.CreateService第三方电商发起售后服务申请,入参:{0}", param)); var result = new ResultDTO { Message = "操作失败,请稍后重试", ResultCode = -1 }; try { #region 判断是否第三方电商订单及获取订单信息 var orderSku = ThirdECOrderPackageSku.ObjectSet().FirstOrDefault(o => o.OrderId == order.Id && o.OrderItemId == orderItem.Id); if (orderSku == null) { return(result); } var thirdECommerce = ThirdECommerceHelper.GetThirdECommerce(order.AppId); if (thirdECommerce == null || string.IsNullOrEmpty(thirdECommerce.OpenApiKey) || string.IsNullOrEmpty(thirdECommerce.OpenApiCallerId) || string.IsNullOrEmpty(thirdECommerce.ServiceCreateUrl)) { return(result); } if (ThirdECService.ObjectSet().Any(p => p.OrderRefundAfterSalesId == refund.Id)) { return(result); } #endregion #region 调用第三方发起售后服务申请接口 var jsonStr = string.Empty; var response = ThirdECommerceSV.CreateService(new ThirdApiInfo { Apikey = thirdECommerce.OpenApiKey, CallerId = thirdECommerce.OpenApiCallerId, ApiUrl = thirdECommerce.ServiceCreateUrl }, new ThirdServiceCreate { ServiceId = refund.Id.ToString().ToLower(), OrderId = order.Id.ToString().ToLower(), CustomerName = order.ReceiptUserName, CustomerPhone = order.ReceiptPhone, SkuId = orderSku.SkuId, Number = orderItem.Number, RefundReason = refund.RefundReason, RefundDesc = refund.RefundDesc, RefundImgs = refund.OrderRefundImgs }, ref jsonStr); #endregion var isSuccess = response.Successed && response.Result != null; #region 保存ThirdECService if (isSuccess) { var stateName = string.Empty; var stateDesc = string.Empty; if (response.Result.ServiceStatus == 0) { stateName = "不支持售后"; result = new ResultDTO { Message = response.Result.RejectReason, ResultCode = 1 }; } else if (response.Result.ServiceStatus == 1) { stateName = "待审核"; result = new ResultDTO { isSuccess = true, Message = "请等待审核", ResultCode = 2 }; } stateDesc = response.Result.RejectReason; var service = new ThirdECService { Id = Guid.NewGuid(), OrderId = orderSku.OrderId, OrderCode = orderSku.OrderCode, OrderItemId = orderSku.OrderItemId, OrderRefundAfterSalesId = refund.Id, SubId = order.SubId, SkuId = orderSku.SkuId, Number = orderItem.Number, StateName = stateName, StateDesc = stateDesc, EntityState = EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(service); } else { ContextFactory.ReleaseContextSession(); } #endregion #region 保存ThirdECServiceJournal var journal = new ThirdECServiceJournal { Id = Guid.NewGuid(), OrderId = orderSku.OrderId, OrderCode = orderSku.OrderCode, OrderItemId = orderSku.OrderItemId, OrderRefundAfterSalesId = refund.Id, Name = "发起售后服务申请", Details = response.Msg, Json = jsonStr, EntityState = EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(journal); #endregion if (!isSuccess) //失败则只保存日志 { int count = ContextFactory.CurrentThreadContext.SaveChanges(); if (count == 0) { LogHelper.Error(string.Format("ThirdECommerceServiceHelper.CreateService第三方电商发起售后服务申请数据保存失败,入参:{0}", param)); } } return(result); } catch (Exception ex) { LogHelper.Error(string.Format("ThirdECommerceServiceHelper.CreateService第三方电商发起售后服务申请异常,入参:{0}", param), ex); return(result); } }
/// <summary> /// 第三方电商取消售后服务申请 /// </summary> /// <param name="order"></param> /// <param name="orderItem"></param> /// <param name="refund"></param> /// <returns></returns> public static ResultDTO CancelService(CommodityOrder order, OrderItem orderItem, OrderRefundAfterSales refund) { var type = GetAppThirdECommerceType(order.AppId); if (type == ThirdECommerceTypeEnum.WangYiYanXuan) { return(YXSV.CancelRefundOrder(refund.ApplyId)); } else if (type == ThirdECommerceTypeEnum.ByBiaoZhunJieKou) { return(ThirdECommerceServiceHelper.CancelService(order.AppId, order.Id, refund.Id)); } return(new ResultDTO { isSuccess = true }); }
/// <summary> /// 进销存-同步京东服务单状态 /// </summary> /// <param name="arg"></param> /// <returns></returns> public ResultDTO SynchronizeJDServiceStateExt(SynchronizeJDServiceStateDTO arg) { var json = string.Empty; var result = new ResultDTO(); try { json = JsonHelper.JsonSerializer(arg); LogHelper.Debug("进销存-同步京东服务单状态,入参:" + json); var service = JDEclpOrderRefundAfterSales.ObjectSet() .Where(p => p.Id == arg.JDEclpOrderRefundAfterSalesId) .FirstOrDefault(); if (service == null) { return new ResultDTO { isSuccess = true, Message = "京东服务单不存在" } } ; var refund = OrderRefundAfterSales.ObjectSet().Where(p => p.Id == service.OrderRefundAfterSalesId).FirstOrDefault(); if (refund == null) { return new ResultDTO { isSuccess = true, Message = "售后退款单不存在" } } ; if (JDEclpOrderRefundAfterSalesJournal.ObjectSet().Any(p => p.Code == arg.Code)) { return new ResultDTO { isSuccess = true, Message = "已同步过" } } ; switch ((JDEclpServicesStateEnum)arg.StateTo) { case JDEclpServicesStateEnum.EclpServiceState20080: //正常入库 case JDEclpServicesStateEnum.EclpServiceState20100: //异常入库 var goodNum = arg.ServiceItemList.Count(p => p.WareType == 1 && p.GoodsStatus == 1); //可退商品数量 if (goodNum != arg.ServiceItemList.Count) { if (goodNum == 0) { refund.RefundMoney = 0; } refund.RefundMoney = Math.Round(refund.RefundMoney * goodNum / arg.ServiceItemList.Count, 2); } break; } var journal = new JDEclpOrderRefundAfterSalesJournal { Id = Guid.NewGuid(), OrderId = service.OrderId, OrderCode = service.OrderCode, OrderItemId = service.OrderItemId, OrderRefundAfterSalesId = service.OrderRefundAfterSalesId, EclpOrderNo = service.EclpOrderNo, EclpServicesNo = arg.EclpServicesNo, SubTime = arg.SubTime, Name = new EnumHelper().GetDescription((JDEclpServicesStateEnum)arg.StateTo), Details = arg.Name, StateFrom = service.EclpServicesState, StateTo = arg.StateTo, JDEclpOrderRefundAfterSalesId = service.Id, WarehouseNo = arg.WarehouseNo, WarehouseName = arg.WarehouseName, EntityState = System.Data.EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(journal); if (arg.ServiceItemList != null && arg.ServiceItemList.Count > 0) { arg.ServiceItemList.ForEach(p => { var item = new JDEclpOrderRefundAfterSalesItem { Id = Guid.NewGuid(), JDEclpOrderRefundAfterSalesId = service.Id, IsvGoodsNo = p.IsvGoodsNo, SpareCode = p.SpareCode ?? string.Empty, PartReceiveType = p.PartReceiveType, GoodsStatus = p.GoodsStatus, WareType = p.WareType, ApproveNotes = p.ApproveNotes, EntityState = System.Data.EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(item); }); } service.EclpServicesState = arg.StateTo; service.EclpServicesStateName = new EnumHelper().GetDescription((JDEclpServicesStateEnum)arg.StateTo); if (ContextFactory.CurrentThreadContext.SaveChanges() > 0) { result.isSuccess = true; result.Message = "同步成功"; } else { LogHelper.Error("进销存-同步京东服务单状态:数据保存失败,入参:" + json); result.Message = "数据保存失败"; } } catch (Exception ex) { LogHelper.Error("进销存-同步京东服务单状态异常,入参:" + json, ex); result.Message = "同步异常"; } return(result); }
/// <summary> /// 发起售后申请(售后) /// </summary> /// <returns></returns> public static ResultDTO ApplyRefundOrderAfterSales(CommodityOrder order, OrderItem orderItem, OrderRefundAfterSales refund) { string skuId = null; if (orderItem.CommodityStockId.HasValue && orderItem.CommodityStockId != Guid.Empty && orderItem.CommodityStockId != orderItem.CommodityId) { var comStock = CommodityStock.FindByID(orderItem.CommodityStockId.Value); if (comStock == null) { return(new ResultDTO { isSuccess = false, Message = "商品不存在。", ResultCode = -1 }); } else { skuId = comStock.JDCode; } } else { var commodity = Commodity.FindByID(orderItem.CommodityId); if (commodity == null) { return(new ResultDTO { isSuccess = false, Message = "商品不存在。", ResultCode = -1 }); } else { skuId = commodity.JDCode; } } if (string.IsNullOrEmpty(skuId)) { return(new ResultDTO { isSuccess = false, Message = "商品SKU编码不存在。", ResultCode = -1 }); } var orderSku = YXOrderSku.ObjectSet().Where(_ => _.OrderId == order.Id && _.SkuId == skuId).FirstOrDefault(); if (orderSku == null) { return(new ResultDTO { isSuccess = false, Message = "订单SKU存在。", ResultCode = -1 }); } var requestData = new ApplyInfo { orderId = order.Id.ToString(), requestId = "s" + refund.Id.ToString(), applyUser = new ApplyUser { name = order.ReceiptUserName, mobile = order.ReceiptPhone }, applySku = new ApplySku { packageId = orderSku.PackageId, skuId = orderSku.SkuId, count = orderSku.SaleCount, originalPrice = orderSku.OriginPrice, subtotalPrice = orderSku.SubtotalAmount, applySkuReason = new ApplySkuReason { reason = refund.RefundReason, reasonDesc = refund.RefundDesc }, applyPicList = new List <ApplyPic> { } } }; if (!string.IsNullOrEmpty(refund.OrderRefundImgs)) { foreach (var img in refund.OrderRefundImgs.Split(',')) { requestData.applySku.applyPicList.Add(new ApplyPic { fileName = System.IO.Path.GetFileName(img), url = img }); } } var result = YXSV.ApplyRefundOrder(requestData); if (!result.isSuccess) { return(result); } refund.ApplyId = result.Data.applyId; return(new ResultDTO { isSuccess = true }); }
/// <summary> /// 退货地址回调 /// </summary> /// <param name="result"></param> public static void OrderRefundAddress(RefundAddress result) { try { Guid orderId; Guid.TryParse(result.orderId, out orderId); LogHelper.Debug("进入 YXOrderHelper.OrderRefundAddress,Input:" + JsonConvert.SerializeObject(result)); var orderRefund = OrderRefundAfterSales.ObjectSet().Where(_ => _.ApplyId == result.applyId).FirstOrDefault(); if (orderRefund == null) { LogHelper.Error("YXOrderHelper.OrderRefundAddress 失败,未找到退款记录,Input:" + JsonConvert.SerializeObject(result)); } var refundResult = OrderHelper.ApproveOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty); if (refundResult.ResultCode != 0) { // 失败 LogHelper.Error("YXOrderHelper.OrderRefundAddress 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); } else { ContextSession contextSession = ContextFactory.CurrentThreadContext; orderRefund.RefundReturnType = result.type; orderRefund.RefundReceiveFullAddress = result.returnAddr.fullAddress; orderRefund.RefundReceiveMobile = result.returnAddr.mobile; orderRefund.RefundReceiveName = result.returnAddr.name; //orderRefund.EntityState = System.Data.EntityState.Added; contextSession.SaveObject(orderRefund); contextSession.SaveChanges(); } //if (result.applyId.StartsWith("s")) //{ // // 售后 // var orderRefund = OrderRefundAfterSales.FindByID(new Guid(result.applyId.Substring(1))); // if (orderRefund == null) // { // LogHelper.Error("YXOrderHelper.OrderRefundAddress 失败,未找到退款记录,Input:" + JsonConvert.SerializeObject(result)); // } // var refundResult = OrderHelper.ApproveOrderRefund(orderId, orderRefund.OrderItemId ?? Guid.Empty); // if (refundResult.ResultCode != 0) // { // // 失败 // LogHelper.Error("YXOrderHelper.OrderRefundAddress 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); // } //} //else //{ // //售前 // var orderRefund = OrderRefund.FindByID(new Guid(result.applyId)); // if (orderRefund == null) // { // LogHelper.Error("YXOrderHelper.OrderRefundAddress 失败,未找到退款记录,Input:" + JsonConvert.SerializeObject(result)); // } // var refundResult = OrderHelper.ApproveOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty); // if (refundResult.ResultCode != 0) // { // // 失败 // LogHelper.Error("YXOrderHelper.OrderRefundAddress 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); // } //} } catch (Exception ex) { LogHelper.Error("YXOrderHelper.OrderRefundAddress 异常,Input:" + JsonConvert.SerializeObject(result), ex); } }
/// <summary> /// 取消单品退款时调用(售后) /// </summary> public static ResultDTO OnCancelOrderItemRefundAfterSales(CommodityOrder order, OrderItem orderItem, OrderRefundAfterSales refund) { return(ThirdECommerceHelper.CancelService(order, orderItem, refund)); }
/// <summary> /// 售后退款时回退积分 /// </summary> /// <param name="contextSession"></param> /// <param name="commodityOrder"></param> /// <param name="orderRefundAfterSales"></param> /// <returns></returns> public static bool CommodityOrderAfterSalesRefundScore(ContextSession contextSession, CommodityOrder commodityOrder, OrderRefundAfterSales orderRefundAfterSales) { if (!commodityOrder.EsAppId.HasValue) { return(true); } //使用了积分 if (orderRefundAfterSales.RefundScoreMoney > 0) { //获取当时的积分比例 CostScoreInfoDTO scoreCostDto; if (new ScoreSV().GetScoreCost(commodityOrder.EsAppId.Value, out scoreCostDto, commodityOrder.SubTime)) { int srore = (int)(orderRefundAfterSales.RefundScoreMoney * scoreCostDto.Cost); bool refundScoreResult = SignSV.Instance.RefundScore(commodityOrder.UserId, commodityOrder.EsAppId.Value, srore, commodityOrder.Id, commodityOrder.Code, scoreCostDto.ScoreType); if (!refundScoreResult) { LogHelper.Error(string.Format("售中退款时回退积分失败。UserId:{0},EsAppId:{1},srore:{2}", commodityOrder.UserId, commodityOrder.EsAppId.Value, srore)); ErrorCommodityOrder errorOrder = new ErrorCommodityOrder(); errorOrder.Id = Guid.NewGuid(); errorOrder.ErrorOrderId = commodityOrder.Id; errorOrder.ResourceType = 1; errorOrder.Source = 107; errorOrder.State = 0; errorOrder.AppId = commodityOrder.EsAppId.Value; errorOrder.UserId = commodityOrder.UserId; errorOrder.OrderCode = commodityOrder.Code; errorOrder.CouponId = Guid.Empty; errorOrder.Score = srore; errorOrder.SubTime = DateTime.Now; errorOrder.ModifiedOn = DateTime.Now; errorOrder.ScoreType = (int)scoreCostDto.ScoreType; errorOrder.EntityState = System.Data.EntityState.Added; contextSession.SaveObject(errorOrder); } return(refundScoreResult); } } return(true); }
/// <summary> /// /// </summary> /// <param name="contextSession"></param> /// <param name="order"></param> /// <param name="orderItem"></param> /// <param name="refund"></param> /// <param name="refundDTO"></param> /// <returns></returns> public static ResultDTO SNSubmitRefund(ContextSession contextSession, CommodityOrder order, OrderItem orderItem, OrderRefundAfterSales refund, SubmitOrderRefundDTO refundDTO) { //if (address == null) //{ // return new ResultDTO { isSuccess = false, Message = "取件地址不能为空。" }; //} var snOrderItem = SNOrderItem.ObjectSet() .Where(_ => _.OrderItemId == refundDTO.OrderItemId).FirstOrDefault(); if (snOrderItem == null) { return(new ResultDTO { isSuccess = false, ResultCode = 1, Message = "该订单不是苏宁订单。" }); } SNReturnPartOrderDTO retDto = new SNReturnPartOrderDTO { OrderId = snOrderItem.CustomOrderId, SkusList = new List <SNReturnPartOrderAddSkusDTO>() { new SNReturnPartOrderAddSkusDTO() { SkuId = snOrderItem.CustomSkuId, Num = orderItem.Number.ToString() } } }; ResultDTO result = new ResultDTO { isSuccess = false, ResultCode = 1, Message = "退货失败" }; SNFactoryDeliveryEnum fac = GetOrderFactoryDeliveryType(orderItem.CommodityOrderId, snOrderItem.CustomSkuId); if (fac == SNFactoryDeliveryEnum.NonFactoryDelivery) { result = SuningSV.ReturnPartOrder(retDto);; if (result.isSuccess) { // 保存到 SNOrderRefundAfterSales SNOrderRefundAfterSales snOrderRefundAfterSales = new SNOrderRefundAfterSales { Id = Guid.NewGuid(), SubTime = DateTime.Now, ModifiedOn = DateTime.Now, AppId = order.AppId, OrderRefundAfterSalesId = refund.Id, OrderId = orderItem.CommodityOrderId, OrderItemId = orderItem.Id, CustomOrderId = snOrderItem.CustomOrderId, CommodityId = orderItem.CommodityId, CommodityNum = orderItem.Number, CustomSkuId = snOrderItem.CustomSkuId, Cancel = 1, //取件方式(必填 1 上门取件-非厂送-自营 2快递寄回-厂送 ) PickwareType = fac.GetHashCode(), CustomerContactName = refundDTO.Address.customerContactName, CustomerTel = refundDTO.Address.customerTel, PickwareAddress = refundDTO.Address.ProviceCityStr + refundDTO.Address.pickwareAddress, //暂时没用 AfsServiceId = "", AfsServiceStep = 10, AfsServiceStepName = "申请阶段", EntityState = EntityState.Added }; contextSession.SaveObject(snOrderRefundAfterSales); UpdateApplyOrderStatus(contextSession, 3, orderItem.Id); } else { UpdateApplyOrderStatus(contextSession, 4, orderItem.Id); var log = new Deploy.JdlogsDTO { Id = Guid.NewGuid(), SubTime = DateTime.Now, ThirdECommerceType = ThirdECommerceTypeEnum.SuNingYiGou.GetHashCode(), Content = "【苏宁售后】----【" + order.Code + "】中的" + orderItem.Name + "商品【" + snOrderItem.CustomSkuId + "】,提交售后申请失败,失败原因:【" + result.ResultCode + ":" + result.Message + "】" }; JdlogsFacade facade = new JdlogsFacade(); facade.SaveJdlogs(log); } } else { // 保存到 SNOrderRefundAfterSales SNOrderRefundAfterSales snOrderRefundAfterSales = new SNOrderRefundAfterSales { Id = Guid.NewGuid(), SubTime = DateTime.Now, ModifiedOn = DateTime.Now, AppId = order.AppId, OrderRefundAfterSalesId = refund.Id, OrderId = orderItem.CommodityOrderId, OrderItemId = orderItem.Id, CustomOrderId = snOrderItem.CustomOrderId, CommodityId = orderItem.CommodityId, CommodityNum = orderItem.Number, CustomSkuId = snOrderItem.CustomSkuId, Cancel = 1, //取件方式(必填 1 上门取件-非厂送-自营 2快递寄回-厂送 ) PickwareType = fac.GetHashCode(), CustomerContactName = refundDTO.Address.customerContactName, CustomerTel = refundDTO.Address.customerTel, PickwareAddress = refundDTO.Address.ProviceCityStr + refundDTO.Address.pickwareAddress, //暂时没用 AfsServiceId = "", AfsServiceStep = 10, AfsServiceStepName = "申请阶段", EntityState = EntityState.Added }; contextSession.SaveObject(snOrderRefundAfterSales); UpdateApplyOrderStatus(contextSession, 3, orderItem.Id); result = new ResultDTO { isSuccess = true, ResultCode = 0, Message = "退款申请成功" }; } return(result); }
/// <summary> /// 售后退款时,回退用户易捷币和易捷抵用券 单品 /// </summary> public static ResultDTO OrderItemAfterSalesRefund(ContextSession contextSession, CommodityOrder commodityOrder, OrderRefundAfterSales orderRefundAfterSales, decimal commodityPrice, Guid comodityId, Guid orderItemId, Guid useryjcouponid) { if (commodityOrder.EsAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId) { return(ResultDTO.Successed); } #region 记录抵用券退款明细表 var user = CBCSV.GetUserNameAndCode(commodityOrder.UserId); if (commodityPrice > 0) { var orderitemorder = (from i in OrderItem.ObjectSet() where i.Id == orderItemId select i).FirstOrDefault(); 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 = orderRefundAfterSales.RefundMoney; couponRefundDetailDTO.FreightRefundMoney = orderRefundAfterSales.RefundFreightPrice; couponRefundDetailDTO.RefundTotalMoney = commodityPrice + orderRefundAfterSales.RefundMoney + orderRefundAfterSales.RefundFreightPrice; couponRefundDetailDTO.ShopName = commodityOrder.AppName; couponRefundDetailDTO.OrderNo = commodityOrder.Code; couponRefundDetailDTO.CommoidtyName = orderitemorder.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.RefundOrderItemJournal(commodityOrder.Id, comodityId, orderRefundAfterSales.RefundYJBMoney, orderItemId, commodityPrice, mobile, commodityOrder.UserId, useryjcouponid); if (!result.IsSuccess) { LogHelper.Error("售后退款时,回退用户易捷币失败,订单ID:" + commodityOrder.Id + ",错误内容:" + result.Message); LogOrderErrorInfo(contextSession, commodityOrder, "售后退款时,回退用户易捷币失败"); } return(result); }