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消息处理失败");
}
}
///
/// 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, BaseAliMessage baseAliMessage)
{
try
{
TradeMqMessage tradeMqMessage = new TradeMqMessage()
{
MsgType = "ali_trade",
MsgBody = message
};
if(baseAliMessage.type.StartsWith("PRODUCT_"))
{
tradeMqMessage.MsgType = "ali_product";
}
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消息处理失败");
}
}
}
}