shanji 2 years ago
parent
commit
46bf3ab705
  1. 9
      BBWY.Client/ViewModels/Order/OrderListViewModel.cs
  2. 2
      BBWY.Client/Views/MainWindow.xaml
  3. 2
      BBWY.Server.API/Controllers/YunDingController.cs
  4. 12
      BBWY.Server.API/Startup.cs
  5. 4
      BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs
  6. 112
      BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs
  7. 11
      BBWY.Server.Business/Order/OrderBusiness.cs
  8. 95
      BBWY.Server.Business/PlatformSDK/JDBusiness.cs
  9. 2
      BBWY.Server.Business/Sync/OrderSyncBusiness.cs
  10. 19
      BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs
  11. 55
      BBWY.Test/Program.cs

9
BBWY.Client/ViewModels/Order/OrderListViewModel.cs

@ -320,6 +320,15 @@ namespace BBWY.Client.ViewModels
return; return;
} }
if (OrderState == Models.OrderState. && order.StorageType == null)
{
IsLoading = false;
Application.Current.Dispatcher.Invoke(() =>
{
OrderList.Remove(order);
});
}
var orderResponse = orderService.GetOrderById(orderId); var orderResponse = orderService.GetOrderById(orderId);
IsLoading = false; IsLoading = false;
if (!orderResponse.Success) if (!orderResponse.Success)

2
BBWY.Client/Views/MainWindow.xaml

@ -26,7 +26,7 @@
<!--<TextBlock Text="{Binding GlobalContext.User.TeamName}" Margin="5,0,0,0"/> <!--<TextBlock Text="{Binding GlobalContext.User.TeamName}" Margin="5,0,0,0"/>
<TextBlock Text="{Binding GlobalContext.User.Shop.Platform}" Margin="5,0,0,0"/>--> <TextBlock Text="{Binding GlobalContext.User.Shop.Platform}" Margin="5,0,0,0"/>-->
<TextBlock Text="{Binding GlobalContext.User.Shop.ShopName}" Margin="5,0,0,0"/> <TextBlock Text="{Binding GlobalContext.User.Shop.ShopName}" Margin="5,0,0,0"/>
<TextBlock Text="v10077" Margin="5,0,0,0"/> <TextBlock Text="v10079" Margin="5,0,0,0"/>
</StackPanel> </StackPanel>
</Border> </Border>
<Grid Grid.Row="1"> <Grid Grid.Row="1">

2
BBWY.Server.API/Controllers/YunDingController.cs

@ -20,7 +20,7 @@ namespace BBWY.Server.API.Controllers
[HttpGet] [HttpGet]
public void CreateKey() public void CreateKey()
{ {
yunDingBusiness.CreateKey(); //yunDingBusiness.CreateKey();
} }
} }
} }

12
BBWY.Server.API/Startup.cs

