diff --git a/BBWY.JDSDK/Request/AdsIbgUniversalJosServiceOrderQueryRequest.cs b/BBWY.JDSDK/Request/AdsIbgUniversalJosServiceOrderQueryRequest.cs index 36dfb1c2..e2e4f286 100644 --- a/BBWY.JDSDK/Request/AdsIbgUniversalJosServiceOrderQueryRequest.cs +++ b/BBWY.JDSDK/Request/AdsIbgUniversalJosServiceOrderQueryRequest.cs @@ -6,193 +6,193 @@ namespace Jd.Api.Request { public class AdsIbgUniversalJosServiceOrderQueryRequest : JdRequestBase { - public string - clickStartDay - {get; set;} - - public string - orderType - {get; set;} - - public string - orderStartDay - {get; set;} - - public string - orderStatus - {get; set;} - - public string - pageSize - {get; set;} - - public string - platform - {get; set;} - - public string - adGroupId - {get; set;} - - public string - paymentType - {get; set;} - - public string - activityId - {get; set;} - - public string - mediaGroupId - {get; set;} - - public string - province - {get; set;} - - public string - clickOrOrderDay - {get; set;} - - public string - clickOrOrderCaliber - {get; set;} - - public string - orderEndDay - {get; set;} - - public string - clickEndDay - {get; set;} - - public string - giftFlag - {get; set;} - - public string - campaignId - {get; set;} - - public string - deliveryType - {get; set;} - - public string - mediaType - {get; set;} - - public string - impressionOrClickEffect - {get; set;} - - public string - posPackageId - {get; set;} - - public string - page - {get; set;} - - public string - startDay - {get; set;} - - public string - endDay - {get; set;} - - public string - myself - {get; set;} - - public string - businessType - {get; set;} - - public string - accessPin - {get; set;} - - public string - authType - {get; set;} - - public string - deliverySystemType - {get; set;} - - public string - jdMediaUserId - {get; set;} - - public override string ApiName - { - get{return "jingdong.ads.ibg.UniversalJosService.order.query";} - } - protected override void PrepareParam(IDictionary parameters) - { - parameters.Add("clickStartDay", this. clickStartDay -); - parameters.Add("orderType", this. orderType -); - parameters.Add("orderStartDay", this. orderStartDay -); - parameters.Add("orderStatus", this. orderStatus -); - parameters.Add("pageSize", this. pageSize -); - parameters.Add("platform", this. platform -); - parameters.Add("adGroupId", this. adGroupId -); - parameters.Add("paymentType", this. paymentType -); - parameters.Add("activityId", this. activityId -); - parameters.Add("mediaGroupId", this. mediaGroupId -); - parameters.Add("province", this. province -); - parameters.Add("clickOrOrderDay", this. clickOrOrderDay -); - parameters.Add("clickOrOrderCaliber", this. clickOrOrderCaliber -); - parameters.Add("orderEndDay", this. orderEndDay -); - parameters.Add("clickEndDay", this. clickEndDay -); - parameters.Add("giftFlag", this. giftFlag -); - parameters.Add("campaignId", this. campaignId -); - parameters.Add("deliveryType", this. deliveryType -); - parameters.Add("mediaType", this. mediaType -); - parameters.Add("impressionOrClickEffect", this. impressionOrClickEffect + public string +clickStartDay + { get; set; } + + public string +orderType + { get; set; } + + public string +orderStartDay + { get; set; } + + public string +orderStatus + { get; set; } + + public string +pageSize + { get; set; } + + public string +platform + { get; set; } + + public string +adGroupId + { get; set; } + + public string +paymentType + { get; set; } + + public string +activityId + { get; set; } + + public string +mediaGroupId + { get; set; } + + public string +province + { get; set; } + + public string +clickOrOrderDay + { get; set; } + + public string +clickOrOrderCaliber + { get; set; } + + public string +orderEndDay + { get; set; } + + public string +clickEndDay + { get; set; } + + public string +giftFlag + { get; set; } + + public string +campaignId + { get; set; } + + public string +deliveryType + { get; set; } + + public string +mediaType + { get; set; } + + public string +impressionOrClickEffect + { get; set; } + + public string +posPackageId + { get; set; } + + public string +page + { get; set; } + + public string +startDay + { get; set; } + + public string +endDay + { get; set; } + + public string +myself + { get; set; } + + public string +businessType + { get; set; } + + public string +accessPin + { get; set; } + + public string +authType + { get; set; } + + public string +deliverySystemType + { get; set; } + + public string +jdMediaUserId + { get; set; } + + public override string ApiName + { + get { return "jingdong.ads.ibg.UniversalJosService.order.query"; } + } + protected override void PrepareParam(IDictionary parameters) + { + parameters.Add("clickStartDay", this.clickStartDay +); + parameters.Add("orderType", this.orderType +); + parameters.Add("orderStartDay", this.orderStartDay +); + parameters.Add("orderStatus", this.orderStatus +); + parameters.Add("pageSize", this.pageSize +); + parameters.Add("platform", this.platform +); + parameters.Add("adGroupId", this.adGroupId +); + parameters.Add("paymentType", this.paymentType +); + parameters.Add("activityId", this.activityId +); + parameters.Add("mediaGroupId", this.mediaGroupId ); - parameters.Add("posPackageId", this. posPackageId + parameters.Add("province", this.province ); - parameters.Add("page", this. page + parameters.Add("clickOrOrderDay", this.clickOrOrderDay ); - parameters.Add("startDay", this. startDay + parameters.Add("clickOrOrderCaliber", this.clickOrOrderCaliber ); - parameters.Add("endDay", this. endDay + parameters.Add("orderEndDay", this.orderEndDay ); - parameters.Add("myself", this. myself + parameters.Add("clickEndDay", this.clickEndDay ); - parameters.Add("businessType", this. businessType + parameters.Add("giftFlag", this.giftFlag ); - parameters.Add("accessPin", this. accessPin + parameters.Add("campaignId", this.campaignId ); - parameters.Add("authType", this. authType + parameters.Add("deliveryType", this.deliveryType ); - parameters.Add("deliverySystemType", this. deliverySystemType + parameters.Add("mediaType", this.mediaType ); - parameters.Add("jdMediaUserId", this. jdMediaUserId + parameters.Add("impressionOrClickEffect", this.impressionOrClickEffect ); - } + parameters.Add("posPackageId", this.posPackageId +); + parameters.Add("page", this.page +); + parameters.Add("startDay", this.startDay +); + parameters.Add("endDay", this.endDay +); + parameters.Add("myself", this.myself +); + parameters.Add("businessType", this.businessType +); + parameters.Add("accessPin", this.accessPin +); + parameters.Add("authType", this.authType +); + parameters.Add("deliverySystemType", this.deliverySystemType +); + parameters.Add("jdMediaUserId", this.jdMediaUserId +); + } } } @@ -200,6 +200,6 @@ namespace Jd.Api.Request - - + + diff --git a/BBWY.JDSDK/Request/SellerDeliverySendPromiseTemplateJsfServiceQuerySendTemplateByCategoryRequest.cs b/BBWY.JDSDK/Request/SellerDeliverySendPromiseTemplateJsfServiceQuerySendTemplateByCategoryRequest.cs new file mode 100644 index 00000000..66b62670 --- /dev/null +++ b/BBWY.JDSDK/Request/SellerDeliverySendPromiseTemplateJsfServiceQuerySendTemplateByCategoryRequest.cs @@ -0,0 +1,21 @@ +using BBWY.JDSDK.Response; +using Jd.Api; +using System.Collections.Generic; + +namespace BBWY.JDSDK.Request +{ + public class SellerDeliverySendPromiseTemplateJsfServiceQuerySendTemplateByCategoryRequest : JdRequestBase + { + public override string ApiName => "jingdong.seller.delivery.SendPromiseTemplateJsfService.querySendTemplateByCategory"; + + public int categoryId { get; set; } + + public bool dzSku { get; set; } + + protected override void PrepareParam(IDictionary paramters) + { + paramters.Add("categoryId", this.categoryId); + paramters.Add("dzSku", this.dzSku); + } + } +} diff --git a/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs b/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs index 39107390..96cf0300 100644 --- a/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs +++ b/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs @@ -41,6 +41,8 @@ namespace Jd.Api.Request public string outerId { get; set; } public List multiCateProps { get; set; } + + public int? promiseId { get; set; } } public class SkuWriteUpdateSkusItemSaleAttrs diff --git a/BBWY.JDSDK/Response/SellerDeliverySendPromiseTemplateJsfServiceQuerySendTemplateByCategoryResponse.cs b/BBWY.JDSDK/Response/SellerDeliverySendPromiseTemplateJsfServiceQuerySendTemplateByCategoryResponse.cs new file mode 100644 index 00000000..aa9eaabf --- /dev/null +++ b/BBWY.JDSDK/Response/SellerDeliverySendPromiseTemplateJsfServiceQuerySendTemplateByCategoryResponse.cs @@ -0,0 +1,11 @@ +using Jd.Api; +using System; +using System.Collections.Generic; +using System.Text; + +namespace BBWY.JDSDK.Response +{ + public class SellerDeliverySendPromiseTemplateJsfServiceQuerySendTemplateByCategoryResponse: JdResponse + { + } +} diff --git a/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs b/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs index 01c1a1bf..0e100438 100644 --- a/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs +++ b/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs @@ -654,7 +654,7 @@ namespace BBWY.Server.Business MainProductSpu = promotionTask.MainProductSpu, HaveGiftTemplate = promotionTask.GiftTemplateId != null && promotionTask.GiftTemplateId != 0, DeleteGiftSkuList = startResponse.DeleteGiftSkuList - }, GetYunDingRequestHeader(), HttpMethod.Post, timeOutSeconds: 150); + }, GetYunDingRequestHeader(), HttpMethod.Post, timeOutSeconds: 300); var errorBack = new Action((id, errorMsg) => { diff --git a/BBWY.Server.Business/PlatformSDK/JDBusiness.cs b/BBWY.Server.Business/PlatformSDK/JDBusiness.cs index 0f42c6d3..8b3effa0 100644 --- a/BBWY.Server.Business/PlatformSDK/JDBusiness.cs +++ b/BBWY.Server.Business/PlatformSDK/JDBusiness.cs @@ -1,5 +1,6 @@ using BBWY.Common.Extensions; using BBWY.Common.Models; +using BBWY.JDSDK.Request; using BBWY.Server.Model; using BBWY.Server.Model.Dto; using Jd.ACES; @@ -967,6 +968,9 @@ namespace BBWY.Server.Business var response = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); if (response.Json == null) response.Json = JObject.Parse(response.Body); + + nLogManager.Default().Info($"获取销售属性 任务Id {request.Id} 返回内容 {response.Body} 模板sku数量 {request.GiftTemplateSkuList.Count()}"); + var colorProperty = response.Json["jingdong_category_read_findAttrsByCategoryIdUnlimitCate_responce"]["findattrsbycategoryidunlimitcate_result"].FirstOrDefault(j => j["attrValueList"] != null && j["attrValueList"].Count() > 0); if (colorProperty == null) { @@ -999,15 +1003,16 @@ namespace BBWY.Server.Business barCode = request.MainProductBarCode, outerId = $"{request.OuterId}{(i + 1).ToString().PadLeft(3, '0')}", saleAttrs = new List() - { - new SkuWriteUpdateSkusItemSaleAttrs() { - type = "com.jd.pop.ware.ic.api.domain.Prop", - attrId = colorProperty.Value("attId"), - attrValues = new List() { colorProperty.Value("id") }, - index = takeColorIndex + new SkuWriteUpdateSkusItemSaleAttrs() + { + type = "com.jd.pop.ware.ic.api.domain.Prop", + attrId = colorProperty.Value("attId"), + attrValues = new List() { colorProperty.Value("id") }, + index = takeColorIndex + } } - } + //promiseId = 30603710 //固定时效模板Id 48小时发货 }; p.multiCateProps = new List(); @@ -1065,14 +1070,52 @@ namespace BBWY.Server.Business res.Json = JObject.Parse(res.Body); if (res.IsError) { - RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, null, request.MainProductSpu, request.FullTitle, brandName, false); + var errorMsg = res.Body.Contains("en_desc") ? + res.Json["error_response"].Value("en_desc") : + (string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg); + if (errorMsg.Contains("此类目发货时效必填")) + { + int? promiseId = null; + #region 查询时效模板 + { + var shixiaoReq = new SellerDeliverySendPromiseTemplateJsfServiceQuerySendTemplateByCategoryRequest(); + shixiaoReq.categoryId = int.Parse(request.MainProductCategoryId); + shixiaoReq.dzSku = true; + var shixiaoRes = jdClient.Execute(shixiaoReq, request.AppToken, DateTime.Now.ToLocalTime()); + if (shixiaoRes.IsError) + { + RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, null, request.MainProductSpu, request.FullTitle, brandName, false); + throw new BusinessException($"查询时效模板失败-{(string.IsNullOrEmpty(shixiaoRes.ErrorMsg) ? shixiaoRes.ErrMsg : shixiaoRes.ErrorMsg)}"); + } + if (shixiaoRes.Json == null) + shixiaoRes.Json = JObject.Parse(shixiaoRes.Body); + var shixiaoJToken = shixiaoRes.Json["jingdong_seller_delivery_SendPromiseTemplateJsfService_querySendTemplateByCategory_responce"]["returnType"]["bizResponse"]["promiseTemplateDtoList"].Children().FirstOrDefault(); + if (shixiaoJToken == null) + { + RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, null, request.MainProductSpu, request.FullTitle, brandName, false); + throw new BusinessException($"查询时效模板失败-未查询到时效模板"); + } + promiseId = shixiaoJToken.Value("templateId"); + } + #endregion - if (res.Body.Contains("en_desc")) - throw new BusinessException($"上架sku失败-{res.Json["error_response"].Value("en_desc")}"); + foreach (var skuParam in req.skus) + skuParam.promiseId = promiseId; + res = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); + if (res.IsError) + { + errorMsg = res.Body.Contains("en_desc") ? + res.Json["error_response"].Value("en_desc") : + (string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg); + RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, null, request.MainProductSpu, request.FullTitle, brandName, false); + throw new BusinessException($"上架sku失败-{errorMsg}"); + } + } else - throw new BusinessException($"上架sku失败-{(string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg)}"); - - /*{"error_response":{"code":"501","en_desc":"com.jd.bk.saf.exception.SafJosException:京东价超出该类目允许范围:12.15-39437元!#821c1c3b382f476abeb21f1f515274c7(Solution reference: https://jos.jd.com/commondoc?listId=171)","zh_desc":"调用参数错误(解决方案参考: https://jos.jd.com/commondoc?listId=171)"}}*/ + { + RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, null, request.MainProductSpu, request.FullTitle, brandName, false); + throw new BusinessException($"上架sku失败-{errorMsg}"); + } } var newSkuList = res.Json["jingdong_sku_write_updateSkus_responce"]["skuList"].ToList().Select(x => x.Value("skuId")).ToList(); @@ -1249,7 +1292,7 @@ namespace BBWY.Server.Business public override void StartJDPromotionDelayTask(StartPromotionTaskDelayRequest request) { - Thread.Sleep(30 * 1000); + Thread.Sleep(60 * 1000); try { CheckJDPromotionTask(request.JDPromotionId, request.AppKey, request.AppSecret, request.AppToken); diff --git a/BBWY.Server.Business/PurchaseOrderV2/BatchPurchase/BatchPurchaseBusiness.cs b/BBWY.Server.Business/PurchaseOrderV2/BatchPurchase/BatchPurchaseBusiness.cs index 7e4cdc4b..cf016e71 100644 --- a/BBWY.Server.Business/PurchaseOrderV2/BatchPurchase/BatchPurchaseBusiness.cs +++ b/BBWY.Server.Business/PurchaseOrderV2/BatchPurchase/BatchPurchaseBusiness.cs @@ -1047,27 +1047,29 @@ namespace BBWY.Server.Business var platformSDKBusiness = platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform); var payOrderResponse = platformSDKBusiness.CancelPurchaseOrder(request); - if (payOrderResponse.Success)//取消成功 + if (!payOrderResponse.Success)//取消成功 { - //var order = fsql.Select().Where(p => p.Id == request.OrderId).ToOne(); - fsql.Update(request.OrderId) - .Set(po => po.OrderState, Enums.PurchaseOrderState.已取消) - .ExecuteAffrows(); - try - { - var qikuResponse = restApiService.SendRequest("http://qiku.qiyue666.com/", - $"/api/PackPurchaseTask/CancelOrderPackTask?orderId={request.OrderId}", - null, - null, - HttpMethod.Post); - if (qikuResponse.StatusCode != System.Net.HttpStatusCode.OK) - throw new Exception(qikuResponse.Content); - } - catch (Exception ex) - { - nLogManager.GetLogger($"取消打包任务-{request.OrderId}").Error(ex, JsonConvert.SerializeObject(request)); - } + if (!payOrderResponse.Msg.Contains("订单已删除")) + throw new BusinessException(payOrderResponse.Msg); + } + //var order = fsql.Select().Where(p => p.Id == request.OrderId).ToOne(); + fsql.Update(request.OrderId) + .Set(po => po.OrderState, Enums.PurchaseOrderState.已取消) + .ExecuteAffrows(); + try + { + var qikuResponse = restApiService.SendRequest("http://qiku.qiyue666.com/", + $"/api/PackPurchaseTask/CancelOrderPackTask?orderId={request.OrderId}", + null, + null, + HttpMethod.Post); + if (qikuResponse.StatusCode != System.Net.HttpStatusCode.OK) + throw new Exception(qikuResponse.Content); + } + catch (Exception ex) + { + nLogManager.GetLogger($"取消打包任务-{request.OrderId}").Error(ex, JsonConvert.SerializeObject(request)); } } diff --git a/BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrderV2.cs b/BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrderV2.cs index 16c56e69..a871eb2f 100644 --- a/BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrderV2.cs +++ b/BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrderV2.cs @@ -174,7 +174,7 @@ namespace BBWY.Server.Model.Db /// /// 备注信息 /// - + [Column(StringLength = 1000)] public string Remark { get; set; } /// diff --git a/BBWY.Test/BBWY.Test.csproj b/BBWY.Test/BBWY.Test.csproj index 697cb8ee..bd90d253 100644 --- a/BBWY.Test/BBWY.Test.csproj +++ b/BBWY.Test/BBWY.Test.csproj @@ -5,10 +5,23 @@ netcoreapp3.1 + + + + + + + PreserveNewest + true + PreserveNewest + + + + diff --git a/BBWY.Test/NLog.config b/BBWY.Test/NLog.config new file mode 100644 index 00000000..8405deac --- /dev/null +++ b/BBWY.Test/NLog.config @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/BBWY.Test/Program.cs b/BBWY.Test/Program.cs index b0c69686..0197f527 100644 --- a/BBWY.Test/Program.cs +++ b/BBWY.Test/Program.cs @@ -1,5 +1,6 @@ using BBWY._1688SDK.entity.Order; using BBWY.Common.Models; +using BBWY.Server.Business; using com.alibaba.openapi.client; using com.alibaba.openapi.client.policy; using Jd.Api; @@ -63,50 +64,11 @@ namespace BBWY.Test { - var request = new { AppKey = "1074007", AppSecret = "0r9u4Fc9zK", AppToken = "8093fdc5-6adc-46c7-b640-87218c1dcccd" }; - 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 - { - Name = "alibaba.trade.pay.protocolPay.preparePay", - NamespaceValue = "com.alibaba.trade", - Version = 1 - }; - _request.ApiId = apiId; - - //var param = new - //{ - // orderId = 3494275885416167358 - //}; - - //var param = new tradeWithholdPreparePayParam() - //{ - // orderId = 3494275885416167358 - //}; - - var param = new - { - tradeWithholdPreparePayParam = new - { - orderId = 3494275885416167358 - } - }; - _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 BusinessException(result.Value("message")); - - Console.WriteLine(JsonConvert.SerializeObject(result)); + var nNogManager = new NLogManager(); + var pid = Process.GetCurrentProcess().Id; + var message = $"{pid}-{Guid.NewGuid()}"; + Console.WriteLine(message); + nNogManager.GetLogger(pid.ToString()).Info(message); } Console.ReadKey(); diff --git a/BBWY.Test/Properties/NLogManager.cs b/BBWY.Test/Properties/NLogManager.cs new file mode 100644 index 00000000..9da4b3f5 --- /dev/null +++ b/BBWY.Test/Properties/NLogManager.cs @@ -0,0 +1,35 @@ +using NLog; +using System.Collections.Concurrent; +using System.Collections.Generic; + +namespace BBWY.Server.Business +{ + public class NLogManager + { + private ConcurrentDictionary loggerDictionary; + private string defaultLoggerName = "default"; + + public NLogManager() + { + loggerDictionary = new ConcurrentDictionary(); + loggerDictionary.TryAdd("default", NLog.LogManager.GetLogger(defaultLoggerName)); + } + + public ILogger Default() + { + return loggerDictionary[defaultLoggerName]; + } + + public ILogger GetLogger(string loggerName) + { + if (string.IsNullOrEmpty(loggerName)) + return Default(); + if (!loggerDictionary.TryGetValue(loggerName, out ILogger logger)) + { + logger = NLog.LogManager.GetLogger(loggerName); + loggerDictionary.TryAdd(loggerName, logger); + } + return logger; + } + } +}