From a67a95f11cacd4d6a63f4b4d786640c7c93aad94 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 21 Jun 2023 08:40:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=89=8B=E5=8A=A8=E5=8F=91?= =?UTF-8?q?=E8=B4=A7=E5=85=B6=E4=BB=96=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/OrderStateExtension.cs | 70 +++++--- .../PurchaseOrder/PurchaseOrderBusiness.cs | 152 +++++++++++------- BBWYB.Server.Business/QiKuManager.cs | 56 ++++++- 3 files changed, 193 insertions(+), 85 deletions(-) diff --git a/BBWYB.Server.Business/Extensions/OrderStateExtension.cs b/BBWYB.Server.Business/Extensions/OrderStateExtension.cs index 9199402..f57b86f 100644 --- a/BBWYB.Server.Business/Extensions/OrderStateExtension.cs +++ b/BBWYB.Server.Business/Extensions/OrderStateExtension.cs @@ -79,7 +79,7 @@ namespace BBWYB.Server.Business #region 部分收货 if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.已签收 || opi.OrderState == Enums.PurchaseOrderState.部分收货) && - orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收|| + orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收 || opi.OrderState == Enums.PurchaseOrderState.部分收货) < orderPurchaseInfoList.Count()) { order.OrderState = Enums.OrderState.部分收货; @@ -111,39 +111,59 @@ namespace BBWYB.Server.Business IList orderPurchaseSkuList = null, IList purchaseExpressOrderList = null) { + /* + 待发货 = 0, + 部分发货 = 1, + 待收货 = 10, + 部分收货 = 11, + 已签收 = 20, + 已取消 = 100 + */ + if (orderPurchaseInfo.OrderState == Enums.PurchaseOrderState.已取消) return; - if (orderPurchaseSkuList == null) - orderPurchaseSkuList = fsql.Select().Where(ops => ops.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList(); + + if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.阿里巴巴) + { + if (orderPurchaseSkuList == null) + orderPurchaseSkuList = fsql.Select().Where(ops => ops.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList(); + } + if (purchaseExpressOrderList == null) purchaseExpressOrderList = fsql.Select().Where(exo => exo.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList(); - /* - 待发货 = 0, - 部分发货 = 1, - 待收货 = 10, - 部分收货 = 11, - 已签收 = 20, - 已取消 = 100 - */ - - #region 待发货 - if (orderPurchaseSkuList.Count() == orderPurchaseSkuList.Count(ops => string.IsNullOrEmpty(ops.WaybillNo))) + if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.阿里巴巴) //支持采购sku和关联信息 { - orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.待发货; - return; - } - #endregion + #region 待发货 + if (orderPurchaseSkuList.Count() == orderPurchaseSkuList.Count(ops => string.IsNullOrEmpty(ops.WaybillNo))) + { + orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.待发货; + return; + } + #endregion - #region 部分发货 - if (orderPurchaseSkuList.Any(ops => string.IsNullOrEmpty(ops.WaybillNo)) && - orderPurchaseSkuList.Count(ops => string.IsNullOrEmpty(ops.WaybillNo)) < orderPurchaseSkuList.Count()) + #region 部分发货 + if (orderPurchaseSkuList.Any(ops => string.IsNullOrEmpty(ops.WaybillNo)) && + orderPurchaseSkuList.Count(ops => string.IsNullOrEmpty(ops.WaybillNo)) < orderPurchaseSkuList.Count()) + { + orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.部分发货; + return; + } + #endregion + } + else { - orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.部分发货; - return; + //不支持采购sku和关联信息 + #region 待发货 + if (purchaseExpressOrderList.Count() == 0) + { + orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.待发货; + return; + } + #endregion } - #endregion + #region 待收货 if (purchaseExpressOrderList.Count(exo => exo.ExpressState == "QianShou") == 0) @@ -164,7 +184,7 @@ namespace BBWYB.Server.Business #region 已签收 if (purchaseExpressOrderList.Any(exo => exo.ExpressState == "QianShou") && - purchaseExpressOrderList.Count(exo => exo.ExpressState == "QianShou") == purchaseExpressOrderList.Count()) + purchaseExpressOrderList.Count(exo => exo.ExpressState == "QianShou") == purchaseExpressOrderList.Count()) { orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收; return; diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index f1d899c..3ff5517 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -1129,30 +1129,34 @@ namespace BBWYB.Server.Business throw new BusinessException("未查询到采购单信息"); #endregion - #region 查询采购关联信息 - var orderPurchaseRelationList = fsql.Select().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId && - opri.BelongSkuId == request.SkuId).ToList(); - if (orderPurchaseRelationList.Count() == 0) - throw new BusinessException("未查询到采购单的关联信息"); - #endregion - - #region 查询该笔采购单的采购sku信息并更新快递单号 - var orderPurchaseSkuList = fsql.Select().Where(x => x.PurchaseOrderId == request.PurchaseOrderId).ToList(); - if (orderPurchaseSkuList.Count() == 0) - throw new BusinessException("未查询到采购单sku信息"); - - foreach (var relation in orderPurchaseRelationList) + IList orderPurchaseSkuList = null; + if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.阿里巴巴) { - var orderPurchaseSku = orderPurchaseSkuList.FirstOrDefault(posku => posku.PurchaseSkuId == relation.PurchaseSkuId); - if (orderPurchaseSku == null) + #region 查询采购关联信息 + var orderPurchaseRelationList = fsql.Select().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId && + opri.BelongSkuId == request.SkuId).ToList(); + if (orderPurchaseRelationList.Count() == 0) + throw new BusinessException("未查询到采购单的关联信息"); + #endregion + + #region 查询该笔采购单的采购sku信息并更新快递单号 + orderPurchaseSkuList = fsql.Select().Where(x => x.PurchaseOrderId == request.PurchaseOrderId).ToList(); + if (orderPurchaseSkuList.Count() == 0) throw new BusinessException("未查询到采购单sku信息"); - if (orderPurchaseSku.WaybillNo != request.WaybillNo) + + foreach (var relation in orderPurchaseRelationList) { - orderPurchaseSku.WaybillNo = request.WaybillNo; - updateOrderPurchaseSkuList.Add(fsql.Update(orderPurchaseSku.Id).Set(ps => ps.WaybillNo, request.WaybillNo)); + var orderPurchaseSku = orderPurchaseSkuList.FirstOrDefault(posku => posku.PurchaseSkuId == relation.PurchaseSkuId); + if (orderPurchaseSku == null) + throw new BusinessException("未查询到采购单sku信息"); + if (orderPurchaseSku.WaybillNo != request.WaybillNo) + { + orderPurchaseSku.WaybillNo = request.WaybillNo; + updateOrderPurchaseSkuList.Add(fsql.Update(orderPurchaseSku.Id).Set(ps => ps.WaybillNo, request.WaybillNo)); + } } + #endregion } - #endregion #region 订阅快递100 bool isSubscribeKD100 = false; @@ -1272,38 +1276,62 @@ namespace BBWYB.Server.Business throw new BusinessException("未查询到采购单信息"); #endregion - #region 查询采购关联信息 - var orderPurchaseRelationList = fsql.Select().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId && - opri.BelongSkuId == request.SkuId).ToList(); - if (orderPurchaseRelationList.Count() == 0) - throw new BusinessException("未查询到采购单的关联信息"); - #endregion + IList orderPurchaseSkuList = null; + IList orderPurchaseRelationList = null; + if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.阿里巴巴) + { + #region 查询采购关联信息 + orderPurchaseRelationList = fsql.Select().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId && + opri.BelongSkuId == request.SkuId).ToList(); + if (orderPurchaseRelationList.Count() == 0) + throw new BusinessException("未查询到采购单的关联信息"); + #endregion - #region 查询该笔采购单的采购sku信息 - var orderPurchaseSkuList = fsql.Select().Where(x => x.PurchaseOrderId == request.PurchaseOrderId).ToList(); - if (orderPurchaseSkuList.Count() == 0) - throw new BusinessException("未查询到采购单sku信息"); - #endregion + #region 查询该笔采购单的采购sku信息 + orderPurchaseSkuList = fsql.Select().Where(x => x.PurchaseOrderId == request.PurchaseOrderId).ToList(); + if (orderPurchaseSkuList.Count() == 0) + throw new BusinessException("未查询到采购单sku信息"); + #endregion - #region 更新采购sku的快递单状态为签收 - foreach (var relation in orderPurchaseRelationList) + #region 更新采购sku的快递单状态为签收 + foreach (var relation in orderPurchaseRelationList) + { + var orderPurchaseSku = orderPurchaseSkuList.FirstOrDefault(posku => posku.PurchaseSkuId == relation.PurchaseSkuId); + if (orderPurchaseSku == null) + throw new BusinessException("未查询到采购单sku信息"); + if (!string.IsNullOrEmpty(orderPurchaseSku.WaybillNo)) + { + var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(exo => exo.WaybillNo == orderPurchaseSku.WaybillNo); + if (purchaseExpressOrder == null) + throw new BusinessException("未查询到采购sku的快递信息"); + var expressState = kuaiDi100Manager.GetExpressState(3); + if (purchaseExpressOrder.ExpressState != expressState) + { + purchaseExpressOrder.ExpressState = expressState; + updatePurchaseExpressOrderList.Add(fsql.Update(purchaseExpressOrder.WaybillNo) + .Set(exo => exo.ExpressState, purchaseExpressOrder.ExpressState) + .Set(exo => exo.ExpressChangedTime, DateTime.Now) + .Set(exo => exo.ExpressContent, "手动签收")); + } + } + } + #endregion + } + else { - var orderPurchaseSku = orderPurchaseSkuList.FirstOrDefault(posku => posku.PurchaseSkuId == relation.PurchaseSkuId); - if (orderPurchaseSku == null) - throw new BusinessException("未查询到采购单sku信息"); - if (!string.IsNullOrEmpty(orderPurchaseSku.WaybillNo)) + foreach (var purchaseExpressOrder in purchaseExpressOrderList) { - var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(exo => exo.WaybillNo == orderPurchaseSku.WaybillNo); - if (purchaseExpressOrder == null) - throw new BusinessException("未查询到采购sku的快递信息"); - purchaseExpressOrder.ExpressState = kuaiDi100Manager.GetExpressState(3); - updatePurchaseExpressOrderList.Add(fsql.Update(purchaseExpressOrder.WaybillNo) - .Set(exo => exo.ExpressState, purchaseExpressOrder.ExpressState) - .Set(exo => exo.ExpressChangedTime, DateTime.Now) - .Set(exo => exo.ExpressContent, "手动签收")); + var expressState = kuaiDi100Manager.GetExpressState(3); + if (purchaseExpressOrder.ExpressState != expressState) + { + purchaseExpressOrder.ExpressState = expressState; + updatePurchaseExpressOrderList.Add(fsql.Update(purchaseExpressOrder.WaybillNo) + .Set(exo => exo.ExpressState, purchaseExpressOrder.ExpressState) + .Set(exo => exo.ExpressChangedTime, DateTime.Now) + .Set(exo => exo.ExpressContent, "手动签收")); + } } } - #endregion #region 计算采购单状态 orderPurchaseInfo.CalculationOrderState(fsql, orderPurchaseSkuList, purchaseExpressOrderList); @@ -1318,7 +1346,7 @@ namespace BBWYB.Server.Business #endregion #region 通知齐库打包落仓情况 - Task.Factory.StartNew(() => qiKuManager.PublishQiKu(orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList), + Task.Factory.StartNew(() => qiKuManager.PublishQiKu(orderPurchaseInfo, orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); @@ -2005,7 +2033,14 @@ namespace BBWYB.Server.Business throw new Exception("未查询到快递单"); #endregion - #region 查询订单/采购单/采购sku/快递单/采购关系 + #region 查询采购单 + var orderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == tpeo.OrderId && opi.IsEnabled == true).ToList(); + var orderPurchaseInfo = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == tpeo.PurchaseOrderId); + if (orderPurchaseInfo == null) + throw new Exception("未查询到采购单"); + #endregion + + #region 查询订单/采购sku/快递单/采购关系 var dbOrder = fsql.Select(tpeo.OrderId).ToOne(o => new Order { Id = o.Id, @@ -2015,14 +2050,18 @@ namespace BBWYB.Server.Business 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("未查询到采购单"); + IList orderPurchaseSkuList = null; + IList orderPurchaseRelationList = null; + if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.阿里巴巴) + { + orderPurchaseSkuList = fsql.Select().Where(x => x.PurchaseOrderId == tpeo.PurchaseOrderId).ToList(); + if (orderPurchaseSkuList.Count() == 0) + throw new BusinessException("未查询到采购单sku信息"); - var orderPurchaseSkuList = fsql.Select().Where(x => x.PurchaseOrderId == tpeo.PurchaseOrderId).ToList(); - if (orderPurchaseSkuList.Count() == 0) - throw new BusinessException("未查询到采购单sku信息"); + orderPurchaseRelationList = fsql.Select().Where(opri => opri.PurchaseOrderId == tpeo.PurchaseOrderId).ToList(); + if (orderPurchaseRelationList.Count() == 0) + throw new BusinessException("未查询到采购单的关联信息"); + } var purchaseExpressOrderList = fsql.Select().Where(x => x.PurchaseOrderId == tpeo.PurchaseOrderId).ToList(); var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(exo => exo.WaybillNo == waybillNo); @@ -2031,9 +2070,6 @@ namespace BBWYB.Server.Business 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 计算采购单状态 @@ -2049,7 +2085,7 @@ namespace BBWYB.Server.Business #endregion #region 通知齐库打包落仓情况 - Task.Factory.StartNew(() => qiKuManager.PublishQiKu(orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList), + Task.Factory.StartNew(() => qiKuManager.PublishQiKu(orderPurchaseInfo, orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); diff --git a/BBWYB.Server.Business/QiKuManager.cs b/BBWYB.Server.Business/QiKuManager.cs index d01b8cf..8a93d99 100644 --- a/BBWYB.Server.Business/QiKuManager.cs +++ b/BBWYB.Server.Business/QiKuManager.cs @@ -1,5 +1,6 @@ using BBWYB.Common.Http; using BBWYB.Common.Models; +using BBWYB.Server.Model; using BBWYB.Server.Model.Db; namespace BBWYB.Server.Business @@ -7,20 +8,36 @@ namespace BBWYB.Server.Business public class QiKuManager : IDenpendency { private RestApiService restApiService; - public QiKuManager(RestApiService restApiService) + private IFreeSql fsql; + public QiKuManager(RestApiService restApiService, IFreeSql fsql) { this.restApiService = restApiService; + this.fsql = fsql; } /// /// 通知齐库 + /// 支持关联的采购平台以来源SKU为单位通知齐库 + /// 不支持关联的采购平台以采购单为单位通知齐库 /// + /// /// /// /// - public void PublishQiKu(IList orderPurchaseRelationInfoList, + public void PublishQiKu(OrderPurchaseInfo orderPurchaseInfo, + IList orderPurchaseRelationInfoList, IList orderPurchaseSkuInfoList, IList purchaseExpressOrderList) + { + if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.阿里巴巴) + PublishQiKuByRelation(orderPurchaseRelationInfoList, orderPurchaseSkuInfoList, purchaseExpressOrderList); + else + PublishQiKuPurchaseExpressOrder(orderPurchaseInfo, purchaseExpressOrderList); + } + + private void PublishQiKuByRelation(IList orderPurchaseRelationInfoList, + IList orderPurchaseSkuInfoList, + IList purchaseExpressOrderList) { try { @@ -62,5 +79,40 @@ namespace BBWYB.Server.Business } } + + private void PublishQiKuPurchaseExpressOrder(OrderPurchaseInfo orderPurchaseInfo, IList purchaseExpressOrderList) + { + try + { + if (string.IsNullOrEmpty(orderPurchaseInfo.BelongSkuIds)) + return; + + var orderId = purchaseExpressOrderList.FirstOrDefault().OrderId; + var orderSkuList = fsql.Select().Where(osku => osku.OrderId == orderId).ToList(); + + var isSignAll = !purchaseExpressOrderList.Any(x => x.ExpressState != "QianShou"); + + var notifyList = orderSkuList.Where(osku => orderPurchaseInfo.BelongSkuIds.Contains(osku.SkuId)).ToList(); + if (notifyList.Count() == 0) + return; + foreach (var notifySku in notifyList) + { + restApiService.SendRequest("http://qiku.qiyue666.com", + "/Api/PackPurchaseTask/UpdateAvailabilityState", + new + { + availability = isSignAll ? 0 : 1, + orderId = notifySku.OrderId, + skuId = notifySku.BelongSkuId + }, + null, + HttpMethod.Post); + } + } + catch + { + + } + } } }