diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index af2ca5e..e01a121 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -14,18 +14,6 @@ namespace BBWYB.Server.API.Controllers this.dataRepairBusiness = dataRepairBusiness; } - [HttpPost] - public void RepairPurchaseExpressOrder() - { - dataRepairBusiness.RepairPurchaseExpressOrder(); - } - - [HttpPost] - public void ClearCancelOrderData() - { - dataRepairBusiness.ClearCancelOrderData(); - } - /// /// 手动订阅快递100 /// @@ -37,25 +25,5 @@ namespace BBWYB.Server.API.Controllers dataRepairBusiness.SubscribeKD100(waybillNo, targetCompanyCode); } - /// - /// 修复订单状态 - /// - /// - [HttpPost("{orderId}")] - public void RepairOrderState([FromRoute] string orderId) - { - dataRepairBusiness.RepairOrderState(orderId); - } - - /// - /// 修复订单状态 - /// - /// - [HttpPost] - public void BatchRepairOrderState([FromBody] IList orderIds) - { - foreach (var orderId in orderIds) - dataRepairBusiness.RepairOrderState(orderId); - } } } diff --git a/BBWYB.Server.API/Controllers/OrderController.cs b/BBWYB.Server.API/Controllers/OrderController.cs index 8491317..fcb1178 100644 --- a/BBWYB.Server.API/Controllers/OrderController.cs +++ b/BBWYB.Server.API/Controllers/OrderController.cs @@ -23,7 +23,7 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpPost] - public OrderListResponse GetOrderList([FromBody]QueryOrderRequest request) + public OrderListResponse GetOrderList([FromBody] QueryOrderRequest request) { return orderBusiness.GetOrderList(request); } @@ -34,11 +34,22 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpPost] - public IList GetPurchaseExpressOrderList([FromBody]QueryExpressOrderRequest request) + public IList GetPurchaseExpressOrderList([FromBody] QueryExpressOrderRequest request) { return orderBusiness.GetPurchaseExpressOrderList(request); } + /// + /// 批量查询快递单列表 + /// + /// 订单Id数组 + /// + [HttpPost] + public IList BatchGetPurchaseExpressOrderList([FromBody] IList orderIds) + { + return orderBusiness.GetPurchaseExpressOrderList(orderIds); + } + ///// ///// 出库 @@ -93,6 +104,16 @@ namespace BBWYB.Server.API.Controllers orderBusiness.EditOrderSkuRemark(request); } + /// + /// 来源SKU验收 + /// + /// + [HttpPost] + public void CheckSku([FromBody] CheckSkuRequest request) + { + orderBusiness.CheckSku(request); + } + /// /// 齐库推送打包费 /// diff --git a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs index a42def9..2b4dd1a 100644 --- a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs @@ -122,6 +122,16 @@ namespace BBWYB.Server.API.Controllers purchaseOrderBusiness.ManualSign(request); } + /// + /// 批量手动收货 + /// + /// + [HttpPost] + public void BatchManualSign([FromBody] BatchManualSignRequest request) + { + purchaseOrderBusiness.BatchManualSign(request); + } + /// /// 1688回调 /// diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 5a1b84e..7c953d0 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -1,6 +1,7 @@ using BBWYB.Common.Log; using BBWYB.Common.Models; using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Dto; using FreeSql; using Yitter.IdGenerator; @@ -14,138 +15,6 @@ namespace BBWYB.Server.Business this.kuaiDi100Manager = kuaiDi100Manager; } - public void RepairPurchaseExpressOrder() - { - - #region 修复快递单 - var purchaseExpressOrderList = fsql.Select().Where(peo => !string.IsNullOrEmpty(peo.PurchaseOrderId)).ToList(); - var wayBillNos = purchaseExpressOrderList.Select(peo => peo.WaybillNo).ToList(); - var relationList = fsql.Select().Where(eori => wayBillNos.Contains(eori.WayBillNo)).ToList(); - - List insertExpressOrderRelationInfoList = new List(); - foreach (var peo in purchaseExpressOrderList) - { - var relation = relationList.FirstOrDefault(r => r.WayBillNo == peo.WaybillNo && r.PurchaseOrderId == peo.PurchaseOrderId); - if (relation != null) - continue; - insertExpressOrderRelationInfoList.Add(new ExpressOrderRelationInfo() - { - Id = idGenerator.NewLong(), - CreateTime = DateTime.Now, - OrderId = peo.OrderId, - PurchaseOrderId = peo.PurchaseOrderId, - ShopId = peo.ShopId, - WayBillNo = peo.WaybillNo - }); - } - fsql.Transaction(() => - { - fsql.Insert(insertExpressOrderRelationInfoList).ExecuteAffrows(); - }); - #endregion - } - - /// - /// 批量清理取消单数据 - /// - public void ClearCancelOrderData() - { - var cancelOrderList = fsql.Select().Where(o => o.OrderState == Model.Enums.OrderState.已取消).ToList(); - var cancelOrderIds = cancelOrderList.Select(o => o.Id); - - //var noUsingExpressOrderList = fsql.Select().Where(peo => !fsql.Select() - // .As("b") - // .ToList(b => b.WayBillNo) - // .Contains(peo.WaybillNo)) - // .ToList(); - - - /* - select * from purchaseexpressorder peo where not exists (select r.waybillno from expressorderrelationinfo r where peo.WaybillNo=r.WaybillNo); - */ - fsql.Transaction(() => - { - fsql.Delete().Where(opi => cancelOrderIds.Contains(opi.OrderId)).ExecuteAffrows(); - fsql.Delete().Where(posku => cancelOrderIds.Contains(posku.OrderId)).ExecuteAffrows(); - fsql.Delete().Where(opri => cancelOrderIds.Contains(opri.OrderId)).ExecuteAffrows(); - fsql.Delete().Where(oc => cancelOrderIds.Contains(oc.OrderId)).ExecuteAffrows(); - fsql.Delete().Where(ocd => cancelOrderIds.Contains(ocd.OrderId)).ExecuteAffrows(); - }); - } - - public void RepairOrderState(string orderId) - { - List> updateOrderPurchaseList = new List>(); - IUpdate updateOrder = null; - - var order = fsql.Select(orderId).ToOne(); - - #region 查询采购单 - var purchaseOrderList = fsql.Select().Where(ori => ori.IsEnabled == true && ori.OrderId == orderId).ToList(); - if (purchaseOrderList.Count() == 0) - throw new Exception("未查询到任何采购单"); - var purchaseOrderIds = purchaseOrderList.Select(po => po.PurchaseOrderId).ToList(); - #endregion - - #region 查询采购SKU - IList orderPurchaseSkuList = fsql.Select() - .Where(posku => purchaseOrderIds.Contains(posku.PurchaseOrderId)) - .ToList(); - #endregion - - #region 查询采购sku关联信息 - IList orderPurchaseRelationList = fsql.Select() - .Where(ops => purchaseOrderIds.Contains(ops.PurchaseOrderId)) - .ToList(); - #endregion - - #region 查询采购单关联的快递单 - var purchaseExpressOrderList = fsql.Select() - .InnerJoin((eori, peo) => eori.WayBillNo == peo.WaybillNo) - .Where((eori, peo) => eori.OrderId == orderId).ToList((eori, peo) => new PurchaseExpressOrder - { - CreateTime = peo.CreateTime, - ExpressContent = peo.ExpressContent, - ExpressChangedTime = peo.ExpressChangedTime, - ExpressState = peo.ExpressState, - IsSubscribeKD100 = peo.IsSubscribeKD100, - OrderId = eori.OrderId, - PurchaseOrderId = eori.PurchaseOrderId, - ShopId = eori.ShopId.Value, - SourceExpressId = peo.SourceExpressId, - SourceExpressName = peo.SourceExpressName, - TargetExpressId = peo.TargetExpressId, - TargetExpressName = peo.TargetExpressName, - WaybillNo = peo.WaybillNo - }); - #endregion - - foreach (var purchaseOrder in purchaseOrderList) - { - var currentPurchaseOrderSkuList = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); - - var currentPurchaseExpressOrderList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); - - var oldPurchaseOrderState = purchaseOrder.OrderState; - purchaseOrder.CalculationOrderState(fsql, currentPurchaseOrderSkuList, currentPurchaseExpressOrderList); - if (purchaseOrder.OrderState != oldPurchaseOrderState) - { - var update = fsql.Update(purchaseOrder.Id).Set(opi => opi.OrderState, purchaseOrder.OrderState); - updateOrderPurchaseList.Add(update); - } - } - var oldOrderState = order.OrderState; - order.CalculationOrderState(fsql, null, purchaseOrderList); - if (order.OrderState != oldOrderState) - updateOrder = fsql.Update(order.Id).Set(o => o.OrderState, order.OrderState); - - fsql.Transaction(() => - { - foreach (var update in updateOrderPurchaseList) - update.ExecuteAffrows(); - updateOrder?.ExecuteAffrows(); - }); - } public void SubscribeKD100(string waybillNo, string targetCompanyCode) { diff --git a/BBWYB.Server.Business/Extensions/OrderStateExtension.cs b/BBWYB.Server.Business/Extensions/OrderStateExtension.cs index 8cf2adc..4fe1500 100644 --- a/BBWYB.Server.Business/Extensions/OrderStateExtension.cs +++ b/BBWYB.Server.Business/Extensions/OrderStateExtension.cs @@ -21,8 +21,7 @@ namespace BBWYB.Server.Business { if (order.OrderState == Enums.OrderState.已取消 || order.OrderState == Enums.OrderState.已完成 || - order.OrderState == Enums.OrderState.待付款 || - order.OrderState == Enums.OrderState.待完结) + order.OrderState == Enums.OrderState.待付款) return; if (orderSkuList == null) @@ -102,11 +101,19 @@ namespace BBWYB.Server.Business } #endregion - #region 打包中 + #region 待验收/待核算/已完成 if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.已签收) && orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收) == orderPurchaseInfoList.Count()) { - order.OrderState = Enums.OrderState.打包中; + if (order.IntoStoreType == Enums.IntoStoreType.发回齐越) + { + if (orderSkuList.Any(osku => osku.IsCheck != true)) + order.OrderState = Enums.OrderState.待验收; + else + order.OrderState = Enums.OrderState.待核算; + } + else + order.OrderState = Enums.OrderState.已完成; return; } #endregion @@ -146,7 +153,7 @@ namespace BBWYB.Server.Business } if (purchaseExpressOrderList == null) - purchaseExpressOrderList = fsql.Select().Where(exo => exo.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList(); + return; if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.阿里巴巴) //支持采购sku和关联信息 { diff --git a/BBWYB.Server.Business/Extensions/PurchaseExpressOrderExtension.cs b/BBWYB.Server.Business/Extensions/PurchaseExpressOrderExtension.cs new file mode 100644 index 0000000..ad26a54 --- /dev/null +++ b/BBWYB.Server.Business/Extensions/PurchaseExpressOrderExtension.cs @@ -0,0 +1,59 @@ +using BBWYB.Server.Model; +using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Dto; + +namespace BBWYB.Server.Business.Extensions +{ + public static class PurchaseExpressOrderExtension + { + /// + /// 计算快递单归属 + /// + /// 必须是经过与快递单关系表进行联合查询的结果 (ExpressOrderRelationInfo-PurchaseExpressOrder) + /// + /// + /// + public static void CalculationBelongOrderSku(this PurchaseExpressOrderResponse purchaseExpressOrder, + IList orderPurchaseInfoList, + IList orderPurchaseRelationInfoList, + IList orderPurchaseSkuInfoList) + { + var purchaseOrder = orderPurchaseInfoList.FirstOrDefault(po => po.PurchaseOrderId == purchaseExpressOrder.PurchaseOrderId); + if (purchaseOrder == null) + return; + if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴) + { + var purchaseSkuIds = orderPurchaseSkuInfoList.Where(posku => posku.WaybillNo == purchaseExpressOrder.WaybillNo && + posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId) + .Select(posku => posku.PurchaseSkuId).ToList(); + var orderSkuIds = orderPurchaseRelationInfoList.Where(ori => ori.PurchaseOrderId == purchaseOrder.PurchaseOrderId && + purchaseSkuIds.Contains(ori.PurchaseSkuId)) + .Select(ori => ori.BelongSkuId) + .Distinct() + .ToList(); + purchaseExpressOrder.BelongSkuIds = string.Join(",", orderSkuIds); + + //var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId && + // orderSkuIds.Contains(osku.SkuId)).ToList(); + //foreach (var osku in currentOrderSkuList) + //{ + // if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo)) + // continue; + // osku.PurchaseExpressOrderList.Add(purchaseExpressOrder); + //} + } + else + { + purchaseExpressOrder.BelongSkuIds = purchaseOrder.BelongSkuIds; + //var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId && + // purchaseOrder.BelongSkuIds.Contains(osku.SkuId)).ToList(); + //foreach (var osku in currentOrderSkuList) + //{ + // if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo)) + // continue; + // osku.PurchaseExpressOrderList.Add(purchaseExpressOrder); + //} + } + } + } +} diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index c72b524..c5d4530 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -54,8 +54,8 @@ namespace BBWYB.Server.Business select = select.Where((o, ocs, oct) => childSelect.Where(opi => opi.OrderId == o.Id).Any()); } select = select.WhereIf(request.OrderState == Enums.OrderState.待付款 || - request.OrderState == Enums.OrderState.打包中 || - request.OrderState == Enums.OrderState.待完结 || + request.OrderState == Enums.OrderState.待验收 || + request.OrderState == Enums.OrderState.待核算 || request.OrderState == Enums.OrderState.已完成 || request.OrderState == Enums.OrderState.已取消, (o, ocs, oct) => o.OrderState == request.OrderState) @@ -206,40 +206,51 @@ namespace BBWYB.Server.Business #region 处理SKU的快递单 foreach (var purchaseExpressOrder in purchaseExpressOrderList) { - var purchaseOrder = orderPurchaseInfoList.FirstOrDefault(po => po.PurchaseOrderId == purchaseExpressOrder.PurchaseOrderId); - if (purchaseOrder == null) - continue; - if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴) + purchaseExpressOrder.CalculationBelongOrderSku(orderPurchaseInfoList, orderPurchaseRelationInfoList, orderPurchaseSkuInfoList); + var currentOrderSkuList = orderSkuList.Where(osku => !string.IsNullOrEmpty(purchaseExpressOrder.BelongSkuIds) && + osku.OrderId == purchaseExpressOrder.OrderId && + purchaseExpressOrder.BelongSkuIds.Contains(osku.SkuId)).ToList(); + foreach (var osku in currentOrderSkuList) { - var purchaseSkuIds = orderPurchaseSkuInfoList.Where(posku => posku.WaybillNo == purchaseExpressOrder.WaybillNo && - posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId) - .Select(posku => posku.PurchaseSkuId).ToList(); - var orderSkuIds = orderPurchaseRelationInfoList.Where(ori => ori.PurchaseOrderId == purchaseOrder.PurchaseOrderId && - purchaseSkuIds.Contains(ori.PurchaseSkuId)) - .Select(ori => ori.BelongSkuId) - .Distinct() - .ToList(); - - var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId && - orderSkuIds.Contains(osku.SkuId)).ToList(); - foreach (var osku in currentOrderSkuList) - { - if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo)) - continue; - osku.PurchaseExpressOrderList.Add(purchaseExpressOrder); - } - } - else - { - var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId && - purchaseOrder.BelongSkuIds.Contains(osku.SkuId)).ToList(); - foreach (var osku in currentOrderSkuList) - { - if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo)) - continue; - osku.PurchaseExpressOrderList.Add(purchaseExpressOrder); - } + if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo)) + continue; + osku.PurchaseExpressOrderList.Add(purchaseExpressOrder); } + + //var purchaseOrder = orderPurchaseInfoList.FirstOrDefault(po => po.PurchaseOrderId == purchaseExpressOrder.PurchaseOrderId); + //if (purchaseOrder == null) + // continue; + //if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴) + //{ + // var purchaseSkuIds = orderPurchaseSkuInfoList.Where(posku => posku.WaybillNo == purchaseExpressOrder.WaybillNo && + // posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId) + // .Select(posku => posku.PurchaseSkuId).ToList(); + // var orderSkuIds = orderPurchaseRelationInfoList.Where(ori => ori.PurchaseOrderId == purchaseOrder.PurchaseOrderId && + // purchaseSkuIds.Contains(ori.PurchaseSkuId)) + // .Select(ori => ori.BelongSkuId) + // .Distinct() + // .ToList(); + + // var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId && + // orderSkuIds.Contains(osku.SkuId)).ToList(); + // foreach (var osku in currentOrderSkuList) + // { + // if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo)) + // continue; + // osku.PurchaseExpressOrderList.Add(purchaseExpressOrder); + // } + //} + //else + //{ + // var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId && + // purchaseOrder.BelongSkuIds.Contains(osku.SkuId)).ToList(); + // foreach (var osku in currentOrderSkuList) + // { + // if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo)) + // continue; + // osku.PurchaseExpressOrderList.Add(purchaseExpressOrder); + // } + //} } #endregion } @@ -273,121 +284,91 @@ namespace BBWYB.Server.Business var orderPurchaseInfoList = fsql.Select().Where(op => op.OrderId == request.OrderId && op.IsEnabled == true).ToList(); var orderPurchaseRelationList = fsql.Select().Where(opri => opri.OrderId == request.OrderId && opri.SourceSkuId == request.SourceSkuId).ToList(); - var orderPurchaseSkuList = fsql.Select().Where(posku => posku.OrderId == request.OrderId).ToList(); - var orderSkuList = fsql.Select().Where(osku => osku.OrderId == request.OrderId).ToList(); + var orderPurchaseSkuList = fsql.Select().Where(posku => posku.OrderId == request.OrderId).ToList(); + var orderSku = fsql.Select().Where(osku => osku.OrderId == request.OrderId && osku.BelongSkuId == request.SourceSkuId).ToOne(); IList list = new List(); #region 处理SKU的快递单 - foreach (var purchaseOrder in orderPurchaseInfoList) + foreach (var purchaseExpressOrder in purchaseExpressOrderList) { - if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴) - { - var currentRelationList = orderPurchaseRelationList.Where(ori => ori.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); - - var waybillNos = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId && - currentRelationList.Any(opri => opri.PurchaseSkuId == posku.PurchaseSkuId)) - .Select(x => x.WaybillNo) - .ToList(); - foreach (var waybillNo in waybillNos) - { - var peo = purchaseExpressOrderList.FirstOrDefault(x => x.WaybillNo == waybillNo); - if (peo != null && !list.Any(x => x.WaybillNo == waybillNo && x.PurchaseOrderId == purchaseOrder.PurchaseOrderId)) - list.Add(peo); - } - } - else + purchaseExpressOrder.CalculationBelongOrderSku(orderPurchaseInfoList, orderPurchaseRelationList, orderPurchaseSkuList); + if (!string.IsNullOrEmpty(purchaseExpressOrder.BelongSkuIds)) { - var currentSkuList = orderSkuList.Where(osku => purchaseOrder.BelongSkuIds.Contains(osku.SkuId)).Select(osku => osku.BelongSkuId).Distinct().ToList(); - if (currentSkuList.Contains(request.SourceSkuId)) + if (purchaseExpressOrder.BelongSkuIds.Contains(orderSku.SkuId)) { - var peoList = purchaseExpressOrderList.Where(x => x.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); - foreach (var peo in peoList) - { - if (!list.Any(x => x.WaybillNo == peo.WaybillNo && x.PurchaseOrderId == purchaseOrder.PurchaseOrderId)) - list.Add(peo); - } + if (!list.Any(x => x.WaybillNo == purchaseExpressOrder.WaybillNo)) + list.Add(purchaseExpressOrder); } } } + //foreach (var purchaseOrder in orderPurchaseInfoList) + //{ + // if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴) + // { + // var currentRelationList = orderPurchaseRelationList.Where(ori => ori.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); + + // var waybillNos = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId && + // currentRelationList.Any(opri => opri.PurchaseSkuId == posku.PurchaseSkuId)) + // .Select(x => x.WaybillNo) + // .ToList(); + // foreach (var waybillNo in waybillNos) + // { + // var peo = purchaseExpressOrderList.FirstOrDefault(x => x.WaybillNo == waybillNo); + // if (peo != null && !list.Any(x => x.WaybillNo == waybillNo && x.PurchaseOrderId == purchaseOrder.PurchaseOrderId)) + // list.Add(peo); + // } + // } + // else + // { + // var currentSkuList = orderSkuList.Where(osku => purchaseOrder.BelongSkuIds.Contains(osku.SkuId)).Select(osku => osku.BelongSkuId).Distinct().ToList(); + // if (currentSkuList.Contains(request.SourceSkuId)) + // { + // var peoList = purchaseExpressOrderList.Where(x => x.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); + // foreach (var peo in peoList) + // { + // if (!list.Any(x => x.WaybillNo == peo.WaybillNo && x.PurchaseOrderId == purchaseOrder.PurchaseOrderId)) + // list.Add(peo); + // } + // } + // } + //} #endregion return list; } - //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 IList GetPurchaseExpressOrderList(IList orderIds) + { + var purchaseExpressOrderList = fsql.Select() + .InnerJoin((eori, peo) => eori.WayBillNo == peo.WaybillNo) + .Where((eori, peo) => orderIds.Contains(eori.OrderId)).ToList((eori, peo) => new PurchaseExpressOrderResponse + { + CreateTime = peo.CreateTime, + ExpressContent = peo.ExpressContent, + ExpressChangedTime = peo.ExpressChangedTime, + ExpressState = peo.ExpressState, + IsSubscribeKD100 = peo.IsSubscribeKD100, + OrderId = eori.OrderId, + PurchaseOrderId = eori.PurchaseOrderId, + ShopId = eori.ShopId.Value, + SourceExpressId = peo.SourceExpressId, + SourceExpressName = peo.SourceExpressName, + TargetExpressId = peo.TargetExpressId, + TargetExpressName = peo.TargetExpressName, + WaybillNo = peo.WaybillNo + }); + + var orderPurchaseInfoList = fsql.Select().Where(op => orderIds.Contains(op.OrderId) && op.IsEnabled == true).ToList(); + var orderPurchaseRelationList = fsql.Select().Where(opri => orderIds.Contains(opri.OrderId)).ToList(); + var orderPurchaseSkuList = fsql.Select().Where(posku => orderIds.Contains(posku.OrderId)).ToList(); + + #region 处理SKU的快递单 + foreach (var purchaseExpressOrder in purchaseExpressOrderList) + { + purchaseExpressOrder.CalculationBelongOrderSku(orderPurchaseInfoList, orderPurchaseRelationList, orderPurchaseSkuList); + } + #endregion + return purchaseExpressOrderList; + } public void CancelOrder(CancelOrderRequest request, string mdsToken) { @@ -403,13 +384,26 @@ namespace BBWYB.Server.Business fsql.Update(request.OrderId).Set(o => o.OrderState, Enums.OrderState.已取消).ExecuteAffrows(); - var sql = $"update purchaseorderv2 set OrderState=6 where Id='{request.OrderId}'"; - //取消C端采购单 - restApiService.SendRequest("https://bbwy.qiyue666.com", - "/Api/Sql/ExecuteNonQuery", - new { sql = sql.AESEncrypt() }, - new Dictionary() { { "Authorization", $"{mdsToken}" } }, - HttpMethod.Post); + try + { + restApiService.SendRequest("https://bbwy.qiyue666.com", "api/BatchPurchase/UpdatePurchaseOrderState", new + { + OrderId = request.OrderId, + PurchaseOrderState = Enums.OrderState.已取消 + }, null, HttpMethod.Post); + } + catch + { + + } + + //var sql = $"update purchaseorderv2 set OrderState=6 where Id='{request.OrderId}'"; + ////取消C端采购单 + //restApiService.SendRequest("https://bbwy.qiyue666.com", + // "/Api/Sql/ExecuteNonQuery", + // new { sql = sql.AESEncrypt() }, + // new Dictionary() { { "Authorization", $"Bearer {mdsToken}" } }, + // HttpMethod.Post); try { @@ -516,5 +510,37 @@ namespace BBWYB.Server.Business { } + + public void CheckSku(CheckSkuRequest request) + { + var dbOrder = fsql.Select(request.OrderId).ToOne(); + if (dbOrder == null) + throw new BusinessException($"订单{request.OrderId}不存在"); + var orderSkuList = fsql.Select().Where(osku => osku.OrderId == request.OrderId).ToList(); + var orderSku = orderSkuList.FirstOrDefault(osku => osku.BelongSkuId == request.SourceSkuId); + if (orderSku == null) + throw new BusinessException($"订单{request.OrderId}的归属sku中不存在{request.SourceSkuId}"); + + if (orderSku.IsCheck == true) + throw new BusinessException("已验收,无需重复验收"); + + + IUpdate updateOrder = null; + IUpdate updateOrderSku = null; + + orderSku.IsCheck = true; + updateOrderSku = fsql.Update(orderSku.Id).Set(osku => osku.IsCheck, true); + + var oldOrderState = dbOrder.OrderState; + dbOrder.CalculationOrderState(fsql, orderSkuList, null); + if (oldOrderState != dbOrder.OrderState) + updateOrder = fsql.Update(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState); + + fsql.Transaction(() => + { + updateOrderSku?.ExecuteAffrows(); + updateOrder?.ExecuteAffrows(); + }); + } } } diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 045ca8e..9dc23e4 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -58,8 +58,7 @@ namespace BBWYB.Server.Business { Enums.OrderState.已取消, Enums.OrderState.已完成, - Enums.OrderState.待付款, - Enums.OrderState.待完结 + Enums.OrderState.待付款 }; } @@ -1021,17 +1020,6 @@ namespace BBWYB.Server.Business var dbOrderCost = fsql.Select(request.OrderId).ToOne(); var dbOrder = fsql.Select(request.OrderId).ToOne(); - //try - //{ - // dbOrderCost.PurchaseAmount = dbOrderCostDetailList.Where(ocd => ocd.PurchaseOrderId != request.PurchaseOrderId).Sum(ocd => ocd.TotalCost); - //} - //catch - //{ - // dbOrderCost.PurchaseAmount = 0; - //} - //dbOrderCost.Profit = dbOrder.OrderTotalPrice - - // dbOrderCost.PurchaseAmount - - // dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount var purchaseProductAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.SkuAmount) ?? 0M; var purchaseFreight = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.PurchaseFreight) ?? 0M; var outPackAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount) ?? 0M; @@ -1099,6 +1087,9 @@ namespace BBWYB.Server.Business public void EditPurchaseExpressOrder(EditPurchaseExpressOrderRequest request) { nLogManager.Default().Info($"EditPurchaseExpressOrder {JsonConvert.SerializeObject(request)}"); + + throw new BusinessException("修改快递单已暂时下线,待调整后重新上线"); + var dbOrder = fsql.Select(request.OrderId).ToOne(o => new { o.Id, o.ShopId, o.OrderSn }); if (dbOrder == null) throw new BusinessException($"订单号{request.OrderId}不存在"); @@ -1109,8 +1100,8 @@ namespace BBWYB.Server.Business var oldPeo = fsql.Select(request.OldWaybillNo).ToOne(); if (oldPeo == null) throw new BusinessException($"旧快递单号{request.OldWaybillNo}不存在"); - if (oldPeo.OrderId != request.OrderId || oldPeo.PurchaseOrderId != request.PurchaseOrderId) - throw new BusinessException("快递单号不属于当前操作提交的订单或采购单"); + //if (oldPeo.OrderId != request.OrderId || oldPeo.PurchaseOrderId != request.PurchaseOrderId) + // throw new BusinessException("快递单号不属于当前操作提交的订单或采购单"); var newPeo = fsql.Select(request.NewWaybillNo).ToOne(); if (newPeo != null) throw new BusinessException($"新快递单号{request.NewWaybillNo}已存在"); @@ -1211,7 +1202,8 @@ namespace BBWYB.Server.Business Id = o.Id, OrderSn = o.OrderSn, OrderState = o.OrderState, - ShopId = o.ShopId + ShopId = o.ShopId, + IntoStoreType = o.IntoStoreType }); if (dbOrder == null) throw new BusinessException("未查询到采购单的订单信息"); @@ -1367,6 +1359,21 @@ namespace BBWYB.Server.Business taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); } + public void BatchManualSign(BatchManualSignRequest request) + { + if (request.WayBillNoList == null || request.WayBillNoList.Count() == 0) + throw new BusinessException("缺少快递单号"); + if (request.WayBillNoList.Distinct().Count() < request.WayBillNoList.Count()) + throw new BusinessException("不允许重复的快递单号"); + Task.Factory.StartNew(() => + { + foreach (var waybillNo in request.WayBillNoList) + OnExpressOrderChange(waybillNo, "QianShou", DateTime.Now, "手动签收"); + }, CancellationToken.None, + TaskCreationOptions.LongRunning, + taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + } + ///// ///// 手动收货 ///// @@ -1592,7 +1599,8 @@ namespace BBWYB.Server.Business Id = o.Id, OrderSn = o.OrderSn, OrderState = o.OrderState, - ShopId = o.ShopId + ShopId = o.ShopId, + IntoStoreType = o.IntoStoreType }); if (dbOrder == null) throw new Exception("未查询到采购单的订单信息"); @@ -2196,111 +2204,6 @@ namespace BBWYB.Server.Business } } - private void KuaiDi100PublishCore(string 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 查询采购单 - 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, - ShopId = o.ShopId, - OrderState = o.OrderState - }); - if (dbOrder == 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信息"); - - 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); - purchaseExpressOrder.ExpressState = convertState; - purchaseExpressOrder.ExpressChangedTime = lastData.ftime; - purchaseExpressOrder.ExpressContent = lastData.context; - updatePurchaseExpressOrder = fsql.Update().SetSource(purchaseExpressOrder); - - #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(orderPurchaseInfo, orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList), - CancellationToken.None, - TaskCreationOptions.LongRunning, - taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); - #endregion - - #region 通知C端状态 - Task.Factory.StartNew(() => SendPurchaseOrderStateToC(dbOrder.Id, dbOrder.OrderState.Value), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); - #endregion - - fsql.Transaction(() => - { - updatePurchaseExpressOrder?.ExecuteAffrows(); - updateOrderPurchase?.ExecuteAffrows(); - updateOrder?.ExecuteAffrows(); - }); - } - catch (Exception ex) - { - nLogManager.GetLogger("快递100").Error(ex, waybillNo); - } - } - /// /// 快递单信息变更 /// @@ -2337,7 +2240,8 @@ namespace BBWYB.Server.Business { Id = o.Id, ShopId = o.ShopId, - OrderState = o.OrderState + OrderState = o.OrderState, + IntoStoreType = o.IntoStoreType }); if (orderList.Count() == 0) throw new Exception("未查询到任何订单"); @@ -2418,12 +2322,15 @@ namespace BBWYB.Server.Business updateOrderPurchaseList.Add(update); #region 通知齐库打包落仓情况 - var currentOrderPurchaseRelationList = orderPurchaseRelationList.Where(opri => opri.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); + if (order.IntoStoreType == Enums.IntoStoreType.发回齐越) + { + var currentOrderPurchaseRelationList = orderPurchaseRelationList.Where(opri => opri.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); - Task.Factory.StartNew(() => qiKuManager.PublishQiKu(purchaseOrder, currentOrderPurchaseRelationList, currentPurchaseOrderSkuList, purchaseExpressOrderList), - CancellationToken.None, - TaskCreationOptions.LongRunning, - taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + Task.Factory.StartNew(() => qiKuManager.PublishQiKu(purchaseOrder, currentOrderPurchaseRelationList, currentPurchaseOrderSkuList, purchaseExpressOrderList), + CancellationToken.None, + TaskCreationOptions.LongRunning, + taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + } #endregion } diff --git a/BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs b/BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs index 46f0d8e..73ca20f 100644 --- a/BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs +++ b/BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs @@ -40,11 +40,6 @@ namespace BBWYB.Server.Model.Db [Column(StringLength = 100)] public string ExpressState { get; set; } - [Column(StringLength = 100)] - public string OrderId { get; set; } - - [Column(StringLength = 100)] - public string PurchaseOrderId { get; set; } [Column(StringLength = 100)] public long ShopId { get; set; } @@ -79,6 +74,12 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "bit")] public bool IsSubscribeKD100 { get; set; } = false; + [Column(IsIgnore = true)] + public string OrderId { get; set; } + + [Column(IsIgnore = true)] + public string PurchaseOrderId { get; set; } + } } diff --git a/BBWYB.Server.Model/Dto/Request/Order/CheckSkuRequest.cs b/BBWYB.Server.Model/Dto/Request/Order/CheckSkuRequest.cs new file mode 100644 index 0000000..31e00a6 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Order/CheckSkuRequest.cs @@ -0,0 +1,15 @@ +namespace BBWYB.Server.Model.Dto +{ + public class CheckSkuRequest + { + /// + /// 订单Id + /// + public string OrderId { get; set; } + + /// + /// 来源SKUID (JD) + /// + public string SourceSkuId { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/Order/QueryExpressOrderRequest.cs b/BBWYB.Server.Model/Dto/Request/Order/QueryExpressOrderRequest.cs index 936c733..3fd7542 100644 --- a/BBWYB.Server.Model/Dto/Request/Order/QueryExpressOrderRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Order/QueryExpressOrderRequest.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace BBWYB.Server.Model.Dto +namespace BBWYB.Server.Model.Dto { public class QueryExpressOrderRequest { diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseOrder/ManualSignRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/ManualSignRequest.cs index cf5c972..0a2ed94 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseOrder/ManualSignRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/ManualSignRequest.cs @@ -18,4 +18,9 @@ public string WayBillNo { get; set; } } + + public class BatchManualSignRequest + { + public IList WayBillNoList { get; set; } + } } diff --git a/BBWYB.Server.Model/Dto/Response/Order/PurchaseExpressOrderResponse.cs b/BBWYB.Server.Model/Dto/Response/Order/PurchaseExpressOrderResponse.cs index 58efff2..0a0a2a9 100644 --- a/BBWYB.Server.Model/Dto/Response/Order/PurchaseExpressOrderResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Order/PurchaseExpressOrderResponse.cs @@ -4,5 +4,9 @@ namespace BBWYB.Server.Model.Dto { public class PurchaseExpressOrderResponse: PurchaseExpressOrder { + /// + /// 归属SkuId,逗号间隔 (拳探SKU) + /// + public string BelongSkuIds { get; set; } } } diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index 55e68dc..d6b348d 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -83,8 +83,8 @@ /// 暂停 = 7 /// 已退款 = 8 /// Unknow = 100 - /// 打包中 = 140 - /// 待完结 = 150 + /// 待验收 = 140 + /// 待核算 = 150 /// public enum OrderState { @@ -101,9 +101,8 @@ 暂停 = 7, 已退款 = 8, Unknow = 100, - 打包中 = 140, - 待完结 = 150 - + 待验收 = 140, + 待核算 = 150 //待配置 = 101, }