@ -138,12 +138,12 @@ namespace BBWY.Server.API
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, YunDingBusiness yunDingBusiness) public void Configure(IApplicationBuilder app, IWebHostEnvironment env, YunDingBusiness yunDingBusiness)
{ {
yunDingBusiness.RefreshKey(); yunDingBusiness.RefreshKey();
app.UseSwagger(c => c.SerializeAsV2 = true) //app.UseSwagger(c => c.SerializeAsV2 = true)
.UseSwaggerUI(c => // .UseSwaggerUI(c =>
{ // {
c.SwaggerEndpoint("/swagger/v1/swagger.json", "BBWY API"); // c.SwaggerEndpoint("/swagger/v1/swagger.json", "BBWY API");
c.RoutePrefix = string.Empty; // c.RoutePrefix = string.Empty;
}); // });
//if (env.IsDevelopment()) //if (env.IsDevelopment())
//{ //{

4
BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs

@ -1,5 +1,4 @@
using BBWY.Common.Extensions; using BBWY.Common.Http;
using BBWY.Common.Http;
using BBWY.Common.Models; using BBWY.Common.Models;
using BBWY.Server.Model; using BBWY.Server.Model;
using BBWY.Server.Model.Db; using BBWY.Server.Model.Db;
@ -11,7 +10,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Security.Cryptography;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;

112
BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs

@ -7,6 +7,7 @@ using BBWY.Server.Model.Dto;
using FreeSql; using FreeSql;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -517,7 +518,61 @@ namespace BBWY.Server.Business
if (!string.IsNullOrEmpty(dbPromotionTask.MainProductSku)) if (!string.IsNullOrEmpty(dbPromotionTask.MainProductSku))
CheckRepeatSkuInRuningTask(runingTaskList, dbPromotionTask.MainProductSku); CheckRepeatSkuInRuningTask(runingTaskList, dbPromotionTask.MainProductSku);
var host = GetPlatformRelayAPIHost(Enums.Platform.); var host = GetPlatformRelayAPIHost(Enums.Platform.);
var haveGiftTemplateSku = giftTemplateSkuList != null && giftTemplateSkuList.Count() > 0;
string barCode = string.Empty, categoryId = string.Empty;
IList<JToken> multiCateProps = null;
var mainProductSkuInStore = false;
if (haveGiftTemplateSku)
{
var mainSkuResult = restApiService.SendRequest(host, "api/PlatformSDK/GetProductSkuList", new SearchProductSkuRequest()
{
AppKey = request.AppKey,
AppSecret = request.AppSecret,
AppToken = request.AppToken,
IsContainSource = true,
Platform = request.Platform,
Spu = dbPromotionTask.MainProductSpu
}, GetYunDingRequestHeader(), HttpMethod.Post);
if (mainSkuResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new BusinessException($"获取主商品sku失败 {mainSkuResult.Content}");
var mainSkuListResponse = JsonConvert.DeserializeObject<ApiResponse<IList<ProductSkuResponse>>>(mainSkuResult.Content);
if (!mainSkuListResponse.Success)
throw new BusinessException($"获取主商品sku失败 {mainSkuListResponse.Msg}");
barCode = mainSkuListResponse.Data[0].Source.Value<string>("barCode");
categoryId = mainSkuListResponse.Data[0].Source.Value<string>("categoryId");
multiCateProps = mainSkuListResponse.Data[0].Source["multiCateProps"] != null ? mainSkuListResponse.Data[0].Source["multiCateProps"].ToList() : null;
var jyStoreIdList = fsql.Select<Storehouse>().Where(s => s.Type == Enums.StockType. || s.Name.Contains("云仓")).ToList(s => s.Id);
foreach (var sku in mainSkuListResponse.Data)
{
var stockNumApiResult = restApiService.SendRequest(host, "api/platformsdk/GetStockNumBySku", new SearchProductSkuRequest()
{
AppKey = shop.AppKey,
AppSecret = shop.AppSecret,
AppToken = shop.AppToken,
Platform = shop.PlatformId,
Sku = sku.Id
}, GetYunDingRequestHeader(), HttpMethod.Post);
if (stockNumApiResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception($"{sku} {stockNumApiResult.Content}");
var stockNumListResponse = JsonConvert.DeserializeObject<ApiResponse<JArray>>(stockNumApiResult.Content);
var skuStockNumList = stockNumListResponse.Data.Select(j => new
{
StockNum = j.Value<int>("stockNum"),
StoreId = j.Value<string>("storeId"),
SkuId = sku
});
mainProductSkuInStore = skuStockNumList.Any(s => jyStoreIdList.Contains(s.StoreId));
if (mainProductSkuInStore)
break;
}
}
var httpApiResult = restApiService.SendRequest(host, "api/PlatformSDK/StartJDPromotionTask", new StartPromotionTaskRequest2() var httpApiResult = restApiService.SendRequest(host, "api/PlatformSDK/StartJDPromotionTask", new StartPromotionTaskRequest2()
{ {
Id = dbPromotionTask.Id, Id = dbPromotionTask.Id,
@ -534,7 +589,13 @@ namespace BBWY.Server.Business
CustomMotherSku = dbPromotionTask.CustomMotherSku, CustomMotherSku = dbPromotionTask.CustomMotherSku,
MainProductSpu = dbPromotionTask.MainProductSpu, MainProductSpu = dbPromotionTask.MainProductSpu,
Platform = Enums.Platform., Platform = Enums.Platform.,
ShopId = dbPromotionTask.ShopId.Value ShopId = dbPromotionTask.ShopId.Value,
TaskCount = dbPromotionTask.TaskCount,
MainProductBarCode = barCode,
MainProductCategoryId = categoryId,
MainProductMultiCateProps = multiCateProps,
MainProductSkuInStore = mainProductSkuInStore
}, GetYunDingRequestHeader(), HttpMethod.Post); }, GetYunDingRequestHeader(), HttpMethod.Post);
if (httpApiResult.StatusCode != System.Net.HttpStatusCode.OK) if (httpApiResult.StatusCode != System.Net.HttpStatusCode.OK)
@ -550,6 +611,13 @@ namespace BBWY.Server.Business
startResponse.DeleteGiftSkuList.Count() != 0) startResponse.DeleteGiftSkuList.Count() != 0)
dbPromotionTask.GiftTemplatePutNewSku = string.Join(",", startResponse.DeleteGiftSkuList); dbPromotionTask.GiftTemplatePutNewSku = string.Join(",", startResponse.DeleteGiftSkuList);
try
{
if (!string.IsNullOrEmpty(shop.PJZSDingDingKey) && !string.IsNullOrEmpty(shop.PJZSDingDingWebHook))
dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"任务[{dbPromotionTask.ActivityName}]已开始");
}
catch { }
fsql.Update<PromotionTask>(request.Id).Set(pt => pt.PromotionId, startResponse.JDPromotionId) fsql.Update<PromotionTask>(request.Id).Set(pt => pt.PromotionId, startResponse.JDPromotionId)
.SetIf(!string.IsNullOrEmpty(dbPromotionTask.GiftTemplatePutNewSku), pt => pt.GiftTemplatePutNewSku, dbPromotionTask.GiftTemplatePutNewSku) .SetIf(!string.IsNullOrEmpty(dbPromotionTask.GiftTemplatePutNewSku), pt => pt.GiftTemplatePutNewSku, dbPromotionTask.GiftTemplatePutNewSku)
.Set(pt => pt.StartTime, DateTime.Now) .Set(pt => pt.StartTime, DateTime.Now)
@ -827,7 +895,7 @@ namespace BBWY.Server.Business
List<IUpdate<PromotionTask>> updatePromotionTaskList = new List<IUpdate<PromotionTask>>(); List<IUpdate<PromotionTask>> updatePromotionTaskList = new List<IUpdate<PromotionTask>>();
List<PromotionTaskSkuRecord> insertPromotionTaskSkuRecordList = new List<PromotionTaskSkuRecord>(); List<PromotionTaskSkuRecord> insertPromotionTaskSkuRecordList = new List<PromotionTaskSkuRecord>();
IList<long> jobDoneTaskIdList = new List<long>(); IList<long> jobDoneTaskIdList = new List<long>();
IList<PromotionTask> jobDoneTaskList = new List<PromotionTask>();
foreach (var promotionTask in runningTaskList) foreach (var promotionTask in runningTaskList)
{ {
var productSkuList = new List<string>(); var productSkuList = new List<string>();
@ -915,23 +983,24 @@ namespace BBWY.Server.Business
GetYunDingRequestHeader(), GetYunDingRequestHeader(),
HttpMethod.Post); HttpMethod.Post);
if (httpResult.StatusCode != System.Net.HttpStatusCode.OK) //if (httpResult.StatusCode != System.Net.HttpStatusCode.OK)
{ //{
Error(shop, loggerName, $"监控任务-暂停京东活动-任务Id {promotionTask.Id}", new Exception(httpResult.Content)); // Error(shop, loggerName, $"监控任务-暂停京东活动-任务Id {promotionTask.Id}", new Exception(httpResult.Content));
} //}
else //else
{ //{
var response = JsonConvert.DeserializeObject<ApiResponse>(httpResult.Content); // var response = JsonConvert.DeserializeObject<ApiResponse>(httpResult.Content);
if (!response.Success) // if (!response.Success)
{ // {
Error(shop, loggerName, $"监控任务-暂停京东活动-任务Id {promotionTask.Id}", new Exception(response.Msg)); // Error(shop, loggerName, $"监控任务-暂停京东活动-任务Id {promotionTask.Id}", new Exception(response.Msg));
} // }
} //}
} }
#endregion #endregion
} }
jobDoneTaskIdList.Add(promotionTask.Id); //记录完成任务 jobDoneTaskIdList.Add(promotionTask.Id); //记录完成任务
jobDoneTaskList.Add(promotionTask);
} }
} }
} }
@ -945,6 +1014,21 @@ namespace BBWY.Server.Business
fsql.Insert(insertPromotionTaskSkuRecordList).ExecuteAffrows(); fsql.Insert(insertPromotionTaskSkuRecordList).ExecuteAffrows();
}); });
#region 钉钉通知结束
if (!string.IsNullOrEmpty(shop.PJZSDingDingKey) && !string.IsNullOrEmpty(shop.PJZSDingDingWebHook))
{
foreach (var jobDoneTask in jobDoneTaskList)
{
try
{
dingDingBusiness.SendDingDingBotMessage(shop.PJZSDingDingKey, shop.PJZSDingDingWebHook, $"任务[{jobDoneTask.ActivityName}]已结束");
}
catch { }
}
}
#endregion
#region 开始后续任务 #region 开始后续任务
//下一轮开始任务 //下一轮开始任务
if (jobDoneTaskIdList.Count() > 0) if (jobDoneTaskIdList.Count() > 0)

