Browse Source

开始活动接口

qianyi
shanji 3 years ago
parent
commit
2edb103c25
  1. 10
      BBWY.Server.API/Controllers/EvaluationAssistantController.cs
  2. 53
      BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs
  3. 248
      BBWY.Server.Business/PlatformSDK/JDBusiness.cs
  4. 10
      BBWY.Server.Business/PlatformSDK/PlatformSDKBusiness.cs
  5. 7
      BBWY.Server.Model/Db/EvaluationAssistant/PromotionTask.cs
  6. 11
      BBWY.Server.Model/Dto/Request/Product/DeleteSkuRequest.cs
  7. 36
      BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs
  8. 2
      BBWY.Server.Model/Enums.cs
  9. 36
      BBWY.Test/JDProductAPITest.cs
  10. 14
      BBWY.Test/Program.cs

10
BBWY.Server.API/Controllers/EvaluationAssistantController.cs

@ -77,5 +77,15 @@ namespace BBWY.Server.API.Controllers
{
evaluationAssistantBusiness.EditPromotionTaskSort(request);
}
/// <summary>
/// 开始活动
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void StartPromotionTask([FromBody] StartPromotionTaskRequest request)
{
evaluationAssistantBusiness.StartPromotionTask(request);
}
}
}

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

@ -5,9 +5,11 @@ using BBWY.Server.Model;
using BBWY.Server.Model.Db;
using BBWY.Server.Model.Dto;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using Yitter.IdGenerator;
namespace BBWY.Server.Business
@ -69,6 +71,23 @@ namespace BBWY.Server.Business
{
if (request.Id == 0)
{
var relayAPIHost = GetPlatformRelayAPIHost(Enums.Platform.);
var restApiResult_spu = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetProductList", new SearchProductRequest()
{
AppKey = "E1AA9247D5583A6D87449CE6AB290185",
AppSecret = "e479558ddd9e40f8929cfc00c6cbbc9c",
AppToken = "01dc6f6e7fc34dcd99090d690312556cmdfk",
PageIndex = 1,
PageSize = 10,
Platform = Enums.Platform.,
Spu = request.MainProductSpu
}, GetYunDingRequestHeader(), HttpMethod.Post);
if (restApiResult_spu.StatusCode != System.Net.HttpStatusCode.OK)
throw new BusinessException(restApiResult_spu.Content) { Code = (int)restApiResult_spu.StatusCode };
var spuResponse = JsonConvert.DeserializeObject<ApiResponse<ProductListResponse>>(restApiResult_spu.Content);
if (!spuResponse.Success)
throw new BusinessException(spuResponse.Msg) { Code = spuResponse.Code };
var sort = fsql.Select<PromotionTask>().ToAggregate(p => p.Max(p.Key.Sort));
var promotionTask = new PromotionTask()
{
@ -87,7 +106,9 @@ namespace BBWY.Server.Business
Status = Enums.PromitionTaskStatus.,
PromotionId = 0,
Sort = sort + 1,
UpdateSortTime = DateTime.Now
UpdateSortTime = DateTime.Now,
SpuLogo = spuResponse.Data.Items[0].Logo,
SpuPublishTime = spuResponse.Data.Items[0].CreateTime
};
fsql.Insert(promotionTask).ExecuteAffrows();
}
@ -114,9 +135,10 @@ namespace BBWY.Server.Business
public PromotionTaskResponse GetPromotionTaskList(QueryPromotionTaskRequest request)
{
var list = fsql.Select<PromotionTask>().Where(pt => pt.ShopId == request.ShopId)
.OrderByDescending(pt => pt.Sort)
.OrderByDescending(pt => pt.UpdateSortTime)
.Page(request.PageIndex, request.PageSize)
.Count(out long count)
.OrderByDescending(pt => new { pt.Sort, pt.UpdateSortTime })
.ToList<PromotionTaskItemResponse>();
return new PromotionTaskResponse()
{
@ -142,7 +164,32 @@ namespace BBWY.Server.Business
/// <param name="request"></param>
public void StartPromotionTask(StartPromotionTaskRequest request)
{
var promotionTask = fsql.Select<PromotionTask>(request.Id).ToOne();
var dbPromotionTask = fsql.Select<PromotionTask>(request.Id).ToOne();
if (dbPromotionTask == null)
throw new BusinessException("活动任务不存在");
if (dbPromotionTask.Status != Enums.PromitionTaskStatus.)
throw new BusinessException("只能在活动处于等待状态时才能开始");
var giftTemplateSku = string.Empty; //赠品模板sku
//var mainProductGiftSku = dbPromotionTask.MainProductGiftSku; //主商品的赠品sku
var motherTemplateSku = string.Empty; //奶妈模板的sku
if (dbPromotionTask.GiftTemplateId != null && dbPromotionTask.GiftTemplateId != 0)
{
var giftTemplate = fsql.Select<GiftTemplate>(dbPromotionTask.GiftTemplateId).ToOne();
if (giftTemplate == null)
throw new BusinessException("赠品模板不存在");
giftTemplateSku = giftTemplate.GiftSkus;
}
if (dbPromotionTask.MotherTemplateId != null && dbPromotionTask.MotherTemplateId != 0)
{
}
}
#endregion
}

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

@ -14,6 +14,7 @@ using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BBWY.Server.Business
{
@ -641,5 +642,252 @@ namespace BBWY.Server.Business
return (JArray)res.Json["jingdong_stock_read_findSkuStock_responce"]["skuStocks"];
}
public override void DeleteSku(DeleteSkuRequest request)
{
var jdClient = GetJdClient(request.AppKey, request.AppSecret);
var req = new SkuWriteDeleteSkuRequest();
req.skuId = long.Parse(request.Sku);
var res = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime());
}
public override int StartJDPromotionTask(StartPromotionTaskRequest2 request)
{
var stepText = string.Empty;
//stepText.AppendLine($"任务Id {request.Id} 店铺Id {request.ShopId}");
try
{
var jdClient = GetJdClient(request.AppKey, request.AppSecret);
string barCode = string.Empty, categoryId = string.Empty;
IList<JToken> multiCateProps = null;
long wareId = long.Parse(request.MainProductSpu);
List<string> giftSkuList = new List<string>();
#region 获取主商品sku信息 barCode,categoryId,multiCateProps
{
stepText = "获取主商品sku信息";
var mainSkuList = GetProductSkuList(new SearchProductSkuRequest()
{
AppKey = request.AppKey,
AppSecret = request.AppSecret,
AppToken = request.AppToken,
IsContainSource = true,
Platform = request.Platform,
Spu = request.MainProductSpu
});
if (mainSkuList.Count() == 0)
throw new BusinessException($"获取主商品sku信息-未查询到sku信息");
barCode = mainSkuList[0].Source.Value<string>("barCode");
categoryId = mainSkuList[0].Source.Value<string>("categoryId");
multiCateProps = mainSkuList[0].Source["multiCateProps"] != null ? mainSkuList[0].Source["multiCateProps"].ToList() : null;
}
#endregion
#region 设置精简标题
{
stepText = "设置精简标题";
var req = new WareWriteUpdateWareTitleRequest();
req.wareId = wareId;
req.title = request.SimpleTitle;
var response = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime());
if (response.IsError)
throw new BusinessException($"设置精简标题出错-{(string.IsNullOrEmpty(response.ErrorMsg) ? response.ErrMsg : response.ErrorMsg)}");
}
#endregion
if (!string.IsNullOrEmpty(request.GiftTemplateSku))
{
stepText = "上架赠品";
#region 上架赠品
#region 获取赠品sku信息
stepText = "获取赠品sku信息";
var selectGiftSkuList = GetProductSkuList(new SearchProductSkuRequest()
{
AppKey = request.AppKey,
AppSecret = request.AppSecret,
AppToken = request.AppToken,
IsContainSource = true,
Platform = request.Platform,
Sku = request.GiftTemplateSku
});
#endregion
#region 获取销售属性
stepText = "获取销售属性";
IList<JToken> colorSaleAttrs = null;
{
var req = new CategoryReadFindAttrsByCategoryIdUnlimitCateRequest();
req.cid = long.Parse(categoryId);
req.attributeType = 4;
req.field = "attrValueList,attrGroup";
var response = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime());
if (response.Json == null)
response.Json = JObject.Parse(response.Body);
var colorProperty = response.Json["jingdong_category_read_findAttrsByCategoryIdUnlimitCate_responce"]["findattrsbycategoryidunlimitcate_result"].FirstOrDefault(j => j.Value<string>("name") == "颜色");
if (colorProperty == null)
throw new Exception("获取销售属性-缺少颜色属性");
colorSaleAttrs = colorProperty["attrValueList"].ToList();
}
#endregion
#region 组装上架/改名/设置细节图参数
stepText = "组装上架/改名/设置细节图参数";
var takeColorIndex = colorSaleAttrs.Count() - 1;
var skusParamList = new List<SkuWriteUpdateSkusItem>();
var updateSkuTitleParamList = new List<WareWriteUpdateWareSaleAttrvalueAliasRequestItem>();
var imageWriteUpdateRequestList = new List<ImageWriteUpdateRequest>();
for (var i = 0; i < selectGiftSkuList.Count(); i++)
{
var giftSku = selectGiftSkuList[i];
var colorProperty = colorSaleAttrs[takeColorIndex];
var p = new SkuWriteUpdateSkusItem()
{
type = "com.jd.pop.ware.ic.api.domain.Sku",
wareId = wareId,
//skuId = long.Parse(sku.Id),
jdPrice = giftSku.Price,
stockNum = 500,
barCode = barCode,
saleAttrs = new List<SkuWriteUpdateSkusItemSaleAttrs>()
{
new SkuWriteUpdateSkusItemSaleAttrs()
{
type = "com.jd.pop.ware.ic.api.domain.Prop",
attrId = colorProperty.Value<string>("attId"),
attrValues = new List<string>() { colorProperty.Value<string>("id") },
index = takeColorIndex
}
}
};
p.multiCateProps = new List<SkuWriteUpdateSkusItemSaleAttrs>();
if (multiCateProps != null && multiCateProps.Count() > 0)
{
foreach (var multiCateProp in multiCateProps)
{
var m = new SkuWriteUpdateSkusItemSaleAttrs();
m.type = "com.jd.pop.ware.ic.api.domain.Prop";
m.attrId = multiCateProp.Value<string>("attrId");
m.attrValues = multiCateProp.Value<JArray>("attrValues").Select(x => x.ToString()).ToList();
p.multiCateProps.Add(m);
}
}
//修改标题参数
updateSkuTitleParamList.Add(new WareWriteUpdateWareSaleAttrvalueAliasRequestItem()
{
attrId = p.saleAttrs[0].attrId,
attrValues = p.saleAttrs[0].attrValues,
attrValueAlias = new List<string>() { giftSku.Title }
});
//修改商品细节图参数
var imgUrlBuilder = new StringBuilder();
var imgIndexBuilder = new StringBuilder();
imgUrlBuilder.Append($"{giftSku.Logo.Substring(giftSku.Logo.IndexOf("jfs"))},");
imgIndexBuilder.Append("1,");
imageWriteUpdateRequestList.Add(new ImageWriteUpdateRequest()
{
wareId = wareId,
colorId = colorProperty.Value<string>("id"),
imgUrl = imgUrlBuilder.ToString().Trim(','),
imgIndex = imgIndexBuilder.ToString().Trim(',')
});
takeColorIndex--;
skusParamList.Add(p);
}
#endregion
#region 上架sku
{
stepText = "上架sku";
var req = new SkuWriteUpdateSkusRequest();
req.wareId = wareId;
req.skus = skusParamList;
var res = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime());
if (res.Json == null)
res.Json = JObject.Parse(res.Body);
if (res.IsError)
throw new BusinessException($"上架sku失败-{(string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg)}");
var newSkuList = res.Json["jingdong_sku_write_updateSkus_responce"]["skuList"].ToList().Select(x => x.Value<string>("skuId")).ToList();
giftSkuList.AddRange(newSkuList);
}
#endregion
#region sku改名
{
stepText = "sku改名";
var req = new WareWriteUpdateWareSaleAttrvalueAliasRequest()
{
wareId = wareId,
props = updateSkuTitleParamList
};
var res = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime());
if (res.Json == null)
res.Json = JObject.Parse(res.Body);
if (res.IsError)
throw new BusinessException($"sku改名失败-{(string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg)}");
}
#endregion
#region sku修改细节图
stepText = "sku修改细节图";
foreach (var imageWriteUpdateRequest in imageWriteUpdateRequestList)
{
var res = jdClient.Execute(imageWriteUpdateRequest, request.AppToken, DateTime.Now.ToLocalTime());
}
#endregion
#endregion
}
else
{
var skuList = request.MainProductGiftSku.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
giftSkuList.AddRange(skuList);
}
#region 创建活动
#endregion
#region 添加活动sku
#endregion
#region 审核活动
#endregion
#region 下架赠品sku
#endregion
#region 设置完整标题
{
stepText = "设置完整标题";
var req = new WareWriteUpdateWareTitleRequest();
req.wareId = long.Parse(request.MainProductSpu);
req.title = request.FullTitle;
var response = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime());
if (response.IsError)
throw new BusinessException($"设置完整标题出错-{(string.IsNullOrEmpty(response.ErrorMsg) ? response.ErrMsg : response.ErrorMsg)}");
}
#endregion
}
catch (Exception ex)
{
nLogManager.Default().Error(ex, $"任务Id {request.Id} 店铺Id {request.ShopId} 执行步骤 {stepText}");
throw ex;
}
return base.StartJDPromotionTask(request);
}
}
}

