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; namespace SiaSun.LMS.Implement { [ServiceBehavior(IncludeExceptionDetailInFaults = true,InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple,MaxItemsInObjectGraph=int.MaxValue)] public partial class S_CellService : SiaSun.LMS.Implement.S_BaseService, SiaSun.LMS.Interface.I_CellService { public S_CellService() { } /// 获得库房 /// 获得库房 /// /// 库房编码 /// 返回值 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 1=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 WAREHOUSE_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 == WAREHOUSE_ID) ? string.Empty : string.Format(" AND WAREHOUSE_ID = {0}", WAREHOUSE_ID.ToString()) )); return dt; } /// 货位尺寸查询 /// 货位尺寸查询 /// /// 库房编号 /// 库区编号 /// 存储区编号 /// 排 /// 货位类型 /// 出入库方向 /// 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 FROM V_WH_CELL WHERE 1=1 {0} {1} {2}"; string sql=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()) ); DataTable dt = this.GetList(sql); return dt; } public IList CELL_GetList_Z(int WAREHOUSE_ID, string CELL_Z) { return this._P_WH_CELL.CELL_GetList_Z(WAREHOUSE_ID,CELL_Z); } public object GetModelArea(int AREA_ID) { return this._P_WH_AREA.GetModel(AREA_ID); } 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.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) ); else bResult = this.CellCreate(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 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 ) { 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.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_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'); //lyc this._P_WH_CELL.Add(mST_CELL); //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 CellCreate(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.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 CellOutAllocate(int LANE_WAY, int END_CELL_ID, int GOODS_ID, string GOODS_PROPERTY, 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' GROUP BY STOCK_BARCODE, STORAGE_MAIN.CELL_ID, CELL_Y, CELL_X {6} 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.Full.ToString()), /*1*/string.Format(" AND RUN_STATUS = '{0}'", SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString()), /*2*/GOODS_ID, /*3*/ GOODS_PROPERTY, /*4*/LANE_WAY, /*5*/MANAGE_LIST_QUANTITY, /*6自动检定必须是24*/(GOODS_ID.Equals(1) && mWH_CELL.CELL_CODE.Equals("22004")) ? " HAVING ISNULL(SUM(STORAGE_LIST_QUANTITY),0) = 24" : string.Empty); //, ///*7任务号*/ string.IsNullOrEmpty(IO_TASK_NO)? //string.Format(" and ( IO_TASK_NO = '' or IO_TASK_NO is null)"): //string.Format(" and ( IO_TASK_NO = '{0}' or IO_TASK_NO = '' or IO_TASK_NO is null)", IO_TASK_NO) 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 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}' or CELL_STATUS = '{1}') ", SiaSun.LMS.Enum.CELL_STATUS.Full.ToString(),SiaSun.LMS.Enum.CELL_STATUS.Pallet.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 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; } 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; } try { 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; } return bResult; } } }