11
BBWY.Server.Business/Order/OrderBusiness.cs

@ -462,7 +462,9 @@ namespace BBWY.Server.Business
List<OrderCostDetail> insertOrderCostDetailList = new List<OrderCostDetail>(); List<OrderCostDetail> insertOrderCostDetailList = new List<OrderCostDetail>();
if (autoCalculationCostRequest.IsSetStorageType) if (autoCalculationCostRequest.IsSetStorageType)
orderUpdate = fsql.Update<Order>(autoCalculationCostRequest.OrderId).Set(o => o.StorageType, autoCalculationCostRequest.StorageType); orderUpdate = fsql.Update<Order>(autoCalculationCostRequest.OrderId)
.Set(o => o.StorageType, autoCalculationCostRequest.StorageType)
.SetIf(dbOrder.OrderState == Enums.OrderState., o => o.OrderState, Enums.OrderState.);
var orderCostPurchaseAmount = 0M; var orderCostPurchaseAmount = 0M;
var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价 var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价
@ -610,7 +612,9 @@ namespace BBWY.Server.Business
var dbAfterSaleOrderList = fsql.Select<AfterSaleOrder>().Where(aso => aso.OrderId == manualCalculationCostRequest.OrderId).ToList(); var dbAfterSaleOrderList = fsql.Select<AfterSaleOrder>().Where(aso => aso.OrderId == manualCalculationCostRequest.OrderId).ToList();
if (manualCalculationCostRequest.IsSetStorageType) if (manualCalculationCostRequest.IsSetStorageType)
orderUpdate = fsql.Update<Order>(manualCalculationCostRequest.OrderId).Set(o => o.StorageType, manualCalculationCostRequest.StorageType); orderUpdate = fsql.Update<Order>(manualCalculationCostRequest.OrderId)
.Set(o => o.StorageType, manualCalculationCostRequest.StorageType)
.SetIf(dbOrder.OrderState == Enums.OrderState., o => o.OrderState, Enums.OrderState.);
insertOrderCostDetailList.AddRange(manualCalculationCostRequest.OrderCostDetailList.Map<IList<OrderCostDetail>>()); insertOrderCostDetailList.AddRange(manualCalculationCostRequest.OrderCostDetailList.Map<IList<OrderCostDetail>>());
foreach (var orderCostDetail in insertOrderCostDetailList) foreach (var orderCostDetail in insertOrderCostDetailList)
@ -727,7 +731,8 @@ namespace BBWY.Server.Business
.Set(o => o.SDOperator, sdCalculationCostRequest.SDOperator) .Set(o => o.SDOperator, sdCalculationCostRequest.SDOperator)
.SetIf(sdCalculationCostRequest.SDPayChannel != null, o => o.SDPayChannel, sdCalculationCostRequest.SDPayChannel); .SetIf(sdCalculationCostRequest.SDPayChannel != null, o => o.SDPayChannel, sdCalculationCostRequest.SDPayChannel);
if (sdCalculationCostRequest.IsSetStorageType) if (sdCalculationCostRequest.IsSetStorageType)
orderUpdate = orderUpdate.Set(o => o.StorageType, Enums.StorageType.SD); orderUpdate = orderUpdate.Set(o => o.StorageType, Enums.StorageType.SD)
.SetIf(dbOrder.OrderState == Enums.OrderState., o => o.OrderState, Enums.OrderState.);
var orderCost = fsql.Select<OrderCost>(sdCalculationCostRequest.OrderId).ToOne(); var orderCost = fsql.Select<OrderCost>(sdCalculationCostRequest.OrderId).ToOne();
if (orderCost == null) if (orderCost == null)

