using AlibabaSDK.Api;
|
using AlibabaSDK.Domain;
|
using AlibabaSDK.Request;
|
using CommonUtil;
|
using CommonUtil.RabbitMQ;
|
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Mvc;
|
using Operater.DAL;
|
using Operater.DbModel;
|
using Operater.DTO.System;
|
using Operater.Service;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Threading.Tasks;
|
using YouZanSDKStandard.Api;
|
using YouZanSDKStandard.Api.Domain;
|
using YouZanSDKStandard.Api.Request;
|
|
namespace Api.Operater.Controllers
|
{
|
[Route(TopConstants.API_ROUTE)]
|
public class ProductBatchUpdateController : BaseController
|
{
|
private readonly ILoginUserInfoService _loginUserInfoService;
|
private readonly IItemDistributionService _itemDistributionService;
|
private readonly IProductManageService _productManageService;
|
public ProductBatchUpdateController(ILoginUserInfoService loginUserInfoService, IItemDistributionService itemDistributionService, IProductManageService productManageService)
|
{
|
_loginUserInfoService = loginUserInfoService;
|
_itemDistributionService = itemDistributionService;
|
_productManageService = productManageService;
|
}
|
/// <summary>
|
/// 获取商品分组
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult GetProductTags()
|
{
|
var userInfo = _loginUserInfoService.GetUserInfo();
|
YouZanItemcategoriesTagsRequest tagReq = new YouZanItemcategoriesTagsRequest()
|
{ is_sort = true };
|
var tagRsp = YouZanClient.Execute(tagReq, userInfo.YzToken);
|
if (tagRsp.IsNull() || !tagRsp.success)
|
{
|
return Error("接口调用失败:" + tagRsp.message);
|
}
|
//查询各分组执行状态
|
var historyTask = new BatchUpdateDAL().ListGet(t => t.TaskStatus != 2);
|
List<GetProductTagsResponse> response = JSONUtil.JsonToObject<List<GetProductTagsResponse>>(JSONUtil.ObjectToJson(tagRsp.data.tags));
|
string tagsStr = "";
|
if (!historyTask.IsNull() && historyTask.Count > 0)
|
{
|
List<string> tags = historyTask.Select(t => t.Tagids).ToList();
|
tagsStr = string.Join(',', tags);
|
}
|
foreach (var item in response)
|
{
|
if (!tagsStr.IsNullOrEmpty() && tagsStr.Contains(item.id.ToString()))
|
{
|
item.tagStatus = 1;
|
}
|
}
|
return Success(response);
|
}
|
|
/// <summary>
|
/// 提交批量修改价格任务
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult AddBatchUpdatePriceTask([FromBody] AddBatchUpdatePriceTaskRequest request)
|
{
|
//先查询是否有tagid在执行中
|
var historyTask = new BatchUpdateDAL().ListGet(t => t.TaskStatus != 2);
|
if (!historyTask.IsNull() && historyTask.Count > 0)
|
{
|
List<string> tags = historyTask.Select(t => t.Tagids).ToList();
|
string tagsStr = string.Join(',', tags);
|
List<string> tagLsit = tagsStr.Split(',').ToList();
|
if (tagLsit.Any(t => request.Tags.Contains(t)))
|
{
|
return Error("有商品分组的任务未执行完成,请勿重复提交");
|
}
|
}
|
string taskId = Guid.NewGuid().ToString();
|
BatchUpdate batchUpdate = new BatchUpdate()
|
{
|
Id = taskId,
|
CreateTime = DateTime.Now,
|
TaskStatus = 0,
|
Tagids = request.Tags,
|
TaskRule = JSONUtil.ObjectToJson(request.Rule),
|
TaskType = 0
|
};
|
new BatchUpdateDAL().Insert(batchUpdate);
|
//发送修改mq
|
ProductDistributionMq mqBody = new ProductDistributionMq()
|
{
|
TaskType = 2,
|
TaskId = taskId
|
};
|
string ret = MQClientFullChannel.SendMessageStatic(0, "product_distribution", JSONUtil.ObjectToJson(mqBody));
|
if (ret != "ok")
|
{
|
return Error("mq发送失败");
|
}
|
return Success(true);
|
}
|
|
/// <summary>
|
/// 获取修改记录
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult GetUpdateHistory([FromBody] GetUpdateHistoryRequest request)
|
{
|
var userInfo = _loginUserInfoService.GetUserInfo();
|
int totalCount = 0;
|
var recordHistory = new BatchUpdateDAL().ListPageGet(t => t.Id != null, t => t.CreateTime, DbEnum.OrderType.Desc, request.PageNo, request.PageSize, ref totalCount);
|
List<GetUpdateHistoryResponse> response = JSONUtil.JsonToObject<List<GetUpdateHistoryResponse>>(JSONUtil.ObjectToJson(recordHistory));
|
//获取商品分组
|
YouZanItemcategoriesTagsRequest tagReq = new YouZanItemcategoriesTagsRequest()
|
{ is_sort = true };
|
var tagRsp = YouZanClient.Execute(tagReq, userInfo.YzToken);
|
if (tagRsp.IsNull() || !tagRsp.success)
|
{
|
return Error("分组接口调用失败:" + tagRsp.message);
|
}
|
foreach (var rec in response)
|
{
|
rec.RuleModel = JSONUtil.JsonToObject<PriceUpdateRule>(rec.TaskRule);
|
string[] tagIds = rec.Tagids.Split(',');
|
string tagName = "";
|
foreach (string tag in tagIds)
|
{
|
var tagItem = tagRsp.data.tags.Where(t => t.id == long.Parse(tag)).ToList();
|
tagName += "," + ((tagItem.IsNull() || tagItem.Count == 0) ? "" : tagItem[0].name);
|
}
|
rec.TagName = tagName.IsNullOrEmpty() ? "" : (tagName.Substring(1, tagName.Length - 1));
|
}
|
return Success(response, request.PageNo, request.PageSize, totalCount);
|
}
|
|
/// <summary>
|
/// 重新激活任务
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult ReAddTask([FromBody] ReAddTaskRequest request)
|
{
|
var updateRecord = new BatchUpdateDAL().GetById(request.TaskId);
|
string taskId = Guid.NewGuid().ToString();
|
BatchUpdate batchUpdate = new BatchUpdate()
|
{
|
Id = taskId,
|
CreateTime = DateTime.Now,
|
TaskStatus = 0,
|
Tagids = updateRecord.Tagids,
|
TaskRule = updateRecord.TaskRule,
|
TaskType = 0
|
};
|
new BatchUpdateDAL().Insert(batchUpdate);
|
//发送修改mq
|
ProductDistributionMq mqBody = new ProductDistributionMq()
|
{
|
TaskType = 2,
|
TaskId = taskId
|
};
|
string ret = MQClientFullChannel.SendMessageStatic(0, "product_distribution", JSONUtil.ObjectToJson(mqBody));
|
if (ret != "ok")
|
{
|
return Error("mq发送失败");
|
}
|
return Success(true);
|
}
|
/// <summary>
|
/// 删除有赞的sku
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult DeleteYzSku([FromBody] DeleteYzSkuRequest request)
|
{
|
var userInfo = _loginUserInfoService.GetUserInfo();
|
//获取有赞商品详情
|
YouZanProductDetailGetRequest udetailReq = new YouZanProductDetailGetRequest()
|
{
|
item_id = long.Parse(request.YzItemId)
|
};
|
var udetailRs = YouZanClient.Execute(udetailReq, userInfo.YzToken);
|
if (udetailRs.IsNull() || !udetailRs.success)
|
{
|
return Error("获取有赞商品详情失败:" + udetailRs.message);
|
}
|
YouZanFullSkuUpdateRequest youZanFullSkuUpdateRequest = new YouZanFullSkuUpdateRequest()
|
{
|
item_id = long.Parse(request.YzItemId),
|
sku_picture_display_config = true,
|
|
};
|
List<SkuList> newSku = new List<SkuList>();
|
List<SkuValueProps> skuProp = new List<SkuValueProps>();
|
foreach (var skuItem in udetailRs.data.sku_list)
|
{
|
if (request.DelSkuId.Contains(skuItem.sku_id))
|
{
|
continue;
|
}
|
newSku.Add(skuItem);
|
//查找图片
|
foreach (var proItem in skuItem.sku_props)
|
{
|
var prop = udetailRs.data.sku_value_props.Where(t => t.name == proItem.prop_value_name).ToList();
|
if (!prop.IsNull() && prop.Count > 0)
|
{
|
skuProp.Add(prop[0]);
|
}
|
}
|
|
}
|
youZanFullSkuUpdateRequest.sku_list = newSku;
|
youZanFullSkuUpdateRequest.sku_value_props = skuProp;
|
var fullUpRsp = YouZanClient.Execute(youZanFullSkuUpdateRequest, userInfo.YzToken);
|
if (fullUpRsp.IsNull() || !fullUpRsp.success)
|
{
|
return Error("修改有赞失败:" + fullUpRsp.message);
|
}
|
////获取有赞商品详情
|
YouZanProductDetailGetRequest detailReq = new YouZanProductDetailGetRequest()
|
{
|
item_id = long.Parse(request.YzItemId)
|
};
|
var detailRs = YouZanClient.Execute(detailReq, userInfo.YzToken);
|
if (detailRs.IsNull() || !detailRs.success)
|
{
|
LogUtil.Info("获取有赞商品详情失败:" + detailRs.message, "商品错误");
|
}
|
else
|
{
|
//记录有赞最新sku信息
|
DistributionRelation distributionRelation = new DistributionRelation()
|
{
|
YzskuInfo = JSONUtil.ObjectToJson(detailRs.data.sku_list)
|
};
|
new DistributionRelationDAL().Update(distributionRelation, i => new { i.YzskuInfo }, t => t.YzProduct == request.YzItemId);
|
}
|
return Success(true);
|
}
|
|
/// <summary>
|
/// 获取有赞 1688商品sku对比详情
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult GetTopProductDetail([FromBody] GetTopProductDetailRequest request)
|
{
|
var userInfo = _loginUserInfoService.GetUserInfo();
|
var relate = new DistributionRelationDAL().ListGet(t => t.YzProduct == request.YzProductId && t.ReStatus == 1);
|
if (relate.IsNull() || relate.Count == 0)
|
{
|
return Error("获取铺货关系失败!");
|
}
|
//获取有赞商品详情
|
YouZanProductDetailGetRequest detailReq = new YouZanProductDetailGetRequest()
|
{
|
item_id = long.Parse(request.YzProductId)
|
};
|
var detailRs = YouZanClient.Execute(detailReq, userInfo.YzToken);
|
if (detailRs.IsNull() || !detailRs.success)
|
{
|
return Error($"获取有赞商品详情错误:" + detailRs.message);
|
}
|
List<SkuInfosItem> aliSkuList = new List<SkuInfosItem>();
|
bool ispost = false;
|
CompareChangeRequest compareChangeRequest = new CompareChangeRequest()
|
{
|
AliProductId = long.Parse(relate[0].SourceProduct),
|
AliToken = userInfo.AlibabaToken,
|
ProSource = relate[0].ProSource
|
};
|
var aliPro = _productManageService.GetAliProductInfo(compareChangeRequest);
|
if (!aliPro.Success)
|
{
|
return Error(aliPro.Error);
|
}
|
//获取1688或精选商品详情
|
if (relate[0].ProSource == 0)
|
{//精选
|
aliSkuList = aliPro.JXProduct.skuInfos;
|
ispost = true;
|
}
|
else
|
{//代发
|
List<SkuInfosItem> res = JSONUtil.JsonToObject<List<SkuInfosItem>>(JSONUtil.ObjectToJson(aliPro.DFProduct.productSkuInfos));
|
aliSkuList = res;
|
ispost = _itemDistributionService.IsPost(aliPro.DFProduct);
|
}
|
List<ProSkuItem> skuList = new List<ProSkuItem>();
|
foreach (var sitem in detailRs.data.sku_list)
|
{
|
|
var aliSku = aliSkuList.Where(t => t.skuId == long.Parse(sitem.sku_no)).ToList();
|
if (aliSku.IsNull() || aliSku.Count == 0)
|
{
|
continue;
|
}
|
List<ProSkuItemProps> propsList = new List<ProSkuItemProps>();
|
foreach (var pro in sitem.sku_props)
|
{
|
ProSkuItemProps pr = new ProSkuItemProps()
|
{
|
Name = pro.prop_name,
|
Value = pro.prop_value_name
|
};
|
propsList.Add(pr);
|
}
|
string aliSkuPrice = relate[0].ProSource == 1 ? aliSku[0].consignPrice.ToString("0.00##") : aliSku[0].retailPrice.ToString("0.00##");
|
ProSkuItem proSkuItem = new ProSkuItem()
|
{
|
YzSkuId = sitem.sku_id,
|
YzSkuPrice = (decimal.Parse(sitem.price.ToString()) / 100).ToString("0.00##"),
|
Props = propsList,
|
AliSkuId = aliSku[0].skuId.ToString(),
|
AliSkuPrice = aliSkuPrice,
|
YzItemId = request.YzProductId,
|
IsAliPost = ispost
|
};
|
skuList.Add(proSkuItem);
|
}
|
return Success(skuList);
|
}
|
|
/// <summary>
|
/// 修改有赞商品分组
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult UpdateProTags([FromBody] UpdateProTagsRequest request)
|
{
|
var userInfo = _loginUserInfoService.GetUserInfo();
|
YouZanProductUpdateReqDomain upDomain = new YouZanProductUpdateReqDomain()
|
{
|
item_id = long.Parse(request.YzProductId),
|
tag_ids = request.TagList
|
};
|
YouZanProductUpdateRequest yzReq = new YouZanProductUpdateRequest()
|
{ param = upDomain };
|
var yzRsp = YouZanClient.Execute(yzReq, userInfo.YzToken);
|
if (!yzRsp.success)
|
{
|
return Error($"修改失败:" + yzRsp.message);
|
}
|
return Success(true);
|
}
|
|
|
public class GetProductTagsResponse : YouZanItemcategoriesTagsDomainItem
|
{
|
/// <summary>
|
/// 0未执行 1有任务执行中
|
/// </summary>
|
public int tagStatus { get; set; }
|
}
|
|
|
|
}
|
}
|