diff --git a/BBWYB.Server.API/Controllers/ProductController.cs b/BBWYB.Server.API/Controllers/ProductController.cs index 7d34e71..3ed179e 100644 --- a/BBWYB.Server.API/Controllers/ProductController.cs +++ b/BBWYB.Server.API/Controllers/ProductController.cs @@ -33,5 +33,15 @@ namespace BBWYB.Server.API.Controllers { return productBusiness.GetProductSkuList(request); } + + /// + /// 修改商品价格 + /// + /// + [HttpPost] + public void EditProductPrice([FromBody] OP_EditProductPriceRequest request) + { + productBusiness.EditProductPrice(request); + } } } diff --git a/BBWYB.Server.API/appsettings.json b/BBWYB.Server.API/appsettings.json index 9be7fb6..9a15df4 100644 --- a/BBWYB.Server.API/appsettings.json +++ b/BBWYB.Server.API/appsettings.json @@ -15,9 +15,9 @@ "AllowedSwagger": true, "Secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0", "ApiVersionRequirements": [ - { - "Api": "/api/purchaseOrder/createpurchaseorder", - "MinimumVersion": 10017 - } + //{ + // "Api": "/api/purchaseOrder/createpurchaseorder", + // "MinimumVersion": 10017 + //} ] } diff --git a/BBWYB.Server.Business/Product/ProductBusiness.cs b/BBWYB.Server.Business/Product/ProductBusiness.cs index 39d0d55..0d644cf 100644 --- a/BBWYB.Server.Business/Product/ProductBusiness.cs +++ b/BBWYB.Server.Business/Product/ProductBusiness.cs @@ -24,5 +24,10 @@ namespace BBWYB.Server.Business { return opPlatformClientFactory.GetClient(request.Platform).GetProductSkuList(request); } + + public void EditProductPrice(OP_EditProductPriceRequest request) + { + opPlatformClientFactory.GetClient(request.Platform).EditProductPrice(request); + } } } diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index cb2edf7..a661ad6 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -14,6 +14,8 @@ using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SDKAdapter; +using SDKAdapter.OperationPlatform.Client; +using SDKAdapter.OperationPlatform.Models; using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Models; using System.Text; @@ -32,6 +34,7 @@ namespace BBWYB.Server.Business private Lazy qiKuManagerLazy; private Lazy restApiServiceLazy; private Lazy jdBusinessLazy; + private Lazy opPlatformClientFactoryLazy; private PP_PlatformClientFactory ppPlatformClientFactory => pplatformClientFactoryLazy.Value; private TaskSchedulerManager taskSchedulerManager => taskSchedulerManagerLazy.Value; @@ -41,6 +44,7 @@ namespace BBWYB.Server.Business private DingDingBusiness dingDingBusiness => dingDingBusinessLazy.Value; private QiKuManager qiKuManager => qiKuManagerLazy.Value; private RestApiService restApiService => restApiServiceLazy.Value; + private OP_PlatformClientFactory opPlatformClientFactory => opPlatformClientFactoryLazy.Value; private JDBusiness jdBusiness => jdBusinessLazy.Value; @@ -60,6 +64,8 @@ namespace BBWYB.Server.Business qiKuManagerLazy = new Lazy(() => serviceProvider.GetService()); restApiServiceLazy = new Lazy(() => serviceProvider.GetService()); jdBusinessLazy = new Lazy(() => serviceProvider.GetService()); + opPlatformClientFactoryLazy = new Lazy(() => serviceProvider.GetService()); + cantPurchaseOrderStateList = new List() { Enums.OrderState.已取消, @@ -2369,8 +2375,7 @@ namespace BBWYB.Server.Business /// private void OrderPriceModificationCallback(string purchaseOrderId, Enums.Platform callbackPlatform) { - string currentProgress = string.Empty; - + bool isEditOrderPrice = true; try { var orderPurchaseInfo = fsql.Select().Where(opi => opi.PurchaseOrderId == purchaseOrderId).ToOne(); @@ -2386,6 +2391,8 @@ namespace BBWYB.Server.Business if (dbOrderCost == null) throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的成本"); + var shop = fsqlManager.MDSfsql.Select().Where(s => s.ShopId == dbOrder.ShopId.ToString()).ToOne(); + var dbOrderCostDetails = fsql.Select().Where(ocd => ocd.OrderId == dbOrder.Id && ocd.IsEnabled == true).ToList(); if (dbOrderCostDetails.Count() == 0) throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的明细成本"); @@ -2395,23 +2402,34 @@ namespace BBWYB.Server.Business if (dbOrderPurchaseInfoList.Count() == 0) throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的采购单集合"); + isEditOrderPrice = dbOrderPurchaseInfoList.Count() == dbOrderPurchaseInfoList.Count(opi => opi.PurchasePlatform == Enums.Platform.阿里巴巴 && + opi.PurchaseMethod == Enums.PurchaseMethod.线上采购); + var dbPurchaseOrderIdList = dbOrderPurchaseInfoList.Select(x => x.PurchaseOrderId).ToList(); var dbOrderPurchaseRelationInfos = fsql.Select().Where(x => dbPurchaseOrderIdList.Contains(x.PurchaseOrderId)).ToList(); if (dbOrderPurchaseRelationInfos.Count() == 0) - throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细,手动关联的采购单不支持改价"); + throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细"); var dbOrderSkus = fsql.Select().Where(osku => osku.OrderId == orderPurchaseInfo.OrderId).ToList(); List> updateOrderCostDetailList = new List>(); IUpdate updateOrderCost = null; - var client = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.阿里巴巴); + IList> updateOrderSkuList = new List>(); + IUpdate updateOrder = null; + + IList op_EditPriceSkuRequests = new List(); + + var ppclient = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.阿里巴巴); var totalPurchaseProductAmount = 0M; var totalPurchaseFreight = 0M; foreach (var opi in dbOrderPurchaseInfoList) { - var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() + if (opi.PurchasePlatform != Enums.Platform.阿里巴巴) + continue; + + var purchaseOrderSimpleInfo = ppclient.QueryOrderDetail(new PP_QueryOrderDetailRequest() { AppKey = purchaseAccount.AppKey, AppSecret = purchaseAccount.AppSecret, @@ -2429,6 +2447,7 @@ namespace BBWYB.Server.Business foreach (var belongSkuGroup in belongSkuGroups) { var belongSkuId = belongSkuGroup.Key; + var currentOrderSkuCargoParamList = belongSkuGroup.ToList(); //找当前skuId的采购skuId var currentOrderSkuProductAmount = 0M; //采购成本 var currentSkuTotalPurchaseQuantity = currentOrderSkuCargoParamList.Sum(x => x.Quantity); //当前skuId的采购数量总和 @@ -2444,12 +2463,26 @@ namespace BBWYB.Server.Business currentOrderSkuProductAmount += currentPurchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity.Value / currentPurchaseSkuTotalQuantity); } - var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId); + #region 订单sku平价 var orderSku = dbOrderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId); - //dbOrderSkuDetail.SkuAmount = currentOrderSkuProductAmount; - //dbOrderSkuDetail.PurchaseFreight = currentOrderSkuFreightAmount; - //dbOrderSkuDetail.TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount; + if (isEditOrderPrice) + { + orderSku.Price = currentOrderSkuProductAmount / orderSku.ItemTotal; + orderSku.BuyerPayFreight = currentPurchaseFreight; + op_EditPriceSkuRequests.Add(new OP_EditPriceSkuRequest() + { + Freight = currentPurchaseFreight ?? 0M, + InPackAmountPrice = orderSku.InPackAmount ?? 0M, + OrderSkuId = orderSku.Id.ToString(), + Price = orderSku.Price ?? 0M, + SkuId = orderSku.SkuId + }); + updateOrderSkuList.Add(fsql.Update(orderSku.Id).Set(osku => osku.Price, orderSku.Price) + .Set(osku => osku.BuyerPayFreight, orderSku.BuyerPayFreight)); + } + #endregion + var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId && ocd.PurchaseOrderId == opi.PurchaseOrderId); dbOrderSkuDetail.CalculationOrderCostDetailCostAndProfit(orderSku.Price.Value * orderSku.ItemTotal.Value, orderSku.BuyerPayFreight ?? 0M, orderSku.InPackAmount ?? 0M, @@ -2459,31 +2492,61 @@ namespace BBWYB.Server.Business dbOrderSkuDetail.DeliveryExpressFreight ?? 0M); updateOrderCostDetailList.Add(fsql.Update().SetSource(dbOrderSkuDetail)); } + } + if (isEditOrderPrice) + { + dbOrder.OrderTotalPrice = totalPurchaseProductAmount + totalPurchaseFreight; + dbOrder.OrderSellerPrice = totalPurchaseProductAmount; + dbOrder.FreightPrice = totalPurchaseFreight; + updateOrder = fsql.Update(dbOrder.Id).Set(o => o.OrderTotalPrice, dbOrder.OrderTotalPrice) + .Set(o => o.OrderSellerPrice, dbOrder.OrderSellerPrice) + .Set(o => o.FreightPrice, dbOrder.FreightPrice); + } - //dbOrderCost.TotalCost = dbOrderCost.PurchaseAmount = totalPurchaseAmount; - //dbOrderCost.Profit = dbOrder.OrderTotalPrice - - // dbOrderCost.PurchaseAmount - - // dbOrderCost.DeliveryExpressFreight; + dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice ?? 0M, + totalPurchaseProductAmount, + totalPurchaseFreight, + dbOrderCostDetails.Sum(ocd => ocd.OutPackAmount ?? 0M), + dbOrderCostDetails.Sum(ocd => ocd.DeliveryExpressFreight ?? 0M)); + updateOrderCost = fsql.Update().SetSource(dbOrderCost); + fsql.Transaction(() => + { + foreach (var update in updateOrderCostDetailList) + update.ExecuteAffrows(); + updateOrderCost?.ExecuteAffrows(); + foreach (var update in updateOrderSkuList) + update.ExecuteAffrows(); + updateOrder?.ExecuteAffrows(); + }); - dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice ?? 0M, - totalPurchaseProductAmount, - totalPurchaseFreight, - dbOrderCostDetails.Sum(ocd => ocd.OutPackAmount ?? 0M), - dbOrderCostDetails.Sum(ocd => ocd.DeliveryExpressFreight ?? 0M)); - updateOrderCost = fsql.Update().SetSource(dbOrderCost); - fsql.Transaction(() => + if (isEditOrderPrice) + { + #region 通知拳探改价 + var opclient = opPlatformClientFactory.GetClient(AdapterEnums.PlatformType.拳探); + opclient.EditPrice(new OP_EditPriceRequest() { - foreach (var update in updateOrderCostDetailList) - update.ExecuteAffrows(); - updateOrderCost?.ExecuteAffrows(); + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + OrderId = dbOrder.Id, + EditItems = op_EditPriceSkuRequests }); + #endregion + + #region 通知C端改价 + restApiService.SendRequest("https://bbwy.qiyue666.com", + "/Api/PurchaseOrder/QuanTanEditPriceCallback", + new { orderId = dbOrder.Id }, + null, + HttpMethod.Post); + #endregion } } catch (Exception ex) { - nLogManager.Default().Error(ex, $"OrderPriceModificationCallback 回调平台{callbackPlatform},采购单号{purchaseOrderId},执行进度[{currentProgress}]"); + nLogManager.Default().Error(ex, $"OrderPriceModificationCallback 回调平台{callbackPlatform},采购单号{purchaseOrderId}"); } } diff --git a/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ProductClient.cs b/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ProductClient.cs index d38770c..01770d1 100644 --- a/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ProductClient.cs +++ b/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ProductClient.cs @@ -19,5 +19,10 @@ namespace QuanTan.SDK.Client.Supplier { return SendRequest("api/platform/supply/product/list", request, appId, appSecret); } + + public QuanTanResponse EditProductPrice(QuanTan_Supplier_EditProductPriceRequest request, string appId, string appSecret) + { + return SendRequest("api/platform/supply/product/price/change", request, appId, appSecret); + } } } diff --git a/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_EditProductPriceRequest.cs b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_EditProductPriceRequest.cs new file mode 100644 index 0000000..abee5c5 --- /dev/null +++ b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_EditProductPriceRequest.cs @@ -0,0 +1,18 @@ +namespace QuanTan.SDK.Models.Supplier +{ + public class QuanTan_Supplier_EditProductPriceRequest + { + public string productId { get; set; } + + public string editAdmin { get; set; } + + public IList skuList { get; set; } + } + + public class QuanTan_Supplier_EditProductSkuPriceRequest + { + public string skuId { get; set; } + + public decimal price { get; set; } + } +} diff --git a/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs b/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs index ffbc8f7..066e416 100644 --- a/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs @@ -51,5 +51,10 @@ namespace SDKAdapter.OperationPlatform.Client { throw new NotImplementedException(); } + + public virtual void EditProductPrice(OP_EditProductPriceRequest request) + { + throw new NotImplementedException(); + } } } diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index 590be55..6e1cf4a 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -224,5 +224,21 @@ namespace SDKAdapter.OperationPlatform.Client if (qtResponse.Status != 200) throw new Exception(qtResponse.Message); } + + public override void EditProductPrice(OP_EditProductPriceRequest request) + { + var qtResponse = supplier_ProductClient.EditProductPrice(new QuanTan_Supplier_EditProductPriceRequest() + { + productId = request.Spu, + editAdmin = request.AppToken, + skuList = request.EditSkuList.Select(x => new QuanTan_Supplier_EditProductSkuPriceRequest() + { + price = x.Price, + skuId = x.Sku + }).ToList() + }, request.AppKey, request.AppSecret); + if (qtResponse.Status != 200) + throw new Exception(qtResponse.Message); + } } } diff --git a/SDKAdapter/OperationPlatform/Models/Request/Product/OP_EditProductPriceRequest.cs b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_EditProductPriceRequest.cs new file mode 100644 index 0000000..2c9c420 --- /dev/null +++ b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_EditProductPriceRequest.cs @@ -0,0 +1,16 @@ +namespace SDKAdapter.OperationPlatform.Models +{ + public class OP_EditProductPriceRequest : BasePlatformRequest + { + public string Spu { get; set; } + + public IList EditSkuList { get; set; } + } + + public class OP_EditProductSkuPriceRequest + { + public string Sku { get; set; } + + public decimal Price { get; set; } + } +}