95
BBWY.Server.Business/PlatformSDK/JDBusiness.cs

@ -174,7 +174,9 @@ namespace BBWY.Server.Business
!string.IsNullOrEmpty(searchProductSkuRequest.Sku) && !string.IsNullOrEmpty(searchProductSkuRequest.Sku) &&
skuIdList.Count() != skuList.Count()) skuIdList.Count() != skuList.Count())
{ {
throw new BusinessException($"{searchProductSkuRequest.CheckStep}-sku条件数量和查询结果数量不一致"); var targetSkuIdList = skuList.Select(s => s.Id);
var exceptSkuIdList = skuIdList.Except(targetSkuIdList);
throw new BusinessException($"{searchProductSkuRequest.CheckStep}-sku条件数量和查询结果数量不一致\r\n{string.Join(",", exceptSkuIdList)}");
} }
return skuList; return skuList;
@ -256,6 +258,8 @@ namespace BBWY.Server.Business
} }
else if (searchOrderRequest.JDColType == "0") else if (searchOrderRequest.JDColType == "0")
{ {
var pageIndex = 1;
var pageSize = 100;
var sopReq = new PopOrderEnSearchRequest(); var sopReq = new PopOrderEnSearchRequest();
if (searchOrderRequest.StartDate != null) if (searchOrderRequest.StartDate != null)
sopReq.startDate = searchOrderRequest.StartDate.Value.ToString("yyyy-MM-dd HH:mm:ss"); sopReq.startDate = searchOrderRequest.StartDate.Value.ToString("yyyy-MM-dd HH:mm:ss");
@ -271,13 +275,16 @@ namespace BBWY.Server.Business
sopReq.orderState = searchOrderRequest.OrderState; //待转换 sopReq.orderState = searchOrderRequest.OrderState; //待转换
} }
sopReq.optionalFields = searchFields; sopReq.optionalFields = searchFields;
sopReq.page = searchOrderRequest.PageIndex.ToString(); //sopReq.page = searchOrderRequest.PageIndex.ToString();
sopReq.pageSize = searchOrderRequest.PageSize.ToString(); sopReq.pageSize = pageSize.ToString();
sopReq.sortType = "1"; sopReq.sortType = "1";
if (searchOrderRequest.SortTimeType != null) if (searchOrderRequest.SortTimeType != null)
sopReq.dateType = ((int)searchOrderRequest.SortTimeType).ToString(); sopReq.dateType = ((int)searchOrderRequest.SortTimeType).ToString();
//sopReq.dateType = "";
while (true)
{
sopReq.page = pageIndex.ToString();
var sopResponse = jdClient.Execute(sopReq, searchOrderRequest.AppToken, DateTime.Now.ToLocalTime()); var sopResponse = jdClient.Execute(sopReq, searchOrderRequest.AppToken, DateTime.Now.ToLocalTime());
if (searchOrderRequest.SaveResponseLog) if (searchOrderRequest.SaveResponseLog)
nLogManager.Default().Info($"sopRequest\r\n{JsonConvert.SerializeObject(searchOrderRequest)} \r\nsopResponse\r\n{JsonConvert.SerializeObject(sopResponse)}"); nLogManager.Default().Info($"sopRequest\r\n{JsonConvert.SerializeObject(searchOrderRequest)} \r\nsopResponse\r\n{JsonConvert.SerializeObject(sopResponse)}");
@ -288,7 +295,12 @@ namespace BBWY.Server.Business
sopResponse.Json = JObject.Parse(sopResponse.Body); sopResponse.Json = JObject.Parse(sopResponse.Body);
//orderCount = sopResponse.Json["jingdong_pop_order_enSearch_responce"]["searchorderinfo_result"].Value<int>("orderTotal"); //orderCount = sopResponse.Json["jingdong_pop_order_enSearch_responce"]["searchorderinfo_result"].Value<int>("orderTotal");
orderJtokens.AddRange((JArray)sopResponse.Json["jingdong_pop_order_enSearch_responce"]["searchorderinfo_result"]["orderInfoList"]); var orderJarray = (JArray)sopResponse.Json["jingdong_pop_order_enSearch_responce"]["searchorderinfo_result"]["orderInfoList"];
orderJtokens.AddRange(orderJarray);
if (orderJarray.Count() < pageSize)
break;
pageIndex++;
}
} }
} }
else else
@ -739,8 +751,9 @@ namespace BBWY.Server.Business
/// <param name="promotionId"></param> /// <param name="promotionId"></param>
/// <param name="skuList"></param> /// <param name="skuList"></param>
/// <param name="isGift"></param> /// <param name="isGift"></param>
/// <param name="taskCount"></param>
/// <exception cref="BusinessException"></exception> /// <exception cref="BusinessException"></exception>
private void AddJDPromotionSku(IJdClient jdClient, string token, long promotionId, IList<ProductSkuResponse> skuList, bool isGift) private void AddJDPromotionSku(IJdClient jdClient, string token, long promotionId, IList<ProductSkuResponse> skuList, bool isGift, int taskCount)
{ {
var req = new SellerPromotionSkuAddRequest(); var req = new SellerPromotionSkuAddRequest();
req.promoId = promotionId; req.promoId = promotionId;
@ -763,7 +776,7 @@ namespace BBWY.Server.Business
req.skuIds = $"{req.skuIds}{sku.Id},"; req.skuIds = $"{req.skuIds}{sku.Id},";
req.jdPrices = $"{req.jdPrices}{sku.Price},"; req.jdPrices = $"{req.jdPrices}{sku.Price},";
req.bindType = $"{req.bindType}{(isGift ? 2 : 1)},"; req.bindType = $"{req.bindType}{(isGift ? 2 : 1)},";
req.num = $"{req.num}{(isGift ? 1 : 100)},"; req.num = $"{req.num}{(isGift ? 1 : taskCount)},";
req.promoPrices = $"{req.promoPrices}{(isGift ? 0 : sku.Price)},"; req.promoPrices = $"{req.promoPrices}{(isGift ? 0 : sku.Price)},";
} }
@ -893,36 +906,36 @@ namespace BBWY.Server.Business
if (haveGiftTemplateSku) if (haveGiftTemplateSku)
{ {
#region 上架赠品 #region 上架赠品
string barCode = string.Empty, categoryId = string.Empty; //string barCode = string.Empty, categoryId = string.Empty;
IList<JToken> multiCateProps = null; //IList<JToken> multiCateProps = null;
#region 获取主商品sku信息 barCode,categoryId,multiCateProps //#region 获取主商品sku信息 barCode,categoryId,multiCateProps
{ //{
stepText = "获取主商品sku信息"; // stepText = "获取主商品sku信息";
var mainSkuList = GetProductSkuList(new SearchProductSkuRequest() // var mainSkuList = GetProductSkuList(new SearchProductSkuRequest()
{ // {
AppKey = request.AppKey, // AppKey = request.AppKey,
AppSecret = request.AppSecret, // AppSecret = request.AppSecret,
AppToken = request.AppToken, // AppToken = request.AppToken,
IsContainSource = true, // IsContainSource = true,
Platform = request.Platform, // Platform = request.Platform,
Spu = request.MainProductSpu // Spu = request.MainProductSpu
}); // });
if (mainSkuList.Count() == 0) // if (mainSkuList.Count() == 0)
throw new BusinessException($"获取主商品sku信息-未查询到sku信息"); // throw new BusinessException($"获取主商品sku信息-未查询到sku信息");
barCode = mainSkuList[0].Source.Value<string>("barCode"); // barCode = mainSkuList[0].Source.Value<string>("barCode");
categoryId = mainSkuList[0].Source.Value<string>("categoryId"); // categoryId = mainSkuList[0].Source.Value<string>("categoryId");
multiCateProps = mainSkuList[0].Source["multiCateProps"] != null ? mainSkuList[0].Source["multiCateProps"].ToList() : null; // multiCateProps = mainSkuList[0].Source["multiCateProps"] != null ? mainSkuList[0].Source["multiCateProps"].ToList() : null;
} //}
#endregion //#endregion
#region 获取销售属性 #region 获取销售属性
stepText = "获取销售属性"; stepText = "获取销售属性";
IList<JToken> colorSaleAttrs = null; IList<JToken> colorSaleAttrs = null;
{ {
var req = new CategoryReadFindAttrsByCategoryIdUnlimitCateRequest(); var req = new CategoryReadFindAttrsByCategoryIdUnlimitCateRequest();
req.cid = long.Parse(categoryId); req.cid = long.Parse(request.MainProductCategoryId);
req.attributeType = 4; req.attributeType = 4;
req.field = "attrValueList,attrGroup"; req.field = "attrValueList,attrGroup";
var response = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); var response = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime());
@ -954,7 +967,7 @@ namespace BBWY.Server.Business
//skuId = long.Parse(sku.Id), //skuId = long.Parse(sku.Id),
jdPrice = giftSku.Price ?? 0, jdPrice = giftSku.Price ?? 0,
stockNum = 9999, stockNum = 9999,
barCode = barCode, barCode = request.MainProductBarCode,
saleAttrs = new List<SkuWriteUpdateSkusItemSaleAttrs>() saleAttrs = new List<SkuWriteUpdateSkusItemSaleAttrs>()
{ {
new SkuWriteUpdateSkusItemSaleAttrs() new SkuWriteUpdateSkusItemSaleAttrs()
@ -968,9 +981,9 @@ namespace BBWY.Server.Business
}; };
p.multiCateProps = new List<SkuWriteUpdateSkusItemSaleAttrs>(); p.multiCateProps = new List<SkuWriteUpdateSkusItemSaleAttrs>();
if (multiCateProps != null && multiCateProps.Count() > 0) if (request.MainProductMultiCateProps != null && request.MainProductMultiCateProps.Count() > 0)
{ {
foreach (var multiCateProp in multiCateProps) foreach (var multiCateProp in request.MainProductMultiCateProps)
{ {
var m = new SkuWriteUpdateSkusItemSaleAttrs(); var m = new SkuWriteUpdateSkusItemSaleAttrs();
m.type = "com.jd.pop.ware.ic.api.domain.Prop"; m.type = "com.jd.pop.ware.ic.api.domain.Prop";
@ -1020,6 +1033,9 @@ namespace BBWY.Server.Business
{ {
RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, null, request.MainProductSpu, request.FullTitle, brandName, false); RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, null, request.MainProductSpu, request.FullTitle, brandName, false);
if (res.Body.Contains("en_desc"))
throw new BusinessException($"上架sku失败-{res.Json["error_response"].Value<string>("en_desc")}");
else
throw new BusinessException($"上架sku失败-{(string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg)}"); 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)"}}*/ /*{"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)"}}*/
@ -1055,6 +1071,8 @@ namespace BBWY.Server.Business
#endregion #endregion
#region 设置sku全国仓库存 #region 设置sku全国仓库存
{
if (request.MainProductSkuInStore)
{ {
stepText = "设置sku全国仓库存"; stepText = "设置sku全国仓库存";
try try
@ -1076,6 +1094,7 @@ namespace BBWY.Server.Business
throw ex; throw ex;
} }
} }
}
#endregion #endregion
#endregion #endregion
@ -1131,25 +1150,25 @@ namespace BBWY.Server.Business
if (motherTemplateSkuList != null && motherTemplateSkuList.Count() > 0) if (motherTemplateSkuList != null && motherTemplateSkuList.Count() > 0)
{ {
stepText = "添加奶妈模板SKU"; stepText = "添加奶妈模板SKU";
AddJDPromotionSku(jdClient, request.AppToken, promotionId, motherTemplateSkuList, false); AddJDPromotionSku(jdClient, request.AppToken, promotionId, motherTemplateSkuList, false, request.TaskCount);
} }
if (customerMotherSkuList != null && customerMotherSkuList.Count() > 0) if (customerMotherSkuList != null && customerMotherSkuList.Count() > 0)
{ {
stepText = "添加自定义奶妈SKU"; stepText = "添加自定义奶妈SKU";
AddJDPromotionSku(jdClient, request.AppToken, promotionId, customerMotherSkuList, false); AddJDPromotionSku(jdClient, request.AppToken, promotionId, customerMotherSkuList, false, request.TaskCount);
} }
if (mainProductSkuList != null && mainProductSkuList.Count() > 0) if (mainProductSkuList != null && mainProductSkuList.Count() > 0)
{ {
stepText = "添加主商品SKU"; stepText = "添加主商品SKU";
AddJDPromotionSku(jdClient, request.AppToken, promotionId, mainProductSkuList, false); AddJDPromotionSku(jdClient, request.AppToken, promotionId, mainProductSkuList, false, request.TaskCount);
} }
if (giftSkuList != null && giftSkuList.Count() > 0) if (giftSkuList != null && giftSkuList.Count() > 0)
{ {
stepText = "添加赠品SKU"; stepText = "添加赠品SKU";
AddJDPromotionSku(jdClient, request.AppToken, promotionId, giftSkuList, true); AddJDPromotionSku(jdClient, request.AppToken, promotionId, giftSkuList, true, request.TaskCount);
} }
} }
#endregion #endregion

