using AlibabaSDK.Api; using AlibabaSDK.Domain; using AlibabaSDK.Request; using CommonUtil; using Operater.DAL; using Operater.DbModel; using Operater.DTO.System; using Operater.DTO.TopMessage; using Operater.Service.System; using System; using System.Collections.Generic; using System.Linq; using System.Text; using YouZanSDKStandard.Api; using YouZanSDKStandard.Api.Domain; using YouZanSDKStandard.Api.Request; using static CommonUtil.DbEnum; namespace TradeInterflow.Handle { public class AliProductHandle { private static string _logName = "1688商品处理error"; public static void HandleExecute(string message) { try { //BaseAliProduct BaseAliMessage aliMsg = JSONUtil.JsonToObject(message); switch (aliMsg.type) { case "PRODUCT_RELATION_VIEW_PRODUCT_AUDIT": Console.WriteLine("1688产品审核下架(关系用户视角)"); AliProAudit(aliMsg, "1688产品审核下架", true); break; case "PRODUCT_RELATION_VIEW_PRODUCT_DELETE": Console.WriteLine("1688产品删除(关系用户视角)"); AliProAudit(aliMsg, "1688产品删除", true); break; case "PRODUCT_RELATION_VIEW_PRODUCT_EXPIRE": Console.WriteLine("1688产品下架(关系用户视角)"); AliProAudit(aliMsg, "1688产品下架", true); break; case "PRODUCT_RELATION_VIEW_PRODUCT_NEW_OR_MODIFY": Console.WriteLine("1688产品新增或修改(关系用户视角)"); AliProAudit(aliMsg, "1688产品新增或修改", true); break; case "PRODUCT_PFT_OFFER_QUIT": Console.WriteLine("精选货源商品下架"); OfferQuitHandle(aliMsg); break; case "PRODUCT_PFT_OFFER_PRICE_MODIFY":// Console.WriteLine("精选货源商品价格变动消息"); OfferPriceModify(aliMsg); break; case "PRODUCT_PRODUCT_INVENTORY_CHANGE": Console.WriteLine("688商品库存变更消息(关系用户视角)"); InventoryChange(aliMsg); break; } } catch (Exception e) { LogUtil.Info("主线程错误:" + e.ToString(), _logName); Console.WriteLine("主线程错误:" + e.ToString()); } } #region 1688商品库存变更消息 /// /// 1688商品库存变更消息(关系用户视角) /// /// public static void 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提醒 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(); string yzToken = CommonHandle.GetYzToken(); foreach (var re in relationList) { string context = string.Empty; List skuInfos = JSONUtil.JsonToObject>(re.AliskuInfo); List YzSkuInfos = JSONUtil.JsonToObject>(re.YzskuInfo); 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 yzSku = YzSkuInfos.Where(t => t.sku_no == sku.skuId.ToString()).ToList(); if (!yzSku.IsNull() && yzSku.Count > 0) { YouZanQuantityUpdateRequest yzQuReq = new YouZanQuantityUpdateRequest() { item_id = long.Parse(re.YzProduct), quantity = sku.skuOnSale, sku_id = long.Parse(yzSku[0].sku_id), type = 0 }; var yzQuRsp = YouZanClient.Execute(yzQuReq, yzToken); if (yzQuRsp.IsNull() || !yzQuRsp.success || !yzQuRsp.data.is_success) { LogUtil.Info($"【消息】{JSONUtil.ObjectToJson(request)}--修改有赞库存失败:request:{JSONUtil.ObjectToJson(yzQuReq)}--错误:{yzQuRsp.message}", "1688库存处理失败"); } else { LogUtil.Info($"【修改成功】:{JSONUtil.ObjectToJson(yzQuReq)}", "修改库存日志"); } } } 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库存处理失败"); } } #endregion #region 精选货源商品价格变动消息 public static void 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 = ""; if (data.minPrice > 0) { 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; } foreach (var sku in 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; //修改关系表里的1688最新sku信息 DistributionRelation distributionRelation = new DistributionRelation() { AliskuInfo = JSONUtil.ObjectToJson(proRsp.result.result[0].productInfo.skuInfos) }; new DistributionRelationDAL().Update(distributionRelation, i => new { i.AliskuInfo }, t => t.SourceProduct == data.offerId); //下架有赞商品 DelistingYz(item.YzProduct, "精选货源商品价格变动"); productUpdateLog.IsSystemDown = 1; productUpdateLog.Memo = "系统下架有赞"; logList.Add(productUpdateLog); } if (!logList.IsNull() && logList.Count > 0) { new ProductUpdateLogDAL().InsertRange(logList); } } catch (Exception e) { LogUtil.Info($"【消息】{JSONUtil.ObjectToJson(request)}--【错误】{e.ToString()}", "1688消息处理失败"); } } #endregion #region 精选货源商品下架 public static void 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; } //下架有赞商品 DelistingYz(item.YzProduct, "精选货源商品下架"); productUpdateLog.IsSystemDown = 1; productUpdateLog.Memo = "系统下架有赞"; logList.Add(productUpdateLog); } if (!logList.IsNull() && logList.Count > 0) { new ProductUpdateLogDAL().InsertRange(logList); } } catch (Exception e) { LogUtil.Info($"【消息】{JSONUtil.ObjectToJson(request)}--【错误】{e.ToString()}", "1688消息处理失败"); } } #endregion #region 商品变动通知 public static void AliProAudit(BaseAliMessage aliMsg, string msgStr, bool isDelingYz) { BaseAliProduct msg = JSONUtil.JsonToObject(aliMsg.data.ToString()); string[] pros = msg.productIds.Split(','); foreach (string pro in pros) { try { //查询是否有关联铺货商品 var relationList = new DistributionRelationDAL().ListGet(t => t.SourceProduct == pro && t.ReStatus == 1); if (relationList.IsNull() || relationList.Count == 0) { return; } //查询商品信息 var productInfo = new DistributionHistoryDAL().GetFirst(t => t.ProductId == pro, 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 = msgStr, ProductId = pro, MsgType = aliMsg.type, ProcessingStatus = 0, YzProductId = item.YzProduct, MsgId = Guid.NewGuid().ToString() }; if (!productInfo.IsNull() && !productInfo.Id.IsNullOrEmpty()) { productUpdateLog.ProductImg = productInfo.ProImg; productUpdateLog.ProductTitle = productInfo.ProTitle; } if (isDelingYz) { productUpdateLog.IsSystemDown = 1; productUpdateLog.Memo = "系统下架有赞;"; if (aliMsg.type == "PRODUCT_RELATION_VIEW_PRODUCT_NEW_OR_MODIFY") {//商品新增或修改,校验sku是否有变动 string yzToken = CommonHandle.GetYzToken(); string aliToken = CommonHandle.GetAliToken(); CompareChangeRequest req = new CompareChangeRequest() { AliProductId = long.Parse(pro), YzProductId = long.Parse(item.YzProduct), AliToken = aliToken, YzToken = yzToken }; var checRsp = AliProductHandle.CompareChange(req); if (!checRsp.Success) { productUpdateLog.Memo += checRsp.ErrorMsg; } } logList.Add(productUpdateLog); //下架有赞商品 DelistingYz(item.YzProduct, msgStr); } } if (!logList.IsNull() && logList.Count > 0) { new ProductUpdateLogDAL().InsertRange(logList); } } catch (Exception e) { LogUtil.Info($"1688产品审核下架循环错误:{e.ToString()}", _logName); } } } #endregion #region 下架有赞商品 private static void DelistingYz(string yzId, string msg) { //下架有赞商品 string yzToken = CommonHandle.GetYzToken(); YouZanItemDelistingRequest delistingReq = new YouZanItemDelistingRequest() { item_id = long.Parse(yzId) }; var delistingRsp = YouZanClient.Execute(delistingReq, yzToken); if (delistingRsp.IsNull() || !delistingRsp.success) { LogUtil.Info($"下架有赞商品失败[{yzId}]({msg}):" + (delistingRsp.IsNull() ? "null" : JSONUtil.ObjectToJson(delistingRsp)), "下架有赞商品"); } else { LogUtil.Info($"下架有赞商品成功[{yzId}]({msg})", "下架有赞商品"); } } #endregion #region 比较两端商品变化 public static CompareChangeResponse CompareChange(CompareChangeRequest request) { CompareChangeResponse rsp = new CompareChangeResponse() { Success = false }; //获取1688商品详情 var aliPro = new ProductManageService().GetAliProductInfo(request); if (!aliPro.Success) { LogUtil.Info($"[{request.AliProductId}]-错误:" + aliPro.Error, "比较失败"); rsp.ErrorMsg = $"[{request.AliProductId}]-错误:" + aliPro.Error; return rsp; } //获取有赞商品详情 YouZanProductDetailGetRequest detailReq = new YouZanProductDetailGetRequest() { item_id = request.YzProductId }; var detailRs = YouZanClient.Execute(detailReq, request.YzToken); if (detailRs.IsNull() || !detailRs.success) { LogUtil.Info($"获取有赞商品详情错误:" + detailRs.message, "比较失败"); rsp.ErrorMsg = $"获取有赞商品详情错误:" + detailRs.message; return rsp; } List aliSkuList = new List(); if (request.ProSource == 0) {//精选 aliSkuList = aliPro.JXProduct.skuInfos; } else {//代发 List res = JSONUtil.JsonToObject>(JSONUtil.ObjectToJson(aliPro.DFProduct.productSkuInfos)); aliSkuList = res; } StringBuilder errorMsg = new StringBuilder(); foreach (var yzSkuItem in detailRs.data.sku_list) { var aliSku = aliSkuList.Where(t => t.skuId == long.Parse(yzSkuItem.sku_no)).ToList(); if (aliSku.IsNull() || aliSku.Count == 0) {//不存在sku errorMsg.Append($"【{yzSkuItem.sku_props[0].prop_value_name}】在1688商品中不存在;"); continue; } foreach (var prop in yzSkuItem.sku_props) { var aliProp = aliSku[0].attributes.Where(t => t.attributeName == prop.prop_name).ToList(); if (aliProp.IsNull() || aliProp.Count == 0) { errorMsg.Append($"【{prop.prop_name}】在1688商品中不存在;"); continue; } if (aliProp[0].attributeValue != prop.prop_value_name) { errorMsg.Append($"【{prop.prop_value_name}】与1688描述不一致;"); continue; } } } if (!errorMsg.IsNull() && errorMsg.Length > 0) { rsp.ErrorMsg = errorMsg.ToString(); return rsp; } rsp.Success = true; return rsp; } #endregion public static void 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消息入库错误"); } } } }