Esempio n. 1
0
        /// <summary>
        /// 托盘移库
        /// </summary>
        /// <param name="strPalletNo">托盘号</param>
        /// <param name="strNextWareNo">目的库区</param>
        /// <param name="strNextWareLocatorNo">目的库位</param>
        /// <returns></returns>
        public bool MovePallet(string strPalletNo, string strNextWareNo, string strNextWareLocatorNo)
        {
            bool ret = false;
            SqlTransaction trans = null;
            SCommBB commBB = new SCommBB(this.connection);
            LWareBB wareBB = new LWareBB();
            LWareLocatorBB wareLocatorBB = new LWareLocatorBB();
            BArrangeBillBoxBB arrangeBillBoxBB = new BArrangeBillBoxBB(this.connection);
            LMaterialBB materialBB = new LMaterialBB();
            CDEPickOutBoxBB DEPickOutBoxBB = new CDEPickOutBoxBB(this.connection);
            UStockOutInDetailBB stockOutInDetailBB = new UStockOutInDetailBB(this.connection);

            try
            {
                if (this.transaction == null)
                {
                    trans = this.connection.BeginTransaction("TranSave");
                    this.stockBB.Transaction = trans;
                    commBB.Transaction = trans;
                    arrangeBillBoxBB.Transaction = trans;
                    DEPickOutBoxBB.Transaction = trans;
                    stockOutInDetailBB.Transaction = trans;
                }
                else
                {
                    this.stockBB.Transaction = this.transaction;
                    commBB.Transaction = this.transaction;
                    arrangeBillBoxBB.Transaction = this.transaction;
                    DEPickOutBoxBB.Transaction = this.transaction;
                    stockOutInDetailBB.Transaction = this.transaction;
                }

                DataTable dtArrangeBillBox = new DataTable();
                DataTable dtPreWare = new DataTable();
                DataTable dtNextWare = new DataTable();
                DataTable dtMaterial = new DataTable();
                DataTable dtStock = new DataTable();
                UStockOutInDetailData stockOutInDetailModel = new UStockOutInDetailData();
                int stockNum = 0;
                string strSql = "";
                object obj = null;

                //获取物料箱信息
                if (string.IsNullOrEmpty(strPalletNo))
                {
                    return false;
                }
                dtArrangeBillBox = arrangeBillBoxBB.GetVList("palletNo='" + strPalletNo
                    + "' and isnull(wareNo,'')<>''").Tables[0];

                if (dtArrangeBillBox.Rows.Count == 0)
                {
                    return false;
                }

                //获取当前托盘上的库存明细
                obj = commBB.ExecuteScalar("select count(1) from dbo.UStock where palletNo='" + strPalletNo + "' and num>0");
                if (obj != null)
                {
                    stockNum = Convert.ToInt32(obj);
                }

                //获取源库区信息
                dtPreWare = wareBB.GetList("wareNo='" + dtArrangeBillBox.Rows[0]["wareNo"].ToString() + "'").Tables[0];

                //获取目的库区信息
                dtNextWare = wareBB.GetList("wareNo='" + strNextWareNo + "'").Tables[0];

                #region 移库处理

                #region 源库区、库位处理

                //释放源正式库位
                commBB.ExecuteSql("update dbo.LWareLocator set isUsing=0 where wareLocatorNo='"
                    + dtArrangeBillBox.Rows[0]["wareLocatorNo"].ToString() + "'");

                //增加出入库明细-原托盘出库
                foreach (DataRow row in dtArrangeBillBox.Rows)
                {
                    dtStock = stockBB.GetList("boxNo='" + row["boxNo"].ToString() + "'").Tables[0];
                    if (dtStock.Rows.Count > 0)
                    {
                        dtMaterial = materialBB.GetList("materialNo='" + row["materialNo"].ToString() + "'").Tables[0];

                        //保存出入库明细数据
                        stockOutInDetailModel = new UStockOutInDetailData();

                        stockOutInDetailModel.billNo = "";//单据编号
                        stockOutInDetailModel.outInType = "07";//移库
                        stockOutInDetailModel.isOut = true;//是否出库
                        stockOutInDetailModel.stockDt = System.DateTime.Today.ToString();//库存日期
                        stockOutInDetailModel.dt = System.DateTime.Today.ToString();//操作日期
                        stockOutInDetailModel.wareNo = row["wareNo"].ToString();//仓库
                        stockOutInDetailModel.wareLocatorNo = row["wareLocatorNo"].ToString();//库位
                        stockOutInDetailModel.salverNo = strPalletNo;//托盘号
                        stockOutInDetailModel.boxNo = row["boxNo"].ToString();//箱号
                        stockOutInDetailModel.materialNo = row["materialNo"].ToString();//物料编号
                        stockOutInDetailModel.factMonomerNum = Convert.ToDouble(dtMaterial.Rows[0]["U_UintQty"]);//单体数量
                        stockOutInDetailModel.factPackNum = Convert.ToDouble(dtMaterial.Rows[0]["U_BoxQty"]);//整箱数量
                        stockOutInDetailModel.num = Convert.ToDouble(row["leavingNum"])
                            + Convert.ToDouble(row["DEPickOutNum"]);//数量
                        stockOutInDetailModel.nextBoxNo = "";//拆箱目的箱号
                        stockOutInDetailModel.isrtEmpId = this.empId;
                        stockOutInDetailModel.isrtDt = System.DateTime.Now.ToString();

                        stockOutInDetailBB.AddRecord(stockOutInDetailModel);
                    }
                }

                //删除库存明细
                commBB.ExecuteSql("delete from dbo.UStock where palletNo='" + strPalletNo + "'");

                #endregion 源库区、库位处理

                #region 更改箱子库位

                //修改拆托拣货箱信息
                strSql = @"update dbo.CDEPickOutBox set isOutStock=1,updtDt=getDate(),updtEmpId="
                    + this.EmpID.ToString() + " where palletNo='" + strPalletNo + "' and isOutStock=0";

                commBB.ExecuteSql(strSql);

                //更改排托箱库位信息
                if (strNextWareNo != "")//移到其他库位
                {
                    commBB.ExecuteSql("update dbo.BArrangeBillBox set preWareNo=wareNo,wareNo='" + strNextWareNo
                        + "',preWareLocatorNo=wareLocatorNo,wareLocatorNo='" + strNextWareLocatorNo
                        + "' where palletNo='" + strPalletNo + "' and isnull(wareNo,'')<>''");
                }
                else//移出库
                {
                    commBB.ExecuteSql("update dbo.BArrangeBillBox set oldPalletNo=palletNo,palletNo='',preWareNo=wareNo,wareNo='',preWareLocatorNo=wareLocatorNo,wareLocatorNo='',"
                        + "outStockDt=getDate(),outStockEmpId=" + this.EmpID.ToString()
                        + " where palletNo='" + strPalletNo + "' and isnull(wareNo,'')<>''");
                }

                #endregion 更改箱子库位

                #region 目的库区、库位处理

                if (strNextWareLocatorNo != "")
                {
                    //占用目的库位
                    commBB.ExecuteSql("update dbo.LWareLocator set isUsing=1 where wareLocatorNo='"
                        + strNextWareLocatorNo + "'");

                    //目的库位为正式库区、源库位为正式库区或有库存明细
                    if ((dtNextWare.Rows.Count > 0
                        && dtNextWare.Rows[0]["wareType"].ToString() == "03")
                        || dtPreWare.Rows[0]["wareType"].ToString() == "03" || stockNum > 0)
                    {
                        #region 移到正式库

                        UStockData stockModel = new UStockData();

                        //排托箱信息入正式库
                        for (int i = 0; i < dtArrangeBillBox.Rows.Count; i++)
                        {
                            dtMaterial = materialBB.GetList("materialNo='" + dtArrangeBillBox.Rows[i]["materialNo"].ToString() + "'").Tables[0];

                            //保存库存明细数据
                            stockModel = new UStockData();

                            stockModel.wareNo = strNextWareNo;//仓库
                            stockModel.wareLocatorNo = strNextWareLocatorNo;//库位
                            stockModel.stockDt = System.DateTime.Today.ToString();//库存日期
                            stockModel.palletNo = strPalletNo;//托盘号
                            stockModel.materialNo = dtArrangeBillBox.Rows[i]["materialNo"].ToString();//物料编号
                            stockModel.boxNo = dtArrangeBillBox.Rows[i]["boxNo"].ToString();//箱号
                            stockModel.factMonomerNum = Convert.ToDouble(dtArrangeBillBox.Rows[i]["U_UintQty"]);//单体数量
                            stockModel.factPackNum = Convert.ToDouble(dtArrangeBillBox.Rows[i]["U_BoxQty"]);//整箱数量
                            stockModel.num = Convert.ToDouble(dtArrangeBillBox.Rows[i]["leavingNum"])
                                + Convert.ToDouble(dtArrangeBillBox.Rows[0]["DEPickOutNum"]);//数量
                            stockModel.isOutStocking = false;//是否正在出库
                            stockModel.stockMark = "移库";
                            stockModel.isrtEmpId = this.empId;
                            stockModel.isrtDt = System.DateTime.Now.ToString();

                            stockBB.AddRecord(stockModel);

                            //保存出入库明细数据
                            stockOutInDetailModel = new UStockOutInDetailData();

                            stockOutInDetailModel.billNo = "";//单据编号
                            stockOutInDetailModel.outInType = "06";//移库
                            stockOutInDetailModel.isOut = false;//是否出库
                            stockOutInDetailModel.stockDt = System.DateTime.Today.ToString();//库存日期
                            stockOutInDetailModel.dt = System.DateTime.Today.ToString();//操作日期
                            stockOutInDetailModel.wareNo = strNextWareNo;//仓库
                            stockOutInDetailModel.wareLocatorNo = strNextWareLocatorNo;//库位
                            stockOutInDetailModel.salverNo = strPalletNo;//托盘号
                            stockOutInDetailModel.boxNo = dtArrangeBillBox.Rows[i]["boxNo"].ToString();//箱号
                            stockOutInDetailModel.materialNo = dtArrangeBillBox.Rows[i]["materialNo"].ToString();//物料编号
                            stockOutInDetailModel.factMonomerNum = Convert.ToDouble(dtMaterial.Rows[0]["U_UintQty"]);//单体数量
                            stockOutInDetailModel.factPackNum = Convert.ToDouble(dtMaterial.Rows[0]["U_BoxQty"]);//整箱数量
                            stockOutInDetailModel.num = Convert.ToDouble(dtArrangeBillBox.Rows[i]["leavingNum"])
                                + Convert.ToDouble(dtArrangeBillBox.Rows[i]["DEPickOutNum"]);//数量
                            stockOutInDetailModel.nextBoxNo = "";//拆箱目的箱号
                            stockOutInDetailModel.isrtEmpId = this.empId;
                            stockOutInDetailModel.isrtDt = System.DateTime.Now.ToString();

                            stockOutInDetailBB.AddRecord(stockOutInDetailModel);

                            //更改排托箱入库信息
                            commBB.ExecuteSql("update dbo.BArrangeBillBox set inStockDt=getDate(),inStockEmpId="
                                + this.EmpID.ToString() + ",inStockNum='" + stockOutInDetailModel.num.ToString()
                                + "',isOutStocking=0 where boxNo='" + stockOutInDetailModel.boxNo + "' and isnull(wareNo,'')<>'' and inStockDt is null");
                        }

                        #endregion 移到正式库
                    }
                }

                #endregion 目的库区、库位处理

                //库存明细数量为0,删除信息
                strSql = "delete from dbo.UStock where num=0";
                commBB.ExecuteSql(strSql);

                #endregion 移库处理

                if (this.transaction == null) trans.Commit();
                ret = true;
            }
            catch
            {
                if (transaction == null) trans.Rollback("TranSave");
                throw new Exception("保存信息失败!");
            }
            finally
            {
                commBB.Dispose();
                wareBB.Dispose();
                wareLocatorBB.Dispose();
                arrangeBillBoxBB.Dispose();
                DEPickOutBoxBB.Dispose();
                materialBB.Dispose();
                stockOutInDetailBB.Dispose();
            }

            return ret;
        }
        //*****************************************************************************
        //do it later      do it later      do it later
        //*****************************************************************************
        /// <summary>
        /// 保存扫描箱体信息
        /// </summary>
        /// <param name="strArriveBillNo">到货单号</param>
        /// <param name="strFinanceBillNo">采购订单号</param>
        /// <param name="strPalletIndex">托盘序号</param>
        /// <param name="strRegion">托内区域</param>
        /// <param name="strBoxNo">箱号</param>
        /// <param name="strMaterialNo">物料号</param>
        /// <returns></returns>
        public bool SaveRecord(string strArriveBillNo, string strFinanceBillNo, string strPalletIndex, 
            string strRegion, string strBoxNo, string strMaterialNo)
        {
            bool ret = false;
            SqlTransaction trans = null;
            LWareLocatorBB wareLocatorBB = new LWareLocatorBB();
            BArrangeBillFactBB arrangeBillFactBB = new BArrangeBillFactBB();
            BArrangeBillBoxBB arrangeBillBoxBB = new BArrangeBillBoxBB(this.connection);
            SCommBB commBB = new SCommBB(this.connection);

            try
            {
                if (this.transaction == null)
                {
                    trans = this.connection.BeginTransaction("TransSave");
                    this.arrangeBillFactDetailBB.Transaction = trans;
                    arrangeBillBoxBB.Transaction = trans;
                    commBB.Transaction = trans;
                }
                else
                {
                    this.arrangeBillFactDetailBB.Transaction = this.transaction;
                    arrangeBillBoxBB.Transaction = this.transaction;
                    commBB.Transaction = this.transaction;
                }

                BArrangeBillFactDetailData arrangeBillFactDetailModel = new BArrangeBillFactDetailData();
                BArrangeBillBoxData arrangeBillBoxModel = new BArrangeBillBoxData();
                DataSet ds = new DataSet();
                DataTable dtWareLocator = new DataTable();
                string mainId = "0", strPalletNo = "";
                StringBuilder strSql = new StringBuilder();

                //获取排托实际信息
                ds = arrangeBillFactBB.GetList("arriveBillNo='" + strArriveBillNo + "' and financeBillNo='"
                    + strFinanceBillNo + "' and palletIndex='" + strPalletIndex + "'");
                if (ds.Tables[0].Rows.Count > 0)
                {
                    mainId = ds.Tables[0].Rows[0]["id"].ToString();
                    strPalletNo = ds.Tables[0].Rows[0]["palletNo"].ToString();
                }

                //获取排托区下线库位信息
                strSql.Append(@"select wareLocator.wareNo,wareLocator.downWareLocatorNo as wareLocatorNo ");
                strSql.Append(@"from dbo.BArrangeBillBox as arriveBox ");
                strSql.Append(@"left join dbo.LWareLocator as wareLocator on wareLocator.wareLocatorNo=arriveBox.wareLocatorNo ");
                strSql.Append(@"where arriveBox.boxNo='" + strBoxNo + "'");

                dtWareLocator = commBB.Query(strSql.ToString()).Tables[0];

                //保存排托收货单明细信息
                arrangeBillFactDetailModel.mainId = mainId;//排托收货单ID
                arrangeBillFactDetailModel.boxNo = strBoxNo;//箱号
                arrangeBillFactDetailModel.region = strRegion;//区域
                arrangeBillFactDetailModel.isrtEmpId = this.empId;
                arrangeBillFactDetailModel.isrtDt = System.DateTime.Now.ToString();

                arrangeBillFactDetailBB.AddRecord(arrangeBillFactDetailModel);

                //更改扫描箱信息
                commBB.ExecuteSql("update dbo.BArrangeBillBox set arrangeBillNo='" + "PT" + strArriveBillNo
                    + "',preWareNo=wareNo,preWareLocatorNo=wareLocatorNo,oldPalletNo=palletNo,oldRegion=region,palletNo='" + strPalletNo
                    + "',region='" + strRegion + "',wareNo='" + dtWareLocator.Rows[0]["wareNo"].ToString()
                    + "',wareLocatorNo='" + dtWareLocator.Rows[0]["wareLocatorNo"].ToString()
                    + "',isrtEmpId='" + this.empId.ToString()
                    + "',isrtDt='" + System.DateTime.Now.ToString()
                    + "',isBoxArrange=1 where boxNo='" + strBoxNo + "'");

                if (this.transaction == null) trans.Commit();
                ret = true;
            }
            catch (Exception ex)
            {
                if (this.transaction == null) trans.Rollback("TransSave");
                throw ex;
            }
            finally
            {
                wareLocatorBB.Dispose();
                arrangeBillFactBB.Dispose();
                arrangeBillBoxBB.Dispose();
                commBB.Dispose();
            }

            return ret;
        }
