Exemple #1
0
        public void NotifyPaid(OPC_Sale saleOrder, bool enbaleCashingTimeRange, TimeSpan bein, TimeSpan end)
        {
            if (enbaleCashingTimeRange && !IsInCashingTimeRange(bein, end))
            {
                return;
            }
            Logger.InfoFormat("Notify paid to it sale order no:{0}", saleOrder.SaleOrderNo);
            var apiClient = new DefaultApiClient();
            var rsp       = apiClient.Post(new OrderNotifyRequest()
            {
                Data = new PaidOrderNotificationEntity(saleOrder).CreateNotifiedEntity()
            }, true);

            if (rsp == null)
            {
                NotifyFailed(saleOrder, SaleOrderNotificationStatus.PaidFailed, apiClient.ErrorList());
                return;
            }
            if (!rsp.Status)
            {
                Logger.Error(rsp.Data);
                Logger.Error(rsp.Message);
                var errors = new List <string> {
                    rsp.Data, rsp.Message
                };
                errors.AddRange(apiClient.ErrorList().Where(x => !string.IsNullOrEmpty(x)));
                NotifyFailed(saleOrder, SaleOrderNotificationStatus.PaidFailed, errors);
                return;
            }
            SaleOrderNotified(saleOrder, SaleOrderNotificationStatus.Paid);
        }
Exemple #2
0
        private void NotifyFailed(OPC_Sale saleOrder, SaleOrderNotificationStatus create, IEnumerable <string> errorList)
        {
            using (var db = new YintaiHZhouContext())
            {
                using (var scope = new TransactionScope())
                {
                    db.OPC_SaleOrderNotificationLog.Add(new OPC_SaleOrderNotificationLog
                    {
                        CreateDate  = DateTime.Now,
                        CreateUser  = JobUserId,
                        SaleOrderNo = saleOrder.SaleOrderNo,
                        Status      = (int)create,
                        Message     = string.Join(";", errorList)
                    });

                    var trade = db.OPC_Sale.FirstOrDefault(x => x.SaleOrderNo == saleOrder.SaleOrderNo);
                    if (trade != null)
                    {
                        trade.CashStatus      = (int)EnumCashStatus.CashingFailed;
                        trade.CashDate        = DateTime.Now;
                        trade.UpdatedDate     = DateTime.Now;
                        trade.UpdatedUser     = JobUserId;
                        db.Entry(trade).State = EntityState.Modified;
                    }
                    db.SaveChanges();
                    scope.Complete();
                }
            }
        }
Exemple #3
0
        private void ProcessSaleOrderStatus(OPC_Sale saleOrder, OrderStatusResultDto saleStatus)
        {
            if (saleStatus == null)
            {
                Log.Error("Sale Order has no return info!");
                return;
            }
            var processor = SaleOrderStatusProcessorFactory.Create(int.Parse(saleStatus.Status));

            processor.Process(saleOrder.SaleOrderNo, saleStatus);
        }
