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消息处理失败"); } } } }