using System; using System.Reflection; using System.Data; using System.Collections.Generic; namespace SiaSun.LMS.Implement { /// /// 申请上架 /// public class ApplyMoveUp : ApplyBase { public bool ApplyHandle(Model.IO_CONTROL_APPLY mIO_CONTROL_APPLY, out string sResult) { bool bResult = true; sResult = string.Empty; int START_CELL_ID = 0; int end_cell_id = 0; string applycell = string.Empty; string sql4=string.Empty; string sql5=string.Empty; string sql3= string.Empty; string sql6=string.Empty; DataTable dt4; DataTable dt5; try { //bResult = this.Validate(mIO_CONTROL_APPLY, out START_CELL_ID,out sResult); //if (!bResult) //{ // return bResult; //} ////调度申请,检测尺寸等报错回退 //if (!string.IsNullOrEmpty(mIO_CONTROL_APPLY.CONTROL_ERROR_TEXT)) //{ // bResult = false; // return bResult; //} //string STOCK_BARCODE =mIO_CONTROL_APPLY.STOCK_BARCODE.ToUpper(); applycell = "0" + mIO_CONTROL_APPLY.DEVICE_CODE.TrimEnd().Substring(1, 1) + "-" + mIO_CONTROL_APPLY.DEVICE_CODE.TrimEnd().Substring(2, 2) + "-" + "0" + mIO_CONTROL_APPLY.DEVICE_CODE.TrimEnd().Substring(4, 1); this._log.Fatal(string.Format("成功申请{0} {1} {2} {3}", mIO_CONTROL_APPLY.CONTROL_APPLY_ID, applycell, mIO_CONTROL_APPLY.CONTROL_ID,mIO_CONTROL_APPLY.DEVICE_CODE)); //查申请翻转货位的库存 string sql1 = string.Format("select * from v_storage_list where CELL_CODE='{0}'", applycell); DataTable dt1 = this.GetList(sql1); //查申请站台ID if (mIO_CONTROL_APPLY.DEVICE_CODE.Equals("12001")|| mIO_CONTROL_APPLY.DEVICE_CODE.Equals("12002") || mIO_CONTROL_APPLY.DEVICE_CODE.Equals("12003")) { sql3 = string.Format("select * from wh_cell where cell_code='{0}'", mIO_CONTROL_APPLY.DEVICE_CODE); } else { sql3 = string.Format("select * from wh_cell where cell_code='{0}'", applycell); } DataTable dt3 = this.GetList(sql3); ///查暂存区GOODS_ID #region 校验条码格式 //if (STOCK_BARCODE.Substring(0, 1).ToString() != "T" && STOCK_BARCODE.Substring(0, 1).ToString() != "A" // && STOCK_BARCODE.Substring(0, 1).ToString() != "B") //{ // bResult = false; // sResult = string.Format("条码格式不正确!"); // return bResult; //} #endregion //大连融科 12003下层空托回流 生成唯一码,时间戳代表条码 if (mIO_CONTROL_APPLY.DEVICE_CODE.Equals("12003")) { string STOCK_BARCODE = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString(); //入到正常货位里面,入空盘, bResult = new StockIn().ManageCreateBind(STOCK_BARCODE.TrimEnd(), Convert.ToInt32(dt3.Rows[0]["CELL_ID"].ToString()), 0, "0", "0", true, true, "SYS", out sResult); return bResult; } #region 查管理和调度任务 if (!string.IsNullOrEmpty(mIO_CONTROL_APPLY.STOCK_BARCODE)) { //查管理任务 sql4 = string.Format("select * from manage_main where stock_barcode='{0}'", mIO_CONTROL_APPLY.STOCK_BARCODE); dt4 = this.GetList(sql4); //查调度任务 sql5 = string.Format("select * from io_control where stock_barcode='{0}'", mIO_CONTROL_APPLY.STOCK_BARCODE); dt5 = this.GetList(sql5); } else { //查管理任务 sql4 = string.Format("select * from manage_main where stock_barcode='{0}'", mIO_CONTROL_APPLY.STOCK_BARCODE); dt4 = this.GetList(sql4); //查调度任务 sql5 = string.Format("select * from io_control where stock_barcode='{0}'", mIO_CONTROL_APPLY.STOCK_BARCODE); dt5 = this.GetList(sql5); } #endregion #region 查CELL_ID /////查暂存区CELL_ID //string sql6 = string.Format("SELECT CELL_ID FROM WH_CELL WHERE CELL_CODE = 'zcq'"); //DataTable dt6 = this.GetList(sql6); ///查CELL_ID string sql7 = string.Format("SELECT CELL_ID FROM WH_CELL WHERE CELL_CODE = '{0}'",mIO_CONTROL_APPLY.DEVICE_CODE); DataTable dt7 = this.GetList(sql7); #endregion //查翻转机构库存,CELL_LOGICAL_NAME是FZ就是翻转货位 string sqlfz = string.Format("select * from wh_cell where cell_status='Nohave' and run_status='Enable' and CELL_LOGICAL_NAME = 'FZ'"); DataTable dtfz = this.GetList(sqlfz); ///查库内空盘数量,如果无,就回库 string sql8 = string.Format("select * from v_storage_list where CELL_STATUS='Pallet' and AREA_TYPE = 'LiKu'"); DataTable dt8 = this.GetList(sql8); ///查库内空盘数量,如果无,就回库 string sql9 = string.Format("select * from v_manage where manage_type_code='StockIn'"); DataTable dt9 = this.GetList(sql9); ///查库内空盘入库数量 string sqlwj = string.Format("select * from WH_CELL where logic_id='1' and cell_status='Nohave' and run_status='Enable'"); DataTable dt_wj = this.GetList(sqlwj); string CELL_MODEL = string.Empty; ////电气申请入48个翻转机构,如果翻转机构没有可用,则入正常货位 if (mIO_CONTROL_APPLY.DEVICE_CODE == "12001") { //sql6 = string.Format(@"SELECT GOODS_ID FROM GOODS_MAIN WHERE GOODS_CODE = '{0}'", mIO_CONTROL_APPLY.STOCK_BARCODE.Substring(0, 12)); //DataTable dt6 = this.GetList(sql6); //if (dt6.Rows.Count <= 0) //{ // sResult = ""; // return false; //} //调用入库函数配盘入库 暂存区库存 SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = new Model.MANAGE_MAIN(); List listMANAGE_LIST =new List(); Model.MANAGE_LIST mANAGE_LIST =new Model.MANAGE_LIST(); mMANAGE_MAIN.MANAGE_TYPE_CODE = "ManageIn"; mMANAGE_MAIN.STOCK_BARCODE = mIO_CONTROL_APPLY.STOCK_BARCODE; mMANAGE_MAIN.CELL_MODEL = "0"; mMANAGE_MAIN.START_CELL_ID = 16644; mMANAGE_MAIN.END_CELL_ID = 16644; mMANAGE_MAIN.MANAGE_OPERATOR = "SYS"; mMANAGE_MAIN.MANAGE_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime(); mMANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.WaitingSend.ToString(); mMANAGE_MAIN.FULL_FLAG = "1"; mMANAGE_MAIN.MANAGE_LEVEL = string.Empty; mMANAGE_MAIN.MANAGE_REMARK = string.Empty; ////根据物料条码里面哪几位能看出是什么物料,获取goods_id // mANAGE_LIST.GOODS_ID = Convert.ToInt32(dt6.Rows[0]["GOODS_ID"].ToString()); //现场无法提供物料唯一编码,均按一种物料来保存,记录唯一码做托盘码,截取某一位(条码第14位,把-改成L)作为L\R。 mANAGE_LIST.GOODS_ID = 3103; mANAGE_LIST.GOODS_PROPERTY1 = mIO_CONTROL_APPLY.STOCK_BARCODE.Substring(13, 1); //GY GK,保存K,Y.... mANAGE_LIST.GOODS_PROPERTY2 = mIO_CONTROL_APPLY.STOCK_BARCODE.Substring(5, 1); mANAGE_LIST.MANAGE_ID = 0; mANAGE_LIST.PLAN_LIST_ID = 0; mANAGE_LIST.MANAGE_LIST_QUANTITY = 1; mANAGE_LIST.MANAGE_LIST_REMARK = ""; mANAGE_LIST.STORAGE_LIST_ID = 0; mANAGE_LIST.MANAGE_LIST_ID = 0; listMANAGE_LIST.Add(mANAGE_LIST); ////入到正常货位里面,logic_area=0传入,实际是用CELL_LOGIC_NAME来找的翻转货位,CELL表里面用CELL_LOGIC_NAME为FZ标记翻转货位, bResult = new ManageIn().ManageCreate(mMANAGE_MAIN, listMANAGE_LIST, true, true,false, out sResult); if (!bResult) { bResult = false; sResult = string.Format("托盘条码[{0}]未能生成暂存区库存!", mIO_CONTROL_APPLY.STOCK_BARCODE); return bResult; } //return bResult; // bool bResult = false; //bResult = MainApp._I_BaseService.Invoke(mMANAGE_TYPE.MANAGE_TYPE_CLASS.TrimEnd(), // "ManageCreate", // new object[] { mMANAGE_MAIN, // listMANAGE_LIST, // true, // true, // false, // }, // out strResult); //校验立库库存,有库存报错 if (!this._S_StorageService.StorageCheck(mIO_CONTROL_APPLY.STOCK_BARCODE.TrimEnd(), "LiKu", out sResult)) { ///上报高度 CELL_MODEL = "0"; //有管理和控制任务不能入库 if (dt4.Rows.Count > 0 || dt5.Rows.Count > 0) { bResult = false; sResult = string.Format("托盘条码[{0}]存在未完成的任务!", mIO_CONTROL_APPLY.STOCK_BARCODE); return bResult; } ////判断是否组过盘,是否有暂存区库存 //if (dt1.Rows.Count <= 0) //{ // bResult = false; // sResult = string.Format("托盘条码[{0}]无暂存区库存,请组盘(MES是否调用组盘信息或是否经过人工组盘)!", mIO_CONTROL_APPLY.STOCK_BARCODE); // return bResult; //} //判断翻转是否有可用货位 if (dtfz.Rows.Count <= 0) { //入到正常货位里面,logic_area=0传入,实际是用CELL_LOGIC_NAME来找的翻转货位,CELL表里面用CELL_LOGIC_NAME为FZ标记翻转货位, bResult = new ManageUp().ManageCreate(mIO_CONTROL_APPLY.STOCK_BARCODE.TrimEnd(), Convert.ToInt32(dt7.Rows[0]["CELL_ID"].ToString()), end_cell_id, "0", "0", true, true, "SYS", out sResult); return bResult; } else { //入到翻转货位里面 logic_area='FZ',传入,实际是用CELL_LOGIC_NAME来找的翻转货位,CELL表里面用CELL_LOGIC_NAME为FZ标记翻转货位 bResult = new ManageUp().ManageCreate(mIO_CONTROL_APPLY.STOCK_BARCODE.TrimEnd(), Convert.ToInt32(dt7.Rows[0]["CELL_ID"].ToString()), end_cell_id, "0", "FZ", true, true, "SYS", out sResult); return bResult; #region \\控制任务 暂时用不上 //SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = new SiaSun.LMS.Model.IO_CONTROL(); //mIO_CONTROL.RELATIVE_CONTROL_ID = -1; //mIO_CONTROL.MANAGE_ID = 0; //mIO_CONTROL.STOCK_BARCODE = mIO_CONTROL_APPLY.STOCK_BARCODE; //mIO_CONTROL.CONTROL_TASK_LEVEL = "0"; //mIO_CONTROL.PRE_CONTROL_STATUS = string.Empty; //mIO_CONTROL.CONTROL_TASK_TYPE = 4; //mIO_CONTROL.START_DEVICE_CODE = mIO_CONTROL_APPLY.DEVICE_CODE; //mIO_CONTROL.END_DEVICE_CODE = "12101"; //mIO_CONTROL.CONTROL_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime(); //mIO_CONTROL.CONTROL_STATUS = 0; //mIO_CONTROL.START_WAREHOUSE_CODE = "1"; //mIO_CONTROL.END_WAREHOUSE_CODE = "1"; //mIO_CONTROL.ERROR_TEXT = ""; //this._P_IO_CONTROL.Add(mIO_CONTROL); #endregion } //IList mlSTORAGE_MAIN = this._P_STORAGE_MAIN.GetListStockBarcode(mIO_CONTROL_APPLY.STOCK_BARCODE); //mlSTORAGE_MAIN[0].STORAGE_ID = Convert.ToInt32(dt1.Rows[0]["STORAGE_ID"]); //mlSTORAGE_MAIN[0].CELL_MODEL = CELL_MODEL; //this._P_STORAGE_MAIN.Update(mlSTORAGE_MAIN[0]); } else { bResult = false; sResult = string.Format("托盘条码[{0}]已有立库库存!", mIO_CONTROL_APPLY.STOCK_BARCODE); return bResult; } } #region //48个翻转机构申请,翻转完,电气申请入库正常货位 if (mIO_CONTROL_APPLY.DEVICE_CODE != "12001") { if(dt1.Rows.Count<=0) { sResult = "该物料没有库存信息,不能倒库"; bResult = false; return bResult; } //申请时候,代表完成翻转,将物料属性6,变成已翻转,也可以任务完成时候再更新,因为申请了,就只能代表翻转。 this.ExecuteNonQuery_ReturnInt(string.Format(@"update STORAGE_LIST set goods_property6='已翻转' WHERE STORAGE_ID='{0}'",Convert.ToInt32(dt1.Rows[0]["STORAGE_ID"]))); string strSQL = string.Format(@"SELECT * FROM WH_CELL WHERE 1=1 AND CELL_STATUS = 'Nohave' and cell_type='cell' and area_id=1 AND RUN_STATUS = 'Enable' and cell_z='{0}' and CELL_LOGICAL_NAME!='FZ' ORDER BY CELL_X,CELL_Y,CELL_Z", dt3.Rows[0]["cell_z"].ToString()); DataTable dt_end = this.GetList(strSQL); if (dt_end.Rows.Count<=0) { sResult = "没有可用货位,不能倒库"; bResult = false; return bResult; } //获取申请货位信息 Model.WH_CELL wh= this._P_WH_CELL.GetModel(applycell); //查申请选择货位库存 Model.STORAGE_MAIN sTORAGE_MAIN= this._P_STORAGE_MAIN.GetModelCellID(Convert.ToInt32(wh.CELL_ID)); bResult = new ManageMove().ManageCreate(sTORAGE_MAIN.STOCK_BARCODE.TrimEnd(), Convert.ToInt32(dt_end.Rows[0]["CELL_ID"].ToString()), true, true, "SYS", out sResult); //return bResult; } #endregion int cell_id =Convert.ToInt32(dt3.Rows[0]["cell_id"].ToString()); } catch (Exception ex) { bResult = false; sResult = ex.Message; this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex); } finally { if (!bResult) { ////南侧入口申请失败或者东侧碟盘申请失败送到出口 //if (mIO_CONTROL_APPLY.DEVICE_CODE == "12094" ) //{ // this.CreateApplyExceptionTask(mIO_CONTROL_APPLY,"12097",sResult); //} ////南侧入口申请失败或者东侧碟盘申请失败送到出口 //if (mIO_CONTROL_APPLY.DEVICE_CODE == "12052") //{ // this.CreateApplyExceptionTask(mIO_CONTROL_APPLY, "12101", sResult); //} ////ManageBase led = new ManageBase(); //// led.updateLedText(START_CELL_ID, 1, sResult); } //南侧入口申请失败或者东侧碟盘申请失败送到出口 //if (!sResult.Equals("路径不通或无可用巷道,查看是否有报警或货位已满")) //{ this.WriteHisData(mIO_CONTROL_APPLY, sResult); //} } return bResult; } } }