Exemple #1
0
        /// <summary>
        /// 保存发货单信息
        /// </summary>
        /// <returns></returns>
        private bool SaveOrderInfo()
        {
            //从配置文件获取订单提交是否进行库存处理
            bool IsStock = bool.Parse(ConfigurationManager.AppSettings["IsStock"]);
            //更新订单状态为正式订单
            IList <ICriterion> qryList = new List <ICriterion>();

            qryList.Add(Expression.Eq("OrderNO", OrderNO));
            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntityByFields(qryList);

            orderInfo.Remark = txtRemark.Text;



            //检查订单发货明细是否调整
            qryList = new List <ICriterion>();
            qryList.Add(Expression.Eq("OrderNO", OrderNO));
            qryList.Add(Expression.Gt("FixGoodsNumber", 0M));
            int recordCount = Core.Container.Instance.Resolve <IServiceContractOrderDetail>().GetRecordCountByFields(qryList);

            orderInfo.IsFix = recordCount > 0 ? 1 : 0;
            //更新订单信息
            Core.Container.Instance.Resolve <IServiceContractOrderInfo>().Update(orderInfo);
            return(true);
        }
Exemple #2
0
        /// <summary>
        /// 记录列表行记录操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
        {
            int ID = GetSelectedDataKeyID(Grid1);
            //获取当前选中记录信息
            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntity(ID);

            if (orderInfo != null)
            {
                if (orderInfo.IsTemp == 1)
                {
                    //删除收货单
                    if (e.CommandName == "Delete")
                    {
                        //删除订单信息及附属信息
                        DeleteOrderByID(ID, orderInfo.OrderNO);
                        //加载收货单信息
                        BindGrid();
                    }
                    //编辑收货单
                    if (e.CommandName == "editField")
                    {
                        PageContext.Redirect(string.Format("~/Contract/SH/ContractSHEdit.aspx?id={0}", ID));
                    }
                }
                else
                {
                    Alert.Show("正式订单不能删除或者修改!");
                }
            }
        }
        /// <summary>
        /// 创建新订单
        /// </summary>
        private void CreateOrderInfo()
        {
            dpStartDate.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            //创建新订单信息,默认为临时订单
            ContractOrderInfo order = new ContractOrderInfo();

            order.Operator      = User.Identity.Name;
            order.OrderAmount   = 0;
            order.OrderDate     = DateTime.Now;
            order.ValuationDate = DateTime.Now.ToString("yyyy-MM-dd");
            order.ManualNO      = "";
            order.OrderNO       = string.Format("SH{0}", DateTime.Now.ToString("yyyyMMddHHmmss"));
            order.OrderNumber   = 0;
            order.Remark        = "";
            order.IsTemp        = 1;             //默认临时订单
            order.OrderType     = 2;
            order.IsFix         = 0;             //默认订单未调整
            order.ContractInfo  = Core.Container.Instance.Resolve <IServiceContractInfo>().GetEntity(int.Parse(ddlContract.SelectedValue));
            order.ContractNO    = order.ContractInfo.ContractNO;
            order.OrderState    = "1";           //默认执行中
            order.CustomerName  = order.ContractInfo.CustomerName;
            order.CarID         = 0;
            order.CarNO         = "";
            //创建临时单据
            Core.Container.Instance.Resolve <IServiceContractOrderInfo>().Create(order);
            //保存订单号到页面缓存
            OrderNO = order.OrderNO;
            //创建合同相关费用信息
            CreateCostInfo(order.OrderNO);
            //初始化页面数据
            lblOrderNo.Text = OrderNO;
        }
Exemple #4
0
        /// <summary>
        /// 合同客户选择
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlContract_SelectedIndexChanged(object sender, EventArgs e)
        {
            IList <ICriterion> qryList = new List <ICriterion>();

            //获取合同价格套系信息
            //PriceSetInfo priceSetInfo = Core.Container.Instance.Resolve<IServicePriceSetInfo>().GetEntity(contractInfo.PriceSetID);
            //根据选择的客户合同更新发货商品的价格
            qryList.Add(Expression.Eq("OrderNO", OrderNO));
            IList <ContractOrderDetail> orderGoodsList = Core.Container.Instance.Resolve <IServiceContractOrderDetail>().GetAllByKeys(qryList);
            //获取订单信息并更新订单合同信息
            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntityByFields(qryList);

            Core.Container.Instance.Resolve <IServiceContractOrderInfo>().Update(orderInfo);
            //更新订单材料单价信息
            foreach (ContractOrderDetail goodsInfo in orderGoodsList)
            {
                //根据价格套系编号和商品ID获取合同商品价格信息
                qryList = new List <ICriterion>();
                //qryList.Add(Expression.Eq("SetID", priceSetInfo.ID));
                qryList.Add(Expression.Eq("EquipmentID", goodsInfo.GoodsID));
            }

            //更新显示发货信息
            BindOrderDetail();
        }
