/// <summary> /// 第三方电商获取订单项物流轨迹信息 /// </summary> /// <param name="orderItemId"></param> /// <returns></returns> public static ThirdOrderPackageExpress GetExpressInfo(Guid orderItemId) { if (orderItemId == Guid.Empty) { return(null); } try { var expressSku = ThirdECOrderPackageSku.ObjectSet().Where(p => p.OrderItemId == orderItemId).FirstOrDefault(); if (expressSku == null) { return(null); } var express = new ThirdOrderPackageExpress { ExpressCompany = expressSku.ExpressCompany, ExpressNo = expressSku.ExpressNo, ExpressTraceList = new List <ThirdExpressTrace>() }; ThirdECExpressTrace.ObjectSet().Where(p => p.OrderId == expressSku.OrderId && p.PackageId == expressSku.PackageId && p.ExpressCompany == expressSku.ExpressCompany && p.ExpressNo == expressSku.ExpressNo).ToList().ForEach(p => { express.ExpressTraceList.Add(new ThirdExpressTrace { Desc = p.Desc, Time = p.Time.ToString("yyyy-MM-dd HH:mm:ss") }); }); return(express); } catch (Exception ex) { LogHelper.Error(string.Format("ThirdECommerceOrderHelper.GetExpressInfo第三方电商获取订单项物流轨迹信息异常,入参:orderItemId={0}", orderItemId), ex); } return(null); }
/// <summary> /// 第三方电商获取订单包裹商品物流信息 /// </summary> /// <param name="orderId"></param> /// <returns></returns> public static List <ThirdECOrderPackageSkuDTO> GetThirdECOrderPackageSkuList(Guid orderId) { if (orderId == Guid.Empty) { return(new List <ThirdECOrderPackageSkuDTO>()); } try { return(ThirdECOrderPackageSku.ObjectSet() .Where(p => p.OrderId == orderId) .ToList() .Select(p => p.ToEntityData()) .ToList()); } catch (Exception ex) { LogHelper.Error(string.Format("ThirdECommerceOrderHelper.GetThirdECOrderPackageSkuList第三方电商获取订单包裹商品物流信息异常,入参:orderId={0}", orderId), ex); } return(new List <ThirdECOrderPackageSkuDTO>()); }
/// <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="result"></param> public static ThirdResponse DeliverOrderCallback(string packageJsonStr) { LogHelper.Debug("ThirdECommerceOrderHelper.DeliverOrderCallback第三方电商商品发货信息回调,Input:" + packageJsonStr); if (string.IsNullOrEmpty(packageJsonStr)) { return new ThirdResponse { Code = 10300, Msg = "缺少参数orderPackage" } } ; try { var packageResult = JsonConvert.DeserializeObject <ThirdOrderPackage>(packageJsonStr); if (packageResult == null) { return new ThirdResponse { Code = 10301, Msg = "非法参数orderPackage" } } ; Guid orderId; Guid.TryParse(packageResult.OrderId, out orderId); DateTime expCreateTime; DateTime.TryParse(packageResult.ExpCreateTime, out expCreateTime); if (orderId == Guid.Empty) { return new ThirdResponse { Code = 10302, Msg = "非法参数OrderId" } } ; if (string.IsNullOrEmpty(packageResult.ExpressCompany)) { return new ThirdResponse { Code = 10303, Msg = "非法参数ExpressCompany" } } ; if (string.IsNullOrEmpty(packageResult.ExpressNo)) { return new ThirdResponse { Code = 10304, Msg = "非法参数ExpressNo" } } ; if (packageResult.SkuIdList == null || packageResult.SkuIdList.Count == 0) { return new ThirdResponse { Code = 10305, Msg = "非法参数SkuIdList" } } ; if (expCreateTime == DateTime.MinValue) { return new ThirdResponse { Code = 10306, Msg = "非法参数ExpCreateTime" } } ; #region 判断是否第三方电商订单及获取订单信息 var order = ThirdECOrder.ObjectSet().FirstOrDefault(o => o.OrderId == orderId); if (order == null) { return new ThirdResponse { Code = 10307, Msg = "未找到此订单" } } ; var orderItemList = OrderItem.ObjectSet() .Where(p => p.CommodityOrderId == orderId) .Select(p => new { SkuId = p.JDCode, OrderItemId = p.Id, p.CommodityId, CommodityStockId = p.CommodityStockId ?? Guid.Empty, }).ToList(); if (orderItemList.Count == 0) { return new ThirdResponse { Code = 10308, Msg = "未找到订单sku" } } ; #endregion #region ThirdECOrderPackage和ThirdECOrderPackageSku var package = ThirdECOrderPackage.ObjectSet().FirstOrDefault(p => p.OrderId == orderId && p.ExpressCompany == packageResult.ExpressCompany && p.ExpressNo == packageResult.ExpressNo); if (package == null) { package = new ThirdECOrderPackage { Id = Guid.NewGuid(), OrderId = order.OrderId, OrderCode = order.OrderCode, ExpressCompany = packageResult.ExpressCompany, ExpressNo = packageResult.ExpressNo, ExpCreateTime = DateTime.Parse(packageResult.ExpCreateTime), EntityState = EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(package); packageResult.SkuIdList.ForEach(skuId => { var orderItem = orderItemList.FirstOrDefault(p => p.SkuId == skuId); if (orderItem == null) { return; } var packageSku = new ThirdECOrderPackageSku { Id = Guid.NewGuid(), OrderId = order.OrderId, OrderCode = order.OrderCode, OrderItemId = orderItem.OrderItemId, CommodityId = orderItem.CommodityId, CommodityStockId = orderItem.CommodityStockId, PackageId = package.Id, SkuId = skuId, ExpressCompany = packageResult.ExpressCompany, ExpressNo = packageResult.ExpressNo, EntityState = EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(packageSku); }); } #endregion #region ThirdECOrderJournal var packageJournal = new ThirdECOrderJournal { Id = Guid.NewGuid(), OrderId = order.OrderId, OrderCode = order.OrderCode, Name = "订单商品发货", Details = packageResult.ExpressCompany + "|" + packageResult.ExpressNo, Json = packageJsonStr, EntityState = EntityState.Added }; ContextFactory.CurrentThreadContext.SaveObject(packageJournal); #endregion int count = ContextFactory.CurrentThreadContext.SaveChanges(); if (count > 0) { #region 订单所有商品发货后更新订单状态到已发货 if (ThirdECOrderPackageSku.ObjectSet().Count(p => p.OrderId == orderId) >= orderItemList.Select(x => x.SkuId).Distinct().Count()) { var commodityOrder = new CommodityOrderDTO(); commodityOrder.Id = orderId; commodityOrder.State = 2; commodityOrder.ShipmentsTime = DateTime.Now; var facade = new CommodityOrderFacade(); facade.ContextDTO = AuthorizeHelper.CoinInitAuthorizeInfo(); facade.UpdateCommodityOrder(commodityOrder); } #endregion } else { LogHelper.Error(string.Format("ThirdECommerceOrderHelper.DeliverOrderCallback第三方电商商品发货信息回调失败,入参:{0}", packageJsonStr)); return(new ThirdResponse { Code = 10309, Msg = "内部异常" }); } } catch (JsonReaderException ex) { LogHelper.Error("ThirdECommerceOrderHelper.DeliverOrderCallback第三方电商商品发货信息回调反序列化异常,Input:" + packageJsonStr, ex); return(new ThirdResponse <ThirdOrderCancelResult> { Msg = "反序列化异常" }); } catch (Exception ex) { LogHelper.Error(string.Format("ThirdECommerceOrderHelper.DeliverOrderCallback第三方电商商品发货信息回调异常,入参:{0}", packageJsonStr), ex); return(new ThirdResponse { Code = 10310, Msg = "内部异常" }); } return(new ThirdResponse { Code = 200, Msg = "ok" }); }