371 lines
18 KiB
C#
371 lines
18 KiB
C#
/*************************************************************************************
|
||
*
|
||
* 文 件 名: HandleAgvRequest
|
||
* 描 述: 处理AGV请求
|
||
* 备 注:
|
||
* 创 建 者: Du
|
||
* 创建时间: 2022/8/2 9:42:33
|
||
*************************************************************************************/
|
||
|
||
using Newtonsoft.Json;
|
||
using RGD.DataService;
|
||
using RGD.DBUtility;
|
||
using RGD.HaiRouAPI.HaiRouModel;
|
||
using RGD.MdsAPI.WMS;
|
||
using RGD.Model;
|
||
using System;
|
||
using System.Data;
|
||
|
||
namespace RGD.HaiRouAPI
|
||
{
|
||
public class HandleAgvRequest
|
||
{
|
||
private static string containercode = "";
|
||
private static string tasktype = "";
|
||
private static string loc_no = "";
|
||
|
||
/// <summary>
|
||
/// 任务状态上报回调
|
||
/// </summary>
|
||
/// <param name="content"></param>
|
||
/// <returns></returns>
|
||
public static string taskStatueResponse(string content)
|
||
{
|
||
string sResult;
|
||
TaskStatues ts = JsonConvert.DeserializeObject<TaskStatues>(content);
|
||
ApplyResult ar = new ApplyResult();
|
||
//因一次动作上报不止一次,所以涉及MDS接口时只记录第一次,后续不在继续调用
|
||
//区分逻辑为判断本次任务容器编码是否与上一次一致
|
||
|
||
//return jsonmodel;
|
||
bool bResult = true;
|
||
//任务状态上报完成逻辑
|
||
//AGV上报取货或送货完成
|
||
//取货完成时,判断是否为MDS任务,是出库还是入库
|
||
//首先判断是出库还是入库
|
||
DataView warehouse = DbHelperSQL.Query("select * from t_warehouse").Tables[0].DefaultView;
|
||
if (warehouse[0]["F_TASK_TYPE"].ToString() != "Inventory")
|
||
{
|
||
try
|
||
{
|
||
if (ts.eventType.Equals("tote_load"))//取箱完成
|
||
{
|
||
if (ts.containerCode.Equals(containercode) && ts.eventType.Equals(tasktype))
|
||
{
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
containercode = ts.containerCode;
|
||
tasktype = ts.eventType;
|
||
int i = 0;
|
||
//取箱完成直接给取货任务报完成,只有出库是涉及两次接口接口,获取上报的调度任务号,根据调度任务号完成设备指令对应的取货任务
|
||
DataView dt = DbHelperSQL.Query("select * from T_Manage_task where FPALLETBARCODE='" + ts.containerCode + "'").Tables[0].DefaultView;
|
||
DataView task = DbHelperSQL.Query("select * from T_warehouse").Tables[0].DefaultView;
|
||
//本地任务直接删除取货任务
|
||
if (task[0]["F_TASK_STATUS"].ToString() == "FREE")
|
||
{
|
||
i = DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=4");
|
||
|
||
if (i != 0)
|
||
{
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
}
|
||
//MDS任务只有在出库时调用取货完成接口,然后放货完成接口
|
||
else
|
||
{
|
||
if (dt[0]["FCONTROLTASKTYPE"].ToString() == "2")
|
||
{
|
||
//bResult = (new uploadStackIODet()).Notify(task[0]["F_TASK_NO"].ToString(), "01", dt[0]["FSTARTCELL"].ToString(), out sResult);
|
||
//if (bResult)
|
||
//{
|
||
// i = DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=4");
|
||
//}
|
||
i = DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=4");
|
||
}
|
||
else
|
||
{
|
||
i = DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=4");
|
||
}
|
||
if (1 != 0 && bResult)
|
||
{
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
else
|
||
{
|
||
ar.code = "1";
|
||
ar.msg = "false";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
}
|
||
}
|
||
else if (ts.eventType.Equals("tote_unload"))//放箱完成
|
||
{
|
||
if (ts.containerCode.Equals(containercode) && ts.eventType.Equals(tasktype))
|
||
{
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
containercode = ts.containerCode;
|
||
tasktype = ts.eventType;
|
||
//查询是否为手工或自动任务
|
||
DataView dt = DbHelperSQL.Query("select * from T_Manage_task where FPALLETBARCODE='" + ts.containerCode + "'").Tables[0].DefaultView;
|
||
DataView task = DbHelperSQL.Query("select * from T_warehouse").Tables[0].DefaultView;
|
||
if (task[0]["F_TASK_STATUS"].ToString() == "FREE")
|
||
{
|
||
int i = DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=5");
|
||
//本地入库任务的放箱完成,更新储位信息,放货任务为最后一条,完成后清除调度任务
|
||
if (dt[0]["FCONTROLTASKTYPE"].ToString() == "1")
|
||
{
|
||
i = DbHelperSQL.ExecuteSql("update st_cell set FCELLSTATUS=1,FPALLETBARCODE='" + ts.containerCode + "' where FCELLCODE='" + ts.locationCode + "'");
|
||
i = DbHelperSQL.ExecuteSql("delete t_manage_task where FPALLETBARCODE='" + ts.containerCode + "'");
|
||
}
|
||
//本地出库任务的放箱完成,清除储位信息
|
||
else if (dt[0]["FCONTROLTASKTYPE"].ToString() == "2")
|
||
{
|
||
i = DbHelperSQL.ExecuteSql("update st_cell set FCELLSTATUS=0,FPALLETBARCODE='' where FCELLCODE='" + ts.locationCode + "'");
|
||
}
|
||
if (i != 0)
|
||
{
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
else
|
||
{
|
||
ar.code = "1";
|
||
ar.msg = "false";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
int i = 0;
|
||
//MDS入库任务的放箱完成,调用放货完成接口02放,01取
|
||
if (dt[0]["FCONTROLTASKTYPE"].ToString() == "1")
|
||
{
|
||
bResult = (new uploadStackIODet()).Notify(task[0]["F_TASK_NO"].ToString(), "02", dt[0]["FENDCELL"].ToString(), out sResult);
|
||
if (bResult)
|
||
{
|
||
i = DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=5");
|
||
i = DbHelperSQL.ExecuteSql("update st_cell set FCELLSTATUS=1,FPALLETBARCODE='" + ts.containerCode + "' where FCELLCODE='" + ts.locationCode + "'");
|
||
i = DbHelperSQL.ExecuteSql("delete t_manage_task where FPALLETBARCODE='" + ts.containerCode + "'");
|
||
}
|
||
}
|
||
//MDS出库任务的放箱完成,调用放货完成接口,成功后清除储位信息
|
||
else if (dt[0]["FCONTROLTASKTYPE"].ToString() == "2")
|
||
{
|
||
i = DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=5");
|
||
i = DbHelperSQL.ExecuteSql("update st_cell set FCELLSTATUS=0,FPALLETBARCODE='' where FCELLCODE='" + ts.locationCode + "'");
|
||
}
|
||
if (i != 0 && bResult)
|
||
{
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
else
|
||
{
|
||
ErrorCountAdd(11001);
|
||
ar.code = "1";
|
||
ar.msg = "false";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//单步取箱完成需要查询该任务是出库还是入库,即起始位置是输送线还是货架,若是货架,必须调用取放货接口,若是入库则忽略
|
||
DataView dt = DbHelperSQL.Query("select * from T_Manage_task where FPALLETBARCODE='" + ts.containerCode + "'").Tables[0].DefaultView;
|
||
if (ts.eventType.Equals("tote_load"))//单步取箱完成
|
||
{
|
||
if (dt[0]["FCONTROLTASKTYPE"].ToString() == "2")
|
||
{
|
||
//取货完成
|
||
//bResult = (new uploadStackIODet()).Notify(warehouse[0]["F_TASK_NO"].ToString(), "01", dt[0]["FSTARTCELL"].ToString(), out sResult);
|
||
//删除取货任务
|
||
DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=4");
|
||
}
|
||
else
|
||
{
|
||
//删除取货任务
|
||
DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=4");
|
||
//入库取货任务完成后将pot_flag变为0
|
||
DbHelperSQL.ExecuteSql("update io_rfid set put_flag='0'");
|
||
}
|
||
}
|
||
else if (ts.eventType.Equals("tote_unload"))
|
||
{
|
||
//入库任务放箱即入库完成需要调用接口
|
||
if (dt[0]["FCONTROLTASKTYPE"].ToString() == "1")
|
||
{
|
||
if (loc_no != dt[0]["FENDCELL"].ToString())
|
||
{
|
||
bResult = (new uploadStackIODet()).Notify(warehouse[0]["F_TASK_NO"].ToString(), "02", dt[0]["FENDCELL"].ToString(), out sResult);
|
||
}
|
||
|
||
//放货完成
|
||
if (bResult)
|
||
{
|
||
loc_no = dt[0]["FENDCELL"].ToString();
|
||
}
|
||
//删除放货任务
|
||
DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=5");
|
||
//更新储位信息
|
||
DbHelperSQL.ExecuteSql("update st_cell set FCELLSTATUS=1,FPALLETBARCODE='" + ts.containerCode + "' where FCELLCODE='" + ts.locationCode + "'");
|
||
//删除调度任务
|
||
DbHelperSQL.ExecuteSql("delete t_manage_task where FPALLETBARCODE='" + ts.containerCode + "'");
|
||
}
|
||
else
|
||
{
|
||
DbHelperSQL.ExecuteSql("delete t_monitor_task where F_TxtParam='" + ts.containerCode + "' and F_DeviceCommandIndex=5");
|
||
DbHelperSQL.ExecuteSql("update st_cell set FCELLSTATUS=0,FPALLETBARCODE='' where FCELLCODE='" + ts.locationCode + "'");
|
||
}
|
||
}
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
ar.data = "";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
|
||
return "";
|
||
}
|
||
|
||
private static void ErrorCountAdd(int DeviceIndex)
|
||
{
|
||
int ErrorCount = 0;
|
||
DataView dv = DbHelperSQL.Query("select F_ErrorCount from t_base_device where F_DeviceIndex=" + DeviceIndex).Tables[0].DefaultView;
|
||
if (dv.Count > 0)
|
||
{
|
||
if (dv[0][0] == DBNull.Value)
|
||
{
|
||
ErrorCount = 1;
|
||
}
|
||
else
|
||
{
|
||
ErrorCount = ((int)dv[0][0]) + 1;
|
||
}
|
||
}
|
||
DbHelperSQL.ExecuteSql("update t_base_device set F_ErrorCount=" + ErrorCount + " where F_DeviceIndex=" + DeviceIndex);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 异常状态上报处理
|
||
/// </summary>
|
||
/// <param name="content"></param>
|
||
/// <returns></returns>
|
||
public static string ErrorMesResponse(string content)
|
||
{
|
||
//处理逻辑,异常上报后根据内容停止与AGV相关任务的发送
|
||
ApplyResult ar = JsonConvert.DeserializeObject<ApplyResult>(content);
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 放箱申请请求处理
|
||
/// </summary>
|
||
/// <param name="content"></param>
|
||
/// <returns></returns>
|
||
public static string PutBoxApply(string content)
|
||
{
|
||
//处理逻辑,请求接收后查询重点输送线是否有物
|
||
UnloadContainerReq ucr = JsonConvert.DeserializeObject<UnloadContainerReq>(content);
|
||
MDevice deviceInfo = BaseDeviceService.GetDeviceInfo(12004);
|
||
MDevice deviceInfo2 = BaseDeviceService.GetDeviceInfo(12003);
|
||
UnloadContainerReqRes ucrr = new UnloadContainerReqRes();
|
||
ucrrData ud = new ucrrData();
|
||
if (deviceInfo.SplitByte_0 == 0 && deviceInfo2.SplitByte_0 == 0)
|
||
{
|
||
ucrr.code = "0";
|
||
ucrr.msg = "success";
|
||
ud.allow = true;
|
||
ucrr.data = ud;
|
||
}
|
||
else
|
||
{
|
||
ucrr.code = "1";
|
||
ucrr.msg = "false";
|
||
ud.allow = false;
|
||
ucrr.data = ud;
|
||
}
|
||
var jsonmodel = JsonConvert.SerializeObject(ucrr);
|
||
return jsonmodel;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 放容器完成
|
||
/// </summary>
|
||
/// <param name="content"></param>
|
||
/// <returns></returns>
|
||
public static string PutBoxFinish(string content)
|
||
{
|
||
UnloadContainerFinish ucf = JsonConvert.DeserializeObject<UnloadContainerFinish>(content);
|
||
ApplyResult ar = new ApplyResult();
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 输送线取箱完成
|
||
/// </summary>
|
||
/// <param name="content"></param>
|
||
/// <returns></returns>
|
||
public static string TaskBoxFinish(string content)
|
||
{
|
||
LoadContainerFinish lcf = JsonConvert.DeserializeObject<LoadContainerFinish>(content);
|
||
ApplyResult ar = new ApplyResult();
|
||
ar.code = "0";
|
||
ar.msg = "success";
|
||
var jsonmodel = JsonConvert.SerializeObject(ar);
|
||
return jsonmodel;
|
||
}
|
||
}
|
||
} |