Exemple #5
0
        protected void Grid1_PreRowDataBound(object sender, GridPreRowEventArgs e)
        {
            ContractOrderInfo row         = e.DataItem as ContractOrderInfo;
            int             isTemp        = Convert.ToInt32(row.OrderState);
            LinkButtonField lbtnEditField = Grid1.FindColumn("lbtnEditField") as LinkButtonField;

            lbtnEditField.Enabled = isTemp == 1;
        }
        /// <summary>
        /// 订单材料出库处理
        /// </summary>
        /// <param name="whID">出库仓库ID</param>
        /// <param name="orderInfo">发货单信息</param>
        private void OrderStockOutPress(int whID, ContractOrderInfo orderInfo)
        {
            //获取销售仓库信息
            WareHouse houseInfo = Core.Container.Instance.Resolve <IServiceWareHouse>().GetEntity(whID);
            // 生成出库单信息
            WHOutBoundOrder storageOrder = new WHOutBoundOrder();

            storageOrder.BOrderNO    = OrderNO;
            storageOrder.Operator    = User.Identity.Name;
            storageOrder.OrderAmount = 0;
            storageOrder.OrderNumber = 0;
            storageOrder.OrderDate   = DateTime.Now;
            storageOrder.OrderNO     = string.Format("CK{0}", DateTime.Now.ToString("yyyyMMddHHmmss"));
            storageOrder.OrderType   = 1;
            //storageOrder.SuplierID = orderInfo.ContractInfo.CustomerID;
            storageOrder.WareHouseID = houseInfo.ID;
            storageOrder.OutOrderNO  = "";
            storageOrder.Remark      = "发货出库";

            #region 出库商品出库明细处理

            /*---- 主材出库明细处理 ----*/
            //获取订单商品主材明细,生成出库商品明细信息
            IList <ICriterion> qryListDetail = new List <ICriterion>();
            qryListDetail.Add(Expression.Eq("OrderNO", OrderNO));
            qryListDetail.Add(Expression.Eq("WareHouseID", whID));
            IList <ContractOrderDetail> list = Core.Container.Instance.Resolve <IServiceContractOrderDetail>().GetAllByKeys(qryListDetail);
            //写入出库商品明细
            foreach (ContractOrderDetail detail in list)
            {
                //出库单出库明细处理
                CreateStockOutOrder(whID, detail.GoodsNumber, detail.GoodsID, detail.GoodsUnit, ref storageOrder);
            }

            /*---- 辅材出库明细处理 ----*/
            //获取订单商品辅材明细,生成出库商品明细信息
            string sql = string.Format(@"select GoodsID,GoodsUnit,sum(GoodsNumber) as GoodsNumber from ContractOrderSecondaryDetail where OrderNO ='{0}' and WareHouseID ={1} group by GoodsID,GoodsUnit "
                                       , OrderNO, whID);
            DataSet ds = DbHelperSQL.Query(sql);
            if (ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
            {
                //写入出库商品明细
                foreach (DataRow detail in ds.Tables[0].Rows)
                {
                    //出库单出库明细处理
                    CreateStockOutOrder(whID, decimal.Parse(detail["GoodsNumber"].ToString())
                                        , int.Parse(detail["GoodsID"].ToString())
                                        , detail["GoodsUnit"].ToString()
                                        , ref storageOrder);
                }
            }

            #endregion 出库商品出库明细处理

            //创建出库单信息
            Core.Container.Instance.Resolve <IServiceWHOutBoundOrder>().Create(storageOrder);
        }
Exemple #7
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!IsPostBack)
     {
         IList <ICriterion> qryList = new List <ICriterion>();
         qryList.Add(Expression.Eq("OrderNO", OrderNO));
         ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceSaleOrder>().GetEntityByFields(qryList);
         labMoneys.Text    = orderInfo.OrderAmount.ToString();
         labFactPrice.Text = orderInfo.OrderAmount.ToString();
     }
 }
        private void BindOrderInfo()
        {
            IList <ICriterion> qryList = new List <ICriterion>();

            qryList.Add(Expression.Eq("OrderNO", OrderNO));

            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntityByFields(qryList);

            OrderID       = orderInfo != null ? orderInfo.ID : 0;
            ContractID    = orderInfo != null ? orderInfo.ContractInfo.ID : 0;
            OrderType     = orderInfo != null ? orderInfo.OrderType : 1;
            lblTitle.Text = string.Format("发货单号:{0}", OrderNO);
        }
        /// <summary>
        /// 根据订单号,获取订单信息
        /// </summary>
        private void GetOrderInfo()
        {
            //获取订单信息
            ContractOrderInfo order = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntity(OrderID);

            OrderNO = order.OrderNO;
            //初始化页面数据
            dpStartDate.Text          = order.ValuationDate;
            txtRemark.Text            = order.Remark;
            lblOrderNo.Text           = OrderNO;
            tbManualNO.Text           = order.ManualNO;
            ddlContract.SelectedValue = order.ContractInfo.ID.ToString();
        }
