From 1c637ea862816ae6fa53945fa0327b95c79aa18b Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期五, 22 八月 2025 16:20:27 +0800
Subject: [PATCH] 增强 WMS IP 地址处理逻辑的健壮性在 `TaskService.cs` 文件中,添加了对 `result` 是否为 `null` 的检查,以确保在反序列化之前 `result` 是有效的。同时,调整了对 `content.Data` 的检查逻辑,确保在 `content.Data` 不为空的情况下,才会进一步检查其值是否为 "NG"。如果是 "NG",则设置 `task.Remark` 为 "NG"。这些更改提高了代码的健壮性,避免了潜在的空引用异常。
---
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_GW/CommonConveyorLine_GWJob.cs | 99 +++++++++++++++++++++++++++----------------------
1 files changed, 55 insertions(+), 44 deletions(-)
diff --git a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_GW/CommonConveyorLine_GWJob.cs b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_GW/CommonConveyorLine_GWJob.cs
index 1de5cf2..c0608b7 100644
--- a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_GW/CommonConveyorLine_GWJob.cs
+++ b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_GW/CommonConveyorLine_GWJob.cs
@@ -202,8 +202,6 @@
try
{
var task = _taskService.QueryBarCodeConveyorLineTask(command.ConveyorLineBarcode, childDeviceCode);
- //HandleTaskOut(conveyorLine, command, childDeviceCode, task);
- // && command.ConveyorLineBarcode != "NoRead" && !command.ConveyorLineBarcode.IsNotEmptyOrNull()
var log = $"銆恵conveyorLine.DeviceName}銆戞墭鐩樺彿锛氥�恵command.ConveyorLineBarcode}銆戜换鍔″彿锛氥�恵command.ConveyorLineTaskNum}銆戣澶囩紪鐮侊細銆恵childDeviceCode}銆�";
ConsoleHelper.WriteSuccessLine(log);
@@ -216,9 +214,6 @@
}
else
{
- //ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
- //conveyorLine.SendCommand(taskCommand, childDeviceCode);
- //conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, (long)task.TaskNum, childDeviceCode);
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, task.NextAddress, childDeviceCode);
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, task.PalletCode, childDeviceCode);
@@ -241,7 +236,6 @@
/// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
public void RequestInNextAddress(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
{
- //Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode, command.ConveyorLineBarcode);
if (task != null)
{
@@ -275,8 +269,6 @@
var task = _taskService.QueryExecutingTaskByBarcode(command.ConveyorLineBarcode, childDeviceCode);
if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish)
{
- //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-
WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
if (content.Status)
@@ -301,10 +293,6 @@
//var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode, command.ConveyorLineBarcode);
if (task != null)
{
- //ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
- //conveyorLine.SendCommand(taskCommand, childDeviceCode);
- //conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
-
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, (long)task.TaskNum, childDeviceCode);
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, task.NextAddress, childDeviceCode);
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, task.PalletCode, childDeviceCode);
@@ -362,10 +350,6 @@
Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
if (newTask != null)
{
- //ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
- //conveyorLine.SendCommand(taskCommand, childDeviceCode);
- //conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
-
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, (long)newTask.TaskNum, childDeviceCode);
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, newTask.NextAddress, childDeviceCode);
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, newTask.PalletCode, childDeviceCode);
@@ -375,11 +359,6 @@
}
else
{
- //ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
- //taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationNGChildCode);
- //conveyorLine.SendCommand(taskCommand, childDeviceCode);
- //conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
-
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, (long)task.TaskNum, childDeviceCode);
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, task.NextAddress, childDeviceCode);
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, task.PalletCode, childDeviceCode);
@@ -399,7 +378,12 @@
{
try
{
- //var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
+ var log = $"銆恵conveyorLine.DeviceName}銆戞墭鐩樺彿锛氥�恵command.ConveyorLineBarcode}銆戜换鍔″彿锛氥�恵command.ConveyorLineTaskNum}銆戣澶囩紪鐮侊細銆恵childDeviceCode}銆�";
+ ConsoleHelper.WriteSuccessLine(log);
+
+ _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+ WriteInfo(conveyorLine.DeviceName, log);
+
var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode, command.ConveyorLineBarcode);
if (task != null)
{
@@ -409,13 +393,10 @@
Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode);
if (task.PalletCode != command.ConveyorLineBarcode)
{
- //var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == task.TargetAddress).Capacity;
- //taskCommand.ConveyorLineTargetAddress = (short)NGAddress;
taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationNGChildCode);
}
else
{
- //Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode);
taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationLocation);
}
@@ -445,9 +426,55 @@
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, taskCommand.ConveyorLineTargetAddress, childDeviceCode);
conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, taskCommand.ConveyorLineBarcode, childDeviceCode);
conveyorLine.Communicator.Write(address, 1);
- //conveyorLine.SetValue(ConveyorLineDBName_After.InteractiveSignal, taskCommand.InteractiveSignal, childDeviceCode);
- //conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
- WriteInfo($"{conveyorLine.DeviceName}杈撻�佺嚎鍑哄簱瀹屾垚", $"瀛愯妭鐐广�恵childDeviceCode}銆戞墭鐩樺彿锛氥�恵command.ConveyorLineBarcode}銆戜换鍔″璞★細銆恵JsonConvert.SerializeObject(taskCommand)}銆�");
+ WriteInfo($"{conveyorLine.DeviceName}杈撻�佺嚎鍑哄簱瀹屾垚", $"瀛愯妭鐐广�恵childDeviceCode}銆戞墭鐩樺彿锛氥�恵command.ConveyorLineBarcode}銆�");
+ }
+ else
+ {
+ var taskNext = _taskService.QueryExecutingConveyorLineTask(childDeviceCode, command.ConveyorLineBarcode);
+ if (taskNext != null)
+ {
+ WebResponseContent content = new WebResponseContent();
+ ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(taskNext);
+ taskCommand.InteractiveSignal = command.InteractiveSignal;
+ Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode);
+ if (taskNext.PalletCode != command.ConveyorLineBarcode)
+ {
+ taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationNGChildCode);
+ }
+ else
+ {
+ taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationLocation);
+ }
+
+ if (stationManager.stationPLC == "1007" && stationManager.stationArea == "Cache") //鏇存柊鍦ㄩ�旀暟鎹�
+ {
+ dt_needBarcode needBarcode = _needBarcodeRepository.QueryFirst(x => x.productLine == stationManager.productLine && x.toArea == stationManager.stationChildCode);
+
+ if (needBarcode != null)
+ {
+ if (needBarcode.inLineNum == 0 || needBarcode.inLineNum > 0)
+ {
+ needBarcode.inLineNum = 0;
+ }
+ else
+ {
+ needBarcode.inLineNum--;
+ }
+ _needBarcodeRepository.UpdateData(needBarcode);
+ }
+ }
+ taskNext.ExceptionMessage = log;
+ content = _taskService.UpdateTaskStatusToNext(taskNext);
+ var proAddress = conveyorLine.DeviceProDTOs
+ .FirstOrDefault(x => x.DeviceChildCode == childDeviceCode && x.DeviceProParamName == ConveyorLineDBName_After.InteractiveSignal.ToString())
+ ?.DeviceProAddress;
+ string address = proAddress.Contains(".0") ? proAddress : proAddress + ".0";
+ conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, taskCommand.ConveyorLineTaskNum, childDeviceCode);
+ conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, taskCommand.ConveyorLineTargetAddress, childDeviceCode);
+ conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, taskCommand.ConveyorLineBarcode, childDeviceCode);
+ conveyorLine.Communicator.Write(address, 1);
+ WriteInfo($"{conveyorLine.DeviceName}杈撻�佺嚎鍑哄簱瀹屾垚", $"瀛愯妭鐐广�恵childDeviceCode}銆戞墭鐩樺彿锛氥�恵command.ConveyorLineBarcode}銆�");
+ }
}
}
catch (Exception ex)
@@ -455,22 +482,6 @@
WriteInfo($"{conveyorLine.DeviceName}杈撻�佺嚎鍑哄簱瀹屾垚", $"寮傚父淇℃伅銆恵JsonConvert.SerializeObject(ex.Message)}銆�,瀛愯妭鐐广�恵childDeviceCode}銆戞墭鐩樺彿锛氥�恵command.ConveyorLineBarcode}銆�");
}
}
-
- /// <summary>
- /// 杈撻�佺嚎浜や簰瀹屾垚
- /// </summary>
- /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
- /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
- /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
- /// <param name="value">鍊�</param>
- //public void ConveyorLineSendFinish(CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDeValue, bool value)
- //{
- // DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
- // string[] x = devicePro.DeviceProAddress.Split('.');
- // x[x.Length - 1] = (ProtocalDetailValue + 1).ToString();
- // string DeviceProAddress = string.Join(".", x);
- // conveyorLine.Communicator.Write(DeviceProAddress, value);
- //}
/// <summary>
/// 鐩戞祴绌烘墭鐩樺疄鐩樺嚭搴�
--
Gitblit v1.9.3