Ejemplo n.º 1
0
 /// <summary>
 /// 插入销售单明细
 /// </summary>
 /// <param name="item">销售单明细</param>
 /// <returns>操作是否成功</returns>
 /// <remarks>2013-06-25 朱成果 创建</remarks>
 public override int Insert(SoOrderItem item)
 {
     item.SysNo = Context.Insert("SoOrderItem", item)
                  .AutoMap(o => o.SysNo)
                  .ExecuteReturnLastId <int>("SysNo");
     return(item.SysNo);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 二期业务数据2段 订单数据
        /// </summary>
        /// <param name="listObject"></param>
        private void AddBaseTaskObject2ToList3(List <BaseTask> listObject)
        {
            BaseTask soOrder     = new SoOrder();
            BaseTask soOrderItem = new SoOrderItem();

            listObject.Add(soOrder);
            listObject.Add(soOrderItem);
        }
Ejemplo n.º 3
0
        private void AddBaseTaskObjectToList(List <BaseTask> listObject)
        {
            BaseTask bsAT                    = new BsArea();
            BaseTask bsDP                    = new BsDeliveryPayment();
            BaseTask bsPT                    = new BsPaymentType();
            BaseTask bsCode                  = new BsCode();
            BaseTask bsOrganization          = new BsOrganization();
            BaseTask bsOrganizationWarehouse = new BsOrganizationWarehouse();

            BaseTask crCustomer = new CrCustomer();
            BaseTask crCL       = new CrCustomerLevel();
            BaseTask crCQ       = new CrCustomerQuestion();
            BaseTask crRA       = new CrReceiveAddress();

            BaseTask dsMallType      = new DsMallType();
            BaseTask dsDealerLevel   = new DsDealerLevel();
            BaseTask feArticle       = new FeArticle();
            BaseTask feAC            = new FeArticleCategory();
            BaseTask feCS            = new FeCommentSupport();
            BaseTask fepc            = new FeProductComment();
            BaseTask fePCI           = new FeProductCommentImage();
            BaseTask fePCR           = new FeProductCommentReply();
            BaseTask feSearchKeyword = new FeSearchKeyword();
            BaseTask feadvertgroup   = new FeAdvertGroup();
            BaseTask feadvertitem    = new FeAdvertItem();
            BaseTask feproductgroup  = new FeProductGroup();
            BaseTask feproductitem   = new FeProductItem();

            BaseTask fnIT      = new FnInvoiceType();
            BaseTask fninvoice = new FnInvoice();

            BaseTask fnpv = new  FnReceiptVoucher();
            BaseTask fnReceiptVoucherItem = new FnReceiptVoucherItem();
            BaseTask fnop                 = new FnOnlinePayment();
            BaseTask fnPaymentVoucher     = new FnPaymentVoucher();
            BaseTask fnPaymentVoucherItem = new FnPaymentVoucherItem();

            BaseTask lgDelivery              = new LgDelivery();
            BaseTask lgDI                    = new LgDeliveryItem();
            BaseTask lgDS                    = new LgDeliveryScope();
            BaseTask lgDT                    = new LgDeliveryType();
            BaseTask lgDUC                   = new LgDeliveryUserCredit();
            BaseTask lgPT                    = new LgPickupType();
            BaseTask lgsettlement            = new LgSettlement();
            BaseTask lgSI                    = new LgSettlementItem();
            BaseTask lgDeliveryPrintTemplate = new LgDeliveryPrintTemplate();
            BaseTask pdAttribute             = new PdAttribute();
            BaseTask pdAG                    = new PdAttributeGroup();
            BaseTask pdAGA                   = new PdAttributeGroupAssociation();
            BaseTask pdAO                    = new PdAttributeOption();
            BaseTask pdBrand                 = new PdBrand();
            BaseTask pdCGA                   = new PdCatAttributeGroupAso();
            BaseTask pdCategory              = new PdCategory();
            BaseTask pdCA                    = new PdCategoryAssociation();
            BaseTask pdPrice                 = new PdPrice();
            BaseTask pdProduct               = new PdProduct();
            BaseTask pdPA                    = new PdProductAssociation();
            BaseTask pdProductAttribute      = new PdProductAttribute();
            BaseTask pdPI                    = new PdProductImage();
            BaseTask pdTemplate              = new PdTemplate();
            BaseTask pdProductStatistics     = new PdProductStatistics();

            BaseTask soOrder         = new SoOrder();
            BaseTask soOrderItem     = new SoOrderItem();
            BaseTask soRA            = new SoReceiveAddress();
            BaseTask SyUG            = new SyUserGroup();
            BaseTask syGU            = new SyGroupUser();
            BaseTask syMenu          = new SyMenu();
            BaseTask syMenuPrivilege = new SyMenuPrivilege();
            BaseTask syPrivilege     = new SyPrivilege();
            BaseTask syRole          = new SyRole();
            BaseTask syRoleMenu      = new SyRoleMenu();
            BaseTask syRolePrivilege = new SyRolePrivilege();
            BaseTask syPermission    = new SyPermission();
            BaseTask syUser          = new SyUser();
            BaseTask syUW            = new SyUserWarehouse();
            BaseTask syMyMenu        = new SyMyMenu();

            BaseTask spcombo                  = new SpCombo();
            BaseTask spComboItem              = new SpComboItem();
            BaseTask spcopon                  = new spcoupon();
            BaseTask sqpromotion              = new SPpromotion();
            BaseTask spromotiongift           = new SPpromotiongift();
            BaseTask sppromotionoverlay       = new SPpromotionoverlay();
            BaseTask sppromotionrule          = new SPpromotionrule();
            BaseTask sppromotionrulecondition = new SPpromotionrulecondition();
            BaseTask sppromotionrulekeyvalue  = new SPpromotionrulekeyvalue();
            BaseTask syTaskConfig             = new SyTaskConfig();

            BaseTask whStockOut     = new WhStockOut();
            BaseTask whStockOutItem = new WhstockOutItem();
            BaseTask whwarehouse    = new WhWarehouse();
            BaseTask whwa           = new WHwarehousearea();
            BaseTask whwdy          = new WHwarehouseDeliveryType();
            BaseTask whWPT          = new WhWarehousePickupType();
            BaseTask whstockin      = new WhStockIn();
            BaseTask whstockinItem  = new WHStockinItem();
            BaseTask rcReturn       = new RCReturn();
            BaseTask rcReturnItem   = new RcReturnItem();

            listObject.Add(bsAT);
            listObject.Add(bsDP);
            listObject.Add(bsPT);
            listObject.Add(bsCode);
            listObject.Add(bsOrganization);
            listObject.Add(bsOrganizationWarehouse);

            listObject.Add(crCustomer);
            listObject.Add(crCL);
            listObject.Add(crCQ);
            listObject.Add(crRA);
            listObject.Add(dsMallType);
            listObject.Add(dsDealerLevel);
            listObject.Add(feArticle);
            listObject.Add(feAC);
            listObject.Add(feCS);
            listObject.Add(fePCI);
            listObject.Add(fePCR);
            listObject.Add(fepc);
            listObject.Add(feSearchKeyword);
            listObject.Add(feadvertgroup);
            listObject.Add(feadvertitem);
            listObject.Add(feproductgroup);
            listObject.Add(feproductitem);

            listObject.Add(fnIT);
            listObject.Add(fnpv);
            listObject.Add(fnReceiptVoucherItem);
            listObject.Add(fnop);
            listObject.Add(fninvoice);

            listObject.Add(fnPaymentVoucher);
            listObject.Add(fnPaymentVoucherItem);

            listObject.Add(lgDelivery);
            listObject.Add(lgDI);
            listObject.Add(lgDS);
            listObject.Add(lgDT);
            listObject.Add(lgPT);
            listObject.Add(lgsettlement);
            listObject.Add(lgSI);
            listObject.Add(lgDeliveryPrintTemplate);

            listObject.Add(pdAttribute);
            listObject.Add(pdAG);
            listObject.Add(pdAGA);
            listObject.Add(pdAO);
            listObject.Add(pdBrand);
            listObject.Add(pdCGA);
            listObject.Add(pdCategory);
            listObject.Add(pdCA);
            listObject.Add(pdPrice);
            listObject.Add(pdProduct);
            listObject.Add(pdPA);
            listObject.Add(pdProductAttribute);
            listObject.Add(pdTemplate);
            listObject.Add(pdProductStatistics);

            listObject.Add(soOrder);
            listObject.Add(soOrderItem);

            listObject.Add(spcombo);
            listObject.Add(spComboItem);
            listObject.Add(spcopon);
            listObject.Add(sqpromotion);
            listObject.Add(spromotiongift);
            //listObject.Add(sppromotionoverlay);
            listObject.Add(sppromotionrule);
            listObject.Add(sppromotionrulecondition);
            listObject.Add(sppromotionrulekeyvalue);

            listObject.Add(syGU);
            listObject.Add(syUW);
            listObject.Add(SyUG);
            listObject.Add(syMenu);
            listObject.Add(syUser);
            listObject.Add(syPermission);

            listObject.Add(syMenuPrivilege);
            listObject.Add(syPrivilege);
            listObject.Add(syRole);
            listObject.Add(syRoleMenu);
            listObject.Add(syRolePrivilege);
            listObject.Add(syMyMenu);
            listObject.Add(syTaskConfig);

            listObject.Add(whStockOut);
            listObject.Add(whStockOutItem);
            listObject.Add(whwarehouse);
            listObject.Add(whwa);
            listObject.Add(whwdy);
            listObject.Add(whWPT);
            listObject.Add(whstockin);
            listObject.Add(whstockinItem);
            listObject.Add(rcReturn);
            listObject.Add(rcReturnItem);
            listObject.Add(lgDUC);
            listObject.Add(pdPI);
            listObject.Add(soRA);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// 插入销售单明细
 /// </summary>
 /// <param name="item">销售单明细</param>
 /// <returns>操作是否成功</returns>
 /// <remarks>2013-06-25 朱成果 创建</remarks>
 public abstract int Insert(SoOrderItem item);
Ejemplo n.º 5
0
        /// <summary>
        /// 添加订单
        /// </summary>
        /// <param name="stream">订单数据(json格式)</param>
        /// <returns></returns>
        /// <remarks>2016-9-7 杨浩 创建</remarks>
        public Result <string> AddOrder(Stream stream)
        {
            int    exceptionPoint = 0;
            string data           = "";
            int    dealerSysNo    = 329;
            var    result         = new Result <string>()
            {
                Status     = true,
                StatusCode = 0
            };

            try
            {
                var reader = new StreamReader(stream);
                data           = reader.ReadToEnd();
                exceptionPoint = 1;
                var orderInfo = Hyt.Util.Serialization.JsonUtil.ToObject <Order>(data);
                exceptionPoint = 2;
                var orderAssociationInfo = Hyt.BLL.Stores.DsOrderAssociationBo.Instance.GetOrderAssociationInfo(dealerSysNo, orderInfo.OrderNo);
                exceptionPoint = 3;
                if (orderAssociationInfo != null)
                {
                    result.Status     = false;
                    result.Message    = "订单已存在";
                    result.StatusCode = 1;
                    return(result);
                }

                if (orderInfo.OnlinePayment == null)
                {
                    result.Status     = false;
                    result.Message    = "没有支付记录";
                    result.StatusCode = 2;
                    return(result);
                }



                var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePaymentByVoucherNo(orderInfo.OnlinePayment.PaymentTypeSysNo, orderInfo.OnlinePayment.VoucherNo);

                if (onlinePayments != null)
                {
                    result.Status     = false;
                    result.Message    = "订单中的支付单已存在";
                    result.StatusCode = 3;
                    return(result);
                }

                #region 订单信息
                SoOrder so = new SoOrder();
                so.OrderNo      = BLL.Basic.ReceiptNumberBo.Instance.GetOrderNo();
                so.OrderSource  = (int)Hyt.Model.WorkflowStatus.OrderStatus.销售单来源.方商城;
                so.DealerSysNo  = dealerSysNo;
                so.AuditorDate  = (DateTime)SqlDateTime.MinValue;
                so.AuditorSysNo = 0;
                so.CancelDate   = (DateTime)SqlDateTime.MinValue;

                so.CashPay = orderInfo.CashPay;
                so.CBLogisticsSendStatus = orderInfo.CBLogisticsSendStatus;
                so.CoinPay = orderInfo.CoinPay;
                so.ContactBeforeDelivery = orderInfo.ContactBeforeDelivery;
                so.CouponAmount          = orderInfo.CouponAmount;
                so.CreateDate            = DateTime.Now;
                so.CustomerMessage       = orderInfo.CustomerMessage;
                so.CustomsPayStatus      = orderInfo.CustomsPayStatus;
                so.CustomsStatus         = orderInfo.CustomsStatus;
                so.DefaultWarehouseSysNo = 0;
                so.DeliveryRemarks       = orderInfo.DeliveryRemarks;
                so.DeliveryTime          = orderInfo.DeliveryTime;
                so.DeliveryTypeSysNo     = orderInfo.DeliveryTypeSysNo;
                so.FreightAmount         = orderInfo.FreightAmount;
                so.FreightChangeAmount   = orderInfo.FreightChangeAmount;
                so.FreightDiscountAmount = orderInfo.FreightDiscountAmount;
                so.GZJCStatus            = orderInfo.GZJCStatus;
                so.ImgFlag               = orderInfo.ImgFlag;
                so.InternalRemarks       = orderInfo.InternalRemarks;
                so.InvoiceSysNo          = orderInfo.InvoiceSysNo;
                so.IsHiddenToCustomer    = orderInfo.IsHiddenToCustomer;
                so.LastUpdateDate        = (DateTime)SqlDateTime.MinValue;
                so.NsStatus              = 0;
                so.OperatFee             = 0;
                so.OrderAmount           = orderInfo.OrderAmount;
                so.OrderCreatorSysNo     = 0;
                so.OrderDiscountAmount   = orderInfo.OrderDiscountAmount;
                so.PayStatus             = orderInfo.PayStatus;
                so.PayTypeSysNo          = orderInfo.PayTypeSysNo;
                so.ProductAmount         = orderInfo.ProductAmount;
                so.ProductChangeAmount   = orderInfo.ProductChangeAmount;
                so.ProductDiscountAmount = orderInfo.ProductDiscountAmount;
                so.RebateRtio            = orderInfo.RebateRtio;
                so.Remarks               = orderInfo.Remarks;
                so.SalesSysNo            = orderInfo.SalesSysNo;
                so.SalesType             = orderInfo.SalesType;
                so.SendStatus            = orderInfo.SendStatus;
                so.Stamp          = orderInfo.Stamp;
                so.Status         = 10;
                so.TaxFee         = orderInfo.TaxFee;
                so.UsedPromotions = "";
                #endregion

                #region 订单明细

                var soItems = new List <SoOrderItem>();

                var soItem = new SoOrderItem();
                var pager  = new Pager <PdProduct>()
                {
                    PageSize = 999999, CurrentPage = 1
                };
                pager = BLL.Product.PdProductBo.Instance.GetPdProductList(pager);

                var dealerInfo      = BLL.Stores.StoresBo.Instance.GetStoreById(dealerSysNo);
                var dealerLevelInfo = BLL.Distribution.DsDealerLevelBo.Instance.GetDealerLevelByDealerSysNo(dealerInfo.LevelSysNo);

                //订单总价
                decimal orderTotalPrice = orderInfo.OrderItemList.Sum(x => x.SalesUnitPrice * x.Quantity);

                if (orderTotalPrice != orderInfo.CashPay)
                {
                    result.Status     = false;
                    result.Message    = "订单明细中的商品总价和订单的支付金额不一致";
                    result.StatusCode = 4;
                    return(result);
                }

                foreach (var item in orderInfo.OrderItemList)
                {
                    var productInfo = pager.Rows.Where(x => x.ErpCode == item.ProductCode).FirstOrDefault();
                    if (productInfo == null)
                    {
                        result.Status     = false;
                        result.Message    = "商品编码【" + item.ProductCode + "】在系统中不存在";
                        result.StatusCode = 5;
                        return(result);
                    }

                    //价格下限
                    decimal lower = productInfo.TradePrice * (100 - dealerLevelInfo.SalePriceLower) * 0.01m;

                    //价格上限
                    decimal upper = productInfo.TradePrice * (100 + dealerLevelInfo.SalePriceUpper) * 0.01m;

                    //检查销售价格下限
                    if (lower > item.SalesUnitPrice)
                    {
                        result.Status     = false;
                        result.Message    = "商品编码【" + item.ProductCode + "】的销售价不能低于¥" + lower;
                        result.StatusCode = 6;
                        return(result);
                    }

                    //检查销售价格上限
                    //if (upper<item.SalesUnitPrice)
                    //{
                    //    result.Status = false;
                    //    result.Message = "商品编码【" + item.ProductCode + "】的销售价不能高于¥" + upper;
                    //    result.StatusCode = 7;
                    //    return result;
                    //}


                    //返点=((销售价-批发价)*数量)*操作费
                    soItem.Catle = ((productInfo.TradePrice - item.SalesUnitPrice) * item.Quantity) * (1 - (dealerLevelInfo.OperatFee * 0.001m));
                    soItem.Catle = soItem.Catle < 0 ? 0 : soItem.Catle;

                    soItem.ChangeAmount           = 0;
                    soItem.DiscountAmount         = 0;
                    soItem.GroupCode              = "";
                    soItem.GroupName              = "";
                    soItem.OriginalPrice          = item.OriginalPrice;
                    soItem.OriginalSalesUnitPrice = 0;
                    soItem.ProductName            = item.ProductName;
                    soItem.ProductSalesType       = 10;
                    soItem.ProductSalesTypeSysNo  = item.ProductSalesTypeSysNo;
                    soItem.ProductSysNo           = productInfo.SysNo;
                    soItem.Quantity             = item.Quantity;
                    soItem.RealStockOutQuantity = 0;
                    soItem.RebatesStatus        = 0;
                    soItem.SalesAmount          = item.SalesAmount;
                    soItem.SalesUnitPrice       = item.SalesUnitPrice;

                    soItem.UnitCatle      = 0;
                    soItem.UsedPromotions = "";

                    soItems.Add(soItem);
                }


                #endregion

                Hyt.Model.CrCustomer cr = null;
                var    isNewUser        = true;
                string strPassword      = "******";//初始密码
                var    options          = new TransactionOptions
                {
                    IsolationLevel = IsolationLevel.ReadCommitted,
                    Timeout        = TransactionManager.DefaultTimeout
                };

                #region 会员
                using (var trancustomer = new System.Transactions.TransactionScope(TransactionScopeOption.Required, options))//会员创建事物
                {
                    cr             = Hyt.BLL.CRM.CrCustomerBo.Instance.GetCrCustomer(orderInfo.Customer.Account);
                    exceptionPoint = 4;
                    //var customerlst = Hyt.BLL.Order.SoOrderBo.Instance.SearchCustomer();
                    if (cr != null)
                    {
                        isNewUser = false;
                    }
                    else //创建会员
                    {
                        cr = new Model.CrCustomer()
                        {
                            Account           = orderInfo.Customer.Account,
                            MobilePhoneNumber = orderInfo.Customer.MobilePhoneNumber,
                            AreaSysNo         = orderInfo.Customer.AreaSysNo,
                            Gender            = (int)Hyt.Model.WorkflowStatus.CustomerStatus.性别.保密,
                            EmailStatus       = (int)Hyt.Model.WorkflowStatus.CustomerStatus.邮箱状态.未验证,
                            LevelSysNo        = Hyt.Model.SystemPredefined.CustomerLevel.初级,
                            Name                  = orderInfo.Customer.Name,
                            NickName              = orderInfo.Customer.NickName,
                            RegisterDate          = DateTime.Now,
                            Password              = strPassword, // Hyt.Util.EncryptionUtil.EncryptWithMd5AndSalt(strPassword), 余勇修改 2014-09-12
                            Status                = (int)Hyt.Model.WorkflowStatus.CustomerStatus.会员状态.效,
                            MobilePhoneStatus     = (int)Hyt.Model.WorkflowStatus.CustomerStatus.手机状态.未验证,
                            RegisterSource        = (int)Hyt.Model.WorkflowStatus.CustomerStatus.注册来源.方商城,
                            RegisterSourceSysNo   = dealerSysNo.ToString(),
                            StreetAddress         = orderInfo.ReceiveAddress.StreetAddress,
                            IsReceiveShortMessage = (int)CustomerStatus.是否接收短信.是,
                            IsReceiveEmail        = (int)CustomerStatus.是否接收邮件.是,
                            LastLoginDate         = DateTime.Now,
                            Birthday              = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue,
                            CreatedDate           = DateTime.Now,
                            DealerSysNo           = dealerSysNo,
                        };

                        Hyt.Model.CrReceiveAddress crr = new Model.CrReceiveAddress()
                        {
                            AreaSysNo         = orderInfo.ReceiveAddress.AreaSysNo,
                            Name              = orderInfo.ReceiveAddress.Name,
                            MobilePhoneNumber = orderInfo.ReceiveAddress.MobilePhoneNumber,
                            StreetAddress     = orderInfo.ReceiveAddress.StreetAddress,
                            IsDefault         = 1
                        };
                        Hyt.BLL.Order.SoOrderBo.Instance.CreateCustomer(cr, crr);
                        exceptionPoint = 5;
                    }
                    trancustomer.Complete();//会员创建事物
                }
                if (cr == null || cr.SysNo < 1)
                {
                    result.Status  = false;
                    result.Message = "会员信息读取失败";
                    return(result);
                }
                exceptionPoint = 6;
                #endregion

                #region 数据提交

                so.CustomerSysNo = cr.SysNo;
                so.LevelSysNo    = cr.LevelSysNo;
                so.PayTypeSysNo  = 12;//易宝支付
                using (var tran = new System.Transactions.TransactionScope(TransactionScopeOption.Required, options))
                {
                    var r = Hyt.BLL.Order.SoOrderBo.Instance.ImportSoOrder(so, orderInfo.ReceiveAddress, soItems.ToArray(), "系统", orderInfo.OnlinePayment, ref exceptionPoint);
                    exceptionPoint = 7;
                    if (r.StatusCode > 0)
                    {
                        var model = new DsOrderAssociation()
                        {
                            DealerOrderNo = orderInfo.OrderNo,
                            DealerSysNo   = dealerSysNo,
                            OrderSysNo    = r.StatusCode,
                        };
                        Hyt.BLL.Stores.DsOrderAssociationBo.Instance.Add(model);
                        exceptionPoint = 8;
                    }
                    exceptionPoint = 9;
                    tran.Complete();
                }
                #endregion
            }
            catch (Exception ex)
            {
                result.Status     = false;
                result.Message    = "接口异常";
                result.StatusCode = -1;
                BLL.Log.LocalLogBo.Instance.Write(ex.Message + "----->exceptionPoint =" + exceptionPoint, "AddOrderExceptionLog");
            }

            return(result);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 订单对象转换
        /// </summary>
        /// <param name="order">wcf 传入订单对象</param>
        /// <returns></returns>
        /// <remarks>2014-9-17  朱成果 创建</remarks>
        public AppOrder MapToAppOrder(AppOrder2 order)
        {
            AppOrder neworder   = new AppOrder();
            int      levelSysNo = 0;//客户等级

            if (order != null)
            {
                if (order.SoReceiveAddress != null)
                {
                    neworder.SoReceiveAddress = order.SoReceiveAddress;
                }
                if (order.Order != null)
                {
                    #region 订单和发票
                    var oo = order.Order;
                    neworder.SoOrder = new SoOrder()
                    {
                        CustomerSysNo         = oo.CustomerSysNo,
                        PayTypeSysNo          = oo.PayTypeSysNo,
                        DeliveryTypeSysNo     = oo.DeliveryTypeSysNo,
                        DeliveryRemarks       = oo.DeliveryRemarks,
                        DeliveryTime          = oo.DeliveryTime,
                        ContactBeforeDelivery = oo.ContactBeforeDelivery,
                        InternalRemarks       = oo.InternalRemarks,
                        CustomerMessage       = oo.CustomerMessage,
                        CreateDate            = DateTime.Now,
                        SalesType             = (int)Hyt.Model.WorkflowStatus.OrderStatus.销售方式.普通订单
                    };
                    if (oo.Invoice != null)
                    {
                        neworder.Invoice = new FnInvoice()
                        {
                            InvoiceTypeSysNo = oo.Invoice.InvoiceTypeSysNo,
                            InvoiceTitle     = oo.Invoice.InvoiceTitle,
                            InvoiceRemarks   = oo.Invoice.InvoiceRemarks
                        };
                    }
                    #endregion

                    var cr = Hyt.BLL.CRM.CrCustomerBo.Instance.GetModel(order.Order.CustomerSysNo);//客户信息
                    if (cr != null)
                    {
                        levelSysNo = cr.LevelSysNo;               //客户等级
                        neworder.SoOrder.LevelSysNo = levelSysNo; //下单时候的客户等级
                    }
                }
                if (order.OrderItems != null)
                {
                    #region 订单明细
                    decimal amount = 0;
                    neworder.Products = new List <SoOrderItem>();
                    foreach (var p in order.OrderItems)
                    {
                        if (!CheckTwoSalePrice(p.SysNo, p.Price))
                        {
                            throw new HytException(string.Format("商品({0})销售价格不允许少于限定价格{1}.", p.ProductName, p.Price));
                        }
                        var pitem = new SoOrderItem()
                        {
                            Quantity         = p.Quantity,
                            ProductSysNo     = p.SysNo,
                            OriginalPrice    = p.Price,
                            SalesUnitPrice   = p.Price,
                            ProductName      = p.ProductName,
                            ProductSalesType = (int)CustomerStatus.商品销售类型.普通,
                            SalesAmount      = p.Price * p.Quantity,
                        };
                        if (levelSysNo > 0)
                        {
                            var originalPrice = GetProductPriceByCustomerLevel(pitem.ProductSysNo, levelSysNo); //商城原单价
                            pitem.OriginalPrice  = originalPrice > 0 ? originalPrice : p.Price;                 //商城原单价
                            pitem.SalesUnitPrice = originalPrice > 0 ? originalPrice : p.Price;                 //商城销售单价;
                            pitem.SalesAmount    = pitem.SalesUnitPrice * pitem.Quantity;                       //销售总额
                            pitem.ChangeAmount   = p.Price * p.Quantity - pitem.SalesAmount;                    //调价金额
                            if (originalPrice != p.Price && neworder.SoOrder != null)
                            {
                                neworder.SoOrder.ImgFlag = MallTypeFlag.二次销售并调价;
                            }
                        }
                        neworder.Products.Add(pitem);
                        amount += pitem.SalesAmount;
                    }
                    if (neworder.SoOrder != null)
                    {
                        neworder.SoOrder.ProductAmount       = neworder.SoOrder.OrderAmount = neworder.Products.Sum(m => m.SalesAmount); //总金额
                        neworder.SoOrder.ProductChangeAmount = neworder.Products.Sum(m => m.ChangeAmount);                               //调价金额
                        neworder.SoOrder.CashPay             = neworder.SoOrder.OrderAmount + neworder.SoOrder.ProductChangeAmount;      //支付金额
                    }
                    #endregion
                }
            }
            return(neworder);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 补单
        /// </summary>
        /// <param name="model">补单实体</param>
        /// <param name="user">当前用户实体</param>
        /// <returns>true:成功,失败抛出异常</returns>
        /// <remarks>2013-07-16 黄伟 创建</remarks>
        /// <remarks>2013-11-15 周唐炬 加入商品借货、EAS业务、恢复配送员信用</remarks>
        private Result CreateOrder(ParaLogisticsControllerAdditionalOrders model, SyUser user)
        {
            var result = new Result {
                Status = false, StatusCode = -1, Message = "补单失败!"
            };
            var so          = new SoOrder();
            var currentTime = DateTime.Now;
            var client      = EasProviderFactory.CreateProvider();  //EAS Provider

            var borrowInfoGroupList = new List <BorrowInfoGroup>(); //EAS还货数据
            var saleInfoGroupList   = new List <SaleInfoGroup>();   //EAS出库分组数据
            var deliveryUser        = SyUserBo.Instance.GetSyUser(model.DeliverymanSysNo);

            #region 补单实体数据
            //保存收货地址
            var address          = model.ReceiveAddress;
            var soReceiveAddress = new SoReceiveAddress
            {
                AreaSysNo         = address.AreaSysNo,
                MobilePhoneNumber = address.MobilePhoneNumber,
                Name          = address.Name,
                PhoneNumber   = address.PhoneNumber,
                StreetAddress = address.Address,
                ZipCode       = address.ZipCode
            };
            //创建收货地址
            ISoReceiveAddressDao.Instance.InsertEntity(soReceiveAddress);

            so.ReceiveAddressSysNo = soReceiveAddress.SysNo;
            so.CustomerSysNo       = model.UserSysNo;
            so.LevelSysNo          = model.LevelSysNo;

            var deliveryType = GetDelTypeByNameLike("普通百城当日"); //普通百城当日
            so.DeliveryTypeSysNo = deliveryType.SysNo;
            so.Remarks           = so.DeliveryRemarks = "补单";
            so.DeliveryTime      = deliveryType.DeliveryTime; //全天

            so.PayTypeSysNo          = model.PaymentTypeSysNo;
            so.DefaultWarehouseSysNo = model.WarehouseSysNo;
            so.CreateDate            = currentTime;
            so.LastUpdateBy          = user.SysNo;
            so.LastUpdateDate        = currentTime;
            so.OrderCreatorSysNo     = user.SysNo;
            //order status related
            so.OrderSource      = (int)OrderStatus.销售单来源.业务员补单;
            so.OrderSourceSysNo = model.DeliverymanSysNo;
            so.PayStatus        = (int)OrderStatus.销售单支付状态.已支付;
            so.SalesSysNo       = 0;
            so.SalesType        = (int)OrderStatus.销售方式.普通订单;
            so.Status           = (int)OrderStatus.销售单状态.已完成;
            so.OnlineStatus     = Constant.OlineStatusType.已发货;

            //创建订单主表
            ISoOrderDao.Instance.InsertEntity(so);
            so = SoOrderBo.Instance.GetEntity(so.SysNo);
            var lstSoOrderItem = new List <SoOrderItem>();
            var soItems        = model.OrderInformations;
            #endregion

            //该商品配送员等级价总金额
            var deliveryPrice = decimal.Zero;

            foreach (var item in soItems)
            {
                var originalPrice = SoOrderBo.Instance.GetOriginalPrice(model.UserSysNo, item.ProductSysNo);
                var soItem        = new SoOrderItem()
                {
                    OrderSysNo           = so.SysNo,
                    OriginalPrice        = originalPrice,
                    ProductName          = item.ProductName,
                    ProductSysNo         = item.ProductSysNo,
                    TransactionSysNo     = so.TransactionSysNo,
                    Quantity             = item.ProductOrderNumber,
                    SalesAmount          = originalPrice * item.ProductOrderNumber,
                    RealStockOutQuantity = item.ProductOrderNumber,
                    ProductSalesType     = (int)CustomerStatus.商品销售类型.普通,
                    SalesUnitPrice       = originalPrice
                };
                so.OrderAmount += originalPrice * item.ProductOrderNumber;
                //创建订单明细
                soItem.SysNo = ISoOrderItemDao.Instance.Insert(soItem);
                lstSoOrderItem.Add(soItem);

                #region 计算商品配送员进货价
                var productLendItem = IProductLendDao.Instance.GetWhProductLendItemInfo(new ParaWhProductLendItemFilter()
                {
                    DeliveryUserSysNo = model.DeliverymanSysNo,
                    ProductSysNo      = item.ProductSysNo,
                    PriceSource       = ProductStatus.产品价格来源.配送员进货价.GetHashCode()
                });
                if (productLendItem != null)
                {
                    deliveryPrice += item.ProductOrderNumber * productLendItem.Price;
                }
                #endregion

                #region 修改借货数量
                //配送员补单的时候,eas 要做还货,然后再做销售出库
                //(即补单完成后,要先调用还货接口、再调用销售出库接口)
                ProductReturn(model.DeliverymanSysNo, item, user.SysNo);

                #endregion

                #region EAS业务数据

                var product = PdProductBo.Instance.GetProduct(item.ProductSysNo);
                if (product == null)
                {
                    continue;
                }
                //重新获取到包含信用等级价格的借货明细
                var productLend = IProductLendDao.Instance.GetWhProductLendItemInfo(new ParaWhProductLendItemFilter()
                {
                    ProductSysNo      = product.SysNo,
                    DeliveryUserSysNo = model.DeliverymanSysNo,
                    PriceSource       = ProductStatus.产品价格来源.配送员进货价.GetHashCode()
                });
                var    warehouse        = WhWarehouseBo.Instance.GetWarehouse(model.WarehouseSysNo);
                var    warehouseErpCode = string.Empty;
                string organizationCode = string.Empty;//组织机构代码
                if (warehouse != null)
                {
                    warehouseErpCode = warehouse.ErpCode;
                    var oraganization = OrganizationBo.Instance.GetOrganization(warehouse.SysNo);
                    if (oraganization != null)
                    {
                        organizationCode = oraganization.Code;
                    }
                }
                if (productLend == null)
                {
                    continue;
                }

                #region EAS还货数据

                var borrowInfoGroup = borrowInfoGroupList.SingleOrDefault(x => x.ProductLendSysNo == productLend.ProductLendSysNo) ?? new BorrowInfoGroup()
                {
                    ProductLendSysNo = productLend.ProductLendSysNo
                };
                var borrowInfo = new BorrowInfo()
                {
                    ErpCode         = product.ErpCode,
                    Quantity        = item.ProductOrderNumber,
                    WarehouseNumber = warehouseErpCode,
                    Amount          = productLend.Price,
                    Remark          = string.Empty,
                    WarehouseSysNo  = model.WarehouseSysNo
                };
                //入库单
                var stockin = IInStockDao.Instance.GetStockInBySource(WarehouseStatus.入库单据类型.借货单.GetHashCode(), productLend.SysNo);
                if (stockin != null)
                {
                    borrowInfoGroup.StockInSysno = stockin.SysNo;
                }
                borrowInfoGroup.BorrowInfoList.Add(borrowInfo);
                //添加到GroupList中
                if (borrowInfoGroupList.All(x => x.ProductLendSysNo != productLend.ProductLendSysNo))
                {
                    borrowInfoGroupList.Add(borrowInfoGroup);
                }
                #endregion

                #region EAS销售出库数据

                //根据借货单编号查询分组数据中的SaleInfo信息
                var saleInfoGroup = saleInfoGroupList.SingleOrDefault(x => x.ProductLendSysNo == productLend.ProductLendSysNo) ?? new SaleInfoGroup()
                {
                    ProductLendSysNo = productLend.ProductLendSysNo
                };
                var saleInfo = new SaleInfo()
                {
                    ErpCode          = product.ErpCode,
                    Quantity         = item.ProductOrderNumber,
                    WarehouseNumber  = warehouseErpCode,
                    WarehouseSysNo   = model.WarehouseSysNo,
                    OrganizationCode = organizationCode,
                    Amount           = originalPrice,
                    //销售出库接口的备注格式:JC[Hyt借货单系统编号]-[借货员姓名]-XS[Hyt订单号]
                    Remark = string.Format("JC[{0}]-[{1}]-XS[{2}],配送方式:百城当日达(补单)", saleInfoGroup.ProductLendSysNo, deliveryUser != null ? deliveryUser.UserName : model.DeliverymanSysNo.ToString(CultureInfo.InvariantCulture), so.SysNo)
                };
                saleInfoGroup.SaleInfoList.Add(saleInfo);
                //添加到Groups中
                if (saleInfoGroupList.All(x => x.ProductLendSysNo != productLend.ProductLendSysNo))
                {
                    saleInfoGroupList.Add(saleInfoGroup);
                }
                #endregion

                #endregion
            }
            #region 恢复配送员信用

            if (deliveryPrice > decimal.Zero)
            {
                DeliveryUserCreditBo.Instance.UpdateRemaining(model.WarehouseSysNo, model.DeliverymanSysNo, 0, deliveryPrice, "补单,单号:" + so.SysNo);
            }
            #endregion

            #region 更新订单、创建收款单、加入订单池、创建配送单配送在途
            //从接口调用金额计算
            so.CashPay = ISoOrderItemDao.Instance.SynchronousOrderAmount(so.SysNo);//同步订单价格
            //so.CashPay = so.OrderAmount; //订单现金支付金额

            //更新订单金额
            so.ProductAmount = so.OrderAmount;

            SoOrderBo.Instance.UpdateOrder(so); //更新订单 余勇修改为调用业务层方法 ISoOrderDao.Instance.Update(so);

            //创建订单收款单
            FnReceiptVoucherBo.Instance.CreateReceiptVoucherByOrder(so);
            SoOrderBo.Instance.WriteSoTransactionLog(so.TransactionSysNo
                                                     , string.Format(Constant.ORDER_TRANSACTIONLOG_CREATE, so.SysNo)
                                                     , user.UserName);
            //补单不用加入订单池
            //创建出库单已签收
            var stockOut = CreateOutStock(lstSoOrderItem, model.WarehouseSysNo, user);

            //配送方式
            var delivertType = DeliveryTypeBo.Instance.GetDeliveryType(so.DeliveryTypeSysNo);

            //创建配送单配送在途
            LgDeliveryBo.Instance.CreateLgDelivery(model.WarehouseSysNo, model.DeliverymanSysNo, delivertType,
                                                   user.SysNo, new List <LgDeliveryItem> {
                new LgDeliveryItem
                {
                    NoteType  = (int)LogisticsStatus.配送单据类型.出库单,
                    NoteSysNo = stockOut.SysNo,
                    ExpressNo = ""
                }
            }, true);

            #endregion

            #region EAS还货
            if (borrowInfoGroupList.Any())
            {
                //摘要:JC[Hyt借出编号]-[借货员姓名]-RK[Hyt入库编号]
                //(如果还货的商品在不同 借货单中,就以借货单明细分开调用)
                borrowInfoGroupList.ForEach(x =>
                {
                    if (x.BorrowInfoList.Count > 0)
                    {
                        client.Return(x.BorrowInfoList, string.Format("JC[{0}]-[{1}]-RK[{2}]", x.ProductLendSysNo,
                                                                      deliveryUser != null ? deliveryUser.UserName : model.DeliverymanSysNo.ToString(),
                                                                      x.StockInSysno), x.ProductLendSysNo.ToString());
                    }
                });
            }
            #endregion

            #region EAS出库
            if (saleInfoGroupList.Any())
            {
                saleInfoGroupList.ForEach(x =>
                {
                    if (x.SaleInfoList.Count > 0)
                    {
                        client.SaleOutStock(x.SaleInfoList, Extra.Erp.Model.EasConstant.HytCustomer, so.SysNo.ToString(), so.TransactionSysNo);
                    }
                });
            }
            #endregion

            //新增会员明细 2014-1-17 黄志勇 添加
            LgSettlementBo.Instance.WriteShopNewCustomerDetail(so.CustomerSysNo, stockOut.StockOutAmount);

            result.Status     = true;
            result.StatusCode = so.SysNo;
            result.Message    = "补单成功!";
            return(result);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 推送订单
        /// </summary>
        /// <returns></returns>
        /// <remarks>2016-3-21 王耀发 创建</remarks>
        public override Result PushOrder(int soOrderSysNo)
        {
            Result result  = new Result();
            int    IcpType = (int)Model.CommonEnum.商检.广州南沙;

            Hyt.Model.Manual.SoOrderMods order = SoOrderBo.Instance.GetSoOrderMods(soOrderSysNo);
            order.ReceiveAddress         = SoOrderBo.Instance.GetOrderReceiveAddress2(order.ReceiveAddressSysNo);
            order.ReceiverProvince       = ((Hyt.Model.Manual.SoReceiveAddressMod)order.ReceiveAddress).ReceiverProvince.Trim();
            order.ReceiverCity           = ((Hyt.Model.Manual.SoReceiveAddressMod)order.ReceiveAddress).ReceiverCity.Trim();
            order.ReceiverArea           = ((Hyt.Model.Manual.SoReceiveAddressMod)order.ReceiveAddress).ReceiverArea.Trim();
            order.OrderItemList          = SoOrderBo.Instance.GetOrderItemsByOrderId(order.SysNo);
            order.OrderInvoice           = SoOrderBo.Instance.GetFnInvoice(order.InvoiceSysNo);
            order.ReceiptVoucher         = Hyt.BLL.Finance.FnReceiptVoucherBo.Instance.GetReceiptVoucherByOrder(soOrderSysNo);
            order.ReceiptVoucherItemList = Hyt.BLL.Finance.FnReceiptVoucherBo.Instance.GetReceiptVoucherItem(order.ReceiptVoucher.SysNo);

            IList <int> proIdList = new List <int>();
            List <Hyt.Model.Manual.SoOrderItemByPro> soProList = new List <Model.Manual.SoOrderItemByPro>();

            foreach (var item in order.OrderItemList)
            {
                proIdList.Add(item.ProductSysNo);
            }

            IList <IcpGZNanShaGoodsInfo> proList = Hyt.BLL.Product.PdProductBo.Instance.GetIcpGZNanShaGoodsInfoList(proIdList);

            if (order.OrderItemList.Count != proList.Count)
            {
                return(new Result()
                {
                    Message = "订单明细有尚未备案的商品,推送失败", Status = false
                });
            }
            foreach (var proItem in proList)
            {
                SoOrderItem item = order.OrderItemList.First(p => p.ProductSysNo == proItem.ProductSysNo);

                Hyt.Model.Manual.SoOrderItemByPro mod = new Model.Manual.SoOrderItemByPro();
                mod.GCode        = proItem.Gcode;
                mod.ProductSysNo = proItem.ProductSysNo;
                mod.Hscode       = proItem.HSCode;
                mod.CiqGoodsNo   = proItem.CIQGoodsNo;
                mod.ProductName  = proItem.Gname;
                mod.Brand        = proItem.Brand;
                mod.Spec         = proItem.Spec;
                mod.Origin       = proItem.AssemCountry;
                mod.QtyUnit      = proItem.Unit;
                mod.Qty          = item.Quantity.ToString();
                mod.DecPrice     = item.SalesUnitPrice;
                mod.DecTotal     = item.SalesAmount;
                mod.SellWebSite  = proItem.SellWebSite;
                soProList.Add(mod);
            }

            ////测试
            //foreach (var proItem in order.OrderItemList)
            //{
            //    var product = Hyt.BLL.Product.PdProductBo.Instance.GetProduct(proItem.ProductSysNo);
            //    //获取启邦商品备案信息
            //    var IcpQiBang = Hyt.BLL.ApiIcq.IcpBo.Instance.GetIcpQiBangGoodsInfoEntityByPid(proItem.ProductSysNo);

            //    Hyt.Model.Manual.SoOrderItemByPro mod = new Model.Manual.SoOrderItemByPro();
            //    mod.GCode = IcpQiBang.item_code;
            //    mod.ProductSysNo = proItem.ProductSysNo;
            //    mod.Hscode = IcpQiBang.item_id;
            //    mod.CiqGoodsNo = IcpQiBang.ciqgoodsno;
            //    mod.ProductName = IcpQiBang.item_name;
            //    mod.Brand = Hyt.BLL.Product.PdBrandBo.Instance.GetEntity(product.BrandSysNo).Name;
            //    mod.Spec = IcpQiBang.item_spec;
            //    mod.Origin = IcpQiBang.origincountry;
            //    mod.QtyUnit = "克";
            //    mod.Qty = proItem.Quantity.ToString();
            //    mod.DecPrice = proItem.SalesUnitPrice;
            //    mod.DecTotal = proItem.SalesAmount;
            //    mod.SellWebSite = "http://www.gaopin999.com/";
            //    soProList.Add(mod);

            //}


            Hyt.Model.Icp.GZNanSha.Order.Root root = new Hyt.Model.Icp.GZNanSha.Order.Root();
            root.head                    = new Model.Icp.GZNanSha.Head();
            root.body                    = new Model.Icp.GZNanSha.Order.OrderBody();
            root.body.record             = new Model.Icp.GZNanSha.Order.OrderBodyRecord();
            root.body.record.cusOrderMod = new Model.Icp.GZNanSha.Order.CustomOrderMod();
            root.body.record.cusOrderMod.orderGoodsList = new Model.Icp.GZNanSha.Order.OrderGoodsList();

            //生成最大流水号
            string   MaxSerialNumber = GetMaxSerialNumberByMType(IcpType.ToString(), config.NSIcpInfo.OrderMessageType);
            DateTime now             = DateTime.Now;
            string   strDate         = now.ToString("yyyyMMddHHmmssfff");
            string   strDateMid      = now.ToString("yyyyMMddHHmmss");
            //string fileName = config.NSIcpInfo.OrderMessageType + "_" + strDate + MaxSerialNumber;
            string fileName  = config.NSIcpInfo.OrderMessageType + "_" + strDate;
            string MessageID = "ICIP" + strDateMid;

            SetCustomOrderHead(MessageID, root.head);
            BindCusOrderData(order, root.body.record.cusOrderMod);
            BindCusOrderGoodsData(soProList, root.body.record.cusOrderMod.orderGoodsList);

            string str = Hyt.Util.Serialization.SerializationUtil.XmlSerialize <Model.Icp.GZNanSha.Order.Root>(root);

            str = str.Replace("encoding=\"utf-16\"", "encoding=\"utf-8\"");
            str = str.Replace("Root", "ROOT");
            FtpUtil ftp = new FtpUtil(config.NSIcpInfo.FtpUrl, config.NSIcpInfo.FtpName, config.NSIcpInfo.FtpPassword);
            string  msg = "";

            fileName = fileName + ".xml";
            try
            {
                ftp.UploadFile(config.NSIcpInfo.FtpUrl + "4200.IMPBA.SWBEBTRADE.REPORT/in", fileName, Encoding.UTF8.GetBytes(str), out msg);
                //新增商检表信息
                int  UserSysNo = AdminAuthenticationBo.Instance.Current.Base.SysNo;
                CIcp model     = new CIcp();
                model.SourceSysNo    = soOrderSysNo;
                model.IcpType        = Hyt.Model.CommonEnum.商检.广州南沙.GetHashCode();
                model.MessageID      = MessageID;
                model.MessageType    = config.NSIcpInfo.OrderMessageType;
                model.SerialNumber   = MaxSerialNumber;
                model.XmlContent     = str;
                model.Status         = (int)IcpStatus.商品商检推送状态.已推送;
                model.CreatedBy      = UserSysNo;
                model.CreatedDate    = DateTime.Now;
                model.LastUpdateBy   = UserSysNo;
                model.LastUpdateDate = DateTime.Now;
                model.SysNo          = IcpDao.Instance.Insert(model);
                //插入明细
                foreach (var proItem in proList)
                {
                    var m = new CIcpGoodsItem
                    {
                        SourceSysNo    = soOrderSysNo,
                        IcpType        = model.IcpType,
                        MessageID      = MessageID,
                        IcpGoodsSysNo  = model.SysNo,
                        ProductSysNo   = proItem.ProductSysNo,
                        EntGoodsNo     = "None",
                        CreatedBy      = UserSysNo,
                        CreatedDate    = DateTime.Now,
                        LastUpdateBy   = UserSysNo,
                        LastUpdateDate = DateTime.Now
                    };
                    IcpDao.Instance.InsertIcpGoodsItem(m);
                }
                //foreach (var proItem in order.OrderItemList)
                //{
                //    var m = new CIcpGoodsItem
                //    {
                //        SourceSysNo = soOrderSysNo,
                //        IcpType = model.IcpType,
                //        MessageID = MessageID,
                //        IcpGoodsSysNo = model.SysNo,
                //        ProductSysNo = proItem.ProductSysNo,
                //        EntGoodsNo = "None",
                //        CreatedBy = UserSysNo,
                //        CreatedDate = DateTime.Now,
                //        LastUpdateBy = UserSysNo,
                //        LastUpdateDate = DateTime.Now
                //    };
                //    IcpDao.Instance.InsertIcpGoodsItem(m);
                //}
                //更新订单的商检推送状态
                SoOrderBo.Instance.UpdateOrderNsStatus(soOrderSysNo, (int)OrderStatus.商检状态.已推送);
                result.Status  = true;
                result.Message = root.head.MessageID;
            }
            catch (Exception ex)
            {
                result.Status  = false;
                result.Message = ex.Message;
            }
            return(result);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 商城退货单导入商城
        /// </summary>
        /// <param name="mallRma">退货单实体</param>
        /// <returns>处理结果</returns>
        /// <remarks>2013-8-29 陶辉 创建</remarks>
        /// <remarks>2013-09-10 朱家宏 实现</remarks>
        /// <remarks>2013-10-21 黄志勇 修改退换货子表实退商品金额</remarks>
        public Result ImportMallRma(UpGradeRma mallRma)
        {
            //直接申请退换单,根据原订单匹配成功的商品明细进行退货
            var result = new Result();

            try
            {
                //升舱订单数据
                var dsOrder      = BLL.MallSeller.DsOrderBo.Instance.GetDsOrderByMallOrderId(mallRma.MallOrderId);
                var dsOrderItems = BLL.MallSeller.DsOrderBo.Instance.GetDsOrderItems(dsOrder.SysNo);


                //HYT订单主表数据
                var soOrder =
                    DataAccess.Order.ISoOrderDao.Instance.GetByTransactionSysNo(dsOrder.OrderTransactionSysNo);

                if (soOrder.Status != (int)Model.WorkflowStatus.OrderStatus.销售单状态.已完成)
                {
                    result.Message    = "未完成的订单不允许做此操作。";
                    result.Status     = false;
                    result.StatusCode = -1;
                    return(result);
                }

                //订单明细数据
                var soOrderItems = BLL.Order.SoOrderBo.Instance.GetOrderItemsByOrderId(soOrder.SysNo);

                if (soOrderItems == null)
                {
                    throw new ArgumentNullException();
                }

                //退换货明细
                var rcReturnItems = new List <RcReturnItem>();
                foreach (var item in mallRma.RmaItems)
                {
                    var         outitem     = Hyt.BLL.Warehouse.WhWarehouseBo.Instance.GetWhStockOutItem(item.StockOutItemSysNo);
                    SoOrderItem soOrderItem = null;
                    if (outitem != null)
                    {
                        soOrderItem = soOrderItems.FirstOrDefault(m => m.SysNo == outitem.OrderItemSysNo);
                    }
                    if (soOrderItem != null)
                    {
                        var rcReturnItem = new RcReturnItem
                        {
                            OriginPrice         = soOrderItem.OriginalPrice,
                            ProductName         = soOrderItem.ProductName,
                            ProductSysNo        = int.Parse(item.HytProductCode),
                            ReturnPriceType     = (int)Model.WorkflowStatus.RmaStatus.商品退款价格类型.自定义价格,
                            ReturnType          = (int)Model.WorkflowStatus.RmaStatus.商品退换货类型.新品,
                            RmaQuantity         = item.MallQuantity,
                            RmaReason           = "",
                            StockOutItemSysNo   = item.StockOutItemSysNo,
                            RefundProductAmount = Math.Round(outitem.RealSalesAmount * ((decimal)item.MallQuantity / (decimal)outitem.ProductQuantity), 2)
                        };
                        rcReturnItems.Add(rcReturnItem);
                    }
                }

                var refundProductAmount = rcReturnItems.Sum(o => o.RefundProductAmount); //退款金额合计

                var rcReturn = new CBRcReturn
                {
                    CreateBy            = soOrder.CustomerSysNo,
                    CreateDate          = DateTime.Now,
                    CustomerSysNo       = soOrder.CustomerSysNo,
                    HandleDepartment    = (int)Model.WorkflowStatus.RmaStatus.退换货处理部门.客服中心,
                    InvoiceSysNo        = soOrder.InvoiceSysNo,
                    LastUpdateBy        = soOrder.OrderCreatorSysNo,
                    LastUpdateDate      = DateTime.Now,
                    OrderSysNo          = soOrder.SysNo,
                    ReceiveAddressSysNo = soOrder.ReceiveAddressSysNo,
                    RMARemark           = "",
                    RmaType             = (int)Model.WorkflowStatus.RmaStatus.RMA类型.售后退货,
                    Source                = (int)Model.WorkflowStatus.RmaStatus.退换货申请单来源.分销商,
                    Status                = (int)Model.WorkflowStatus.RmaStatus.退换货状态.待审核,
                    WarehouseSysNo        = soOrder.DefaultWarehouseSysNo,
                    RMAItems              = rcReturnItems,
                    DeductedInvoiceAmount = 0,
                    InternalRemark        = mallRma.BuyerRmaReason,//退款说明
                    IsPickUpInvoice       = 0,
                    OrginAmount           = refundProductAmount,
                    OrginPoint            = (int)refundProductAmount,
                    RefundPoint           = (int)refundProductAmount,
                    PickUpAddressSysNo    = 0,
                    PickUpTime            = "",
                    PickupTypeSysNo       = 0,
                    RedeemAmount          = 0,
                    RefundAccount         = "",
                    RefundAccountName     = "",
                    RefundBank            = "",
                    RefundBy              = 0,
                    ShipTypeSysNo         = 0,
                    RefundDate            = DateTime.Now,
                    RefundProductAmount   = refundProductAmount,
                    RefundTotalAmount     = refundProductAmount,
                    RefundType            = (int)Hyt.Model.WorkflowStatus.RmaStatus.退换货退款方式.分销商预存
                };

                //当前操作用户
                var htyUserSysNo = IDsOrderDao.Instance.GetDealer(mallRma.DealerSysNo).UserSysNo;
                var syUser       = BLL.Sys.SyUserBo.Instance.GetSyUser(htyUserSysNo);
                var pickaddress  = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(soOrder.ReceiveAddressSysNo);//收货地址变成取件地址
                pickaddress.SysNo = 0;
                using (var tran = new TransactionScope())
                {
                    //创建rma单
                    var rmaSysNo = BLL.RMA.RmaBo.Instance.InsertRMA(rcReturn, pickaddress, null, syUser);
                    var htyRma   = BLL.RMA.RmaBo.Instance.GetRcReturnEntity(rmaSysNo);
                    //分销商退换货单
                    var dsReturn = new DsReturn
                    {
                        ApplicationTime        = mallRma.ApplyTime,
                        BuyerNick              = mallRma.MallBuyerName,
                        RmaRemark              = mallRma.BuyerRmaReason,
                        DealerMallSysNo        = mallRma.DealerMallSysNo,
                        MallOrderId            = mallRma.MallOrderId,
                        MallReturnAmount       = mallRma.MallRefundFee,
                        MallReturnId           = mallRma.MallRmaId,
                        BuyerRemark            = mallRma.MallRmaMessage,
                        RmaType                = (int)Model.WorkflowStatus.RmaStatus.RMA类型.售后退货,
                        RcReturnSysNo          = rmaSysNo,
                        ReturnTransactionSysNo = htyRma.TransactionSysNo
                    };



                    var dsReturnItems = new List <DsReturnItem>();
                    foreach (var rmaItem in mallRma.RmaItems)
                    {
                        var         myid        = BLL.MallSeller.DsOrderBo.Instance.GetDsOrderItemAssociationByOutStockItemNo(rmaItem.StockOutItemSysNo).Select(m => m.DsOrderItemSysNo).FirstOrDefault();
                        DsOrderItem dsOrderItem = dsOrderItems.FirstOrDefault(m => m.SysNo == myid);
                        if (dsOrderItem == null)
                        {
                            dsOrderItem = new DsOrderItem();
                        }
                        dsReturnItems.Add(new DsReturnItem
                        {
                            Amount = rmaItem.HytRmaAmount,
                            MallProductAttribute = dsOrderItem.MallProductAttribute,
                            MallProductId        = dsOrderItem.MallProductId,
                            MallProductName      = dsOrderItem.MallProductName,
                            Quantity             = rmaItem.MallQuantity
                        });
                    }

                    //创建『分销商退换货单』
                    BLL.MallSeller.DsReturnBo.Instance.Create(dsReturn, dsReturnItems);

                    if (!string.IsNullOrEmpty(mallRma.ImgPaths))
                    {
                        string[] paths = mallRma.ImgPaths.Split(',');
                        foreach (string str in paths)
                        {
                            BLL.RMA.RmaBo.Instance.InsertRMAImg(new RcReturnImage()
                            {
                                ImageUrl    = str,
                                ReturnSysNo = rmaSysNo
                            });
                        }
                    }

                    result.Message    = "操作成功。";
                    result.Status     = true;
                    result.StatusCode = rmaSysNo;

                    tran.Complete();
                }
            }
            catch
            {
                result.Message    = "操作失败。";
                result.Status     = false;
                result.StatusCode = -1;
            }

            return(result);
        }