Пример #1
0
        /// <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>());
        }
Пример #2
0
        /// <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;
            }
        }
Пример #3
0
        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));
        }
Пример #4
0
        /// <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>());
        }
Пример #5
0
 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);
     }
 }
Пример #6
0
        /// <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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        /// <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);
        }
Пример #9
0
        /// <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 结束同步易派客商品价格");
        }
Пример #10
0
        /// <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商品上下架");
        }