From 9086b238cd9fbb9fbeae7cab11d59576cd9d2853 Mon Sep 17 00:00:00 2001
From: liulijun <liulijun@hnkhzn.com>
Date: 星期一, 24 十一月 2025 10:27:01 +0800
Subject: [PATCH] 合并
---
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/StackerCraneJob_YLSC3.cs | 179 +++++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 149 insertions(+), 30 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC3.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC3.cs"
index 63302b8..8b355c0 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC3.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC3.cs"
@@ -20,9 +20,12 @@
using WIDESEAWCS_Tasks.StackerCraneJob;
using WIDESEAWCS_Tasks;
using WIDESEAWCS_Core;
-using SqlSugar.Extensions;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using WIDESEAWCS_QuartzJob.Repository;
+using WIDESEAWCS_Core.Helper;
+using HslCommunication.WebSocket;
+using WIDESEAWCS_DTO.Equipment;
+using WIDESEAWCS_QuartzJob.StackerCrane;
namespace WIDESEAWCS_Tasks
{
@@ -36,8 +39,9 @@
private readonly IRouterService _routerService;
private readonly IRouterRepository _routerRepository;
private readonly IStationMangerRepository _stationMangerRepository;
+ private WebSocketServer _webSocketServer;
- public StackerCraneJob_YLSC3(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository)
+ public StackerCraneJob_YLSC3(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository,WebSocketServer webSocketServer)
{
_taskService = taskService;
_taskExecuteDetailService = taskExecuteDetailService;
@@ -45,6 +49,7 @@
_routerService = routerService;
_stationMangerRepository = stationMangerRepository;
_routerRepository = routerRepository;
+ _webSocketServer = webSocketServer;
}
public Task Execute(IJobExecutionContext context)
@@ -59,7 +64,14 @@
commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
}
commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
- if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal && commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
+
+ //鑾峰彇褰撳墠鍫嗗灈鏈虹姸鎬�
+ if (commonStackerCrane.CurrentTaskNum>0 && commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.WorkCompleted)
+ {
+ StackerCraneTaskCompletedEventArgs e = new StackerCraneTaskCompletedEventArgs(commonStackerCrane.CurrentTaskNum);
+ CommonStackerCrane_StackerCraneTaskCompletedEventHandler(commonStackerCrane, e);
+ }
+ else if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal && commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)//鍒ゆ柇涓嬪彂
{
short stackerError = commonStackerCrane.Communicator.Read<short>("DB1000.54.0");
if (stackerError == 0)
@@ -76,7 +88,7 @@
commonStackerCrane.LastTaskType = task.TaskType;
task.Dispatchertime = DateTime.Now;
task.ExceptionMessage = "";
- _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing);
+ _taskService.UpdateTaskStatusToNext(task);
commonStackerCrane.Communicator.Write("DB1000.20.0", true);
//寤舵椂1s
Thread.Sleep(1000);
@@ -85,6 +97,25 @@
}
}
}
+
+ #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
+
+ EquipmentDTO equipmentDTO = new EquipmentDTO();
+ object obj = new
+ {
+ commonStackerCrane.DeviceName,
+ commonStackerCrane.DeviceCode,
+ StackerCraneAutoStatus.Automatic,
+ StackerCraneStatus.Normal,
+ StackerCraneWorkStatus.Standby,
+ TaskNum = commonStackerCrane.CurrentTaskNum,
+ WorkType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType),
+ StackerAlarm = commonStackerCrane.Communicator.Read<short>("DB1000.54.0"),
+ };
+ equipmentDTO.StackerDataJson = obj.Serialize();
+ _webSocketServer.PublishAllClientPayload(equipmentDTO.Serialize());
+
+ #endregion
}
}
catch (Exception ex)
@@ -99,7 +130,7 @@
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
- private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
+ private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender,StackerCraneTaskCompletedEventArgs e)
{
CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane;
if (commonStackerCrane != null)
@@ -122,14 +153,19 @@
{
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
{
- Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StackerCraneStationCode == task.NextAddress && x.StackerCraneCode == deviceCode);
+ Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress && x.StackerCraneCode == deviceCode);
if (stationManger == null)
{
_taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"杈撻�佺嚎鍑哄簱绔欑偣鏈厤缃�,{task.NextAddress}");
_taskService.UpdateTaskExceptionMessage(taskNum, $"杈撻�佺嚎鍑哄簱绔欑偣鏈厤缃�,{task.NextAddress}");
return WebResponseContent.Instance.Error($"杈撻�佺嚎鍑哄簱绔欑偣鏈厤缃�,{task.NextAddress}");
}
- Dt_Router router = _routerRepository.QueryFirst(x => x.InOutType == task.TaskType && x.StartPosi == stationManger.StationCode && x.ChildPosi == stationManger.StationDeviceCode);
+ bool depth = false;
+ if (task.Grade > 0 && task.TaskType == TaskTypeEnum.PrintYLOutbound.ObjToInt())
+ {
+ depth = true;
+ }
+ Dt_Router router = _routerRepository.QueryFirst(x => x.InOutType == task.TaskType && x.StartPosi == stationManger.StationCode && x.ChildPosi == stationManger.StationDeviceCode && (depth ? x.Depth == 2 : true));
if (router == null)
{
_taskService.UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
@@ -137,26 +173,69 @@
return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
}
int oldStatus = task.TaskState;
- // 鍫嗗灈鏈哄畬鎴�
- _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: router.NextPosi);
+ //鍘熸枡涓�妤煎嚭搴撲笅鍙戠嚎浣撻�昏緫
+ if (stationManger.StationDeviceCode == "CL1_YL")
+ {
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
+ if (device != null)
+ {
+ OtherDevice otherDevice = (OtherDevice)device;
+ otherDevice.SetValue(WR_CLineYLDB.WR_Task, taskNum, stationManger.StationCode);
+ // 鍫嗗灈鏈哄畬鎴�
+ _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: router.NextPosi);
+ }
+ else
+ {
+ WriteError(deviceCode, $"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞彂閫佽緭閫佺嚎鍑哄簱淇″彿");
+ _taskService.UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞彂閫佽緭閫佺嚎鍑哄簱淇″彿");
+ return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞彂閫佽緭閫佺嚎鍑哄簱淇″彿");
+ }
+
+ }
+ else//鍘熸枡浜屾ゼ鍑哄簱涓嬪彂绾夸綋閫昏緫
+ {
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
+ if (device != null)
+ {
+ CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+ conveyorLine.SetValue(ConveyorLineDBName.TaskNum, taskNum, stationManger.StationCode);
+ conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, router.NextPosi, stationManger.StationCode);
+ conveyorLine.SetValue(ConveyorLineDBName.Width, task.TaskLength, stationManger.StationCode);
+ conveyorLine.SetValue(ConveyorLineDBName.Height, task.HeightType, stationManger.StationCode);
+ conveyorLine.SetValue(ConveyorLineDBName.Barcode, task.PalletCode, stationManger.StationCode);
+ conveyorLine.SetValue(ConveyorLineDBName.ResponState, 86, stationManger.StationCode);
+ _taskService.UpdateTaskStatusToNext(task);
+ }
+ else
+ {
+ WriteError(deviceCode, $"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞彂閫佽緭閫佺嚎鍑哄簱淇″彿");
+ _taskService.UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞彂閫佽緭閫佺嚎鍑哄簱淇″彿");
+ return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞彂閫佽緭閫佺嚎鍑哄簱淇″彿");
+ }
+ }
+
_taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"绯荤粺鑷姩娴佺▼,浠诲姟鐘舵�佷粠銆恵oldStatus}銆戣浆鍒般�恵task.TaskState}銆�");
WriteInfo(deviceCode, $"鍫嗗灈鏈哄嚭搴撲换鍔″畬鎴�,浠诲姟鍙�:{taskNum}");
}
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup || task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
{
- WriteInfo(deviceCode, $"鍫嗗灈鏈轰换鍔″畬鎴�,浠诲姟鍙�:{taskNum}");
- _taskService.TaskCompleted(taskNum);
+ WebResponseContent responseContent = _taskService.TaskCompleted(taskNum);
+ if (!responseContent.Status)
+ {
+ _taskService.UpdateTaskExceptionMessage(taskNum, $"{responseContent.Message}");
+ }
+ WriteInfo(deviceCode, $"鍫嗗灈鏈哄叆搴撲换鍔″畬鎴�,浠诲姟鍙�:{taskNum}");
}
else
{
- WriteInfo(deviceCode, $"鏈壘鍒拌浠诲姟绫诲瀷鍥炶皟WMS浠诲姟瀹屾垚鎺ュ彛,{task.TaskType}");
+ WriteError(deviceCode, $"鏈壘鍒拌浠诲姟绫诲瀷鍥炶皟WMS浠诲姟瀹屾垚鎺ュ彛,{task.TaskType}");
_taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒拌浠诲姟绫诲瀷鍥炶皟WMS浠诲姟瀹屾垚鎺ュ彛,{task.TaskType}");
_taskService.UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒拌浠诲姟绫诲瀷鍥炶皟WMS浠诲姟瀹屾垚鎺ュ彛,{task.TaskType}");
}
}
else
{
- WriteInfo(deviceCode, $"鏈壘鍒颁换鍔′俊鎭�,浠诲姟鍙�:{taskNum}");
+ WriteError(deviceCode, $"鏈壘鍒颁换鍔′俊鎭�,浠诲姟鍙�:{taskNum}");
return WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔′俊鎭�,浠诲姟鍙�:{taskNum}");
}
@@ -177,6 +256,13 @@
/// <returns></returns>
private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
{
+ //鍒ゆ柇鏄惁鏈夋鎵ц鐨勪换鍔★紝濡傛灉鏈夊垯涓嶄笅鍙�
+ Dt_Task? taskOld = _taskRepository.QueryFirst(x => x.DeviceCode == commonStackerCrane.DeviceCode && x.Roadway == commonStackerCrane.DeviceCode && x.TaskState == TaskStatusEnum.SC_Executing.ObjToInt());
+ if (taskOld != null)
+ {
+ return null;
+ }
+
Dt_Task? task;
if (commonStackerCrane.LastTaskType == null)
{
@@ -244,21 +330,53 @@
Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress && x.StackerCraneCode == task.DeviceCode);
if (stationManger != null)
{
- IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
- if (device != null)
+ if (stationManger.StationDeviceCode == "CL1_YL")
{
- OtherDevice client = (OtherDevice)device;
- if (client.GetValue<WR_CLineYLDB, short>(WR_CLineYLDB.WR_Request, stationManger.StationCode) != 99)//鍑哄簱绔欏彴鏈鍗犵敤
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
+ if (device != null)
{
- task.NextAddress = stationManger.StackerCraneStationCode;
- _taskRepository.UpdateData(task);
- return task;
+ OtherDevice client = (OtherDevice)device;
+ if (client.GetValue<WR_CLineYLDB, short>(WR_CLineYLDB.WR_Request, stationManger.StationCode) != 99)//鍑哄簱绔欏彴鏈鍗犵敤
+ {
+ //task.NextAddress = stationManger.StackerCraneStationCode;
+ //_taskRepository.UpdateData(task);
+ return task;
+ }
+ else
+ {
+ task.ExceptionMessage = "鍑哄簱绔欏彴鏃犳硶涓嬪彂";
+ _taskRepository.UpdateData(task);
+ }
+ }
+ else
+ {
+ WriteInfo(task.DeviceCode, $"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
}
}
else
{
- WriteInfo(task.DeviceCode, $"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
+ if (device != null)
+ {
+ CommonConveyorLine client = (CommonConveyorLine)device;
+ if (client.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, stationManger.StationCode) != 99)//鍑哄簱绔欏彴鏈鍗犵敤
+ {
+ task.NextAddress = stationManger.StackerCraneStationCode;
+ _taskRepository.UpdateData(task);
+ return task;
+ }
+ else
+ {
+ task.ExceptionMessage = "鍑哄簱绔欏彴鏃犳硶涓嬪彂";
+ _taskRepository.UpdateData(task);
+ }
+ }
+ else
+ {
+ WriteInfo(task.DeviceCode, $"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵stationManger.StationDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
+ }
}
}
else
@@ -279,9 +397,9 @@
{
YLStackerCraneTaskCommand stackerCraneTaskCommand = new YLStackerCraneTaskCommand();
+ stackerCraneTaskCommand.PalletType = Convert.ToInt16(task.PalletType);
stackerCraneTaskCommand.TaskNum = task.TaskNum;
stackerCraneTaskCommand.WorkType = 5;
- stackerCraneTaskCommand.PalletType = Convert.ToInt16(task.PalletType);
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
{
@@ -313,12 +431,13 @@
}
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//鍒ゆ柇鏄惁鏄嚭搴撲换鍔�
{
- string[] targetCodes = task.NextAddress.Split("-");
+ Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x=>x.StationCode==task.NextAddress && x.StackerCraneCode==task.DeviceCode);
+ string[] targetCodes = stationManger.StackerCraneStationCode.Split("-");
if (targetCodes.Length == 3)
{
- stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
- stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
- stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
}
else
{
@@ -329,9 +448,9 @@
string[] sourceCodes = task.CurrentAddress.Split("-");
if (sourceCodes.Length == 5)
{
- stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
- stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
- stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
}
else
{
--
Gitblit v1.9.3