using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Reflection; using SiaSun.LMS.Model; namespace SiaSun.LMS.Implement { public class ControlBase : S_BaseService,SiaSun.LMS.Interface.I_ControlService { #region CONTROL_消息队列 public void ControlTaskChangeThread(Msg_Control_Task_Change msg) { try { bool bResult = true; string sResult = string.Empty; DataTable dt = this.GetList(string.Format(@"select * from V_FLOW_CONTROL_ACTION where MANAGE_ID = {0} and CONTROL_STATUS = '{1}'" , msg.MANAGE_ID, msg.CONTROL_STATUS)); if (dt.Rows.Count.Equals(0)) { return; } DataRow dr = dt.Rows[0]; IList lsFLOW_PARA = this._S_FlowService.FlowGetParameters("FLOW_CONTROL"); string[] aFLOW_PARA = new string[lsFLOW_PARA.Count]; int i = 0; foreach (SiaSun.LMS.Model.FLOW_PARA mFLOW_PARA in lsFLOW_PARA) { aFLOW_PARA[i] = dr[mFLOW_PARA.FLOW_PARA_CODE].ToString(); i++; } SiaSun.LMS.Model.MANAGE_ACTION_EXCUTE mt = new SiaSun.LMS.Model.MANAGE_ACTION_EXCUTE(); mt.MANAGE_ID = Convert.ToInt32(dr["MANAGE_ID"]); mt.ACTION_EVENT = dr["FLOW_ACTION_EVENT"].ToString(); mt.ACTION_EVENT = string.Format(mt.ACTION_EVENT, aFLOW_PARA); bResult = this._S_FlowService.ManageEventExecute(mt, out sResult); if (!bResult) { SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = this._P_MANAGE_MAIN.GetModel(Convert.ToInt32(dr["MANAGE_ID"])); mMANAGE_MAIN.MANAGE_STATUS = Enum.MANAGE_STATUS.Error.ToString(); mMANAGE_MAIN.MANAGE_REMARK = sResult; this._P_MANAGE_MAIN.Update(mMANAGE_MAIN); this._log.Fatal(string.Format("执行事件失败{0} {1}", mt.MANAGE_ID, mt.ACTION_EVENT)); } } catch (Exception ex) { this._log.Fatal("ControlTaskChangeThread任务处理异常", ex); } } #endregion #region APPLY_消息队列 public void ControlApplyThread(SiaSun.LMS.Model.IO_CONTROL_APPLY mIO_CONTROL_APPLY) { bool bResult = true; string sResult = string.Empty; try { mIO_CONTROL_APPLY.APPLY_TASK_STATUS = 3; this._P_IO_CONTROL_APPLY.Update(mIO_CONTROL_APPLY); bResult = this.ControlApply(mIO_CONTROL_APPLY, out sResult); } catch (Exception ex) { this._log.Fatal("ControlApplyThread申请处理异常", ex); } } public bool ControlApply(SiaSun.LMS.Model.IO_CONTROL_APPLY mIO_CONTROL_APPLY, out string sResult) { bool bResult = true; sResult = string.Empty; //SiaSun.LMS.Implement.Apply_Base mApply = null; //try //{ //Type t = typeof(SiaSun.LMS.Implement.ApplyBase); //Assembly complierAssembly = t.Assembly; //object complierInstance = complierAssembly.CreateInstance(string.Format("SiaSun.LMS.Implement.Apply_{0}", mIO_CONTROL_APPLY.CONTROL_APPLY_TYPE), // true, // BindingFlags.CreateInstance, // null, // new object[] { mIO_CONTROL_APPLY }, // null, // null); // mApply = complierInstance as SiaSun.LMS.Implement.Apply_Base; // //校验 // bResult = mApply.Check(out sResult); // if (!bResult) // { // return bResult; // } // //处理 // bResult = mApply.Handel(out sResult); // if (!bResult) // { // return bResult; // } //} //catch (Exception ex) //{ // bResult = false; // sResult = ex.Message; //} //finally //{ // //记录 // mApply.WriteLog(bResult, sResult); //} return bResult; } #endregion public IList GetList() { return this._P_IO_CONTROL.GetList(); } #region CONTROL_轮询 public static DataTable dtEventHandle = new DataTable("EventExecute"); /// 作业-动作 /// 作业-动作 /// /// 库房编码 /// /// public void ControlTranslate(int conCurrentCount, out string sResult) { sResult = string.Empty; bool bResult = false; try { IList lsFLOW_PARA = this._S_FlowService.FlowGetParameters("FLOW_CONTROL"); string[] aFLOW_PARA = new string[lsFLOW_PARA.Count]; SiaSun.LMS.Model.MANAGE_ACTION_EXCUTE mt = new SiaSun.LMS.Model.MANAGE_ACTION_EXCUTE(); string AA = string.Format("SELECT * FROM V_FLOW_CONTROL_ACTION order by manage_id "); DataTable dt = this.GetList(string.Format("SELECT * FROM V_FLOW_CONTROL_ACTION order by manage_id ")); if (!dtEventHandle.Columns.Contains("execute")) { dtEventHandle.Columns.Add("execute"); dtEventHandle.Columns["execute"].DefaultValue = 0; } dtEventHandle.Merge(dt); if (dtEventHandle.Columns.Contains("MANAGE_ID")) dtEventHandle.PrimaryKey = new DataColumn[] { dtEventHandle.Columns["MANAGE_ID"] }; DataRow[] drThreadExecute = dtEventHandle.Select("execute = 0 or execute is null"); DataTable dtThreadExecute = dt.Clone(); for (int i = 0; i < (drThreadExecute.Length > conCurrentCount ? conCurrentCount : drThreadExecute.Length); i++) { drThreadExecute[i]["execute"] = 1; dtThreadExecute.ImportRow(drThreadExecute[i]); } foreach (DataRow dr in dtThreadExecute.Rows) { int i = 0; foreach (SiaSun.LMS.Model.FLOW_PARA mFLOW_PARA in lsFLOW_PARA) { aFLOW_PARA[i] = dr[mFLOW_PARA.FLOW_PARA_CODE].ToString(); i++; } mt.MANAGE_ID = Convert.ToInt32(dr["MANAGE_ID"]); mt.ACTION_EVENT = dr["FLOW_ACTION_EVENT"].ToString(); mt.ACTION_EVENT = string.Format(mt.ACTION_EVENT, aFLOW_PARA); //执行前先把PRE状态置为当前状态,避免下一线程再次处理 update by JJH 2018-09-07 SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModel(Convert.ToInt32(dr["CONTROL_ID"])); if (null != mIO_CONTROL) { mIO_CONTROL.PRE_CONTROL_STATUS = Convert.ToString(dr["CONTROL_STATUS"]); //this._P_IO_CONTROL.Update(mIO_CONTROL); string sql1 = string.Format(@"update io_control set PRE_CONTROL_STATUS='{0}' where control_id = '{1}'", Convert.ToString(dr["CONTROL_STATUS"]), Convert.ToInt32(dr["CONTROL_ID"])); this.ExecuteNonQuery_ReturnVoid(sql1); Model.IO_CONTROL_APPLY_HIS mIO_CONTROL_APPLY_HIS = new Model.IO_CONTROL_APPLY_HIS(); mIO_CONTROL_APPLY_HIS.CONTROL_ID = Convert.ToInt32(dr["CONTROL_ID"]); // mIO_CONTROL_APPLY_HIS.CONTROL_APPLY_TYPE = mIO_CONTROL.CONTROL_TASK_TYPE; //mIO_CONTROL_APPLY_HIS.WAREHOUSE_CODE = mIO_CONTROL.WAREHOUSE_CODE; mIO_CONTROL_APPLY_HIS.DEVICE_CODE = mIO_CONTROL.START_DEVICE_CODE; mIO_CONTROL_APPLY_HIS.STOCK_BARCODE = mIO_CONTROL.STOCK_BARCODE; mIO_CONTROL_APPLY_HIS.APPLY_TASK_STATUS = mIO_CONTROL.CONTROL_STATUS; mIO_CONTROL_APPLY_HIS.CREATE_TIME = mIO_CONTROL.CONTROL_BEGIN_TIME; mIO_CONTROL_APPLY_HIS.STOCK_BARCODE = mIO_CONTROL.STOCK_BARCODE; mIO_CONTROL_APPLY_HIS.CONTROL_APPLY_REMARK = "轮询控制任务"; this._P_IO_CONTROL_APPLY_HIS.Add(mIO_CONTROL_APPLY_HIS); //this._P_IO_CONTROL.Update(mIO_CONTROL); } if (dr["CONTROL_STATUS"].ToString().Equals("999")) { //if (dr["CONTROL_TASK_TYPE"].ToString().Equals("1")) //{ // if (dr["MANAGE_TYPE_CODE"].ToString().Equals("StockIn")) // { // StockIn mstockin = new StockIn(); // bResult = mstockin.ManageComplete(mt.MANAGE_ID, true, out sResult); // } // else // { // //ManageIn min = new ManageIn(); // ManageUp min = new ManageUp(); // bResult = min.ManageComplete(mt.MANAGE_ID, true, out sResult); // } //} //else if (dr["CONTROL_TASK_TYPE"].ToString().Equals("2")) //{ // if (dr["MANAGE_TYPE_CODE"].ToString().Equals("StockOut")) // { // StockOut mstockout = new StockOut(); // bResult = mstockout.ManageComplete(mt.MANAGE_ID, true, out sResult); // } // else // { // ManageDownOut mout = new ManageDownOut(); // bResult = mout.ManageComplete(mt.MANAGE_ID, true, out sResult); // } //} ///翻转货位到货位是1,调度是入库,管理倒库。出库到翻转调度是出库,管理是倒库。 if (dr["CONTROL_TASK_TYPE"].ToString().Equals("1")) { if (dr[12].ToString().Equals("ManageMove")) { ManageMove move = new ManageMove(); bResult = move.ManageComplete(mt.MANAGE_ID, true, out sResult); } else if (dr[12].ToString().Equals("ManageUp")) { ManageUp min = new ManageUp(); bResult = min.ManageComplete(mt.MANAGE_ID, true, out sResult); } else if (dr[12].ToString().Equals("StockOut")) { StockOut min = new StockOut(); bResult = min.ManageComplete(mt.MANAGE_ID, true, out sResult); } else if(dr[12].ToString().Equals("ManageDownOut")) { ManageDownOut mout = new ManageDownOut(); bResult = mout.ManageComplete(mt.MANAGE_ID, true, out sResult); } else { StockIn min = new StockIn(); bResult = min.ManageComplete(mt.MANAGE_ID, true, out sResult); } } else if (dr["CONTROL_TASK_TYPE"].ToString().Equals("2")) { if (dr[12].ToString().Equals("ManageMove")) { ManageMove move = new ManageMove(); bResult = move.ManageComplete(mt.MANAGE_ID, true, out sResult); } else if (dr[12].ToString().Equals("StockOut")) { StockOut min = new StockOut(); bResult = min.ManageComplete(mt.MANAGE_ID, true, out sResult); } else { ManageDownOut mout = new ManageDownOut(); bResult = mout.ManageComplete(mt.MANAGE_ID, true, out sResult); } } //大连融科 入库 给调度移库任务,类型是4,管理实际是入库 else if (dr["CONTROL_TASK_TYPE"].ToString().Equals("4")) { if (dr[12].ToString().Equals("StockIn")) { StockIn min = new StockIn(); bResult = min.ManageComplete(mt.MANAGE_ID, true, out sResult); } else if (dr[12].ToString().Equals("StockOut")) { StockOut min = new StockOut(); bResult = min.ManageComplete(mt.MANAGE_ID, true, out sResult); } else { ManageUp min = new ManageUp(); bResult = min.ManageComplete(mt.MANAGE_ID, true, out sResult); } } else if (dr["CONTROL_STATUS"].ToString().Equals("10")) { ManageBase mout = new ManageBase(); bResult = mout.ManageExecute(mt.MANAGE_ID, true, out sResult); } } else { // //动态编译调用-停用 bResult = this._S_FlowService.ManageEventExecute(mt, out sResult); } ////反射调用-开始 //List lsObj = new List(); //foreach (string sPara in dr["FLOW_ACTION_EVENT"].ToString().Split('|')) //{ // object objValue = null; // if (dr[sPara].GetType().Equals(typeof(decimal))) // { // objValue = Convert.ToInt32(dr[sPara]); // } // else // { // objValue = dr[sPara]; // } // lsObj.Add(objValue); //} //bool bResult = this.Invoke(dr["MANAGE_TYPE_CODE"].ToString(), // dr["FLOW_ACTION_CODE"].ToString(), // lsObj.ToArray(), // out sResult); ////反射调用-结束 // string aa = dr["MANAGE_TYPE_CODE"].ToString(); // string bb = dr["FLOW_ACTION_CODE"].ToString(); //SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModel(Convert.ToInt32(dr["CONTROL_ID"])); if (!bResult) { SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = this._P_MANAGE_MAIN.GetModel(mt.MANAGE_ID); if (mMANAGE_MAIN != null) { mMANAGE_MAIN.MANAGE_STATUS = Enum.MANAGE_STATUS.Error.ToString(); mMANAGE_MAIN.MANAGE_REMARK = sResult + "处理异常" + string.Format("【控制任务状态-{0}】", mIO_CONTROL.CONTROL_STATUS.ToString()); this._P_MANAGE_MAIN.Update(mMANAGE_MAIN); } else { this._log.Fatal(string.Format("执行事件失败{0} {1}", mt.MANAGE_ID, mt.ACTION_EVENT)); } //处理失败时,将PRE状态清空,便于下一轮继续处理 add by JJH 2018-10-24 if (null != mIO_CONTROL) { mIO_CONTROL.PRE_CONTROL_STATUS = "10"; //this._P_IO_CONTROL.Update(mIO_CONTROL); string sql2 = string.Format(@"update io_control set PRE_CONTROL_STATUS='{0}' where control_id = '{1}'", mIO_CONTROL.PRE_CONTROL_STATUS, Convert.ToInt32(dr["CONTROL_ID"])); this.ExecuteNonQuery_ReturnVoid(sql2); // this._P_IO_CONTROL.Update(mIO_CONTROL); } } //if (bResult && null != mIO_CONTROL) //{ // mIO_CONTROL.PRE_CONTROL_STATUS = Convert.ToString(dr["CONTROL_STATUS"]); // this._P_IO_CONTROL.Update(mIO_CONTROL); //} DataRow drFind = dtEventHandle.Rows.Find(Convert.ToInt32(dr["MANAGE_ID"])); int index = dtEventHandle.Rows.IndexOf(drFind); if (index != -1) dtEventHandle.Rows.RemoveAt(index); } } catch (Exception ex) { this._log.Fatal("ControlTranslate任务处理异常", ex); } } #endregion #region APPLY_轮询 public static List lsHandleControlApply = new List(); /// 任务-申请 /// 任务-申请 /// /// 申请编号 /// 任务编号 /// 返回结果 /// public void ControlApplyTask(out string sResult) { bool bResult = true; sResult = string.Empty; string mesout = string.Empty; try { //收集新生成的申请任务 IList lsIO_CONTROL_APPLY = this._P_IO_CONTROL_APPLY.GetList(0); //led #region //int second = DateTime.Now.Second; //for(int i =1;i<5;i++) //{ // string strSQL = string.Format(@"SELECT * FROM V_MANAGE WHERE LANE_WAY='{0}'",i); // string strSQL1 = string.Format(@"SELECT * FROM V_MANAGE WHERE LANE_WAY='{0}' and MANAGE_STATUS='Executing' AND (MANAGE_TYPE_CLASS='StockOut' or MANAGE_TYPE_CLASS='ManageDownOut' or MANAGE_TYPE_CLASS='ManageDown')", i); // int cellid = 0; // DataTable dtCELL = base.GetList(strSQL); // DataTable dtCELL1 = base.GetList(strSQL1); // ManageBase mb1 = new ManageBase(); // ManageBase mb = new ManageBase(); // if (dtCELL1.Rows.Count > 0) // { // mb1.updateLedText(Convert.ToInt32(dtCELL1.Rows[0]["START_CELL_ID"]), 1, "正在出库"); // mb1.updateLedText(Convert.ToInt32(dtCELL1.Rows[0]["START_CELL_ID"]), 2, dtCELL1.Rows[0]["STOCK_BARCODE"].ToString()); // mb1.updateLedText(Convert.ToInt32(dtCELL1.Rows[0]["START_CELL_ID"]), 3, dtCELL1.Rows[0]["START_POSITION"].ToString()); // } // if (dtCELL.Rows.Count == 0 && second==0) // { // if(i==1) // { // cellid=13209; // } // else if(i==2) // { // cellid = 13210; // } // else if(i==3) // { // cellid = 13213; // } // else if (i == 4) // { // cellid = 14596; // } // mb.updateLedText(cellid, 0, "***欢迎光临***"); // mb.updateLedText(cellid, 1, "**杭州地铁6号线**"); // mb.updateLedText(cellid, 2, "*自动化立体仓库*"); // mb.updateLedText(cellid, 3, "巷道空闲"); // } //} #endregion //foreach (SiaSun.LMS.Model.IO_CONTROL_APPLY mIO_CONTROL_APPLY in lsIO_CONTROL_APPLY) //{ // if (!lsHandleControlApply.Contains(mIO_CONTROL_APPLY)) // { // lsHandleControlApply.Add(mIO_CONTROL_APPLY); // } //} //收集新生成的申请任务 //处理申请任务 foreach (Model.IO_CONTROL_APPLY mIO_CONTROL_APPLY_HANDLE in lsIO_CONTROL_APPLY) { //先更新状态为3,避免下一次线程中重复处理 mIO_CONTROL_APPLY_HANDLE.APPLY_TASK_STATUS = 3; this._P_IO_CONTROL_APPLY.Update(mIO_CONTROL_APPLY_HANDLE); Model.APPLY_TYPE mAPPLY_TYPE = (Model.APPLY_TYPE)this.GetModel("APPLY_TYPE_SELECT_BY_APPLY_TYPE_CODE", mIO_CONTROL_APPLY_HANDLE.CONTROL_APPLY_TYPE).RequestObject; if (mAPPLY_TYPE != null) { bResult = this.Invoke(mAPPLY_TYPE.APPLY_TYPE_CLASS, "ApplyHandle", new object[] { mIO_CONTROL_APPLY_HANDLE }, out sResult); } // lsHandleControlApply.Remove(mIO_CONTROL_APPLY_HANDLE); } } catch (Exception ex) { this._log.Fatal("ControlApplyTask申请处理异常", ex); } } #endregion } }