using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AlibabaSDK.Api;
using AlibabaSDK.Domain;
using AlibabaSDK.Request;
using CommonUtil;
using CommonUtil.RabbitMQ;
using Operater.DAL;
using Operater.DbModel;
using Operater.DTO.TopMessage;
using static CommonUtil.DbEnum;
namespace Api.MessageReceive.Service
{
public class AliMessageService
{
///
/// 消息入库
///
///
///
public static async Task RecordMessage(BaseAliMessage request)
{
try
{
AliMsgHistory aliMsgHistory = new AliMsgHistory()
{
Id = TopUtil.GetId().ToString(),
MsgId = request.msgId,
GmtBorn = request.gmtBorn.ToDateTime(),
UserInfo = request.userInfo,
MsgType = request.type,
CreateTime = DateTime.Now,
Data = request.data.ToString()
};
new AliMsgHistoryDAL().Insert(aliMsgHistory);
}
catch (Exception e)
{
LogUtil.Info(e.ToString(), "1688消息入库错误");
}
}
///
/// 精选货源商品下架消息
///
///
///
public static async Task OfferQuitHandle(BaseAliMessage request)
{
try
{
OfferQuitData data = JSONUtil.JsonToObject(request.data.ToString());
//查询是否有关联铺货商品
var relationList = new DistributionRelationDAL().ListGet(t => t.SourceProduct == data.offerId && t.ReStatus == 1);
if (relationList.IsNull() || relationList.Count == 0)
{
return;
}
//查询商品信息
var productInfo = new DistributionHistoryDAL().GetFirst(t => t.ProductId == data.offerId, i => new { i.CreateTime }, OrderType.Desc);
List logList = new List();
foreach (var item in relationList)
{
ProductUpdateLog productUpdateLog = new ProductUpdateLog()
{
Id = TopUtil.GetId().ToString(),
CreateTime = DateTime.Now,
UpdateContent = "精选货源商品下架",
ProductId = data.offerId,
MsgType = request.type,
ProcessingStatus = 0,
YzProductId = item.YzProduct,
MsgId = request.msgId
};
if (!productInfo.IsNull() && !productInfo.Id.IsNullOrEmpty())
{
productUpdateLog.ProductImg = productInfo.ProImg;
productUpdateLog.ProductTitle = productInfo.ProTitle;
}
logList.Add(productUpdateLog);
}
if (!logList.IsNull() && logList.Count > 0)
{
new ProductUpdateLogDAL().InsertRange(logList);
}
}
catch (Exception e)
{
LogUtil.Info($"【消息】{JSONUtil.ObjectToJson(request)}--【错误】{e.ToString()}", "1688消息处理失败");
}
}
///
/// 精选货源商品价格变动消息
///
///
///
public static async Task OfferPriceModify(BaseAliMessage request)
{
try
{
OfferPriceModifyData data = JSONUtil.JsonToObject(request.data.ToString());
//查询是否有关联铺货商品
var relationList = new DistributionRelationDAL().ListGet(t => t.SourceProduct == data.offerId && t.ReStatus == 1);
if (relationList.IsNull() || relationList.Count == 0)
{
return;
}
//从接口查询商品信息
var appSet = new AppsetDAL().ListGet(t => t.Id != null).ToList();
List ls = new List();
ls.Add(data.offerId);
PFTProductDetailRequest proRequest = new PFTProductDetailRequest()
{
offerIds = ls
};
var proRsp = AliabaClient.Execute(proRequest, appSet[0].AlibabaToken);
List logList = new List();
//处理变动项目
string updateContent = $"商品价格变动:{data.minPrice / 100}元;";
if(data.skuUpdateInfos.IsNull())
{
ProductUpdateLog productUpdateLog = new ProductUpdateLog()
{
Id = TopUtil.GetId().ToString(),
CreateTime = DateTime.Now,
ProductId = data.offerId,
MsgType = request.type,
ProcessingStatus = 0,
UpdateContent = updateContent,
MsgId = request.msgId,
YzProductId = relationList[0].YzProduct
};
productUpdateLog.ProductImg = proRsp.result.result[0].productInfo.image.images[0];
productUpdateLog.ProductTitle = proRsp.result.result[0].productInfo.subject;
new ProductUpdateLogDAL().Insert(productUpdateLog);
return;
}
var sku = data.skuUpdateInfos;
var topSku = proRsp.result.result[0].productInfo.skuInfos.Where(t => t.skuId == long.Parse(sku.skuId)).ToList();
if (!topSku.IsNull() && topSku.Count > 0)
{
updateContent += $"[{topSku[0].attributes[0].attributeName}:{topSku[0].attributes[0].attributeValue}]规格变动:{sku.historyRetailPrice / 100}元;";
}
foreach (var item in relationList)
{
ProductUpdateLog productUpdateLog = new ProductUpdateLog()
{
Id = TopUtil.GetId().ToString(),
CreateTime = DateTime.Now,
ProductId = data.offerId,
MsgType = request.type,
ProcessingStatus = 0,
UpdateContent = updateContent,
MsgId = request.msgId,
YzProductId = item.YzProduct
};
productUpdateLog.ProductImg = proRsp.result.result[0].productInfo.image.images[0];
productUpdateLog.ProductTitle = proRsp.result.result[0].productInfo.subject;
logList.Add(productUpdateLog);
}
if (!logList.IsNull() && logList.Count > 0)
{
new ProductUpdateLogDAL().InsertRange(logList);
}
}
catch (Exception e)
{
LogUtil.Info($"【消息】{JSONUtil.ObjectToJson(request)}--【错误】{e.ToString()}", "1688消息处理失败");
}
}
///
/// 1688商品库存变更消息(关系用户视角)
///
///
public static async Task InventoryChange(BaseAliMessage request)
{
try
{
OfferInventoryChangeListModel change = JSONUtil.JsonToObject(request.data.ToString());
var changeList = change.OfferInventoryChangeList;
var list = changeList.Where(t => t.skuOnSale <= 50).ToList();
if (list.IsNull() || list.Count == 0)
{
return;
}
if(changeList[0].skuId==0)
{
return;
}
//小于50提醒
await AliMessageService.RecordMessage(request);
var changeDis = list.GroupBy(t => new { t.offerId }).Select(t => t.FirstOrDefault()).ToList();
var disOffids = changeDis.Select(t => t.offerId.ToString()).ToList();
//查询是否有关联铺货商品
var relationList = new DistributionRelationDAL().ListGet(t => disOffids.Contains(t.SourceProduct) && t.ReStatus == 1);
if (relationList.IsNull() || relationList.Count == 0)
{
return;
}
List logList = new List();
foreach (var re in relationList)
{
string context = string.Empty;
List skuInfos = JSONUtil.JsonToObject>(re.AliskuInfo);
var skuitem = list.Where(t => t.offerId == long.Parse(re.SourceProduct)).ToList();
foreach (var sku in skuitem)
{
var aliSku = skuInfos.Where(t => t.skuId == sku.skuId).ToList();
if (aliSku.IsNull() || aliSku.Count == 0)
{
continue;
}
var aliSkuItem = aliSku[0];
context += $"【{aliSkuItem.attributes[0].attributeValue}】规格库存:{sku.skuOnSale};";
}
var productInfo = new DistributionHistoryDAL().GetFirst(t => t.ProductId == re.SourceProduct, i => new { i.CreateTime }, OrderType.Desc);
ProductUpdateLog productUpdateLog = new ProductUpdateLog()
{
Id = TopUtil.GetId().ToString(),
CreateTime = DateTime.Now,
UpdateContent = context,
ProductId = re.SourceProduct,
MsgType = request.type,
ProcessingStatus = 0,
YzProductId = re.YzProduct,
MsgId = request.msgId
};
if (!productInfo.IsNull() && !productInfo.Id.IsNullOrEmpty())
{
productUpdateLog.ProductImg = productInfo.ProImg;
productUpdateLog.ProductTitle = productInfo.ProTitle;
}
logList.Add(productUpdateLog);
}
if (!logList.IsNull() && logList.Count > 0)
{
new ProductUpdateLogDAL().InsertRange(logList);
}
}
catch (Exception e)
{
LogUtil.Info($"【消息】{JSONUtil.ObjectToJson(request)}--【错误】{e.ToString()}", "1688消息处理失败");
}
}
///
/// 订单消息转发
///
///
///
public static async Task TradeMessageSend(string message)
{
try
{
TradeMqMessage tradeMqMessage = new TradeMqMessage()
{
MsgType = "ali_trade",
MsgBody = message
};
string ret = MQClientFullChannel.SendMessageStatic(0, "trade_interflow", JSONUtil.ObjectToJson(tradeMqMessage));
if (ret != "ok")
{
LogUtil.Info($"发MQ失败:{message}", "处理失败");
}
}
catch (Exception e)
{
LogUtil.Info($"【消息】{message}--【错误】{e.ToString()}", "1688消息处理失败");
}
}
}
}