天津康师傅调度系统
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.
 
 

693 lines
39 KiB

using CommLayerFactory;
using CommonLib;
using DBFactory;
using ICommLayer;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Text.RegularExpressions;
namespace WcfControlMonitorLib
{
/// <summary>
/// Creator:ZCY
/// 环型穿梭车通用库
/// </summary>
public class CCommonFunctionSSAR
{
string _DisassembleTaskError;
public string DisassembleTaskError
{
get { return _DisassembleTaskError; }
set { _DisassembleTaskError = value; }
}
DBOperator dboM = CStaticClass.dboM;
DBOperator dbo = CStaticClass.dbo;
static CGetState cgs = new CGetState();
CCommonFunction ccf = new CCommonFunction();
Model.MDevice devinfo;
StringBuilder sql = new StringBuilder();
public static event CDataSourceChangeEventHandler DataChange;
public static void OnDataChange(object sender, CDataChangeEventArgs e)
{
if (DataChange != null)
{
DataChange(sender, e);
}
}
public static event RefreshMonitorEventHandler RefreshMonitor;
public static void OnRefreshMonitor(object sender, RefreshMonitorEventArgs e)
{
if (RefreshMonitor != null)
{
RefreshMonitor(e);
}
}
public CCommonFunctionSSAR()
{
}
public const int SOUTHLRGV = 1;
public const int NORTHLRGV = 2;
/// <summary>
/// 得到环穿任务状态
/// </summary>
/// <param name="errText"></param>
/// <returns></returns>
public bool GetARGVDeviceState(int SSAR, out string errText)
{
StringBuilder sql = new StringBuilder();
StringBuilder ss = new StringBuilder();
DataView dv = new DataView();
DataView dvM = new DataView();
// MidDataTable.CGetDeviceState gds = new CGetDeviceState();// 为了自动生成到debug文件夹下
bool bReturnState = true;
errText = string.Empty;
try
{
#region 处理改道,20210512(如果改道在处理环穿状态后面,当WCS关闭时,SSAR已执行完改道,则WCS可能会将环穿任务完成)
sql.Remove(0, sql.Length);
sql.Append("SELECT * FROM apply_task");
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
for (int i = 0; i < dv.Count; i++)
{
int endrgvdevicecode = Convert.ToInt32(dv[i]["DEVICE_CODE"]);
int enddevicecode = endrgvdevicecode + 1;
int status = Convert.ToInt32(dv[i]["APPLY_STATUS"]);
switch (status)
{
case 0://SSAR未处理
break;
case 1://允许改道
#region 先进行改道后的处理,成功后再删除申请
int fid = 0;
int routeid = 0;
sql.Clear();
sql.Append("select * from t_monitor_task where F_MonitorIndex =").Append(dv[i]["RGV_TASK_ID"]);
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvM.Count > 0)
{
fid = Convert.ToInt32(dvM[0]["F_ManageTaskIndex"]);
routeid = (Convert.ToInt32(dvM[i]["f_routeid"]) - 1) / 1000;
sql.Clear();
sql.Append("select * from T_base_route where f_enddevice = ").Append(enddevicecode)
.Append(" and f_startdevice = (select f_startdevice from t_base_route where f_routeid = ")
.Append(routeid).Append(")");
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvM.Count > 0)
{
int newrouteid = Convert.ToInt32(dvM[0]["f_routeid"]);
string errtext;
if (PalletInChangeLocation(fid, enddevicecode, endrgvdevicecode, newrouteid, out errtext) == true)
{
#region 再删除SSAR改道申请
sql.Remove(0, sql.Length);
sql.Append("DELETE FROM APPLY_TASK WHERE APPLY_ID = ")
.Append(dv[i]["APPLY_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
#endregion
}
else
{
//SSAR改道成功,但进行后续处理时失败了,则不能删除SSAR改道申请
CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道允许,但后续处理失败,已回滚", endrgvdevicecode.ToString(), "改道任务:" + fid);
}
}
}
else
{
//如果调度中的任务没了,处理有点复杂,先不处理。
//1.去查大任务,有大任务,则继续
//2.大任务也没了,则很麻烦,需要人工接入吧
}
#endregion
break;
case 2://拒绝改道
#region 先删除SSAR改道申请
sql.Remove(0, sql.Length);
sql.Append("DELETE FROM APPLY_TASK WHERE APPLY_ID = ")
.Append(dv[i]["APPLY_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
#endregion
#region 再向管理申请空托盘垛
string dtime = ccf.GetDateTime();
string barcode = "0000000";
int errordevice = 0;
int applydev = Convert.ToInt32(dv[i]["DEVICE_CODE"]); //RGV送货站台,即申请站台
int enddevice = applydev + 1;//终点站台
int palletkind = 0;
#region 托盘类型 palletkind
sql.Remove(0, sql.Length);
sql.Append("SELECT * FROM RGV_TASK_TYPE where RGV_TaskType_Index = ").Append(dv[i]["APPLY_TYPE"]);
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvM.Count > 0)
{
try
{
palletkind = Convert.ToInt32(dvM[0]["GoodsKinds"]);
}
catch (FormatException ex)
{
//没找到托盘类型,应该人工处理
//errText =
//RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("SSAR", "改道拒绝,托盘类型获取失败!环穿任务类型:" + dv[i]["APPLY _TYPE"].ToString() + "!托盘类型:" + dvM[0]["GoodsKinds"].ToString());
//OnRefreshMonitor(rmea);
CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道拒绝,托盘类型获取失败!", "环穿任务类型:" + applydev.ToString(), "托盘类型:" + dvM[0]["GoodsKinds"].ToString());
}
}
else
{
//没找到托盘类型,应该人工处理
}
#endregion
object[] ob = new object[13]
{
2, enddevice, barcode, 0, dtime, "",
"1",0,0,
palletkind,errordevice,0,0
};
//将向管理申请时的 SQL 放入 WMSApply 方法中
if (ccf.WMSApply(ob, applydev, enddevice) == false)
{
CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道拒绝,向管理申请缓存失败", applydev.ToString(), "");
}
else
{
CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道拒绝,向管理申请缓存", applydev.ToString(), "");
}
#endregion
break;
default:
break;
}
}
}
#endregion
#region 处理环穿状态
string table = string.Empty;
if (SSAR == NORTHLRGV)
{
table = "RGV_TASK_NORTH";
}
else
{
table = "RGV_TASK";
}
sql.Remove(0, sql.Length);
sql.Append("SELECT * FROM ").Append(table);
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
for (int i = 0; i < dv.Count; i++)
{
sql.Remove(0, sql.Length);
sql.Append("SELECT * FROM T_Monitor_Task WHERE F_ManageTaskIndex = ")
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
.Append(dv[i]["RGV_TASK_ID"].ToString());
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvM.Count > 0)
{
int iARGVStatus = Convert.ToInt32(dv[i]["RGV_TASK_STATUS"]);
switch (iARGVStatus)
{
case 7: //已接收
if (dvM[0]["F_Status"].ToString() != "7")
{
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Monitor_Task SET F_Status = 7 WHERE F_ManageTaskIndex = ")
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
.Append(dv[i]["RGV_TASK_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Manage_Task SET FCurrentLocation =")
.Append(dvM[0]["F_DeviceIndex"].ToString())
.Append(" where FID = ").Append(dv[i]["FID"].ToString());
dbo.ExecuteSql(sql.ToString());
}
break;
case 10: //执行中
if (dvM[0]["F_Status"].ToString() != "10")
{
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Monitor_Task SET F_Status = 10 WHERE F_ManageTaskIndex = ")
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
.Append(dv[i]["RGV_TASK_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
int rgv = Convert.ToInt32(dv[i]["RGV_CODE"]);
if (rgv < 15000)
{
rgv -= 14000; //南侧环穿14001-14021
}
else
{
rgv -= 15000; //北侧环穿15001-15014
}
int rgv_code = Convert.ToInt32(dvM[0]["F_DeviceIndex"]) - 1 + rgv;
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Manage_Task SET FCurrentLocation =")
.Append(rgv_code)
.Append(" where FID = ").Append(dv[i]["FID"].ToString());
dbo.ExecuteSql(sql.ToString());
//HWHX 可能不需要同步到管理系统。待定
int fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dv[i]["RGV_TASK_ID"]));
sql.Remove(0, sql.Length);
sql.Append("update IO_CONTROL set CONTROL_STATUS=10 where CONTROL_ID=").Append(fid);
dboM.ExecuteSql(sql.ToString());
}
break;
case 999: //已完成
#region 20200922 双鹿电池,环穿出库任务完成,更新下一条MonitorTask中任务的设备号,终点设备号,检测条件
if (Convert.ToInt32(dv[i]["RGV_TASK_TYPE"]) == 2)
{
int iFihishDevice = Convert.ToInt32(dv[i]["FINISH_DEVICE_CODE"]);
int routeIDsub = ccf.GetRouteIDsub(iFihishDevice);
#region 出库成组
int endDevice = 0;
sql.Clear();
sql.Append("select * from area_port where asrs_port_code =").Append(iFihishDevice);
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvM.Count > 0)
{
endDevice = Convert.ToInt32(dv[0]["port_code"]);
//更新manage表,更新IO_CONTROL表
sql.Clear();
sql.Append("update t_manage_task set FENDDEVICE = ").Append(endDevice)
.Append(" where fid = ").Append(dv[i]["FID"].ToString());
dbo.ExceSQL(sql.ToString());
sql.Clear();
sql.Append("update IO_CONTROL set END_DEVICE_CODE = ").Append(endDevice)
.Append(" where CONTROL_ID = ").Append(dv[i]["FID"].ToString());
dboM.ExceSQL(sql.ToString());
#endregion
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Monitor_Task SET F_DeviceIndex = ").Append(iFihishDevice)
.Append(",F_NumParam1 = ").Append(iFihishDevice)
.Append(",F_AheadDetect = 'I").Append(iFihishDevice).Append(";D-").Append(iFihishDevice).Append(".0'")
.Append(",F_RouteID = ").Append(routeIDsub)
.Append(",F_NumParam4 = ").Append(endDevice)
.Append("WHERE F_ManageTaskIndex = ").Append(dv[i]["FID"].ToString());
dbo.ExecuteSql(sql.ToString());
}
}
#endregion
cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0);
#region 将送货输送线写入Manage中的当前设备
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Manage_Task SET FCurrentLocation =")
.Append(dv[i]["FINISH_DEVICE_CODE"].ToString())
.Append(" where FID = ").Append(dv[i]["FID"].ToString());
dbo.ExecuteSql(sql.ToString());
#endregion
sql.Remove(0, sql.Length);
sql.Append("DELETE FROM ").Append(table).Append(" WHERE FID = ")
.Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ")
.Append(dv[i]["RGV_TASK_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
break;
case 900: //申请删除
if (dvM[0]["F_Status"].ToString() != "900")
{
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Monitor_Task SET F_Status = 900 WHERE F_ManageTaskIndex = ")
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
.Append(dv[i]["RGV_TASK_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
}
#region 删除环穿任务 zcy 20210315
sql.Remove(0, sql.Length);
sql.Append("DELETE FROM ").Append(table).Append(" WHERE FID = ")
.Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ")
.Append(dv[i]["RGV_TASK_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
#endregion
break;
case 0: //已发送
if (dvM[0]["F_Status"].ToString() != "1")
{
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Monitor_Task SET F_Status = 1 WHERE F_ManageTaskIndex = ")
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
.Append(dv[i]["RGV_TASK_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
}
break;
case 960: //已改道
#region HWHX 待测试j
if (Convert.ToInt32(dv[i]["RGV_TASK_TYPE"]) == 1)
{
#region 删除入库任务
cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0);
sql.Remove(0, sql.Length);
sql.Append("DELETE FROM RGV_TASK WHERE FID = ")
.Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ")
.Append(dv[i]["RGV_TASK_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
#endregion
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Monitor_Task SET F_Status = 10, F_NumParam4 = '").Append(dv[0]["END_AREA_CODE"]) //更改状态
.Append("' WHERE F_ManageTaskIndex = ")
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
.Append(dv[i]["RGV_TASK_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
}
#endregion
break;
default:
break;
}
}
else
{
//残留的环穿任务处理 zcy 20210315
bReturnState = false;
errText += "环形穿梭车系统任务:任务号:" + dv[i]["FID"].ToString() + ",指令号:" +
dv[i]["RGV_TASK_ID"].ToString() + "在调度系统中不存在,已自动删除并记录。";
sql.Remove(0, sql.Length);
sql.Append("DELETE FROM ").Append(table).Append(" WHERE FID = ")
.Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ")
.Append(dv[i]["RGV_TASK_ID"].ToString());
dbo.ExecuteSql(sql.ToString());
CommonClassLib.CCarryConvert.WriteDarkCasket("RGVTASK", "RGV任务被删除", dv[i]["FID"].ToString(), "找不到对应的调度任务,自动将RGV任务删除!");
continue;
}
}
}
#endregion
#region 出库成组
#endregion
//#region 处理AGV任务表
//sql.Remove(0, sql.Length);
//sql.Append("SELECT * FROM AGV_TASK");
//dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
//if (dv.Count > 0)
//{
// for (int i = 0; i < dv.Count; i++)
// {
// sql.Remove(0, sql.Length);
// sql.Append("SELECT * FROM T_Monitor_Task WHERE F_ManageTaskIndex = ")
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
// .Append(dv[i]["AGV_TASK_ID"].ToString());
// dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
// if (dvM.Count > 0)
// {
// int iARGVStatus = Convert.ToInt32(dv[i]["AGV_TASK_STATUS"]);
// switch (iARGVStatus)
// {
// case 7: //已接收
// if (dvM[0]["F_Status"].ToString() != "7")
// {
// sql.Remove(0, sql.Length);
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 7 WHERE F_ManageTaskIndex = ")
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
// .Append(dv[i]["AGV_TASK_ID"].ToString());
// dbo.ExecuteSql(sql.ToString());
// }
// break;
// case 10: //执行中
// if (dvM[0]["F_Status"].ToString() != "10")
// {
// sql.Remove(0, sql.Length);
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 10 WHERE F_ManageTaskIndex = ")
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
// .Append(dv[i]["AGV_TASK_ID"].ToString());
// dbo.ExecuteSql(sql.ToString());
// int fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dv[i]["AGV_TASK_ID"]));
// sql.Remove(0, sql.Length);
// sql.Append("update IO_CONTROL set CONTROL_STATUS=10 where CONTROL_ID=").Append(fid);
// dboMan.ExecuteSql(sql.ToString());
// }
// break;
// case 999: //已完成
// cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0);
// sql.Remove(0, sql.Length);
// sql.Append("DELETE FROM AGV_TASK WHERE FID = ")
// .Append(dv[i]["FID"].ToString()).Append(" AND AGV_TASK_ID = ")
// .Append(dv[i]["AGV_TASK_ID"].ToString());
// dbo.ExecuteSql(sql.ToString());
// break;
// case 900: //申请删除
// if (dvM[0]["F_Status"].ToString() != "900")
// {
// sql.Remove(0, sql.Length);
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 900 WHERE F_ManageTaskIndex = ")
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
// .Append(dv[i]["AGV_TASK_ID"].ToString());
// dbo.ExecuteSql(sql.ToString());
// }
// break;
// case 0: //已发送
// if (dvM[0]["F_Status"].ToString() != "1")
// {
// sql.Remove(0, sql.Length);
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 1 WHERE F_ManageTaskIndex = ")
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
// .Append(dv[i]["AGV_TASK_ID"].ToString());
// dbo.ExecuteSql(sql.ToString());
// }
// break;
// default:
// break;
// }
// }
// else
// {
// bReturnState = false;
// errText += "AGV系统任务:任务号:" + dv[i]["FID"].ToString() + ",指令号:" +
// dv[i]["RGV_TASK_ID"].ToString() + "在调度系统中不存在,请通知管理人员处理";
// continue;
// }
// }
//}
//#endregion
return bReturnState;
}
catch (Exception ex)
{
//RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.GetARGVDeviceState时" + ex.StackTrace + ex.Message);
//OnRefreshMonitor(rmea);
bReturnState = false;
return bReturnState;
}
finally
{
dv.Dispose();
dvM.Dispose();
}
}
//托盘缓存申请,有托盘入库任务,确定改道时的处理,只处理环穿及环穿后的指令
public bool PalletInChangeLocation(int fid, int newEndDevice, int newRgvEndDevice, int routeid, out string errtext)
{
StringBuilder sql = new StringBuilder();
DataView dvbc = new DataView();
string dtime = ccf.GetDateTime();
if (routeid != 0)
{
routeid = routeid * 1000 + 1;
}
try
{
dbo.TransBegin(IsolationLevel.ReadCommitted);
//1.环穿之前的指令不变,2.更改环穿终点,3.删除指令大于环穿的所有指令,4.添加输送线的送出指令,5.将manage任务插入bak,
//6.修改manage终点,任务类型不变,7.更改所有指令的routeid, 8.IO_CONTROL任务更改状态900
sql.Clear();
sql.Append("select * from t_monitor_task where F_ManageTaskIndex = ").Append(fid).Append("order by F_monitorIndex ");
dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
int rgvMonitorId = 0; string palletcode = "";
StringBuilder AheadDetect = new StringBuilder();
int conveyorIndex = 0;
for (int i = 0; i < dvbc.Count; i++)
{
if (Convert.ToInt32(dvbc[i]["F_DeviceIndex"]) == 25001)
{ //2
rgvMonitorId = Convert.ToInt32(dvbc[i]["F_MonitorIndex"]); //记录rgv的指令
//更新 RGV 终点,时间
sql.Remove(0, sql.Length);
sql.Append("update t_monitor_task set F_NumParam4=").Append(newRgvEndDevice).Append(", F_SplitTime='").Append(dtime).Append("' where F_ManageTaskIndex = ").Append(fid).Append(" and F_MonitorIndex = ").Append(rgvMonitorId);
dbo.ExecuteSql(sql.ToString());
palletcode = dvbc[i]["F_TxtParam"].ToString();
}
if (rgvMonitorId != 0 && Convert.ToInt32(dvbc[i]["F_MonitorIndex"]) > rgvMonitorId)
{//3
sql.Remove(0, sql.Length);
sql.Append("delete from t_monitor_task where F_MonitorIndex = ").Append(dvbc[i]["F_MonitorIndex"].ToString());
dbo.ExecuteSql(sql.ToString());
conveyorIndex = Convert.ToInt32(dvbc[i]["F_MonitorIndex"]); //记录一个已删除的指令索引
}
}
#region 4 要保证添加的指令索引大于环穿的指令索引
AheadDetect.Append(";D-").Append(newRgvEndDevice).Append(".0");
AheadDetect.Append(";D").Append(newEndDevice).Append(".0");
AheadDetect.Append(";I").Append(newRgvEndDevice);
AheadDetect.Append(";I").Append(newEndDevice);
//int mindex = ccf.GetMonitorIndex(fid, 2); //与任务拆分的间隔太久了,本行可能导致索引从最大变成最小
int mindex = conveyorIndex;
sql.Remove(0, sql.Length);
sql.Append("INSERT INTO T_Monitor_Task ").Append(
"(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel,").Append(
" F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam4,").Append(
" F_AheadDetect,F_TxtParam)").Append(
"VALUES (").Append(fid).Append(",").Append(1).Append(",").Append(mindex).Append(",").Append(9
).Append(",").Append(newRgvEndDevice).Append(",").Append(6).Append(",").Append(routeid).Append(",").Append(0).Append(",").Append(newRgvEndDevice).Append(",").Append(newEndDevice
).Append(",'").Append(AheadDetect.ToString()).Append("','").Append(palletcode).Append("')");
dbo.ExceSQL(sql.ToString());
#endregion
//5
//待添加
//6
sql.Remove(0, sql.Length);
//sql.Append("update t_manage_task set FENDDEVICE=").Append(newEndDevice).Append(",FENDCELL='-' ,FBEGTIME='").Append(dtime).Append("',FLANEWAY='',FSTACK='' where fid=").Append(fid);
sql.Append("update t_manage_task set goods_num = 905, FENDDEVICE=").Append(newEndDevice).Append(",FENDUCODE='' ,FBEGTIME='").Append(dtime).Append("',FLANEWAY='',FSTACK='' where fid=").Append(fid);
dbo.ExecuteSql(sql.ToString());
//7
sql.Remove(0, sql.Length);
sql.Append("update t_monitor_task set F_RouteID=").Append(routeid).Append(" where F_ManageTaskIndex=").Append(fid);
dbo.ExecuteSql(sql.ToString());
dbo.TransCommit();
//8入库改道,管理需要从缓存区中删除库存,定义状态905
sql.Remove(0, sql.Length);
sql.Append("UPDATE IO_CONTROL SET CONTROL_STATUS =905 WHERE CONTROL_ID=").Append(fid);
int count = dboM.ExecuteSql(sql.ToString());
if (count != 1)
{
CommonClassLib.CCarryConvert.WriteDarkCasket("PalletInChangeLocation", "空托盘垛改道", "原任务:" + fid, "IO_CONTROL更新行数:" + count.ToString());
}
//9 更改 环穿 任务,RGV_TASK 已接收的任务
sql.Remove(0, sql.Length);
sql.Append("update RGV_TASK set LANE_CODE = 0, END_AREA_CODE=").Append(newRgvEndDevice).Append(" where fid = ").Append(fid);
dbo.ExecuteSql(sql.ToString());
CommonClassLib.CCarryConvert.WriteDarkCasket("PalletInChangeLocation", "空托盘垛改道成功", "原任务:" + fid, "改道终点:" + newEndDevice.ToString());
errtext = "";
return true;
}
catch (Exception ex)
{
//RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.PalletChangeLocation" + ex.Message + ex.StackTrace);
//OnRefreshMonitor(rmea);
errtext = ex.Message + ex.StackTrace;
dbo.TransRollback();
CommonClassLib.CCarryConvert.WriteDarkCasket("PalletInChangeLocation", "空托盘垛改道失败", "改道终点:" + newEndDevice.ToString(), "");
return false;
}
finally
{
dvbc.Dispose();
}
}
//叠盘机入库,有缓存出库任务,确定改道时的处理,删除出库任务
public bool PalletOutChangeLocation(int fid, int newStartDevice, int newEnddevice, string barcodes, out string errtext)
{
StringBuilder sql = new StringBuilder();
DataView dvbc = new DataView();
string dtime = ccf.GetDateTime();
int AutoManageIdx = ccf.GetTempManageIdx();//调度任务索引
int stack = 0;//堆垛机FSTACK
int Laneindex = 0;
int controltype = 4;//站台间移库
int managetaskkind = 2; //自动任务
//string barcodes = "";
errtext = "";
object[] ob = new object[16]
{
AutoManageIdx, barcodes, controltype, managetaskkind, 1, newStartDevice, "-", 1,
newEnddevice, "-", Laneindex, stack, "-", dtime, 0, 0
};
try
{
string sqlstr = string.Format("insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FStartCol,FStartLayer) " +
"values ({0},'{1}',{2},{3},{4},{5},'{6}',{7},{8},'{9}',{10},{11},'{12}','{13}',{14},{15})", ob);
dbo.ExceSQL(sqlstr);
CommonClassLib.CCarryConvert.WriteDarkCasket("PalletOutChangeLocation", "空托盘垛改道成功", "原任务:" + fid, "新任务:" + AutoManageIdx.ToString());
sql.Remove(0, sql.Length);
sql.Append("delete from t_monitor_task where F_ManageTaskIndex = ").Append(fid);
dbo.ExecuteSql(sql.ToString());
sql.Remove(0, sql.Length);
sql.Append("delete T_Manage_Task where fid = ").Append(fid);
dbo.ExecuteSql(sql.ToString());
sql.Remove(0, sql.Length);
sql.Append("UPDATE IO_CONTROL SET CONTROL_STATUS =900 WHERE CONTROL_ID=").Append(fid);
dboM.ExecuteSql(sql.ToString());
return true;
}
catch (Exception ex)
{
//RefreshMonitorEventArgs rmea =
// new RefreshMonitorEventArgs("tsStatus",
// "调度生成拆盘机补货任务时发生错误:" + ex.StackTrace +
// ex.Message);
//OnRefreshMonitor(rmea);
errtext = ex.Message + ex.StackTrace;
return false;
}
finally
{
dvbc.Dispose();
}
}
#region 环穿的提前检测
//某一站台如果入库任务超过一定数量,则暂停改站台的入库任务(业务描述:优先级低的站台)
//public int SSARGateINTaskCount
#endregion
}
}