AHTC/RGD/RGD.HaiRouAPI/HandleAgvRequest.cs
2025-05-19 09:22:33 +08:00

371 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*************************************************************************************
*
* 文 件 名: 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;
}
}
}