/// <summary> /// 订单支付成功时调用 /// </summary> /// <param name="order"></param> public static void OnOrderPaySuccess(CommodityOrder order) { LogHelper.Info("进入OrderEventHelper.OnOrderPaySuccess-" + order.Code + ",OrderId:" + order.Id + ",OrderState:" + order.State); // 拼图支付成功时不触发 if (order.State != 1) { return; } // 发送消息 var requestPar = "{\"project\":\"btp\",\"topic\":\"btporder-0x0001\",\"data\":\""; var data = "{\"orderId\": \"" + order.Id + "\",\"userId\": \"" + order.UserId + "\",\"appId\": \"" + order.AppId + "\"}"; requestPar += System.Web.HttpUtility.UrlEncode(data, Encoding.GetEncoding("gbk")) + "\"}"; var requestUrl = msgUrl + "?" + System.Web.HttpUtility.UrlEncode(requestPar, Encoding.GetEncoding("gbk")); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl); request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; try { using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.OK) { LogHelper.Info("OrderEventHelper.OnOrderPaySuccess 发送消息成功, RequestUrl: " + requestUrl); } else { LogHelper.Error("OrderEventHelper.OnOrderPaySuccess 发送消息失败, RequestUrl: " + requestUrl + " \r\nResponseCode: " + response.StatusCode); } } } catch (Exception ex) { LogHelper.Error("OrderEventHelper.OnOrderPaySuccess 发送消息异常, RequestUrl: " + requestUrl, ex); } switch (ThirdECommerceHelper.GetAppThirdECommerceType(order.AppId)) { case Deploy.Enum.ThirdECommerceTypeEnum.JingDongDaKeHu: // 更新京东订单 JdOrderHelper.UpdateJdorder(order.Id); break; case Deploy.Enum.ThirdECommerceTypeEnum.SuNingYiGou: // 确认苏宁预占 SuningSV.suning_govbus_confirmorder_add(order.Id, false); break; case Deploy.Enum.ThirdECommerceTypeEnum.FangZheng: // 方正电商订单 FangZhengSV.FangZheng_Order_Confirm(order.Id, false); break; } }
/// <summary> /// 取消整单退款时调用(售后) /// </summary> public static ResultDTO OnCancelOrderRefundAfterSales(CommodityOrder order, OrderRefundAfterSales refund) { // 判断严选订单 if (ThirdECommerceHelper.IsWangYiYanXuan(order.AppId)) { } return(new ResultDTO { isSuccess = true }); }
/// <summary> /// 整单退款时调用 /// </summary> /// <param name="order"></param> /// <param name="oldState"></param> /// <param name="refund"></param> public static ResultDTO OnOrderRefund(CommodityOrder order, int oldState, OrderRefund refund) { // 网易严选和其他第三方电商只有在未发货时支持整单退款 if (oldState == 1) { return(ThirdECommerceHelper.CancelOrder(order)); } return(new ResultDTO { isSuccess = true }); }
/// <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> /// <param name="order"></param> /// <param name="orderItem"></param> /// <param name="refund"></param> public static ResultDTO OnOrderItemRefund(CommodityOrder order, OrderItem orderItem, OrderRefund refund) { // 判断严选订单 if (ThirdECommerceHelper.IsWangYiYanXuan(order.AppId)) { return(new ResultDTO { isSuccess = false, ResultCode = 1, Message = "确认收货后才能申请售后~" }); } return(new ResultDTO { isSuccess = true }); }
/// <summary> /// 取消整单退款时调用 /// </summary> /// <param name="order"></param> /// <param name="refund"></param> public static ResultDTO OnCancelOrderRefund(CommodityOrder order, OrderRefund refund) { // 判断严选订单 if (ThirdECommerceHelper.IsWangYiYanXuan(order.AppId)) { return(new ResultDTO { ResultCode = 1, Message = "不支持整单取消退款。" }); } return(new ResultDTO { isSuccess = true }); }
/// <summary> /// 添加退货物流信息时调用 /// </summary> public static ResultDTO OnOrderRefundOfferExpress(OrderRefund refund, string trackingCompany, string trackingNum) { // 判断严选订单 if (ThirdECommerceHelper.IsWangYiYanXuan(refund.OrderId)) { return(new ResultDTO { isSuccess = false, Message = "不支持" }); //return YXSV.ExpressOfferRefundOrder(refund.ApplyId, new List<ExpressInfo> { new ExpressInfo { trackingCompany = trackingCompany, trackingNum = trackingNum } }); } 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 }); }
/// <summary> /// 取消单品退款时调用(售后) /// </summary> public static ResultDTO OnCancelOrderItemRefundAfterSales(CommodityOrder order, OrderItem orderItem, OrderRefundAfterSales refund) { return(ThirdECommerceHelper.CancelService(order, orderItem, refund)); }
/// <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="appId"></param> /// <param name="orderId"></param> /// <param name="serviceId"></param> /// <returns></returns> public static ResultDTO CancelService(Guid appId, Guid orderId, Guid serviceId) { string param = string.Format("appId={0}&orderId={1}&serviceId={2}", appId, orderId, serviceId); LogHelper.Debug(string.Format("ThirdECommerceServiceHelper.CancelService第三方电商取消售后服务申请,入参:{0}", param)); var result = new ResultDTO { Message = "操作失败,请稍后重试" }; try { #region 判断是否第三方电商售后服务单及获取售后服务单信息 var service = ThirdECService.ObjectSet().FirstOrDefault(o => o.OrderRefundAfterSalesId == serviceId); if (service == null) { return(result); } var thirdECommerce = ThirdECommerceHelper.GetThirdECommerce(appId); if (thirdECommerce == null || string.IsNullOrEmpty(thirdECommerce.OpenApiKey) || string.IsNullOrEmpty(thirdECommerce.OpenApiCallerId) || string.IsNullOrEmpty(thirdECommerce.ServiceCancelUrl)) { return(result); } if (service.UserCancelTime.HasValue) { return(result); } #endregion #region 调用第三方取消售后服务申请接口 var jsonStr = string.Empty; var response = ThirdECommerceSV.CancelService(new ThirdApiInfo { Apikey = thirdECommerce.OpenApiKey, CallerId = thirdECommerce.OpenApiCallerId, ApiUrl = thirdECommerce.ServiceCancelUrl }, serviceId.ToString(), ref jsonStr); #endregion var isSuccess = response.Successed; #region 修改ThirdECService if (isSuccess) { service.UserCancelTime = DateTime.Now; service.StateName = "取消售后服务申请成功"; result = new ResultDTO { isSuccess = true }; } else { ContextFactory.ReleaseContextSession(); service.StateName = "取消售后服务申请失败"; result = new ResultDTO { Message = response.Msg ?? "不允许取消" }; } service.StateDesc = response.Msg; #endregion #region 保存ThirdECServiceJournal var journal = new ThirdECServiceJournal { Id = Guid.NewGuid(), OrderId = service.OrderId, OrderCode = service.OrderCode, OrderItemId = service.OrderItemId, OrderRefundAfterSalesId = service.OrderRefundAfterSalesId, 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="orderId"></param> public static void CreateOrder(Guid orderId) { string param = string.Format("orderId={0}", orderId); LogHelper.Debug(string.Format("ThirdECOrderHelper.CreateOrder创建第三方电商订单,入参:{0}", param)); if (orderId == Guid.Empty) { return; } Task.Factory.StartNew(() => { try { #region 判断是否第三方电商订单及获取订单信息 var order = CommodityOrder.ObjectSet().FirstOrDefault(o => o.Id == orderId); if (order == null || !order.PaymentTime.HasValue || order.State != 1 || order.EsAppId != YJB.Deploy.CustomDTO.YJBConsts.YJAppId) { return; } var thirdECommerce = ThirdECommerceHelper.GetThirdECommerce(order.AppId); if (thirdECommerce == null || string.IsNullOrEmpty(thirdECommerce.OpenApiKey) || string.IsNullOrEmpty(thirdECommerce.OpenApiCallerId) || string.IsNullOrEmpty(thirdECommerce.OrderCreateUrl)) { return; } var orderItemList = OrderItem.ObjectSet() .Where(p => p.CommodityOrderId == order.Id && p.JDCode != null && p.JDCode != string.Empty) .Select(p => new { p.JDCode, p.Name, p.Number, CostPrice = p.CostPrice ?? 0 }).ToList(); if (orderItemList.Count == 0) { return; } if (ThirdECOrder.ObjectSet().Any(p => p.OrderId == order.Id)) { return; } #endregion #region 调用第三方电商订单提交接口 var jsonStr = string.Empty; var response = ThirdECommerceSV.CreateOrder(new ThirdApiInfo { Apikey = thirdECommerce.OpenApiKey, CallerId = thirdECommerce.OpenApiCallerId, ApiUrl = thirdECommerce.OrderCreateUrl }, new ThirdOrderCreate { OrderId = order.Id.ToString().ToLower(), SubTime = order.SubTime.ToString("yyyy-MM-dd HH:mm:ss"), PayTime = order.PaymentTime.Value.ToString("yyyy-MM-dd HH:mm:ss"), Address = new ThirdAddress { Name = order.ReceiptUserName, Phone = order.ReceiptPhone, ProvinceName = order.Province, CityName = order.City, CountyName = order.District, TownName = order.Street, AddressDetail = order.ReceiptAddress, FullAddress = order.Province + order.City + order.District + order.Street + order.ReceiptAddress, ZipCode = order.RecipientsZipCode }, OrderSkus = orderItemList.Select(p => new ThirdOrderCreateSku { SkuId = p.JDCode, Name = p.Name, Number = p.Number, Price = p.CostPrice }).ToList() }, ref jsonStr); #endregion #region 保存ThirdECOrderJournal var thirdOrderJournal = new ThirdECOrderJournal { Id = Guid.NewGuid(), OrderId = order.Id, OrderCode = order.Code, SubTime = DateTime.Now, SubId = order.SubId, Name = "提交订单", Details = response.Msg, Json = jsonStr, EntityState = EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(thirdOrderJournal); #endregion #region 保存错误日志 if (!response.Successed) { SaveErrorLog(new ThirdECOrderErrorLogDTO { Content = response.Msg, AppId = order.AppId, OrderId = order.Id, OrderCode = order.Code, AppName = order.AppName, CommodityNames = string.Join("、", orderItemList.Select(x => x.Name).ToList()), Json = jsonStr }); return; } #endregion #region 保存ThirdECOrder var thirdOrder = new ThirdECOrder { Id = Guid.NewGuid(), OrderId = order.Id, OrderCode = order.Code, OrderSubTime = order.SubTime, PayTime = order.PaymentTime.Value, SubId = order.SubId, AppId = order.AppId, EsAppId = order.EsAppId.Value, AppName = order.AppName, AppType = order.AppType, SupplierName = order.SupplierName, SupplierCode = order.SupplierCode, SupplierType = order.SupplierType, ShipperType = order.ShipperType, StateName = "下单成功", EntityState = EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(thirdOrder); #endregion int count = ContextFactory.CurrentThreadContext.SaveChanges(); if (count == 0) { LogHelper.Error(string.Format("ThirdECOrderHelper.CreateOrder创建第三方电商订单失败,入参:{0}", param)); } } catch (Exception ex) { LogHelper.Error(string.Format("ThirdECOrderHelper.CreateOrder创建第三方电商订单异常,入参:{0}", param), ex); } }); }
/// <summary> /// 取消第三方电商订单 /// </summary> /// <param name="orderId"></param> public static ResultDTO CancelOrder(Guid orderId) { string param = string.Format("orderId={0}", orderId); LogHelper.Debug(string.Format("ThirdECOrderHelper.CancelOrder取消第三方电商订单,入参:{0}", param)); if (orderId == Guid.Empty) { return new ResultDTO { Message = "参数有误" } } ; var result = new ResultDTO { Message = "操作失败,请稍后重试", ResultCode = -1 }; try { #region 判断是否第三方电商订单及获取订单信息 var order = ThirdECOrder.ObjectSet().FirstOrDefault(o => o.OrderId == orderId); if (order == null) { return(result); } var thirdECommerce = ThirdECommerceHelper.GetThirdECommerce(order.AppId); if (thirdECommerce == null || string.IsNullOrEmpty(thirdECommerce.OpenApiKey) || string.IsNullOrEmpty(thirdECommerce.OpenApiCallerId) || string.IsNullOrEmpty(thirdECommerce.OrderCancelUrl)) { return(result); } if (order.CancelResultTime.HasValue) { return(result); } #endregion order.CancelApplyTime = DateTime.Now; #region 调用第三方电商订单取消接口 var jsonStr = string.Empty; var response = ThirdECommerceSV.CancelOrder(new ThirdApiInfo { Apikey = thirdECommerce.OpenApiKey, CallerId = thirdECommerce.OpenApiCallerId, ApiUrl = thirdECommerce.OrderCancelUrl }, orderId.ToString(), ref jsonStr); #endregion var isSuccess = response.Successed && response.Result != null; #region 修改ThirdECOrder if (isSuccess) { order.CancelResultTime = DateTime.Now; if (response.Result.CancelStatus == 0) { order.StateName = "不允许取消"; result = new ResultDTO { Message = response.Result.RejectReason, ResultCode = 1 }; } else if (response.Result.CancelStatus == 1) { order.StateName = "允许取消"; // 模拟订单取消审核结果回调 Timer timer = null; timer = new Timer(_ => { CancelOrderCallback(JsonConvert.SerializeObject(new { OrderId = order.Id.ToString().ToLower(), CancelStatus = 1 })); timer.Dispose(); }, null, 2000, System.Threading.Timeout.Infinite); result = new ResultDTO { isSuccess = true, Message = response.Result.RejectReason, ResultCode = 0 }; } else if (response.Result.CancelStatus == 2) { order.StateName = "待审核"; result = new ResultDTO { isSuccess = true, Message = "请等待审核", ResultCode = 2 }; } order.StateDesc = response.Result.RejectReason; } else { ContextFactory.ReleaseContextSession(); order.StateName = "取消订单申请失败"; order.StateDesc = response.Msg; } #endregion #region 保存ThirdECOrderJournal var thirdOrderJournal = new ThirdECOrderJournal { Id = Guid.NewGuid(), OrderId = order.OrderId, OrderCode = order.OrderCode, SubTime = DateTime.Now, SubId = order.SubId, Name = "取消订单申请", Details = response.Msg, Json = jsonStr, EntityState = EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(thirdOrderJournal); #endregion if (!isSuccess) //失败则只保存日志 { int count = ContextFactory.CurrentThreadContext.SaveChanges(); if (count == 0) { LogHelper.Error(string.Format("ThirdECOrderHelper.CancelOrder取消第三方电商订单数据保存失败,入参:{0}", param)); } } return(result); } catch (Exception ex) { LogHelper.Error(string.Format("ThirdECOrderHelper.CancelOrder取消第三方电商订单异常,入参:{0}", param), ex); return(result); } }