大连融科 WMS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

560 lines
23 KiB

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<SiaSun.LMS.Model.FLOW_PARA> 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<SiaSun.LMS.Model.IO_CONTROL> GetList()
{
return this._P_IO_CONTROL.GetList();
}
#region CONTROL_轮询
public static DataTable dtEventHandle = new DataTable("EventExecute");
/// <summary>作业-动作
/// 作业-动作
/// </summary>
/// <param name="WAREHOUSE">库房编码</param>
/// <param name="sResult"></param>
/// <returns></returns>
public void ControlTranslate(int conCurrentCount, out string sResult)
{
sResult = string.Empty;
bool bResult = false;
try
{
IList<SiaSun.LMS.Model.FLOW_PARA> 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<object> lsObj = new List<object>();
//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<Model.IO_CONTROL_APPLY> lsHandleControlApply = new List<Model.IO_CONTROL_APPLY>();
/// <summary>任务-申请
/// 任务-申请
/// </summary>
/// <param name="CONTROL_APPLY_ID">申请编号</param>
/// <param name="MANAGE_ID">任务编号</param>
/// <param name="sResult">返回结果</param>
/// <returns></returns>
public void ControlApplyTask(out string sResult)
{
bool bResult = true;
sResult = string.Empty;
string mesout = string.Empty;
try
{
//收集新生成的申请任务
IList<SiaSun.LMS.Model.IO_CONTROL_APPLY> 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
}
}