Exemplo n.º 1
0
        //删除未出库的Item
        /// <summary>
        /// 删除未出库的Item
        /// </summary>
        /// <param name="soItems">订单子项</param>
        /// <param name="outStock">已出库仓库集合,以逗号隔开</param>
        private void DeleteOrderItem4UpdatePending(List <SOItemInfo> soItems, int soSysNo, string outStock)
        {
            if (null == soItems)
            {
                return;
            }
            //调整库存请求
            InventoryAdjustContractInfo req = new InventoryAdjustContractInfo();

            req.ReferenceSysNo        = soSysNo.ToString();
            req.SourceBizFunctionName = InventoryAdjustSourceBizFunction.SO_Order;
            req.SourceActionName      = InventoryAdjustSourceAction.Pending;

            req.AdjustItemList = new List <InventoryAdjustItemInfo>();

            soItems.ForEach(x =>
            {
                if (x.ProductType.HasValue &&
                    x.ProductType.Value != SOProductType.Coupon &&
                    x.ProductType.Value != SOProductType.ExtendWarranty &&
                    outStock.IndexOf(x.StockSysNo.ToString()) < 0)
                {
                    req.AdjustItemList.Add(new InventoryAdjustItemInfo()
                    {
                        ProductSysNo = x.ProductSysNo.Value
                        ,
                        StockSysNo = x.StockSysNo.Value
                        ,
                        AdjustQuantity = -x.Quantity.Value
                    });
                    //删除未出库的SOItem
                    ObjectFactory <ISODA> .Instance.DeleteSOItemBySysNo(x.SysNo.Value);
                }
            });

            //更新仓库信息
            try
            {
                ExternalDomainBroker.AdjustProductInventory(req);
            }
            catch
            {
                BizExceptionHelper.Throw("SO_Pending_AdjustInventoryFail");
            }
        }