Exemple #4
0
        public bool Save(IEnumerable <Models.SaleOrderModel> saleOrders)
        {
            // 遍历保存销售单
            foreach (var saleOrderModel in saleOrders)
            {
                using (var db = new YintaiHZhouContext())
                {
                    using (var ts = new TransactionScope())
                    {
                        var saleOrder = new OPC_Sale()
                        {
                            OrderNo     = saleOrderModel.OrderNo,
                            SaleOrderNo = saleOrderModel.SaleOrderNo,
                            SalesType   = 0,
                            Status      = saleOrderModel.Status,
                            SellDate    = saleOrderModel.SellDate,
                            SalesAmount = saleOrderModel.SalesAmount, //是明细累加出的总金额
                            SalesCount  = saleOrderModel.SalesCount,
                            SectionId   = saleOrderModel.SectionId,
                            CreatedDate = saleOrderModel.CreatedDate,
                            CreatedUser = saleOrderModel.CreatedUser,
                            UpdatedDate = saleOrderModel.CreatedDate,
                            UpdatedUser = saleOrderModel.CreatedUser,
                            CashDate    = SplitOrderUtils.GetDefaultDateTime(),
                            RemarkDate  = SplitOrderUtils.GetDefaultDateTime()
                        };
                        db.OPC_Sale.Add(saleOrder);

                        // 保存销售单详情
                        foreach (var saleDetail in saleOrderModel.Items)
                        {
                            saleDetail.UpdatedDate = DateTime.UtcNow;
                            saleDetail.Remark      = String.Empty;
                            saleDetail.UpdatedUser = SystemDefine.SysUserId;
                            db.OPC_SaleDetail.Add(saleDetail);
                        }

                        // 检查销售是否已经存在,防止重复拆单,
                        // 处理方式:发现销售单存继续其他销售单处理,放弃当前的修改,不进行保存
                        if (db.OPC_Sale.Any(s => s.SaleOrderNo == saleOrderModel.SaleOrderNo))
                        {
                            SaveSplitOrderLog(saleOrderModel.OrderNo.ToString(CultureInfo.InvariantCulture),
                                              "已经拆单完成,重复拆单", -999);
                            continue;
                        }

                        db.SaveChanges();
                        ts.Complete();
                    }
                }
            }
            return(true);
        }
Exemple #5
0
 public OPC_ShippingSale GetBySaleOrderNo(string saleOrderNo)
 {
     using (var db = new YintaiHZhouContext())
     {
         OPC_Sale sale = db.OPC_Sales.FirstOrDefault(t => t.SaleOrderNo == saleOrderNo);
         if (sale == null)
         {
             throw new SaleOrderNotExistsException(saleOrderNo);
         }
         return(db.OPC_ShippingSales.FirstOrDefault(t => t.ShippingCode == sale.ShippingCode));
     }
 }
