Files
wcs/WCS.BLL/Manager/AGVManager.cs
2025-02-22 16:26:57 +08:00

173 lines
7.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.BLL.DbModels;
using WCS.BLL.Tool;
using WCS.DAL.Db;
using WCS.DAL.DbModels;
using WCS.Model;
using WCS.Model.ApiModel.AGV;
using WCS.Model.ApiModel.InOutRecord;
using WCS.Model.ApiModel.MXBackgroundThread;
namespace WCS.BLL.Manager
{
//AGV动作相关
public static class AGVManager
{
public static void InitBackgroundThread()
{
#region :
Task.Run(() =>
{
while (true)
{
//每5秒同步一次
Thread.Sleep(5000);
try
{
var url = @"http://192.168.18.150:8181/rcms/services/rest/hikRpcService/queryTaskStatus";
var tasks = DbHelp.db.Queryable<AgvTask>()
.Where(t => t.CreateTime > DateTime.Now.AddDays(-7)) //只查询7天内agv任务数据
.Where(t =>t.TaskStatus != TaskStatusEnum. && t.TaskStatus!= TaskStatusEnum.)
.OrderBy(t => t.Id)
.ToList();
if (tasks != null && tasks.Count > 0)
{
for (int i = 0; i < tasks.Count; i++)
{
try
{
//请求RCS获取任务状态
var data = new AGVQueryTaskStatusRequest();
data.taskCodes.Add(tasks[i].TaskCode);
var result = ApiHelp.GetDataFromHttp<AGVQueryTaskStatusResponse>(url, data, "POST", true);
if (result != null && result.code == "0" && result.data !=null && result.data.Count > 0)
{
var isUpdate = false;
//获取成功 是否与当前任务状态一致 如果不一致 进行更新
var responseData = result.data.First();
if (responseData.agvCode != tasks[i].AgvCode)
{
isUpdate = true;
tasks[i].AgvCode = responseData.agvCode;
}
if (responseData.taskStatus != tasks[i].TaskStatus.ToString())
{
Enum.TryParse<TaskStatusEnum>(responseData.taskStatus, out TaskStatusEnum status);
isUpdate = true;
tasks[i].TaskStatus = status;
}
if (isUpdate)
{
DbHelp.db.Updateable(tasks[i]).ExecuteCommand();
}
}
}
catch (Exception ex)
{
Logs.Write("【定时任务】获取任务状态异常:" + ex.Message);
}
Thread.Sleep(50);
}
}
}
catch (Exception ex)
{
Logs.Write("【定时任务】获取任务状态异常:" + ex.Message);
}
}
});
#endregion
}
public static object lockFlag = new object();
/// <summary>
/// 产生AGV点到点搬运任务
/// </summary>
public static AGVResponseModel GenAgvSchedulingTask(LocationInfo startLocation, LocationInfo endLocation, string shelfCode, string createUser)
{
var url = @"http://192.168.18.150:8181/rcms/services/rest/hikRpcService/genAgvSchedulingTask";
var startPositionCodePathItem = new PositionCodePathItem()
{
positionCode = startLocation.RcsStoreCode,
};
var endPositionCodePathItem = new PositionCodePathItem()
{
positionCode = endLocation.RcsStoreCode,
};
List<PositionCodePathItem> positionCodePathItems = new List<PositionCodePathItem>();
positionCodePathItems.Add(startPositionCodePathItem);
positionCodePathItems.Add((endPositionCodePathItem));
//任务只允许一个一个发送
lock (lockFlag)
{
var body = new GenAgvSchedulingTaskRequest()
{
positionCodePath = positionCodePathItems,
};
var response = ApiHelp.GetDataFromHttp<AGVResponseModel>(url, body, "POST", true);
if (response.code == "0" && response.message == "成功")
{
//生成任务数据
var task = new AgvTask()
{
ShelfCode = shelfCode,
RequestCode = body.reqCode,
TaskCode = body.taskCode,
TaskType = "GenAgvSchedulingTask",
StratLocationId = startLocation.Id,
StartLocationCode = startLocation.LocationCode,
EndLocationId = endLocation.Id,
EndLocationCode = endLocation.LocationCode,
CreateUser = createUser
};
DbHelp.db.Insertable(task).ExecuteCommand();
}
return response;
}
}
public static AGVResponseModel CancelTask(AgvTask agvTask)
{
try
{
var url = @"http://192.168.18.150:8181/rcms/services/rest/hikRpcService/cancelTask";
//任务只允许一个一个发送
lock (lockFlag)
{
var body = new AGVCancelTaskRequest()
{
taskCode = agvTask.TaskCode,
};
var response = ApiHelp.GetDataFromHttp<AGVResponseModel>(url, body, "POST", true);
if (response.code == "0" && response.message == "成功")
{
agvTask.TaskStatus = Model.ApiModel.AGV.TaskStatusEnum.;
DbHelp.db.Updateable(agvTask).ExecuteCommand();
}
return response;
}
}
catch (Exception ex)
{
return new AGVResponseModel()
{
code = "-1",
message = $"发生异常:{ex.Message}"
};
}
}
}
}