10
BBWY.Server.Business/PlatformSDK/PlatformSDKBusiness.cs

@ -147,5 +147,15 @@ namespace BBWY.Server.Business
{
throw new NotImplementedException();
}
public virtual int StartJDPromotionTask(StartPromotionTaskRequest2 request)
{
throw new NotImplementedException();
}
public virtual void DeleteSku(DeleteSkuRequest request)
{
throw new NotImplementedException();
}
}
}

7
BBWY.Server.Model/Db/EvaluationAssistant/PromotionTask.cs

@ -11,7 +11,7 @@ using FreeSql.DataAnnotations;
namespace BBWY.Server.Model.Db
{
[JsonObject(MemberSerialization.OptIn), Table(Name = "promotiontask", DisableSyncStructure = true)]
[Table(Name = "promotiontask", DisableSyncStructure = true)]
public partial class PromotionTask
{
@ -91,6 +91,11 @@ namespace BBWY.Server.Model.Db
[Column(DbType = "datetime")]
public DateTime? UpdateSortTime { get; set; }
public string SpuLogo { get; set; }
[Column(DbType = "datetime")]
public DateTime? SpuPublishTime { get; set; }
}
}

11
BBWY.Server.Model/Dto/Request/Product/DeleteSkuRequest.cs

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BBWY.Server.Model.Dto
{
public class DeleteSkuRequest : PlatformRequest
{
public string Sku { get; set; }
}
}

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