Exemplo n.º 2
0
        public void CustomsPass()
        {
            XElement orderConfig = AppSettingHelper.OrderBizConfig;
            int      userSysno   = int.Parse(orderConfig.Element(XName.Get("SellerPortalUserInfo")).Element(XName.Get("UserSysNo")).Value); // int.Parse(orderConfig.SellerPortalUserInfo.UserSysNo);

            SOInfo soInfo = CurrentSO;

            //1.检查SO信息
            //ValidateSOInfo(soInfo);
            if (soInfo.BaseInfo.Status.HasValue && soInfo.BaseInfo.Status.Value != SOStatus.Reported)
            {
                string errorMsg = string.Format("SO单{0}的状态不是“已申报待通关”,不能执行出库操作!", soInfo.BaseInfo.SOID);
                BizExceptionHelper.Throw(errorMsg);
            }

            #region 修改订单状态,调整库存,创建代销转财务记录

            TransactionOptions option = new TransactionOptions();
            option.IsolationLevel = IsolationLevel.ReadUncommitted;
            option.Timeout        = TransactionManager.DefaultTimeout;
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, option))
            {
                soInfo.BaseInfo.Status = SOStatus.CustomsPass; //设置出库状态
                SODA.UpdateSOStatusToCustomsPass(soInfo.SysNo.Value);
                List <BizEntity.Inventory.InventoryAdjustItemInfo> adjustItemList = new List <BizEntity.Inventory.InventoryAdjustItemInfo>();
                foreach (SOItemInfo soItem in soInfo.Items)
                {
                    switch (soItem.ProductType.Value)
                    {
                    case SOProductType.Product:
                    case SOProductType.Gift:
                    case SOProductType.Award:
                    case SOProductType.SelfGift:
                    case SOProductType.Accessory:
                        adjustItemList.Add(new BizEntity.Inventory.InventoryAdjustItemInfo
                        {
                            AdjustQuantity = soItem.Quantity.Value,
                            ProductSysNo   = soItem.ProductSysNo.Value,
                            StockSysNo     = soItem.StockSysNo.Value
                        });
                        break;

                    case SOProductType.Coupon:
                    case SOProductType.ExtendWarranty:
                        break;
                    }
                }
                //调整库存
                ExternalDomainBroker.AdjustProductInventory(new BizEntity.Inventory.InventoryAdjustContractInfo
                {
                    SourceActionName      = BizEntity.Inventory.InventoryAdjustSourceAction.OutStock,
                    SourceBizFunctionName = BizEntity.Inventory.InventoryAdjustSourceBizFunction.SO_Order,
                    ReferenceSysNo        = soInfo.SysNo.Value.ToString(),
                    AdjustItemList        = adjustItemList
                });

                //Bowen:代码调整,加入事务中 2013-08-08
                //模式2,3创建代销转财务日志
                CreateConsigenToAccInfo(soInfo);


                #region 更新客户等级以及积分经验值
                //增加客户经验值
                //更新客户等级
                //调整客户经验值(内部修改客户等级)
                int     customerSysNo = soInfo.BaseInfo.CustomerSysNo.Value;
                decimal adjustValue   = soInfo.BaseInfo.CashPay + soInfo.BaseInfo.PayPrice.Value + soInfo.BaseInfo.ShipPrice.Value + soInfo.BaseInfo.PremiumAmount.Value + soInfo.BaseInfo.PromotionAmount.Value;

                string logMemo = string.Format("SO#{0}:购物加经验值。", soInfo.SysNo);

                ExternalDomainBroker.AdjustCustomerExperience(customerSysNo, adjustValue, BizEntity.Customer.ExperienceLogType.MerchantSOOutbound, logMemo);
                //增加推荐用户的经验值
                AddExperienceByRecommend(soInfo);

                //给款到发货用户加积分
                AddPointForCustomer(soInfo);
                #endregion 更新客户等级以及积分经验值

                #region 财务应收

                //创建收款单
                ECCentral.BizEntity.Invoice.SOIncomeInfo soIncomeInfo = ExternalDomainBroker.GetValidSOIncomeInfo(soInfo.SysNo.Value, BizEntity.Invoice.SOIncomeOrderType.SO);
                if (soIncomeInfo == null)
                {
                    soIncomeInfo             = new BizEntity.Invoice.SOIncomeInfo();
                    soIncomeInfo.OrderType   = BizEntity.Invoice.SOIncomeOrderType.SO;
                    soIncomeInfo.OrderSysNo  = soInfo.SysNo;
                    soIncomeInfo.OrderAmt    = UtilityHelper.TruncMoney(soInfo.BaseInfo.SOTotalAmount);
                    soIncomeInfo.IncomeAmt   = UtilityHelper.TruncMoney(soInfo.BaseInfo.OriginalReceivableAmount);
                    soIncomeInfo.PrepayAmt   = Math.Max(soInfo.BaseInfo.PrepayAmount.Value, 0);
                    soIncomeInfo.IncomeStyle = ECCentral.BizEntity.Invoice.SOIncomeOrderStyle.Normal;
                    //soIncomeInfo.IncomeUserSysNo = soInfo.LastEditUserSysNumber ?? 0;
                    //soIncomeInfo.IncomeTime = DateTime.Now;
                    soIncomeInfo.Status         = ECCentral.BizEntity.Invoice.SOIncomeStatus.Origin;
                    soIncomeInfo.GiftCardPayAmt = soInfo.BaseInfo.GiftCardPay;
                    soIncomeInfo.PointPay       = soInfo.BaseInfo.PointPay;
                    soIncomeInfo.PayAmount      = soInfo.BaseInfo.OriginalReceivableAmount;
                    if (soInfo.BaseInfo.SOSplitMaster.HasValue)
                    {
                        soIncomeInfo.MasterSoSysNo = soInfo.BaseInfo.SOSplitMaster;  //获取母单号
                    }
                    ExternalDomainBroker.CreateSOIncome(soIncomeInfo);
                }

                #endregion 财务应收

                //this.PublishMessage();
                scope.Complete();
            }


            #endregion

            SOSendMessageProcessor messageProcessor = ObjectFactory <SOSendMessageProcessor> .Instance;
            //发送邮件
            messageProcessor.SOOutStockSendEmailToCustomer(soInfo);

            //发送短信提醒
            //发送短信
            messageProcessor.SendSMS(soInfo, BizEntity.Customer.SMSType.OrderOutBound);

            if (soInfo.InvoiceInfo.IsVAT.Value && soInfo.InvoiceInfo.InvoiceType == ECCentral.BizEntity.Invoice.InvoiceType.SELF)
            {
                //增票提醒短信
                messageProcessor.SendVATSMS(soInfo);
                //发送增值税发票SSB
                EventPublisher.Publish <ECCentral.Service.EventMessage.ImportVATSSBMessage>(new ECCentral.Service.EventMessage.ImportVATSSBMessage
                {
                    SOSysNo    = soInfo.SysNo.Value,
                    StockSysNo = soInfo.Items[0].StockSysNo.Value,
                    OrderType  = EventMessage.ImportVATOrderType.SO
                });
            }

            //调用OverseaInvoiceReceiptManagement.dbo.UP_InvoiceSync
            //插入Inovice_Master
            ObjectFactory <ECCentral.Service.IBizInteract.IInvoiceBizInteract> .Instance.SOOutStockInvoiceSync(soInfo.SysNo.Value, soInfo.Items[0].StockSysNo.Value, soInfo.InvoiceInfo.InvoiceNo, soInfo.CompanyCode);

            //EventPublisher.Publish<ECCentral.Service.EventMessage.CreateInvoiceSSBMessage>(new ECCentral.Service.EventMessage.CreateInvoiceSSBMessage
            //{
            //    CompanyCode = soInfo.CompanyCode,
            //    InvoiceNo = soInfo.InvoiceInfo.InvoiceNo,
            //    SOSysNo = soInfo.SysNo.Value,
            //    StockSysNo = soInfo.Items[0].StockSysNo.Value
            //});
            //记录日志
            WriteLog(ECCentral.BizEntity.Common.BizLogType.Sale_SO_CustomsPass, "通关成功");
        }
