From f68615777ab47b687d0d4ee3b3be8fcf3a1c3b2c Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 11 Jun 2023 14:50:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E6=9E=84=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseOrderController.cs | 27 +- BBWYB.Server.Business/Order/OrderBusiness.cs | 160 +++-- .../PurchaseOrder/PurchaseOrderBusiness.cs | 672 ++++++++++-------- BBWYB.Server.Business/QiKuManager.cs | 66 ++ .../Db/Order/OrderPurchaseInfo.cs | 10 +- .../Db/Order/PurchaseExpressOrder.cs | 2 +- .../Order/OrderPurchaseInfoResponse.cs | 6 - 7 files changed, 573 insertions(+), 370 deletions(-) create mode 100644 BBWYB.Server.Business/QiKuManager.cs diff --git a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs index 7a0cb99..6b4551d 100644 --- a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs @@ -1,4 +1,6 @@ -using BBWYB.Server.Business; +using BBWYB.Common.Models; +using BBWYB.Server.API.Filters; +using BBWYB.Server.Business; using BBWYB.Server.Model.Dto; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authorization; @@ -75,7 +77,8 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public void SignPurchaseOrder([FromBody] SignPurchaseOrderRequest request) { - purchaseOrderBusiness.SignPurchaseOrder(request); + throw new BusinessException("SignPurchaseOrder接口已经停用"); + //purchaseOrderBusiness.SignPurchaseOrder(request); } /// @@ -109,5 +112,25 @@ namespace BBWYB.Server.API.Controllers { purchaseOrderBusiness.CallbackFrom1688(message); } + + [Consumes("application/x-www-form-urlencoded")] + [HttpPost] + public IActionResult KuaiDi100Publish([FromForm] string sign, [FromForm] string param) + { + #region 去掉本次请求的DTO格式 + var filters = ControllerContext.ActionDescriptor.FilterDescriptors; + var filterToRemove = filters.FirstOrDefault(f => f.Filter.GetType() == typeof(ResultFilter)); + if (filterToRemove != null) + filters.Remove(filterToRemove); + #endregion + + purchaseOrderBusiness.KuaiDi100Publish(param); + return new JsonResult(new + { + result = true, + returnCode = "200", + message = "成功" + }); + } } } diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 36646b7..144931d 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -153,15 +153,17 @@ namespace BBWYB.Server.Business #region 处理采购信息 var orderPurchaseInfoList = fsql.Select().Where(op => orderIdList.Contains(op.OrderId) && op.IsEnabled == true).ToList(); - var orderPurchaseSkuInfoList = fsql.Select().Where(o => orderIdList.Contains(o.OrderId)).ToList(); + var orderPurchaseSkuInfoList = fsql.Select().Where(o => orderIdList.Contains(o.OrderId)).ToList(); + + var purchaseExpressOrderList = fsql.Select().Where(peo => orderIdList.Contains(peo.OrderId)).ToList(); foreach (var order in orderList) { order.OrderPurchaseInfoList = orderPurchaseInfoList.Where(op => op.OrderId == order.Id).ToList(); - foreach (var purchaseOrder in order.OrderPurchaseInfoList) + foreach (var orderPurchaseInfo in order.OrderPurchaseInfoList) { - purchaseOrder.ExpressState = orderPurchaseSkuInfoList.FirstOrDefault(x => !string.IsNullOrEmpty(x.ExpressState) && - x.PurchaseOrderId == purchaseOrder.PurchaseOrderId)?.ExpressState; + orderPurchaseInfo.OrderPurchaseSkuInfoList = orderPurchaseSkuInfoList.Where(opsi => opsi.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList(); + orderPurchaseInfo.PurchaseExpressOrderList = purchaseExpressOrderList.Where(peo=>peo.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList(); } } @@ -174,81 +176,81 @@ namespace BBWYB.Server.Business }; } - public void OutStock(OutStockRequest request) - { - var dbOrder = fsql.Select(request.OrderId).ToOne(); - if (dbOrder == null) - throw new BusinessException($"订单{request.OrderId}不存在"); - - var dbOrderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList(); - var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); - - dbOrderPurchaseInfo.WaybillNo = request.WayBillNo; - dbOrderPurchaseInfo.SourceExpressId = request.SourceExpressId; - dbOrderPurchaseInfo.SourceExpressName = request.SourceExpressName; - dbOrderPurchaseInfo.TargetExpressId = request.TargetExpressId; - dbOrderPurchaseInfo.TargetExpressName = request.TargetExpressName; - dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.待收货; - - #region 订单状态 - dbOrder.CalculationOrderState(fsql, null, dbOrderPurchaseInfoList); - #endregion - - if (!string.IsNullOrEmpty(request.TargetExpressId)) - { - #region 订阅快递100 - - #endregion - - //try - //{ - // opPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.Platform) - // .OutStock(new OP_OutStockRequest() - // { - // AppKey = request.AppKey, - // AppSecret = request.AppSecret, - // AppToken = request.AppToken, - // ExpressId = request.TargetExpressId, - // ExpressName = request.TargetExpressName, - // OrderId = request.OrderId, - // Platform = (AdapterEnums.PlatformType)request.Platform, - // WayBillNo = request.WayBillNo - // }); - //} - //catch (Exception ex) - //{ - // nLogManager.Default().Error(ex, $"OutStock Request {JsonConvert.SerializeObject(request)}"); - //} - } - - #region 通知C端出库 - //通知C端 - try - { - restApiService.SendRequest("https://bbwy.qiyue666.com", - "/Api/PurchaseOrder/QuanTanSendGoodsCallback", - new - { - OrderId = request.OrderId, - ExpressId = request.SourceExpressId, - ExpressName = request.SourceExpressName, - request.WayBillNo - }, - null, - HttpMethod.Post); - } - catch (Exception ex) - { - - } - #endregion - - fsql.Transaction(() => - { - fsql.Update().SetSource(dbOrderPurchaseInfo).ExecuteAffrows(); - fsql.Update(request.OrderId).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows(); - }); - } + //public void OutStock(OutStockRequest request) + //{ + // var dbOrder = fsql.Select(request.OrderId).ToOne(); + // if (dbOrder == null) + // throw new BusinessException($"订单{request.OrderId}不存在"); + + // var dbOrderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList(); + // var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); + + // dbOrderPurchaseInfo.WaybillNo = request.WayBillNo; + // dbOrderPurchaseInfo.SourceExpressId = request.SourceExpressId; + // dbOrderPurchaseInfo.SourceExpressName = request.SourceExpressName; + // dbOrderPurchaseInfo.TargetExpressId = request.TargetExpressId; + // dbOrderPurchaseInfo.TargetExpressName = request.TargetExpressName; + // dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.待收货; + + // #region 订单状态 + // dbOrder.CalculationOrderState(fsql, null, dbOrderPurchaseInfoList); + // #endregion + + // if (!string.IsNullOrEmpty(request.TargetExpressId)) + // { + // #region 订阅快递100 + + // #endregion + + // //try + // //{ + // // opPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.Platform) + // // .OutStock(new OP_OutStockRequest() + // // { + // // AppKey = request.AppKey, + // // AppSecret = request.AppSecret, + // // AppToken = request.AppToken, + // // ExpressId = request.TargetExpressId, + // // ExpressName = request.TargetExpressName, + // // OrderId = request.OrderId, + // // Platform = (AdapterEnums.PlatformType)request.Platform, + // // WayBillNo = request.WayBillNo + // // }); + // //} + // //catch (Exception ex) + // //{ + // // nLogManager.Default().Error(ex, $"OutStock Request {JsonConvert.SerializeObject(request)}"); + // //} + // } + + // #region 通知C端出库 + // //通知C端 + // try + // { + // restApiService.SendRequest("https://bbwy.qiyue666.com", + // "/Api/PurchaseOrder/QuanTanSendGoodsCallback", + // new + // { + // OrderId = request.OrderId, + // ExpressId = request.SourceExpressId, + // ExpressName = request.SourceExpressName, + // request.WayBillNo + // }, + // null, + // HttpMethod.Post); + // } + // catch (Exception ex) + // { + + // } + // #endregion + + // fsql.Transaction(() => + // { + // fsql.Update().SetSource(dbOrderPurchaseInfo).ExecuteAffrows(); + // fsql.Update(request.OrderId).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows(); + // }); + //} public void CancelOrder(CancelOrderRequest request, string mdsToken) { diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index ed04112..4ff8895 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -30,6 +30,8 @@ namespace BBWYB.Server.Business private RestApiService restApiService; private IList cantPurchaseOrderStateList; private KuaiDi100Manager kuaiDi100Manager; + private QiKuManager qiKuManager; + public PurchaseOrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, @@ -41,7 +43,8 @@ namespace BBWYB.Server.Business PurchaseSchemeBusiness purchaseSchemeBusiness, ExpressCompanyNameConverter expressCompanyNameConverter, RestApiService restApiService, - KuaiDi100Manager kuaiDi100Manager) : base(fsql, nLogManager, idGenerator) + KuaiDi100Manager kuaiDi100Manager, + QiKuManager qiKuManager) : base(fsql, nLogManager, idGenerator) { this.ppPlatformClientFactory = ppPlatformClientFactory; this.taskSchedulerManager = taskSchedulerManager; @@ -59,6 +62,7 @@ namespace BBWYB.Server.Business Enums.OrderState.待完结 }; this.kuaiDi100Manager = kuaiDi100Manager; + this.qiKuManager = qiKuManager; } /// @@ -846,6 +850,10 @@ namespace BBWYB.Server.Business .Where(ocd => ocd.PurchaseOrderId == request.PurchaseOrderId) .ExecuteAffrows(); + fsql.Delete().Where(opsi => opsi.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); + fsql.Delete().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); + fsql.Delete().Where(peo => peo.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); + fsql.Update().SetSource(dbOrderCost).ExecuteAffrows(); }); } @@ -1045,6 +1053,13 @@ namespace BBWYB.Server.Business .Set(o => o.OrderState, dbOrder.OrderState); #endregion + #region 通知齐库打包落仓情况 + Task.Factory.StartNew(() => qiKuManager.PublishQiKu(orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList), + CancellationToken.None, + TaskCreationOptions.LongRunning, + taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + #endregion + #region 通知C端订单状态 #endregion @@ -1061,44 +1076,44 @@ namespace BBWYB.Server.Business }); } - /// - /// 签收采购单 - /// - /// - public void SignPurchaseOrder(SignPurchaseOrderRequest request) - { - var dbOrder = fsql.Select(request.OrderId).ToOne(); - if (dbOrder == null) - throw new BusinessException("无效订单号"); - if (dbOrder.OrderState == Enums.OrderState.已取消) - throw new BusinessException("订单已取消"); - if (dbOrder.OrderState == Enums.OrderState.已完成) - throw new BusinessException("订单已完成无需签收"); - - var dbOrderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList(); - - var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); - if (dbOrderPurchaseInfo == null) - throw new BusinessException("无效采购单号"); - if (!dbOrderPurchaseInfo.IsEnabled) - throw new BusinessException("采购单已失效"); - if (dbOrderPurchaseInfo.OrderState == Enums.PurchaseOrderState.已签收 || - dbOrderPurchaseInfo.IsSign == true) - throw new BusinessException("采购单已签收"); - - dbOrderPurchaseInfo.IsSign = true; - dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收; - - dbOrder.CalculationOrderState(fsql, null, dbOrderPurchaseInfoList); - - fsql.Transaction(() => - { - fsql.Update().SetSource(dbOrderPurchaseInfo).ExecuteAffrows(); - fsql.Update(dbOrder.Id) - .Set(o => o.OrderState, dbOrder.OrderState) - .Set(o => o.IsWaitPack, true).ExecuteAffrows(); - }); - } + ///// + ///// 签收采购单 + ///// + ///// + //public void SignPurchaseOrder(SignPurchaseOrderRequest request) + //{ + // var dbOrder = fsql.Select(request.OrderId).ToOne(); + // if (dbOrder == null) + // throw new BusinessException("无效订单号"); + // if (dbOrder.OrderState == Enums.OrderState.已取消) + // throw new BusinessException("订单已取消"); + // if (dbOrder.OrderState == Enums.OrderState.已完成) + // throw new BusinessException("订单已完成无需签收"); + + // var dbOrderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList(); + + // var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); + // if (dbOrderPurchaseInfo == null) + // throw new BusinessException("无效采购单号"); + // if (!dbOrderPurchaseInfo.IsEnabled) + // throw new BusinessException("采购单已失效"); + // if (dbOrderPurchaseInfo.OrderState == Enums.PurchaseOrderState.已签收 || + // dbOrderPurchaseInfo.IsSign == true) + // throw new BusinessException("采购单已签收"); + + // dbOrderPurchaseInfo.IsSign = true; + // dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收; + + // dbOrder.CalculationOrderState(fsql, null, dbOrderPurchaseInfoList); + + // fsql.Transaction(() => + // { + // fsql.Update().SetSource(dbOrderPurchaseInfo).ExecuteAffrows(); + // fsql.Update(dbOrder.Id) + // .Set(o => o.OrderState, dbOrder.OrderState) + // .Set(o => o.IsWaitPack, true).ExecuteAffrows(); + // }); + //} #region 1688CallBack public void CallbackFrom1688(string jsonStr) @@ -1116,7 +1131,7 @@ namespace BBWYB.Server.Business OrderPriceModificationCallbackFrom1688(jObject); //订单改价 break; case "LOGISTICS_BUYER_VIEW_TRACE": - LogisticsUpdateCallbackFrom1688(jObject);//1688物流信息变更 + // LogisticsUpdateCallbackFrom1688(jObject);//1688物流信息变更 break; default: break; @@ -1290,243 +1305,243 @@ namespace BBWYB.Server.Business } #endregion - /// - /// 采购平台发货回调 - /// - /// - /// - /// - private void DeliveryCallback(string purchaseOrderId, PP_QueryOrderLogisticsResponse wayBillNoResponse, Enums.Platform callbackPlatform) - { - string currentProgress = string.Empty; - string wayBillNoResponseInfo = string.Empty; - string expressCompanyListInfo = string.Empty; - string expressCompanyInfo = string.Empty; - string orderId = string.Empty; - long? shopId = null; - try - { - #region 查询代发信息 - currentProgress = "查询代发信息"; - var orderPurchaseInfo = fsql.Select().Where(o => o.PurchaseOrderId == purchaseOrderId && o.IsEnabled == true).ToOne(); - if (orderPurchaseInfo == null) - throw new Exception("未查询到代发信息"); - orderId = orderPurchaseInfo.OrderId; - shopId = orderPurchaseInfo.ShopId; - #endregion - - //#region 查询采购账号的归属店铺 - //currentProgress = "查询采购账号归属店铺"; - //var shop = venderBusiness.GetShopList(shopId: shopId)?.FirstOrDefault(); - //if (shop == null) - // throw new Exception("未查询到店铺信息"); - //#endregion - - #region 查询采购账号 - currentProgress = "查询采购账号"; - var purchaseAccount = fsqlManager.MDSfsql.Select().Where(pa => pa.Id == orderPurchaseInfo.PurchaseAccountId).ToOne(); - if (purchaseAccount == null) - throw new Exception($"未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}"); - #endregion - - #region 获取采购单的物流信息 - currentProgress = "获取采购单的物流信息"; - if (wayBillNoResponse == null) - { - var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)callbackPlatform); - var ppQueryOrderLogisticsRequest = new PP_QueryOrderLogisticsRequest() - { - AppKey = purchaseAccount.AppKey, - AppSecret = purchaseAccount.AppSecret, - AppToken = purchaseAccount.AppToken, - OrderId = purchaseOrderId, - Platform = (AdapterEnums.PlatformType)callbackPlatform - }; - wayBillNoResponse = client.QueryOrderLogistics(ppQueryOrderLogisticsRequest); - wayBillNoResponseInfo = JsonConvert.SerializeObject(new { Request = ppQueryOrderLogisticsRequest, Result = wayBillNoResponse }); - } - #endregion - - //#region 获取目标平台的物流公司列表 - //currentProgress = "获取店铺平台物流公司列表"; - //var expressCompanyList = venderBusiness.GetExpressCompanyList(new PlatformRequest() - //{ - // AppKey = shop.AppKey, - // AppSecret = shop.AppSecret, - // AppToken = shop.AppToken, - // Platform = shop.PlatformId - //}); - //if (expressCompanyList != null) - // expressCompanyListInfo = JsonConvert.SerializeObject(expressCompanyList); - //#endregion - - - - //#region 物流公司翻译 - //currentProgress = "物流公司翻译"; - - //OP_QueryExpressCompanyResponse convertExpressCompany = null; - - //try - //{ - // convertExpressCompany = expressCompanyNameConverter.Converter(wayBillNoResponse.ExpressName, - // (AdapterEnums.PlatformType)callbackPlatform, - // (AdapterEnums.PlatformType)shop.PlatformId, - // expressCompanyList); - // if (convertExpressCompany != null) - // expressCompanyInfo = JsonConvert.SerializeObject(convertExpressCompany); - //} - //catch - //{ - // throw; - //} - //finally - //{ - // #region 店铺平台订单出库 - // currentProgress = "店铺平台订单出库"; - // orderBusiness.OutStock(new OutStockRequest() - // { - // AppKey = shop.AppKey, - // AppSecret = shop.AppSecret, - // AppToken = shop.AppToken, - // OrderId = orderId, - // TargetExpressId = convertExpressCompany?.ExpressId ?? string.Empty, //物流公司Id - // TargetExpressName = convertExpressCompany?.ExpressName ?? string.Empty, //物流公司名称 - // SourceExpressId = wayBillNoResponse.ExpressId, - // SourceExpressName = wayBillNoResponse.ExpressName, - // PurchaseOrderId = purchaseOrderId, - // Platform = shop.PlatformId, - // WayBillNo = wayBillNoResponse.WayBillNo - // }); - // #endregion - //} - //#endregion - - - #region 店铺平台订单出库 - currentProgress = "店铺平台订单出库"; - orderBusiness.OutStock(new OutStockRequest() - { - //AppKey = shop.AppKey, - //AppSecret = shop.AppSecret, - //AppToken = shop.AppToken, - OrderId = orderId, - //TargetExpressId = convertExpressCompany?.ExpressId ?? string.Empty, //物流公司Id - //TargetExpressName = convertExpressCompany?.ExpressName ?? string.Empty, //物流公司名称 - SourceExpressId = wayBillNoResponse.ExpressId, - SourceExpressName = wayBillNoResponse.ExpressName, - PurchaseOrderId = purchaseOrderId, - //Platform = shop.PlatformId, - WayBillNo = wayBillNoResponse.WayBillNo - }); - #endregion - - - nLogManager.Default().Info($"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}"); - } - catch (Exception ex) - { - nLogManager.Default().Error(ex, $"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}"); - } - } - - /// - /// 1688物流信息变更回调 - /// - /// - private void LogisticsUpdateCallbackFrom1688(JObject jObject) - { - Task.Factory.StartNew(() => - { - IList> updateOrderPurchaseSkuInfoList = new List>(); - IList> updateOrderPurchaseInfoList = new List>(); - - var statusChanged = jObject["data"]["OrderLogisticsTracingModel"].Value("statusChanged").ToUpper(); - var orderLogsItems = jObject["data"]["OrderLogisticsTracingModel"]["orderLogsItems"].Children(); - - var purchaseOrderIds = orderLogsItems.Select(x => x.Value("orderId")).Distinct().ToList(); - var orderEntryIds = orderLogsItems.Select(x => x.Value("orderEntryId")).Distinct().ToList(); - - var dbOrderPurchaseInfoList = fsql.Select().Where(opi => purchaseOrderIds.Contains(opi.PurchaseOrderId) && opi.IsEnabled == true).ToList(); - - var dbOrderPurchaseSkuInfoList = fsql.Select() - .WhereIf(purchaseOrderIds.Count() > 1, ops => purchaseOrderIds.Contains(ops.PurchaseOrderId)) - .WhereIf(purchaseOrderIds.Count() == 1, ops => ops.PurchaseOrderId == purchaseOrderIds[0]) - .ToList(); - - var dbOrderPurchaseRelationInfoList = fsql.Select() - .WhereIf(purchaseOrderIds.Count() > 1, opr => purchaseOrderIds.Contains(opr.PurchaseOrderId)) - .WhereIf(purchaseOrderIds.Count() == 1, opr => opr.PurchaseOrderId == purchaseOrderIds[0]) - .ToList(); - - foreach (var orderEntryId in orderEntryIds) - { - var dbOrderPurchaseSkuInfo = dbOrderPurchaseSkuInfoList.FirstOrDefault(x => x.Id == orderEntryId); - if (dbOrderPurchaseSkuInfo.ExpressState != statusChanged) - { - var update = fsql.Update(orderEntryId).Set(x => x.ExpressState, statusChanged) - .Set(x => x.ExpressChangeTime, DateTime.Now); - updateOrderPurchaseSkuInfoList.Add(update); - dbOrderPurchaseSkuInfo.ExpressState = statusChanged; - } - } - - if (statusChanged == "SIGN") - { - var groupsByPoIds = dbOrderPurchaseSkuInfoList.GroupBy(x => x.PurchaseOrderId); - foreach (var group in groupsByPoIds) - { - var isSignAll = group.Count() == group.Where(x => x.ExpressState == "SIGN").Count(); - if (isSignAll) - { - var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(x => x.PurchaseOrderId == group.Key && x.IsEnabled == true); - if (dbOrderPurchaseInfo != null) - { - dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收; - updateOrderPurchaseInfoList.Add(fsql.Update().SetSource(dbOrderPurchaseInfo)); - } - } - - #region 通知齐库 - var relationList = dbOrderPurchaseRelationInfoList.Where(x => x.PurchaseOrderId == group.Key).ToList(); - foreach (var relation in relationList) - { - try - { - restApiService.SendRequest("http://qiku.qiyue666.com", - "/Api/PackPurchaseTask/UpdateAvailabilityState", - new - { - availability = isSignAll ? 0 : 1, - orderId = relation.OrderId, - skuId = relation.SourceSkuId - }, - null, - HttpMethod.Post); - } - catch (Exception ex) - { - - } - } - #endregion - } - } - - if (updateOrderPurchaseSkuInfoList.Count() > 0 || updateOrderPurchaseInfoList.Count() > 0) - { - fsql.Transaction(() => - { - foreach (var update in updateOrderPurchaseSkuInfoList) - update.ExecuteAffrows(); - foreach (var update in updateOrderPurchaseInfoList) - update.ExecuteAffrows(); - }); - } - - - }, CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); - } + ///// + ///// 采购平台发货回调 + ///// + ///// + ///// + ///// + //private void DeliveryCallback(string purchaseOrderId, PP_QueryOrderLogisticsResponse wayBillNoResponse, Enums.Platform callbackPlatform) + //{ + // string currentProgress = string.Empty; + // string wayBillNoResponseInfo = string.Empty; + // string expressCompanyListInfo = string.Empty; + // string expressCompanyInfo = string.Empty; + // string orderId = string.Empty; + // long? shopId = null; + // try + // { + // #region 查询代发信息 + // currentProgress = "查询代发信息"; + // var orderPurchaseInfo = fsql.Select().Where(o => o.PurchaseOrderId == purchaseOrderId && o.IsEnabled == true).ToOne(); + // if (orderPurchaseInfo == null) + // throw new Exception("未查询到代发信息"); + // orderId = orderPurchaseInfo.OrderId; + // shopId = orderPurchaseInfo.ShopId; + // #endregion + + // //#region 查询采购账号的归属店铺 + // //currentProgress = "查询采购账号归属店铺"; + // //var shop = venderBusiness.GetShopList(shopId: shopId)?.FirstOrDefault(); + // //if (shop == null) + // // throw new Exception("未查询到店铺信息"); + // //#endregion + + // #region 查询采购账号 + // currentProgress = "查询采购账号"; + // var purchaseAccount = fsqlManager.MDSfsql.Select().Where(pa => pa.Id == orderPurchaseInfo.PurchaseAccountId).ToOne(); + // if (purchaseAccount == null) + // throw new Exception($"未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}"); + // #endregion + + // #region 获取采购单的物流信息 + // currentProgress = "获取采购单的物流信息"; + // if (wayBillNoResponse == null) + // { + // var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)callbackPlatform); + // var ppQueryOrderLogisticsRequest = new PP_QueryOrderLogisticsRequest() + // { + // AppKey = purchaseAccount.AppKey, + // AppSecret = purchaseAccount.AppSecret, + // AppToken = purchaseAccount.AppToken, + // OrderId = purchaseOrderId, + // Platform = (AdapterEnums.PlatformType)callbackPlatform + // }; + // wayBillNoResponse = client.QueryOrderLogistics(ppQueryOrderLogisticsRequest); + // wayBillNoResponseInfo = JsonConvert.SerializeObject(new { Request = ppQueryOrderLogisticsRequest, Result = wayBillNoResponse }); + // } + // #endregion + + // //#region 获取目标平台的物流公司列表 + // //currentProgress = "获取店铺平台物流公司列表"; + // //var expressCompanyList = venderBusiness.GetExpressCompanyList(new PlatformRequest() + // //{ + // // AppKey = shop.AppKey, + // // AppSecret = shop.AppSecret, + // // AppToken = shop.AppToken, + // // Platform = shop.PlatformId + // //}); + // //if (expressCompanyList != null) + // // expressCompanyListInfo = JsonConvert.SerializeObject(expressCompanyList); + // //#endregion + + + + // //#region 物流公司翻译 + // //currentProgress = "物流公司翻译"; + + // //OP_QueryExpressCompanyResponse convertExpressCompany = null; + + // //try + // //{ + // // convertExpressCompany = expressCompanyNameConverter.Converter(wayBillNoResponse.ExpressName, + // // (AdapterEnums.PlatformType)callbackPlatform, + // // (AdapterEnums.PlatformType)shop.PlatformId, + // // expressCompanyList); + // // if (convertExpressCompany != null) + // // expressCompanyInfo = JsonConvert.SerializeObject(convertExpressCompany); + // //} + // //catch + // //{ + // // throw; + // //} + // //finally + // //{ + // // #region 店铺平台订单出库 + // // currentProgress = "店铺平台订单出库"; + // // orderBusiness.OutStock(new OutStockRequest() + // // { + // // AppKey = shop.AppKey, + // // AppSecret = shop.AppSecret, + // // AppToken = shop.AppToken, + // // OrderId = orderId, + // // TargetExpressId = convertExpressCompany?.ExpressId ?? string.Empty, //物流公司Id + // // TargetExpressName = convertExpressCompany?.ExpressName ?? string.Empty, //物流公司名称 + // // SourceExpressId = wayBillNoResponse.ExpressId, + // // SourceExpressName = wayBillNoResponse.ExpressName, + // // PurchaseOrderId = purchaseOrderId, + // // Platform = shop.PlatformId, + // // WayBillNo = wayBillNoResponse.WayBillNo + // // }); + // // #endregion + // //} + // //#endregion + + + // //#region 店铺平台订单出库 + // //currentProgress = "店铺平台订单出库"; + // //orderBusiness.OutStock(new OutStockRequest() + // //{ + // // //AppKey = shop.AppKey, + // // //AppSecret = shop.AppSecret, + // // //AppToken = shop.AppToken, + // // OrderId = orderId, + // // //TargetExpressId = convertExpressCompany?.ExpressId ?? string.Empty, //物流公司Id + // // //TargetExpressName = convertExpressCompany?.ExpressName ?? string.Empty, //物流公司名称 + // // SourceExpressId = wayBillNoResponse.ExpressId, + // // SourceExpressName = wayBillNoResponse.ExpressName, + // // PurchaseOrderId = purchaseOrderId, + // // //Platform = shop.PlatformId, + // // WayBillNo = wayBillNoResponse.WayBillNo + // //}); + // //#endregion + + + // nLogManager.Default().Info($"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}"); + // } + // catch (Exception ex) + // { + // nLogManager.Default().Error(ex, $"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}"); + // } + //} + + ///// + ///// 1688物流信息变更回调 + ///// + ///// + //private void LogisticsUpdateCallbackFrom1688(JObject jObject) + //{ + // Task.Factory.StartNew(() => + // { + // IList> updateOrderPurchaseSkuInfoList = new List>(); + // IList> updateOrderPurchaseInfoList = new List>(); + + // var statusChanged = jObject["data"]["OrderLogisticsTracingModel"].Value("statusChanged").ToUpper(); + // var orderLogsItems = jObject["data"]["OrderLogisticsTracingModel"]["orderLogsItems"].Children(); + + // var purchaseOrderIds = orderLogsItems.Select(x => x.Value("orderId")).Distinct().ToList(); + // var orderEntryIds = orderLogsItems.Select(x => x.Value("orderEntryId")).Distinct().ToList(); + + // var dbOrderPurchaseInfoList = fsql.Select().Where(opi => purchaseOrderIds.Contains(opi.PurchaseOrderId) && opi.IsEnabled == true).ToList(); + + // var dbOrderPurchaseSkuInfoList = fsql.Select() + // .WhereIf(purchaseOrderIds.Count() > 1, ops => purchaseOrderIds.Contains(ops.PurchaseOrderId)) + // .WhereIf(purchaseOrderIds.Count() == 1, ops => ops.PurchaseOrderId == purchaseOrderIds[0]) + // .ToList(); + + // var dbOrderPurchaseRelationInfoList = fsql.Select() + // .WhereIf(purchaseOrderIds.Count() > 1, opr => purchaseOrderIds.Contains(opr.PurchaseOrderId)) + // .WhereIf(purchaseOrderIds.Count() == 1, opr => opr.PurchaseOrderId == purchaseOrderIds[0]) + // .ToList(); + + // foreach (var orderEntryId in orderEntryIds) + // { + // var dbOrderPurchaseSkuInfo = dbOrderPurchaseSkuInfoList.FirstOrDefault(x => x.Id == orderEntryId); + // if (dbOrderPurchaseSkuInfo.ExpressState != statusChanged) + // { + // var update = fsql.Update(orderEntryId).Set(x => x.ExpressState, statusChanged) + // .Set(x => x.ExpressChangeTime, DateTime.Now); + // updateOrderPurchaseSkuInfoList.Add(update); + // dbOrderPurchaseSkuInfo.ExpressState = statusChanged; + // } + // } + + // if (statusChanged == "SIGN") + // { + // var groupsByPoIds = dbOrderPurchaseSkuInfoList.GroupBy(x => x.PurchaseOrderId); + // foreach (var group in groupsByPoIds) + // { + // var isSignAll = group.Count() == group.Where(x => x.ExpressState == "SIGN").Count(); + // if (isSignAll) + // { + // var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(x => x.PurchaseOrderId == group.Key && x.IsEnabled == true); + // if (dbOrderPurchaseInfo != null) + // { + // dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收; + // updateOrderPurchaseInfoList.Add(fsql.Update().SetSource(dbOrderPurchaseInfo)); + // } + // } + + // #region 通知齐库 + // var relationList = dbOrderPurchaseRelationInfoList.Where(x => x.PurchaseOrderId == group.Key).ToList(); + // foreach (var relation in relationList) + // { + // try + // { + // restApiService.SendRequest("http://qiku.qiyue666.com", + // "/Api/PackPurchaseTask/UpdateAvailabilityState", + // new + // { + // availability = isSignAll ? 0 : 1, + // orderId = relation.OrderId, + // skuId = relation.SourceSkuId + // }, + // null, + // HttpMethod.Post); + // } + // catch (Exception ex) + // { + + // } + // } + // #endregion + // } + // } + + // if (updateOrderPurchaseSkuInfoList.Count() > 0 || updateOrderPurchaseInfoList.Count() > 0) + // { + // fsql.Transaction(() => + // { + // foreach (var update in updateOrderPurchaseSkuInfoList) + // update.ExecuteAffrows(); + // foreach (var update in updateOrderPurchaseInfoList) + // update.ExecuteAffrows(); + // }); + // } + + + // }, CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + //} /// /// 采购平台改价回调 @@ -1652,5 +1667,108 @@ namespace BBWYB.Server.Business nLogManager.Default().Error(ex, $"OrderPriceModificationCallback 回调平台{callbackPlatform},采购单号{purchaseOrderId},执行进度[{currentProgress}]"); } } + + public void KuaiDi100Publish(string param) + { + Task.Factory.StartNew(() => KuaiDi100PublishCore(param), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + } + + private void KuaiDi100PublishCore(string param) + { + nLogManager.GetLogger("快递100").Info($"KuaiDi100Publish {param}"); + JObject jobject = JObject.Parse(param); + var waybillNo = jobject["lastResult"].Value("nu"); + try + { + var state = jobject["lastResult"].Value("state"); + var convertState = kuaiDi100Manager.GetExpressState(state); + if (convertState == "Unknow") + return; + + var dataArray = jobject["lastResult"]["data"].Children().Select(d => new + { + context = d.Value("context"), + ftime = d.Value("ftime"), + statusCode = d.Value("statusCode") + }).OrderByDescending(d => d.ftime).ToList(); + + var lastData = dataArray.FirstOrDefault(); + + IUpdate updatePurchaseExpressOrder = null; + IUpdate updateOrderPurchase = null; + IUpdate updateOrder = null; + + #region 查询该笔快递单 + var tpeo = fsql.Select(waybillNo).ToOne(); + if (tpeo == null) + throw new Exception("未查询到快递单"); + #endregion + + #region 查询订单/采购单/采购sku/快递单/采购关系 + var dbOrder = fsql.Select(tpeo.OrderId).ToOne(o => new Order + { + Id = o.Id, + ShopId = o.ShopId, + OrderState = o.OrderState + }); + if (dbOrder == null) + throw new Exception("未查询到订单"); + + var orderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == dbOrder.Id && opi.IsEnabled == true).ToList(); + var orderPurchaseInfo = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == tpeo.PurchaseOrderId); + if (orderPurchaseInfo == null) + throw new Exception("未查询到采购单"); + + var orderPurchaseSkuList = fsql.Select().Where(x => x.PurchaseOrderId == tpeo.PurchaseOrderId).ToList(); + if (orderPurchaseSkuList.Count() == 0) + throw new BusinessException("未查询到采购单sku信息"); + + var purchaseExpressOrderList = fsql.Select().Where(x => x.PurchaseOrderId == tpeo.PurchaseOrderId).ToList(); + var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(exo => exo.WaybillNo == waybillNo); + purchaseExpressOrder.ExpressState = convertState; + purchaseExpressOrder.ExpressChangedTime = lastData.ftime; + purchaseExpressOrder.ExpressContent = lastData.context; + updatePurchaseExpressOrder = fsql.Update().SetSource(purchaseExpressOrder); + + var orderPurchaseRelationList = fsql.Select().Where(opri => opri.PurchaseOrderId == tpeo.PurchaseOrderId).ToList(); + if (orderPurchaseRelationList.Count() == 0) + throw new BusinessException("未查询到采购单的关联信息"); + #endregion + + #region 计算采购单状态 + orderPurchaseInfo.CalculationOrderState(fsql, orderPurchaseSkuList, purchaseExpressOrderList); + updateOrderPurchase = fsql.Update(orderPurchaseInfo.Id) + .Set(opi => opi.OrderState, orderPurchaseInfo.OrderState); + #endregion + + #region 计算订单状态 + dbOrder.CalculationOrderState(fsql, null, orderPurchaseInfoList); + updateOrder = fsql.Update(dbOrder.Id) + .Set(o => o.OrderState, dbOrder.OrderState); + #endregion + + #region 通知齐库打包落仓情况 + Task.Factory.StartNew(() => qiKuManager.PublishQiKu(orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList), + CancellationToken.None, + TaskCreationOptions.LongRunning, + taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + #endregion + + #region 通知C端状态 + + #endregion + + fsql.Transaction(() => + { + updatePurchaseExpressOrder?.ExecuteAffrows(); + updateOrderPurchase?.ExecuteAffrows(); + updateOrder?.ExecuteAffrows(); + }); + } + catch (Exception ex) + { + nLogManager.GetLogger("快递100").Error(ex, waybillNo); + } + } } } diff --git a/BBWYB.Server.Business/QiKuManager.cs b/BBWYB.Server.Business/QiKuManager.cs new file mode 100644 index 0000000..d01b8cf --- /dev/null +++ b/BBWYB.Server.Business/QiKuManager.cs @@ -0,0 +1,66 @@ +using BBWYB.Common.Http; +using BBWYB.Common.Models; +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Business +{ + public class QiKuManager : IDenpendency + { + private RestApiService restApiService; + public QiKuManager(RestApiService restApiService) + { + this.restApiService = restApiService; + } + + /// + /// 通知齐库 + /// + /// + /// + /// + public void PublishQiKu(IList orderPurchaseRelationInfoList, + IList orderPurchaseSkuInfoList, + IList purchaseExpressOrderList) + { + try + { + var relationGroups = orderPurchaseRelationInfoList.GroupBy(opri => opri.SourceSkuId); + foreach (var relationGroup in relationGroups) + { + bool isSignAll = true; + foreach (var relation in relationGroup) + { + var purchaseSku = orderPurchaseSkuInfoList.FirstOrDefault(x => x.PurchaseSkuId == relation.PurchaseSkuId); + if (purchaseSku == null || string.IsNullOrEmpty(purchaseSku.WaybillNo)) + { + isSignAll = false; + continue; + } + var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(x => x.WaybillNo == purchaseSku.WaybillNo); + if (purchaseExpressOrder == null || purchaseExpressOrder.ExpressState != "QianShou") + { + isSignAll = false; + continue; + } + } + + restApiService.SendRequest("http://qiku.qiyue666.com", + "/Api/PackPurchaseTask/UpdateAvailabilityState", + new + { + availability = isSignAll ? 0 : 1, + orderId = relationGroup.FirstOrDefault().OrderId, + skuId = relationGroup.Key + }, + null, + HttpMethod.Post); + + } + } + catch (Exception ex) + { + + } + } + } +} diff --git a/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs b/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs index 26dbfea..c40d326 100644 --- a/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs +++ b/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs @@ -101,11 +101,11 @@ namespace BBWYB.Server.Model.Db [Column(StringLength = 500)] public string Remark { get; set; } - /// - /// Ƿǩ - /// - [Column(DbType = "bit")] - public bool? IsSign { get; set; } = false; + ///// + ///// Ƿǩ + ///// + //[Column(DbType = "bit")] + //public bool? IsSign { get; set; } = false; /// /// ɹ״̬ diff --git a/BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs b/BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs index 7f71802..289bfb8 100644 --- a/BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs +++ b/BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs @@ -35,7 +35,7 @@ namespace BBWYB.Server.Model.Db public string ExpressContent { get; set; } /// - /// 物流状态 + /// 物流状态 (ZaiTu,LanShou,QianShou,PaiJian,Unknow) /// [Column(StringLength = 100)] public string ExpressState { get; set; } diff --git a/BBWYB.Server.Model/Dto/Response/Order/OrderPurchaseInfoResponse.cs b/BBWYB.Server.Model/Dto/Response/Order/OrderPurchaseInfoResponse.cs index f637cad..61c2004 100644 --- a/BBWYB.Server.Model/Dto/Response/Order/OrderPurchaseInfoResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Order/OrderPurchaseInfoResponse.cs @@ -4,12 +4,6 @@ namespace BBWYB.Server.Model.Dto { public class OrderPurchaseInfoResponse : OrderPurchaseInfo { - ///// - ///// 物流状态 - ///// 1688物流状态: 发货(CONSIGN)、揽收(ACCEPT)、运输(TRANSPORT)、派送(DELIVERING)、签收(SIGN) - ///// - //public string ExpressState { get; set; } - /// /// 采购sku列表 ///