2
BBWY.Server.Business/Sync/OrderSyncBusiness.cs

@ -86,7 +86,7 @@ namespace BBWY.Server.Business
//SaveResponseLog = true, //SaveResponseLog = true,
OrderId = orderId, OrderId = orderId,
SortTimeType = sortTimeType SortTimeType = sortTimeType
}, GetYunDingRequestHeader(), HttpMethod.Post); }, GetYunDingRequestHeader(), HttpMethod.Post, timeOutSeconds: 120);
if (orderListApiResult.StatusCode != System.Net.HttpStatusCode.OK) if (orderListApiResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception($"获取订单失败 {orderListApiResult.Content}"); throw new Exception($"获取订单失败 {orderListApiResult.Content}");

19
BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs

@ -1,4 +1,5 @@
using System; using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
@ -55,6 +56,22 @@ namespace BBWY.Server.Model.Dto
/// 自定义奶妈sku /// 自定义奶妈sku
/// </summary> /// </summary>
public string CustomMotherSku { get; set; } public string CustomMotherSku { get; set; }
/// <summary>
/// 任务量
/// </summary>
public int TaskCount { get; set; }
public string MainProductBarCode { get; set; }
public string MainProductCategoryId { get; set; }
public IList<JToken> MainProductMultiCateProps { get; set; }
/// <summary>
/// 主商品Sku是否入仓
/// </summary>
public bool MainProductSkuInStore { get; set; }
} }
public class StartPromotionTaskDelayRequest : PlatformRequest public class StartPromotionTaskDelayRequest : PlatformRequest