Exemple #10
0
        protected void ddlCar_SelectedIndexChanged(object sender, EventArgs e)
        {
            //获取订单信息
            IList <ICriterion> qryList = new List <ICriterion>();

            qryList = new List <ICriterion>();
            qryList.Add(Expression.Eq("OrderNO", OrderNO));
            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntityByFields(qryList);

            //更新发货单送货车辆信息

            Core.Container.Instance.Resolve <IServiceContractOrderInfo>().Update(orderInfo);
        }
        /// <summary>
        /// 保存发货单信息
        /// </summary>
        /// <param name="isTemp">订单类型 0:正式订单 1:临时订单</param>
        /// <returns></returns>
        private bool SaveOrderInfo(int isTemp)
        {
            //从配置文件获取订单提交是否进行库存处理
            bool IsStock = bool.Parse(ConfigurationManager.AppSettings["IsStock"]);
            //通过订单号获取当前订单信息
            IList <ICriterion> qryList = new List <ICriterion>();

            qryList.Add(Expression.Eq("OrderNO", OrderNO));
            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntityByFields(qryList);

            //更新订单信息
            orderInfo.IsTemp        = isTemp;
            orderInfo.OrderAmount   = decimal.Parse(lblAmount.Text);
            orderInfo.OrderNumber   = 0;
            orderInfo.ManualNO      = tbManualNO.Text;
            orderInfo.ValuationDate = dpStartDate.Text;
            orderInfo.Remark        = txtRemark.Text;
            orderInfo.Operator      = User.Identity.Name;
            orderInfo.ContractInfo  = Core.Container.Instance.Resolve <IServiceContractInfo>().GetEntity(int.Parse(ddlContract.SelectedValue));
            orderInfo.ContractNO    = orderInfo.ContractInfo.ContractNO;
            orderInfo.CustomerName  = orderInfo.ContractInfo.CustomerName;
            //发货车辆信息
            CarInfo carInfo = Core.Container.Instance.Resolve <IServiceCarInfo>().GetEntity(int.Parse(ddlCar.SelectedValue));

            orderInfo.CarNO = carInfo.CarNO;
            orderInfo.CarID = int.Parse(ddlCar.SelectedValue);

            //正式订单处理,更新出库信息及流水信息等
            if (isTemp == 0)
            {
                //检查是否做出库处理
                if (IsStock)
                {
                    //根据订单号,获取订单中所有材料的出库仓库ID信息
                    List <int> listWH = new InventoryHelper().GetWHInfo(OrderNO);
                    //按出库仓库各个计算出库信息
                    foreach (int whID in listWH)
                    {
                        //订单材料出库处理
                        OrderStockOutPress(whID, orderInfo);
                    }
                }
            }
            //更新订单信息
            Core.Container.Instance.Resolve <IServiceContractOrderInfo>().Update(orderInfo);
            //更新费用信息
            new ContractOrderBase().CalcOrderCost(OrderNO);
            //CalcOrderCost();

            return(true);
        }
Exemple #12
0
        protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
        {
            int ID = GetSelectedDataKeyID(Grid1);
            //获取当前选中记录信息
            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntity(ID);

            if (e.CommandName == "editField")
            {
                if (orderInfo != null)
                {
                    PageContext.Redirect(string.Format("~/Contract/SH/ReceivingOrderEdit.aspx?id={0}", ID));
                }
            }
        }
Exemple #13
0
        private void GetOrderInfo()
        {
            ContractOrderInfo order = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntity(OrderID);

            OrderNO = order.OrderNO;
            //初始化页面数据
            lblDate.Text    = order.OrderDate.ToString("yyyy-MM-dd HH:mm:ss");
            txtRemark.Text  = order.Remark;
            lblOrderNo.Text = order.ManualNO;
            //获取合同客户信息
            ContractInfo contractInfo = Core.Container.Instance.Resolve <IServiceContractInfo>().GetEntity(order.ContractInfo.ID);

            lblContract.Text = contractInfo.CustomerName;
        }