Exemplo n.º 3
0
        /// <summary>
        /// 调整仓库,返还库存
        /// </summary>
        protected virtual void AdjustInventory()
        {
            List <BizEntity.Inventory.InventoryAdjustItemInfo> adjustItemList = new List <BizEntity.Inventory.InventoryAdjustItemInfo>();
            SOProcessor sopro       = new SOProcessor();
            DateTime?   SOCreatDate = CurrentSO.BaseInfo.CreateTime;
            int         SOSysNo     = int.Parse(CurrentSO.BaseInfo.SOID);

            foreach (SOItemInfo soItem in CurrentSO.Items)
            {
                //如果订单已经支付直接返还库存
                if (sopro.NetpaySOCheckReturnInventory(SOSysNo))
                {
                    switch (soItem.ProductType.Value)
                    {
                    case SOProductType.Product:
                    case SOProductType.Gift:
                    case SOProductType.Award:
                    case SOProductType.SelfGift:
                    case SOProductType.Accessory:
                        adjustItemList.Add(new BizEntity.Inventory.InventoryAdjustItemInfo
                        {
                            AdjustQuantity = soItem.Quantity.Value,
                            ProductSysNo   = soItem.ProductSysNo.Value,
                            StockSysNo     = soItem.StockSysNo.Value
                        });
                        break;

                    case SOProductType.Coupon:
                    case SOProductType.ExtendWarranty:
                        break;
                    }
                }
                else
                {
                    //开启促销活动里的商品支持付款后扣减在线库存
                    if (AppSettingManager.GetSetting(SOConst.DomainName, "PaymentInventory").ToString().ToLower() == "true")
                    {
                        //判断商品是否是在促销活动时间里买的商品,如果是,就返还库存
                        if (sopro.CheckReturnInventory(soItem.ProductSysNo.Value, SOCreatDate.Value))
                        {
                            switch (soItem.ProductType.Value)
                            {
                            case SOProductType.Product:
                            case SOProductType.Gift:
                            case SOProductType.Award:
                            case SOProductType.SelfGift:
                            case SOProductType.Accessory:
                                adjustItemList.Add(new BizEntity.Inventory.InventoryAdjustItemInfo
                                {
                                    AdjustQuantity = soItem.Quantity.Value,
                                    ProductSysNo   = soItem.ProductSysNo.Value,
                                    StockSysNo     = soItem.StockSysNo.Value
                                });
                                break;

                            case SOProductType.Coupon:
                            case SOProductType.ExtendWarranty:
                                break;
                            }
                        }
                    }
                    else
                    {
                        switch (soItem.ProductType.Value)
                        {
                        case SOProductType.Product:
                        case SOProductType.Gift:
                        case SOProductType.Award:
                        case SOProductType.SelfGift:
                        case SOProductType.Accessory:
                            adjustItemList.Add(new BizEntity.Inventory.InventoryAdjustItemInfo
                            {
                                AdjustQuantity = soItem.Quantity.Value,
                                ProductSysNo   = soItem.ProductSysNo.Value,
                                StockSysNo     = soItem.StockSysNo.Value
                            });
                            break;

                        case SOProductType.Coupon:
                        case SOProductType.ExtendWarranty:
                            break;
                        }
                    }
                }
            }
            ExternalDomainBroker.AdjustProductInventory(new BizEntity.Inventory.InventoryAdjustContractInfo
            {
                ReferenceSysNo        = SOSysNo.ToString(),
                SourceActionName      = IsImmediatelyReturnStock ? BizEntity.Inventory.InventoryAdjustSourceAction.Abandon_RecoverStock : BizEntity.Inventory.InventoryAdjustSourceAction.Abandon,
                IsOutStockAbandon     = IsOutStockOrder ? true : false,
                SourceBizFunctionName = BizEntity.Inventory.InventoryAdjustSourceBizFunction.SO_Order,
                AdjustItemList        = adjustItemList
            });
        }