From dda095e27b535d5748340f127c5f83c0d1324226 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期三, 29 十月 2025 17:30:58 +0800
Subject: [PATCH] 1
---
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs | 308 +++++++++++++++++++++++++++++++++-----------------
1 files changed, 201 insertions(+), 107 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index 9c7d19e..03b7398 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -1,14 +1,21 @@
-锘縰sing Mapster;
+锘縰sing HslCommunication;
+using Mapster;
+using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using Quartz;
using System.Diagnostics.CodeAnalysis;
using System.Text;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Communicator;
+using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.HttpContextUser;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_DTO.WMS;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoRepository;
@@ -20,6 +27,7 @@
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_SignalR;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
using WIDESEAWCS_Tasks.StackerCraneJob;
namespace WIDESEAWCS_Tasks
@@ -34,12 +42,12 @@
private readonly ICacheService _cacheService;
private readonly INoticeService _noticeService;
private readonly IDt_StationManagerRepository _stationManagerRepository;
- private readonly ITask_HtyRepository _htyRepository;
+ private readonly ITask_HtyRepository _task_htyRepository;
private readonly ISys_ConfigService _sys_ConfigService;
private static List<string>? userTokenIds;
private static List<int>? userIds;
- public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, ICacheService cacheService, INoticeService noticeService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository htyRepository, ISys_ConfigService sys_ConfigService)
+ public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, ICacheService cacheService, INoticeService noticeService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository task_htyRepository, ISys_ConfigService sys_ConfigService)
{
_taskService = taskService;
_taskExecuteDetailService = taskExecuteDetailService;
@@ -48,7 +56,7 @@
_cacheService = cacheService;
_noticeService = noticeService;
_stationManagerRepository = stationManagerRepository;
- _htyRepository = htyRepository;
+ _task_htyRepository = task_htyRepository;
_sys_ConfigService = sys_ConfigService;
}
@@ -222,6 +230,7 @@
{
if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.FinishConfirm) != 1)
{
+ Thread.Sleep(1000);
ConsoleHelper.WriteColorLine($"銆恵commonStackerCrane.DeviceName}銆戝爢鍨涙満浣滀笟鐘舵�侊細銆恵(int)commonStackerCrane.StackerCraneWorkStatusValue}銆戞椂闂淬�恵DateTime.Now}銆�", ConsoleColor.Magenta);
string str = $"銆恵commonStackerCrane.DeviceName}銆戜换鍔″畬鎴�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
@@ -229,16 +238,43 @@
ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
var task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum);
- if (task == null) commonStackerCrane.SetValue(StackerCraneDBName.FinishConfirm, 1);
-
-
+ if (task == null)
+ {
+ commonStackerCrane.SetValue(StackerCraneDBName.FinishConfirm, 1);
+ return;
+ }
+ string WorkStatus = $"銆恵commonStackerCrane.StackerCraneWorkStatusValue}銆�";
+ bool IsWrite = false;
var content = _taskService.StackCraneTaskCompleted(e.TaskNum);
- var isWorkType = commonStackerCrane.SetValue(StackerCraneDBName.FinishConfirm, 1);
+ if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+ {
+ CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1001") as CommonConveyorLine;
+ if (conveyorLine != null)
+ {
+ short InteractiveSignal = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, "LK001");
+ var structs = BitConverter.GetBytes(InteractiveSignal).Reverse().ToArray().ToBoolArray();
+ if (structs[0])
+ {
+ IsWrite = conveyorLine.Communicator.WriteNoRead("DB100.0", 0);
+ Thread.Sleep(1000);
+ IsWrite = conveyorLine.Communicator.WriteNoRead("DB100.0", 9999);
+ if (!IsWrite)
+ {
+ return;
+ }
+ }
+ }
+
+ _taskService.UpdateTaskStatusToNext(task.TaskNum);
+ }
+
+ //var isWorkType = commonStackerCrane.SetValue(StackerCraneDBName.FinishConfirm, 1);
+ var isWorkType = commonStackerCrane.Communicator.WriteNoRead("DB100.0", 1);
- str = $"{commonStackerCrane.DeviceName}銆慦MS|WCS浠诲姟瀹屾垚锛氥�恵content.Status}{content.Message}銆�,鍫嗗灈鏈哄畬鎴愪俊鍙峰啓鍏ワ細銆恵isWorkType}銆�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
- WriteInfo(commonStackerCrane.DeviceName, str);
+ str = $"{commonStackerCrane.DeviceName}銆慦MS|WCS浠诲姟瀹屾垚锛氥�恵content.Status}{content.Message}銆�,鍫嗗灈鏈哄畬鎴愪俊鍙峰啓鍏ワ細銆恵isWorkType}銆�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆戣緭閫佺嚎鍐欏叆{IsWrite}";
+ WriteInfo(commonStackerCrane.DeviceName, str + WorkStatus);
ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
}
}
@@ -281,30 +317,85 @@
if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
{
- // 妫�鏌ュ綋鍓嶅嚭搴撲换鍔$珯鍙版槸鍚﹀厑璁告斁璐�
- var occupiedStation = OutTaskStationIsOccupied(task);
- if (occupiedStation == null)
+ var InTask = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskInStatusEnum.InNew && x.TaskState< (int)TaskInStatusEnum.SC_InExecuting);
+ var OutTask = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskOutStatusEnum.OutNew && x.TaskState < (int)TaskOutStatusEnum.AGV_OutExecuting);
+ if (InTask != null)
{
- // 濡傛灉褰撳墠鍑哄簱浠诲姟绔欏彴涓嶅厑璁告斁璐э紝鎺掗櫎褰撳墠浠诲姟锛屾煡鎵惧叾浠栧嚭搴撲换鍔�
-
- var log = $"浠诲姟鍙凤細銆恵task.TaskNum}銆戝嚭搴撳湴鍧�锛氥�恵task.NextAddress}銆戜笉鍏佽鏀捐揣";
- ConsoleHelper.WriteErrorLine(log);
-
- _noticeService.Logs(userTokenIds, new { commonStackerCrane.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
- WriteInfo(commonStackerCrane.DeviceName, log);
-
- task = FindAnotherOutboundTask(commonStackerCrane.DeviceCode, task.TaskId);
-
- if (task == null)
- {
- task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
- }
+ return null;
+ }
+ else if (OutTask != null)
+ {
+ return null;
}
else
{
- return task;
- }
+ string[] sourceCodes = task.SourceAddress.Split("-");
+ if (sourceCodes[0].Contains("3"))
+ {
+ var taskDto = new RequestTaskDto()
+ {
+ Position = task.SourceAddress,
+ PalletCode = task.PalletCode,
+ TaskNum = task.TaskNum
+ };
+ // 鑾峰彇WMSip鍦板潃
+ var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+ var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
+ var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.StackerIsNeedRelocation).FirstOrDefault()?.ConfigValue;
+ if (wmsBasez == null || requestLocation == null)
+ {
+ throw new InvalidOperationException("WMS IP 鏈厤缃�");
+ }
+ var wmsIpAddrss = wmsBasez + requestLocation;
+
+ var result = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
+
+ WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
+
+ if (!content.Status)
+ {
+ task.ExceptionMessage = content.Message;
+ _taskRepository.UpdateData(task);
+ return null;
+ }
+
+ // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
+ var taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
+
+ if (taskDTO.TaskNum != task.TaskNum)
+ {
+ _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+ return _taskRepository.QueryFirst(x => x.TaskNum == taskDTO.TaskNum);
+ }
+ }
+
+ CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x=>x.DeviceCode =="1001") as CommonConveyorLine;
+ if (conveyorLine != null)
+ {
+ short InteractiveSignal = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, "LK001");
+ var structs = BitConverter.GetBytes(InteractiveSignal).Reverse().ToArray().ToBoolArray();
+ if (structs[0] && !structs[2] && !structs[1])
+ {
+ conveyorLine.Communicator.WriteNoRead("DB100.0", 9990);
+ }
+ if (structs[0] && structs[2])
+ {
+ conveyorLine.Communicator.WriteNoRead("DB100.0", 9990);
+ return task;
+ }
+ else
+ {
+ task.ExceptionMessage = "璇锋鏌ヨ緭閫佺嚎鏄惁鏄嚜鍔ㄦā寮忔垨宸茬粡绉诲姩鍒板嚭搴撳彛";
+ return null;
+ }
+ }
+ else
+ {
+ task.ExceptionMessage = "杈撻�佺嚎璁惧鏂紑杩炴帴";
+ return null;
+ }
+ }
}
else if (task == null)
{
@@ -390,94 +481,97 @@
{
StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
- stackerCraneTaskCommand.Barcode = task.PalletCode;
- stackerCraneTaskCommand.TaskNum = task.TaskNum;
- stackerCraneTaskCommand.WorkType = 1;
- stackerCraneTaskCommand.StartCommand = 1;
+ stackerCraneTaskCommand.TaskNum = Convert.ToInt16(task.TaskNum);
+ stackerCraneTaskCommand.WorkType = Convert.ToInt16(1);
+ stackerCraneTaskCommand.StartCommand = Convert.ToInt16(1);
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
{
- List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway);
- if (routers.Count > 0)
- {
- stackerCraneTaskCommand.StartRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
- stackerCraneTaskCommand.StartColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
- stackerCraneTaskCommand.StartLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
-
- string[] targetCodes = task.NextAddress.Split("-");
- if (targetCodes.Length == 3)
- {
- stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
- stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
- stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
- }
- else
- {
- //鏁版嵁閰嶇疆閿欒
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
- return null;
- }
- }
- else
- {
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
- return null;
- }
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
- {
- List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress);
- if (routers.Count > 0)
- {
- stackerCraneTaskCommand.EndRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
- stackerCraneTaskCommand.EndColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
- stackerCraneTaskCommand.EndLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
-
- string[] sourceCodes = task.CurrentAddress.Split("-");
- if (sourceCodes.Length == 3)
- {
- stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
- stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
- stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
- }
- else
- {
- //鏁版嵁閰嶇疆閿欒
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
- return null;
- }
- }
- else
- {
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鏀捐揣绔欏彴淇℃伅");
- return null;
- }
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
- {
- string[] targetCodes = task.NextAddress.Split("-");
- if (targetCodes.Length == 3)
- {
- stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
- stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
- stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
- }
- else
- {
- //鏁版嵁閰嶇疆閿欒
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
- return null;
- }
- string[] sourceCodes = task.CurrentAddress.Split("-");
+ var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.stationChildCode == task.CurrentAddress);
+ string[] sourceCodes = station.stationLocation.Split("-");
if (sourceCodes.Length == 3)
{
- stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
}
else
{
//鏁版嵁閰嶇疆閿欒
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+ return null;
+ }
+ string[] targetCodes = task.NextAddress.Split("-");
+ if (targetCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+ }
+ else
+ {
+ //鏁版嵁閰嶇疆閿欒
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+ return null;
+ }
+ }
+ else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+ {
+ string[] sourceCodes = task.CurrentAddress.Split("-");
+ if (sourceCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+ }
+ else
+ {
+ //鏁版嵁閰嶇疆閿欒
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+ return null;
+ }
+ var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.stationChildCode == task.NextAddress);
+ string[] targetCodes = station.stationLocation.Split("-");
+ if (targetCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+ }
+ else
+ {
+ //鏁版嵁閰嶇疆閿欒
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+ return null;
+ }
+
+ }
+ else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+ {
+ string[] sourceCodes = task.CurrentAddress.Split("-");
+ if (sourceCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+ }
+ else
+ {
+ //鏁版嵁閰嶇疆閿欒
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+ return null;
+ }
+
+ string[] targetCodes = task.NextAddress.Split("-");
+ if (targetCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+ }
+ else
+ {
+ //鏁版嵁閰嶇疆閿欒
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
return null;
}
}
--
Gitblit v1.9.3