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 SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
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 ProductManageController : BaseController
{
public IItemDistributionService _itemDistributionService;
public ILoginUserInfoService _iloginUserInfoService;
public ProductManageController(IItemDistributionService itemDistributionService, ILoginUserInfoService loginUserInfoService)
{
_itemDistributionService = itemDistributionService;
_iloginUserInfoService = loginUserInfoService;
}
///
/// 一键铺货/重新铺货
///
///
///
[HttpPost]
public IActionResult ProductDistribution([FromBody] ProductDistributionRequest request)
{
bool res = _itemDistributionService.AddDistributionTask(request).Result;
return Success(res);
}
///
/// 查看铺货日志
///
///
///
[HttpPost]
public IActionResult GetDistributionHistory([FromBody] GetDistributionHistoryRequest request)
{
var expression = Expressionable.Create().And(t => t.IsDel == 0)
.AndIF(!request.StartCreateTime.IsNull(), t => t.CreateTime >= request.StartCreateTime)
.AndIF(!request.DisType.IsNull(), t => t.DisStatus == request.DisType)
.AndIF(!request.ProductName.IsNullOrEmpty(), t => t.ProTitle.Contains(request.ProductName))
.AndIF(!request.EndCreateTime.IsNull(), t => t.CreateTime <= request.EndCreateTime)
.ToExpression();
int totalCount = 0;
var history = new DistributionHistoryDAL().ListPageGet(expression, t => t.CreateTime, DbEnum.OrderType.Desc, request.PageNo, request.PageSize, ref totalCount);
return Success(history, request.PageNo, request.PageSize, totalCount);
}
///
/// 重新铺货
///
///
///
[HttpPost]
public IActionResult ReAddItem([FromBody] ReAddItemRequest request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
var history = new DistributionHistoryDAL().ListGet(t => request.ProductId.Contains(t.ProductId) && t.IsDel == 0);
foreach (var his in history)
{
bool removeRes = true;
if (his.DisStatus == 2)
{
//先解除铺货关系
removeRes = _itemDistributionService.RemoveRelatProduct(his.ProductId, userInfo.AlibabaToken, userInfo.YzToken, his, userInfo.YzShopId);
}
if (removeRes)
{
DistributionHistory distributionHistory = new DistributionHistory()
{
IsDel = 1,
DeleteTime = DateTime.Now
};
new DistributionHistoryDAL().Update(distributionHistory, t => new { t.IsDel, t.DeleteTime }, t => t.Id == his.Id && t.DisStatus != 1);
}
else
{
return Error("删除失败!");
}
}
bool res = _itemDistributionService.AddDistributionTask(request).Result;
return Success(res);
}
///
/// 删除记录
///
///
///
[HttpPost]
public IActionResult DeleteDistributionHistory([FromBody] DeleteDistributionHistoryRequest request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
var history = new DistributionHistoryDAL().ListGet(t => request.Ids.Contains(t.Id));
foreach (var his in history)
{
bool removeRes = true;
if (his.DisStatus == 2)
{
//先解除铺货关系
removeRes = _itemDistributionService.RemoveRelatProduct(his.ProductId, userInfo.AlibabaToken, userInfo.YzToken, his, userInfo.YzShopId);
}
if (removeRes)
{
DistributionHistory distributionHistory = new DistributionHistory()
{
IsDel = 1,
DeleteTime = DateTime.Now
};
new DistributionHistoryDAL().Update(distributionHistory, t => new { t.IsDel, t.DeleteTime }, t => t.Id == his.Id && t.DisStatus != 1);
}
}
return Success(true);
}
///
/// 分页获取商品消息记录
///
///
///
[HttpPost]
public IActionResult GetProductUpdateLog([FromBody] GetProductUpdateLogRequest request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
var expression = Expressionable.Create().AndIF(!request.ProcessingStatus.IsNull(), t => t.ProcessingStatus == request.ProcessingStatus)
.AndIF(!request.ProductName.IsNullOrEmpty(), t => t.ProductTitle.Contains(request.ProductName))
.And(t => t.IsDel == 0)
.ToExpression();
int totalCount = 0;
var upLog = new ProductUpdateLogDAL().ListPageGet(expression, t => t.CreateTime, DbEnum.OrderType.Desc, request.PageNo, request.PageSize, ref totalCount);
if (totalCount > 0)
{
List logAliPro = upLog.Select(t => t.ProductId).ToList();
var dist = new DistributionRelationDAL().ListGet(t => logAliPro.Contains(t.SourceProduct));
List skuNoList = new List();
foreach (var log in upLog)
{
var yzItem = dist.Where(t => t.SourceProduct == log.ProductId).ToList();
if (yzItem.IsNull() || yzItem.Count == 0)
{
continue;
}
List yzSkuList = JSONUtil.JsonToObject>(yzItem[0].YzskuInfo);
skuNoList.Add(yzSkuList[0].sku_no);
}
//获取有赞商品上下架状态
YouZanItemCommonSearchRequest yzSearchReq = new YouZanItemCommonSearchRequest()
{
page_no = 1,
page_size = 50
};
if (skuNoList.Count > 0)
{
yzSearchReq.sku_nos = skuNoList;
var yzSearchRsp = YouZanClient.Execute(yzSearchReq, userInfo.YzToken);
if (!yzSearchRsp.IsNull() && !yzSearchRsp.data.IsNull() && !yzSearchRsp.data.items.IsNull())
{
foreach (var item in upLog)
{
if (item.YzProductId.IsNullOrEmpty())
{
continue;
}
var disPlayItem = yzSearchRsp.data.items.Where(t => t.item_id == long.Parse(item.YzProductId)).ToList();
if (!disPlayItem.IsNull() && disPlayItem.Count > 0)
{
item.MsgId = disPlayItem[0].is_display.ToString();
}
}
}
}
}
return Success(upLog, request.PageNo, request.PageSize, totalCount);
}
///
/// 处理商品消息
///
///
///
[HttpPost]
public IActionResult EditProductUpdateLog([FromBody] EditProductUpdateLogRequest request)
{
ProductUpdateLog productUpdateLog = new ProductUpdateLog()
{
ProcessingStatus = request.ProcessingStatus,
ProcessingTime = DateTime.Now,
Memo = request.Memo
};
var res = new ProductUpdateLogDAL().Update(productUpdateLog, t => new { t.ProcessingStatus, t.ProcessingTime, t.Memo }, t => request.RecordIds.Contains(t.Id));
return Success(res > 0);
}
///
/// 解除铺货
///
///
///
[HttpPost]
public IActionResult UnRelationProduct([FromBody] UnRelationProductRequest request)
{
LoginUserInfo userInfo = _iloginUserInfoService.GetUserInfo();
DistributionRelation distributionRelation = new DistributionRelation()
{
ReStatus = 0
};
int res = new DistributionRelationDAL().Update(distributionRelation, i => new { i.ReStatus }, t => t.SourceProduct == request.AliProductId && t.YzProduct == request.YzProductId);
if (res == 0)
{
return Error("没有可解除的商品!");
}
//取消关注1688商品
AlibabaProductUnFollowRequest aliReq = new AlibabaProductUnFollowRequest()
{
productId = long.Parse(request.AliProductId)
};
var aliRsp = AliabaClient.Execute(aliReq, userInfo.AlibabaToken);
if (!aliRsp.IsNull() || !aliRsp.Success)
{
return Error("取消关注商品失败:" + (aliRsp.IsNull() ? "nul;" : aliRsp.message));
}
return Success(true);
}
///
/// 获取有赞商品地址
///
///
///
[HttpPost]
public IActionResult GetYzItemUrl([FromBody] GetYzItemUrlRequest request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
if (!request.Alias.IsNullOrEmpty())
{
return Success($"https://shop{userInfo.YzShopId}.m.youzan.com/wscgoods/detail/{request.Alias}");
}
var rela = new DistributionRelationDAL().ListGet(t => t.YzProduct == request.ProductId);
if (!rela.IsNull() && rela.Count > 0)
{
return Success($"https://shop{userInfo.YzShopId}.m.youzan.com/wscgoods/detail/{rela[0].YzAlias}");
}
return Error("未找到关联关系");
}
///
/// 增量修改有赞商品信息
///
///
///
[HttpPost]
public IActionResult UpdateYzProduct([FromBody] UpdateYzProductRequest request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
if (request.UpdateType == 1 && (request.Price.IsNull()))
{
return Error("价格必传");
}
if (request.UpdateType == 0 && (request.SkuInfo.IsNull() || request.SkuInfo.Count == 0))
{
return Error("无需要修改的sku信息");
}
string beforeSku = "";
YouZanProductUpdateReqDomain upDomain = new YouZanProductUpdateReqDomain()
{
item_id = long.Parse(request.ItemId)
};
List skuList = new List();
if (request.UpdateType == 0)
{
foreach (var sku in request.SkuInfo)
{
YouZanProductUpdateReqSkuList skuItem = new YouZanProductUpdateReqSkuList();
skuItem.price = long.Parse((sku.Price * 100).ToString("0.#"));
skuItem.sku_id = long.Parse(sku.SkuId);
skuList.Add(skuItem);
}
}
else
{
////获取有赞商品详情
YouZanProductDetailGetRequest udetailReq = new YouZanProductDetailGetRequest()
{
item_id = long.Parse(request.ItemId)
};
var udetailRs = YouZanClient.Execute(udetailReq, userInfo.YzToken);
if (udetailRs.IsNull() || !udetailRs.success)
{
return Error("获取有赞商品详情失败:" + udetailRs.message);
}
foreach (var sku in udetailRs.data.sku_list)
{
YouZanProductUpdateReqSkuList skuItem = new YouZanProductUpdateReqSkuList();
skuItem.price = long.Parse(((decimal)request.Price * 100).ToString("0.#"));
skuItem.sku_id = long.Parse(sku.sku_id);
skuList.Add(skuItem);
}
beforeSku = JSONUtil.ObjectToJson(udetailRs.data.sku_list);
}
upDomain.sku_list = skuList;
YouZanProductUpdateRequest yzReq = new YouZanProductUpdateRequest()
{ param = upDomain };
var yzRsp = YouZanClient.Execute(yzReq, userInfo.YzToken);
if (yzRsp.IsNull() || !yzRsp.success)
{
return Error("有赞接口修改失败:" + yzRsp.message);
}
//获取有赞商品信息,更新最新sku
////获取有赞商品详情
YouZanProductDetailGetRequest detailReq = new YouZanProductDetailGetRequest()
{
item_id = long.Parse(request.ItemId)
};
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.ItemId);
if (request.UpdateType == 1)
{
//记录修改
BatchUpdatepriceHistory batchUpdatepriceHistory = new BatchUpdatepriceHistory()
{
Id = Guid.NewGuid().ToString(),
YzProductId = request.ItemId,
UpdateTime = DateTime.Now,
UpdateStatus = 1,
TaskId = "10000",
YzTxt = JSONUtil.ObjectToJson(detailRs.data.sku_list),
YzBeforeTxt = beforeSku
};
new BatchUpdatepriceHistoryDAL().Insert(batchUpdatepriceHistory);
}
}
return Success(true);
}
///
/// 获取铺货数据
///
///
///
[HttpPost]
public IActionResult ListGetDistributionHistory([FromBody] ListGetDistributionHistoryRequest request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
string where = " where a.is_del=0 ";
if (!request.Title.IsNullOrEmpty())
{
where += $" and a.pro_title like'%{request.Title}%' ";
}
if ((!request.TagIds.IsNull() && request.TagIds.Count > 0) || !request.IsDisplay.IsNull())
{//根据商品分组查询
List itemIds = _itemDistributionService.GetYzItemIdByTag(request, userInfo.YzToken);
if (!itemIds.IsNull() && itemIds.Count > 0)
{
string yzItemStr = string.Join(',', itemIds);
yzItemStr = "'" + yzItemStr.Replace(",", "','") + "'";
where += $" and a.yz_item_id in ({yzItemStr}) ";
}
}
List response = new List();
//先查总数
string countSql = $"select count(1) as count from distribution_history a {where}";
DataTable countDt = new DistributionHistoryDAL().GetDataBySql(countSql);
int totalCount = 0;
if (countDt.IsNull() || countDt.Rows.Count == 0)
{
return Success(response, request.PageNo, request.PageSize, 0);
}
totalCount = int.Parse(countDt.Rows[0]["count"].ToString());
string searchSql = $"SELECT a.*,b.alisku_info,b.yzsku_info from distribution_history a left JOIN distribution_relation b on a.yz_item_id=b.yz_product {where} order by a.create_time desc limit {request.PageSize} offset {(request.PageNo - 1) * request.PageSize}";
DataTable dt = new DistributionHistoryDAL().GetDataBySql(searchSql);
if (dt.IsNull() || dt.Rows.Count == 0)
{
return Success(response, request.PageNo, request.PageSize, 0);
}
List skuNoList = new List();
foreach (DataRow dr in dt.Rows)
{
ListGetDistributionHistoryResponse rsp = new ListGetDistributionHistoryResponse()
{
Id = dr["id"].ToString(),
ProductId = dr["product_id"].ToString(),
CreateTime = Convert.ToDateTime(dr["create_time"].ToString()),
DisStatus = int.Parse(dr["dis_status"].ToString()),
Memo = dr["memo"].ToString(),
YzItemId = dr["yz_item_id"].ToString(),
TaskId = dr["task_id"].ToString(),
ProTitle = dr["pro_title"].ToString(),
ProImg = dr["pro_img"].ToString(),
YzAlias = dr["yz_alias"].ToString(),
ProSource = int.Parse(dr["pro_source"].ToString()),
IsFreeShipping = int.Parse(dr["is_free_shipping"].ToString())
};
List skuList = new List();
if (dr["yzsku_info"].IsNull() || dr["yzsku_info"].ToString().IsNullOrEmpty())
{
rsp.SkuList = skuList;
response.Add(rsp);
continue;
}
List yzSkuList = JSONUtil.JsonToObject>(dr["yzsku_info"].ToString());
skuNoList.Add(yzSkuList[0].sku_no);
List aliSkuList = JSONUtil.JsonToObject>(dr["alisku_info"].ToString());
foreach (var sitem in yzSkuList)
{
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 = dr["pro_source"].ToString() == "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,
RowCount = yzSkuList.Count,
YzItemId = dr["yz_item_id"].ToString()
};
skuList.Add(proSkuItem);
}
rsp.SkuList = skuList;
response.Add(rsp);
}
//获取有赞商品上下架状态
YouZanItemCommonSearchRequest yzSearchReq = new YouZanItemCommonSearchRequest()
{
page_no = 1,
page_size = 50
};
if (skuNoList.Count > 0)
{
yzSearchReq.sku_nos = skuNoList;
var yzSearchRsp = YouZanClient.Execute(yzSearchReq, userInfo.YzToken);
if (!yzSearchRsp.IsNull() && !yzSearchRsp.data.IsNull() && !yzSearchRsp.data.items.IsNull())
{
foreach (var item in response)
{
if (item.YzItemId.IsNullOrEmpty())
{
continue;
}
var disPlayItem = yzSearchRsp.data.items.Where(t => t.item_id == long.Parse(item.YzItemId)).ToList();
if (!disPlayItem.IsNull() && disPlayItem.Count > 0)
{
item.IsDisplay = disPlayItem[0].is_display == 1 ? 1 : 2;
item.ProTagIds = disPlayItem[0].tag_ids;
}
}
}
}
return Success(response, request.PageNo, request.PageSize, totalCount);
}
///
/// 提交拉取分销单任务
///
///
[HttpPost]
public IActionResult AddDistributebillTask()
{
var task = new DaifaTaskDAL().ListGet(t => t.TaskStatus != 2);
if (!task.IsNull() && task.Count > 0)
{
return Error("当前有任务执行,请稍后提交任务!");
}
string taskId = Guid.NewGuid().ToString();
DaifaTask daifaTask = new DaifaTask()
{
Id = taskId,
CreateTime = DateTime.Now,
TaskStatus = 0,
TaskType = 1
};
new DaifaTaskDAL().Insert(daifaTask);
//发执行mq
ProductDistributionMq productDistributionMq = new ProductDistributionMq()
{
TaskId = taskId,
TaskType = 1
};
string ret = MQClientFullChannel.SendMessageStatic(0, "product_distribution", JSONUtil.ObjectToJson(productDistributionMq));
if (ret != "ok")
{
return Error("mq发送失败");
}
return Success(true);
}
///
/// 有赞下架
///
///
///
[HttpPost]
public IActionResult DelingYz([FromBody] DelingYzRequset request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
//下架有赞商品
YouZanItemDelistingRequest delistingReq = new YouZanItemDelistingRequest()
{
item_id = long.Parse(request.YzProductId)
};
var delistingRsp = YouZanClient.Execute(delistingReq, userInfo.YzToken);
if (delistingRsp.IsNull() || !delistingRsp.success)
{
return Error("下架有赞商品失败:" + (delistingRsp.IsNull() ? "null" : delistingRsp.message));
}
//修改消息记录里的有赞状态
ProductUpdateLog productUpdateLog = new ProductUpdateLog()
{
Memo = "人工下架",
IsSystemDown = 0
};
new ProductUpdateLogDAL().Update(productUpdateLog, i => new { i.Memo, i.IsSystemDown }, t => t.YzProductId == request.YzProductId);
return Success(true);
}
///
/// 有赞上架
///
///
///
[HttpPost]
public IActionResult UpdateListingYz([FromBody] UpdateListingYzRequest request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
//获取有赞对应的铺货关系
var relat = new DistributionRelationDAL().ListGet(t => t.YzProduct == request.YzProductId);
if (relat.IsNull() || relat.Count == 0)
{
return Error("获取有赞对应1688的商品关系失败!");
}
//获取商品详情
if (relat[0].ProSource == 0)
{//精选
List ls = new List();
ls.Add(relat[0].SourceProduct);
PFTProductDetailRequest pftrequest = new PFTProductDetailRequest()
{
offerIds = ls
};
var pftresponse = AliabaClient.Execute(pftrequest, userInfo.AlibabaToken);
if (pftresponse.IsNull() || !pftresponse.result.success || pftresponse.result.result.Count == 0)
{//获取商品详情失败
return Error("获取精选商品详情失败:" + pftresponse.result.message);
}
if (pftresponse.result.result[0].productInfo.status != "published" || !pftresponse.result.result[0].productInfo.saleInfo.supportOnlineTrade)
{//不可上架
return Error("该精选商品状态异常,不可上架");
}
}
else
{//代发
FenXiaoProductInfoGetRequest fxrequest = new FenXiaoProductInfoGetRequest()
{
offerId = long.Parse(relat[0].SourceProduct)
};
var fxresponse = AliabaClient.Execute(fxrequest, userInfo.AlibabaToken);
if (fxresponse.IsNull() || !fxresponse.Success)
{
return Error("获取代发商品详情失败:" + fxresponse.ErrorMsg);
}
if (fxresponse.productInfo.status != "published" || !fxresponse.productInfo.productSaleInfo.supportOnlineTrade)
{
return Error("该精选商品状态异常,不可上架");
}
}
//有赞上架
YouZanUpdateListingRequest yzReq = new YouZanUpdateListingRequest()
{
item_id = long.Parse(request.YzProductId)
};
var yzRsp = YouZanClient.Execute(yzReq, userInfo.YzToken);
if (yzRsp.IsNull() || !yzRsp.success)
{
return Error("有赞上架失败:" + yzRsp.message);
}
//修改消息记录里的有赞状态
ProductUpdateLog productUpdateLog = new ProductUpdateLog()
{
Memo = "人工上架",
IsSystemDown = 0
};
new ProductUpdateLogDAL().Update(productUpdateLog, i => new { i.Memo, i.IsSystemDown }, t => t.YzProductId == request.YzProductId);
return Success(true);
}
///
/// 删除商品变更日志
///
///
///
[HttpPost]
public IActionResult BatchDeleteProductLog([FromBody] BatchDeleteProductLogRequest request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
ProductUpdateLog productUpdateLog = new ProductUpdateLog()
{
IsDel = 1
};
var res = new ProductUpdateLogDAL().Update(productUpdateLog, i => new { i.IsDel }, t => request.LogIds.Contains(t.Id));
if (request.IsDelItem)
{
var logInfo = new ProductUpdateLogDAL().ListGet(t => request.LogIds.Contains(t.Id));
if (!logInfo.IsNull() && logInfo.Count > 0)
{
var aliIds = logInfo.Select(t => t.ProductId).ToList();
var history = new DistributionHistoryDAL().ListGet(t => aliIds.Contains(t.ProductId) && t.IsDel == 0);
foreach (var his in history)
{
bool removeRes = true;
if (his.DisStatus == 2)
{
//先解除铺货关系
removeRes = _itemDistributionService.RemoveRelatProduct(his.ProductId, userInfo.AlibabaToken, userInfo.YzToken, his, userInfo.YzShopId);
}
if (removeRes)
{
DistributionHistory distributionHistory = new DistributionHistory()
{
IsDel = 1,
DeleteTime = DateTime.Now
};
new DistributionHistoryDAL().Update(distributionHistory, t => new { t.IsDel, t.DeleteTime }, t => t.Id == his.Id && t.DisStatus != 1);
}
}
}
}
return Success(true);
}
///
/// 更新商品sku信息
///
///
///
[HttpPost]
public IActionResult UpdateYzSkuListInfo([FromBody] UpdateYzSkuListInfoRequest request)
{
return Success(true);
;
}
}
}