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;
}
///
/// 获取商品分组
///
///
[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 response = JSONUtil.JsonToObject>(JSONUtil.ObjectToJson(tagRsp.data.tags));
string tagsStr = "";
if (!historyTask.IsNull() && historyTask.Count > 0)
{
List 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);
}
///
/// 提交批量修改价格任务
///
///
[HttpPost]
public IActionResult AddBatchUpdatePriceTask([FromBody] AddBatchUpdatePriceTaskRequest request)
{
//先查询是否有tagid在执行中
var historyTask = new BatchUpdateDAL().ListGet(t => t.TaskStatus != 2);
if (!historyTask.IsNull() && historyTask.Count > 0)
{
List tags = historyTask.Select(t => t.Tagids).ToList();
string tagsStr = string.Join(',', tags);
List 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);
}
///
/// 获取修改记录
///
///
///
[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 response = JSONUtil.JsonToObject>(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(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);
}
///
/// 重新激活任务
///
///
///
[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);
}
///
/// 删除有赞的sku
///
///
///
[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 newSku = new List();
List skuProp = new List();
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);
}
///
/// 获取有赞 1688商品sku对比详情
///
///
///
[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 aliSkuList = new List();
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 res = JSONUtil.JsonToObject>(JSONUtil.ObjectToJson(aliPro.DFProduct.productSkuInfos));
aliSkuList = res;
ispost = _itemDistributionService.IsPost(aliPro.DFProduct);
}
List skuList = new List();
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 propsList = new List();
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);
}
///
/// 修改有赞商品分组
///
///
///
[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
{
///
/// 0未执行 1有任务执行中
///
public int tagStatus { get; set; }
}
}
}