Exemple #14
0
        protected void Accept_Click(object sender, EventArgs e)
        {
            IList <ICriterion> qryList = new List <ICriterion>();

            qryList.Add(Expression.Eq("OrderNO", OrderNO));
            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceSaleOrder>().GetEntityByFields(qryList);

            decimal        Amount    = 0;
            tm_SalePayInfo PayEntity = new tm_SalePayInfo();

            if (!string.IsNullOrEmpty(nbxVip.Text) && decimal.Parse(nbxVip.Text) > 0)
            {
                PayEntity.VipcardMoneys = decimal.Parse(nbxVip.Text);
                PayEntity.PayWayVipcard = "1";
                Amount += decimal.Parse(nbxVip.Text);
            }
            if (!string.IsNullOrEmpty(nbCash.Text) && decimal.Parse(nbCash.Text) > 0)
            {
                PayEntity.CashMoneys = decimal.Parse(nbCash.Text);
                PayEntity.PayWayCash = "1";
                Amount += decimal.Parse(nbCash.Text);
            }
            if (!string.IsNullOrEmpty(nbCard.Text) && decimal.Parse(nbCard.Text) > 0)
            {
                PayEntity.CreditMoneys = decimal.Parse(nbCard.Text);
                PayEntity.PayWayCredit = "1";
                Amount += decimal.Parse(nbCard.Text);
            }
            if (!string.IsNullOrEmpty(nbWX.Text) && decimal.Parse(nbWX.Text) > 0)
            {
                PayEntity.OnlineMoneys = decimal.Parse(nbWX.Text);
                PayEntity.PayWayOnline = "1";
                Amount += decimal.Parse(nbWX.Text);
            }
            if (!string.IsNullOrEmpty(nbZFB.Text) && decimal.Parse(nbZFB.Text) > 0)
            {
                PayEntity.OnlineMoneys = decimal.Parse(nbZFB.Text);
                PayEntity.PayWayOnline = "2";
                Amount += decimal.Parse(nbZFB.Text);
            }

            PayEntity.PayTime     = DateTime.Now;
            PayEntity.SaleOrderID = orderInfo.ID;

            Core.Container.Instance.Resolve <IServiceSalePayInfo>().Create(PayEntity);
            //更新订单状态为正式订单
            orderInfo.IsTemp = 0;
            Core.Container.Instance.Resolve <IServiceSaleOrder>().Update(orderInfo);
            PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
        }
        private void GetOrderInfo()
        {
            ContractOrderInfo order = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntity(OrderID);

            OrderNO = order.OrderNO;

            //初始化页面数据
            lblDate.Text              = order.OrderDate.ToString("yyyy-MM-dd HH:mm:ss");
            txtRemark.Text            = order.Remark;
            lblOrderNo.Text           = OrderNO;
            lblAmount.Text            = order.ManualNO;
            ddlContract.SelectedValue = order.ContractInfo.ID.ToString();
            ddlCar.SelectedValue      = order.CarID.ToString();
        }
        /// <summary>
        /// 合同客户选择
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlContract_SelectedIndexChanged(object sender, EventArgs e)
        {
            IList <ICriterion> qryList = new List <ICriterion>();
            //获取合同信息
            ContractInfo contractInfo = Core.Container.Instance.Resolve <IServiceContractInfo>().GetEntity(int.Parse(ddlContract.SelectedValue));

            //获取合同价格套系信息
            //PriceSetInfo priceSetInfo = Core.Container.Instance.Resolve<IServicePriceSetInfo>().GetEntity(contractInfo.PriceSetID);
            //根据选择的客户合同更新发货商品的价格
            qryList.Add(Expression.Eq("OrderNO", OrderNO));
            IList <ContractOrderDetail> orderGoodsList = Core.Container.Instance.Resolve <IServiceContractOrderDetail>().GetAllByKeys(qryList);
            //获取订单信息并更新订单合同信息
            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntityByFields(qryList);

            orderInfo.ContractInfo = contractInfo;
            Core.Container.Instance.Resolve <IServiceContractOrderInfo>().Update(orderInfo);
            //更新订单材料单价信息
            foreach (ContractOrderDetail goodsInfo in orderGoodsList)
            {
                //根据价格套系编号和商品ID获取合同商品价格信息
                qryList = new List <ICriterion>();
                //qryList.Add(Expression.Eq("SetID", priceSetInfo.ID));
                qryList.Add(Expression.Eq("EquipmentID", goodsInfo.GoodsID));
                PriceSetGoodsInfo priceSetGoodsInfo = Core.Container.Instance.Resolve <IServicePriceSetGoodsInfo>().GetEntityByFields(qryList);
                if (priceSetGoodsInfo != null)
                {
                    goodsInfo.GoodsUnitPrice = priceSetGoodsInfo.DailyRents;
                    //获取材料信息
                    EquipmentInfo equipmentInfo = Core.Container.Instance.Resolve <IServiceEquipmentInfo>().GetEntity(goodsInfo.GoodsID);
                    //判断物品费用是日租金还是现金买赔
                    //if (equipmentInfo.IsPayNow == 1)
                    //{
                    //    goodsInfo.GoodsUnitPrice = priceSetGoodsInfo.UnitPrice;
                    //}
                    Core.Container.Instance.Resolve <IServiceContractOrderDetail>().Update(goodsInfo);
                }
            }
            //绑定车辆价格套系
            BindCarInfo();
            ddlCar.SelectedValue = orderInfo.CarID.ToString();
            //更新费用信息
            new ContractOrderBase().CalcOrderCost(OrderNO);
            //更新显示发货信息
            BindOrderDetail();
        }
        /// <summary>
        /// 各类费用项费用计算
        /// </summary>
        /// <param name="costInfo">费用项信息</param>
        private void CalcCost(ContractOrderCostInfo costInfo)
        {
            //获取费用项信息
            RepairProjectInfo costProjectInfo = Core.Container.Instance.Resolve <IServiceRepairProjectInfo>().GetEntity(costInfo.CostID);
            //获取订单信息
            IList <ICriterion> qryList = new List <ICriterion>();

            qryList = new List <ICriterion>();
            qryList.Add(Expression.Eq("OrderNO", costInfo.OrderNO));
            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntityByFields(qryList);

            //获取费用项单价
            costInfo.PayPrice = GetCostPayPrice(costProjectInfo, orderInfo);
            //获取费用项计价数量
            costInfo.OrderNumber = GetCostPayNumber(costProjectInfo, orderInfo);
            //计算费用金额,更新费用项信息
            costInfo.CostAmount = costInfo.PayPrice * costInfo.OrderNumber;
            Core.Container.Instance.Resolve <IServiceContractOrderCostInfo>().Update(costInfo);
        }
