From f2b57e4b5c2cca9dc5d3c9c2dfa74e2b64eafe83 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 5 Jun 2023 11:43:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/OrderStateExtension.cs | 78 +++++++- BBWYB.Server.Business/Order/OrderBusiness.cs | 45 +++-- .../PurchaseOrder/PurchaseOrderBusiness.cs | 181 ++++++++++-------- .../Dto/Request/Order/OutStockRequest.cs | 2 +- 4 files changed, 199 insertions(+), 107 deletions(-) diff --git a/BBWYB.Server.Business/Extensions/OrderStateExtension.cs b/BBWYB.Server.Business/Extensions/OrderStateExtension.cs index 25af57d..283140c 100644 --- a/BBWYB.Server.Business/Extensions/OrderStateExtension.cs +++ b/BBWYB.Server.Business/Extensions/OrderStateExtension.cs @@ -14,12 +14,82 @@ namespace BBWYB.Server.Business /// /// /// - public static Enums.OrderState CalculationOrderState(this Order order, - IList orderSkuList, - IList orderPurchaseInfoList) + public static void CalculationOrderState(this Order order, + IFreeSql fsql, + IList orderSkuList = null, + IList orderPurchaseInfoList = null) { + if (order.OrderState == Enums.OrderState.已取消 || + order.OrderState == Enums.OrderState.已完成 || + order.OrderState == Enums.OrderState.待付款 || + order.OrderState == Enums.OrderState.待完结) + return; - return Enums.OrderState.Unknow; + if (orderSkuList == null) + orderSkuList = fsql.Select().Where(osku => osku.OrderId == order.Id).ToList(); + if (orderPurchaseInfoList == null) + orderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == order.Id && opi.IsEnabled == true).ToList(); + + #region 等待采购 + if (orderPurchaseInfoList == null || orderPurchaseInfoList.Count() == 0) + { + order.OrderState = Enums.OrderState.等待采购; + return; + } + #endregion + + #region 部分采购 + foreach (var osku in orderSkuList) + { + if (!orderPurchaseInfoList.Any(opi => opi.BelongSkuIds.Contains(osku.SkuId))) + { + order.OrderState = Enums.OrderState.部分采购; + return; + } + } + #endregion + + #region 待发货 + if (orderPurchaseInfoList.Count() == orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.待发货)) + { + order.OrderState = Enums.OrderState.待发货; + return; + } + #endregion + + #region 部分发货 + if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.待收货) && + orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.待收货) < orderPurchaseInfoList.Count()) + { + order.OrderState = Enums.OrderState.部分发货; + return; + } + #endregion + + #region 待收货 + if (orderPurchaseInfoList.Count() == orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.待收货)) + { + order.OrderState = Enums.OrderState.待收货; + return; + } + #endregion + + #region 部分收货 + if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.已签收) && + orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收) < orderPurchaseInfoList.Count()) + { + order.OrderState = Enums.OrderState.部分收货; + return; + } + #endregion + + #region 打包中 + if (orderPurchaseInfoList.Count() == orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收)) + { + order.OrderState = Enums.OrderState.打包中; + return; + } + #endregion } } } diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 48ec72e..0ea00b3 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -184,25 +184,29 @@ namespace BBWYB.Server.Business if (!string.IsNullOrEmpty(request.TargetExpressId)) { - 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 订阅快递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端出库 @@ -229,12 +233,13 @@ namespace BBWYB.Server.Business fsql.Transaction(() => { - fsql.Update().Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId) + fsql.Update().Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId && opi.IsEnabled == true) .Set(opi => opi.WaybillNo, request.WayBillNo) .Set(opi => opi.SourceExpressId, request.SourceExpressId) .Set(opi => opi.SourceExpressName, request.SourceExpressName) .Set(opi => opi.TargetExpressId, request.TargetExpressId) .Set(opi => opi.TargetExpressName, request.TargetExpressName) + .Set(opi => opi.OrderState, Enums.PurchaseOrderState.待收货) .ExecuteAffrows(); if (dbOrder.OrderState == Enums.OrderState.待出库) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 6b5e45c..73e0dda 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -827,13 +827,18 @@ namespace BBWYB.Server.Business throw new BusinessException("无效采购单号"); if (!dbOrderPurchaseInfo.IsEnabled) throw new BusinessException("采购单已失效"); - if (dbOrderPurchaseInfo.IsSign == true) + if (dbOrderPurchaseInfo.OrderState == Enums.PurchaseOrderState.已签收 || + dbOrderPurchaseInfo.IsSign == true) throw new BusinessException("采购单已签收"); + dbOrderPurchaseInfo.IsSign = true; + dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收; + fsql.Transaction(() => { - fsql.Update(dbOrderPurchaseInfo.Id).Set(opi => opi.IsSign, true).ExecuteAffrows(); + fsql.Update().SetSource(dbOrderPurchaseInfo).ExecuteAffrows(); fsql.Update(dbOrder.Id).Set(o => o.IsWaitPack, true).ExecuteAffrows(); + Enums.OrderState.待收货; }); } @@ -899,19 +904,19 @@ namespace BBWYB.Server.Business { #region 查询代发信息 currentProgress = "查询代发信息"; - var orderPurchaseInfo = fsql.Select().Where(o => o.PurchaseOrderId == purchaseOrderId).ToOne(); + var orderPurchaseInfo = fsql.Select().Where(o => o.PurchaseOrderId == purchaseOrderId && orderPurchaseInfo.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 shop = venderBusiness.GetShopList(shopId: shopId)?.FirstOrDefault(); + //if (shop == null) + // throw new Exception("未查询到店铺信息"); + //#endregion #region 查询采购账号 currentProgress = "查询采购账号"; @@ -938,58 +943,80 @@ namespace BBWYB.Server.Business } #endregion - #region 获取目标平台的物流公司列表 - currentProgress = "获取店铺平台物流公司列表"; - var expressCompanyList = venderBusiness.GetExpressCompanyList(new PlatformRequest() + //#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, - Platform = shop.PlatformId + //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 }); - 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 nLogManager.Default().Info($"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}"); } @@ -1008,6 +1035,7 @@ namespace BBWYB.Server.Business 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(); @@ -1015,6 +1043,8 @@ namespace BBWYB.Server.Business 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]) @@ -1043,12 +1073,20 @@ namespace BBWYB.Server.Business 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) { - //通知C端 try { restApiService.SendRequest("http://qiku.qiyue666.com", @@ -1069,37 +1107,16 @@ namespace BBWYB.Server.Business } #endregion } - - var groupsByOrderIds = dbOrderPurchaseSkuInfoList.GroupBy(x => x.OrderId); - foreach (var group in groupsByOrderIds) - { - var isSignAll = group.Count() == group.Where(x => x.ExpressState == "SIGN").Count(); - - if (isSignAll) - { - //通知C端 - try - { - restApiService.SendRequest("https://bbwy.qiyue666.com", - "/Api/PurchaseOrder/SignPurchaseOrder", - new { orderId = group.Key }, - null, - HttpMethod.Post); - } - catch (Exception ex) - { - - } - } - } } - if (updateOrderPurchaseSkuInfoList.Count() > 0) + if (updateOrderPurchaseSkuInfoList.Count() > 0 || updateOrderPurchaseInfoList.Count() > 0) { fsql.Transaction(() => { foreach (var update in updateOrderPurchaseSkuInfoList) update.ExecuteAffrows(); + foreach (var update in updateOrderPurchaseInfoList) + update.ExecuteAffrows(); }); } diff --git a/BBWYB.Server.Model/Dto/Request/Order/OutStockRequest.cs b/BBWYB.Server.Model/Dto/Request/Order/OutStockRequest.cs index cf11eca..8d8a304 100644 --- a/BBWYB.Server.Model/Dto/Request/Order/OutStockRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Order/OutStockRequest.cs @@ -1,6 +1,6 @@ namespace BBWYB.Server.Model.Dto { - public class OutStockRequest : PlatformRequest + public class OutStockRequest { /// /// 订单Id