From 5a10ac85c03d95b7858acd7348ab3b828562afcf Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Fri, 17 Mar 2023 18:03:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E6=9C=8D=E5=8A=A1=E5=8D=95=E5=90=8C?= =?UTF-8?q?=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/JD/JDServiceOrderSyncBusiness.cs | 69 ++++- BBWY.Server.Model/Db/Order/Serviceorder.cs | 284 ++++++++++++++++++ BBWY.Test/Program.cs | 34 +-- 3 files changed, 358 insertions(+), 29 deletions(-) create mode 100644 BBWY.Server.Model/Db/Order/Serviceorder.cs diff --git a/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs b/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs index 9375c83f..fb8371ae 100644 --- a/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs @@ -6,9 +6,12 @@ using Microsoft.Extensions.Options; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; +using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using Yitter.IdGenerator; +using System.Linq; +using BBWY.Server.Model.Db; namespace BBWY.Server.Business.Sync { @@ -59,10 +62,11 @@ namespace BBWY.Server.Business.Sync { var shopId = long.Parse(shop.ShopId); var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId); - - var _10005ServiceOrderListApiResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetServiceOrderList", new QueryServiceOrderRequest() + var serviceStatusList = new List() { 10005, 10011, 10010 }; + #region + var request = new QueryServiceOrderRequest() { - UpdateTimeBegin = startTime ?? DateTime.Now.Date.AddDays(-3), + UpdateTimeBegin = startTime ?? DateTime.Now.Date.AddHours(-1), UpdateTimeEnd = endTime ?? DateTime.Now, AppKey = shop.AppKey, AppSecret = shop.AppSecret, @@ -72,18 +76,61 @@ namespace BBWY.Server.Business.Sync Platform = shop.PlatformId, SaveResponseLog = true, OrderId = orderId, - VenderId = shop.VenderId, - ServiceStatus = 10005 - }, GetYunDingRequestHeader(), HttpMethod.Post); + VenderId = shop.VenderId + }; - if (_10005ServiceOrderListApiResult.StatusCode != System.Net.HttpStatusCode.OK) - throw new Exception($"获取服务单失败 {_10005ServiceOrderListApiResult.Content}"); + List jtokenList = new List(); + foreach (var serviceStatus in serviceStatusList) + { + request.ServiceStatus = serviceStatus; + var serviceOrderListApiResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetServiceOrderList", request, GetYunDingRequestHeader(), HttpMethod.Post); + if (serviceOrderListApiResult.StatusCode != System.Net.HttpStatusCode.OK) + throw new Exception($"获取服务单失败 {serviceOrderListApiResult.Content}"); + var serviceOrderListResponse = JsonConvert.DeserializeObject>(serviceOrderListApiResult.Content); + if (!serviceOrderListResponse.Success) + throw new Exception($"获取服务单失败 {serviceOrderListResponse.Msg}"); + jtokenList.AddRange(serviceOrderListResponse.Data); + } + #endregion - var serviceOrderListResponse = JsonConvert.DeserializeObject>(_10005ServiceOrderListApiResult.Content); - if (!serviceOrderListResponse.Success) - throw new Exception($"获取服务单失败 {serviceOrderListResponse.Msg}"); + var serviceIdList = jtokenList.Select(j => j.Value("serviceId")).ToList(); + var dbServiceOrderList = fsql.Select().Where(s => serviceIdList.Contains(s.ServiceId)).ToList(); + var dbServiceIdList = dbServiceOrderList.Select(s => s.ServiceId).ToList(); + var exceptServiceIdList = serviceIdList.Except(dbServiceIdList); + var apiOrderIdList = jtokenList.Where(j => exceptServiceIdList.Contains(j.Value("serviceId"))).Select(j => j.Value("orderId")).ToList(); + var dbOrderSkuList = fsql.Select().Where(osku => osku.ShopId == shopId && apiOrderIdList.Contains(osku.OrderId)).ToList(); + foreach (var serviceOrderJToken in jtokenList) + { + var serviceId = serviceOrderJToken.Value("serviceId"); + var dbServiceOrder = dbServiceOrderList.FirstOrDefault(s => s.ServiceId == serviceId); + if (dbServiceOrder == null) + { + var serviceOrderId = serviceOrderJToken.Value("orderId"); + var skuId = serviceOrderJToken.Value("skuId"); + var dbOsku = dbOrderSkuList.FirstOrDefault(osku => osku.OrderId == serviceOrderId && osku.SkuId == skuId); + if (dbOsku == null) + continue; + dbServiceOrder = new ServiceOrder() + { + Id = idGenerator.NewLong(), + ServiceId = serviceId, + OrderId = serviceOrderId, + ShopId = shop.ShopId, + ProductId = dbOsku.ProductId, + SkuItemCount = dbOsku.ItemTotal, + Status = serviceOrderJToken.Value("sserviceOrderJToken"), + CreateTime = DateTime.Now, + SkuId = skuId, + StatusUpdateTime = serviceOrderJToken.Value("updateTime"), + IsSubscribeKuaiDi100 = false, + WaybillNo = string.Empty, + ExpressName = string.Empty, + ApplyTime = serviceOrderJToken.Value("applyTime") + }; + } + } //SyncServiceOrder(shop, serviceOrderListResponse.Data); } diff --git a/BBWY.Server.Model/Db/Order/Serviceorder.cs b/BBWY.Server.Model/Db/Order/Serviceorder.cs new file mode 100644 index 00000000..260ed66b --- /dev/null +++ b/BBWY.Server.Model/Db/Order/Serviceorder.cs @@ -0,0 +1,284 @@ +using FreeSql.DatabaseModel;using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using Newtonsoft.Json; +using FreeSql.DataAnnotations; + +namespace BBWY.Server.Model.Db { + + /// + /// 服务单表(new) + /// + [JsonObject(MemberSerialization.OptIn), Table(Name = "serviceorder", DisableSyncStructure = true)] + public partial class ServiceOrder { + + [JsonProperty, Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 售后成本(不含退款采购成本) + /// + [JsonProperty, Column(DbType = "decimal(18,2)")] + public decimal? AfterTotalCost { get; set; } = 0.00M; + + /// + /// 申请时间 + /// + [JsonProperty, Column(DbType = "datetime")] + public DateTime? ApplyTime { get; set; } + + /// + /// 耗材费 + /// + [JsonProperty, Column(DbType = "decimal(18,2)")] + public decimal? ConsumableAmount { get; set; } = 0.00M; + + [JsonProperty, Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 发货快递费 + /// + [JsonProperty, Column(DbType = "decimal(18,2)")] + public decimal? DeliveryExpressFreight { get; set; } = 0.00M; + + /// + /// 快递公司名称 + /// + [JsonProperty, Column(StringLength = 100)] + public string ExpressName { get; set; } + + /// + /// 头程费 + /// + [JsonProperty, Column(DbType = "decimal(18,2)")] + public decimal? FirstFreight { get; set; } = 0.00M; + + /// + /// 退货拍摄图(名称) + /// + [JsonProperty, Column(StringLength = 1000)] + public string ImageName { get; set; } + + /// + /// 入仓操作费 + /// + [JsonProperty, Column(DbType = "decimal(18,2)")] + public decimal? InStorageAmount { get; set; } = 0.00M; + + /// + /// 是否订阅快递100 + /// + [JsonProperty] + public bool? IsSubscribeKuaiDi100 { get; set; } + + [JsonProperty, Column(StringLength = 50)] + public string OrderId { get; set; } + + /// + /// 出仓操作费 + /// + [JsonProperty, Column(DbType = "decimal(18,2)")] + public decimal? OutStorageAmount { get; set; } = 0.00M; + + /// + /// 产品外观 (严重损=0 轻微损=1 新=2) + /// + [JsonProperty] + public int? ProductAppearance { get; set; } + + /// + /// 产品功能 (坏=0 好=1) + /// + [JsonProperty] + public int? ProductFunction { get; set; } + + /// + /// 商品健康状态 (残次品=0 良品=1) + /// + [JsonProperty] + public int? ProductHealth { get; set; } + + /// + /// 商品情况(定义待变更);名称待定,以前的商品情况,叶总需要更换定义 + /// + [JsonProperty] + public int? ProductHealth2 { get; set; } + + [JsonProperty, Column(StringLength = 50)] + public string ProductId { get; set; } + + /// + /// 产品包装(无=0 非新=1 新=2) + /// + [JsonProperty] + public int? ProductPackage { get; set; } + + /// + /// 商品处理方式;弃用 + /// + [JsonProperty] + public int? ProductResult { get; set; } + + /// + /// 采购方式 + /// + [JsonProperty] + public int? PurchaseMethod { get; set; } + + /// + /// 采购单号 + /// + [JsonProperty, Column(StringLength = 100)] + public string PurchaseOrderId { get; set; } + + /// + /// 采购单主键 + /// + [JsonProperty] + public long? PurchaseOrderPKId { get; set; } + + /// + /// 采购平台 + /// + [JsonProperty] + public int? PurchasePlatform { get; set; } + + /// + /// 退款支付宝订单号 + /// + [JsonProperty, Column(StringLength = 100)] + public string RefundAlipayOrderNo { get; set; } + + /// + /// 退款金额 + /// + [JsonProperty, Column(DbType = "decimal(20,2)")] + public decimal? RefundAmount { get; set; } = 0.00M; + + /// + /// 退货入仓操作费 + /// + [JsonProperty, Column(DbType = "decimal(18,2)")] + public decimal? RefundInStorageAmount { get; set; } = 0.00M; + + /// + /// 退款商户订单号 + /// + [JsonProperty, Column(StringLength = 100)] + public string RefundMerchantOrderNo { get; set; } + + /// + /// 退款采购成本 + /// + [JsonProperty, Column(DbType = "decimal(18,2)")] + public decimal? RefundPurchaseAmount { get; set; } = 0.00M; + + /// + /// 退款时间 + /// + [JsonProperty, Column(DbType = "datetime")] + public DateTime? RefundTime { get; set; } + + /// + /// 售后补发成本 + /// + [JsonProperty, Column(DbType = "decimal(20,2)")] + public decimal? ReissueAfterSaleAmount { get; set; } = 0.00M; + + /// + /// 补发快递费 + /// + [JsonProperty, Column(DbType = "decimal(20,2)")] + public decimal? ReissueFreight { get; set; } = 0.00M; + + /// + /// 补发货款成本 + /// + [JsonProperty, Column(DbType = "decimal(20,2)")] + public decimal? ReissueProductAmount { get; set; } = 0.00M; + + /// + /// 退货去向(退货仓=0,采购商=1,原返=2,无退货=3) + /// + [JsonProperty] + public int? ReturnDirection { get; set; } + + /// + /// SD退货运费 + /// + [JsonProperty, Column(DbType = "decimal(18,2)")] + public decimal? SDRefundFreight { get; set; } = 0.00M; + + /// + /// 服务单号 + /// + [JsonProperty, Column(StringLength = 20)] + public string ServiceId { get; set; } + + /// + /// 服务单租备注 + /// + [JsonProperty, Column(StringLength = 100)] + public string ServiceOrderRemark { get; set; } + + /// + /// 服务单处理结果 + /// + [JsonProperty] + public int? ServiceResult { get; set; } + + [JsonProperty, Column(StringLength = 20)] + public string ShopId { get; set; } + + [JsonProperty, Column(StringLength = 50)] + public string SkuId { get; set; } + + /// + /// SKU销售件数 + /// + [JsonProperty] + public int? SkuItemCount { get; set; } + + /// + /// 服务单状态 + /// + [JsonProperty] + public int? Status { get; set; } + + /// + /// 变更时间 + /// + [JsonProperty, Column(DbType = "datetime")] + public DateTime? StatusUpdateTime { get; set; } + + /// + /// 仓储费 + /// + [JsonProperty, Column(DbType = "decimal(18,2)")] + public decimal? StorageAmount { get; set; } = 0.00M; + + /// + /// 服务单物流状态(0=待入库,1=已入库,2=派送中,3=运输中) + /// + [JsonProperty] + public int? TransportDetails { get; set; } + + /// + /// 仓库组备注 + /// + [JsonProperty, Column(StringLength = 100)] + public string WareHouseGrounpRemark { get; set; } + + /// + /// 退货运单号 + /// + [JsonProperty, Column(StringLength = 100)] + public string WaybillNo { get; set; } + + } + +} diff --git a/BBWY.Test/Program.cs b/BBWY.Test/Program.cs index 8b1ea85b..e3c2223a 100644 --- a/BBWY.Test/Program.cs +++ b/BBWY.Test/Program.cs @@ -37,13 +37,13 @@ namespace BBWY.Test var appSecret = "8a42bc2301e8439b896e99f5475e0a9b"; ////0e61c4a8ec3e4df4b5836e10884db9220yth 齐盛 - var token = "2ace3023200c4ea9aa682bbf8bffee18jztm"; //布莱特玩具 + //var token = "2ace3023200c4ea9aa682bbf8bffee18jztm"; //布莱特玩具 //var token = "01f5be2cb4d741dda66bce2356941597mdfm"; //布莱特玩具 token2 //var token = "01dc6f6e7fc34dcd99090d690312556cmdfk"; //齐盛 //var token = "9fffa982da23446fb035499ae5622f49odjk"; //腾奇 //var token = "c22ff4d37b6c4bbd82cd9e8d0dab42dbziyz"; //森王车品 //var token = "44c19a1c1fbd4641957e6e8985ed1358jmtl"; //森王玩具 - //var token = "4a0ddc095e054c7aa90adcaccb14f83cwzgr"; + var token = "4a0ddc095e054c7aa90adcaccb14f83cwzgr"; //可比车品 //var dt1 = DateTime.Now; //List list = new List(); @@ -60,18 +60,19 @@ namespace BBWY.Test var jdClient = GetJdClient(appkey, appSecret); - //var req = new AdsIbgUniversalJosServiceAdQueryRequest(); - //req.businessType = "2"; - //req.isDaily = "true"; - //req.clickOrOrderDay = "0"; - //req.pageSize = "100"; - //req.page = "1"; - //req.clickOrOrderCaliber = "1"; - //req.startDay = "2023-03-10"; - //req.endDay = "2023-03-10"; - //req.giftFlag = "0"; - //req.orderStatusCategory = "1"; - //var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); + var req = new AdsIbgUniversalJosServiceAdQueryRequest(); + req.accessPin = "可比玩具"; + req.businessType = "2"; + req.isDaily = "true"; + req.clickOrOrderDay = "0"; + req.pageSize = "100"; + req.page = "1"; + req.clickOrOrderCaliber = "1"; + req.startDay = "2023-03-10"; + req.endDay = "2023-03-10"; + req.giftFlag = "0"; + req.orderStatusCategory = "1"; + var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); /* @@ -96,11 +97,8 @@ namespace BBWY.Test var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); */ - var req = new PopOrderEnGetRequest(); - req.optionalFields = "orderId,venderId,orderType,payType,orderTotalPrice,orderSellerPrice,orderPayment,freightPrice,orderState,orderStateRemark,orderRemark,orderStartTime,orderEndTime,modified,consigneeInfo,itemInfoList,couponDetailList,taxFee,venderRemark,pin,waybill,storeOrder,storeId,sellerDiscount"; - req.orderId = "261814087672"; - var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); + //var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); Console.WriteLine(JsonConvert.SerializeObject(res));