diff --git a/BBWYB.Server.Business/KuaiDi100ExpressCompany.txt b/BBWYB.Server.Business/KuaiDi100ExpressCompany.txt index 912eb38..12201a5 100644 --- a/BBWYB.Server.Business/KuaiDi100ExpressCompany.txt +++ b/BBWYB.Server.Business/KuaiDi100ExpressCompany.txt @@ -1398,3 +1398,4 @@ yikonn,yikonn,国际运输商 振捷国际货运,zjgj56,国际运输商 ZTE中兴物流,zteexpress,国际运输商 中途国际速递,ztsdu,国内运输商 +专线物流,zhuanxianwuliu,国内运输商 \ No newline at end of file diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 92c009c..4092697 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -146,13 +146,12 @@ namespace BBWYB.Server.Business if (orderList.Count() > 0) { - #region 处理Sku - var orderSkuList = fsql.Select().Where(osku => osku.Price != 0 && - orderIdList.Contains(osku.OrderId)).ToList(); - foreach (var order in orderList) - { - order.ItemList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList(); - } + #region 查询关联信息 + var orderPurchaseRelationInfoList = fsql.Select().Where(ori => orderIdList.Contains(ori.OrderId)).ToList(); + #endregion + + #region 查询快递单信息 + var purchaseExpressOrderList = fsql.Select().Where(peo => orderIdList.Contains(peo.OrderId)).ToList(); #endregion #region 处理订单成本明细 @@ -164,9 +163,6 @@ 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 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(); @@ -176,7 +172,55 @@ namespace BBWYB.Server.Business orderPurchaseInfo.PurchaseExpressOrderList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList(); } } + #endregion + #region 处理SKU + var orderSkuList = fsql.Select().Where(osku => osku.Price != 0 && + orderIdList.Contains(osku.OrderId)).ToList(); + foreach (var order in orderList) + { + order.ItemList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList(); + } + #endregion + + #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.阿里巴巴) + { + 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 } return new OrderListResponse() @@ -276,7 +320,7 @@ namespace BBWYB.Server.Business fsql.Update(request.OrderId).Set(o => o.OrderState, Enums.OrderState.已取消).ExecuteAffrows(); - var sql = $"update purchaseorderv2 set OrderState=7 where Id='{request.OrderId}'"; + var sql = $"update purchaseorderv2 set OrderState=6 where Id='{request.OrderId}'"; //取消C端采购单 restApiService.SendRequest("https://bbwy.qiyue666.com", "/Api/Sql/ExecuteNonQuery", diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index c5572a3..ebfc3f2 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -766,6 +766,8 @@ namespace BBWYB.Server.Business } else { + if (dbPurchaserOrder.OrderId != request.OrderId) + throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId}不属于订单{request.OrderId}"); dbPurchaserOrder.PurchaseAccountId = purchaseOrder.PurchaseAccountId; dbPurchaserOrder.PurchaseAccountName = purchaseOrder.PurchaseAccountName; //dbPurchaserOrder.BelongSkuIds = string.Join(",", purchaseOrder.AssocationOrderCostDetailList.Select(x => x.SkuId)); @@ -961,7 +963,7 @@ namespace BBWYB.Server.Business OrderId = orderSku.OrderId, SkuAmount = orderPurchaseSkuOfCurrentSchemeList.Sum(psku => psku.ProductAmount), PurchaseQuantity = orderSku.ItemTotal.Value, - PurchaseFreight = purchaseOrderSimpleInfo.FreightAmount * (orderPurchaseSkuOfCurrentSchemeList.Sum(x => x.Quantity) / totalPurchaseCount) + PurchaseFreight = purchaseOrderSimpleInfo.FreightAmount * (1.0M * orderPurchaseSkuOfCurrentSchemeList.Sum(x => x.Quantity) / totalPurchaseCount) }; assocationOrderCostDetail.PurchasePrice = assocationOrderCostDetail.SkuAmount / assocationOrderCostDetail.PurchaseFreight; assocationOrderCostDetailList.Add(assocationOrderCostDetail); @@ -992,25 +994,38 @@ namespace BBWYB.Server.Business /// public void SetHistoryPurchaseOrder(SetHistoryPurchaseOrderRequest request) { - var dbOrderCostDetailList = fsql.Select().Where(ocd => ocd.OrderId == request.OrderId).ToList(); + var dbOrderCostDetailList = fsql.Select().Where(ocd => ocd.OrderId == request.OrderId && + ocd.PurchaseOrderId != request.PurchaseOrderId).ToList(); 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 + //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; + dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value, purchaseProductAmount, purchaseFreight, outPackAmount, 0M); + + + var orderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList(); + var historyPurchaseOrder = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); + if (historyPurchaseOrder == null) + throw new BusinessException("未查询到采购单"); + orderPurchaseInfoList.Remove(historyPurchaseOrder); + dbOrder.CalculationOrderState(fsql, orderPurchaseInfoList: orderPurchaseInfoList); fsql.Transaction(() => { - fsql.Update() + fsql.Update(historyPurchaseOrder.Id) .Set(opi => opi.IsEnabled, false) .Set(opi => opi.OrderState, Enums.PurchaseOrderState.已取消) .Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId) @@ -1026,6 +1041,7 @@ namespace BBWYB.Server.Business fsql.Delete().Where(peo => peo.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); fsql.Update().SetSource(dbOrderCost).ExecuteAffrows(); + fsql.Update(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows(); }); } @@ -1035,6 +1051,7 @@ namespace BBWYB.Server.Business /// public void EditPurchaseExpressOrder(EditPurchaseExpressOrderRequest request) { + nLogManager.Default().Info($"EditPurchaseExpressOrder {JsonConvert.SerializeObject(request)}"); var dbOrder = fsql.Select(request.OrderId).ToOne(o => new { o.Id, o.ShopId, o.OrderSn }); if (dbOrder == null) throw new BusinessException($"订单号{request.OrderId}不存在"); @@ -1103,6 +1120,10 @@ namespace BBWYB.Server.Business /// public void ManualDelivery(ManualDeliveryRequest request) { + nLogManager.Default().Info($"ManualDelivery {JsonConvert.SerializeObject(request)}"); + if (request.ExpressId == "zhuanxianwuliu" && string.IsNullOrEmpty(request.WaybillNo)) + request.WaybillNo = $"wdh{idGenerator.NewLong()}"; + #region 准备数据库更新对象 List insertPurchaseExpressOrderList = new List(); IList> updateOrderPurchaseSkuList = new List>(); @@ -1173,7 +1194,7 @@ namespace BBWYB.Server.Business #region 订阅快递100 bool isSubscribeKD100 = false; - if (!isExists) + if (request.ExpressId != "zhuanxianwuliu" && !isExists) { #region 订阅快递100 try @@ -1201,7 +1222,6 @@ namespace BBWYB.Server.Business } #endregion } - #endregion #region 创建快递单 @@ -1552,21 +1572,24 @@ namespace BBWYB.Server.Business } catch (Exception ex) { - nLogManager.Default().Error(ex, $"DeliveryCallback 回调平台1688,订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo}"); - - #region 订阅失败发送钉钉通知 - var dingdingMsg = new StringBuilder(); - dingdingMsg.AppendLine($"错误:{ex.Message}"); - dingdingMsg.AppendLine($"采购订单号:{purchaseOrderId}"); - dingdingMsg.AppendLine($"拳探订单号:{orderId}"); - dingdingMsg.AppendLine($"拳探订单Sn:{dbOrder.OrderSn}"); - dingdingMsg.AppendLine($"源物流公司:{logisticsInfo.ExpressName}"); - dingdingMsg.AppendLine($"目标物流公司:{kuaidi100Company?.TargetName} {kuaidi100Company?.TargetCode}"); - dingdingMsg.AppendLine($"快递单号:{logisticsInfo.WayBillNo}"); - dingdingMsg.AppendLine("触发环节:1688发货回调"); - dingdingMsg.Append($"店铺名:{shop.ShopName}"); - Task.Factory.StartNew(() => SendDingDingOnKD100SubscribeFail(dingdingMsg.ToString()), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); - #endregion + if (!ex.Message.Contains("重复订阅")) + { + nLogManager.Default().Error(ex, $"DeliveryCallback 回调平台1688,订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo}"); + + #region 订阅失败发送钉钉通知 + var dingdingMsg = new StringBuilder(); + dingdingMsg.AppendLine($"错误:{ex.Message}"); + dingdingMsg.AppendLine($"采购订单号:{purchaseOrderId}"); + dingdingMsg.AppendLine($"拳探订单号:{orderId}"); + dingdingMsg.AppendLine($"拳探订单Sn:{dbOrder.OrderSn}"); + dingdingMsg.AppendLine($"源物流公司:{logisticsInfo.ExpressName}"); + dingdingMsg.AppendLine($"目标物流公司:{kuaidi100Company?.TargetName} {kuaidi100Company?.TargetCode}"); + dingdingMsg.AppendLine($"快递单号:{logisticsInfo.WayBillNo}"); + dingdingMsg.AppendLine("触发环节:1688发货回调"); + dingdingMsg.Append($"店铺名:{shop.ShopName}"); + Task.Factory.StartNew(() => SendDingDingOnKD100SubscribeFail(dingdingMsg.ToString()), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + #endregion + } } #endregion diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs index d12e184..9fa4e91 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs @@ -100,14 +100,13 @@ namespace BBWYB.Server.Business //errorMsg = $"商品{purchaseSchemeProduct.PurchaseProductId}缺少sku信息"; return null; } - var list = skuJArray.Select(j => new PurchaseSkuItemBasicInfoResponse() { PurchaseProductId = request.PurchaseProductId, Price = j.Value("price"), PurchaseSkuId = j.Value("sku_id"), PurchaseSkuSpecId = j.Value("spec_id"), - Title = j.Value("properties_name"), + Title = Regex.Replace(j.Value("properties_name"), @"\d:\d:.{2,5}:", string.Empty), Logo = GetOneBoundSkuLogo(j, (JArray)jobject["item"]["prop_imgs"]["prop_img"]) }).ToList(); @@ -235,7 +234,7 @@ namespace BBWYB.Server.Business { PurchaseProductId = request.PurchaseProductId, Price = skuPrice == 0M ? firstPrice : skuPrice, - Title = name, + Title = name.Replace(">", string.Empty), PurchaseSkuId = value.Value("skuId"), PurchaseSkuSpecId = value.Value("specId"), Logo = colorsProperty.FirstOrDefault(c => c.name == matchName)?.imageUrl ?? "pack://application:,,,/Resources/Images/defaultItem.png" diff --git a/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs index bd3325d..daafc7e 100644 --- a/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs @@ -4,10 +4,19 @@ namespace BBWYB.Server.Model.Dto { public class OrderSkuResponse : OrderSku { - // /// - // /// 采购方案 - // /// - //public long SchemeId { get;set; } + // /// + // /// 采购方案 + // /// + //public long SchemeId { get;set; } + public OrderSkuResponse() + { + PurchaseExpressOrderList = new List(); + } + + /// + /// 快递单列表 + /// + public IList PurchaseExpressOrderList { get; set; } } } diff --git a/SDKAdapter/ExpressCompanyNameConverter.cs b/SDKAdapter/ExpressCompanyNameConverter.cs index ae49470..262bb46 100644 --- a/SDKAdapter/ExpressCompanyNameConverter.cs +++ b/SDKAdapter/ExpressCompanyNameConverter.cs @@ -122,7 +122,9 @@ namespace SDKAdapter new LogisticsCompanyRelationship(){SourceName="优速",TargetName="优速物流",TargetCode="youshuwuliu"}, new LogisticsCompanyRelationship(){SourceName="优速物流",TargetName="优速物流",TargetCode="youshuwuliu"}, new LogisticsCompanyRelationship(){SourceName="加运美速递",TargetName="加运美",TargetCode="jiayunmeiwuliu"}, - new LogisticsCompanyRelationship(){SourceName="加运美",TargetName="加运美",TargetCode="jiayunmeiwuliu"} + new LogisticsCompanyRelationship(){SourceName="加运美",TargetName="加运美",TargetCode="jiayunmeiwuliu"}, + new LogisticsCompanyRelationship(){SourceName="信丰物流",TargetName="信丰物流",TargetCode="xinfengwuliu"}, + new LogisticsCompanyRelationship(){SourceName="京东物流",TargetName="京东物流",TargetCode="jd"} }); }