Exemple #6
0
        private void Process(OPC_Sale opc_Sale)
        {
            OrderStatusResultDto saleStatus = null;

            try
            {
                saleStatus = _remoteRepository.GetOrderStatusById(opc_Sale);
                ProcessSaleOrderStatus(opc_Sale, saleStatus);
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
Exemple #7
0
        public void GetSaleByOrderId()
        {
            if (SelectOrder == null || string.IsNullOrEmpty(SelectOrder.Id.ToString()))
            {
                return;
            }
            string orderNo = string.Format("orderID={0}&pageIndex={1}&pageSize={2}", SelectOrder.OrderNo, 1, 300);

            //这个工作状态
            SaleList = AppEx.Container.GetInstance <ICustomerInquiryService>().GetSaleByOrderNo(orderNo).Result.ToList();
            if (SaleList != null && SaleList.Any())
            {
                OPC_Sale sale = SaleList.ToList()[0];
                SaleDetailList = AppEx.Container.GetInstance <ILogisticsService>().SelectSaleDetail(sale.SaleOrderNo).Result.ToList();
            }
        }
        public void QuerySalesOrderByOrderId()
        {
            if (SelectOrder == null || string.IsNullOrEmpty(SelectOrder.Id.ToString()))
            {
                return;
            }
            string orderNo = string.Format("orderID={0}&pageIndex={1}&pageSize={2}", SelectOrder.OrderNo, 1, 30);

            SaleList = AppEx.Container.GetInstance <ICustomerInquiryService>().GetSaleByOrderNo(orderNo).Result;
            MvvmUtility.WarnIfEmpty(SaleList, "销售单");
            if (SaleList != null && SaleList.Count() > 0)
            {
                OPC_Sale sale = SaleList.ToList()[0];
                SaleDetailList = AppEx.Container.GetInstance <ILogisticsService>().SelectSaleDetail(sale.SaleOrderNo).Result;
                MvvmUtility.WarnIfEmpty(SaleDetailList, "销售单明细");
            }
        }
Exemple #9
0
        private void SaleOrderNotified(OPC_Sale saleOrder, SaleOrderNotificationStatus status)
        {
            using (var scope = new TransactionScope())
            {
                using (var db = new YintaiHZhouContext())
                {
                    var order = db.OPC_Sale.FirstOrDefault(x => x.Id == saleOrder.Id);
                    if (order == null)
                    {
                        Logger.Error(string.Format("Invalid order ({0})", saleOrder.OrderNo));
                        return;
                    }

                    if (order.Status != (int)EnumSaleOrderStatus.NotifyProduct && order.Status != (int)EnumSaleOrderStatus.None)
                    {
                        Logger.Error(string.Format("Invalid order status ({0})", saleOrder.OrderNo));
                        return;
                    }

                    if (order.Status == (int)EnumSaleOrderStatus.None)
                    {
                        order.Status          = (int)EnumSaleOrderStatus.NotifyProduct;
                        order.UpdatedDate     = DateTime.Now;
                        order.UpdatedUser     = JobUserId;
                        db.Entry(order).State = EntityState.Modified;
                    }

                    db.OPC_SaleOrderNotificationLog.Add(new OPC_SaleOrderNotificationLog
                    {
                        CreateDate  = DateTime.Now,
                        CreateUser  = JobUserId,
                        SaleOrderNo = saleOrder.SaleOrderNo,
                        Status      = (int)status,
                        Message     = string.Empty,
                    });
                    db.SaveChanges();
                    scope.Complete();
                }
            }
        }
Exemple #10
0
        public OrderStatusResultDto GetOrderStatusById(OPC_Sale saleOrder)
        {
            string storeno;

            using (var db = new YintaiHZhouContext())
            {
                storeno =
                    db.Map4Store.Where(x => x.Channel == "intime")
                    .Join(db.Sections.Where(x => x.Id == saleOrder.SectionId), m => m.StoreId, s => s.StoreId,
                          (m, s) => m.ChannelStoreId)
                    .FirstOrDefault();
            }

            if (string.IsNullOrEmpty(storeno))
            {
                throw new StockNotExistsException(string.Format(""));
            }

            var result = _apiClient.Post(new GetOrderStatusByIdRequest()
            {
                Data = new
                {
                    id = saleOrder.SaleOrderNo,
                    storeno
                }
            }, true);

            if (result == null)
            {
                Log.Error(string.Join(";", _apiClient.ErrorList()));
                return(null);
            }

            if (!result.Status)
            {
                Log.ErrorFormat("查询订单信息失败,message:{0}", result.Message);
                return(null);
            }
            return(AutoMapper.Mapper.Map <OrderStatusResult, OrderStatusResultDto>(result.Data));
        }
Exemple #11
0
        public void NotifyCreate(OPC_Sale saleOrder)
        {
            var entity    = new CreateOrderNotificationEntity(saleOrder).CreateNotifiedEntity();
            var apiClient = new DefaultApiClient();

            try
            {
                var rsp = apiClient.Post(new OrderNotifyRequest()
                {
                    Data = entity
                }, true);
                if (rsp == null)
                {
                    Logger.Error("通知订单失败,信息部返回NULL");
                    NotifyFailed(saleOrder, SaleOrderNotificationStatus.CreateFailed, apiClient.ErrorList());
                    return;
                }
                if (!rsp.Status)
                {
                    Logger.Error(rsp.Data);
                    Logger.Error(rsp.Message);
                    var errors = new List <string> {
                        rsp.Data, rsp.Message
                    };
                    errors.AddRange(apiClient.ErrorList().Where(x => !string.IsNullOrEmpty(x)));
                    NotifyFailed(saleOrder, SaleOrderNotificationStatus.CreateFailed, errors);
                    return;
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
                NotifyFailed(saleOrder, SaleOrderNotificationStatus.ExceptionThrow, new[] { e.Message });
                return;
            }

            SaleOrderNotified(saleOrder, SaleOrderNotificationStatus.Create);
        }
Exemple #12
0
 public PaidOrderNotificationEntity(OPC_Sale saleOrder) : base(saleOrder)
 {
 }
 protected AbstractOrderNotificationEntity(OPC_Sale saleOrder)
 {
     this._saleOrder = saleOrder;
 }
 public CreateOrderNotificationEntity(OPC_Sale saleOrder) : base(saleOrder)
 {
 }