From 600b36ffb3d21675f7b39afd7ea4235fd411f943 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 19 Apr 2023 02:27:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=861688=E5=8F=91=E8=B4=A7?= =?UTF-8?q?=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseOrderController.cs | 13 + BBWYB.Server.API/Program.cs | 2 + BBWYB.Server.Business/Order/OrderBusiness.cs | 37 +- .../PurchaseOrder/PurchaseOrderBusiness.cs | 324 +++++++++++++++++- .../Vender/VenderBusiness.cs | 87 ++--- .../Db/Order/OrderPurchaseInfo.cs | 1 + .../Db/PurchaseAccount/PurchaseAccount.cs | 64 ---- .../Dto/Request/Order/OutStockRequest.cs | 13 + .../PurchaseOrder/CreateOrderRequest.cs | 2 + .../Response/Logistics/LogisticsResponse.cs | 18 + .../QuanTan_Supplier_ExpressClient.cs | 40 +++ .../Supplier/QuanTan_Supplier_OrderClient.cs | 5 + .../Order/QuanTan_Supplier_OutStockRequest.cs | 9 + ...QuanTan_Supplier_ExpressCompanyResponse.cs | 9 + QuanTan.SDK/QuanTan.SDK.csproj | 4 + SDKAdapter/ExpressCompanyNameConverter.cs | 144 ++++++++ .../Client/Base/OP_PlatformClient.cs | 10 + .../Client/Impl/OP_QuanTanClient.cs | 23 ++ .../OP_QueryExpressCompanyRequest.cs | 6 + .../Request/Order/OP_OutStockRequest.cs | 13 + .../OP_QueryExpressCompanyResponse.cs | 9 + .../Client/Base/PP_PlatformClient.cs | 11 + .../Client/Impl/PP_1688Client.cs | 40 ++- .../Order/PP_QueryOrderLogisticsRequest.cs | 6 + .../Order/PP_QueryOrderLogisticsResponse.cs | 11 + 25 files changed, 771 insertions(+), 130 deletions(-) delete mode 100644 BBWYB.Server.Model/Db/PurchaseAccount/PurchaseAccount.cs create mode 100644 BBWYB.Server.Model/Dto/Request/Order/OutStockRequest.cs create mode 100644 BBWYB.Server.Model/Dto/Response/Logistics/LogisticsResponse.cs create mode 100644 QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ExpressClient.cs create mode 100644 QuanTan.SDK/Models/Supplier/Request/Order/QuanTan_Supplier_OutStockRequest.cs create mode 100644 QuanTan.SDK/Models/Supplier/Response/Logistics/QuanTan_Supplier_ExpressCompanyResponse.cs create mode 100644 SDKAdapter/ExpressCompanyNameConverter.cs create mode 100644 SDKAdapter/OperationPlatform/Models/Request/Logistics/OP_QueryExpressCompanyRequest.cs create mode 100644 SDKAdapter/OperationPlatform/Models/Request/Order/OP_OutStockRequest.cs create mode 100644 SDKAdapter/OperationPlatform/Models/Response/Logistics/OP_QueryExpressCompanyResponse.cs create mode 100644 SDKAdapter/PurchasePlatform/Models/Request/Order/PP_QueryOrderLogisticsRequest.cs create mode 100644 SDKAdapter/PurchasePlatform/Models/Response/Order/PP_QueryOrderLogisticsResponse.cs diff --git a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs index f038aa2..e4b4f06 100644 --- a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs @@ -1,5 +1,6 @@ using BBWYB.Server.Business; using BBWYB.Server.Model.Dto; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace BBWYB.Server.API.Controllers @@ -33,5 +34,17 @@ namespace BBWYB.Server.API.Controllers { purchaseOrderBusiness.CreatePurchaseOrder(request); } + + /// + /// 1688回调 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + public void CallbackFrom1688([FromForm] string message, [FromForm] string _aop_signature) + { + purchaseOrderBusiness.CallbackFrom1688(message); + } } } diff --git a/BBWYB.Server.API/Program.cs b/BBWYB.Server.API/Program.cs index d0da2b1..f2f2e90 100644 --- a/BBWYB.Server.API/Program.cs +++ b/BBWYB.Server.API/Program.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; using Newtonsoft.Json.Serialization; +using SDKAdapter; using SDKAdapter.OperationPlatform.Client; using SDKAdapter.PurchasePlatform.Client; using System.Reflection; @@ -56,6 +57,7 @@ services.AddCors(options => services.BatchRegisterServices(new Assembly[] { Assembly.Load("BBWYB.Server.Business") }, typeof(IDenpendency)); services.AddSingleton(); services.AddSingleton(); +services.AddSingleton(); services.AddMapper(new MappingProfiles()); services.AddControllers(c => diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 1031dc8..46ef520 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -1,9 +1,13 @@ using BBWYB.Common.Extensions; using BBWYB.Common.Log; using BBWYB.Common.Models; +using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using FreeSql; +using SDKAdapter; +using SDKAdapter.OperationPlatform.Client; +using SDKAdapter.OperationPlatform.Models; using System.Linq.Expressions; using Yitter.IdGenerator; @@ -11,9 +15,11 @@ namespace BBWYB.Server.Business { public class OrderBusiness : BaseBusiness, IDenpendency { - public OrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) - { + private OP_PlatformClientFactory opPlatformClientFactory; + public OrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory) : base(fsql, nLogManager, idGenerator) + { + this.opPlatformClientFactory = opPlatformClientFactory; } private ISelect GetOrderListQueryConditions(QueryOrderRequest request) @@ -141,5 +147,32 @@ namespace BBWYB.Server.Business Items = orderList }; } + + public void OutStock(OutStockRequest request) + { + var dbOrder = fsql.Select(request.OrderId).ToOne(); + if (dbOrder == null) + throw new BusinessException($"订单{request.OrderId}不存在"); + if (dbOrder.OrderState != Enums.OrderState.待出库) + throw new BusinessException($"订单{request.OrderId} 只有在待出库时才允许出库"); + + opPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.Platform) + .OutStock(new OP_OutStockRequest() + { + AppKey = request.AppKey, + AppSecret = request.AppSecret, + AppToken = request.AppToken, + ExpressId = request.ExpressId, + ExpressName = request.ExpressName, + OrderId = request.OrderId, + Platform = (AdapterEnums.PlatformType)request.Platform, + WayBillNo = request.WayBillNo + }); + + fsql.Update(request.OrderId).Set(o => o.OrderState, Enums.OrderState.待收货) + .Set(o => o.WaybillNo, request.WayBillNo) + .Set(o => o.ExpressName, request.ExpressName) + .ExecuteAffrows(); + } } } diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 911d480..816bc89 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -2,9 +2,11 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.MDS; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using SDKAdapter; using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Models; @@ -15,9 +17,28 @@ namespace BBWYB.Server.Business public class PurchaseOrderBusiness : BaseBusiness, IDenpendency { private PP_PlatformClientFactory ppPlatformClientFactory; - public PurchaseOrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, PP_PlatformClientFactory ppPlatformClientFactory) : base(fsql, nLogManager, idGenerator) + private TaskSchedulerManager taskSchedulerManager; + private FreeSqlMultiDBManager fsqlManager; + private OrderBusiness orderBusiness; + private VenderBusiness venderBusiness; + private ExpressCompanyNameConverter expressCompanyNameConverter; + + public PurchaseOrderBusiness(IFreeSql fsql, + NLogManager nLogManager, + IIdGenerator idGenerator, + PP_PlatformClientFactory ppPlatformClientFactory, + TaskSchedulerManager taskSchedulerManager, + FreeSqlMultiDBManager fsqlManager, + OrderBusiness orderBusiness, + VenderBusiness venderBusiness, + ExpressCompanyNameConverter expressCompanyNameConverter) : base(fsql, nLogManager, idGenerator) { this.ppPlatformClientFactory = ppPlatformClientFactory; + this.taskSchedulerManager = taskSchedulerManager; + this.fsqlManager = fsqlManager; + this.orderBusiness = orderBusiness; + this.venderBusiness = venderBusiness; + this.expressCompanyNameConverter = expressCompanyNameConverter; } public PreviewOrderResponse PreviewPurchaseOrder(PreviewOrderRequest request) @@ -218,7 +239,8 @@ namespace BBWYB.Server.Business PurchaseMethod = Enums.PurchaseMethod.线上采购, PurchaseOrderId = createOrderResponse.OrderId, PurchasePlatform = request.Platform, - PurchaserName = request.PurchaserName + PurchaserName = request.PurchaserName, + ShopId = request.ShopId }; if (!isRepurchase) @@ -244,5 +266,303 @@ namespace BBWYB.Server.Business .ExecuteAffrows(); }); } + + #region 1688CallBack + public void CallbackFrom1688(string jsonStr) + { + nLogManager.Default().Info(jsonStr); + var jObject = JObject.Parse(jsonStr); + var type = jObject.Value("type").ToUpper(); + switch (type) + { + case "ORDER_BUYER_VIEW_PART_PART_SENDGOODS": //部分发货 + case "ORDER_BUYER_VIEW_ANNOUNCE_SENDGOODS": //发货 + DeliveryCallbackFrom1688(jObject); + break; + case "ORDER_BUYER_VIEW_ORDER_PRICE_MODIFY": + OrderPriceModificationCallbackFrom1688(jObject); //订单改价 + break; + default: + break; + } + } + + /// + /// 1688发货回调 + /// + /// + private void DeliveryCallbackFrom1688(JObject jObject) + { + var purchaseOrderId = jObject["data"].Value("orderId"); + Task.Factory.StartNew(() => DeliveryCallback(purchaseOrderId, null, Enums.Platform.阿里巴巴), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + } + + /// + /// 1688订单改价回调 + /// + /// + private void OrderPriceModificationCallbackFrom1688(JObject jObject) + { + //var purchaseOrderId = jObject["data"].Value("orderId"); + //Task.Factory.StartNew(() => OrderPriceModificationCallback(purchaseOrderId, Enums.Platform.阿里巴巴), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + } + #endregion + + /// + /// 采购平台发货回调 + /// + /// + /// + /// + private void DeliveryCallback(string purchaseOrderId, PP_QueryOrderLogisticsResponse wayBillNoResponse, Enums.Platform callbackPlatform) + { + string currentProgress = string.Empty; + string wayBillNoResponseInfo = string.Empty; + string expressCompanyListInfo = string.Empty; + string expressCompanyInfo = string.Empty; + string orderId = string.Empty; + long? shopId = null; + try + { + #region 查询代发信息 + currentProgress = "查询代发信息"; + var orderPurchaseInfo = fsql.Select().Where(o => o.PurchaseOrderId == purchaseOrderId).ToOne(); + if (orderPurchaseInfo == null) + throw new Exception("未查询到代发信息"); + orderId = orderPurchaseInfo.OrderId; + shopId = orderPurchaseInfo.ShopId; + #endregion + + #region 查询采购账号的归属店铺 + currentProgress = "查询采购账号归属店铺"; + var shop = venderBusiness.GetShopList(shopId: shopId)?.FirstOrDefault(); + if (shop == null) + throw new Exception("未查询到店铺信息"); + #endregion + + #region 查询采购账号 + currentProgress = "查询采购账号"; + var purchaseAccount = fsqlManager.MDSfsql.Select().Where(pa => pa.Id == orderPurchaseInfo.PurchaseAccountId).ToOne(); + if (purchaseAccount == null) + throw new Exception($"未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}"); + #endregion + + #region 获取采购单的物流信息 + currentProgress = "获取采购单的物流信息"; + if (wayBillNoResponse == null) + { + var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)callbackPlatform); + var ppQueryOrderLogisticsRequest = new PP_QueryOrderLogisticsRequest() + { + AppKey = purchaseAccount.AppKey, + AppSecret = purchaseAccount.AppSecret, + AppToken = purchaseAccount.AppToken, + OrderId = purchaseOrderId, + Platform = (AdapterEnums.PlatformType)callbackPlatform + }; + wayBillNoResponse = client.QueryOrderLogistics(ppQueryOrderLogisticsRequest); + wayBillNoResponseInfo = JsonConvert.SerializeObject(new { Request = ppQueryOrderLogisticsRequest, Result = wayBillNoResponse }); + } + #endregion + + #region 获取目标平台的物流公司列表 + currentProgress = "获取店铺平台物流公司列表"; + var expressCompanyList = venderBusiness.GetExpressCompanyList(new PlatformRequest() + { + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + Platform = shop.PlatformId + }); + if (expressCompanyList != null) + expressCompanyListInfo = JsonConvert.SerializeObject(expressCompanyList); + #endregion + + #region 物流公司翻译 + currentProgress = "物流公司翻译"; + //logisticsCompanyId = ConvertLogisticsCompanyId(wayBillNoResponse.LogisticsCompanyName, logisticsCompanyList, shop.Platform); + var convertExpressCompany = expressCompanyNameConverter.Converter(wayBillNoResponse.ExpressName, + (AdapterEnums.PlatformType)callbackPlatform, + (AdapterEnums.PlatformType)shop.PlatformId, + expressCompanyList); + expressCompanyInfo = JsonConvert.SerializeObject(convertExpressCompany); + #endregion + + #region 店铺平台订单出库 + currentProgress = "店铺平台订单出库"; + //outStockRequest = new OutStockRequest() + //{ + // AppKey = shop.AppKey, + // AppSecret = shop.AppSecret, + // AppToken = shop.AppToken, + // OrderId = orderPurchaseInfo.OrderId, + // Platform = shop.PlatformId, + // WayBillNo = wayBillNoResponse.WayBillNo, + // LogisticsId = logisticsCompanyId, //物流公司Id + // SaveResponseLog = true + //}; + //orderBusiness.OutStock(outStockRequest); + orderBusiness.OutStock(new OutStockRequest() + { + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + OrderId = orderId, + ExpressId = convertExpressCompany.ExpressId, //物流公司Id + ExpressName = convertExpressCompany.ExpressName, //物流公司名称 + Platform = shop.PlatformId, + WayBillNo = wayBillNoResponse.WayBillNo + }); + #endregion + + nLogManager.Default().Info($"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}"); + } + catch (Exception ex) + { + nLogManager.Default().Error(ex, $"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}"); + } + } + + + ///// + ///// 采购平台改价回调 + ///// + ///// + ///// + //private void OrderPriceModificationCallback(string purchaseOrderId, Enums.Platform callbackPlatform) + //{ + // string currentProgress = string.Empty; + + // try + // { + // #region 查询代发信息 + // currentProgress = "查询代发信息"; + // var orderDropshipping = fsql.Select().Where(o => o.PurchaseOrderId == purchaseOrderId).ToOne(); + // if (orderDropshipping == null) + // throw new Exception("未查询到代发信息"); + // #endregion + + // #region 查询订单Sku + // currentProgress = "查询订单Sku"; + // var orderSkuList = fsql.Select().Where(osku => osku.Price != 0 && osku.OrderId == orderDropshipping.OrderId).ToList(); + // if (orderSkuList == null || orderSkuList.Count() == 0) + // throw new BusinessException("订单Sku不存在"); + // #endregion + + // #region 查询采购单 + // currentProgress = "查询采购单"; + // var purchaseOrderList = fsql.Select().Where(po => po.PurchaseOrderId == purchaseOrderId).ToList(); + // if (purchaseOrderList == null || purchaseOrderList.Count() == 0) + // throw new BusinessException("采购单不存在"); + // if (orderSkuList.Count() > 1 && purchaseOrderList.Any(p => p.PurchaseMethod == Enums.PurchaseMethod.线下采购)) + // throw new Exception("多sku订单关联采购单不支持改价"); + // #endregion + + // #region 查询成本 + // currentProgress = "查询成本"; + // var orderCost = fsql.Select(orderDropshipping.OrderId).ToOne(); + // if (orderCost == null) + // throw new BusinessException("订单成本不存在"); + // #endregion + + // #region 查询成本明细 + // currentProgress = "查询成本明细"; + // var orderCostDetailList = fsql.Select().Where(ocd => ocd.OrderId == orderDropshipping.OrderId).ToList(); + // if (orderCostDetailList == null || orderCostDetailList.Count() == 0) + // throw new BusinessException("订单成本明细不存在"); + // #endregion + + // #region 查询采购账号 + // currentProgress = "查询采购账号"; + // var purchaseAccount = fsql.Select().WhereIf(orderDropshipping.PurchaseAccountId != 0, pa => pa.Id == orderDropshipping.PurchaseAccountId) + // .WhereIf(orderDropshipping.PurchaseAccountId == 0, pa => pa.AccountName == orderDropshipping.BuyerAccount) + // .Where(pa => pa.PurchasePlatformId == callbackPlatform).ToOne(); + // if (purchaseAccount == null) + // throw new Exception($"未查询到采购账号{orderDropshipping.BuyerAccount}"); + // #endregion + + // #region 查询改价后的订单金额 + // currentProgress = "查询改价后的订单金额"; + // var purchaseOrderSimpleInfo = platformSDKBusinessList.FirstOrDefault(p => p.Platform == callbackPlatform).GetOrderSimpleInfo(new GetOrderInfoRequest() + // { + // AppKey = purchaseAccount.AppKey, + // AppSecret = purchaseAccount.AppSecret, + // AppToken = purchaseAccount.AppToken, + // OrderId = purchaseOrderId, + // Platform = callbackPlatform + // }); + // #endregion + + // #region 查询采购单明细 + // currentProgress = "查询采购单明细"; + // var purchaseOrderDetails = fsql.Select().Where(p => p.OrderId == orderDropshipping.OrderId); + // #endregion + + // #region 查询订单 + // currentProgress = "查询订单"; + // var dbOrder = fsql.Select(orderDropshipping.OrderId).ToOne(); + // if (dbOrder == null) + // throw new BusinessException("订单不存在"); + // #endregion + + // IList> updatePurchaseOrders = new List>(); + // IList> updateOrderCostDetails = new List>(); + + // foreach (var orderSku in orderSkuList) + // { + // var currentOrderSkuProductAmount = 0M; //采购成本 + // if (orderSkuList.Count() != 1) + // { + // var currentOrderSkuPurchaseOrderDetails = purchaseOrderDetails.Where(p => p.SkuId == orderSku.SkuId); //找当前skuId的采购skuId + // currentOrderSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => currentOrderSkuPurchaseOrderDetails.Any(p1 => p1.PurchaseSkuId == p.SkuId)) + // ?.Sum(p => p.ProductAmount) ?? 0M; + // } + // else + // { + // currentOrderSkuProductAmount = purchaseOrderSimpleInfo.ProductAmount; + // } + // var currentOrderSkuFreightAmount = purchaseOrderSimpleInfo.FreightAmount / orderSkuList.Count(); //采购运费(按sku数均分) + + // var purchaseOrder = purchaseOrderList.FirstOrDefault(po => po.SkuId == orderSku.SkuId); + // var orderCostDetail = orderCostDetailList.FirstOrDefault(oc => oc.PurchaseOrderPKId == purchaseOrder.Id); + + // purchaseOrder.SingleSkuAmount = currentOrderSkuProductAmount / orderSku.ItemTotal.Value; + // purchaseOrder.SingleFreight = currentOrderSkuFreightAmount / orderSku.ItemTotal.Value; + + // orderCostDetail.SkuAmount = currentOrderSkuProductAmount; + // orderCostDetail.PurchaseFreight = currentOrderSkuFreightAmount; + // //orderCostDetail.UnitCost = purchaseOrder.UnitCost; + // //orderCostDetail.TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount; + + // updatePurchaseOrders.Add(fsql.Update().SetSource(purchaseOrder)); + // updateOrderCostDetails.Add(fsql.Update().SetSource(orderCostDetail)); + + + // } + // orderCost.PurchaseAmount = purchaseOrderSimpleInfo.TotalAmount; + // orderCost.Profit = dbOrder.OrderSellerPrice + + // dbOrder.FreightPrice - + // orderCost.PurchaseAmount - + // orderCost.DeliveryExpressFreight - + // orderCost.PlatformCommissionAmount; + + // orderDropshipping.PurchaseAmount = purchaseOrderSimpleInfo.TotalAmount; + // orderDropshipping.SkuAmount = purchaseOrderSimpleInfo.ProductAmount; + // orderDropshipping.PurchaseFreight = purchaseOrderSimpleInfo.FreightAmount; + // fsql.Transaction(() => + // { + // foreach (var update in updatePurchaseOrders) + // update.ExecuteAffrows(); + // foreach (var update in updateOrderCostDetails) + // update.ExecuteAffrows(); + // fsql.Update().SetSource(orderCost).ExecuteAffrows(); + // fsql.Update().SetSource(orderDropshipping).ExecuteAffrows(); + // }); + // } + // catch (Exception ex) + // { + // nLogManager.Default().Error(ex, $"OrderPriceModificationCallback 回调平台{callbackPlatform},采购单号{purchaseOrderId},执行进度[{currentProgress}]"); + // } + //} } } diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index e35eb70..3cc46b7 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -5,25 +5,27 @@ using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.MDS; using BBWYB.Server.Model.Dto; +using SDKAdapter.OperationPlatform.Client; +using SDKAdapter.OperationPlatform.Models; using Yitter.IdGenerator; namespace BBWYB.Server.Business { public class VenderBusiness : BaseBusiness, IDenpendency { + private OP_PlatformClientFactory opPlatformClientFactory; private FreeSqlMultiDBManager fsqlManager; - public VenderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager) : base(fsql, nLogManager, idGenerator) + public VenderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager, OP_PlatformClientFactory opPlatformClientFactory) : base(fsql, nLogManager, idGenerator) { this.fsqlManager = fsqlManager; + this.opPlatformClientFactory = opPlatformClientFactory; } - public IList GetShopList(long? shopId = null, Enums.Platform? platform = null, bool filterTurnoverDays = false, bool filterSiNan = false) + public IList GetShopList(long? shopId = null, Enums.Platform? platform = null) { return fsqlManager.MDSfsql.Select().Where(s => !string.IsNullOrEmpty(s.ShopId)) .WhereIf(shopId != null, s => s.ShopId == shopId.ToString()) .WhereIf(platform != null, s => s.PlatformId == (int)platform) - .WhereIf(filterTurnoverDays, s => s.SkuSafeTurnoverDays != 0) - .WhereIf(filterSiNan, s => !string.IsNullOrEmpty(s.SiNanDingDingWebHook)) .ToList(); } @@ -39,19 +41,6 @@ namespace BBWYB.Server.Business if (shopSettingRequest.PurchaseAccountId == 0) { shopSettingRequest.PurchaseAccountId = idGenerator.NewLong(); - var pa = new PurchaseAccount() - { - Id = shopSettingRequest.PurchaseAccountId, - AccountName = shopSettingRequest.AccountName, - AppKey = shopSettingRequest.AppKey, - AppSecret = shopSettingRequest.AppSecret, - AppToken = shopSettingRequest.AppToken, - CreateTime = DateTime.Now, - CreatorId = "", - Deleted = 0, - PurchasePlatformId = shopSettingRequest.PurchasePlatformId, - ShopId = shopSettingRequest.ShopId - }; var mdspa = new Purchaseaccount() { @@ -67,55 +56,31 @@ namespace BBWYB.Server.Business ShopId = mdsShop.Id }; - - fsqlManager.BBWYfsql.Insert(pa).ExecuteAffrows(); - fsqlManager.MDSfsql.Transaction(() => - { - fsqlManager.MDSfsql.Insert(mdspa).ExecuteAffrows(); - //修改扣点和管理密码 - //fsqlManager.MDSfsql.Update(mdsShop.Id).Set(s => s.ManagePwd, shopSettingRequest.ManagerPwd) - // .Set(s => s.PlatformCommissionRatio, shopSettingRequest.PlatformCommissionRatio) - // .Set(s => s.DingDingKey, shopSettingRequest.DingDingKey) - // .Set(s => s.DingDingWebHook, shopSettingRequest.DingDingWebHook) - // .Set(s => s.SkuSafeTurnoverDays, shopSettingRequest.SkuSafeTurnoverDays) - // .Set(s => s.SiNanDingDingKey, shopSettingRequest.SiNanDingDingKey) - // .Set(s => s.SiNanDingDingWebHook, shopSettingRequest.SiNanDingDingWebHook) - // .Set(s => s.SiNanPolicyLevel, shopSettingRequest.SiNanPolicyLevel) - // .ExecuteAffrows(); - }); + fsqlManager.MDSfsql.Insert(mdspa).ExecuteAffrows(); } else { - fsqlManager.BBWYfsql.Update(shopSettingRequest.PurchaseAccountId) - .Set(pa => pa.AppKey, shopSettingRequest.AppKey) - .Set(pa => pa.AppSecret, shopSettingRequest.AppSecret) - .Set(pa => pa.AppToken, shopSettingRequest.AppToken) - .Set(pa => pa.AccountName, shopSettingRequest.AccountName) - .Set(pa => pa.PurchasePlatformId, shopSettingRequest.PurchasePlatformId) - .ExecuteAffrows(); - - fsqlManager.MDSfsql.Transaction(() => - { - fsqlManager.MDSfsql.Update(shopSettingRequest.PurchaseAccountId.ToString()) - .Set(pa => pa.AppKey, shopSettingRequest.AppKey) - .Set(pa => pa.AppSecret, shopSettingRequest.AppSecret) - .Set(pa => pa.AppToken, shopSettingRequest.AppToken) - .Set(pa => pa.AccountName, shopSettingRequest.AccountName) - .Set(pa => pa.PurchasePlatformId, ((int)shopSettingRequest.PurchasePlatformId).ToString()) - .ExecuteAffrows(); - //修改扣点和管理密码 - //fsqlManager.MDSfsql.Update(mdsShop.Id).Set(s => s.ManagePwd, shopSettingRequest.ManagerPwd) - // .Set(s => s.PlatformCommissionRatio, shopSettingRequest.PlatformCommissionRatio) - // .Set(s => s.DingDingKey, shopSettingRequest.DingDingKey) - // .Set(s => s.DingDingWebHook, shopSettingRequest.DingDingWebHook) - // .Set(s => s.SkuSafeTurnoverDays, shopSettingRequest.SkuSafeTurnoverDays) - // .Set(s => s.SiNanDingDingKey, shopSettingRequest.SiNanDingDingKey) - // .Set(s => s.SiNanDingDingWebHook, shopSettingRequest.SiNanDingDingWebHook) - // .Set(s => s.SiNanPolicyLevel, shopSettingRequest.SiNanPolicyLevel) - // .ExecuteAffrows(); - }); + fsqlManager.MDSfsql.Update(shopSettingRequest.PurchaseAccountId.ToString()) + .Set(pa => pa.AppKey, shopSettingRequest.AppKey) + .Set(pa => pa.AppSecret, shopSettingRequest.AppSecret) + .Set(pa => pa.AppToken, shopSettingRequest.AppToken) + .Set(pa => pa.AccountName, shopSettingRequest.AccountName) + .Set(pa => pa.PurchasePlatformId, ((int)shopSettingRequest.PurchasePlatformId).ToString()) + .ExecuteAffrows(); } return shopSettingRequest.PurchaseAccountId; } + + public IList GetExpressCompanyList(PlatformRequest request) + { + return opPlatformClientFactory.GetClient((SDKAdapter.AdapterEnums.PlatformType)request.Platform) + .GetExpressCompanyList(new OP_QueryExpressCompanyRequest() + { + AppKey = request.AppKey, + AppSecret = request.AppSecret, + AppToken = request.AppToken, + Platform = (SDKAdapter.AdapterEnums.PlatformType)request.Platform + }); + } } } diff --git a/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs b/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs index bad26a4..acec0c1 100644 --- a/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs +++ b/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs @@ -31,6 +31,7 @@ namespace BBWYB.Server.Model.Db [Column(StringLength = 100)] public string PurchaserName { get; set; } + public long? ShopId { get; set; } } } diff --git a/BBWYB.Server.Model/Db/PurchaseAccount/PurchaseAccount.cs b/BBWYB.Server.Model/Db/PurchaseAccount/PurchaseAccount.cs deleted file mode 100644 index 2bff6e8..0000000 --- a/BBWYB.Server.Model/Db/PurchaseAccount/PurchaseAccount.cs +++ /dev/null @@ -1,64 +0,0 @@ -using FreeSql.DataAnnotations; - -namespace BBWYB.Server.Model.Db -{ - - /// - /// 采购账号表 - /// - [Table(Name = "purchaseaccount", DisableSyncStructure = true)] - public partial class PurchaseAccount - { - - /// - /// 主键 - /// - [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] - public long Id { get; set; } - - - public string AccountName { get; set; } - - - public string AppKey { get; set; } - - - public string AppSecret { get; set; } - - - public string AppToken { get; set; } - - /// - /// 创建时间 - /// - [Column(DbType = "datetime")] - public DateTime CreateTime { get; set; } - - /// - /// 创建人Id - /// - [Column(StringLength = 50)] - public string CreatorId { get; set; } - - /// - /// 否已删除 - /// - [Column(DbType = "tinyint(4)")] - public sbyte Deleted { get; set; } - - [Column(DbType = "int(1)", MapType = typeof(int?))] - public Enums.Platform? PurchasePlatformId { get; set; } - - /// - /// 采购账号归属店铺ID - /// - [Column(DbType = "bigint(1)")] - public long? ShopId { get; set; } - - } - - - - - -} diff --git a/BBWYB.Server.Model/Dto/Request/Order/OutStockRequest.cs b/BBWYB.Server.Model/Dto/Request/Order/OutStockRequest.cs new file mode 100644 index 0000000..89e2c27 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Order/OutStockRequest.cs @@ -0,0 +1,13 @@ +namespace BBWYB.Server.Model.Dto +{ + public class OutStockRequest : PlatformRequest + { + public string OrderId { get; set; } + + public string WayBillNo { get; set; } + + public string ExpressId { get; set; } + + public string ExpressName { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseOrder/CreateOrderRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/CreateOrderRequest.cs index cfee326..39bd5bc 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseOrder/CreateOrderRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/CreateOrderRequest.cs @@ -16,5 +16,7 @@ public string PurchaseAccountName { get; set; } public string PurchaserName { get; set; } + + public long ShopId { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Logistics/LogisticsResponse.cs b/BBWYB.Server.Model/Dto/Response/Logistics/LogisticsResponse.cs new file mode 100644 index 0000000..23bf2bf --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Logistics/LogisticsResponse.cs @@ -0,0 +1,18 @@ +namespace BBWYB.Server.Model.Dto +{ + public class LogisticsResponse + { + public string Id { get; set; } + + public string Name { get; set; } + } + + public class WayBillNoResponse + { + public string LogisticsCompanyId { get; set; } + + public string LogisticsCompanyName { get; set; } + + public string WayBillNo { get; set; } + } +} diff --git a/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ExpressClient.cs b/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ExpressClient.cs new file mode 100644 index 0000000..25d7f93 --- /dev/null +++ b/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ExpressClient.cs @@ -0,0 +1,40 @@ +using BBWYB.Common.Http; +using QuanTan.SDK.Models.Supplier; + +namespace QuanTan.SDK.Client.Supplier +{ + public class QuanTan_Supplier_ExpressClient : BaseClient + { + private IList expressCompanyList; + + public QuanTan_Supplier_ExpressClient(RestApiService restApiService) : base(restApiService) + { + expressCompanyList = new List() + { + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "1", ExpressName = "韵达快递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "2", ExpressName = "顺丰速运" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "3", ExpressName = "圆通速递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "4", ExpressName = "中通快递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "5", ExpressName = "申通快递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "6", ExpressName = "百世快递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "8", ExpressName = "极兔速递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "9", ExpressName = "邮政快递包裹" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "10", ExpressName = "天天快递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "11", ExpressName = "EMS" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "12", ExpressName = "邮政标准快递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "13", ExpressName = "德邦" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "14", ExpressName = "德邦快递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "15", ExpressName = "众邮快递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "17", ExpressName = "优速快递" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "18", ExpressName = "中通快运" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "19", ExpressName = "宅急送" }, + new QuanTan_Supplier_ExpressCompanyResponse() { ExpressId = "20", ExpressName = "苏宁物流" } + }; + } + + public IList GetExpressCompanyList() + { + return expressCompanyList; + } + } +} diff --git a/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_OrderClient.cs b/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_OrderClient.cs index 1a19457..59bde3a 100644 --- a/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_OrderClient.cs +++ b/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_OrderClient.cs @@ -14,5 +14,10 @@ namespace QuanTan.SDK.Client.Supplier { return SendRequest("api/platform/supply/order/list", request, appId, appSecret); } + + public QuanTanResponse OutStock(QuanTan_Supplier_OutStockRequest request, string appId, string appSecret) + { + return SendRequest("api/platform/supply/order/delivery", request, appId, appSecret); + } } } diff --git a/QuanTan.SDK/Models/Supplier/Request/Order/QuanTan_Supplier_OutStockRequest.cs b/QuanTan.SDK/Models/Supplier/Request/Order/QuanTan_Supplier_OutStockRequest.cs new file mode 100644 index 0000000..4633890 --- /dev/null +++ b/QuanTan.SDK/Models/Supplier/Request/Order/QuanTan_Supplier_OutStockRequest.cs @@ -0,0 +1,9 @@ +namespace QuanTan.SDK.Models.Supplier +{ + public class QuanTan_Supplier_OutStockRequest + { + public string orderId { get; set; } + public string expressId { get; set; } + public string waybillNo { get; set; } + } +} diff --git a/QuanTan.SDK/Models/Supplier/Response/Logistics/QuanTan_Supplier_ExpressCompanyResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Logistics/QuanTan_Supplier_ExpressCompanyResponse.cs new file mode 100644 index 0000000..1f48cdd --- /dev/null +++ b/QuanTan.SDK/Models/Supplier/Response/Logistics/QuanTan_Supplier_ExpressCompanyResponse.cs @@ -0,0 +1,9 @@ +namespace QuanTan.SDK.Models.Supplier +{ + public class QuanTan_Supplier_ExpressCompanyResponse + { + public string ExpressId { get; set; } + + public string ExpressName { get; set; } + } +} diff --git a/QuanTan.SDK/QuanTan.SDK.csproj b/QuanTan.SDK/QuanTan.SDK.csproj index 5c53a2f..e82604f 100644 --- a/QuanTan.SDK/QuanTan.SDK.csproj +++ b/QuanTan.SDK/QuanTan.SDK.csproj @@ -10,4 +10,8 @@ + + + + diff --git a/SDKAdapter/ExpressCompanyNameConverter.cs b/SDKAdapter/ExpressCompanyNameConverter.cs new file mode 100644 index 0000000..70297b9 --- /dev/null +++ b/SDKAdapter/ExpressCompanyNameConverter.cs @@ -0,0 +1,144 @@ +using SDKAdapter.OperationPlatform.Models; + +namespace SDKAdapter +{ + public class ExpressCompanyNameConverter + { + private IDictionary> converterDictionary; + + public ExpressCompanyNameConverter() + { + converterDictionary = new Dictionary>(); + converterDictionary.Add($"{AdapterEnums.PlatformType.阿里巴巴}_{AdapterEnums.PlatformType.京东}", new List() + { + new LogisticsCompanyRelationship(){SourceName="中通快递(ZTO)",TargetName="中通速递"}, + new LogisticsCompanyRelationship(){SourceName="圆通速递(YTO)",TargetName="圆通快递"}, + new LogisticsCompanyRelationship(){SourceName="邮政国内小包",TargetName="邮政快递包裹"}, + new LogisticsCompanyRelationship(){SourceName="韵达快递",TargetName="韵达快递"}, + new LogisticsCompanyRelationship(){SourceName="申通快递(STO)",TargetName="申通快递",SecondTargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="顺丰速运",TargetName="顺丰快递"}, + new LogisticsCompanyRelationship(){SourceName="百世快递",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="其他",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="德邦",TargetName="德邦物流",SecondTargetName="德邦快递"}, + new LogisticsCompanyRelationship(){SourceName="EMS",TargetName="邮政快递包裹"}, + new LogisticsCompanyRelationship(){SourceName="德邦快递",TargetName="德邦快递",SecondTargetName="德邦快运"}, + new LogisticsCompanyRelationship(){SourceName="其它",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="极兔速递",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="中通快运",TargetName="中通快运"}, + new LogisticsCompanyRelationship(){SourceName="龙邦速递",TargetName="龙邦快递"}, + new LogisticsCompanyRelationship(){SourceName="安能物流",TargetName="安能物流"}, + new LogisticsCompanyRelationship(){SourceName="德坤物流",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="顺丰快运",TargetName="顺丰快递"}, + new LogisticsCompanyRelationship(){SourceName="壹米滴答",TargetName="壹米滴答"}, + new LogisticsCompanyRelationship(){SourceName="优速快递",TargetName="优速快递"}, + new LogisticsCompanyRelationship(){SourceName="京广速递",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="丰网速运",TargetName="丰网速运"}, + new LogisticsCompanyRelationship(){SourceName="顺心捷达",TargetName="顺心捷达"}, + new LogisticsCompanyRelationship(){SourceName="快捷快递",TargetName="快捷速递"}, + new LogisticsCompanyRelationship(){SourceName="极兔快递(原百世快递)",TargetName="京旗联盟-极兔",SecondTargetName ="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="极兔速递-原百世快递",TargetName="京旗联盟-极兔",SecondTargetName ="厂家自送"} + }); + converterDictionary.Add($"{AdapterEnums.PlatformType.拳探}_{AdapterEnums.PlatformType.京东}", new List() + { + new LogisticsCompanyRelationship(){SourceName="韵达快递",TargetName="韵达快递"}, + new LogisticsCompanyRelationship(){SourceName="顺丰速运",TargetName="顺丰快递"}, + new LogisticsCompanyRelationship(){SourceName="圆通速递",TargetName="圆通快递"}, + new LogisticsCompanyRelationship(){SourceName="中通快递",TargetName="中通速递"}, + new LogisticsCompanyRelationship(){SourceName="申通快递",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="百世快递",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="德邦快递",TargetName="德邦快递"}, + new LogisticsCompanyRelationship(){SourceName="极兔速递",TargetName="京旗联盟-极兔"}, + new LogisticsCompanyRelationship(){SourceName="邮政快递包裹",TargetName="邮政快递包裹"}, + new LogisticsCompanyRelationship(){SourceName="天天快递",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="EMS",TargetName="邮政快递包裹"}, + new LogisticsCompanyRelationship(){SourceName="邮政标准快递",TargetName="邮政快递包裹"}, + new LogisticsCompanyRelationship(){SourceName="德邦",TargetName="德邦物流"}, + new LogisticsCompanyRelationship(){SourceName="众邮快递",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="优速快递",TargetName="优速快递"}, + new LogisticsCompanyRelationship(){SourceName="中通快运",TargetName="中通快运"}, + new LogisticsCompanyRelationship(){SourceName="宅急送",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="苏宁物流",TargetName="厂家自送"} + }); + converterDictionary.Add($"{AdapterEnums.PlatformType.阿里巴巴}_{AdapterEnums.PlatformType.拳探}", new List() + { + new LogisticsCompanyRelationship(){SourceName="中通快递(ZTO)",TargetName="中通快递"}, + new LogisticsCompanyRelationship(){SourceName="圆通速递(YTO)",TargetName="圆通速递"}, + new LogisticsCompanyRelationship(){SourceName="邮政国内小包",TargetName="邮政快递包裹"}, + new LogisticsCompanyRelationship(){SourceName="韵达快递",TargetName="韵达快递"}, + new LogisticsCompanyRelationship(){SourceName="申通快递(STO)",TargetName="申通快递"}, + new LogisticsCompanyRelationship(){SourceName="顺丰速运",TargetName="顺丰速运"}, + new LogisticsCompanyRelationship(){SourceName="百世快递",TargetName="百世快递"}, + new LogisticsCompanyRelationship(){SourceName="德邦",TargetName="德邦"}, + new LogisticsCompanyRelationship(){SourceName="德邦快递",TargetName="德邦快递"}, + new LogisticsCompanyRelationship(){SourceName="EMS",TargetName="EMS"}, + new LogisticsCompanyRelationship(){SourceName="极兔速递",TargetName="极兔速递"}, + new LogisticsCompanyRelationship(){SourceName="中通快运",TargetName="中通快运"}, + //new LogisticsCompanyRelationship(){SourceName="龙邦速递",TargetName="龙邦快递"}, + //new LogisticsCompanyRelationship(){SourceName="安能物流",TargetName="安能物流"}, + //new LogisticsCompanyRelationship(){SourceName="德坤物流",TargetName="厂家自送"}, + new LogisticsCompanyRelationship(){SourceName="顺丰快运",TargetName="顺丰速运"}, + //new LogisticsCompanyRelationship(){SourceName="壹米滴答",TargetName="壹米滴答"}, + new LogisticsCompanyRelationship(){SourceName="优速快递",TargetName="优速快递"}, + //new LogisticsCompanyRelationship(){SourceName="京广速递",TargetName="厂家自送"}, + //new LogisticsCompanyRelationship(){SourceName="丰网速运",TargetName="丰网速运"}, + //new LogisticsCompanyRelationship(){SourceName="顺心捷达",TargetName="顺心捷达"}, + //new LogisticsCompanyRelationship(){SourceName="快捷快递",TargetName="快捷速递"}, + new LogisticsCompanyRelationship(){SourceName="极兔快递(原百世快递)",TargetName="极兔速递"}, + new LogisticsCompanyRelationship(){SourceName="极兔速递-原百世快递",TargetName="极兔速递"} + }); + } + + /// + /// 翻译各平台之间的物流公司 + /// 00 + /// + /// + /// + /// 运营平台物流公司 + /// 目标平台的物流公司Id + public OP_QueryExpressCompanyResponse Converter(string sourceName, + AdapterEnums.PlatformType sourcePlatform, + AdapterEnums.PlatformType targetPlatform, + IList opExpressCompanyList) + { + var key = $"{sourcePlatform}_{targetPlatform}"; + if (!converterDictionary.TryGetValue(key, out IList companyRelationShips)) + throw new Exception($"不支持{sourcePlatform}与{targetPlatform}的物流公司翻译"); + + var targetShip = companyRelationShips.FirstOrDefault(l => l.SourceName == sourceName); + if (targetShip == null) + throw new Exception($"sourcePlatform:{sourcePlatform},targetPlatform:{targetPlatform},未找到{sourcePlatform}的物流公司{sourceName}"); + + var expressCompany = opExpressCompanyList.FirstOrDefault(c => c.ExpressName.Equals(targetShip.TargetName)); + if (expressCompany == null) + { + if (!string.IsNullOrEmpty(targetShip.SecondTargetName)) + { + expressCompany = opExpressCompanyList.FirstOrDefault(c => c.ExpressName.Equals(targetShip.SecondTargetName)); + if (expressCompany == null) + { + throw new Exception($"sourcePlatform:{sourcePlatform},targetPlatform:{targetPlatform},targetShip:{targetShip.SecondTargetName},在用户支持的物流公司中不存在"); + } + } + else + { + throw new Exception($"sourcePlatform:{sourcePlatform},targetPlatform:{targetPlatform},targetShip:{targetShip.TargetName},在用户支持的物流公司中不存在"); + } + } + return expressCompany; + } + } + + public class LogisticsCompanyRelationship + { + public string SourceName { get; set; } + + public string TargetName { get; set; } + + public string TargetCode { get; set; } + + public string SecondTargetName { get; set; } + + public string SecondTargetCode { get; set; } + } +} diff --git a/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs b/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs index b242c86..6ff418c 100644 --- a/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs @@ -31,5 +31,15 @@ namespace SDKAdapter.OperationPlatform.Client { throw new NotImplementedException(); } + + public virtual void OutStock(OP_OutStockRequest request) + { + throw new NotImplementedException(); + } + + public virtual IList GetExpressCompanyList(OP_QueryExpressCompanyRequest request) + { + throw new NotImplementedException(); + } } } diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index 18b2f8d..4ec8a9b 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -9,11 +9,13 @@ namespace SDKAdapter.OperationPlatform.Client { private QuanTan_Supplier_ProductClient supplier_ProductClient; private QuanTan_Supplier_OrderClient supplier_OrderClient; + private QuanTan_Supplier_ExpressClient supplier_ExpressClient; public OP_QuanTanClient(RestApiService restApiService) : base(restApiService) { this.supplier_ProductClient = new QuanTan_Supplier_ProductClient(restApiService); this.supplier_OrderClient = new QuanTan_Supplier_OrderClient(restApiService); + this.supplier_ExpressClient = new QuanTan_Supplier_ExpressClient(restApiService); } public override AdapterEnums.PlatformType Platform => AdapterEnums.PlatformType.拳探; @@ -163,5 +165,26 @@ namespace SDKAdapter.OperationPlatform.Client }).ToList() }; } + + public override void OutStock(OP_OutStockRequest request) + { + var qtResponse = supplier_OrderClient.OutStock(new QuanTan_Supplier_OutStockRequest() + { + expressId = request.ExpressId, + orderId = request.OrderId, + waybillNo = request.WayBillNo + }, request.AppKey, request.AppSecret); + if (qtResponse.Status != 200) + throw new Exception(qtResponse.Message); + } + + public override IList GetExpressCompanyList(OP_QueryExpressCompanyRequest request) + { + return supplier_ExpressClient.GetExpressCompanyList().Select(p => new OP_QueryExpressCompanyResponse() + { + ExpressId = p.ExpressId, + ExpressName = p.ExpressName, + }).ToList(); + } } } diff --git a/SDKAdapter/OperationPlatform/Models/Request/Logistics/OP_QueryExpressCompanyRequest.cs b/SDKAdapter/OperationPlatform/Models/Request/Logistics/OP_QueryExpressCompanyRequest.cs new file mode 100644 index 0000000..ef01364 --- /dev/null +++ b/SDKAdapter/OperationPlatform/Models/Request/Logistics/OP_QueryExpressCompanyRequest.cs @@ -0,0 +1,6 @@ +namespace SDKAdapter.OperationPlatform.Models +{ + public class OP_QueryExpressCompanyRequest : BasePlatformRequest + { + } +} diff --git a/SDKAdapter/OperationPlatform/Models/Request/Order/OP_OutStockRequest.cs b/SDKAdapter/OperationPlatform/Models/Request/Order/OP_OutStockRequest.cs new file mode 100644 index 0000000..4ed23ed --- /dev/null +++ b/SDKAdapter/OperationPlatform/Models/Request/Order/OP_OutStockRequest.cs @@ -0,0 +1,13 @@ +namespace SDKAdapter.OperationPlatform.Models +{ + public class OP_OutStockRequest: BasePlatformRequest + { + public string OrderId { get; set; } + + public string WayBillNo { get; set; } + + public string ExpressId { get; set; } + + public string ExpressName { get; set; } + } +} diff --git a/SDKAdapter/OperationPlatform/Models/Response/Logistics/OP_QueryExpressCompanyResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Logistics/OP_QueryExpressCompanyResponse.cs new file mode 100644 index 0000000..e1fcfa9 --- /dev/null +++ b/SDKAdapter/OperationPlatform/Models/Response/Logistics/OP_QueryExpressCompanyResponse.cs @@ -0,0 +1,9 @@ +namespace SDKAdapter.OperationPlatform.Models +{ + public class OP_QueryExpressCompanyResponse + { + public string ExpressId { get; set; } + + public string ExpressName { get; set; } + } +} diff --git a/SDKAdapter/PurchasePlatform/Client/Base/PP_PlatformClient.cs b/SDKAdapter/PurchasePlatform/Client/Base/PP_PlatformClient.cs index 16dd159..42b4898 100644 --- a/SDKAdapter/PurchasePlatform/Client/Base/PP_PlatformClient.cs +++ b/SDKAdapter/PurchasePlatform/Client/Base/PP_PlatformClient.cs @@ -46,5 +46,16 @@ namespace SDKAdapter.PurchasePlatform.Client { throw new NotImplementedException(); } + + /// + /// 查询订单物流信息 + /// + /// + /// + /// + public virtual PP_QueryOrderLogisticsResponse QueryOrderLogistics(PP_QueryOrderLogisticsRequest request) + { + throw new NotImplementedException(); + } } } diff --git a/SDKAdapter/PurchasePlatform/Client/Impl/PP_1688Client.cs b/SDKAdapter/PurchasePlatform/Client/Impl/PP_1688Client.cs index 42b1f5b..f7f65a5 100644 --- a/SDKAdapter/PurchasePlatform/Client/Impl/PP_1688Client.cs +++ b/SDKAdapter/PurchasePlatform/Client/Impl/PP_1688Client.cs @@ -4,12 +4,13 @@ using com.alibaba.openapi.client.entity; using com.alibaba.openapi.client.policy; using Newtonsoft.Json.Linq; using SDKAdapter.PurchasePlatform.Models; -using System.Text; namespace SDKAdapter.PurchasePlatform.Client { public class PP_1688Client : PP_PlatformClient { + public override AdapterEnums.PlatformType Platform => AdapterEnums.PlatformType.阿里巴巴; + private _1688TradeTypeCompare _1688TradeTypeCompare; public PP_1688Client(RestApiService restApiService) : base(restApiService) { @@ -243,6 +244,43 @@ namespace SDKAdapter.PurchasePlatform.Client }).ToList() }; } + + public override PP_QueryOrderLogisticsResponse QueryOrderLogistics(PP_QueryOrderLogisticsRequest request) + { + var client = GetSyncAPIClient(request.AppKey, request.AppSecret); + RequestPolicy reqPolicy = new RequestPolicy(); + reqPolicy.HttpMethod = "POST"; + reqPolicy.NeedAuthorization = false; + reqPolicy.RequestSendTimestamp = false; + reqPolicy.UseHttps = false; + reqPolicy.UseSignture = true; + reqPolicy.AccessPrivateApi = false; + + Request _request = new Request(); + APIId apiId = new APIId(); + apiId.Name = "alibaba.trade.getLogisticsInfos.buyerView"; + apiId.NamespaceValue = "com.alibaba.logistics"; + apiId.Version = 1; + _request.ApiId = apiId; + + var param = new { orderId = request.OrderId, webSite = "1688", fields = "logisticsCompanyId,logisticsCompanyName,logisticsBillNo" }; + _request.RequestEntity = param; + if (!string.IsNullOrEmpty(request.AppToken)) + _request.AccessToken = request.AppToken; + var result = client.NewRequest(_request, reqPolicy); + if (result.Value("success") != true) + throw new Exception(result.Value("errorMessage")); + + //nLogManager.Default().Info($"GetWayBillNoByOrderId QueryOrderWayBillNoRequest {JsonConvert.SerializeObject(queryOrderWayBillNoRequest)} Result {result}"); + + var firstJToken = result["result"].FirstOrDefault(); + return new PP_QueryOrderLogisticsResponse() + { + ExpressId = firstJToken.Value("logisticsCompanyId"), + ExpressName = firstJToken.Value("logisticsCompanyName"), + WayBillNo = firstJToken.Value("logisticsBillNo") + }; + } } public class _1688TradeTypeCompare : IEqualityComparer diff --git a/SDKAdapter/PurchasePlatform/Models/Request/Order/PP_QueryOrderLogisticsRequest.cs b/SDKAdapter/PurchasePlatform/Models/Request/Order/PP_QueryOrderLogisticsRequest.cs new file mode 100644 index 0000000..77789a0 --- /dev/null +++ b/SDKAdapter/PurchasePlatform/Models/Request/Order/PP_QueryOrderLogisticsRequest.cs @@ -0,0 +1,6 @@ +namespace SDKAdapter.PurchasePlatform.Models +{ + public class PP_QueryOrderLogisticsRequest : PP_QueryOrderDetailRequest + { + } +} diff --git a/SDKAdapter/PurchasePlatform/Models/Response/Order/PP_QueryOrderLogisticsResponse.cs b/SDKAdapter/PurchasePlatform/Models/Response/Order/PP_QueryOrderLogisticsResponse.cs new file mode 100644 index 0000000..848bad1 --- /dev/null +++ b/SDKAdapter/PurchasePlatform/Models/Response/Order/PP_QueryOrderLogisticsResponse.cs @@ -0,0 +1,11 @@ +namespace SDKAdapter.PurchasePlatform.Models +{ + public class PP_QueryOrderLogisticsResponse + { + public string WayBillNo { get; set; } + + public string ExpressId { get; set; } + + public string ExpressName { get; set; } + } +}