Exemple #18
0
        /// <summary>
        /// 批量删除订单
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnDeleteSelected_Click(object sender, EventArgs e)
        {
            List <int> ids = GetSelectedDataKeyIDs(Grid1);

            foreach (int id in ids)
            {
                //获取当前选中记录信息
                ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntity(id);
                if (orderInfo != null)
                {
                    if (orderInfo.IsTemp == 1)
                    {
                        //删除订单信息及附属信息
                        DeleteOrderByID(id, orderInfo.OrderNO);
                    }
                }
            }
            //加载收货单信息
            BindGrid();
        }
        /// <summary>
        /// 根据费用项费用价格获取类型获取价格
        /// </summary>
        /// <param name="costProjectInfo">费用项信息</param>
        /// <param name="orderInfo">订单信息</param>
        /// <returns>价格</returns>
        private decimal GetCostPayPrice(RepairProjectInfo costProjectInfo, ContractOrderInfo orderInfo)
        {
            decimal            payPrice = costProjectInfo.PayPrice;
            IList <ICriterion> qryList  = new List <ICriterion>();

            //获取费用项适用范围
            string[] ids = costProjectInfo.UsingGoods.Split(',');
            //如果费用单价是从合同获取,根据合同获取单价【费用价格获取类型  0:自定义  1:合同客户运费  2:合同司机运费  3:合同单价  4:合同维修单价】
            if (costProjectInfo.PriceSourceType > 0)
            {
                switch (costProjectInfo.PriceSourceType)
                {
                //合同客户运费(获取合同设定运费)
                case 1:
                    //payPrice = orderInfo.ContractInfo.CarCostPrice;
                    break;

                //合同司机运费(获取订单选择的车辆在合同中设定运费)
                case 2:
                    //获取合同车辆信息
                    qryList = new List <ICriterion>();
                    qryList.Add(Expression.Eq("CarID", orderInfo.CarID));
                    qryList.Add(Expression.Eq("ContractID", orderInfo.ContractInfo.ID));
                    ContractCarPriceSetInfo carPriceSetInfo = Core.Container.Instance.Resolve <IServiceContractCarPriceSetInfo>().GetEntityByFields(qryList);
                    payPrice = carPriceSetInfo.TonPayPrice;
                    break;

                //合同单价(获取租赁物品在合同中设定的单价)
                case 3:
                    if (ids.Length > 0)
                    {
                        qryList = new List <ICriterion>();
                        // qryList.Add(Expression.Eq("SetID", orderInfo.ContractInfo.PriceSetID));
                        qryList.Add(Expression.Eq("GoodsTypeID", ids[0]));
                        Order[] orderList = new Order[1];
                        Order   orderli   = new Order("ID", true);
                        orderList[0] = orderli;
                        //获取价格套系中物品设定信息
                        PriceSetGoodsInfo goodsInfo = Core.Container.Instance.Resolve <IServicePriceSetGoodsInfo>().GetFirstEntityByFields(qryList, orderList);
                        //获取物品单价
                        payPrice = goodsInfo.UnitPrice;
                    }
                    break;

                //合同维修单价(获取租赁物品在合同中设定的维修价)
                case 4:
                    if (ids.Length > 0)
                    {
                        qryList = new List <ICriterion>();
                        //qryList.Add(Expression.Eq("SetID", orderInfo.ContractInfo.PriceSetID));
                        qryList.Add(Expression.Eq("GoodsTypeID", int.Parse(ids[0])));
                        Order[] orderList = new Order[1];
                        Order   orderli   = new Order("ID", true);
                        orderList[0] = orderli;
                        //获取价格套系中物品设定信息
                        PriceSetGoodsInfo goodsInfo = Core.Container.Instance.Resolve <IServicePriceSetGoodsInfo>().GetFirstEntityByFields(qryList, orderList);
                        //获取物品维修单价
                        payPrice = goodsInfo.FixPrice;
                    }
                    break;

                default:
                    break;
                }
            }
            return(payPrice);
        }
        /// <summary>
        /// 根据费用项计费单位类型获取费用项计价数量
        /// </summary>
        /// <param name="costProjectInfo">费用项信息</param>
        /// <param name="orderInfo">订单信息</param>
        /// <returns>价格</returns>
        private decimal GetCostPayNumber(RepairProjectInfo costProjectInfo, ContractOrderInfo orderInfo)
        {
            decimal            payNumber = 0M;
            IList <ICriterion> qryList   = new List <ICriterion>();
            string             sql       = string.Empty;
            string             orderNO   = orderInfo.OrderNO;

            //1:数量 2:计价单位 3:客户吨位 4:员工吨位 5:司机吨位 6:其他
            switch (costProjectInfo.PayUnit)
            {
            //发货出库数量,发货明细表:GoodsNumber
            case "1":
                //获取运送获取重量信息
                if (!string.IsNullOrEmpty(costProjectInfo.UsingGoods))
                {
                    sql = string.Format(@"select isnull(sum(GoodsNumber),0) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and GoodTypeID in ({1}) ", orderNO, costProjectInfo.UsingGoods.TrimEnd(','));
                    DataSet ds = DbHelperSQL.Query(sql);
                    if (ds.Tables[0] != null)
                    {
                        payNumber = decimal.Parse(ds.Tables[0].Rows[0]["GoodsNumber"].ToString());
                    }
                }
                break;

            //发货计价单位,例如米,发货明细表:GoodCalcPriceNumber
            case "2":
                //获取运送获取重量信息
                if (!string.IsNullOrEmpty(costProjectInfo.UsingGoods))
                {
                    sql = string.Format(@"select isnull(sum(GoodCalcPriceNumber),0) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and GoodTypeID in ({1}) ", orderNO, costProjectInfo.UsingGoods.TrimEnd(','));
                    DataSet ds = DbHelperSQL.Query(sql);
                    if (ds.Tables[0] != null)
                    {
                        payNumber = decimal.Parse(ds.Tables[0].Rows[0]["GoodsNumber"].ToString());
                    }
                }
                break;

            //客户吨位,发货明细表:GoodsCustomerWeight
            case "3":
                //获取运送获取重量信息
                if (!string.IsNullOrEmpty(costProjectInfo.UsingGoods))
                {
                    sql = string.Format(@"select isnull(sum(GoodsCustomerWeight),0) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and GoodTypeID in ({1}) ", orderNO, costProjectInfo.UsingGoods.TrimEnd(','));
                    DataSet ds = DbHelperSQL.Query(sql);
                    if (ds.Tables[0] != null)
                    {
                        payNumber = decimal.Parse(ds.Tables[0].Rows[0]["GoodsNumber"].ToString());
                    }
                }
                break;

            //员工吨位,发货明细表:GoodsStaffWeight
            case "4":
                //获取运送获取重量信息
                if (!string.IsNullOrEmpty(costProjectInfo.UsingGoods))
                {
                    sql = string.Format(@"select isnull(sum(GoodsStaffWeight),0) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and GoodTypeID in ({1}) ", orderNO, costProjectInfo.UsingGoods.TrimEnd(','));
                    DataSet ds = DbHelperSQL.Query(sql);
                    if (ds.Tables[0] != null)
                    {
                        payNumber = decimal.Parse(ds.Tables[0].Rows[0]["GoodsNumber"].ToString());
                    }
                }
                break;

            //司机吨位,发货明细表:GoodsDriverWeight
            case "5":
                //获取运送获取重量信息
                if (!string.IsNullOrEmpty(costProjectInfo.UsingGoods))
                {
                    sql = string.Format(@"select isnull(sum(GoodsDriverWeight),0) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and GoodTypeID in ({1}) ", orderNO, costProjectInfo.UsingGoods.TrimEnd(','));
                    DataSet ds = DbHelperSQL.Query(sql);
                    if (ds.Tables[0] != null)
                    {
                        payNumber = decimal.Parse(ds.Tables[0].Rows[0]["GoodsNumber"].ToString());
                    }
                }
                break;

            //其他,默认1
            case "6":
                payNumber = 1;
                break;

            default:
                payNumber = 1;
                break;
            }

            return(payNumber);
        }
        /// <summary>
        /// 各类费用计算
        /// </summary>
        /// <param name="costInfo">费用项信息</param>
        private void CalcCost(ContractOrderCostInfo costInfo)
        {
            //获取费用项信息
            RepairProjectInfo costProjectInfo = Core.Container.Instance.Resolve <IServiceRepairProjectInfo>().GetEntity(costInfo.CostID);

            //获取费用项适用范围
            string[] ids = costProjectInfo.UsingGoods.Split(',');
            //获取订单信息
            IList <ICriterion> qryList = new List <ICriterion>();

            qryList = new List <ICriterion>();
            qryList.Add(Expression.Eq("OrderNO", OrderNO));
            ContractOrderInfo orderInfo = Core.Container.Instance.Resolve <IServiceContractOrderInfo>().GetEntityByFields(qryList);

            #region 获取费用项单价

            costInfo.PayPrice = costProjectInfo.PayPrice;
            //如果费用单价是从合同获取,根据合同获取单价【费用价格获取类型  0:自定义  1:合同客户运费  2:合同司机运费  3:合同单价  4:合同维修单价】
            if (costProjectInfo.PriceSourceType > 0)
            {
                switch (costProjectInfo.PriceSourceType)
                {
                //合同客户运费(获取合同设定运费)
                case 1:
                    //costInfo.PayPrice = orderInfo.ContractInfo.CarCostPrice;
                    break;

                //合同司机运费(获取订单选择的车辆在合同中设定运费)
                case 2:
                    //获取合同车辆信息
                    qryList = new List <ICriterion>();
                    qryList.Add(Expression.Eq("CarID", orderInfo.CarID));
                    ContractCarPriceSetInfo carPriceSetInfo = Core.Container.Instance.Resolve <IServiceContractCarPriceSetInfo>().GetEntityByFields(qryList);
                    costInfo.PayPrice = carPriceSetInfo.TonPayPrice;
                    break;

                //合同单价(获取租赁物品在合同中设定的单价)
                case 3:
                    if (ids.Length > 0)
                    {
                        qryList = new List <ICriterion>();
                        //qryList.Add(Expression.Eq("SetID", orderInfo.ContractInfo.PriceSetID));
                        qryList.Add(Expression.Eq("GoodsTypeID", ids[0]));
                        Order[] orderList = new Order[1];
                        Order   orderli   = new Order("ID", true);
                        orderList[0] = orderli;
                        //获取价格套系中物品设定信息
                        PriceSetGoodsInfo goodsInfo = Core.Container.Instance.Resolve <IServicePriceSetGoodsInfo>().GetFirstEntityByFields(qryList, orderList);
                        //获取物品单价
                        costInfo.PayPrice = goodsInfo.UnitPrice;
                    }
                    break;

                //合同维修单价(获取租赁物品在合同中设定的维修价)
                case 4:
                    if (ids.Length > 0)
                    {
                        qryList = new List <ICriterion>();
                        //qryList.Add(Expression.Eq("SetID", orderInfo.ContractInfo.PriceSetID));
                        qryList.Add(Expression.Eq("GoodsTypeID", ids[0]));
                        Order[] orderList = new Order[1];
                        Order   orderli   = new Order("ID", true);
                        orderList[0] = orderli;
                        //获取价格套系中物品设定信息
                        PriceSetGoodsInfo goodsInfo = Core.Container.Instance.Resolve <IServicePriceSetGoodsInfo>().GetFirstEntityByFields(qryList, orderList);
                        //获取物品维修单价
                        costInfo.PayPrice = goodsInfo.FixPrice;
                    }
                    break;

                default:
                    break;
                }
            }

            #endregion 获取费用项单价

            #region 获取费用项计价数量

            string sql = string.Empty;
            //1:数量 2:计价单位 3:客户吨位 4:员工吨位 5:司机吨位 6:其他
            switch (costProjectInfo.PayUnit)
            {
            //收货出库数量,收货明细表:GoodsNumber
            case "1":
                //获取运送获取重量信息
                if (!string.IsNullOrEmpty(costProjectInfo.UsingGoods))
                {
                    sql = string.Format(@"select sum(GoodsNumber) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and GoodTypeID in ({1}) ", OrderNO, costProjectInfo.UsingGoods.TrimEnd(','));
                    DataSet ds = DbHelperSQL.Query(sql);
                    if (ds.Tables[0] != null)
                    {
                        costInfo.OrderNumber = decimal.Parse(ds.Tables[0].Rows[0]["GoodsNumber"].ToString());
                    }
                }
                break;

            //收货计价单位,例如米,收货明细表:GoodCalcPriceNumber
            case "2":
                //获取运送获取重量信息
                if (!string.IsNullOrEmpty(costProjectInfo.UsingGoods))
                {
                    sql = string.Format(@"select isnull(sum(GoodCalcPriceNumber),0) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and GoodTypeID in ({1}) ", OrderNO, costProjectInfo.UsingGoods.TrimEnd(','));
                    DataSet ds = DbHelperSQL.Query(sql);
                    if (ds.Tables[0] != null)
                    {
                        costInfo.OrderNumber = decimal.Parse(ds.Tables[0].Rows[0]["GoodsNumber"].ToString());
                    }
                }
                break;

            //客户吨位,收货明细表:GoodsCustomerWeight
            case "3":
                //获取运送获取重量信息
                if (!string.IsNullOrEmpty(costProjectInfo.UsingGoods))
                {
                    sql = string.Format(@"select isnull(sum(GoodsCustomerWeight),0) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and GoodTypeID in ({1}) ", OrderNO, costProjectInfo.UsingGoods.TrimEnd(','));
                    DataSet ds = DbHelperSQL.Query(sql);
                    if (ds.Tables[0] != null)
                    {
                        costInfo.OrderNumber = decimal.Parse(ds.Tables[0].Rows[0]["GoodsNumber"].ToString());
                    }
                }
                break;

            //员工吨位,收货明细表:GoodsStaffWeight
            case "4":
                //获取运送获取重量信息
                if (!string.IsNullOrEmpty(costProjectInfo.UsingGoods))
                {
                    sql = string.Format(@"select isnull(sum(GoodsStaffWeight),0) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and GoodTypeID in ({1}) ", OrderNO, costProjectInfo.UsingGoods.TrimEnd(','));
                    DataSet ds = DbHelperSQL.Query(sql);
                    if (ds.Tables[0] != null)
                    {
                        costInfo.OrderNumber = decimal.Parse(ds.Tables[0].Rows[0]["GoodsNumber"].ToString());
                    }
                }
                break;

            //司机吨位,收货明细表:GoodsDriverWeight
            case "5":
                //获取运送获取重量信息
                if (!string.IsNullOrEmpty(costProjectInfo.UsingGoods))
                {
                    sql = string.Format(@"select isnull(sum(GoodsDriverWeight),0) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and GoodTypeID in ({1}) ", OrderNO, costProjectInfo.UsingGoods.TrimEnd(','));
                    DataSet ds = DbHelperSQL.Query(sql);
                    if (ds.Tables[0] != null)
                    {
                        costInfo.OrderNumber = decimal.Parse(ds.Tables[0].Rows[0]["GoodsNumber"].ToString());
                    }
                }
                break;

            //其他,默认1
            case "6":
                costInfo.OrderNumber = 1;
                break;

            default:
                costInfo.OrderNumber = 1;
                break;
            }

            #endregion 获取费用项计价数量

            //更新费用项信息
            costInfo.CostAmount = costInfo.PayPrice * costInfo.OrderNumber;
            Core.Container.Instance.Resolve <IServiceContractOrderCostInfo>().Update(costInfo);
        }
        /// <summary>
        /// 订单材料入库处理
        /// </summary>
        /// <param name="whID">入库仓库ID</param>
        /// <param name="orderInfo">收货单信息</param>
        private void OrderStockInPress(int whID, ContractOrderInfo orderInfo)
        {
            //获取入库仓库信息
            WareHouse houseInfo = Core.Container.Instance.Resolve <IServiceWareHouse>().GetEntity(whID);
            // 生成入库单信息
            WHStorageOrder storageOrder = new WHStorageOrder();

            storageOrder.BOrderNO    = OrderNO;
            storageOrder.Operator    = User.Identity.Name;
            storageOrder.OrderAmount = 0;
            storageOrder.OrderNumber = 0;
            storageOrder.OrderDate   = DateTime.Now;
            storageOrder.OrderNO     = string.Format("RK{0}", DateTime.Now.ToString("yyyyMMddHHmmss"));
            storageOrder.OrderType   = 2;
            //storageOrder.SuplierID = orderInfo.ContractInfo.CustomerID;
            storageOrder.WareHouseID = houseInfo.ID;
            storageOrder.OutOrderNO  = "";
            storageOrder.Remark      = "收货入库";

            #region 收货单入库明细处理

            /*---- 主材出库明细处理 ----*/

            // 1、获取订单商品主材明细,生成入库商品明细信息(获取入库不需要经过维修分拣步骤的材料)
            IList <ICriterion> qryListDetail = new List <ICriterion>();
            qryListDetail.Add(Expression.Eq("OrderNO", OrderNO));
            qryListDetail.Add(Expression.Eq("WareHouseID", whID));
            qryListDetail.Add(Expression.Eq("IsStockByRepaired", 0));
            IList <ContractOrderDetail> list = Core.Container.Instance.Resolve <IServiceContractOrderDetail>().GetAllByKeys(qryListDetail);
            //写入出库商品明细
            foreach (ContractOrderDetail detail in list)
            {
                //出库单出库明细处理
                CreateStockInOrder(whID, detail.GoodsNumber, detail.GoodsID, detail.GoodsUnit, ref storageOrder);
            }

            /*---- 辅材出库明细处理 ----*/
            //获取订单商品辅材明细,生成出库商品明细信息
            string sql = string.Format(@"select GoodsID,GoodsUnit,sum(GoodsNumber) as GoodsNumber from ContractOrderSecondaryDetail where OrderNO ='{0}' and WareHouseID ={1} group by GoodsID,GoodsUnit "
                                       , OrderNO, whID);
            DataSet ds = DbHelperSQL.Query(sql);
            if (ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
            {
                //写入出库商品明细
                foreach (DataRow detail in ds.Tables[0].Rows)
                {
                    //出库单出库明细处理
                    CreateStockInOrder(whID, decimal.Parse(detail["GoodsNumber"].ToString())
                                       , int.Parse(detail["GoodsID"].ToString())
                                       , detail["GoodsUnit"].ToString()
                                       , ref storageOrder);
                }
            }

            // 2、获取订单商品主材明细,生成入库商品明细信息(获取入库需要经过维修分拣步骤的材料)
            string  sqlGoods = string.Format(@"select GoodTypeID, sum(GoodsNumber) as GoodsNumber from ContractOrderDetail where OrderNO ='{0}' and WareHouseID={1} and IsStockByRepaired=1 group by GoodTypeID ", OrderNO, whID);
            DataSet dsGoods  = DbHelperSQL.Query(sqlGoods);
            //写入带分拣商品明细
            if (ds.Tables[0] != null)
            {
                foreach (DataRow detail in dsGoods.Tables[0].Rows)
                {
                    SortingGoodsDetail sortingGoods = new SortingGoodsDetail();
                    sortingGoods.GoodsNumber = decimal.Parse(detail["GoodsNumber"].ToString());
                    sortingGoods.GoodTypeID  = int.Parse(detail["GoodTypeID"].ToString());
                    sortingGoods.OrderDate   = DateTime.Now;
                    sortingGoods.OrderType   = 1;
                    sortingGoods.OrderNO     = OrderNO;
                    //写入分拣明细处理
                    Core.Container.Instance.Resolve <IServiceSortingGoodsDetail>().Create(sortingGoods);
                    //更新分拣总数
                    qryListDetail = new List <ICriterion>();
                    qryListDetail.Add(Expression.Eq("GoodTypeID", sortingGoods.GoodTypeID));
                    SortingGoodsInfo SGoodsInfo = Core.Container.Instance.Resolve <IServiceSortingGoodsInfo>().GetEntityByFields(qryListDetail);
                    if (SGoodsInfo != null)
                    {
                        SGoodsInfo.GoodsNumber += sortingGoods.GoodsNumber;
                        SGoodsInfo.UpdateDate   = sortingGoods.OrderDate;
                        Core.Container.Instance.Resolve <IServiceSortingGoodsInfo>().Update(SGoodsInfo);
                    }
                    else
                    {
                        SGoodsInfo               = new SortingGoodsInfo();
                        SGoodsInfo.GoodsNumber   = sortingGoods.GoodsNumber;
                        SGoodsInfo.UpdateDate    = sortingGoods.OrderDate;
                        SGoodsInfo.GoodTypeID    = sortingGoods.GoodTypeID;
                        SGoodsInfo.GoodsTypeName = "";
                        Core.Container.Instance.Resolve <IServiceSortingGoodsInfo>().Create(SGoodsInfo);
                    }
                }
            }

            #endregion 收货单入库明细处理

            //创建入库单信息
            Core.Container.Instance.Resolve <IServiceWHStorageOrder>().Create(storageOrder);
        }