Esempio n. 3
0
        /// <summary>
        /// 执行叉车任务
        /// </summary>
        /// <returns></returns>
        public bool ExecuteEffectForkliftTask(int taskId)
        {
            bool ret = false;
            SqlTransaction trans = null;
            SCommBB commBB = new SCommBB(this.connection);
            BTallyBillBB tallyBillBB = new BTallyBillBB(this.connection);
            UStockBB stockBB = new UStockBB(this.connection);
            UStockOutInDetailBB stockOutInDetailBB = new UStockOutInDetailBB(this.connection);
            BArrangeBillBoxBB arrangeBillBoxBB = new BArrangeBillBoxBB(this.connection);
            BTallyBillDetailBB tallyBillDetailBB = new BTallyBillDetailBB();
            LMaterialBB materialBB = new LMaterialBB();
            LWareLocatorBB wareLocatorBB = new LWareLocatorBB();
            LWareBB wareBB = new LWareBB();
            CPickOutPlanBB pickOutPlanBB = new CPickOutPlanBB();
            CDEPickOutBoxBB DEPickOutBoxBB = new CDEPickOutBoxBB(this.connection);

            try
            {
                if (this.transaction == null)
                {
                    trans = this.connection.BeginTransaction("TransSave");
                    this.forkliftTaskBB.Transaction = trans;
                    commBB.Transaction = trans;
                    tallyBillBB.Transaction = trans;
                    stockBB.Transaction = trans;
                    stockOutInDetailBB.Transaction = trans;
                    arrangeBillBoxBB.Transaction = trans;
                    DEPickOutBoxBB.Transaction = trans;

                }
                else
                {
                    this.forkliftTaskBB.Transaction = this.transaction;
                    commBB.Transaction = this.transaction;
                    tallyBillBB.Transaction = this.transaction;
                    stockBB.Transaction = this.transaction;
                    stockOutInDetailBB.Transaction = this.transaction;
                    arrangeBillBoxBB.Transaction = this.transaction;
                    DEPickOutBoxBB.Transaction = this.transaction;
                }

                BForkliftTaskData forkliftTaskModel = new BForkliftTaskData();
                UStockData stockModel = new UStockData();
                UStockOutInDetailData stockOutInDetailModel = new UStockOutInDetailData();
                DataTable dtPreWare = new DataTable();
                DataTable dtNextWare = new DataTable();
                DataTable dtBox = new DataTable();
                DataTable dtMaterial = new DataTable();
                DataTable dtPallet = new DataTable();

                string strSql = "";

                #region 修改叉车任务的处理信息

                //修改叉车任务的处理信息
                forkliftTaskModel = forkliftTaskBB.GetModel(taskId);

                forkliftTaskModel.isDeal = true;
                forkliftTaskModel.dealEmpId = this.empId;
                forkliftTaskModel.dealDt = System.DateTime.Now.ToString();

                //if (forkliftTaskModel.taskType == "01")
                //{

                //}
                //forkliftTaskBB.ModifyRecord(forkliftTaskModel);

                #endregion 修改叉车任务的处理信息

                //获取源库区信息
                dtPreWare = wareBB.GetList("wareNo='" + forkliftTaskModel.preWareNo + "'").Tables[0];

                //获取目的库区信息
                dtNextWare = wareBB.GetList("wareNo='" + forkliftTaskModel.nextWareNo + "'").Tables[0];

                //获取托盘上的所有物料箱
                dtPallet = arrangeBillBoxBB.GetList("palletNo='" + forkliftTaskModel.palletNo + "' and isnull(wareNo,'')<>''").Tables[0];

                //2015-01-30 添加 用于增加备货单号
                if (forkliftTaskModel.taskType == "01")
                {
                    if (dtPallet.Rows.Count > 0)
                    {
                        forkliftTaskModel.stockUpBillNo = dtPallet.Rows[0]["arriveBillNo"].ToString();
                    }
                }
                forkliftTaskBB.ModifyRecord(forkliftTaskModel);
                if (dtPallet.Rows.Count == 0)
                {
                    //如果托盘上没有箱,释放库位
                    commBB.ExecuteSql("update dbo.LWareLocator set isUsing=0 where wareLocatorNo='"
                        + forkliftTaskModel.nextLocatorNo + "'");
                }

                #region 更改箱子库位

                //更改流利货架拣货箱库位信息
                commBB.ExecuteSql("update dbo.CDEPickOutBox set isOutStock=1,updtDt=getDate(),updtEmpId="
                        + this.EmpID.ToString() + " where palletNo='" + forkliftTaskModel.palletNo + "' and isOutStock=0");

                //更改排托箱库位信息
                commBB.ExecuteSql("update dbo.BArrangeBillBox set preWareNo=wareNo,wareNo='" + forkliftTaskModel.nextWareNo
                    + "',preWareLocatorNo=wareLocatorNo,wareLocatorNo='" + forkliftTaskModel.nextLocatorNo
                    + "' where palletNo='" + forkliftTaskModel.palletNo + "' and isnull(wareNo,'')<>''");

                #endregion 更改箱子库位

                //释放源库位
                commBB.ExecuteSql("update dbo.LWareLocator set isUsing=0 where wareLocatorNo='"
                    + forkliftTaskModel.preLocatorNo + "'");

                if (forkliftTaskModel.taskType == "03" || forkliftTaskModel.taskType == "11")
                {
                    #region 从理货区到正式库区、从质检区到正式库区(非标准箱)

                    object obj = null;
                    int tallyBillId = 0;
                    BTallyBillData tallyBillModel = new BTallyBillData();

                    obj = commBB.ExecuteScalar("select top 1 id from dbo.BTallyBill where palletNo='"
                        + forkliftTaskModel.palletNo + "' and instantState='02' order by id desc");
                    if (obj != null)
                    {
                        #region 修改排托单信息

                        tallyBillId = Convert.ToInt32(obj);
                        tallyBillModel = tallyBillBB.GetModel(tallyBillId);

                        tallyBillModel.instantState = "03";//指定状态为“已入库”
                        tallyBillModel.isInStock = true;// 入库状态
                        tallyBillModel.wareNo = forkliftTaskModel.nextWareNo;//库区
                        tallyBillModel.wareLocatorNo = forkliftTaskModel.nextLocatorNo;//库位

                        tallyBillBB.ModifyRecord(tallyBillModel);

                        #endregion 修改排托单信息
                    }

                    #region 出入库和出入库明细数据操作

                    if (dtNextWare.Rows[0]["wareSortNo"].ToString() != "D"
                        && dtNextWare.Rows[0]["wareSortNo"].ToString() != "E")
                    {
                        dtBox = arrangeBillBoxBB.GetVList("palletNo='" + forkliftTaskModel.palletNo + "' and isnull(wareNo,'')<>''").Tables[0];

                        for (int i = 0; i < dtBox.Rows.Count; i++)
                        {
                            dtMaterial = materialBB.GetList("materialNo='" + dtBox.Rows[i]["materialNo"].ToString() + "'").Tables[0];

                            //保存库存明细数据
                            stockModel = new UStockData();

                            stockModel.wareNo = forkliftTaskModel.nextWareNo;//仓库
                            stockModel.wareLocatorNo = forkliftTaskModel.nextLocatorNo;//库位
                            stockModel.stockDt = System.DateTime.Today.ToString();//库存日期
                            stockModel.palletNo = forkliftTaskModel.palletNo;//托盘号
                            stockModel.materialNo = dtBox.Rows[i]["materialNo"].ToString();//物料编号
                            stockModel.boxNo = dtBox.Rows[i]["boxNo"].ToString();//箱号
                            stockModel.factMonomerNum = Convert.ToDouble(dtMaterial.Rows[0]["U_UintQty"]);//单体数量
                            stockModel.factPackNum = Convert.ToDouble(dtMaterial.Rows[0]["U_BoxQty"]);//整箱数量
                            stockModel.num = Convert.ToDouble(dtBox.Rows[i]["leavingNum"])
                                + Convert.ToDouble(dtBox.Rows[i]["DEPickOutNum"]);//数量
                            stockModel.isOutStocking = false;//是否正在出库
                            stockModel.stockMark = "从理到正式库2";
                            stockModel.isrtDt = System.DateTime.Now.ToString();//操作时间
                            stockModel.isrtEmpId = this.EmpID;//操作人

                            stockBB.AddRecord(stockModel);

                            //保存出入库明细数据
                            stockOutInDetailModel = new UStockOutInDetailData();

                            stockOutInDetailModel.billNo = dtBox.Rows[i]["arriveBillNo"].ToString();//单据编号
                            stockOutInDetailModel.outInType = "05";//理货入库
                            stockOutInDetailModel.isOut = false;//是否出库
                            stockOutInDetailModel.stockDt = System.DateTime.Today.ToString();//库存日期
                            stockOutInDetailModel.dt = System.DateTime.Today.ToString();//操作日期
                            stockOutInDetailModel.wareNo = forkliftTaskModel.nextWareNo;//仓库
                            stockOutInDetailModel.wareLocatorNo = forkliftTaskModel.nextLocatorNo;//库位
                            stockOutInDetailModel.salverNo = forkliftTaskModel.palletNo;//托盘号
                            stockOutInDetailModel.boxNo = dtBox.Rows[i]["boxNo"].ToString();//箱号
                            stockOutInDetailModel.materialNo = dtBox.Rows[i]["materialNo"].ToString();//物料编号
                            stockOutInDetailModel.factMonomerNum = Convert.ToDouble(dtMaterial.Rows[0]["U_UintQty"]);//单体数量
                            stockOutInDetailModel.factPackNum = Convert.ToDouble(dtMaterial.Rows[0]["U_BoxQty"]);//整箱数量
                            stockOutInDetailModel.num = Convert.ToDouble(dtBox.Rows[i]["leavingNum"])
                                + Convert.ToDouble(dtBox.Rows[i]["DEPickOutNum"]);//数量
                            stockOutInDetailModel.isrtEmpId = this.empId;
                            stockOutInDetailModel.isrtDt = System.DateTime.Now.ToString();

                            stockOutInDetailBB.AddRecord(stockOutInDetailModel);

                            //更改排托箱入库信息
                            commBB.ExecuteSql("update dbo.BArrangeBillBox set inStockDt=getDate(),inStockEmpId="
                                + this.EmpID.ToString() + ",inStockNum='" + stockOutInDetailModel.num.ToString()
                                + "' where boxNo='" + stockOutInDetailModel.boxNo
                                + "' and isnull(wareNo,'')<>'' and inStockDt is null");
                        }
                    }

                    //更改排托箱检测结果
                    commBB.ExecuteSql("update dbo.BArrangeBillBox set checkResult=1,checkResultDt=getDate(),checkResultEmpId="
                        + this.EmpID.ToString() + " where palletNo='" + forkliftTaskModel.palletNo
                        + "' and isnull(wareNo,'')<>'' and checkResult=0 and checkResultDt is null");

                    #endregion 出入库和出入库明细数据操作

                    #endregion 从理货区到正式库区、从质检区到正式库区
                }
                else if (forkliftTaskModel.taskType == "05")
                {
                    #region 05 从正式库区到拣货区

                    //更改排托箱库位信息-库位赋值原库位
                    //commBB.ExecuteSql("update dbo.BArrangeBillBox set wareNo=preWareNo,wareLocatorNo=preWareLocatorNo where palletNo='"
                    //    + forkliftTaskModel.palletNo + "' and isnull(wareNo,'')<>''");

                    //锁定原库位
                    //commBB.ExecuteSql("update dbo.LWareLocator set isUsing=1 where wareLocatorNo='"
                    //    + forkliftTaskModel.preLocatorNo + "'");

                    #endregion 05 从正式库区到拣货区
                }
                else if (forkliftTaskModel.taskType == "06")
                {
                    #region 从拣货区到正式库区

                    //库存处理放在包装线体上

                    ////获取托盘箱明细
                    //dtBox = arrangeBillBoxBB.GetVList("palletNo='" + forkliftTaskModel.palletNo
                    //    + "' and isnull(wareNo,'')<>''").Tables[0];

                    //if (dtNextWare.Rows[0]["wareSortNo"].ToString() != "D"
                    //        && dtNextWare.Rows[0]["wareSortNo"].ToString() != "E")
                    //{
                    //    for (int i = 0; i < dtBox.Rows.Count; i++)
                    //    {
                    //        //保存库存明细数据
                    //        stockModel = new UStockData();

                    //        stockModel.wareNo = forkliftTaskModel.nextWareNo;//仓库
                    //        stockModel.wareLocatorNo = forkliftTaskModel.nextLocatorNo;//库位
                    //        stockModel.stockDt = System.DateTime.Today.ToString();//库存日期
                    //        stockModel.palletNo = forkliftTaskModel.palletNo;//托盘号
                    //        stockModel.materialNo = dtBox.Rows[i]["materialNo"].ToString();//物料编号
                    //        stockModel.boxNo = dtBox.Rows[i]["boxNo"].ToString();//箱号
                    //        stockModel.factMonomerNum = Convert.ToDouble(dtMaterial.Rows[0]["U_UintQty"]);//单体数量
                    //        stockModel.factPackNum = Convert.ToDouble(dtMaterial.Rows[0]["U_BoxQty"]);//整箱数量
                    //        stockModel.num = Convert.ToDouble(dtBox.Rows[i]["leavingNum"])
                    //            + Convert.ToDouble(dtBox.Rows[i]["DEPickOutNum"]);//数量
                    //        //stockModel.isOutStocking = Convert.ToBoolean(dtBox.Rows[i]["isOutStocking"]);//是否正在出库
                    //        stockModel.isOutStocking = false;//是否正在出库
                    //        stockModel.stockMark = "从拣货返回正式库";
                    //        stockModel.isrtDt = System.DateTime.Now.ToString();//操作时间
                    //        stockModel.isrtEmpId = this.EmpID;//操作人

                    //        stockBB.AddRecord(stockModel);

                    //        //保存出入库明细数据
                    //        stockOutInDetailModel = new UStockOutInDetailData();

                    //        stockOutInDetailModel.billNo = "";//单据编号
                    //        stockOutInDetailModel.outInType = "09";//拣货返回正式库
                    //        stockOutInDetailModel.isOut = false;//是否出库
                    //        stockOutInDetailModel.stockDt = System.DateTime.Today.ToString();//库存日期
                    //        stockOutInDetailModel.dt = System.DateTime.Today.ToString();//操作日期
                    //        stockOutInDetailModel.wareNo = forkliftTaskModel.nextWareNo;//仓库
                    //        stockOutInDetailModel.wareLocatorNo = forkliftTaskModel.nextLocatorNo;//库位
                    //        stockOutInDetailModel.salverNo = forkliftTaskModel.palletNo;//托盘号
                    //        stockOutInDetailModel.boxNo = dtBox.Rows[i]["boxNo"].ToString();//箱号
                    //        stockOutInDetailModel.materialNo = dtBox.Rows[i]["materialNo"].ToString();//物料编号
                    //        stockOutInDetailModel.factMonomerNum = Convert.ToDouble(dtMaterial.Rows[0]["U_UintQty"]);//单体数量
                    //        stockOutInDetailModel.factPackNum = Convert.ToDouble(dtMaterial.Rows[0]["U_BoxQty"]);//整箱数量
                    //        stockOutInDetailModel.num = Convert.ToDouble(dtBox.Rows[i]["leavingNum"])
                    //            + Convert.ToDouble(dtBox.Rows[i]["DEPickOutNum"]);//数量

                    //        stockOutInDetailBB.AddRecord(stockOutInDetailModel);

                    //        //更改物料箱是否正在出库状态
                    //        commBB.ExecuteSql("update dbo.BArrangeBillBox set isOutStocking=0 where boxNo='"
                    //            + dtBox.Rows[i]["boxNo"].ToString() + "'");

                    //        //更改排托箱入库信息
                    //        commBB.ExecuteSql("update dbo.BArrangeBillBox set inStockDt=getDate(),inStockEmpId="
                    //            + this.EmpID.ToString() + ",inStockNum='" + stockOutInDetailModel.num.ToString()
                    //            + "' where boxNo='" + stockOutInDetailModel.boxNo
                    //            + "' and isnull(wareNo,'')<>'' and inStockDt is null");
                    //    }
                    //}

                    #endregion 从拣货区到正式库区
                }
                else if (forkliftTaskModel.taskType == "07")
                {
                    #region 从拣货区出库

                    //根据托盘号,更改备货单明细的状态(05 出库完成)
                    strSql = "update dbo.CStockUpDetail set instantState='05' where palletNo='" + forkliftTaskModel.palletNo + "'";
                    commBB.ExecuteSql(strSql);

                    //如果备货单明细的状态全部为“05 出库完成”,更改备货单状态为“10 出库完成”
                    strSql = @"update dbo.CStockUpBill set instantState='10'
                           where not exists(select 1 from dbo.CStockUpDetail as t where t.stockUpBillNo=dbo.CStockUpBill.stockUpBillNo and instantState<>'05')";
                    commBB.ExecuteSql(strSql);
                    //如果备货单明细的状态不全为“05 出库完成”,更改备货单状态为“09 出库中”
                    strSql = @"update dbo.CStockUpBill set instantState='09'
                           where exists(select 1 from dbo.CStockUpDetail as t where t.stockUpBillNo=dbo.CStockUpBill.stockUpBillNo and instantState<>'05')";
                    commBB.ExecuteSql(strSql);

                    #endregion 从拣货区出库
                }
                else if (forkliftTaskModel.taskType == "09")
                {
                    #region 从排托区返回收货区

                    //更改到货箱库位信息
                    commBB.ExecuteSql("update dbo.BArrangeBillBox set isPalletUsing=0 where palletNo='"
                        + forkliftTaskModel.palletNo + "' and isnull(wareNo,'')<>''");

                    #endregion 从排托区返回收货区
                }
                else if (forkliftTaskModel.taskType == "10")
                {
                    #region 从收货区到质检区(非标准箱)

                    //更改到货箱库位信息
                    //commBB.ExecuteSql("update dbo.BArrangeBillBox set isPalletUsing=0 where palletNo='" + forkliftTaskModel.palletNo + "' and isnull(wareNo)<>''");

                    #endregion 从收货区到质检区(非标准箱)
                }
                else if (forkliftTaskModel.taskType == "12")
                {
                    #region 移库处理

                    #region 源库区、库位处理

                    //释放源正式库位
                    commBB.ExecuteSql("update dbo.LWareLocator set isUsing=0 where wareLocatorNo='"
                        + forkliftTaskModel.preLocatorNo + "'");

                    //如果从正式库出,删除库存明细
                    if (dtPreWare.Rows[0]["wareType"].ToString() == "03")//正式库区
                    {
                        //删除库存明细(处理逻辑以后更改成正常的出入库明细)
                        commBB.ExecuteSql("delete from dbo.UStock where palletNo='" + forkliftTaskModel.palletNo + "'");

                        //增加出入库明细-出库
                    }

                    #endregion 源库区、库位处理

                    #region 目的库区、库位处理

                    //占用目的库位
                    commBB.ExecuteSql("update dbo.LWareLocator set isUsing=1 where wareLocatorNo='"
                        + forkliftTaskModel.nextLocatorNo + "'");

                    if (dtNextWare.Rows[0]["wareType"].ToString() == "03")//正式库区
                    {
                        //DataTable dtDEPickOutBox = new DataTable();

                        ////获取原托盘所在库位
                        //dtArrangeBillBox = arrangeBillBoxBB.GetList("palletNo='" + forkliftTaskModel.palletNo + "' and isnull(wareNo,'')<>''").Tables[0];

                        ////获取流利货架拣货箱信息
                        //dtDEPickOutBox = DEPickOutBoxBB.GetList("palletNo='" + forkliftTaskModel.palletNo + "' and isOutStock=0").Tables[0];

                        ////排托箱信息入正式库
                        //for (int i = 0; i < dtArrangeBillBox.Rows.Count; i++)
                        //{
                        //    dtMaterial = materialBB.GetList("materialNo='" + dtArrangeBillBox.Rows[i]["materialNo"].ToString() + "'").Tables[0];

                        //    //保存库存明细数据
                        //    stockModel = new UStockData();

                        //    stockModel.wareNo = forkliftTaskModel.nextWareNo;//仓库
                        //    stockModel.wareLocatorNo = forkliftTaskModel.nextLocatorNo;//库位
                        //    stockModel.stockDt = System.DateTime.Today.ToString();//库存日期
                        //    stockModel.palletNo = forkliftTaskModel.palletNo;//托盘号
                        //    stockModel.materialNo = dtArrangeBillBox.Rows[i]["materialNo"].ToString();//物料编号
                        //    stockModel.boxNo = dtArrangeBillBox.Rows[i]["boxNo"].ToString();//箱号
                        //    stockModel.factMonomerNum = Convert.ToDouble(dtMaterial.Rows[0]["U_UintQty"]);//单体数量
                        //    stockModel.factPackNum = Convert.ToDouble(dtMaterial.Rows[0]["U_BoxQty"]);//整箱数量
                        //    stockModel.num = Convert.ToDouble(dtArrangeBillBox.Rows[i]["leavingNum"]) + Convert.ToDouble(dtArrangeBillBox.Rows[i]["DEPickOutNum"]);//数量
                        //    stockModel.isOutStocking = false;//是否正在出库
                        //    stockModel.stockMark = "移库(正式箱)";

                        //    stockBB.AddRecord(stockModel);
                        //}

                        ////流利货架拣货箱信息入正式库
                        //for (int i = 0; i < dtDEPickOutBox.Rows.Count; i++)
                        //{
                        //    dtMaterial = materialBB.GetList("materialNo='" + dtDEPickOutBox.Rows[i]["materialNo"].ToString() + "'").Tables[0];

                        //    //保存库存明细数据
                        //    stockModel = new UStockData();

                        //    stockModel.wareNo = forkliftTaskModel.nextWareNo;//仓库
                        //    stockModel.wareLocatorNo = forkliftTaskModel.nextLocatorNo;//库位
                        //    stockModel.stockDt = System.DateTime.Today.ToString();//库存日期
                        //    stockModel.palletNo = forkliftTaskModel.palletNo;//托盘号
                        //    stockModel.materialNo = dtDEPickOutBox.Rows[i]["materialNo"].ToString();//物料编号
                        //    stockModel.boxNo = dtDEPickOutBox.Rows[i]["boxNo"].ToString();//箱号
                        //    stockModel.factMonomerNum = Convert.ToDouble(dtMaterial.Rows[0]["U_UintQty"]);//单体数量
                        //    stockModel.factPackNum = Convert.ToDouble(dtMaterial.Rows[0]["U_BoxQty"]);//整箱数量
                        //    stockModel.num = Convert.ToDouble(dtDEPickOutBox.Rows[i]["num"]);//数量
                        //    stockModel.isOutStocking = false;//是否正在出库
                        //    stockModel.stockMark = "移库(拣货箱)";

                        //    stockBB.AddRecord(stockModel);
                        //}
                    }

                    #endregion 目的库区、库位处理

                    #endregion 移库处理
                }
                else if (forkliftTaskModel.taskType == "20")
                {
                    //托盘出库
                    DataTable dt = new DataTable();
                    dt = arrangeBillBoxBB.GetListOnlyStockUpBillNO("palletNo ='" + forkliftTaskModel.palletNo + "' and ISNULL(stockUpBillNo,'')<>''").Tables[0];

                    commBB.ExecuteSql("update dbo.BArrangeBillBox set oldPalletNo=palletNo,palletNo='',preWareNo=wareNo,wareNo='',preWareLocatorNo=wareLocatorNo,wareLocatorNo='',"
                          + "outStockDt=getDate(),outStockEmpId=" + this.EmpID.ToString()
                          + " where palletNo='" + forkliftTaskModel.palletNo + "' and isnull(wareNo,'')<>''");
                    commBB.ExecuteSql("update dbo.LWareLocator set isUsing=0 where wareLocatorNo='"
               + forkliftTaskModel.preLocatorNo + "'");

                    for (int i = 0; i < dt.Rows.Count; i++)
                    {

                        strSql = @"update dbo.CStockUpDetail set instantState='05' where stockUpBillNo ='" + dt.Rows[i]["stockUpBillNo"].ToString() + "'";
                        commBB.ExecuteSql(strSql);
                        //如果备货单明细的状态全部为“05 出库完成”,更改备货单状态为“10 出库完成”,并且是关联到一个被货单的形式下
                        strSql = @"update dbo.CStockUpBill set instantState='10'
                           where stockUpBillNo = '" + dt.Rows[i]["stockUpBillNO"].ToString() + "'";
                        commBB.ExecuteSql(strSql);
                    }

                }
                else if (forkliftTaskModel.taskType == "30")//从质检区到异常区
                {
                    //首先作出库处理
                    //string command = @"Update BArrangeBillBox set oldPalletNo=palletNo,palletNo='',preWareNo=wareNo,wareNo='YCQ',preWareLocatorNo=wareLocatorNo,wareLocatorNo='N01.01',"
                    //      + "outStockDt=getDate(),outStockEmpId=" + this.EmpID.ToString()
                    //      + " where palletNo='" + forkliftTaskModel.palletNo + "' and isnull(wareNo,'')<>''";
                    //commBB.ExecuteSql(command);

                     DataSet ds = commBB.Query("select palletNo from BArrangeBillBox where wareLocatorNo = '" + forkliftTaskModel.preLocatorNo + "' group by palletNo");

                     if (ds.Tables[0].Rows.Count <= 1)
                     {
                         commBB.ExecuteSql("Update dbo.LWareLocator set isUsing=0 where wareLocatorNo='"  + forkliftTaskModel.preLocatorNo + "'");
                     }
                    commBB.ExecuteSql("Update dbo.LWareLocator set isUsing=0 where wareLocatorNo='" + forkliftTaskModel.nextLocatorNo + "'");//N01.01不占用

                }

                if (this.transaction == null) trans.Commit();
                ret = true;
            }
            catch (Exception ex)
            {
                if (this.transaction == null) trans.Rollback("TransSave");
                throw ex;
            }
            finally
            {
                commBB.Dispose();
                tallyBillBB.Dispose();
                stockBB.Dispose();
                stockOutInDetailBB.Dispose();
                tallyBillDetailBB.Dispose();
                arrangeBillBoxBB.Dispose();
                materialBB.Dispose();
                wareLocatorBB.Dispose();
                wareBB.Dispose();
                pickOutPlanBB.Dispose();
                DEPickOutBoxBB.Dispose();
            }

            return ret;
        }