55
BBWY.Test/Program.cs

@ -18,33 +18,52 @@ namespace BBWY.Test
static void Main(string[] args) static void Main(string[] args)
{ {
var appkey = "E1AA9247D5583A6D87449CE6AB290185"; //var appkey = "E1AA9247D5583A6D87449CE6AB290185";
var appSecret = "e479558ddd9e40f8929cfc00c6cbbc9c"; //var appSecret = "e479558ddd9e40f8929cfc00c6cbbc9c";
var appkey = "120EA9EC65AB017567D78CC1139EEEA5";
var appSecret = "8a42bc2301e8439b896e99f5475e0a9b";
////0e61c4a8ec3e4df4b5836e10884db9220yth 齐盛 ////0e61c4a8ec3e4df4b5836e10884db9220yth 齐盛
////2ace3023200c4ea9aa682bbf8bffee18jztm 布莱特玩具 var token = "2ace3023200c4ea9aa682bbf8bffee18jztm"; //布莱特玩具
//var token = "01f5be2cb4d741dda66bce2356941597mdfm"; //布莱特玩具 token2 //var token = "01f5be2cb4d741dda66bce2356941597mdfm"; //布莱特玩具 token2
//var token = "01dc6f6e7fc34dcd99090d690312556cmdfk"; //齐盛 //var token = "01dc6f6e7fc34dcd99090d690312556cmdfk"; //齐盛
//var token = "9fffa982da23446fb035499ae5622f49odjk"; //腾奇 //var token = "9fffa982da23446fb035499ae5622f49odjk"; //腾奇
//var token = "c22ff4d37b6c4bbd82cd9e8d0dab42dbziyz"; //森王车品 //var token = "c22ff4d37b6c4bbd82cd9e8d0dab42dbziyz"; //森王车品
var token = "44c19a1c1fbd4641957e6e8985ed1358jmtl"; //森王玩具 //var token = "44c19a1c1fbd4641957e6e8985ed1358jmtl"; //森王玩具
//var appkey = "120EA9EC65AB017567D78CC1139EEEA5";
//var appSecret = "8a42bc2301e8439b896e99f5475e0a9b";
//var token = "2ace3023200c4ea9aa682bbf8bffee18jztm";
//var path = @"C:\Users\pengcong001\Desktop\含赠品SKU.txt";
//var j = JToken.Parse(System.IO.File.ReadAllText(path, System.Text.Encoding.UTF8));
//var firstJ = j["Json"]["jingdong_sku_read_searchSkuList_responce"]["page"]["data"].Children().FirstOrDefault();
//var saleAtters = firstJ.Value<JArray>("saleAttrs").Select(s => new
//{
// attrId = s.Value<string>("attrId"),
// attrValues = s.Value<JArray>("attrValues").Select(x => x.ToString()).ToList()
//}).ToList();
IJdClient client = GetJdClient(appkey, appSecret); IJdClient client = GetJdClient(appkey, appSecret);
var p = new JDPromotionAPITest(); {
p.GetPromotionDetailById(client,token, 5629024225);
var skuList = new List<long>() {
10025658468477,
10026219782038,
10026279996161,
10026279996162,
10026279996163,
10026463915671,
10029572468081,
10029572468082,
10029572468083,
10029572468084,
10030302993587,
10063391438691,
10063391438692,
10063391438693,
10063391438694
};
foreach (var sku in skuList)
{
var jdClient = GetJdClient(appkey, appSecret);
var req = new StockReadFindSkuStockRequest();
req.skuId = sku;
var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime());
}
}
Console.ReadKey(); Console.ReadKey();
} }
} }

Loading…
Cancel
Save