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; } /// 获得排 /// 获得排没有area_id区分 /// /// 库房编号 /// 库区编号 /// 存储区编号 /// 货位类型 /// 出入库方向 /// 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; } /// 获得排 /// 获得排有area_id区分 /// /// 库房编号 /// 库区编号 /// 存储区编号 /// 货位类型 /// 出入库方向 /// public DataTable CELL_Z_GetList_AREA(int WAREHOUSE_ID, int AREA_ID) { string sSQL = "SELECT * FROM V_WH_CELL_Z WHERE 1=1 {0} {1} 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()), (0 == AREA_ID) ? string.Empty : string.Format(" AND AREA_ID = {0}", AREA_ID.ToString()) )); 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 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, mWH_DESCRIPTION.CELL_WIDTH, mWH_DESCRIPTION.CELL_HEIGHT, Convert.ToInt32(mWH_DESCRIPTION.CELL_FORK_COUNT) ); else bResult = this.CellCreate(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, mWH_DESCRIPTION.CELL_WIDTH, mWH_DESCRIPTION.CELL_HEIGHT ); } } 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_WIDTH, int CELL_HEIGHT, 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.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_FLAG = "1"; mST_CELL.CELL_WIDTH = CELL_WIDTH; mST_CELL.CELL_HEIGHT = CELL_HEIGHT; 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'); if (SHELF_TYPE == "Double") { mST_CELL.LOCK_DEVICE_CODE = SHELF_NEIGHBOUR.ToString().PadLeft(2, '0') + "-" + x.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 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, int CELL_WIDTH, int CELL_HEIGHT ) { bool bResult = true; SiaSun.LMS.Model.WH_CELL mST_CELL = new SiaSun.LMS.Model.WH_CELL(); mST_CELL.AREA_ID = AREA_ID; mST_CELL.WAREHOUSE_ID = WAREHOUSE_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"; mST_CELL.CELL_HEIGHT = CELL_HEIGHT; mST_CELL.CELL_WIDTH = CELL_WIDTH; 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, out int END_CELL_ID, out string sResult) { sResult = string.Empty; bool bResult = true; int DEVICE_CODE = 0; int index = 0; int index_n = 0; string PnOrder = string.Empty; string ordered = string.Empty; string strLaneway = string.Empty; SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = this._P_MANAGE_MAIN.GetModel(MANAGE_ID); IList lsManageList = this._P_MANAGE_LIST.GetListManageID(MANAGE_ID); if (lsManageList == null) { sResult = string.Format("入库没有list明细"); END_CELL_ID = 0; return false; } else { PnOrder = string.IsNullOrEmpty(lsManageList[0].GOODS_PROPERTY2) ? " and 1=1 " : string.Format(@" and goods_property2='{0}'", lsManageList[0].GOODS_PROPERTY2); } //设备状态可用并且有可用货位的巷道 strLaneway = string.Format(@"SELECT DEVICE_CODE FROM (SELECT DISTINCT DEVICE_CODE AS DEVICE_CODE FROM WH_CELL INNER JOIN IO_CONTROL_ROUTE ON DEVICE_CODE = IO_CONTROL_ROUTE.END_DEVICE WHERE CELL_TYPE = 'Cell' AND START_DEVICE = {0} AND CONTROL_ROUTE_TYPE = 1 AND CONTROL_ROUTE_STATUS = 1 AND RUN_STATUS ='Enable' ) T ORDER BY DEVICE_CODE desc", START_DEVICE_CODE); //获得所有可用巷道 DataTable dt_laneway = this.GetList(strLaneway); if (dt_laneway.Rows.Count == 0) { sResult = string.Format("入库未找到可用路径,请检查设备状态"); END_CELL_ID = 0; return false; } if (dt_laneway.Rows.Count == 1) { DataTable dt_cellnear = this.GetList(string.Format(@"SELECT CELL_ID FROM WH_CELL WHERE DEVICE_CODE = {0} AND CELL_STATUS = 'Nohave' AND RUN_STATUS = 'Enable' AND CELL_FORK_TYPE = 'Near' AND CELL_TYPE ='Cell'", Convert.ToInt32(dt_laneway.Rows[0]["DEVICE_CODE"]))); if (dt_cellnear.Rows.Count < 3) { bResult = false; sResult = "当前双申巷道近端空货位不足,请查看!"; END_CELL_ID = 0; return bResult; } DEVICE_CODE = Convert.ToInt32(dt_laneway.Rows[0]["DEVICE_CODE"]); } #region 货物平均分配 可用巷道>=2时 if (dt_laneway.Rows.Count >= 2) { #region 排除掉没有可用货位的巷道 DataTable dt_laneway1 = dt_laneway.Clone(); dt_laneway1.Clear(); foreach (DataRow item in dt_laneway.Rows) { string x500 = string.Empty; if (lsManageList[0].MANAGE_LIST_QUANTITY > 500) { x500 = "AND CELL_X_NEAR>1"; } DataTable dt_cellnear1 = this.GetList(string.Format(@"SELECT 1 FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE DEVICE_CODE = {0} AND CELL_STATUS_NEAR = 'Nohave' AND RUN_STATUS_NEAR = 'Enable' AND RUN_STATUS = 'Enable' {1}", item["DEVICE_CODE"], x500)); // AND CELL_TYPE = 'Cell' if (dt_cellnear1.Rows.Count > 2) { dt_laneway1.Rows.Add(item.ItemArray); } } if (dt_laneway1.Rows.Count < 1) { sResult = string.Format("未找到可用货位"); END_CELL_ID = 0; return false; } else { dt_laneway = dt_laneway1; } #endregion //获得库存少的巷道 IList lsMANAGE_LIST = this._P_MANAGE_LIST.GetListManageID(mMANAGE_MAIN.MANAGE_ID); DataTable dt_nohave = null; DataTable dt_manage_num = null; DataTable lane_way = null; int manage_num = Convert.ToInt32(SiaSun.LMS.Common.StringUtil.GetConfig("ManageCountLimit").ToString()); int[] su = new int[dt_laneway.Rows.Count]; int[] sm = new int[dt_laneway.Rows.Count]; for (int i = 0; i < dt_laneway.Rows.Count; i++) { //当前巷道的库存数 //AND RUN_STATUS = 'Enable' dt_nohave = this.GetList(string.Format(@"SELECT CELL_ID FROM WH_CELL WHERE CELL_TYPE ='Cell' AND CELL_STATUS='Nohave' AND DEVICE_CODE = '{0}'", Convert.ToInt32(dt_laneway.Rows[i]["DEVICE_CODE"]) )); lane_way = this.GetList(string.Format(@"SELECT TOP 1 * FROM WH_CELL WHERE device_code = {0} AND CELL_TYPE ='Cell'", Convert.ToInt32(dt_laneway.Rows[i]["DEVICE_CODE"]))); //当前巷道的任务数 dt_manage_num = this.GetList(string.Format(@"SELECT * FROM V_MANAGE WHERE LANE_WAY = {0} AND MANAGE_STATUS = 'Executing' AND MANAGE_TYPE_CLASS in ('ManageIn','StockInMin','StockIn','ManageUp')", lane_way.Rows[0]["LANE_WAY"])); su[i] = dt_nohave.Rows.Count;//记库存数 sm[i] = dt_manage_num.Rows.Count;//记任务数 } #region 原入库分配巷道逻辑 //int iMinIndex = 0; //for (int i = 1; i < dt_laneway.Rows.Count; ++i) //{ // if (sm[i] < sm[iMinIndex]) // { // iMinIndex = i; // } // else if (sm[i] == sm[iMinIndex] && su[i] > su[iMinIndex]) // { // iMinIndex = i; // } //} //DEVICE_CODE = Convert.ToInt32(dt_laneway.Rows[iMinIndex]["DEVICE_CODE"]); #endregion #region 新入库分配巷道逻辑 index_n = SiaSun.LMS.Common.StringUtil.CheckMin(sm); DEVICE_CODE = Convert.ToInt32(dt_laneway.Rows[index_n]["DEVICE_CODE"]); #endregion //index = SiaSun.LMS.Common.StringUtil.CheckMin(su); //index_n = SiaSun.LMS.Common.StringUtil.CheckMin(sm); //if (sm[index] >= manage_num) //{ // DEVICE_CODE = Convert.ToInt32(dt_laneway.Rows[index_n]["DEVICE_CODE"]); //} //else //{ // DEVICE_CODE = Convert.ToInt32(dt_laneway.Rows[index]["DEVICE_CODE"]); //} ////优先入库双伸巷道的空货位数 //DataTable dt_cellnear = this.GetList(string.Format(@"SELECT CELL_ID // FROM WH_CELL // WHERE DEVICE_CODE = {0} // AND CELL_STATUS = 'Nohave' // AND RUN_STATUS = 'Enable' // AND CELL_FORK_TYPE = 'Near' // AND CELL_TYPE ='Cell'", DEVICE_CODE)); //if (dt_cellnear.Rows.Count == 2) //{ // bResult = false; // sResult = "当前双申巷道近端空货位货位不足,请查看!"; // END_CELL_ID = 0; // return bResult; //} } #endregion string strSQL = string.Empty; DataTable dtCELL = null; //GOODS_MAIN gm = this._P_GOODS_MAIN.GetModel(lsManageList[0].GOODS_ID); //if (gm == null) //{ // bResult = false; // sResult = string.Format("未找到物料ID {0}", lsManageList[0].GOODS_ID); // END_CELL_ID = 0; // return bResult; //} #region//母托盘入库 if (mMANAGE_MAIN.MANAGE_TYPE_CODE == "StockIn") { ///条件1: ///Double有货无任务,且Double物料与上架物料一致时,选择Normal空货位 strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' AND CELL_STATUS = 'Pallet' AND RUN_STATUS_NEAR = 'Enable' AND DEVICE_CODE = {0} AND CELL_STATUS_NEAR ='Nohave' ORDER BY CELL_X,CELL_Y", DEVICE_CODE); dtCELL = this.GetList(strSQL); if (dtCELL.Rows.Count != 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); this._P_WH_CELL.Update(mEND_WH_CELL); return true; } ///条件2: ///Double无货有任务,且Double任务物料与上架物料一致时,选择Normal空货位 //strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Selected' AND CELL_STATUS = 'Nohave' // AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' AND DEVICE_CODE = {0} // ORDER BY CELL_Y,CELL_X", DEVICE_CODE); //dtCELL = this.GetList(strSQL); //if (dtCELL.Rows.Count != 0) //{ // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // this._P_WH_CELL.Update(mEND_WH_CELL); // return true; //} ///条件2:Double 无货无任务禁用状态 strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS IN ('Disable') and device_code = '{0}' and CELL_STATUS ='Nohave' AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' ORDER BY CELL_X,CELL_Y", DEVICE_CODE); dtCELL = this.GetList(strSQL); if (dtCELL.Rows.Count > 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); this._P_WH_CELL.Update(mEND_WH_CELL); return true; } ///条件3: ///Double无任务,货位状态空容器-运行状态为可用/禁用,选择Normal空货位 strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS IN ('Disable','Enable') AND CELL_STATUS IN ('Pallet') AND RUN_STATUS_NEAR = 'Enable' AND DEVICE_CODE = {0} AND CELL_STATUS_NEAR ='Nohave' ORDER BY CELL_X,CELL_Y", DEVICE_CODE); dtCELL = this.GetList(strSQL); if (dtCELL.Rows.Count != 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); this._P_WH_CELL.Update(mEND_WH_CELL); return true; } ///条件4: ///Double和Normal全部空货位,选择Double空货位 strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' AND CELL_STATUS = 'Nohave' AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' AND DEVICE_CODE = {0} ORDER BY CELL_X,CELL_Y", DEVICE_CODE); dtCELL = this.GetList(strSQL); if (dtCELL.Rows.Count != 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_FAR"].ToString()); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); this._P_WH_CELL.Update(mEND_WH_CELL); return true; } strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS IN ('Disable','Enable') AND CELL_STATUS not IN ('Nohave') AND RUN_STATUS_NEAR = 'Enable' AND DEVICE_CODE = {0} AND CELL_STATUS_NEAR ='Nohave' ORDER BY CELL_X,CELL_Y", DEVICE_CODE); dtCELL = this.GetList(strSQL); if (dtCELL.Rows.Count == 0) { bResult = false; sResult = "当前双申巷道空货位货位不足,请查看!"; END_CELL_ID = 0; return bResult; } else { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); this._P_WH_CELL.Update(mEND_WH_CELL); return true; } } #endregion #region 货物入库 else { //分配的巷道为双申巷道 ///条件1: ///Double有货无任务,且Double物料与上架物料批次一致时,选择Normal空货位 /// string x500 = string.Empty; if (lsManageList[0].MANAGE_LIST_QUANTITY > 500) { x500 = "AND CELL_X>1"; } strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' AND DEVICE_CODE='{0}' AND CELL_STATUS = 'Full' AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' {1} AND GOODS_ID = {2} {3} ORDER BY CELL_Y,CELL_X", DEVICE_CODE, PnOrder, lsManageList[0].GOODS_ID, x500); dtCELL = this.GetList(strSQL); if (dtCELL.Rows.Count > 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); this._P_WH_CELL.Update(mEND_WH_CELL); return true; } ///条件2:Double 无货禁用状态 /// strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Disable' AND DEVICE_CODE = '{0}' AND CELL_STATUS ='Nohave' AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' {1} ORDER BY CELL_Y,CELL_X", DEVICE_CODE, x500); dtCELL = this.GetList(strSQL); if (dtCELL.Rows.Count > 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); this._P_WH_CELL.Update(mEND_WH_CELL); return true; } ///条件4: /// Double和Normal全部空货位,选择Double空货位 /// (RUN_STATUS_NEAR = 'Enable' or RUN_STATUS_NEAR = 'Disable') strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' AND CELL_STATUS = 'Nohave' AND DEVICE_CODE = {0} AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' {1} ORDER BY CELL_Y,CELL_X", DEVICE_CODE, x500); dtCELL = this.GetList(strSQL); if (dtCELL.Rows.Count > 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_FAR"].ToString()); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); this._P_WH_CELL.Update(mEND_WH_CELL); return true; } ///条件5: ///Double有货无任务,选择Normal空货位 /// strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' AND DEVICE_CODE='{0}' AND CELL_STATUS = 'Full' AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' {1} ORDER BY CELL_Y,CELL_X", DEVICE_CODE, x500); dtCELL = this.GetList(strSQL); if (dtCELL.Rows.Count > 0) { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); this._P_WH_CELL.Update(mEND_WH_CELL); return true; } ///条件6: ///Double全部为实货位,运行状态为禁用,Double物料与上架物料的批次不同,选择Normal空货位 /// strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS in ('Enable','Disable') AND CELL_STATUS in ('Full','Forbiden') AND DEVICE_CODE = {0} AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' {1} ORDER BY CELL_Y,CELL_X", DEVICE_CODE, x500); dtCELL = this.GetList(strSQL); if (dtCELL.Rows.Count == 0) { bResult = false; END_CELL_ID = 0; sResult = "无法找到入库货位"; return bResult; } else { END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); this._P_WH_CELL.Update(mEND_WH_CELL); return true; } } #endregion } //public bool CellMoveAllocate(string START_DEVICE_CODE, string CELL_MODEL, int MANAGE_ID, out int END_CELL_ID, out string sResult) //{ // sResult = string.Empty; // bool bResult = true; // int DEVICE_CODE = 0; // int index = 0; // int index_n = 0; // string PnOrder = string.Empty; // string ordered = string.Empty; // string strLaneway = string.Empty; // SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = this._P_MANAGE_MAIN.GetModel(MANAGE_ID); // IList lsManageList = this._P_MANAGE_LIST.GetListManageID(MANAGE_ID); // if (lsManageList == null) // { // sResult = string.Format("入库没有list明细"); // END_CELL_ID = 0; // return false; // } // else // { // PnOrder = string.IsNullOrEmpty(lsManageList[0].GOODS_PROPERTY2) ? " and 1=1 " : string.Format(@" and goods_property2='{0}'", lsManageList[0].GOODS_PROPERTY2); // } // //设备状态可用并且有可用货位的巷道 // strLaneway = string.Format(@"SELECT DEVICE_CODE // FROM (SELECT DISTINCT DEVICE_CODE AS DEVICE_CODE // FROM WH_CELL // INNER JOIN IO_CONTROL_ROUTE ON DEVICE_CODE = // IO_CONTROL_ROUTE.END_DEVICE // WHERE CELL_TYPE = 'Cell' // AND START_DEVICE = {0} // AND CONTROL_ROUTE_TYPE = 3 // AND CONTROL_ROUTE_STATUS = 1 // AND RUN_STATUS ='Enable' // ) T ORDER BY DEVICE_CODE desc", START_DEVICE_CODE); // //获得所有可用巷道 // DataTable dt_laneway = this.GetList(strLaneway); // if (dt_laneway.Rows.Count == 0) // { // sResult = string.Format("入库未找到可用路径,请检查设备状态"); // END_CELL_ID = 0; // return false; // } // if (dt_laneway.Rows.Count == 1) // { // DataTable dt_cellnear = this.GetList(string.Format(@"SELECT CELL_ID // FROM WH_CELL // WHERE DEVICE_CODE = {0} // AND CELL_STATUS = 'Nohave' // AND RUN_STATUS = 'Enable' // AND CELL_FORK_TYPE = 'Near' // AND CELL_TYPE ='Cell'", // Convert.ToInt32(dt_laneway.Rows[0]["DEVICE_CODE"]))); // if (dt_cellnear.Rows.Count == 2) // { // bResult = false; // sResult = "当前双申巷道近端空货位不足,请查看!"; // END_CELL_ID = 0; // return bResult; // } // DEVICE_CODE = Convert.ToInt32(dt_laneway.Rows[0]["DEVICE_CODE"]); // } // #region 货物平均分配 可用巷道>=2时 // if (dt_laneway.Rows.Count >= 2) // { // #region 排除掉没有可用货位的巷道 // DataTable dt_laneway1 = dt_laneway.Clone(); // dt_laneway1.Clear(); // foreach (DataRow item in dt_laneway.Rows) // { // DataTable dt_cellnear1 = this.GetList(string.Format(@"SELECT CELL_ID // FROM WH_CELL // WHERE DEVICE_CODE = {0} // AND CELL_STATUS = 'Nohave' // AND RUN_STATUS = 'Enable' // AND CELL_FORK_TYPE = 'Near' // AND CELL_TYPE ='Cell'", item["DEVICE_CODE"])); // if (dt_cellnear1.Rows.Count >= 2) // { // dt_laneway1.Rows.Add(item.ItemArray); // } // } // if (dt_laneway1.Rows.Count < 1) // { // sResult = string.Format("未找到可用货位"); // END_CELL_ID = 0; // return false; // } // else // { // dt_laneway = dt_laneway1; // } // #endregion // //获得库存少的巷道 // IList lsMANAGE_LIST = this._P_MANAGE_LIST.GetListManageID(mMANAGE_MAIN.MANAGE_ID); // DataTable dt_storage = null; // DataTable dt_manage_num = null; // DataTable lane_way = null; // int manage_num = Convert.ToInt32(SiaSun.LMS.Common.StringUtil.GetConfig("ManageCountLimit").ToString()); // int[] su = new int[dt_laneway.Rows.Count]; // int[] sm = new int[dt_laneway.Rows.Count]; // for (int i = 0; i < dt_laneway.Rows.Count; i++) // { // //当前巷道的库存数 // //AND RUN_STATUS = 'Enable' // dt_storage = this.GetList(string.Format(@"SELECT CELL_ID FROM WH_CELL // WHERE CELL_TYPE ='Cell' AND CELL_STATUS NOT LIKE '%No%' // AND DEVICE_CODE = '{0}'", // Convert.ToInt32(dt_laneway.Rows[i]["DEVICE_CODE"]) // )); // lane_way = this.GetList(string.Format(@"SELECT TOP 1 * FROM WH_CELL WHERE device_code = {0} AND CELL_TYPE ='Cell'", // Convert.ToInt32(dt_laneway.Rows[i]["DEVICE_CODE"]))); // //当前巷道的任务数 // dt_manage_num = this.GetList(string.Format(@"SELECT * FROM V_MANAGE WHERE LANE_WAY = {0} AND MANAGE_STATUS = 'Executing' // AND MANAGE_TYPE_CLASS in ('ManageIn','StockInMin','StockIn','ManageUp')", // lane_way.Rows[0]["LANE_WAY"])); // su[i] = dt_storage.Rows.Count;//记库存数 // sm[i] = dt_manage_num.Rows.Count;//记任务数 // } // index = SiaSun.LMS.Common.StringUtil.CheckMin(su); // index_n = SiaSun.LMS.Common.StringUtil.CheckMin(sm); // if (sm[index] >= manage_num) // { // DEVICE_CODE = Convert.ToInt32(dt_laneway.Rows[index_n]["DEVICE_CODE"]); // } // else // { // DEVICE_CODE = Convert.ToInt32(dt_laneway.Rows[index]["DEVICE_CODE"]); // } // //优先入库双伸巷道的空货位数 // DataTable dt_cellnear = this.GetList(string.Format(@"SELECT CELL_ID // FROM WH_CELL // WHERE DEVICE_CODE = {0} // AND CELL_STATUS = 'Nohave' // AND RUN_STATUS = 'Enable' // AND CELL_FORK_TYPE = 'Near' // AND CELL_TYPE ='Cell'", DEVICE_CODE)); // if (dt_cellnear.Rows.Count == 2) // { // bResult = false; // sResult = "当前双申巷道近端空货位货位不足,请查看!"; // END_CELL_ID = 0; // return bResult; // } // } // #endregion // string strSQL = string.Empty; // DataTable dtCELL = null; // //GOODS_MAIN gm = this._P_GOODS_MAIN.GetModel(lsManageList[0].GOODS_ID); // //if (gm == null) // //{ // // bResult = false; // // sResult = string.Format("未找到物料ID {0}", lsManageList[0].GOODS_ID); // // END_CELL_ID = 0; // // return bResult; // //} // #region//母托盘入库 // if (mMANAGE_MAIN.MANAGE_TYPE_CODE == "StockIn") // { // ///条件1: // ///Double有货无任务,且Double物料与上架物料一致时,选择Normal空货位 // strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' // AND CELL_STATUS = 'Pallet' AND RUN_STATUS_NEAR = 'Enable' AND DEVICE_CODE = {0} // AND CELL_STATUS_NEAR ='Nohave' ORDER BY CELL_Y,CELL_X", DEVICE_CODE); // dtCELL = this.GetList(strSQL); // if (dtCELL.Rows.Count != 0) // { // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // this._P_WH_CELL.Update(mEND_WH_CELL); // return true; // } // ///条件2: // ///Double无货有任务,且Double任务物料与上架物料一致时,选择Normal空货位 // //strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Selected' AND CELL_STATUS = 'Nohave' // // AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' AND DEVICE_CODE = {0} // // ORDER BY CELL_Y,CELL_X", DEVICE_CODE); // //dtCELL = this.GetList(strSQL); // //if (dtCELL.Rows.Count != 0) // //{ // // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); // // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // // this._P_WH_CELL.Update(mEND_WH_CELL); // // return true; // //} // ///条件2:Double 无货无任务禁用状态 // strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS IN ('Disable') // and device_code = '{0}' and CELL_STATUS ='Nohave' AND RUN_STATUS_NEAR = 'Enable' // AND CELL_STATUS_NEAR ='Nohave' ORDER BY CELL_Y,CELL_X", DEVICE_CODE); // dtCELL = this.GetList(strSQL); // if (dtCELL.Rows.Count > 0) // { // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // this._P_WH_CELL.Update(mEND_WH_CELL); // return true; // } // ///条件3: // ///Double无任务,货位状态空容器-运行状态为可用/禁用,选择Normal空货位 // strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS IN ('Disable','Enable') // AND CELL_STATUS IN ('Pallet') AND RUN_STATUS_NEAR = 'Enable' // AND DEVICE_CODE = {0} AND CELL_STATUS_NEAR ='Nohave' // ORDER BY CELL_Y,CELL_X", DEVICE_CODE); // dtCELL = this.GetList(strSQL); // if (dtCELL.Rows.Count != 0) // { // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // this._P_WH_CELL.Update(mEND_WH_CELL); // return true; // } // ///条件4: // ///Double和Normal全部空货位,选择Double空货位 // strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' AND CELL_STATUS = 'Nohave' // AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' AND DEVICE_CODE = {0} // ORDER BY CELL_Y,CELL_X", DEVICE_CODE); // dtCELL = this.GetList(strSQL); // if (dtCELL.Rows.Count == 0) // { // bResult = false; // sResult = "当前双申巷道空货位货位不足,请查看!"; // END_CELL_ID = 0; // return bResult; // } // else // { // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_FAR"].ToString()); // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // this._P_WH_CELL.Update(mEND_WH_CELL); // return true; // } // } // #endregion // #region 货物入库 // else // { // //分配的巷道为双申巷道 // ///条件1: // ///Double有货无任务,且Double物料与上架物料批次一致时,选择Normal空货位 // /// // strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' // AND DEVICE_CODE='{0}' // AND CELL_STATUS = 'Full' // AND RUN_STATUS_NEAR = 'Enable' // AND CELL_STATUS_NEAR ='Nohave' // {1} // AND GOODS_ID = {2} // AND CELL_X>1 // ORDER BY CELL_Y,CELL_X", // DEVICE_CODE, PnOrder, lsManageList[0].GOODS_ID); // dtCELL = this.GetList(strSQL); // if (dtCELL.Rows.Count > 0) // { // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // this._P_WH_CELL.Update(mEND_WH_CELL); // return true; // } // ///条件2:Double 无货禁用状态 // /// // strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Disable' // AND DEVICE_CODE = '{0}' // AND CELL_STATUS ='Nohave' // AND RUN_STATUS_NEAR = 'Enable' // AND CELL_STATUS_NEAR ='Nohave' // AND CELL_X>1 // ORDER BY CELL_Y,CELL_X", // DEVICE_CODE); // dtCELL = this.GetList(strSQL); // if (dtCELL.Rows.Count > 0) // { // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // this._P_WH_CELL.Update(mEND_WH_CELL); // return true; // } // ///条件4: // /// Double和Normal全部空货位,选择Double空货位 // /// (RUN_STATUS_NEAR = 'Enable' or RUN_STATUS_NEAR = 'Disable') // strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' // AND CELL_STATUS = 'Nohave' // AND DEVICE_CODE = {0} // AND RUN_STATUS_NEAR = 'Enable' // AND CELL_STATUS_NEAR ='Nohave' // AND CELL_X>1 // ORDER BY CELL_Y,CELL_X", // DEVICE_CODE); // dtCELL = this.GetList(strSQL); // if (dtCELL.Rows.Count > 0) // { // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_FAR"].ToString()); // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // this._P_WH_CELL.Update(mEND_WH_CELL); // return true; // } // ///条件5: // ///Double有货无任务,选择Normal空货位 // /// // strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' // AND DEVICE_CODE='{0}' // AND CELL_STATUS = 'Full' // AND RUN_STATUS_NEAR = 'Enable' // AND CELL_STATUS_NEAR ='Nohave' // AND CELL_X>1 // ORDER BY CELL_Y,CELL_X", // DEVICE_CODE); // dtCELL = this.GetList(strSQL); // if (dtCELL.Rows.Count > 0) // { // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // this._P_WH_CELL.Update(mEND_WH_CELL); // return true; // } // ///条件6: // ///Double全部为实货位,运行状态为禁用,Double物料与上架物料的批次不同,选择Normal空货位 // /// // strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS in ('Enable','Disable') // AND CELL_STATUS in ('Full','Forbiden') // AND DEVICE_CODE = {0} // AND RUN_STATUS_NEAR = 'Enable' // AND CELL_STATUS_NEAR ='Nohave' // AND CELL_X>1 // ORDER BY CELL_Y,CELL_X", // DEVICE_CODE); // dtCELL = this.GetList(strSQL); // if (dtCELL.Rows.Count == 0) // { // bResult = false; // END_CELL_ID = 0; // sResult = "无法找到入库货位"; // return bResult; // } // else // { // END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString()); // SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID); // mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString(); // this._P_WH_CELL.Update(mEND_WH_CELL); // return true; // } // } // #endregion //} /// /// 根据起始位置分配终止位置,适合终止位置为固定授货台 /// 成品库获得出库站台 /// /// /// /// public bool CellOutAllocate(string START_DEVICE_CODE, out int END_CELL_ID, out string sResult) { bool bResult = false; sResult = string.Empty; int index = 0; string strSQL = string.Empty; DataTable dt = null; END_CELL_ID = 0; //出库-》站台 strSQL = string.Format(@"SELECT CELL_ID,CELL_CODE FROM WH_CELL WHERE CELL_TYPE ='Station' AND CELL_INOUT = 'Out' AND CELL_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE = (SELECT DEVICE_CODE FROM WH_CELL WHERE CELL_CODE = '{0}') AND CONTROL_ROUTE_STATUS =1)", START_DEVICE_CODE); dt = this.GetList(strSQL); bResult = dt.Rows.Count > 0; if (bResult) { //两个以上(包含两个)可用站台 if (dt.Rows.Count > 1) { DataTable dt_manage = null; int[] su = new int[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { dt_manage = this.GetList(string.Format(@"SELECT MANAGE_ID FROM MANAGE_MAIN WHERE END_CELL_ID = {0}", Convert.ToInt32(dt.Rows[i]["CELL_ID"]))); su[i] = dt_manage.Rows.Count; } index = SiaSun.LMS.Common.StringUtil.CheckMin(su); END_CELL_ID = Convert.ToInt32(dt.Rows[index]["CELL_ID"]); } else { END_CELL_ID = Convert.ToInt32(dt.Rows[0]["CELL_ID"]); } } else { sResult = string.Format("未找到出库货位"); return false; } 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 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.Pallet.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 AND CONTROL_ROUTE_TYPE = 2) {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 LaneWayGetListPlan(int END_CELL_ID, int GOODS_ID, string GOODS_PROPERTY_CONDITION, out DataTable dtLANEWAY, out string sResult) { bool bResult = true; dtLANEWAY = null; string sSQL = string.Empty; 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; } if (GOODS_ID == -1 || GOODS_ID == 102)//托盘和货笼 { sSQL = string.Format(@"SELECT DEVICE_CODE, LANE_WAY , SUM(STORAGE_LIST_QUANTITY) AS STORAGE_BALANCE, SUM(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 ); } else if (GOODS_ID == 3)//成品 { sSQL = string.Format(@"SELECT DEVICE_CODE, LANE_WAY , SUM(STORAGE_LIST_QUANTITY) AS STORAGE_BALANCE, SUM(DEVICE_CODE) AS OUT_TASK_BALANCE FROM V_STORAGE_LIST WHERE GOODS_ID = {2} AND GOODS_PROPERTY1='{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 ); } else { sSQL = string.Format(@"SELECT DEVICE_CODE, LANE_WAY , SUM(STORAGE_LIST_QUANTITY) AS STORAGE_BALANCE, SUM(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 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; } if (mWH_CELL.CELL_TYPE == Enum.CELL_TYPE.Cell.ToString() || mWH_CELL.CELL_STORAGE_TYPE == Enum.CELL_STORAGE_TYPE.Single.ToString()) { 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; } } }