@ -8,4 +8,40 @@ namespace BBWY.Server.Model.Dto
{
public long Id { get; set; }
}
public class StartPromotionTaskRequest2 : PlatformRequest
{
public long Id { get; set; }
public long ShopId { get; set; }
public string SimpleTitle { get; set; }
public string FullTitle { get; set; }
/// <summary>
/// 主商品Spu
/// </summary>
public string MainProductSpu { get; set; }
/// <summary>
/// 赠品模板的Sku
/// </summary>
public string GiftTemplateSku { get; set; }
/// <summary>
/// 主商品的赠品sku
/// </summary>
public string MainProductGiftSku { get; set; }
/// <summary>
/// 奶妈模板的sku
/// </summary>
public string MotherTemplateSku { get; set; }
/// <summary>
/// 主商品的sku (非赠品)
/// </summary>
public string MainProductSku { get; set; }
}
}

2
BBWY.Server.Model/Enums.cs

@ -237,7 +237,7 @@
}
/// <summary>
/// 促销任务状态
/// 促销任务状态 等待 = 0,进行中 = 1,已完成 = 2
/// </summary>
public enum PromitionTaskStatus
{

36
BBWY.Test/JDProductAPITest.cs

@ -34,9 +34,9 @@ namespace BBWY.Test
//req.orderId = ;
req.beginDate = "2022-12-22";
req.beginDate = "20221221";
//req.endDate = "20221221";
req.endDate = "20221222";
var response = client.Execute(req, token, DateTime.Now.ToLocalTime());
Console.WriteLine(JsonConvert.SerializeObject(response));
@ -197,7 +197,6 @@ namespace BBWY.Test
{
var skusParamList = new List<SkuWriteUpdateSkusItem>();
var updateSkuTitleParamList = new List<WareWriteUpdateWareSaleAttrvalueAliasRequestItem>();
var transparentImageWriteAddRequestList = new List<TransparentImageWriteAddRequest>();
var imageWriteUpdateRequestList = new List<ImageWriteUpdateRequest>();
var takeColorIndex = colorSaleAttrs.Count() - 1;
@ -247,27 +246,11 @@ namespace BBWY.Test
attrValueAlias = new List<string>() { giftSku.Title }
});
////修改透图参数
//var transparentImageWriteAddRequest = new TransparentImageWriteAddRequest()
//{
// wareId = long.Parse(mainSpu),
// colorId = colorProperty.Value<string>("id"),
// //colorId = "0000000000",
// imageUrl = toutuJToken.Value<string>("imageUrl")
//};
//transparentImageWriteAddRequestList.Add(transparentImageWriteAddRequest);
//修改商品细节图参数
var imgUrlBuilder = new StringBuilder();
var imgIndexBuilder = new StringBuilder();
imgUrlBuilder.Append($"{giftSku.Logo.Substring(giftSku.Logo.IndexOf("jfs"))},");
imgIndexBuilder.Append("1,");
//for (var ii = 0; ii <= 3; ii++)
//{
// var imgJToken = imagesByColorList[ii];
// imgUrlBuilder.Append($"{imgJToken.Value<string>("imgUrl")},");
// imgIndexBuilder.Append($"{imgJToken.Value<int>("imgIndex") + 1},");
//}
imageWriteUpdateRequestList.Add(new ImageWriteUpdateRequest()
{
wareId = long.Parse(mainSpu),
@ -276,7 +259,6 @@ namespace BBWY.Test
imgIndex = imgIndexBuilder.ToString().Trim(',')
});
takeColorIndex--;
skusParamList.Add(p);
}
@ -334,20 +316,6 @@ namespace BBWY.Test
Console.WriteLine();
}
#endregion
//#region 修改透图
//foreach (var request in transparentImageWriteAddRequestList)
//{
// Console.WriteLine("修改透图请求参数");
// Console.WriteLine(JsonConvert.SerializeObject(request));
// var res = client.Execute(request, token, DateTime.Now.ToLocalTime());
// Console.WriteLine();
// Console.WriteLine("修改透图返回内容");
// Console.WriteLine(JsonConvert.SerializeObject(res));
// Console.WriteLine();
//}
//#endregion
}
#endregion

