/// <summary> /// 第三方电商获取订单项物流 /// </summary> /// <param name="appId"></param> /// <param name="orderId"></param> /// <returns></returns> public static List <ThirdOrderItemExpress> GetOrderItemExpress(Guid appId, Guid orderId, ref bool isThirdECommerceOrder) { var type = GetAppThirdECommerceType(appId); if (type == ThirdECommerceTypeEnum.WangYiYanXuan) { isThirdECommerceOrder = true; var list = YXOrderHelper.GetYXExpressDetailInfoSkuList(orderId); return(list.Select(p => new ThirdOrderItemExpress { OrderItemId = p.OrderItemId, ExpressNo = p.ExpressNo, SubExpressNos = p.SubExpressNos }).ToList()); } else if (type == ThirdECommerceTypeEnum.ByBiaoZhunJieKou) { isThirdECommerceOrder = true; var list = ThirdECommerceOrderHelper.GetThirdECOrderPackageSkuList(orderId); return(list.Select(p => new ThirdOrderItemExpress { OrderItemId = p.OrderItemId, ExpressNo = p.ExpressNo }).ToList()); } else if (type == ThirdECommerceTypeEnum.SuNingYiGou) { isThirdECommerceOrder = true; return(SuningSV.suning_govbus_rejection_getsnpackage(orderId)); } else if (type == ThirdECommerceTypeEnum.FangZheng) { isThirdECommerceOrder = true; return(FangZhengSV.FangZheng_Logistics_Package(orderId)); } return(new List <ThirdOrderItemExpress>()); }
/// <summary> /// 订单支付成功时调用 /// </summary> /// <param name="order"></param> public static void OnOrderPaySuccess(CommodityOrder order) { LogHelper.Info("进入OrderEventHelper.OnOrderPaySuccess-" + order.Code + ",OrderId:" + order.Id + ",OrderState:" + order.State); // 拼图支付成功时不触发 if (order.State != 1) { return; } // 发送消息 var requestPar = "{\"project\":\"btp\",\"topic\":\"btporder-0x0001\",\"data\":\""; var data = "{\"orderId\": \"" + order.Id + "\",\"userId\": \"" + order.UserId + "\",\"appId\": \"" + order.AppId + "\"}"; requestPar += System.Web.HttpUtility.UrlEncode(data, Encoding.GetEncoding("gbk")) + "\"}"; var requestUrl = msgUrl + "?" + System.Web.HttpUtility.UrlEncode(requestPar, Encoding.GetEncoding("gbk")); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl); request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; try { using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.OK) { LogHelper.Info("OrderEventHelper.OnOrderPaySuccess 发送消息成功, RequestUrl: " + requestUrl); } else { LogHelper.Error("OrderEventHelper.OnOrderPaySuccess 发送消息失败, RequestUrl: " + requestUrl + " \r\nResponseCode: " + response.StatusCode); } } } catch (Exception ex) { LogHelper.Error("OrderEventHelper.OnOrderPaySuccess 发送消息异常, RequestUrl: " + requestUrl, ex); } switch (ThirdECommerceHelper.GetAppThirdECommerceType(order.AppId)) { case Deploy.Enum.ThirdECommerceTypeEnum.JingDongDaKeHu: // 更新京东订单 JdOrderHelper.UpdateJdorder(order.Id); break; case Deploy.Enum.ThirdECommerceTypeEnum.SuNingYiGou: // 确认苏宁预占 SuningSV.suning_govbus_confirmorder_add(order.Id, false); break; case Deploy.Enum.ThirdECommerceTypeEnum.FangZheng: // 方正电商订单 FangZhengSV.FangZheng_Order_Confirm(order.Id, false); break; } }
public bool OrderConfirmReceivedExt(Guid OrderId) { var OrderItemList = new SNConfirmParamsDto(); OrderItemList.OrderId = OrderId.ToString(); OrderItemList.SkuConfirmList = SNOrderAfterSalesHelper .SNJudgeIsFactoryDeliveryByOrderId(OrderId) .Where(w => w.IsFactorySend == true) .Select(s => new SNConfirmItemParamsDto { ConfirmTime = DateTime.Now.ToString(), SkuId = s.SkuId }).ToList(); if (OrderItemList.SkuConfirmList.Count == 0) { return(true); } return(SuningSV.suning_govbus_facproduct_confirm(OrderItemList)); }
/// <summary> /// 判断是否是厂送 /// </summary> /// <param name="provinceName">省名称</param> /// <param name="cityName">城市名称</param> /// <param name="skuIds">9位或者11位商品编码</param> /// <returns></returns> public static List <SNFactoryDeliveryReturnListDTO> SNJudgeIsFactoryDelivery(string provinceName, string cityName, List <SNApplyRejectedSkusDTO> skuIds) { SNAreaDTO areaDto = GetCityId(provinceName, cityName); if (areaDto != null) { SNFactoryDeliveryDTO dto = new SNFactoryDeliveryDTO { CityId = areaDto.A, SkuIds = skuIds }; SNFactoryDeliveryReturnDTO ty = SuningSV.JudgeIsFactoryDelivery(dto); if (ty != null && ty.IsSuccess) { return(ty.ResultsList); } } return(new List <SNFactoryDeliveryReturnListDTO>()); }
public bool ChangeOrderStatusForJobExt() { try { //更改订单状态 var DataList = SuningSV.suning_govbus_message_get("11"); DataList.ForEach(Item => { var EntityList = SNOrderItem.ObjectSet() .Where(w => w.CustomOrderId == Item.orderNo) .ToList(); if (EntityList != null) { EntityList.ForEach(ItemModel => { ItemModel.Status = Convert.ToInt32(Item.status); ItemModel.EntityState = EntityState.Modified; SNOrderItem.ObjectSet().Attach(ItemModel); //根据ID从消息池删除数据 if (ContextFactory.CurrentThreadContext.SaveChanges() >= 0) { SuningSV.suning_govbus_message_delete(Item.id); } }); } }); //检查确认预占失败的订单 SNOrderItem.ObjectSet().Where(w => w.Status < 3).ToList() .ForEach(Item => { SuningSV.suning_govbus_confirmorder_add(Item.OrderId, false); }); return(true); } catch (Exception ex) { LogHelper.Error(string.Format("Job-SuningChangeOrderStatus:{0}", ex.Message)); return(false); } }
/// <summary> /// 获取苏宁物流信息 /// </summary> /// <param name="orderId"></param> /// <param name="orderItemId"></param> /// <returns></returns> public List <Deploy.SNExpressTraceDTO> GetExpressTraceExt(string orderId, string orderItemId) { ContextSession contextSession = ContextFactory.CurrentThreadContext; List <SNExpressTraceDTO> SNExpressList = new List <SNExpressTraceDTO>(); var OrderItemGuid = Guid.Parse(orderItemId); var EntityQuery = SNOrderItem.ObjectSet().Where(w => w.OrderItemId == OrderItemGuid).FirstOrDefault(); LogHelper.Info(string.Format("苏宁物流3")); if (EntityQuery != null) { SuningSV.suning_govbus_orderlogistnew_get(new SNQueryParamsDto { OrderId = EntityQuery.CustomOrderId, OrderItemIds = new List <SNQueryItemParamsDto> { new SNQueryItemParamsDto { SkuId = EntityQuery.CustomSkuId, OrderItemId = EntityQuery.CustomOrderItemId } } }) .ForEach(ItemPackage => { ItemPackage.OrderLogistics.ForEach(LogisticsItem => { SNExpressTraceDTO SNExpress = new SNExpressTraceDTO(); SNExpress.Id = Guid.NewGuid(); SNExpress.OrderId = ItemPackage.OrderId; SNExpress.PackageId = ItemPackage.PackageId; SNExpress.OperateState = LogisticsItem.OperateState; SNExpress.OperateTime = string.IsNullOrWhiteSpace(LogisticsItem.OperateTime) ? DateTime.Now : DateTime.ParseExact(LogisticsItem.OperateTime, "yyyyMMddHHmmss", CultureInfo.CurrentCulture); SNExpressList.Add(SNExpress); }); }); } LogHelper.Info(string.Format("苏宁物流4")); return(SNExpressList.Count > 0 ? SNExpressList : null); }
public bool ChangeLogistStatusForJobExt() { ContextSession contextSession = ContextFactory.CurrentThreadContext; SuningSV.suning_govbus_message_get("12") .ForEach(Item => { try { var EntityQuery = SNOrderItem.ObjectSet() .Where(w => w.CustomOrderId == Item.orderNo) .Where(w => w.CustomOrderItemId == Item.orderItemNo) .FirstOrDefault(); if (EntityQuery != null) { EntityQuery.ExpressStatus = Convert.ToInt32(Item.status); //根据订单获得物流信息 SuningSV.suning_govbus_orderlogistnew_get(new SNQueryParamsDto { OrderId = EntityQuery.CustomOrderId, OrderItemIds = new List <SNQueryItemParamsDto> { new SNQueryItemParamsDto { SkuId = EntityQuery.CustomSkuId, OrderItemId = EntityQuery.CustomOrderItemId } } }) .ForEach(ItemPackage => { ItemPackage.OrderItemIds.ForEach(OrderItem => { var EntityModel = SNPackageTrace.ObjectSet() .Where(w => w.OrderId == ItemPackage.OrderId) .Where(w => w.OrderItemId == OrderItem.OrderItemId) .Where(w => w.SkuId == OrderItem.SkuId) .Where(w => w.PackageId == ItemPackage.PackageId) .FirstOrDefault(); if (EntityModel == null) { contextSession.SaveObject(new SNPackageTrace { Id = Guid.NewGuid(), CommodityOrderId = EntityQuery.OrderId, OrderId = ItemPackage.OrderId, OrderItemId = OrderItem.OrderItemId, SkuId = OrderItem.SkuId, PackageId = ItemPackage.PackageId, ReceiveTime = string.IsNullOrWhiteSpace(ItemPackage.ReceiveTime) ? DateTime.Now : DateTime.ParseExact(ItemPackage.ReceiveTime, "yyyyMMddHHmmss", CultureInfo.CurrentCulture), ShippingTime = string.IsNullOrWhiteSpace(ItemPackage.ShippingTime) ? DateTime.Now : DateTime.ParseExact(ItemPackage.ShippingTime, "yyyyMMddHHmmss", CultureInfo.CurrentCulture), EntityState = EntityState.Added }); } else { EntityModel.ReceiveTime = string.IsNullOrWhiteSpace(ItemPackage.ReceiveTime) ? DateTime.Now : DateTime.ParseExact(ItemPackage.ReceiveTime, "yyyyMMddHHmmss", CultureInfo.CurrentCulture); EntityModel.ShippingTime = string.IsNullOrWhiteSpace(ItemPackage.ShippingTime) ? DateTime.Now : DateTime.ParseExact(ItemPackage.ShippingTime, "yyyyMMddHHmmss", CultureInfo.CurrentCulture); EntityModel.EntityState = EntityState.Modified; contextSession.SaveObject(EntityModel); } }); ItemPackage.OrderLogistics.ForEach(LogisticsItem => { if (SNExpressTrace.ObjectSet().Where(w => w.OrderId == ItemPackage.OrderId && w.PackageId == ItemPackage.PackageId).FirstOrDefault() == null) { contextSession.SaveObject(new SNExpressTrace { Id = Guid.NewGuid(), OrderId = ItemPackage.OrderId, PackageId = ItemPackage.PackageId, OperateState = LogisticsItem.OperateState, OperateTime = string.IsNullOrWhiteSpace(LogisticsItem.OperateTime) ? DateTime.Now : DateTime.ParseExact(LogisticsItem.OperateTime, "yyyyMMddHHmmss", CultureInfo.CurrentCulture), EntityState = EntityState.Added }); } }); }); //根据ID从消息池删除数据 if (contextSession.SaveChanges() >= 0) { //根据订单ID改订单状态 SuningSV.suning_govbus_rejection_changestatus(Item.status, EntityQuery); SuningSV.suning_govbus_message_delete(Item.id); } } } catch (Exception ex) { LogHelper.Error(string.Format("Job-SuningChangeLogistStatus:{0}", ex)); } }); return(true); }
/// <summary> /// /// </summary> /// <param name="contextSession"></param> /// <param name="order"></param> /// <param name="orderItem"></param> /// <param name="refund"></param> /// <param name="refundDTO"></param> /// <returns></returns> public static ResultDTO SNSubmitRefund(ContextSession contextSession, CommodityOrder order, OrderItem orderItem, OrderRefundAfterSales refund, SubmitOrderRefundDTO refundDTO) { //if (address == null) //{ // return new ResultDTO { isSuccess = false, Message = "取件地址不能为空。" }; //} var snOrderItem = SNOrderItem.ObjectSet() .Where(_ => _.OrderItemId == refundDTO.OrderItemId).FirstOrDefault(); if (snOrderItem == null) { return(new ResultDTO { isSuccess = false, ResultCode = 1, Message = "该订单不是苏宁订单。" }); } SNReturnPartOrderDTO retDto = new SNReturnPartOrderDTO { OrderId = snOrderItem.CustomOrderId, SkusList = new List <SNReturnPartOrderAddSkusDTO>() { new SNReturnPartOrderAddSkusDTO() { SkuId = snOrderItem.CustomSkuId, Num = orderItem.Number.ToString() } } }; ResultDTO result = new ResultDTO { isSuccess = false, ResultCode = 1, Message = "退货失败" }; SNFactoryDeliveryEnum fac = GetOrderFactoryDeliveryType(orderItem.CommodityOrderId, snOrderItem.CustomSkuId); if (fac == SNFactoryDeliveryEnum.NonFactoryDelivery) { result = SuningSV.ReturnPartOrder(retDto);; if (result.isSuccess) { // 保存到 SNOrderRefundAfterSales SNOrderRefundAfterSales snOrderRefundAfterSales = new SNOrderRefundAfterSales { Id = Guid.NewGuid(), SubTime = DateTime.Now, ModifiedOn = DateTime.Now, AppId = order.AppId, OrderRefundAfterSalesId = refund.Id, OrderId = orderItem.CommodityOrderId, OrderItemId = orderItem.Id, CustomOrderId = snOrderItem.CustomOrderId, CommodityId = orderItem.CommodityId, CommodityNum = orderItem.Number, CustomSkuId = snOrderItem.CustomSkuId, Cancel = 1, //取件方式(必填 1 上门取件-非厂送-自营 2快递寄回-厂送 ) PickwareType = fac.GetHashCode(), CustomerContactName = refundDTO.Address.customerContactName, CustomerTel = refundDTO.Address.customerTel, PickwareAddress = refundDTO.Address.ProviceCityStr + refundDTO.Address.pickwareAddress, //暂时没用 AfsServiceId = "", AfsServiceStep = 10, AfsServiceStepName = "申请阶段", EntityState = EntityState.Added }; contextSession.SaveObject(snOrderRefundAfterSales); UpdateApplyOrderStatus(contextSession, 3, orderItem.Id); } else { UpdateApplyOrderStatus(contextSession, 4, orderItem.Id); var log = new Deploy.JdlogsDTO { Id = Guid.NewGuid(), SubTime = DateTime.Now, ThirdECommerceType = ThirdECommerceTypeEnum.SuNingYiGou.GetHashCode(), Content = "【苏宁售后】----【" + order.Code + "】中的" + orderItem.Name + "商品【" + snOrderItem.CustomSkuId + "】,提交售后申请失败,失败原因:【" + result.ResultCode + ":" + result.Message + "】" }; JdlogsFacade facade = new JdlogsFacade(); facade.SaveJdlogs(log); } } else { // 保存到 SNOrderRefundAfterSales SNOrderRefundAfterSales snOrderRefundAfterSales = new SNOrderRefundAfterSales { Id = Guid.NewGuid(), SubTime = DateTime.Now, ModifiedOn = DateTime.Now, AppId = order.AppId, OrderRefundAfterSalesId = refund.Id, OrderId = orderItem.CommodityOrderId, OrderItemId = orderItem.Id, CustomOrderId = snOrderItem.CustomOrderId, CommodityId = orderItem.CommodityId, CommodityNum = orderItem.Number, CustomSkuId = snOrderItem.CustomSkuId, Cancel = 1, //取件方式(必填 1 上门取件-非厂送-自营 2快递寄回-厂送 ) PickwareType = fac.GetHashCode(), CustomerContactName = refundDTO.Address.customerContactName, CustomerTel = refundDTO.Address.customerTel, PickwareAddress = refundDTO.Address.ProviceCityStr + refundDTO.Address.pickwareAddress, //暂时没用 AfsServiceId = "", AfsServiceStep = 10, AfsServiceStepName = "申请阶段", EntityState = EntityState.Added }; contextSession.SaveObject(snOrderRefundAfterSales); UpdateApplyOrderStatus(contextSession, 3, orderItem.Id); result = new ResultDTO { isSuccess = true, ResultCode = 0, Message = "退款申请成功" }; } return(result); }
/// <summary> /// 同步商品价格 /// </summary> public static void AutoUpdatePriceByMessage() { LogHelper.Info("SNJobHelper.AutoUpdatePriceByMessage 开始同步易派客商品价格"); try { var messages = SuningSV.GetPriceMessage(); if (messages == null || messages.Count == 0) { return; } LogHelper.Info("SNJobHelper.AutoUpdatePriceByMessage 开始同步SN商品价格,获取结果如下:" + JsonHelper.JsonSerializer(messages)); var skuIds = messages.Select(_ => _.cmmdtyCode).Where(_ => !string.IsNullOrEmpty(_)).Distinct().ToList(); // // 易派客商品Ids var allCommodityIds = Commodity.ObjectSet().Where(_ => !_.IsDel && YPKAppIdList.Contains(_.AppId)).Select(_ => _.Id); var commodityStocks = CommodityStock.ObjectSet().Where(_ => allCommodityIds.Contains(_.CommodityId) && skuIds.Contains(_.JDCode)).ToList(); var stockCommodityIds = commodityStocks.Select(_ => _.CommodityId).Distinct(); var stockCommodities = Commodity.ObjectSet().Where(_ => stockCommodityIds.Contains(_.Id)).ToList(); List <Guid> autoAuditPriceIds = new List <Guid>(); List <Guid> autoAuditCostPriceIds = new List <Guid>(); var autoAuditPriceAppIds = JDAuditMode.ObjectSet().Where(_ => _.PriceModeState == 0).Select(_ => _.AppId).ToList(); var autoAuditCostPriceAppIds = JDAuditMode.ObjectSet().Where(_ => _.CostModeState == 0).Select(_ => _.AppId).ToList(); List <SNPriceDto> SNPrices = new List <SNPriceDto>(); for (int i = 0; i < skuIds.Count; i += 30) { SNPrices.AddRange(SuningSV.GetPrice(skuIds.Skip(i).Take(30).ToList())); } ContextSession contextSession = ContextFactory.CurrentThreadContext; int count = 0; foreach (var group in commodityStocks.GroupBy(_ => _.CommodityId)) { var addCount = 0; var com = stockCommodities.Where(_ => _.Id == group.Key).FirstOrDefault(); var auditCom = AddCommodityAudit(com); foreach (var item in group) { var snprice = SNPrices.Where(_ => _.skuId == item.JDCode).FirstOrDefault(); if (snprice == null) { LogHelper.Info("SNJobHelper.AutoUpdatePriceByMessage-SKU 未获取到易派客价,商品Id: " + item.Id + ",SkuId: " + item.JDCode); continue; } // 进货价 if (!string.IsNullOrEmpty(snprice.price)) { // 对比审核表 var latestAuditData = JdAuditCommodityStock.ObjectSet().Where(_ => _.CommodityStockId == item.Id && _.AuditType == 1 && _.JdCostPrice.HasValue).OrderByDescending(_ => _.SubTime).Select(_ => _.JdCostPrice).FirstOrDefault(); if (latestAuditData == null || latestAuditData.Value != Convert.ToDecimal(snprice.price)) { count++; addCount++; var auditStock = AddCommodityStockAudit(contextSession, com.AppId, item, Deploy.Enum.OperateTypeEnum.京东修改进货价); auditStock.AuditType = 1; auditStock.JdAuditCommodityId = auditCom.Id; auditStock.JdPrice = string.IsNullOrEmpty(snprice.snPrice) ? Decimal.Zero : Convert.ToDecimal(snprice.snPrice); auditStock.JdCostPrice = string.IsNullOrEmpty(snprice.price) ? Decimal.Zero : Convert.ToDecimal(snprice.price); contextSession.SaveObject(auditStock); if (autoAuditCostPriceAppIds.Contains(com.AppId)) { autoAuditCostPriceIds.Add(auditStock.Id); } LogHelper.Info("SNJobHelper.AutoUpdatePriceByMessage 更新易派客商品进货价,商品Id: " + item.Id + ",SkuId: " + item.JDCode); } } // 售价 if (item.Price != Convert.ToDecimal(snprice.snPrice)) { // 对比审核表 var latestAuditData = JdAuditCommodityStock.ObjectSet().Where(_ => _.CommodityStockId == item.Id && _.AuditType == 2 && _.JdPrice.HasValue).OrderByDescending(_ => _.SubTime).Select(_ => _.JdPrice).FirstOrDefault(); if (latestAuditData == null || latestAuditData.Value != Convert.ToDecimal(snprice.snPrice)) { count++; addCount++; var auditStock = AddCommodityStockAudit(contextSession, com.AppId, item, Deploy.Enum.OperateTypeEnum.京东修改现价); auditStock.AuditType = 2; auditStock.JdAuditCommodityId = auditCom.Id; auditStock.JdPrice = Convert.ToDecimal(snprice.snPrice); contextSession.SaveObject(auditStock); if (autoAuditPriceAppIds.Contains(com.AppId)) { autoAuditPriceIds.Add(auditStock.Id); } LogHelper.Info("SNJobHelper.AutoUpdatePriceByMessage 更新易派客商品售价,商品Id: " + item.Id + ",SkuId: " + item.JDCode); } } } if (addCount > 0) { contextSession.SaveObject(auditCom); } if (count >= 200) { contextSession.SaveChanges(); count = 0; } } // 处理无属性商品,并Stock表中无数据的情况 count = 0; var commodityIds = allCommodityIds.Except(stockCommodityIds); var commodities = Commodity.ObjectSet().Where(_ => commodityIds.Contains(_.Id) && (string.IsNullOrEmpty(_.ComAttribute) || _.ComAttribute == "[]") && skuIds.Contains(_.JDCode)).ToList(); foreach (var com in commodities) { var snprice = SNPrices.Where(_ => _.skuId == com.JDCode).FirstOrDefault(); if (snprice == null) { LogHelper.Info("SNJobHelper.AutoUpdatePriceByMessage-SKU 未获取到 易派客价,商品Id: " + com.Id + ",SkuId: " + com.JDCode); continue; } var addCount = 0; var auditCom = AddCommodityAudit(com); // 进货价 if (!string.IsNullOrEmpty(snprice.price) && com.CostPrice != Convert.ToDecimal(snprice.price)) { // 对比审核表 var latestAuditData = JdAuditCommodityStock.ObjectSet().Where(_ => _.CommodityId == com.Id && _.AuditType == 1 && _.JdCostPrice.HasValue).OrderByDescending(_ => _.SubTime).Select(_ => _.JdCostPrice).FirstOrDefault(); if (latestAuditData == null || latestAuditData.Value != Convert.ToDecimal(snprice.price)) { count++; addCount++; var auditStock = AddCommodityStockAudit(contextSession, com, Deploy.Enum.OperateTypeEnum.京东修改进货价); auditStock.AuditType = 1; auditStock.JdAuditCommodityId = auditCom.Id; auditStock.JdCostPrice = Convert.ToDecimal(snprice.price); contextSession.SaveObject(auditStock); if (autoAuditCostPriceAppIds.Contains(com.AppId)) { autoAuditCostPriceIds.Add(auditStock.Id); } LogHelper.Info("SNJobHelper.AutoUpdatePriceByMessage 更新易派客商品进货价,商品Id: " + com.Id + ",SkuId: " + com.JDCode); } } // 售价 if (com.Price != Convert.ToDecimal(snprice.snPrice)) { // 对比审核表 var latestAuditData = JdAuditCommodityStock.ObjectSet().Where(_ => _.CommodityId == com.Id && _.AuditType == 2 && _.JdPrice.HasValue).OrderByDescending(_ => _.SubTime).Select(_ => _.JdPrice).FirstOrDefault(); if (latestAuditData == null || latestAuditData.Value != Convert.ToDecimal(snprice.snPrice)) { count++; addCount++; var auditStock = AddCommodityStockAudit(contextSession, com, Deploy.Enum.OperateTypeEnum.京东修改现价); auditStock.AuditType = 2; auditStock.JdAuditCommodityId = auditCom.Id; auditStock.JdPrice = Convert.ToDecimal(snprice.snPrice); contextSession.SaveObject(auditStock); if (autoAuditPriceAppIds.Contains(com.AppId)) { autoAuditPriceIds.Add(auditStock.Id); } LogHelper.Info("SNJobHelper.AutoUpdatePriceByMessage 更新易派客商品售价,商品Id: " + com.Id + ",SkuId: " + com.JDCode); } } if (addCount > 0) { contextSession.SaveObject(auditCom); } if (count >= 200) { contextSession.SaveChanges(); count = 0; } } contextSession.SaveChanges(); // 自动审核 var auditComFacade = new JDAuditComFacade(); auditComFacade.ContextDTO = AuthorizeHelper.InitAuthorizeInfo(); if (autoAuditCostPriceIds.Count > 0) { auditComFacade.AuditJDCostPrice(autoAuditCostPriceIds, 1, "自动审核", 0, 0); } if (autoAuditPriceIds.Count > 0) { auditComFacade.AuditJDPrice(autoAuditPriceIds, 1, 0, "自动审核", 0); } // 删除消息 //JDSV.DelMessage(messages.Select(_ => _.Id).ToList()); } catch (Exception ex) { LogHelper.Error("SNJobHelper.AutoUpdatePrice 异常", ex); throw; } LogHelper.Info("SNJobHelper.AutoUpdatePriceByMessage 结束同步易派客商品价格"); }
/// <summary> /// 同步商品上下架 /// </summary> public static void AutoUpdateSNSkuStateByMessage() { try { LogHelper.Info("SNJobHelper.AutoUpdateJdSkuStateByMessage 开始同步易派客商品上下架"); var messages = SuningSV.suning_govbus_message_get("10"); if (messages == null || messages.Count == 0) { return; } var delMsg = messages = messages.Where(_ => _.status == "1" || _.status == "2" || _.status == "0" || _.status == "4").ToList(); if (messages == null || messages.Count == 0) { return; } LogHelper.Info("SNJobHelper.AutoUpdateJdSkuStateByMessage 开始同步易派客商品上下架,获取结果如下:" + JsonHelper.JsonSerializer(messages)); //status 1上架 2下架 0 添加 4 删除 // 0 1代表上架 2 4 代表下架 var skuIds = messages.Where(_ => _.status == "1" || _.status == "2" || _.status == "0" || _.status == "4").Select(_ => _.cmmdtyCode).Where(_ => !string.IsNullOrEmpty(_)).Distinct().ToList(); // 易派客商品Ids var allCommodityIds = Commodity.ObjectSet().Where(_ => !_.IsDel && YPKAppIdList.Contains(_.AppId)).Select(_ => _.Id).ToList(); List <CommodityStock> commodityStocks = new List <CommodityStock>(); for (int i = 0; i < allCommodityIds.Count; i += 100) { var currentCommodityIds = allCommodityIds.Skip(i).Take(100).ToList(); commodityStocks.AddRange(CommodityStock.ObjectSet().Where(_ => currentCommodityIds.Contains(_.CommodityId) && skuIds.Contains(_.JDCode)).ToList()); } var stockCommodityIds = commodityStocks.Select(_ => _.CommodityId).Distinct(); var stockCommodities = Commodity.ObjectSet().Where(_ => stockCommodityIds.Contains(_.Id)).ToList(); List <SNSkuStateDto> snSkuStates = new List <SNSkuStateDto>(); for (int i = 0; i < skuIds.Count; i += 30) { snSkuStates.AddRange(SuningSV.GetSkuState(skuIds.Skip(i).Take(30).ToList())); } int count = 0; //List<Guid> autoAuditOnShelfIds = new List<Guid>(); //List<Guid> autoAuditOffShelfIds = new List<Guid>(); //var autoAuditAppIds = JDAuditMode.ObjectSet().Where(_ => _.StockModeState == 0).Select(_ => _.AppId).ToList(); ContextSession contextSession = ContextFactory.CurrentThreadContext; foreach (var group in commodityStocks.GroupBy(_ => _.CommodityId)) { var addCount = 0; var com = stockCommodities.Where(_ => _.Id == group.Key).FirstOrDefault(); var auditCom = AddCommodityAudit(com); foreach (var item in group) { var snState = snSkuStates.Where(_ => _.skuId == item.JDCode).FirstOrDefault(); if (snState == null) { LogHelper.Info("SNJobHelper.AutoUpdateSkuState-SKU 未获取到易派客上下架状态,商品Id: " + item.Id + ",SkuId: " + item.JDCode); continue; } // 转换JD状态 var state = 0; // 上架 int auditState = 2; // 已上架 if (snState.state == "0") // 下架 { state = 1; auditState = 1; } if (item.State != state) { // 对比审核表 var latestAuditState = JdAuditCommodityStock.ObjectSet().Where(_ => _.CommodityStockId == item.Id && _.AuditType == 3).OrderByDescending(_ => _.SubTime).Select(_ => _.JdStatus).FirstOrDefault(); if (latestAuditState == 0 || latestAuditState != auditState) { count++; addCount++; var auditStock = AddCommodityStockAudit(contextSession, com.AppId, item, Deploy.Enum.OperateTypeEnum.架无货商品审核); auditStock.AuditType = 3; auditStock.JdAuditCommodityId = auditCom.Id; auditStock.JdStatus = auditState; contextSession.SaveObject(auditStock); //if (autoAuditAppIds.Contains(com.AppId)) //{ // if (auditState == 2) // { // autoAuditOnShelfIds.Add(auditStock.Id); // } // else // { // autoAuditOffShelfIds.Add(auditStock.Id); // } //} LogHelper.Info("SNJobHelper.AutoUpdateSkuState-SKU 更新易派客商品上下架状态,商品Id: " + item.Id + ",SkuId: " + item.JDCode); } } } if (addCount > 0) { contextSession.SaveObject(auditCom); } if (count >= 200) { contextSession.SaveChanges(); count = 0; } } // 处理无属性商品,并Stock表中无数据的情况 count = 0; var oldcommodityIds = allCommodityIds.Except(stockCommodityIds).ToList(); for (int i = 0; i < oldcommodityIds.Count; i += 100) { var commodityIds = oldcommodityIds.Skip(i).Take(100); var commodities = Commodity.ObjectSet().Where(_ => commodityIds.Contains(_.Id) && (string.IsNullOrEmpty(_.ComAttribute) || _.ComAttribute == "[]") && skuIds.Contains(_.JDCode)).ToList(); foreach (var com in commodities) { var snState = snSkuStates.Where(_ => _.skuId == com.JDCode).FirstOrDefault(); if (snState == null) { LogHelper.Info("SNJobHelper.AutoUpdateSkuState 未获取到易派客上下架状态,商品Id: " + com.Id + ",SkuId: " + com.JDCode); continue; } // 转换JD状态 var state = 0; // 上架 int auditState = 2; // 已上架 if (snState.state == "0") // 下架 { state = 1; auditState = 1; } // 售价 if (com.State != state) { // 对比审核表 var latestAuditState = JdAuditCommodityStock.ObjectSet().Where(_ => _.CommodityStockId == com.Id && _.AuditType == 3).OrderByDescending(_ => _.SubTime).Select(_ => _.JdStatus).FirstOrDefault(); if (latestAuditState == 0 || latestAuditState != auditState) { var auditCom = AddCommodityAudit(com); var auditStock = AddCommodityStockAudit(contextSession, com, Deploy.Enum.OperateTypeEnum.架无货商品审核); auditStock.AuditType = 3; auditStock.JdAuditCommodityId = auditCom.Id; auditStock.JdStatus = auditState; contextSession.SaveObject(auditStock); //if (auditState == 2) //{ // autoAuditOnShelfIds.Add(auditStock.Id); //} //else //{ // autoAuditOffShelfIds.Add(auditStock.Id); //} contextSession.SaveObject(auditCom); count++; LogHelper.Info("SNJobHelper.AutoUpdateSkuState 更新易派客商品上下架状态,商品Id: " + com.Id + ",SkuId: " + com.JDCode); } } if (count >= 200) { contextSession.SaveChanges(); count = 0; } } contextSession.SaveChanges(); } //删除消息 foreach (var item in delMsg) { SuningSV.suning_govbus_message_delete(item.id); } } catch (Exception ex) { LogHelper.Error("SNJobHelper.AutoUpdateSkuState 异常", ex); throw; } LogHelper.Info("SNJobHelper.AutoUpdateJdSkuStateByMessage 结束同步Jd商品上下架"); }