From 299e5efbe6bd7a13a545b4a90793f29d273347f3 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期四, 30 十月 2025 11:46:21 +0800
Subject: [PATCH] 1
---
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs | 127 ++++++++++++++++++++++++++++++++++++++----
1 files changed, 115 insertions(+), 12 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
index d2ce91c..24c5e66 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
@@ -17,12 +17,22 @@
using AutoMapper;
using HslCommunication;
+using HslCommunication.Profinet.OpenProtocol;
+using Newtonsoft.Json;
using Quartz;
using System.Reflection;
+using System.Text;
+using System.Web;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.HttpContextUser;
+using WIDESEAWCS_DTO.Enum;
+using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_IBasicInfoService;
+using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.BasicInfo;
@@ -30,27 +40,32 @@
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_SignalR;
using WIDESEAWCS_Tasks.ConveyorLineJob;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace WIDESEAWCS_Tasks
{
[DisallowConcurrentExecution]
- public class CommonConveyorLineJob : JobBase, IJob
+ public partial class CommonConveyorLineJob : JobBase, IJob
{
private readonly ITaskService _taskService;
private readonly ITaskRepository _taskRepository;
private readonly ITaskExecuteDetailService _taskExecuteDetailService;
private readonly IRouterService _routerService;
+ private readonly ISys_ConfigService _sys_ConfigService;
private readonly IDt_StationManagerService _stationManagerService;
+ private readonly IDt_StationManagerRepository _stationManagerRepository;
private readonly IMapper _mapper;
private readonly ICacheService _cacheService;
+ private readonly IDeviceInfoRepository _deviceInfoRepository;
private readonly INoticeService _noticeService;
private static List<string>? userTokenIds;
private static List<int>? userIds;
- public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository)
+ public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, IDeviceInfoRepository deviceInfoRepository)
{
_taskService = taskService;
_taskExecuteDetailService = taskExecuteDetailService;
@@ -60,6 +75,8 @@
_cacheService = cacheService;
_noticeService = noticeService;
_taskRepository = taskRepository;
+ _stationManagerRepository = stationManagerRepository;
+ _deviceInfoRepository = deviceInfoRepository;
}
public async Task Execute(IJobExecutionContext context)
@@ -101,11 +118,10 @@
userTokenIds = tokenInfos.Select(x => x.Token_ID).ToList();
userIds = tokenInfos.Select(x => x.UserId).ToList();
}
-
#endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
// 灏嗕氦浜掍俊鍙疯浆鎹负甯冨皵鏁扮粍
- var structs = BitConverter.GetBytes(command.InteractiveSignal).Reverse().ToArray().ToBoolArray();
+ var structs = BitConverter.GetBytes(command.InteractiveSignal).ToArray().ToBoolArray();
// 鑾峰彇璁惧鍗忚璇︽儏
List<DeviceProtocolDetailDTO>? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal)).ToList();
@@ -114,14 +130,13 @@
foreach (var item in deviceProtocolDetails)
{
int itemValue = Convert.ToInt32(item.ProtocalDetailValue);
+ _noticeService.LineData(userIds?.FirstOrDefault(), userTokenIds, new { station.stationChildCode, InStock = structs[itemValue], Roadway = station.Roadway + station.stationFloor });
if (structs[itemValue] == true)
{
- // 鑾峰彇澶勭悊鏂规硶
-
MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType);
if (method != null)
{
- method.Invoke(this, new object[] { conveyorLine, station });
+ method.Invoke(this, new object[] { command, conveyorLine, station });
}
}
}
@@ -140,7 +155,7 @@
/// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
/// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>Request outbound
/// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
- public async Task RequestInbound(CommonConveyorLine conveyorLine, Dt_StationManager station)
+ public async Task RequestTask(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager station)
{
try
{
@@ -148,6 +163,22 @@
var log = $"銆恵conveyorLine._deviceName}銆戠珯鍙般�恵station.stationChildCode}銆戣姹傚彇璐�";
await LogAndWarn(conveyorLine.DeviceName, log);
+ if (station.stationChildCode == "3004")
+ {
+ var taskIn = _taskRepository.QueryFirst(x => x.TaskNum == command.TaskNum && x.NextAddress == station.stationChildCode && x.TaskType == (int)TaskInboundTypeEnum.Inbound && x.TaskState == (int)TaskInStatusEnum.HoistInExecuting);
+ if (taskIn != null)
+ {
+ Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == taskIn.Roadway && x.stationType == 3 && x.stationFloor == taskIn.Floor);
+ taskIn.CurrentAddress = station.stationChildCode;
+ taskIn.NextAddress = stationManager.stationChildCode;
+ taskIn.TaskState = (int)TaskInStatusEnum.InNew;
+ _taskRepository.UpdateData(taskIn);
+ }
+ }
+
+ var task = _taskService.QueryConveyorLineTask(station.stationChildCode, command.TaskNum);
+
+ await HandleNewTaskAsync(conveyorLine, command, station.stationChildCode, task);
}
catch (Exception ex)
{
@@ -155,26 +186,87 @@
}
}
+
/// <summary>
- /// RGV鎼繍瀹屾垚
+ /// 杈撻�佺嚎鍑哄簱瀹屾垚
+ /// </summary>
+ /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
+ /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
+ /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
+ public async Task ConveyorLineFinish(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager stationManager)
+ {
+ try
+ {
+ // 杈撳嚭淇℃伅锛岃〃绀虹珯鍙拌姹傚彇璐�
+ var log = $"銆恵conveyorLine._deviceName}銆戠珯鍙般�恵stationManager.stationChildCode}銆�,浠诲姟鍙�:銆恵command.TaskNum}銆戝畬鎴�";
+ await LogAndWarn(conveyorLine.DeviceName, log);
+
+ var task = _taskService.QueryConveyorLineFinishTask(stationManager.stationChildCode, command.TaskNum);
+ //鏀规煡璇㈡柟娉�
+ if (stationManager.stationType == 5 || stationManager.stationType == 4)
+ {
+ // 濡傛灉浠诲姟瀛樺湪
+ if (task != null)
+ {
+ Thread.Sleep(1000);
+ _taskService.UpdateTaskStatusToNext(task);
+ }
+ }
+
+ }
+ catch (Exception ex)
+ {
+ WriteInfo(conveyorLine.DeviceName, ex.Message);
+ }
+ }
+ /// <summary>
+ /// 杈撻�佺嚎璇锋眰鍑轰俊鎭�
/// </summary>
/// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
/// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
/// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
/// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
- public void RGVFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
+ public void RequestNextAddress(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager station, Dt_Task task)
{
+ if (task != null)
+ {
+ ConveyorLineTaskCommandWrite taskCommand = new ConveyorLineTaskCommandWrite()
+ {
+ TaskNum = Convert.ToInt16(task.TaskNum),
+ TargetAddress = Convert.ToInt16(task.NextAddress),
+ WriteInteractiveSignal = task.TaskType == (int)TaskOutboundTypeEnum.Outbound ? (byte)Convert.ToSByte(2) : (byte)Convert.ToSByte(1)
+ };
+ var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵task.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵task.PalletCode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戜笅涓�鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆戣緭閫佺嚎,task{task.ToJsonString()}";
+
+ ConsoleHelper.WriteSuccessLine(log);
+
+ _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+ WriteInfo(conveyorLine.DeviceName, log);
+
+ var result = SendCommand(taskCommand, conveyorLine, station.stationChildCode);
+ if (result)
+ {
+ Thread.Sleep(1000);
+ _taskService.UpdateTaskStatusToNext(task);
+
+ }
+ }
}
+
/// <summary>
- /// 杈撻�佺嚎鍏ュ簱瀹屾垚
+ /// 杈撻�佺嚎鎶ヨ
/// </summary>
/// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
/// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
/// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
- public void ConveyorLineFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
+ /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
+ public void ConveyorLineAlarm(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager station)
{
+ var task = _taskRepository.QueryFirst(x => x.TaskNum == command.TaskNum);
+
+ //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal,Convert.ToSByte(3), station.stationChildCode);
}
public async Task LogAndWarn(string deviceName, string log, string color = "red")
@@ -183,5 +275,16 @@
await _noticeService.Logs(userTokenIds, new { deviceName, log = log, time = DateTime.Now.ToString("G"), color = color });
WriteInfo(deviceName, log);
}
+
+ public bool SendCommand(ConveyorLineTaskCommandWrite taskCommand, CommonConveyorLine conveyorLine, string childDeviceCode)
+ {
+ conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, Convert.ToInt16(taskCommand.TargetAddress), childDeviceCode);
+ Thread.Sleep(100);
+ conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTaskNum, Convert.ToInt16(taskCommand.TaskNum), childDeviceCode);
+ Thread.Sleep(100);
+ conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(taskCommand.WriteInteractiveSignal), childDeviceCode);
+
+ return true;
+ }
}
}
--
Gitblit v1.9.3