From f40ba2a9fb9d3c2ece08e9a7cd987d4744dccab2 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期二, 17 六月 2025 15:22:05 +0800
Subject: [PATCH] 优化库内移库,堆垛机和穿梭车交互逻辑
---
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVJob.cs | 96 ++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 89 insertions(+), 7 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVJob.cs"
index 81ed94e..ef342f2 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVJob.cs"
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
+using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
@@ -15,7 +16,9 @@
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_TaskInfoService;
namespace WIDESEAWCS_Tasks
{
@@ -38,8 +41,85 @@
{
try
{
- List<Dt_Task> UpTasks = new List<Dt_Task>();
- var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskInStatusEnum.InNew.ObjToInt()).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
+ #region 浠诲姟鍙栨秷
+ var CancelTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskInStatusEnum.InCancel.ObjToInt() || x.TaskState == TaskOutStatusEnum.OutCancel.ObjToInt()).ToList();
+ foreach (var CancelTask in CancelTasks)
+ {
+ var difference = DateTime.Now.AddMinutes(-5);
+ if (difference > CancelTask.ModifyDate)
+ {
+ //todo 鍚屾鍒癢MS
+ WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(CancelTask);
+ HttpHelper.PostAsync(WMSInterfaceAddress.CancelTask, WMStask.ToJson(), headers: new Dictionary<string, string>());
+ _taskService.AddTask_Hty(CancelTask, TaskOperateTypeEnum.AGVDeletion);
+ }
+ }
+ #endregion
+
+ #region 浠诲姟鏇存柊
+ var Tasks = _taskService.Db.Queryable<Dt_Task>().Where(x =>
+ x.TaskState > (int)TaskInStatusEnum.InNew &&
+ x.TaskState < (int)TaskInStatusEnum.AGV_InFinish ||
+ x.TaskState > (int)TaskOutStatusEnum.Line_OutFinish &&
+ x.TaskState < (int)TaskOutStatusEnum.AGV_OutFinish).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
+ foreach (var Task in Tasks)
+ {
+ var obj = new
+ {
+ outID = Task.TaskNum.ToString()
+ };
+ var ResultData = HttpHelper.PostAsync(AGVInterfaceAddress.taskResult, obj.ToJson(), headers: new Dictionary<string, string>());
+ if (ResultData.Result != null)
+ {
+ var content = JsonConvert.DeserializeObject<AGVReturnInfo>(ResultData.Result);
+ if (content.code == "20000")
+ {
+ switch (content.status)
+ {
+ case "01":
+ break;
+ case "02":
+ Task.TaskState = _taskService.TaskInboundTypes.Contains(Task.TaskType) ? TaskInStatusEnum.AGV_InExecuting.ObjToInt() : TaskOutStatusEnum.AGV_OutExecuting.ObjToInt();
+ break;
+ case "08":
+ {
+ Task.TaskState = _taskService.TaskInboundTypes.Contains(Task.TaskType) ? (int)TaskInStatusEnum.AGV_InFinish : TaskOutStatusEnum.AGV_OutFinish.ObjToInt();
+ Task.CurrentAddress = Task.NextAddress;
+ Task.NextAddress = "";
+ List<Dt_Router> routers = _routerService.QueryNextRoutes(Task.CurrentAddress, Task.TargetAddress);
+ if (routers.Count > 0)
+ {
+ Task.NextAddress = routers.FirstOrDefault()?.ChildPosi ?? "";
+ }
+ if (Task.TaskState == TaskOutStatusEnum.AGV_OutFinish.ObjToInt())
+ {
+ #region 鍚慦MS鍙嶉鍫嗗灈鏈轰换鍔″畬鎴�
+ WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(Task);
+ HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>());
+ #endregion
+ }
+ }
+ break;
+ case "09":
+ {
+ Task.TaskState = _taskService.TaskInboundTypes.Contains(Task.TaskType) ? (int)TaskInStatusEnum.InCancel : TaskOutStatusEnum.OutCancel.ObjToInt();
+ Task.ModifyDate = DateTime.Now;
+ Task.Modifier = "AGV";
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ Thread.Sleep(5000);
+ }
+ _taskService.Db.Updateable(Tasks).ExecuteCommand();
+ #endregion
+
+ #region 浠诲姟涓嬪彂
+ List<Dt_Task> UpnewTasks = new List<Dt_Task>();
+ var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskInStatusEnum.InNew.ObjToInt() || x.TaskState == TaskOutStatusEnum.Line_OutFinish.ObjToInt()).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
foreach (var agvTaskDTO in GetAGVTaskDTOs(newTasks))
{
var ResultData = HttpHelper.PostAsync(AGVInterfaceAddress.taskSent, agvTaskDTO.ToJson(), headers: new Dictionary<string, string>());
@@ -48,18 +128,20 @@
if (content.code == "20000")
{
var task = newTasks.Where(x => x.TaskNum == agvTaskDTO.outID.ObjToInt()).First();
- task.TaskState = TaskInStatusEnum.AGV_InSend.ObjToInt();
- UpTasks.Add(task);
+ task.Dispatchertime = DateTime.Now;
+ task.TaskState = _taskService.TaskInboundTypes.Contains(task.TaskType) ? TaskInStatusEnum.AGV_InSend.ObjToInt() : TaskOutStatusEnum.AGV_OutSend.ObjToInt();
+ UpnewTasks.Add(task);
}
else
{
var task = newTasks.Where(x => x.TaskNum == agvTaskDTO.outID.ObjToInt()).First();
task.ExceptionMessage = content.message;
- UpTasks.Add(task);
+ UpnewTasks.Add(task);
}
Thread.Sleep(1000);
}
- var count = _taskService.Db.Updateable(UpTasks).ExecuteCommand();
+ if (UpnewTasks.Count > 0) _taskService.Db.Updateable(UpnewTasks).ExecuteCommand();
+ #endregion
}
catch (Exception ex)
{
@@ -90,7 +172,7 @@
point point2 = new point()
{
sn = "02",
- pointCode = task.NextAddress,
+ pointCode = task.NextAddress == "1001" ? "2001" : task.NextAddress,
pointType = "04",
matCode = task.PalletCode
};
--
Gitblit v1.9.3