using System; using System.Collections.Generic; using System.Data; using System.Text; using System.ServiceModel; using System.Linq; using SiaSun.LMS.Model; using System.Net; using System.Reflection; namespace SiaSun.LMS.Implement { [ServiceBehavior(IncludeExceptionDetailInFaults = true,InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple,MaxItemsInObjectGraph=int.MaxValue)] public partial class CellBase : SiaSun.LMS.Implement.S_BaseService, SiaSun.LMS.Interface.I_CellService { public CellBase() { } public SiaSun.LMS.Model.WH_CELL GetModel(int CELL_ID) { return _P_WH_CELL.GetModel(CELL_ID); } /// 获得库房 /// 获得库房 /// /// 库房编码 /// 返回值 public DataTable WAREHOUSE_GetList(int USER_ID,string WAREHOUSE_TYPE) { DataTable dt = this.GetList(string.Format(@"SELECT WAREHOUSE_ID,WAREHOUSE_NAME FROM WH_WAREHOUSE WHERE {0} {1}" , USER_ID >=0 ? "1=1": string.Format(@"(WAREHOUSE_ID IN(SELECT RELATION_ID2 FROM V_SYS_RELATION WHERE RELATION_CODE='SYS_USER-WH_WAREHOUSE' AND RELATION_ID1= {0}))",USER_ID), WAREHOUSE_TYPE== string.Empty?string.Empty:string.Format( "AND WAREHOUSE_TYPE = '{0}'",WAREHOUSE_TYPE) )); return dt; } /// 获得库区 /// 获得库区 /// /// 库房编号 /// 库区类型 /// 返回值 public DataTable AREA_GetList(int WAREHOUSE_ID, string AREA_TYPE) { string sSQL = "SELECT AREA_ID,AREA_CODE,AREA_NAME,AREA_TYPE FROM WH_AREA WHERE AREA_FLAG='1' {0} {1}"; DataTable dt = this.GetList(string.Format(sSQL, (0 == WAREHOUSE_ID) ? string.Empty : string.Format(" AND WAREHOUSE_ID = {0}", WAREHOUSE_ID.ToString()), string.IsNullOrEmpty(AREA_TYPE) ? string.Empty : string.Format(" AND AREA_TYPE = '{0}'", AREA_TYPE))); return dt; } /// 获得排 /// 获得排 /// /// 库房编号 /// 库区编号 /// 存储区编号 /// 货位类型 /// 出入库方向 /// public DataTable CELL_Z_GetList(int AREA_ID) { string sSQL = "SELECT * FROM V_WH_CELL_Z WHERE 1=1 {0} ORDER BY CELL_Z"; DataTable dt = this.GetList(string.Format(sSQL, (0 == AREA_ID) ? string.Empty : string.Format(" AND AREA_ID = {0}", AREA_ID.ToString()) )); return dt; } public IList CELL_GetList_Z(int WAREHOUSE_ID,int AREA_ID, string CELL_Z) { return this._P_WH_CELL.CELL_GetList_Z(WAREHOUSE_ID, AREA_ID,CELL_Z); } /// /// 货位尺寸查询 /// public DataTable CELL_SIZE_GetTable(int WAREHOUSE_ID, int AREA_ID, string CELL_Z) { string sSQL = @"SELECT MIN(CELL_X) AS MIN_CELL_X, MAX(CELL_X) AS MAX_CELL_X, MIN(CELL_Y) AS MIN_CELL_Y, MAX(CELL_Y) AS MAX_CELL_Y, MAX(CELL_WIDTH) AS MAX_CELL_WIDTH, MAX(CELL_HEIGHT) AS MAX_CELL_HEIGTH, MIN(CELL_WIDTH) AS MIN_CELL_WIDTH, MIN(CELL_HEIGHT) AS MIN_CELL_HEIGTH FROM V_WH_CELL WHERE 1=1 {0} {1} {2}"; using (DataTable dt = this.GetList(string.Format(sSQL, (0 == WAREHOUSE_ID) ? string.Empty : string.Format(" AND WAREHOUSE_ID = {0}", WAREHOUSE_ID.ToString()), (0 == AREA_ID) ? string.Empty : string.Format(" AND AREA_ID = {0}", AREA_ID.ToString()), string.IsNullOrEmpty(CELL_Z) ? string.Empty : string.Format(" AND CELL_Z = '{0}'", CELL_Z.ToString()) ))) { return dt; } } public bool CellInit() { bool bResult = true; try { IList lsWH_DESCRIPTION = this._P_WH_DESCRIPTION.GetList(); foreach (SiaSun.LMS.Model.WH_DESCRIPTION mWH_DESCRIPTION in lsWH_DESCRIPTION) { if (mWH_DESCRIPTION.CELL_TYPE == SiaSun.LMS.Enum.CELL_TYPE.Cell.ToString()) bResult = this.CellCreate(mWH_DESCRIPTION.WAREHOUSE_ID, mWH_DESCRIPTION.AREA_ID, mWH_DESCRIPTION.LOGIC_ID, mWH_DESCRIPTION.START_Z, mWH_DESCRIPTION.END_Z, mWH_DESCRIPTION.START_X, mWH_DESCRIPTION.END_X, mWH_DESCRIPTION.START_Y, mWH_DESCRIPTION.END_Y, mWH_DESCRIPTION.DEVICE_CODE, mWH_DESCRIPTION.LANE_WAY, mWH_DESCRIPTION.SHELF_TYPE, mWH_DESCRIPTION.SHELF_NEIGHBOUR, mWH_DESCRIPTION.CELL_MODEL, mWH_DESCRIPTION.CELL_LOGICAL_NAME, mWH_DESCRIPTION.CELL_INOUT, mWH_DESCRIPTION.CELL_TYPE, mWH_DESCRIPTION.CELL_STORAGE_TYPE, mWH_DESCRIPTION.CELL_FORK_TYPE, Convert.ToInt32(mWH_DESCRIPTION.CELL_FORK_COUNT), mWH_DESCRIPTION.CELL_WIDTH, mWH_DESCRIPTION.CELL_HEIGHT ); else bResult = this.StationCreate( mWH_DESCRIPTION.WAREHOUSE_ID, mWH_DESCRIPTION.AREA_ID, mWH_DESCRIPTION.LOGIC_ID, mWH_DESCRIPTION.DEVICE_CODE, mWH_DESCRIPTION.DEVICE_NAME, mWH_DESCRIPTION.LANE_WAY, mWH_DESCRIPTION.SHELF_TYPE, mWH_DESCRIPTION.SHELF_NEIGHBOUR, mWH_DESCRIPTION.CELL_MODEL, mWH_DESCRIPTION.CELL_LOGICAL_NAME, mWH_DESCRIPTION.CELL_INOUT, mWH_DESCRIPTION.CELL_TYPE, mWH_DESCRIPTION.CELL_STORAGE_TYPE, mWH_DESCRIPTION.CELL_FORK_TYPE ); } } catch (Exception ex) { bResult = false; } return bResult; } /// 获得-新建 /// 获得-新建 /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// public bool CellCreate(int WAREHOUSE_ID, int AREA_ID, int LOGIC_ID, int z_begin, int z_end, int x_begin, int x_end, int y_begin, int y_end, string DEVICE_CODE, string LANE_WAY, string SHELF_TYPE, string SHELF_NEIGHBOUR, string CELL_MODEL, string CELL_LOGICAL_NAME, string CELL_INOUT, string CELL_TYPE, string CELL_STORAGE_TYPE, string CELL_FORK_TYPE, int CELL_FORK_COUNT, int CELL_WIDTH, int CELL_HEIGHT ) { bool bResult = true; SiaSun.LMS.Model.WH_CELL mST_CELL = new SiaSun.LMS.Model.WH_CELL(); for (int z = z_begin; z <= z_end; z++) { for (int x = x_begin; x <= x_end; x++) { for (int y = y_begin; y <= y_end; y++) { mST_CELL.WAREHOUSE_ID = WAREHOUSE_ID; mST_CELL.AREA_ID = AREA_ID; mST_CELL.LOGIC_ID = LOGIC_ID; mST_CELL.CELL_CODE = z.ToString().PadLeft(2, '0') + "-" + x.ToString().PadLeft(2, '0') + "-" + y.ToString().PadLeft(2, '0'); mST_CELL.CELL_NAME = z.ToString().PadLeft(2,'0') + "-" +x.ToString().PadLeft(2, '0') + "-" + y.ToString().PadLeft(2, '0') ; mST_CELL.LANE_WAY = LANE_WAY; mST_CELL.DEVICE_CODE = DEVICE_CODE; mST_CELL.SHELF_TYPE = SHELF_TYPE; mST_CELL.SHELF_NEIGHBOUR = SHELF_NEIGHBOUR; mST_CELL.CELL_MODEL = CELL_MODEL; mST_CELL.CELL_LOGICAL_NAME = CELL_LOGICAL_NAME; mST_CELL.CELL_INOUT = CELL_INOUT; mST_CELL.CELL_TYPE = CELL_TYPE; mST_CELL.CELL_STORAGE_TYPE = CELL_STORAGE_TYPE; mST_CELL.CELL_FORK_TYPE = CELL_FORK_TYPE; mST_CELL.CELL_Z = z; mST_CELL.CELL_X = x; mST_CELL.CELL_Y = y; mST_CELL.CELL_STATUS = SiaSun.LMS.Enum.CELL_STATUS.Nohave.ToString(); mST_CELL.RUN_STATUS = SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString(); mST_CELL.CELL_WIDTH = CELL_WIDTH; mST_CELL.CELL_HEIGHT = CELL_HEIGHT; mST_CELL.CELL_FLAG = "1"; mST_CELL.CELL_GROUP = z.ToString().PadLeft(2, '0') + "-" + (x % CELL_FORK_COUNT == 0 ? (x / CELL_FORK_COUNT) : (x / CELL_FORK_COUNT) + 1).ToString().PadLeft(2, '0') + "-" + y.ToString().PadLeft(2, '0'); SiaSun.LMS.Model.WH_CELL temp_st_cell = this._P_WH_CELL.GetModel(AREA_ID, mST_CELL.CELL_CODE); if (null == temp_st_cell) { this._P_WH_CELL.Add(mST_CELL); } else { mST_CELL.CELL_ID = temp_st_cell.CELL_ID; mST_CELL.CELL_STATUS = temp_st_cell.CELL_STATUS; mST_CELL.RUN_STATUS = temp_st_cell.RUN_STATUS; this._P_WH_CELL.Update(mST_CELL); } } } } return bResult; } /// 获得-新建 /// 获得-新建 /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// public bool StationCreate( int WAREHOUSE_ID, int AREA_ID, int LOGIC_ID, string DEVICE_CODE, string DEVICE_NAME, string LANE_WAY, string SHELF_TYPE, string SHELF_NEIGHBOUR, string CELL_MODEL, string CELL_LOGICAL_NAME, string CELL_INOUT, string CELL_TYPE, string CELL_STORAGE_TYPE, string CELL_FORK_TYPE ) { bool bResult = true; SiaSun.LMS.Model.WH_CELL mST_CELL = new SiaSun.LMS.Model.WH_CELL(); mST_CELL.WAREHOUSE_ID = WAREHOUSE_ID; mST_CELL.AREA_ID = AREA_ID; mST_CELL.LOGIC_ID = LOGIC_ID; mST_CELL.CELL_CODE = DEVICE_CODE; mST_CELL.CELL_NAME = DEVICE_NAME; mST_CELL.LANE_WAY = LANE_WAY; mST_CELL.DEVICE_CODE = DEVICE_CODE; mST_CELL.SHELF_TYPE = SHELF_TYPE; mST_CELL.SHELF_NEIGHBOUR = SHELF_NEIGHBOUR; mST_CELL.CELL_MODEL = CELL_MODEL; mST_CELL.CELL_LOGICAL_NAME = CELL_LOGICAL_NAME; mST_CELL.CELL_INOUT = CELL_INOUT; mST_CELL.CELL_TYPE = CELL_TYPE; mST_CELL.CELL_STORAGE_TYPE = CELL_STORAGE_TYPE; mST_CELL.CELL_FORK_TYPE = CELL_FORK_TYPE; mST_CELL.CELL_Z = 0; mST_CELL.CELL_X = 0; mST_CELL.CELL_Y = 0; mST_CELL.CELL_STATUS = SiaSun.LMS.Enum.CELL_STATUS.Nohave.ToString(); mST_CELL.RUN_STATUS = SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString(); mST_CELL.CELL_FLAG = "1"; SiaSun.LMS.Model.WH_CELL temp_st_cell = this._P_WH_CELL.GetModel(AREA_ID, mST_CELL.CELL_CODE); if (null == temp_st_cell) { this._P_WH_CELL.Add(mST_CELL); } else { mST_CELL.CELL_ID = temp_st_cell.CELL_ID; mST_CELL.CELL_STATUS = temp_st_cell.CELL_STATUS; mST_CELL.RUN_STATUS = temp_st_cell.RUN_STATUS; this._P_WH_CELL.Update(mST_CELL); } return bResult; } /// 获得入库货位--停用 /// 获得入库货位 /// /// 库存编号 /// 库区编号 /// 存储区编号 /// 起始货位 /// 货位状态 /// 运行状态 /// 货位尺寸 /// 托盘条码 /// 终止货位 /// 返回结果 /// public bool CellInAllocate(string START_DEVICE_CODE, string CELL_MODEL, int MANAGE_ID,int FORK_COUNT, out int END_CELL_ID, out string sResult) { sResult = string.Empty; END_CELL_ID = 0; END_CELL_ID = this._P_WH_CELL.CellInAllocate(START_DEVICE_CODE, CELL_MODEL, MANAGE_ID, FORK_COUNT, out sResult); if (END_CELL_ID == 0) return false; else return true; } /// /// 根据配盘方案 获得出库巷道 /// /// /// /// /// /// /// public bool LaneWayGetList(int END_CELL_ID, int TEMPLATE_ID, out DataTable dtLANEWAY, out string sResult) { bool bResult = true; dtLANEWAY = null; sResult = string.Empty; SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); bResult = null != mWH_CELL; if (!bResult) { sResult = "未找到出库站台"; return bResult; } string sSQL = string.Format(@"SELECT DEVICE_CODE, LANE_WAY , SUM(STORAGE_LIST_QUANTITY) AS STORAGE_BALANCE, dbo.OUTTASKBALANCE(DEVICE_CODE) AS OUT_TASK_BALANCE FROM V_STORAGE_LIST WHERE TEMPATE_ID = {0} AND CELL_TYPE = 'Cell' AND DEVICE_CODE IN (SELECT START_DEVICE FROM IO_CONTROL_ROUTE WHERE END_DEVICE='{3}' AND CONTROL_ROUTE_STATUS = 1) {1} {2} GROUP BY LANE_WAY,DEVICE_CODE", /*0*/ TEMPLATE_ID, /*1*/string.Format(" AND ( CELL_STATUS = '{0}' or CELL_STATUS = '{1}') ", SiaSun.LMS.Enum.CELL_STATUS.Full.ToString(), SiaSun.LMS.Enum.CELL_STATUS.Pallet.ToString()), /*2*/string.Format(" AND RUN_STATUS = '{0}'", SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString()), /*3*/mWH_CELL.DEVICE_CODE ); dtLANEWAY = this.GetList(sSQL); bResult = dtLANEWAY.Rows.Count > 0; if (!bResult) { sResult = string.Format("未找到出库巷道"); return bResult; } return bResult; } //============================= /// 货位-更改状态 /// 货位-更改状态 /// /// 货位编号 /// 货位类型 /// 存储状态 /// 运行状态 /// 返回值 /// public bool CellUpdateStatus(int CELL_ID, string CELL_STATUS, string RUN_STATUS, out string sResult) { bool bResult = true; sResult = string.Empty; if (0 == CELL_ID) { return bResult; } try { SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(CELL_ID); if (null == mWH_CELL) { bResult = false; sResult = string.Format("未找到货位{0}", CELL_ID.ToString()); return bResult; } if (!mWH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Cell.ToString())) { return bResult; } SiaSun.LMS.Model.WH_AREA mWH_AREA = this._P_WH_AREA.GetModel(mWH_CELL.AREA_ID); if (mWH_AREA.AREA_TYPE.Equals(SiaSun.LMS.Enum.AREA_TYPE.XuNiKu.ToString())) { return bResult; } if (!string.IsNullOrEmpty(CELL_STATUS)) { mWH_CELL.CELL_STATUS = CELL_STATUS; } if (!string.IsNullOrEmpty(RUN_STATUS)) { mWH_CELL.RUN_STATUS = RUN_STATUS; } this._P_WH_CELL.Update(mWH_CELL); } catch (Exception ex) { bResult = false; sResult = ex.Message; this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex); } return bResult; } /// /// 获得入库目标货位-就近原则 /// /// 库房 /// 库区 /// /// /// /// /// /// /// /// public bool CellGetIn(int WAREHOUSE_ID, int AREA_ID, int START_CELL_ID, string CELL_STATUS, string RUN_STATUS, string CELL_MODEL, string LOGIC_AREA, string STOCK_BARCODE, out int END_CELL_ID, out string sResult) { bool bResult = true; sResult = string.Empty; END_CELL_ID = 0; string DEVICE_CODE = string.Empty; try { SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(START_CELL_ID); if (mWH_CELL == null) { bResult = false; sResult = string.Format("起始位置索引[{0}]不存在", START_CELL_ID); return bResult; } string str = string.Format(@"SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='{0}' AND CONTROL_ROUTE_STATUS = 1", mWH_CELL.CELL_CODE); DataTable dt_route = this.GetList(str); //SiaSun.LMS.Model.IO_CONTROL_APPLY lsIO_CONTROL_APPLY = this._P_IO_CONTROL_APPLY.GetModelbyStart(3,"12101"); if (dt_route == null ) { bResult = false; sResult = string.Format("路径不通或无可用巷道,查看是否有报警或货位已满"); // lsIO_CONTROL_APPLY.APPLY_TASK_STATUS = 0; // this._P_IO_CONTROL_APPLY.Update(lsIO_CONTROL_APPLY); return bResult; } string strSQL = string.Format(@"SELECT * FROM WH_CELL WHERE 1=1 {0} {1} {2} {3} {4} {5} ORDER BY CELL_Z,CELL_Y,CELL_X", /*1*/(0 == AREA_ID) ? string.Empty : string.Format(" AND AREA_ID = {0}", AREA_ID), /*2*/string.IsNullOrEmpty(LOGIC_AREA) ? string.Empty : string.Format(" AND CELL_LOGICAL_NAME='{0}'", LOGIC_AREA), /*3*/ string.Format(" AND CELL_STATUS = '{0}'", Enum.CELL_STATUS.Nohave.ToString()), /*4*/string.Format(" AND RUN_STATUS = '{0}'", Enum.RUN_STATUS.Enable.ToString()), /*5 Normal路径*/string.Format(" AND DEVICE_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='{0}' AND CONTROL_ROUTE_STATUS = 1)", mWH_CELL.DEVICE_CODE), /*6*/string.Format(" AND LANE_WAY= '{0}'", mWH_CELL.LANE_WAY)); // DataTable dtCELLCount = base.GetList(strCount); // // 均匀分配任务//根据任务查巷道ljc20221126 // string strSQL1 = string.Format(@"SELECT count(V_MANAGE.DEVICE_CODE) as count ,V_DEVICE_CODE.DEVICE_CODE FROM V_MANAGE right join // V_DEVICE_CODE on V_DEVICE_CODE.DEVICE_CODE = V_MANAGE.DEVICE_CODE // where // V_DEVICE_CODE.DEVICE_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='12101' AND CONTROL_ROUTE_STATUS = 1) // and // V_DEVICE_CODE.DEVICE_CODE IN (SELECT DEVICE_CODE FROM WH_CELL // WHERE CELL_TYPE = 'Cell' AND CELL_STATUS = 'Nohave' AND RUN_STATUS = 'Enable' AND CELL_MODEL = '{0}' {1}) // group by V_DEVICE_CODE.DEVICE_CODE order by count,V_DEVICE_CODE.DEVICE_CODE desc", CELL_MODEL, // /*1*/string.IsNullOrEmpty(LOGIC_AREA) ? string.Empty : string.Format(" AND LOGIC_ID IN ({0})", Convert.ToInt32(LOGIC_AREA))); // DataTable dtCELL1 = base.GetList(strSQL1); // // DataTable dtStorage = base.GetList(strSQL2); // string device_codee = string.Empty; // string pin = string.Empty; // if (dtCELL1.Rows.Count > 0) // { // if (dtCELL1.Rows.Count > 1) // { // if (dtCELL1.Rows[0]["count"].ToString().Equals(dtCELL1.Rows[1]["count"].ToString())) // { // for (int i = 0; i < dtCELL1.Rows.Count; i++) // { // if (dtCELL1.Rows[0]["count"].ToString().Equals(dtCELL1.Rows[i]["count"].ToString())) // { // device_codee += dtCELL1.Rows[i]["DEVICE_CODE"].ToString() + ","; // } // } // device_codee = device_codee.Substring(0, device_codee.Length - 1); // pin = "(" + device_codee + ")"; // // 查每个巷道可用货位数量 // string strSQL2 = string.Format(@"SELECT count(wh_cell.DEVICE_CODE) as count ,V_DEVICE_CODE.DEVICE_CODE FROM V_MANAGE right join // V_DEVICE_CODE on V_DEVICE_CODE.DEVICE_CODE = V_MANAGE.DEVICE_CODE inner JOIN //wh_cell on V_DEVICE_CODE.DEVICE_CODE=wh_cell.DEVICE_CODE // where // V_DEVICE_CODE.DEVICE_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='12101' AND CONTROL_ROUTE_STATUS = 1) // and // wh_cell.DEVICE_CODE IN (SELECT DEVICE_CODE FROM WH_CELL // WHERE CELL_TYPE = 'Cell' AND CELL_STATUS = 'Nohave' AND RUN_STATUS = 'Enable' AND CELL_MODEL >= '{0}') and //wh_cell.CELL_TYPE = 'Cell' AND wh_cell.CELL_STATUS = 'Nohave' AND wh_cell.RUN_STATUS = 'Enable' AND wh_cell.CELL_MODEL >= '{0}' and V_DEVICE_CODE.DEVICE_CODE IN {1} {2} // group by V_DEVICE_CODE.DEVICE_CODE order by count desc,V_DEVICE_CODE.DEVICE_CODE desc", CELL_MODEL, pin, // /*2*/string.IsNullOrEmpty(LOGIC_AREA) ? string.Empty : string.Format(" AND LOGIC_ID IN ({0})", Convert.ToInt32(LOGIC_AREA))); // DataTable dtStorage = base.GetList(strSQL2); // if (dtStorage.Rows.Count > 0) // { // DEVICE_CODE = dtStorage.Rows[0]["DEVICE_CODE"].ToString(); // } // } // else // { // DEVICE_CODE = dtCELL1.Rows[0]["DEVICE_CODE"].ToString(); // } // } // else // { // DEVICE_CODE = dtCELL1.Rows[0]["DEVICE_CODE"].ToString(); // } // } // else // { // bResult = false; // sResult = string.Format("路径不通或无可用巷道,查看是否有报警或货位已满"); // lsIO_CONTROL_APPLY.APPLY_TASK_STATUS = 0; // this._P_IO_CONTROL_APPLY.Update(lsIO_CONTROL_APPLY); // return bResult; // } // string strSQL = string.Format(@"SELECT CELL_ID,CELL_Z,CELL_X,CELL_Y FROM WH_CELL // WHERE CELL_TYPE = 'Cell' // AND CELL_STATUS = 'Nohave' // AND RUN_STATUS = 'Enable' // AND CELL_MODEL >= '{0}' // AND DEVICE_CODE IN ({2}) {3} // ORDER BY CELL_Y , CELL_X DESC,CELL_Z ", CELL_MODEL, mWH_CELL.CELL_CODE, DEVICE_CODE, // /*3*/string.IsNullOrEmpty(LOGIC_AREA) ? string.Empty : string.Format(" AND LOGIC_ID IN ({0})", Convert.ToInt32(LOGIC_AREA))); DataTable dtCELL = base.GetList(strSQL); if (dtCELL.Rows.Count > 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID"]); } else { bResult = false; sResult = string.Format("货位不足") ; return bResult; } } catch (Exception ex) { bResult = false; sResult = ex.Message; this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex); } return bResult; } /// /// 根据巷道 物料及物料属性 获得出库货位 /// /// /// /// /// /// /// /// /// /// /// public bool CellOutAllocate(int LANE_WAY, int END_CELL_ID, int GOODS_ID, string GOODS_PROPERTY_CONDITION, decimal MANAGE_LIST_QUANTITY, out int START_CELL_ID, out string STOCK_BARCODE, out decimal STORAGE_LIST_QUANTITY, out string sResult) { bool bResult = false; sResult = string.Empty; START_CELL_ID = 0; STORAGE_LIST_QUANTITY = 0; STOCK_BARCODE = string.Empty; SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); bResult = null != mWH_CELL; if (!bResult) { sResult = "未找到出库站台"; return bResult; } string sSQL = string.Format(@"SELECT STORAGE_MAIN.CELL_ID ,STOCK_BARCODE , isnull(SUM(STORAGE_LIST_QUANTITY),0) AS MANAGE_LIST_QUANTITY FROM STORAGE_LIST INNER JOIN STORAGE_MAIN ON (STORAGE_LIST.STORAGE_ID = STORAGE_MAIN.STORAGE_ID ) INNER JOIN WH_CELL ON (STORAGE_MAIN.CELL_ID = WH_CELL.CELL_ID) WHERE GOODS_ID = {2} {0} {1} {3} AND LANE_WAY = {4} AND CELL_TYPE = 'Cell' AND CELL_INOUT!='In' GROUP BY STOCK_BARCODE, STORAGE_MAIN.CELL_ID, CELL_Y, CELL_X ORDER BY max(substring(ENTRY_TIME,0,11)), ABS({5}-isnull(SUM(STORAGE_LIST_QUANTITY),0)), MANAGE_LIST_QUANTITY DESC, CELL_Y, CELL_X", /*0*/string.Format(" AND CELL_STATUS != '{0}'", SiaSun.LMS.Enum.CELL_STATUS.Exception.ToString()), /*1*/string.Format(" AND RUN_STATUS = '{0}'", SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString()), /*2*/GOODS_ID, /*3*/ GOODS_PROPERTY_CONDITION, /*4*/LANE_WAY, /*5*/MANAGE_LIST_QUANTITY); DataTable dt = this.GetList(sSQL); bResult = dt.Rows.Count > 0; if (bResult) { START_CELL_ID = Convert.ToInt32(dt.Rows[0]["CELL_ID"]); STOCK_BARCODE = Convert.ToString(dt.Rows[0]["STOCK_BARCODE"]); STORAGE_LIST_QUANTITY = Convert.ToDecimal(dt.Rows[0]["MANAGE_LIST_QUANTITY"]); } else { START_CELL_ID = 0; sResult = string.Format("未找到出库货位"); } return bResult; } public bool GetOutEndStation(bool bContainer, int START_CELL_ID, int END_AREA_ID, out int END_CELL_ID, out string sResult) { bool bResult = true; sResult = string.Empty; END_CELL_ID = 0; try { SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(START_CELL_ID); if (mWH_CELL == null) { bResult = false; sResult = string.Format("起始位置索引[{0}]不存在", START_CELL_ID); return bResult; } string strSQL = string.Format(@"SELECT TOP 1 CELL_ID FROM WH_CELL WHERE CELL_TYPE = 'Station' AND CELL_INOUT='Out' {0} {1} {2} ORDER BY {3}CELL_MODEL,CELL_Z,CELL_X,CELL_Y", /*0*/string.Format(" AND DEVICE_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='{0}' AND CONTROL_ROUTE_STATUS = 1)", mWH_CELL.DEVICE_CODE), /*1*/END_AREA_ID == 0 ? string.Empty : string.Format(" AND AREA_ID={0}", END_AREA_ID), /*2*/bContainer ? string.Empty : string.Format(" AND CELL_MODEL!='-1' "), /*3*/string.Format("ABS({0}-LANE_WAY),", mWH_CELL.LANE_WAY)); DataTable dtCELL = base.GetList(strSQL); if (dtCELL.Rows.Count > 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID"]); } else { bResult = false; sResult = string.Format("起始位置[{0}]未找到可用下架站台,请确认WCS作业区模式、路径", mWH_CELL.CELL_NAME); return bResult; } } catch (Exception ex) { bResult = false; sResult = ex.Message; this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex); } return bResult; } /// /// 根据物料及物料属性获得下架巷道 /// /// /// /// /// /// /// public bool LaneWayGetList(int END_CELL_ID, int GOODS_ID, string GOODS_PROPERTY_CONDITION, out DataTable dtLANEWAY, out string sResult) { bool bResult = true; dtLANEWAY = null; sResult = string.Empty; SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); bResult = null != mWH_CELL; if (!bResult) { sResult = "未找到下架站台"; return bResult; } string sSQL = string.Format(@"SELECT DEVICE_CODE, LANE_WAY , SUM(STORAGE_LIST_QUANTITY) AS STORAGE_BALANCE, dbo.OUTTASKBALANCE(DEVICE_CODE) AS OUT_TASK_BALANCE FROM V_STORAGE_LIST WHERE GOODS_ID = {2} {3} AND CELL_TYPE = 'Cell' AND DEVICE_CODE IN (SELECT START_DEVICE FROM IO_CONTROL_ROUTE WHERE END_DEVICE='{4}' AND CONTROL_ROUTE_STATUS = 1) {0} {1} GROUP BY LANE_WAY,DEVICE_CODE", /*0*/string.Format(" AND ( CELL_STATUS != '{0}') ", SiaSun.LMS.Enum.CELL_STATUS.Exception.ToString()), /*1*/string.Format(" AND RUN_STATUS = '{0}'", SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString()), /*2*/GOODS_ID, /*3*/GOODS_PROPERTY_CONDITION, /*4*/mWH_CELL.DEVICE_CODE ); dtLANEWAY = this.GetList(sSQL); bResult = dtLANEWAY.Rows.Count > 0; if (!bResult) { sResult = string.Format("未找到满足条件的下架巷道"); return bResult; } return bResult; } /// /// 根据起始货位,获得终止站台 /// /// /// /// /// public bool GetOutStation(int START_CELL_ID, out int END_CELL_ID, out string sResult) { bool bResult = true; sResult = string.Empty; END_CELL_ID = 0; try { SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(START_CELL_ID); if (mWH_CELL == null) { bResult = false; sResult = string.Format("起始位置索引[{0}]不存在", START_CELL_ID); return bResult; } string strSQL = string.Format(@"SELECT TOP 1 CELL_ID FROM WH_CELL WHERE CELL_TYPE = 'Station' AND CELL_INOUT<>'In' {0} ORDER BY {1}CELL_MODEL,CELL_X,CELL_Y,CELL_Z", /*0*/string.Format(" AND DEVICE_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='{0}' AND CONTROL_ROUTE_STATUS = 1)", mWH_CELL.DEVICE_CODE), /*1*/string.Format("ABS({0}-LANE_WAY),", mWH_CELL.LANE_WAY)); DataTable dtCELL = base.GetList(strSQL); if (dtCELL.Rows.Count > 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID"]); } else { bResult = false; sResult = string.Format("起始位置[{0}]未找到下架站台", mWH_CELL.CELL_NAME); return bResult; } } catch (Exception ex) { bResult = false; sResult = ex.Message; this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex); } return bResult; } } }