14
BBWY.Test/Program.cs

@ -15,15 +15,15 @@ namespace BBWY.Test
static void Main(string[] args)
{
//var appkey = "120EA9EC65AB017567D78CC1139EEEA5";
//var appSecret = "8a42bc2301e8439b896e99f5475e0a9b";
var appkey = "E1AA9247D5583A6D87449CE6AB290185";
var appSecret = "e479558ddd9e40f8929cfc00c6cbbc9c";
////0e61c4a8ec3e4df4b5836e10884db9220yth 齐盛
////2ace3023200c4ea9aa682bbf8bffee18jztm 布莱特玩具
//var token = "0e61c4a8ec3e4df4b5836e10884db9220yth"; //"b46065ef5b894f2297686e28d39cb37a2mdy";//"";
var token = "01dc6f6e7fc34dcd99090d690312556cmdfk"; //齐盛
var appkey = "120EA9EC65AB017567D78CC1139EEEA5";
var appSecret = "8a42bc2301e8439b896e99f5475e0a9b";
var token = "2ace3023200c4ea9aa682bbf8bffee18jztm";
//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));
@ -39,7 +39,7 @@ namespace BBWY.Test
//10022515718131 需要进行赠品上架的SPU
IJdClient client = GetJdClient(appkey, appSecret);
var test1 = new JDProductAPITest();
test1.QuerySPU(client, token);
test1.QueryOrderCount(client, token);
//test1.ShangJiaTest(client, token);
//test1.修改属性别名(client, token);

Loading…
Cancel
Save