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; } } } }