using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Reflection; namespace SiaSun.LMS.Implement { public class ManageDown : ManageBase { /// /// 双深货位 生成【实盘下架】任务 /// 客户端一次调用,传递多个明细 /// 按照DOUBLE与NORMAL的对应关系逐一下架 /// 锁定不能下架,可移库 /// 调用界面 ManageDown.xaml /// /// 下架库存集合 /// 下架目标作业区,不可空 /// 下架站台,0由系统分配 /// /// /// /// /// public bool ManageCreate(List lsSTORAGE_MAIN, //int END_AREA_ID, int END_CELL_ID, bool bAutoSendControl, string Opertator, out string sResult) { bool bResult = true; sResult = string.Empty; try { this._P_Base_House.BeginTransaction(true); //按CELL_ID分组,逐一下架 foreach (IGrouping lsCELL_MAIN in lsSTORAGE_MAIN.GroupBy(r => r.CELL_ID)) { int START_CELL_ID = lsCELL_MAIN.Key; #region 校验起始货位 SiaSun.LMS.Model.WH_CELL mSTART_WH_CELL = this._P_WH_CELL.GetModel(START_CELL_ID); if (null == mSTART_WH_CELL) { bResult = false; sResult = string.Format("起始位置索引[{0}]不存在", lsCELL_MAIN.Key); return bResult; } if (!mSTART_WH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Cell.ToString())) { bResult = false; sResult = string.Format("起始位置[{0}]类型不合法", mSTART_WH_CELL.CELL_CODE); return bResult; } SiaSun.LMS.Model.WH_AREA mSTART_WH_AREA = this._P_WH_AREA.GetModel(mSTART_WH_CELL.AREA_ID); if (mSTART_WH_AREA.AREA_TYPE == SiaSun.LMS.Enum.AREA_TYPE.XuNiKu.ToString()) { bResult = false; sResult = string.Format("起始位置[{0}]库区类型[{1}]不合法", mSTART_WH_CELL.CELL_CODE, mSTART_WH_AREA.AREA_TYPE); return bResult; } #endregion #region 下架货位为双深时,关联的Normal是否进行移库处理,需要移库时,首先判断是否为待下架的托盘,是,则跳过。否,则移库。 ////下达监控任务的下架,才会考虑关联Normal的移库 //if (bAutoSendControl) //{ // int NormalCell = 0; // string NormalStock = string.Empty; // bool bMove = new ManageMove().CheckNormalMove(START_CELL_ID, out NormalCell, out NormalStock, out sResult); // //需要移库 // if (bMove) // { // //判断NORMAL是否为本次待下架的托盘,Normal在本次下架中,则不需要移库 // if (!lsSTORAGE_MAIN.Select(r => r.CELL_ID).Contains(NormalCell)) // { // //未包含在待下架集合中,则创建移库任务 // bResult = new ManageMove().ManageCreate(NormalStock, NormalCell, 0, bAutoSendControl, false, "SYS", out sResult); // if (!bResult) // { // sResult = string.Format("系统NORMAL移库报错 {0}", sResult); // return bResult; // } // } // } // else // { // string NormalCellCode = string.Empty; // bResult = new ManageMove().CheckDoubleEnableDown(mSTART_WH_CELL.CELL_ID, out NormalCellCode, out sResult); // if (!bResult) // { // sResult = string.Format("双深货位[{0}]不允许下架 由于其关联的普通货位[{1}] 空且已选中(即存在任务),请稍后再试", mSTART_WH_CELL.CELL_CODE, NormalCellCode); // return bResult; // } // } //} #endregion #region 校验货位库存 SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN = this._P_STORAGE_MAIN.GetModelCellID(START_CELL_ID); if (mSTORAGE_MAIN == null) { bResult = false; sResult = string.Format("货位[{0}]未找到库存,请刷新列表后重试", mSTART_WH_CELL.CELL_CODE); return bResult; } IList lsSTORAGE_LIST = this._P_STORAGE_LIST.GetListStorageID(mSTORAGE_MAIN.STORAGE_ID); if (lsSTORAGE_LIST.Count == 0) { bResult = false; sResult = string.Format("货位[{0}]未找到库存,请刷新列表后重试", mSTART_WH_CELL.CELL_CODE); return bResult; } if (lsSTORAGE_LIST[0].GOODS_ID < 0) { bResult = false; sResult = string.Format("容器[{0}]库存为容器,请刷新列表后重试", mSTORAGE_MAIN.STOCK_BARCODE); return bResult; } #endregion #region 校验任务 SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = this._P_MANAGE_MAIN.GetModelStockBarcode(mSTORAGE_MAIN.STOCK_BARCODE); if (mMANAGE_MAIN != null) { bResult = false; sResult = string.Format("容器[{0}]已经存在任务[{1}]", mSTORAGE_MAIN.STOCK_BARCODE, mMANAGE_MAIN.MANAGE_ID); return bResult; } #endregion #region 库存锁定时不允许创建下架任务 //foreach (Model.STORAGE_LIST tempSTORAGE_LIST in lsSTORAGE_LIST) //{ // IList lsSTORAGE_LOCK = this._P_STORAGE_LOCK.GetList_STORAGE_LIST_ID(tempSTORAGE_LIST.STORAGE_LIST_ID); // if (lsSTORAGE_LOCK.Count > 0) // { // bResult = false; // sResult = string.Format("库存已被计划单锁定,请解锁后再进行下架"); // return bResult; // } //} #endregion #region 校验终止站台 if (END_CELL_ID != 0) { #region 校验终止位置 SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); if (null == mEND_WH_CELL) { bResult = false; sResult = string.Format(" 终止位置索引[{0}]不存在", END_CELL_ID); return bResult; } if (!mEND_WH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Station.ToString())) { bResult = false; sResult = string.Format(" 终止位置[{0}]类型不合法", mEND_WH_CELL.CELL_NAME); return bResult; } if (mEND_WH_CELL.CELL_INOUT.ToString().Equals(SiaSun.LMS.Enum.CELL_INOUT.In.ToString())) { bResult = false; sResult = string.Format(" 终止位置[{0}]入出类型[{1}]不合法", mEND_WH_CELL.CELL_NAME, mEND_WH_CELL.CELL_INOUT); return bResult; } #endregion } else { #region 根据起始位置,作业区,获得终止站台 #region 下架目标库区 //Model.WH_AREA mEND_WH_AREA = this._P_WH_AREA.GetModel(END_AREA_ID); //if (mEND_WH_AREA == null) //{ // bResult = false; // sResult = string.Format("下架目标作业区索引[{0}]不存在", END_AREA_ID); // return bResult; //} #endregion //bResult = this._S_CellService.GetOutStation(false, START_CELL_ID, out END_CELL_ID, out sResult); bResult = this._S_CellService.GetOutStation(START_CELL_ID, out END_CELL_ID, out sResult); if (!bResult) { return bResult; } #endregion } #endregion #region 下达任务 #region MANAGE_MAIN mMANAGE_MAIN = new SiaSun.LMS.Model.MANAGE_MAIN(); mMANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.Waiting.ToString(); mMANAGE_MAIN.MANAGE_TYPE_CODE = SiaSun.LMS.Enum.MANAGE_TYPE.ManageDown.ToString(); mMANAGE_MAIN.PLAN_ID = 0; mMANAGE_MAIN.PLAN_TYPE_CODE = string.Empty; mMANAGE_MAIN.CELL_MODEL = mSTORAGE_MAIN.CELL_MODEL; mMANAGE_MAIN.START_CELL_ID = START_CELL_ID; mMANAGE_MAIN.END_CELL_ID = END_CELL_ID; mMANAGE_MAIN.MANAGE_OPERATOR = Opertator; mMANAGE_MAIN.STOCK_BARCODE = mSTORAGE_MAIN.STOCK_BARCODE; mMANAGE_MAIN.FULL_FLAG = mSTORAGE_MAIN.FULL_FLAG; mMANAGE_MAIN.MANAGE_REMARK = mSTORAGE_MAIN.STORAGE_REMARK; #endregion #region MANAGE_LIST List lsMANAGE_LIST = new List(); foreach (SiaSun.LMS.Model.STORAGE_LIST mSTORAGE_LIST in lsSTORAGE_LIST) { SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST = new Model.MANAGE_LIST(); mMANAGE_LIST.GOODS_ID = mSTORAGE_LIST.GOODS_ID; mMANAGE_LIST.PLAN_LIST_ID = 0; mMANAGE_LIST.STORAGE_LIST_ID = mSTORAGE_LIST.STORAGE_LIST_ID; mMANAGE_LIST.MANAGE_LIST_QUANTITY = mSTORAGE_LIST.STORAGE_LIST_QUANTITY; mMANAGE_LIST.MANAGE_LIST_REMARK = mSTORAGE_LIST.STORAGE_LIST_REMARK; bResult = this._S_GoodsService.GoodsPropertySetValue(mSTORAGE_LIST.GOODS_ID, mMANAGE_LIST, mSTORAGE_LIST, out sResult); if (!bResult) { return bResult; } lsMANAGE_LIST.Add(mMANAGE_LIST); } #endregion bResult = base.ManageCreate(mMANAGE_MAIN, lsMANAGE_LIST, bAutoSendControl, false, out sResult); //直接报完成 if ((!bAutoSendControl) && bResult) { bResult = this.ManageComplete(mMANAGE_MAIN.MANAGE_ID, false, out sResult); } #endregion } } catch (Exception ex) { bResult = false; sResult = ex.Message; this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex); } finally { if (bResult) { this._P_Base_House.CommitTransaction(true); } else { this._P_Base_House.RollBackTransaction(true); } } return bResult; } /// /// 生成【实盘下架】任务 /// 客户端循环调用,生成多个下架任务 /// 【双深】客户端不适用 /// 调用界面 ManageDown.XAML /// /// /// /// /// 作业区:未选择终止站台时,根据作业区自动选择下架站台 /// /// /// /// /// public bool ManageCreate(int STORAGE_ID, string STOCK_BARCODE, int END_CELL_ID, int END_AREA_ID, bool bAutoSendControl, bool bTrans, string Opertator, out string sResult) { bool bResult = true; sResult = string.Empty; int START_CELL_ID = 0; try { #region 校验 #region 校验库存 SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN = this._P_STORAGE_MAIN.GetModel(STORAGE_ID); if (mSTORAGE_MAIN == null) { mSTORAGE_MAIN = this._P_STORAGE_MAIN.GetModelStockBarcode(STOCK_BARCODE); if (mSTORAGE_MAIN == null) { bResult = false; sResult = string.Format("容器[{0}]不存在库存", STOCK_BARCODE); return bResult; } } IList lsSTORAGE_LIST = this._P_STORAGE_LIST.GetListStorageID(mSTORAGE_MAIN.STORAGE_ID); if (lsSTORAGE_LIST.Count == 0) { bResult = false; sResult = string.Format("容器[{0}]不存在库存", STOCK_BARCODE); return bResult; } if (lsSTORAGE_LIST[0].GOODS_ID < 0) { bResult = false; sResult = string.Format("容器[{0}]库存为容器,请刷新列表后再下达任务", STOCK_BARCODE); return bResult; } #region 库存锁定时不允许创建下架任务 //foreach (Model.STORAGE_LIST tempSTORAGE_LIST in lsSTORAGE_LIST) //{ // IList lsSTORAGE_LOCK = this._P_STORAGE_LOCK.GetList_STORAGE_LIST_ID(tempSTORAGE_LIST.STORAGE_LIST_ID); // if (lsSTORAGE_LOCK.Count > 0) // { // bResult = false; // sResult = string.Format("库存已被计划单锁定,请解锁后再进行下架"); // return bResult; // } //} #endregion #endregion #region 校验任务 SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = this._P_MANAGE_MAIN.GetModelStockBarcode(mSTORAGE_MAIN.STOCK_BARCODE); if (mMANAGE_MAIN != null) { bResult = false; sResult = string.Format("容器[{0}]已经存在任务[{1}]", mSTORAGE_MAIN.STOCK_BARCODE, mMANAGE_MAIN.MANAGE_ID); return bResult; } #endregion #region 校验起始货位 SiaSun.LMS.Model.WH_CELL mSTART_WH_CELL = this._P_WH_CELL.GetModel(mSTORAGE_MAIN.CELL_ID); if (null == mSTART_WH_CELL) { bResult = false; sResult = string.Format("起始位置索引[{0}]不存在", mSTORAGE_MAIN.CELL_ID); return bResult; } if (!mSTART_WH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Cell.ToString())) { bResult = false; sResult = string.Format("起始位置[{0}]类型不合法", mSTART_WH_CELL.CELL_CODE); return bResult; } SiaSun.LMS.Model.WH_AREA mSTART_WH_AREA = this._P_WH_AREA.GetModel(mSTART_WH_CELL.AREA_ID); if (mSTART_WH_AREA.AREA_TYPE == SiaSun.LMS.Enum.AREA_TYPE.XuNiKu.ToString()) { bResult = false; sResult = string.Format("起始位置[{0}]库区类型[{1}]不合法", mSTART_WH_CELL.CELL_CODE, mSTART_WH_AREA.AREA_TYPE); return bResult; } START_CELL_ID = mSTORAGE_MAIN.CELL_ID; #endregion #region 校验终止站台 if (END_CELL_ID != 0) { #region 校验终止位置 SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); if (null == mEND_WH_CELL) { bResult = false; sResult = string.Format(" 终止位置索引[{0}]不存在", END_CELL_ID); return bResult; } if (!mEND_WH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Station.ToString())) { bResult = false; sResult = string.Format(" 终止位置[{0}]类型不合法", mEND_WH_CELL.CELL_NAME); return bResult; } if (mEND_WH_CELL.CELL_INOUT.ToString().Equals(SiaSun.LMS.Enum.CELL_INOUT.In.ToString())) { bResult = false; sResult = string.Format(" 终止位置[{0}]入出类型[{1}]不合法", mEND_WH_CELL.CELL_NAME, mEND_WH_CELL.CELL_INOUT); return bResult; } #endregion } else { #region 根据起始位置,作业区,获得终止站台 #region 下架目标库区 Model.WH_AREA mEND_WH_AREA = this._P_WH_AREA.GetModel(END_AREA_ID); if (mEND_WH_AREA == null) { bResult = false; sResult = string.Format("下架目标作业区索引[{0}]不存在", END_AREA_ID); return bResult; } #endregion bResult = this._S_CellService.GetOutEndStation(false, START_CELL_ID, END_AREA_ID, out END_CELL_ID, out sResult); if (!bResult) { return bResult; } #endregion } #endregion #endregion #region 下架货位为双深时,关联的Normal是否进行移库处理 add by JJH 2019-03-23 //if (bAutoSendControl)//下达监控任务时才校验是否移库 //{ // int NormalCell = 0; // string NormalStock = string.Empty; // bool bMove = new ManageMove().CheckNormalMove(mSTORAGE_MAIN.CELL_ID, out NormalCell, out NormalStock, out sResult); // if (bMove) // { // bResult = new ManageMove().ManageCreate(NormalStock, NormalCell, 0, bAutoSendControl, bTrans, "SYS", out sResult); // if (!bResult) // { // sResult = string.Format("系统NORMAL移库报错 {0}", sResult); // return bResult; // } // } //} #endregion #region 下达任务 #region MANAGE_MAIN mMANAGE_MAIN = new SiaSun.LMS.Model.MANAGE_MAIN(); mMANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.Waiting.ToString(); mMANAGE_MAIN.MANAGE_TYPE_CODE = SiaSun.LMS.Enum.MANAGE_TYPE.ManageDown.ToString(); mMANAGE_MAIN.PLAN_ID = 0; mMANAGE_MAIN.PLAN_TYPE_CODE = string.Empty; mMANAGE_MAIN.CELL_MODEL = mSTORAGE_MAIN.CELL_MODEL; mMANAGE_MAIN.START_CELL_ID = START_CELL_ID; mMANAGE_MAIN.END_CELL_ID = END_CELL_ID; mMANAGE_MAIN.MANAGE_OPERATOR = Opertator; mMANAGE_MAIN.STOCK_BARCODE = mSTORAGE_MAIN.STOCK_BARCODE; mMANAGE_MAIN.FULL_FLAG = mSTORAGE_MAIN.FULL_FLAG; mMANAGE_MAIN.MANAGE_REMARK = mSTORAGE_MAIN.STORAGE_REMARK; #endregion #region MANAGE_LIST List lsMANAGE_LIST = new List(); foreach (SiaSun.LMS.Model.STORAGE_LIST mSTORAGE_LIST in lsSTORAGE_LIST) { SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST = new Model.MANAGE_LIST(); mMANAGE_LIST.GOODS_ID = mSTORAGE_LIST.GOODS_ID; mMANAGE_LIST.PLAN_LIST_ID = 0; mMANAGE_LIST.STORAGE_LIST_ID = mSTORAGE_LIST.STORAGE_LIST_ID; mMANAGE_LIST.MANAGE_LIST_QUANTITY = mSTORAGE_LIST.STORAGE_LIST_QUANTITY; mMANAGE_LIST.MANAGE_LIST_REMARK = mSTORAGE_LIST.STORAGE_LIST_REMARK; bResult = this._S_GoodsService.GoodsPropertySetValue(mSTORAGE_LIST.GOODS_ID, mMANAGE_LIST, mSTORAGE_LIST, out sResult); if (!bResult) { return bResult; } lsMANAGE_LIST.Add(mMANAGE_LIST); } #endregion bResult = base.ManageCreate(mMANAGE_MAIN, lsMANAGE_LIST, bAutoSendControl, bTrans, out sResult); //直接报完成 if ((!bAutoSendControl) && bResult) { bResult = this.ManageComplete(mMANAGE_MAIN.MANAGE_ID, bTrans, out sResult); } #endregion } catch (Exception ex) { bResult = false; sResult = ex.Message; this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex); } return bResult; } /// /// 生成【实盘下架任务】 /// 调用界面 ManageDownOut.XAML /// /// /// /// /// /// /// /// /// public bool ManageCreate(int STORAGE_ID, string STOCK_BARCODE, int END_CELL_ID, bool bAutoSendControl, bool bTrans, string Opertator, out string sResult) { bool bResult = true; sResult = string.Empty; int START_CELL_ID = 0; try { #region 校验 #region 校验库存 SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN = this._P_STORAGE_MAIN.GetModel(STORAGE_ID); if (mSTORAGE_MAIN == null) { mSTORAGE_MAIN = this._P_STORAGE_MAIN.GetModelStockBarcode(STOCK_BARCODE); if (mSTORAGE_MAIN == null) { bResult = false; sResult = string.Format("容器[{0}]不存在库存", STOCK_BARCODE); return bResult; } } IList lsSTORAGE_LIST = this._P_STORAGE_LIST.GetListStorageID(mSTORAGE_MAIN.STORAGE_ID); if (lsSTORAGE_LIST.Count == 0) { bResult = false; sResult = string.Format("容器[{0}]不存在库存", STOCK_BARCODE); return bResult; } #endregion #region 校验任务 SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = this._P_MANAGE_MAIN.GetModelStockBarcode(mSTORAGE_MAIN.STOCK_BARCODE); if (mMANAGE_MAIN != null) { bResult = false; sResult = string.Format("容器[{0}]已经存在任务[{1}]", mSTORAGE_MAIN.STOCK_BARCODE, mMANAGE_MAIN.MANAGE_ID); return bResult; } #endregion #region 校验起始货位 SiaSun.LMS.Model.WH_CELL mSTART_WH_CELL = this._P_WH_CELL.GetModel(mSTORAGE_MAIN.CELL_ID); if (null == mSTART_WH_CELL) { bResult = false; sResult = string.Format("起始位置索引[{0}]不存在", mSTORAGE_MAIN.CELL_ID); return bResult; } if (!mSTART_WH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Cell.ToString())) { bResult = false; sResult = string.Format("起始位置[{0}]类型不合法", mSTART_WH_CELL.CELL_CODE); return bResult; } SiaSun.LMS.Model.WH_AREA mSTART_WH_AREA = this._P_WH_AREA.GetModel(mSTART_WH_CELL.AREA_ID); if (mSTART_WH_AREA.AREA_TYPE == SiaSun.LMS.Enum.AREA_TYPE.XuNiKu.ToString()) { bResult = false; sResult = string.Format("起始位置[{0}]库区类型[{1}]不合法", mSTART_WH_CELL.CELL_CODE, mSTART_WH_AREA.AREA_TYPE); return bResult; } START_CELL_ID = mSTORAGE_MAIN.CELL_ID; #endregion #region 校验终止站台 if (END_CELL_ID != 0) { #region 校验终止位置 SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); if (null == mEND_WH_CELL) { bResult = false; sResult = string.Format(" 终止位置索引[{0}]不存在", END_CELL_ID); return bResult; } if (!mEND_WH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Station.ToString())) { bResult = false; sResult = string.Format(" 终止位置[{0}]类型不合法", mEND_WH_CELL.CELL_NAME); return bResult; } if (mEND_WH_CELL.CELL_INOUT.ToString().Equals(SiaSun.LMS.Enum.CELL_INOUT.In.ToString())) { bResult = false; sResult = string.Format(" 终止位置[{0}]入出类型[{1}]不合法", mEND_WH_CELL.CELL_NAME, mEND_WH_CELL.CELL_INOUT); return bResult; } #endregion } else { #region 根据起始位置,获得终止站台 bResult = this._S_CellService.GetOutStation(START_CELL_ID, out END_CELL_ID, out sResult); if (!bResult) { return bResult; } #endregion } #endregion #endregion #region 下达任务 #region MANAGE_MAIN mMANAGE_MAIN = new SiaSun.LMS.Model.MANAGE_MAIN(); mMANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.Waiting.ToString(); mMANAGE_MAIN.MANAGE_TYPE_CODE = SiaSun.LMS.Enum.MANAGE_TYPE.ManageDown.ToString(); mMANAGE_MAIN.PLAN_ID = 0; mMANAGE_MAIN.PLAN_TYPE_CODE = string.Empty; mMANAGE_MAIN.CELL_MODEL = mSTORAGE_MAIN.CELL_MODEL; mMANAGE_MAIN.START_CELL_ID = START_CELL_ID; mMANAGE_MAIN.END_CELL_ID = END_CELL_ID; mMANAGE_MAIN.MANAGE_OPERATOR = Opertator; mMANAGE_MAIN.STOCK_BARCODE = mSTORAGE_MAIN.STOCK_BARCODE; mMANAGE_MAIN.FULL_FLAG = mSTORAGE_MAIN.FULL_FLAG; mMANAGE_MAIN.MANAGE_REMARK = mSTORAGE_MAIN.STORAGE_REMARK; #endregion #region MANAGE_LIST List lsMANAGE_LIST = new List(); foreach (SiaSun.LMS.Model.STORAGE_LIST mSTORAGE_LIST in lsSTORAGE_LIST) { SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST = new Model.MANAGE_LIST(); mMANAGE_LIST.GOODS_ID = mSTORAGE_LIST.GOODS_ID; mMANAGE_LIST.PLAN_LIST_ID = 0; mMANAGE_LIST.STORAGE_LIST_ID = mSTORAGE_LIST.STORAGE_LIST_ID; mMANAGE_LIST.MANAGE_LIST_QUANTITY = mSTORAGE_LIST.STORAGE_LIST_QUANTITY; mMANAGE_LIST.MANAGE_LIST_REMARK = mSTORAGE_LIST.STORAGE_LIST_REMARK; bResult = this._S_GoodsService.GoodsPropertySetValue(mSTORAGE_LIST.GOODS_ID, mMANAGE_LIST, mSTORAGE_LIST, out sResult); if (!bResult) { return bResult; } lsMANAGE_LIST.Add(mMANAGE_LIST); } #endregion bResult = base.ManageCreate(mMANAGE_MAIN, lsMANAGE_LIST, bAutoSendControl, bTrans, out sResult); //直接报完成 if ((!bAutoSendControl) && bResult) { bResult = this.ManageComplete(mMANAGE_MAIN.MANAGE_ID, bTrans, out sResult); } #endregion } catch (Exception ex) { bResult = false; sResult = ex.Message; this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex); } return bResult; } /// /// 生成【实盘下架任务】 /// /// /// /// /// /// /// public new bool ManageCreate(SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN, List lsMANAGE_LIST, bool bTrans, bool bAutoSendControl, out string sResult) { bool bResult = true; sResult = string.Empty; try { #region 校验 #region 校验容器条码 if (string.IsNullOrEmpty(mMANAGE_MAIN.STOCK_BARCODE)) { bResult = false; sResult = string.Format("容器条码不能为空"); return bResult; } SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN_OLD = this._P_MANAGE_MAIN.GetModelStockBarcode(mMANAGE_MAIN.STOCK_BARCODE); if (mMANAGE_MAIN_OLD != null) { bResult = false; sResult = string.Format("容器[{0}]已经存在任务[{1}]", mMANAGE_MAIN_OLD.STOCK_BARCODE, mMANAGE_MAIN_OLD.MANAGE_ID); return bResult; } #endregion #region 校验库存 Model.STORAGE_MAIN mSTORAGE_MAIN = this._P_STORAGE_MAIN.GetModelStockBarcode(mMANAGE_MAIN.STOCK_BARCODE); if (null == mSTORAGE_MAIN) { bResult = false; sResult = string.Format("容器条码[{0}]不存在库存", mMANAGE_MAIN.STOCK_BARCODE); return bResult; } IList lsSTORAGE_LIST = this._P_STORAGE_LIST.GetListStorageID(mSTORAGE_MAIN.STORAGE_ID); if (lsSTORAGE_LIST.Count == 0) { bResult = false; sResult = string.Format("容器条码[{0}]不存在库存", mMANAGE_MAIN.STOCK_BARCODE); return bResult; } #endregion #region 起始位置 Model.WH_CELL mSTART_WH_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.START_CELL_ID); if (null == mSTART_WH_CELL) { bResult = false; sResult = string.Format("起始位置索引[{0}]不存在", mSTORAGE_MAIN.CELL_ID); return bResult; } if (!mSTART_WH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Cell.ToString())) { bResult = false; sResult = string.Format("起始位置[{0}]类型不合法", mSTART_WH_CELL.CELL_CODE); return bResult; } SiaSun.LMS.Model.WH_AREA mSTART_WH_AREA = this._P_WH_AREA.GetModel(mSTART_WH_CELL.AREA_ID); if (mSTART_WH_AREA.AREA_TYPE == SiaSun.LMS.Enum.AREA_TYPE.XuNiKu.ToString()) { bResult = false; sResult = string.Format("起始位置[{0}]库区类型[{1}]不合法", mSTART_WH_CELL.CELL_CODE, mSTART_WH_AREA.AREA_TYPE); return bResult; } #endregion #region 终止位置 if (mMANAGE_MAIN.END_CELL_ID != 0) { #region 校验终止位置 SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.END_CELL_ID); if (null == mEND_WH_CELL) { bResult = false; sResult = string.Format(" 终止位置索引[{0}]不存在", mMANAGE_MAIN.END_CELL_ID); return bResult; } if (!mEND_WH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Station.ToString())) { bResult = false; sResult = string.Format(" 终止位置[{0}]类型不合法", mEND_WH_CELL.CELL_NAME); return bResult; } if (mEND_WH_CELL.CELL_INOUT.ToString().Equals(SiaSun.LMS.Enum.CELL_INOUT.In.ToString())) { bResult = false; sResult = string.Format(" 终止位置[{0}]入出类型[{1}]不合法", mEND_WH_CELL.CELL_NAME, mEND_WH_CELL.CELL_INOUT); return bResult; } #endregion } else { #region 根据起始位置,获得终止站台 int END_CELL_ID = 0; bResult = this._S_CellService.GetOutStation(mMANAGE_MAIN.START_CELL_ID, out END_CELL_ID, out sResult); if (!bResult) { return bResult; } mMANAGE_MAIN.END_CELL_ID = END_CELL_ID; #endregion } #endregion #endregion #region 下达任务 bResult = base.ManageCreate(mMANAGE_MAIN, lsMANAGE_LIST, bAutoSendControl, bTrans, out sResult); //直接报完成 if ((!bAutoSendControl) && bResult) { bResult = this.ManageComplete(mMANAGE_MAIN.MANAGE_ID, bTrans, out sResult); } #endregion } catch (Exception ex) { bResult = false; sResult = ex.Message; this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex); } return bResult; } /// 完成 /// 完成 /// /// /// 是否独立事务 /// /// public new bool ManageComplete(int MANAGE_ID, bool bTrans, out string sResult) { bool bResult = true; sResult = string.Empty; try { this._P_Base_House.BeginTransaction(bTrans); #region 校验 SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = this._P_MANAGE_MAIN.GetModel(MANAGE_ID); bResult = null != mMANAGE_MAIN; if (!bResult) { sResult = string.Format("管理任务索引[{0}]不存在", MANAGE_ID.ToString()); return bResult; } SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModelManageID(MANAGE_ID); if ((null != mIO_CONTROL) && (!mIO_CONTROL.CONTROL_STATUS.Equals(999))) { bResult = false; sResult = string.Format("控制任务索引[{0}]的控制任务未完成", mIO_CONTROL.CONTROL_ID); return bResult; } SiaSun.LMS.Model.WH_CELL mSTART_WH_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.START_CELL_ID); if (null == mSTART_WH_CELL) { bResult = false; sResult = string.Format("起始位置索引[{0}]不存在", mMANAGE_MAIN.START_CELL_ID); return bResult; } SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.END_CELL_ID); if (null == mEND_WH_CELL) { bResult = false; sResult = string.Format("终止位置索引[{0}]不存在", mMANAGE_MAIN.END_CELL_ID); return bResult; } #endregion #region 更新库存-立库移至暂存区 bResult = this._S_StorageService.StorageMove(MANAGE_ID, out sResult); if (!bResult) { return bResult; } #endregion #region 更新货位状态 if (!this._P_WH_AREA.GetModel(mSTART_WH_CELL.AREA_ID).AREA_TYPE.Equals(SiaSun.LMS.Enum.AREA_TYPE.XuNiKu.ToString())) { string CELL_STATUS = SiaSun.LMS.Enum.CELL_STATUS.Nohave.ToString(); bResult = this._S_CellService.CellUpdateStatus(mMANAGE_MAIN.START_CELL_ID, CELL_STATUS, SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString(), out sResult); if (!bResult) { return bResult; } } if (!this._P_WH_AREA.GetModel(mEND_WH_CELL.AREA_ID).AREA_TYPE.Equals(SiaSun.LMS.Enum.AREA_TYPE.XuNiKu.ToString())) { //string CELL_STATUS = mMANAGE_MAIN.FULL_FLAG == "1" ? SiaSun.LMS.Enum.CELL_STATUS.Full.ToString() : SiaSun.LMS.Enum.CELL_STATUS.Have.ToString(); string CELL_STATUS = SiaSun.LMS.Enum.CELL_STATUS.Full.ToString(); bResult = this._S_CellService.CellUpdateStatus(mMANAGE_MAIN.END_CELL_ID, CELL_STATUS, SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString(), out sResult); if (!bResult) { return bResult; } } #endregion #region 调用基类-更新管理任务;更新计划;生成入出库记录 bResult = this._S_ManageService.ManageComplete(MANAGE_ID, false, out sResult); if (!bResult) { return bResult; } #endregion #region 删除任务信息 this._P_IO_CONTROL.DeleteManageID(mMANAGE_MAIN.MANAGE_ID); this._P_MANAGE_DETAIL.DeleteManageID(mMANAGE_MAIN.MANAGE_ID); this._P_MANAGE_LIST.DeleteManageID(mMANAGE_MAIN.MANAGE_ID); this._P_MANAGE_MAIN.Delete(mMANAGE_MAIN.MANAGE_ID); #endregion } catch (Exception ex) { bResult = false; sResult = ex.Message; this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex); } finally { if (bResult) { this._P_Base_House.CommitTransaction(bTrans); } else { this._P_Base_House.RollBackTransaction(bTrans); } } return bResult; } } }