diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 4af2565..109e792 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -398,51 +398,6 @@ namespace BBWYB.Server.Business #endregion } - ////采购单总件数,由于1688运费只存在订单层,sku层没有运费,所以需要以订单总件数为基础等比计算采购运费 - //var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Sum(x => x.Quantity); - //var belongSkuGroups = cargoParamGroup.CargoParamList.GroupBy(p => p.BelongSkuId); - //var belongSkuIdList = belongSkuGroups.Select(bsg => bsg.Key).ToList(); - //foreach (var belongSkuGroup in belongSkuGroups) - //{ - // var belongSkuId = belongSkuGroup.Key; - // //var currentOrderSkuCargoParamList = cargoParamGroup.CargoParamList.Where(p => p.BelongSkuId == belongSkuId); //找当前skuId的采购skuId - // var currentOrderSkuCargoParamList = belongSkuGroup.ToList(); - // var currentSkuAmount = 0M; //采购成本 - // var currentSkuTotalPurchaseQuantity = currentOrderSkuCargoParamList.Sum(x => x.Quantity); //当前skuId的采购数量总和 - // var currentPurchaseFreight = purchaseOrderSimpleInfo.FreightAmount * - // (1.0M * currentSkuTotalPurchaseQuantity / purchaseSkuTotalQuantity); //采购运费 - - // foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList) - // { - // var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) - // .Sum(p => p.ProductAmount); - // var currentPurchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) - // .Sum(p => p.Quantity); - - // currentSkuAmount += currentPurchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity / currentPurchaseSkuTotalQuantity); - // //currentPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount * (1.0M * currentOrderSkuCargo.Quantity / purchaseSkuTotalQuantity); - // } - - // #region 成本明细 - // var orderSku = orderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId); - // var orderCostDetail = new OrderCostDetail() - // { - // Id = idGenerator.NewLong(), - // CreateTime = DateTime.Now, - // DeductionQuantity = orderSku.ItemTotal.Value, - // OrderId = request.OrderId, - // ProductId = orderSku.ProductId, - // PurchaseOrderId = purchaseOrderSimpleInfo.OrderId, - // SkuId = belongSkuId, - // IsEnabled = true - // }; - // orderCostDetail.CalculationOrderCostDetailCostAndProfit(currentSkuAmount, - // currentPurchaseFreight, - // 0M, - // 0M); - // insertOrderCostDetails.Add(orderCostDetail); - // #endregion - //} #region 等比计算采购成本 var proportionalCalculationResultList = ProportionalCalculationCost(cargoParamGroup.CargoParamList, purchaseOrderSimpleInfo); foreach (var proportionalCalculationResult in proportionalCalculationResultList) @@ -2646,56 +2601,43 @@ namespace BBWYB.Server.Business { var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList(); var currentPurchaseOrderList = purchaseOrderList.Where(po => po.OrderId == order.Id).ToList(); - foreach (var purchaseOrder in currentPurchaseOrderList) + + #region 计算采购单状态 + foreach (var po in currentPurchaseOrderList) { - var currentPurchaseOrderSkuList = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); + var currentPoSkuList = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == po.PurchaseOrderId).ToList(); - var currentPurchaseExpressOrderList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); - var temp = currentPurchaseExpressOrderList.FirstOrDefault(p => p.WaybillNo == wayBillNo); - if (temp != null) - temp.ExpressState = state; + var currentPeoList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == po.PurchaseOrderId).ToList(); + var peo = currentPeoList.FirstOrDefault(p => p.WaybillNo == wayBillNo); + if (peo != null) + peo.ExpressState = state; - var oldPurchaseOrderState = purchaseOrder.OrderState; - purchaseOrder.CalculationOrderState(order.IntoStoreType.Value, fsql, currentPurchaseOrderSkuList, currentPurchaseExpressOrderList); - if (purchaseOrder.OrderState != oldPurchaseOrderState) + var oldPurchaseOrderState = po.OrderState; + po.CalculationOrderState(order.IntoStoreType.Value, fsql, currentPoSkuList, currentPeoList); + if (po.OrderState != oldPurchaseOrderState) { - var update = fsql.Update(purchaseOrder.Id).Set(po => po.OrderState, purchaseOrder.OrderState); + var update = fsql.Update(po.Id).Set(po => po.OrderState, po.OrderState); updateOrderPurchaseList.Add(update); - - #region 通知齐库打包落仓情况 - if (order.IntoStoreType == Enums.IntoStoreType.发回齐越 && state == "QianShou") - { - var currentOrderPurchaseRelationList = orderPurchaseRelationList.Where(opri => opri.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); - - Task.Factory.StartNew(() => qiKuManager.PublishQiKuReceiveInfo(purchaseOrder, currentOrderPurchaseRelationList, currentPurchaseOrderSkuList, purchaseExpressOrderList), - CancellationToken.None, - TaskCreationOptions.LongRunning, - taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); - } - #endregion } - } - var oldOrderState = order.OrderState; - order.CalculationOrderState(fsql, currentOrderSkuList, currentPurchaseOrderList); + #endregion - if (order.IntoStoreType == Enums.IntoStoreType.厂商代发入仓 && - state == "QianShou" && - order.OrderState == Enums.OrderState.待验收 && - inStoreOrderCheckTaskList != null && - !inStoreOrderCheckTaskList.Any(x => x.OrderId == order.Id)) + #region 推送齐库到货情况 + if (order.IntoStoreType == Enums.IntoStoreType.发回齐越 && state == "QianShou") { - insertInStoreOrderCheckTaskList.Add(new InStoreOrderCheckTask() - { - Id = idGenerator.NewLong(), - CreateTime = DateTime.Now, - IsChecked = false, - OrderId = order.Id, - ShopId = order.ShopId, - OrderSn = order.OrderSn - }); + Task.Factory.StartNew(() => qiKuManager.PublishQikuReceiveInfo(order.Id, + wayBillNo, + currentPurchaseOrderList, + currentOrderSkuList, + purchaseExpressOrderList, + orderPurchaseRelationList, + orderPurchaseSkuList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); } + #endregion + #region 计算订单状态 + var oldOrderState = order.OrderState; + order.CalculationOrderState(fsql, currentOrderSkuList, currentPurchaseOrderList); if (order.OrderState != oldOrderState) { var update = fsql.Update(order.Id).Set(o => o.OrderState, order.OrderState); @@ -2728,6 +2670,26 @@ namespace BBWYB.Server.Business } #endregion } + #endregion + + #region 创建入仓单检查任务 + if (order.IntoStoreType == Enums.IntoStoreType.厂商代发入仓 && + state == "QianShou" && + order.OrderState == Enums.OrderState.待验收 && + inStoreOrderCheckTaskList != null && + !inStoreOrderCheckTaskList.Any(x => x.OrderId == order.Id)) + { + insertInStoreOrderCheckTaskList.Add(new InStoreOrderCheckTask() + { + Id = idGenerator.NewLong(), + CreateTime = DateTime.Now, + IsChecked = false, + OrderId = order.Id, + ShopId = order.ShopId, + OrderSn = order.OrderSn + }); + } + #endregion } #endregion diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs index edf34e2..1011e70 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs @@ -31,8 +31,11 @@ namespace BBWYB.Server.Business private List locationIdList; private List priceIdList; + private IList invalidPurchaserNameList; + public PurchaseProductAPIService(RestApiService restApiService, IMemoryCache memoryCache) { + invalidPurchaserNameList = new List() { "超级工厂", "实力工厂", "实力供应商" }; this.memoryCache = memoryCache; this.restApiService = restApiService; _1688ProductDetailRequestHeader = new Dictionary() @@ -129,15 +132,19 @@ namespace BBWYB.Server.Business if (string.IsNullOrEmpty(purchaserName)) purchaserName = jobject["item"]["seller_info"].Value("shop_name"); var purchaserLocation = jobject["item"].Value("location"); + var memberId = jobject["item"]["seller_info"].Value("sid"); + var purchaserId2 = jobject["item"]["seller_info"].Value("shop_name"); return new PurchaseSkuBasicInfoResponse() { - Purchaser = new Model.Db.Purchaser() + Purchaser = new Purchaser() { Id = purchaserId, Location = purchaserLocation, Name = purchaserName, - Platform = request.Platform + Platform = request.Platform, + Id2 = purchaserId2, + MemberId = memberId }, ItemList = list, PurchasePlatform = request.Platform, @@ -208,6 +215,14 @@ namespace BBWYB.Server.Business var jsonStr = match.Groups[2].Value; var jobject = JObject.Parse(jsonStr); + #region 验证purchaserName + var purchaserName = jobject["globalData"]["tempModel"]["companyName"].ToString(); + if (invalidPurchaserNameList.Contains(purchaserName)) + { + //取 + } + #endregion + var location = ""; for (var i = 0; i < locationIdList.Count(); i++) { @@ -217,11 +232,12 @@ namespace BBWYB.Server.Business break; } } + var purchaser = new Purchaser() { Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(), Id2 = jobject["globalData"]["tempModel"]["sellerLoginId"]?.ToString(), - Name = jobject["globalData"]["tempModel"]["companyName"].ToString(), + Name = purchaserName, MemberId = jobject["globalData"]?["tempModel"]?["sellerMemberId"]?.ToString(), Location = location, Platform = Enums.Platform.阿里巴巴 diff --git a/BBWYB.Server.Business/QiKuManager.cs b/BBWYB.Server.Business/QiKuManager.cs index 3788bdf..3382f4c 100644 --- a/BBWYB.Server.Business/QiKuManager.cs +++ b/BBWYB.Server.Business/QiKuManager.cs @@ -35,104 +35,91 @@ namespace BBWYB.Server.Business this.venderBusinessLazy = new Lazy(() => serviceProvider.GetService()); } - /// - /// 通知齐库到货情况 - /// 支持关联的采购平台以来源SKU为单位通知齐库 - /// 不支持关联的采购平台以采购单为单位通知齐库 - /// - /// - /// - /// - /// - public void PublishQiKuReceiveInfo(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) + public void PublishQikuReceiveInfo(string orderId, + string wayBillNo, + IList currentPurchaseOrderList, + IList currentOrderSkuList, + IList purchaseExpressOrderList_all, + IList orderPurchaseRelationList_all, + IList orderPurchaseSkuList_all) { try { - var relationGroups = orderPurchaseRelationInfoList.GroupBy(opri => opri.SourceSkuId); - foreach (var relationGroup in relationGroups) + //查询跟此快递单有关的当前订单的采购单 + var relationByWaybillNoPurchaseOrderIds = purchaseExpressOrderList_all.Where(peo => peo.OrderId == orderId && peo.WaybillNo == wayBillNo) + .Select(peo => peo.PurchaseOrderId) + .ToList(); + var relationByWaybillNoPurchaseOrderList = currentPurchaseOrderList.Where(po => relationByWaybillNoPurchaseOrderIds.Contains(po.PurchaseOrderId)).ToList(); + + //查询跟采购单有关联的订单sku + var relationOrderSkuList = currentOrderSkuList.Where(osku => relationByWaybillNoPurchaseOrderList.Any(po => po.BelongSkuIds.Contains(osku.SkuId))).ToList(); + foreach (var osku in relationOrderSkuList) { - bool isSignAll = true; - foreach (var relation in relationGroup) + //查询跟此订单sku有关的采购单 + var relationByOrderSkuPurchaseOrderList = currentPurchaseOrderList.Where(po => po.BelongSkuIds.Contains(osku.SkuId)).ToList(); + var isSignAll = true; + foreach (var po in relationByOrderSkuPurchaseOrderList) { - var purchaseSku = orderPurchaseSkuInfoList.FirstOrDefault(x => x.PurchaseSkuId == relation.PurchaseSkuId); - if (purchaseSku == null || string.IsNullOrEmpty(purchaseSku.WaybillNo)) + if (po.PurchasePlatform == Enums.Platform.阿里巴巴) { - isSignAll = false; - continue; + //查询跟此sku有关的关联信息 + var oriRelationList = orderPurchaseRelationList_all.Where(ori => ori.OrderId == osku.OrderId && + ori.PurchaseOrderId == po.PurchaseOrderId && + ori.BelongSkuId == osku.SkuId).ToList(); + if (oriRelationList.Count() == 0) + { + isSignAll = false; + break; + } + foreach (var relation in oriRelationList) + { + var pos = orderPurchaseSkuList_all.FirstOrDefault(pos => pos.OrderId == relation.OrderId && + pos.PurchaseOrderId == relation.PurchaseOrderId && + pos.PurchaseSkuId == relation.PurchaseSkuId); + if (pos == null || string.IsNullOrEmpty(pos.WaybillNo)) + { + isSignAll = false; + break; + } + var peo = purchaseExpressOrderList_all.FirstOrDefault(x => x.WaybillNo == pos.WaybillNo); + if (peo == null || peo.ExpressState != "QianShou") + { + isSignAll = false; + break; + } + } + if (!isSignAll) + break; } - var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(x => x.WaybillNo == purchaseSku.WaybillNo); - if (purchaseExpressOrder == null || purchaseExpressOrder.ExpressState != "QianShou") + else { - isSignAll = false; - continue; + var peoList = purchaseExpressOrderList_all.Where(x => x.OrderId == osku.OrderId && x.PurchaseOrderId == po.PurchaseOrderId); + if (peoList.Count() == 0 || peoList.Any(peo => peo.ExpressState != "QianShou")) + { + isSignAll = false; + break; + } } } - - 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) - { - - } - } - - 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); + //推送齐库 + + var publishResult = restApiService.SendRequest("http://qiku.qiyue666.com", + "/Api/PackPurchaseTask/UpdateAvailabilityState", + new + { + availability = isSignAll ? 0 : 1, + orderId = osku.OrderId, + skuId = osku.BelongSkuId + }, null, HttpMethod.Post); + if (publishResult.StatusCode != System.Net.HttpStatusCode.OK) + throw new Exception(publishResult.Content); } } catch { } + }