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
|
{
|
/// <summary>
|
/// 消息入库
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
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消息入库错误");
|
}
|
}
|
|
/// <summary>
|
/// 精选货源商品下架消息
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
|
public static async Task OfferQuitHandle(BaseAliMessage request)
|
{
|
try
|
{
|
OfferQuitData data = JSONUtil.JsonToObject<OfferQuitData>(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<ProductUpdateLog> logList = new List<ProductUpdateLog>();
|
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消息处理失败");
|
}
|
}
|
|
|
/// <summary>
|
/// 1688商品库存变更消息(关系用户视角)
|
/// </summary>
|
/// <param name="request"></param>
|
public static async Task InventoryChange(BaseAliMessage request)
|
{
|
try
|
{
|
OfferInventoryChangeListModel change = JSONUtil.JsonToObject<OfferInventoryChangeListModel>(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<ProductUpdateLog> logList = new List<ProductUpdateLog>();
|
foreach (var re in relationList)
|
{
|
|
string context = string.Empty;
|
List<SkuInfosItem> skuInfos = JSONUtil.JsonToObject<List<SkuInfosItem>>(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消息处理失败");
|
}
|
}
|
|
/// <summary>
|
/// 订单消息转发
|
/// </summary>
|
/// <param name="message"></param>
|
/// <returns></returns>
|
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消息处理失败");
|
}
|
}
|
}
|
}
|