From b8cd98f0a2d8a7e644563eb67d4c88371279a729 Mon Sep 17 00:00:00 2001 From: huangxiaoqiang <1247017146@qq.com> Date: 星期三, 09 四月 2025 10:17:23 +0800 Subject: [PATCH] 1 --- Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs | 884 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 790 insertions(+), 94 deletions(-) diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs index b1f3bab..19b2a12 100644 --- a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs +++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs @@ -1,106 +1,299 @@ -锘�#region << 鐗� 鏈� 娉� 閲� >> -/*---------------------------------------------------------------- - * 鍛藉悕绌洪棿锛歐IDESEAWCS_Tasks.ConveyorLineJob - * 鍒涘缓鑰咃細鑳$搴� - * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36 - * 鐗堟湰锛歏1.0.0 - * 鎻忚堪锛� - * - * ---------------------------------------------------------------- - * 淇敼浜猴細 - * 淇敼鏃堕棿锛� - * 鐗堟湰锛歏1.0.1 - * 淇敼璇存槑锛� - * - *----------------------------------------------------------------*/ -#endregion << 鐗� 鏈� 娉� 閲� >> - -using AutoMapper; -using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; +锘縰sing AutoMapper; +using HslCommunication; +using NetTaste; +using Newtonsoft.Json; using Quartz; -using System; -using System.Collections.Generic; -using System.Linq; +using SqlSugar; using System.Reflection; -using System.Text; -using System.Threading.Tasks; +using WIDESEAWCS_BasicInfoRepository; +using WIDESEAWCS_BasicInfoService; +using WIDESEAWCS_Common; +using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_Core.HttpContextUser; +using WIDESEAWCS_DTO.MOM; +using WIDESEAWCS_DTO.TaskInfo; +using WIDESEAWCS_IProcessRepository; +using WIDESEAWCS_ISystemServices; +using WIDESEAWCS_ITaskInfo_HtyRepository; +using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; +using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; +using WIDESEAWCS_QuartzJob.Models; +using WIDESEAWCS_QuartzJob.Repository; using WIDESEAWCS_QuartzJob.Service; +using WIDESEAWCS_SignalR; using WIDESEAWCS_Tasks.ConveyorLineJob; +using ICacheService = WIDESEAWCS_Core.Caches.ICacheService; 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 ITask_HtyRepository _task_HtyRepository; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly IRouterService _routerService; + private readonly IPlatFormRepository _platFormRepository; + private readonly ISys_ConfigService _sys_ConfigService; private readonly IMapper _mapper; + private readonly IDt_StationManagerService _stationManagerService; + private readonly IDt_StationManagerRepository _stationManagerRepository; + private readonly ICacheService _cacheService; + private readonly INoticeService _noticeService; + private readonly IDeviceInfoRepository _deviceInfoRepository; - public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper) + private static List<string>? userTokenIds; + private static List<int>? userIds; + + public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, IPlatFormRepository platFormRepository, ISys_ConfigService sys_ConfigService, IDt_StationManagerService stationManagerService, IDt_StationManagerRepository stationManagerRepository, ICacheService cacheService, INoticeService noticeService, IDeviceInfoRepository deviceInfoRepository, ITask_HtyRepository task_HtyRepository) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _routerService = routerService; _mapper = mapper; + _taskRepository = taskRepository; + _platFormRepository = platFormRepository; + _sys_ConfigService = sys_ConfigService; + _stationManagerService = stationManagerService; + _stationManagerRepository = stationManagerRepository; + _cacheService = cacheService; + _noticeService = noticeService; + _deviceInfoRepository = deviceInfoRepository; + _task_HtyRepository = task_HtyRepository; } - public Task Execute(IJobExecutionContext context) + public async Task Execute(IJobExecutionContext context) { - //Console.Out.WriteLine(DateTime.Now); + string jobName = context.JobDetail.Key.Name; try { + // 浠嶫obDataMap涓幏鍙栦紶閫掔殑鍙傛暟 CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams"); if (conveyorLine != null) { + //ConsoleHelper.WriteColorLine("寮�濮嬶細" + DateTime.Now, ConsoleColor.Cyan); + // 鏌ヨ鎵�鏈夊瓙璁惧鐨勪綅缃� List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); - List<Task> tasks = new List<Task>(); - foreach (string childDeviceCode in childDeviceCodes) + // 鑾峰彇鎵�鏈夌珯鐐圭鐞嗗櫒 + List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode); + + // 骞惰澶勭悊姣忎釜瀛愯澶� + var tasks = childDeviceCodes.Select(childDeviceCode => ProcessDeviceAsync(conveyorLine, childDeviceCode)).ToList(); + + // 骞惰澶勭悊姣忎釜绔欑偣绠$悊鍣� + tasks = stationManagers.Select(station => Task.Run(async () => { - //Task task = Task.Run(() => - //{ - ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode); - if (command != null) + var (command, commandWrite) = ReadCommands(station, conveyorLine); + if (command == null || commandWrite == null) { - DeviceProtocolDetailDTO? deviceProtocolDetail = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.ProtocalDetailValue == command.InteractiveSignal.ToString() && x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal)); - if (deviceProtocolDetail != null) - { - MethodInfo? method = GetType().GetMethod(deviceProtocolDetail.ProtocolDetailType); - if (method != null) - { - method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode }); - } - else - { - //todo 鏈壘鍒版柟娉曟椂 - } - } + return; } - //}); - //tasks.Add(task); - } - Task.WaitAll(tasks.ToArray()); + IStationHandler handler = StationHandlerFactory.GetHandler(station.stationType, this); + await handler.HandleStationAsync(conveyorLine, station, command, commandWrite); + })).ToList(); + + #region + //foreach (var station in stationManagers) + //{ + // #region + // //tasks.Add(Task.Run(async () => + // //{ + // // if (station.stationType == 11) + // // { + // // // 璇诲彇浠诲姟鍛戒护鍜岃澶囧懡浠� + // // ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(station.stationChildCode); + // // ConveyorLineTaskCommandWrite commandWrite = conveyorLine.ReadCustomer<ConveyorLineTaskCommandWrite>(station.stationChildCode, "DeviceCommand"); + // // if (command != null && commandWrite != null) + // // { + // // // 灏嗕氦浜掍俊鍙疯浆鎹负甯冨皵鏁扮粍 + // // var structs = BitConverter.GetBytes(commandWrite.WriteInteractiveSignal).Reverse().ToArray().ToBoolArray(); + // // if (structs[0] == true) + // // { + // // // 杈撳嚭璀﹀憡淇℃伅 + // // var log = $"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戠┖鎵樼洏璇锋眰鎵爜鍏ュ簱"; + // // ConsoleHelper.WriteWarningLine(log); + + // // await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); + // // WriteInfo(conveyorLine.DeviceName, log); + + // // // 澶勭悊鍏ュ簱璇锋眰 + // // NGRequestTaskInbound(conveyorLine, command, station, 0); + // // } + // // else + // // { + // // // 鍙戦�佸畬鎴愪俊鍙� + // // ConveyorLineSendFinish(conveyorLine, station.stationChildCode, 0, false); + // // } + // // } + // // } + // // else if (station.stationType == 5) + // // { + // // // 璇诲彇浠诲姟鍛戒护鍜岃澶囧懡浠� + // // ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(station.stationChildCode); + // // ConveyorLineTaskCommandWrite commandWrite = conveyorLine.ReadCustomer<ConveyorLineTaskCommandWrite>(station.stationChildCode, "DeviceCommand"); + // // if (command != null && commandWrite != null) + // // { + // // // 灏嗕氦浜掍俊鍙疯浆鎹负甯冨皵鏁扮粍 + // // var structs = BitConverter.GetBytes(commandWrite.WriteInteractiveSignal).Reverse().ToArray().ToBoolArray(); + // // if (structs[0] == true) + // // { + // // // 妫�鏌ユ槸鍚﹀瓨鍦ㄤ换鍔� + // // if (_taskRepository.QueryData(x => x.SourceAddress == station.stationChildCode).Count() > 0) + // // { + // // return; + // // } + // // // 杈撳嚭璀﹀憡淇℃伅 + // // var log = $"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戝紓甯稿彛璇锋眰鎵爜鍏ュ簱"; + // // ConsoleHelper.WriteWarningLine(log); + + // // await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); + // // WriteInfo(conveyorLine.DeviceName, log); + + // // // 澶勭悊鏂颁换鍔� + // // await HandleNewTaskAsync(conveyorLine, command, station.stationChildCode, 0); + // // } + // // else + // // { + // // // 鍙戦�佸畬鎴愪俊鍙� + // // ConveyorLineSendFinish(conveyorLine, station.stationChildCode, 0, false); + // // } + // // } + // // } + // //})); + // #endregion + + // tasks.Add(Task.Run(async () => + // { + // var (command, commandWrite) = ReadCommands(station, conveyorLine); + // if (command == null || commandWrite == null) + // { + // return; + // } + + // IStationHandler handler = StationHandlerFactory.GetHandler(station.stationType, this); + // await handler.HandleStationAsync(conveyorLine, station, command, commandWrite); + // })); + //} + #endregion + + await Task.WhenAll(tasks); + + //ConsoleHelper.WriteColorLine("缁撴潫锛�" + DateTime.Now, ConsoleColor.Cyan); } - } catch (Exception ex) { - //Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); + // 杈撳嚭寮傚父淇℃伅 + Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); } - finally + return; + } + + private Task ProcessDeviceAsync(CommonConveyorLine conveyorLine, string childDeviceCode) + { + try { - WriteDebug("CommonConveyorLineJob", "test"); - //Console.Out.WriteLine(DateTime.Now); + // 璇诲彇浠诲姟鍛戒护鍜岃澶囧懡浠� + ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode); + ConveyorLineTaskCommandWrite commandWrite = conveyorLine.ReadCustomer<ConveyorLineTaskCommandWrite>(childDeviceCode, "DeviceCommand"); + if (command != null && commandWrite != null) + { + #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇 + + // 鑾峰彇缂撳瓨涓殑鐢ㄦ埛淇℃伅 + var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken"); + if (tokenInfos != null && tokenInfos.Any()) + { + userTokenIds = tokenInfos.Select(x => x.Token_ID).ToList(); + userIds = tokenInfos.Select(x => x.UserId).ToList(); + + // 鏋勯�犻�氱煡鏁版嵁 + object obj = new + { + command, + commandWrite + }; + // 鍙戦�侀�氱煡 + _noticeService.LineData(userIds.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, childDeviceCode, data = obj }); + } + + #endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇 + + // 灏嗕氦浜掍俊鍙疯浆鎹负甯冨皵鏁扮粍 + var writeInteractiveSignal = commandWrite.WriteInteractiveSignal; + var structs = BitConverter.GetBytes(writeInteractiveSignal).Reverse().ToArray().ToBoolArray(); + // 鑾峰彇璁惧鍗忚璇︽儏 + List<DeviceProtocolDetailDTO>? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal)).ToList(); + + if (deviceProtocolDetails != null) + { + foreach (var item in deviceProtocolDetails) + { + int itemValue = item.ProtocalDetailValue.ObjToInt(); + if (structs[itemValue] == true) + { + // 鑾峰彇澶勭悊鏂规硶 + MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType); + if (method != null) + { + command.InteractiveSignal = writeInteractiveSignal; + // 璋冪敤澶勭悊鏂规硶 + method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, itemValue }); + } + } + else + { + // 鍙戦�佸畬鎴愪俊鍙� + ConveyorLineSendFinish(conveyorLine, childDeviceCode, itemValue, false); + } + } + } + + // 鏌ヨ骞冲彴淇℃伅 + Platform platform = _platFormRepository.QueryFirst(x => x.DeviceCode == conveyorLine.DeviceCode && x.PlatCode == childDeviceCode && x.Status == "Active"); + if (platform != null && !string.IsNullOrEmpty(platform.Location)) + { + var strings = platform.Location.Split(',').ToList(); + foreach (var ite in strings) + { + // 璇诲彇浠诲姟鍛戒护 + ConveyorLineTaskCommand command1 = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(ite); + if (command1.InteractiveSignal != 2) + { + command.InteractiveSignal = writeInteractiveSignal; + int count = strings.Count; + // 鑾峰彇澶勭悊鏂规硶 + MethodInfo? method = GetType().GetMethod(platform.ExecutionMethod); + if (method != null) + { + command.InteractiveSignal = commandWrite.WriteInteractiveSignal; + // 璋冪敤澶勭悊鏂规硶 + method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, count, platform }); + }; + } + } + } + //if (conveyorLine.DeviceCode == "1001") + //{ + // ConsoleHelper.WriteSuccessLine("ProcessDeviceAsync鏂规硶缁撴潫鏃堕棿锛�" + DateTime.Now.ToString("G") + $"鐐逛綅锛歿childDeviceCode}"); + //} + } + } + catch (Exception ex) + { } return Task.CompletedTask; } + + #region 鍏ュ簱 /// <summary> /// 杈撻�佺嚎璇锋眰鍏ュ簱 @@ -108,21 +301,72 @@ /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param> /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param> /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> - public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode) + /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param> + public async Task RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { - if (_taskService.RequestWMSTask(command.Barcode, childDeviceCode).Status) + try { - Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); + // 杈撳嚭璀﹀憡淇℃伅锛岃〃绀轰换鍔″凡鍒拌揪瀛愯澶囧苟璇锋眰鎵爜鍏ュ簱 + var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�"; + ConsoleHelper.WriteWarningLine(log); + // 鍙戦�侀�氱煡 + await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, log); + + // 鏌ヨ鏉$爜瀵瑰簲鐨勪换鍔� + var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode); if (task != null) { - ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task); - taskCommand.InteractiveSignal = command.InteractiveSignal; - conveyorLine.SendCommand(taskCommand, childDeviceCode); + // 濡傛灉浠诲姟绫诲瀷鏄嚭搴撴垨鍑烘墭鐩橈紝鍒欏鐞嗗嚭搴撲换鍔� + if (task.TaskType == (int)TaskOutboundTypeEnum.OutTray || task.TaskType == (int)TaskOutboundTypeEnum.Outbound) + { + HandleTaskOut(conveyorLine, command, childDeviceCode, ProtocalDetailValue, task); + } + else + { + // 鑾峰彇浠诲姟鐨勪笅涓�鐩爣鍦板潃 + var next = task.NextAddress; + // 灏嗕换鍔℃槧灏勪负鍛戒护 + var taskCommand = MapTaskCommand(task, command); + // 鎭㈠浠诲姟鐨勪笅涓�鐩爣鍦板潃 + task.NextAddress = next; + // 鍙戦�佸懡浠ゅ埌瀛愯澶� + conveyorLine.SendCommand(taskCommand, childDeviceCode); - _taskService.UpdateTaskStatusToNext(task); + // 杈撳嚭璀﹀憡淇℃伅锛岃〃绀轰换鍔″凡鍒拌揪瀛愯澶囧苟璇锋眰鎵爜鍏ュ簱锛屼笅涓�鐩爣鍦板潃 + var logs = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"; + ConsoleHelper.WriteWarningLine(logs); + + await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, logs); + + // 鍙戦�佷换鍔″畬鎴愰�氱煡 + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + // 鏇存柊浠诲姟鐘舵�佷负涓嬩竴鐘舵�� + _taskService.UpdateTaskStatusToNext(task); + } + } + else + { + // 濡傛灉浠诲姟涓虹┖涓旀潯鐮佷笉涓�"NoRead"涓旀潯鐮佷笉涓虹┖锛屽垯澶勭悊鏂颁换鍔� + if (task == null && command.Barcode != "NoRead" && command.Barcode.IsNotEmptyOrNull()) + { + // 鏌ヨ鏉$爜瀵瑰簲鐨勪换鍔� + task = _taskService.QueryBarcodeTask(command.Barcode, childDeviceCode); + if (task == null) + // 寮傛澶勭悊鏂颁换鍔� + await HandleNewTaskAsync(conveyorLine, command, childDeviceCode, ProtocalDetailValue); + } } } + catch (Exception ex) + { + // 鎹曡幏骞惰緭鍑哄紓甯镐俊鎭� + Console.Out.WriteLine(ex.ToString()); + } } + + #region 杈撻�佺嚎璇锋眰鍏ュ簱涓嬩竴鍦板潃 /// <summary> /// 杈撻�佺嚎璇锋眰鍏ュ簱涓嬩竴鍦板潃 @@ -132,18 +376,39 @@ /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> public void RequestInNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode) { + var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傚叆搴撲笅涓�鍦板潃"; + ConsoleHelper.WriteWarningLine(log); + + _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, log); + Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); if (task != null) { - Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); - if (newTask != null) + if (command.Barcode == task.PalletCode) { - ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask); - taskCommand.InteractiveSignal = command.InteractiveSignal; - conveyorLine.SendCommand(taskCommand, childDeviceCode); + Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); + if (newTask != null) + { + //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask); + //taskCommand.InteractiveSignal = command.InteractiveSignal; + var next = newTask.NextAddress; + var taskCommand = MapTaskCommand(newTask, command); + newTask.NextAddress = next; + + var logs = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傚叆搴撲笅涓�鍦板潃,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"; + ConsoleHelper.WriteWarningLine(logs); + + _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, logs); + + conveyorLine.SendCommand(taskCommand, childDeviceCode); + } } } } + + #endregion 杈撻�佺嚎璇锋眰鍏ュ簱涓嬩竴鍦板潃 /// <summary> /// 杈撻�佺嚎鍏ュ簱瀹屾垚 @@ -151,16 +416,61 @@ /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param> /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param> /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> - public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode) + /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param> + public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { - Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); - if (task != null) + try { - conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); - WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); - Console.Out.WriteLine(content.Serialize()); + var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍏ュ簱瀹屾垚"; + ConsoleHelper.WriteWarningLine(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.TaskNum, childDeviceCode); + if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish) + { + if (command.Barcode == task.PalletCode && childDeviceCode == task.NextAddress) + { + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, "1000", childDeviceCode); + + var logs = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍏ュ簱瀹屾垚,涓嬩竴鐩爣鍦板潃銆愮瓑寰呭垎閰嶈揣浣�,骞跺啓鍏�1000銆�"; + ConsoleHelper.WriteWarningLine(logs); + + _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, logs); + + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + + if (task.TaskType == (int)TaskInboundTypeEnum.InNG) + { + int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); + + var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress); + task.CurrentAddress = station.stationLocation; + task.NextAddress = station.stationNGLocation; + task.TargetAddress = task.NextAddress; + task.TaskState = nextStatus; + task.ModifyDate = DateTime.Now; + task.Modifier = "System"; + _taskRepository.UpdateData(task); + } + else + { + WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); + Console.Out.WriteLine(content.ToJsonString()); + } + } + } + } + catch (Exception ex) + { } } + + #endregion 鍏ュ簱 + + #region 鍑哄簱 /// <summary> /// 杈撻�佺嚎璇锋眰鍑轰俊鎭� @@ -168,16 +478,58 @@ /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param> /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param> /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> - public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode) + /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param> + public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { - Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); - if (task != null) + try { - ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task); - taskCommand.InteractiveSignal = command.InteractiveSignal; - conveyorLine.SendCommand(taskCommand, childDeviceCode); + // 鏌ヨ杈撻�佺嚎浠诲姟锛屾牴鎹緭閫佺嚎璁惧鍜屽瓙璁惧浠g爜鑾峰彇浠诲姟淇℃伅 + var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); - _taskService.UpdateTaskStatusToNext(task); + // 杈撳嚭鎴愬姛淇℃伅锛屽寘鎷緭閫佺嚎鍚嶇О銆佷换鍔″彿銆佹墭鐩樻潯鐮佸拰瀛愯澶囦唬鐮侊紝浠ュ強浠诲姟淇℃伅 + var logs = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎璇锋眰鍑哄簱,task{task.ToJsonString()}"; + ConsoleHelper.WriteSuccessLine(logs); + + _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, logs); + + // 濡傛灉浠诲姟涓嶄负绌猴紝鍒欐墽琛屼互涓嬫搷浣� + if (task != null) + { + // 鑾峰彇浠诲姟鐨勪笅涓�鐩爣鍦板潃 + var next = task.NextAddress; + + // 灏嗕换鍔″懡浠ゆ槧灏勫埌褰撳墠浠诲姟 + var taskCommand = MapTaskCommand(task, command); + + // 鎭㈠浠诲姟鐨勪笅涓�鐩爣鍦板潃 + task.NextAddress = next; + + // 杈撳嚭鎴愬姛淇℃伅锛屽寘鎷緭閫佺嚎鍚嶇О銆佷换鍔″彿銆佹墭鐩樻潯鐮併�佸瓙璁惧浠g爜鍜屼笅涓�鐩爣鍦板潃 + var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎璇锋眰鍑哄簱,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"; + ConsoleHelper.WriteSuccessLine(log); + + _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, log); + + // 鍚戣緭閫佺嚎鍙戦�佸懡浠� + conveyorLine.SendCommand(taskCommand, childDeviceCode); + + // 瀹屾垚杈撻�佺嚎鍙戦�佷换鍔★紝骞舵洿鏂颁换鍔$姸鎬� + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + + // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴涓姸鎬� + _taskService.UpdateTaskStatusToNext(task); + + // 濡傛灉浠诲姟鐨勭洰鏍囧湴鍧�鏄�"1020-1"锛屽垯鍐嶆鏇存柊浠诲姟鐘舵�佸埌涓嬩竴涓姸鎬� + if (task.TargetAddress == "1020-1") + { + _taskService.UpdateTaskStatusToNext(task); + } + } + } + catch (Exception ex) + { } } @@ -187,17 +539,52 @@ /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param> /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param> /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> - public void RequestOutNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode) + public void RequestOutNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { + // 鎵撳嵃鎴愬姛鏃ュ織锛屾樉绀哄綋鍓嶈澶囧悕绉般�佷换鍔″彿銆佹墭鐩樻潯鐮佷互鍙婅姹傚嚭搴撲笅涓�鍦板潃鐨勫瓙璁惧浠g爜 + var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎璇锋眰鍑哄簱涓嬩竴鍦板潃"; + ConsoleHelper.WriteSuccessLine(log); + + _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, log); + + // 鏌ヨ姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟锛屾牴鎹换鍔″彿鍜屽瓙璁惧浠g爜鑾峰彇浠诲姟淇℃伅 Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); + + // 濡傛灉浠诲姟瀛樺湪 if (task != null) { - Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); - if (newTask != null) + // 妫�鏌ヤ换鍔′腑鐨勬墭鐩樻潯鐮佹槸鍚︿笌鍛戒护涓殑鎵樼洏鏉$爜涓�鑷� + if (command.Barcode == task.PalletCode) { - ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask); - taskCommand.InteractiveSignal = command.InteractiveSignal; - conveyorLine.SendCommand(taskCommand, childDeviceCode); + // 鏇存柊浠诲姟鐨勪綅缃俊鎭紝骞惰幏鍙栨洿鏂板悗鐨勪换鍔″璞� + Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); + + // 濡傛灉鏇存柊鍚庣殑浠诲姟瀵硅薄涓嶄负绌� + if (newTask != null) + { + // 鑾峰彇涓嬩竴鐩爣鍦板潃 + var next = newTask.NextAddress; + + // 灏嗘柊浠诲姟瀵硅薄鏄犲皠涓轰换鍔″懡浠ゅ璞� + var taskCommand = MapTaskCommand(newTask, command); + + // 鎭㈠鏂颁换鍔″璞$殑涓嬩竴鐩爣鍦板潃 + newTask.NextAddress = next; + + // 鎵撳嵃鎴愬姛鏃ュ織锛屾樉绀哄綋鍓嶈澶囧悕绉般�佷换鍔″彿銆佹墭鐩樻潯鐮併�佸瓙璁惧浠g爜浠ュ強涓嬩竴鐩爣鍦板潃 + var logs = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎璇锋眰鍑哄簱涓嬩竴鍦板潃,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"; + ConsoleHelper.WriteSuccessLine(logs); + + _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, logs); + + // 鍙戦�佷换鍔″懡浠ゅ埌瀛愯澶� + conveyorLine.SendCommand(taskCommand, childDeviceCode); + + // 鏍囪杈撻�佺嚎鍙戦�佷换鍔″畬鎴� + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + } } } } @@ -208,15 +595,324 @@ /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param> /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param> /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> - public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode) + public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { - Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); - if (task != null) + try { - conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); - WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); - Console.Out.WriteLine(content.Serialize()); + // 鎵撳嵃鎴愬姛淇℃伅锛岃〃绀烘墭鐩樺凡鍒拌揪鎸囧畾杈撻�佺嚎骞跺畬鎴愬嚭搴� + var logs = $"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍑哄簱瀹屾垚"; + ConsoleHelper.WriteSuccessLine(logs); + + _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, logs); + + // 鏌ヨ姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟 + var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); + + // 濡傛灉浠诲姟瀛樺湪 + if (task != null) + { + // 濡傛灉浠诲姟涓殑鎵樼洏鏉$爜涓庡懡浠や腑鐨勬墭鐩樻潯鐮佷竴鑷� + if (command.Barcode == task.PalletCode) + { + // 鍒涘缓涓�涓┖鐨刉ebResponseContent瀵硅薄 + WebResponseContent content = new WebResponseContent(); + + // 淇濆瓨浠诲姟鐨勪笅涓�鐩爣鍦板潃 + var next = task.NextAddress; + // 灏嗕换鍔℃槧灏勪负鍛戒护 + var taskCommand = MapTaskCommand(task, command); + // 鎭㈠浠诲姟鐨勪笅涓�鐩爣鍦板潃 + task.NextAddress = next; + + // 濡傛灉浠诲姟鐨勬墭鐩樻潯鐮佷笌鍛戒护涓殑鎵樼洏鏉$爜涓嶄竴鑷存垨鑰呬换鍔″娉ㄤ负"NG" + if (task.PalletCode != command.Barcode || task.Remark == "NG") + { + // 鏌ヨ鐩爣鍦板潃鐨勫閲� + var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == task.TargetAddress).Capacity; + // 璁剧疆鍛戒护鐨勭洰鏍囧湴鍧�涓篘G鍦板潃 + taskCommand.TargetAddress = NGAddress; + } + else + { + // 璁剧疆鍛戒护鐨勭洰鏍囧湴鍧�涓�1000 + taskCommand.TargetAddress = 1000; + } + + // 鎵撳嵃鎴愬姛淇℃伅锛岃〃绀烘墭鐩樺凡鍒拌揪鎸囧畾杈撻�佺嚎骞跺畬鎴愬嚭搴擄紝涓嬩竴鐩爣鍦板潃宸茬‘瀹� + var log = $"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍑哄簱瀹屾垚,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"; + ConsoleHelper.WriteSuccessLine(log); + + _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, log); + + // 鍙戦�佸懡浠ゅ埌杈撻�佺嚎 + conveyorLine.SendCommand(taskCommand, childDeviceCode); + // 瀹屾垚杈撻�佺嚎鍙戦�� + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴涓姸鎬� + content = _taskService.UpdateTaskStatusToNext(task); + } + else + { + // 鏌ヨ鐩爣鍦板潃鐨勫閲� + var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == task.TargetAddress).Capacity; + // 鎵撳嵃鎴愬姛淇℃伅锛岃〃绀烘墭鐩樺凡鍒拌揪鎸囧畾杈撻�佺嚎骞跺畬鎴愬嚭搴擄紝涓嬩竴鐩爣鍦板潃宸茬‘瀹� + var log = $"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍑哄簱瀹屾垚,涓嬩竴鐩爣鍦板潃銆恵NGAddress}銆�"; + ConsoleHelper.WriteSuccessLine(log); + + _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); + WriteInfo(conveyorLine.DeviceName, log); + + // 璁剧疆杈撻�佺嚎鐨勭洰鏍囧湴鍧�涓篘G鍦板潃 + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, NGAddress, childDeviceCode); + // 瀹屾垚杈撻�佺嚎鍙戦�� + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴涓姸鎬� + _taskService.UpdateTaskStatusToNext(task); + } + } + } + catch (Exception ex) + { } } + + #endregion 鍑哄簱 + + /// <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 ProtocalDetailValue, bool value) + { + // 浠巆onveyorLine涓殑DeviceProDTOs鍒楄〃涓煡鎵剧涓�涓鍚堟潯浠剁殑DeviceProDTO瀵硅薄 + // 鏉′欢鏄疍eviceProParamType绛変簬DeviceCommand锛屼笖DeviceChildCode绛変簬childDeviceCode + // 鏌ユ壘缁撴灉鎸塂eviceProOffset鍗囧簭鎺掑垪 + DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); + + // 灏哾evicePro鐨凞eviceProAddress鎸�'.'鍒嗗壊鎴愬瓧绗︿覆鏁扮粍x + string[] x = devicePro.DeviceProAddress.Split('.'); + + // 灏嗘暟缁剎鐨勬渶鍚庝竴涓厓绱犳浛鎹负ProtocalDetailValue鍔�1鍚庣殑瀛楃涓插舰寮� + x[x.Length - 1] = (ProtocalDetailValue + 1).ToString(); + + // 灏嗕慨鏀瑰悗鐨勬暟缁剎閲嶆柊鎷兼帴鎴愬瓧绗︿覆锛屼綔涓烘柊鐨凞eviceProAddress + string DeviceProAddress = string.Join(".", x); + + var writeBool = conveyorLine.Communicator.Read<bool>(DeviceProAddress); + if (writeBool != value) + { + // 浣跨敤conveyorLine鐨凜ommunicator瀵硅薄鐨刉rite鏂规硶锛屽皢value鍐欏叆鏂扮殑DeviceProAddress鍦板潃 + conveyorLine.Communicator.Write(DeviceProAddress, value); + } + } + + #region 妫�娴嬬┖鐩樺疄鐩樹换鍔� + + /// <summary> + /// 鐩戞祴绌烘墭鐩樺疄鐩樺嚭搴� + /// </summary> + /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param> + /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param> + /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> + /// <param name="index">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param> + // 瀹氫箟涓�涓紓姝ユ柟娉曪紝鐢ㄤ簬澶勭悊绌烘墭鐩樿繑鍥炰换鍔� + public async void EmptyTrayReturn(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int index, Platform platform) + { + try + { + // 瀹氫箟浠诲姟绫诲瀷鏋氫妇鍙橀噺 + TaskOutboundTypeEnum taskOutboundTypeEnum; + // 鏍规嵁骞冲彴绫诲瀷璁剧疆浠诲姟绫诲瀷鏋氫妇 + if (platform.PlatformType.Contains("OutTray")) + taskOutboundTypeEnum = TaskOutboundTypeEnum.OutTray; + else + taskOutboundTypeEnum = TaskOutboundTypeEnum.Outbound; + // 璋冪敤妫�鏌ュ苟鍒涘缓浠诲姟鐨勬柟娉� + await CheckAndCreateTask(taskOutboundTypeEnum, childDeviceCode, index, platform); + } + catch (Exception) + { + // 鎹曡幏骞跺拷鐣ュ紓甯� + } + } + + /// <summary> + /// 妫�鏌ヤ换鍔″苟鍒涘缓鏂颁换鍔� + /// </summary> + private async Task CheckAndCreateTask(TaskOutboundTypeEnum taskType, string childDeviceCode, int index, Platform platform) + { + // 鏌ヨ鏁版嵁搴撲腑宸叉湁鐨勪换鍔� + var tasks = _taskRepository.QueryData(x => x.TaskType == (int)taskType && x.TargetAddress == childDeviceCode); + // 濡傛灉宸叉湁浠诲姟鏁伴噺灏忎簬鎸囧畾绱㈠紩 + if (tasks.Count < index) + { + // 璋冪敤WMS鑾峰彇鍑哄簱浠诲姟 + + #region 璋冪敤WMS鑾峰彇鍑哄簱浠诲姟 + + // 瀹氫箟WMS浠诲姟鏁版嵁浼犺緭瀵硅薄 + WMSTaskDTO taskDTO = new WMSTaskDTO(); + + // 鑾峰彇WMS IP鍦板潃閰嶇疆 + var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); + var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; + var requestTrayOutTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTrayOutTask)?.ConfigValue; + // 濡傛灉WMS IP鍦板潃鏈厤缃紝鎶涘嚭寮傚父 + if (wmsBase == null || requestTrayOutTask == null) + { + throw new InvalidOperationException("WMS IP 鏈厤缃�"); + } + var wmsIpAddress = wmsBase + requestTrayOutTask; + + List<string> strings = platform.Roadway.Split(',').ToList(); + List<Dt_DeviceInfo> device; + if (strings.Count > 0) + { + device = _deviceInfoRepository.QueryData(x => x.DeviceStatus == "1" && strings.Contains(x.DeviceCode)); + } + else + { + device = _deviceInfoRepository.QueryData(x => x.DeviceStatus == "1"); + } + var deviceCode = device.Select(x => x.DeviceCode).ToList(); + + // 鍙戦�丠TTP POST璇锋眰鑾峰彇浠诲姟鏁版嵁 + var result = await HttpHelper.PostAsync(wmsIpAddress, new { position = childDeviceCode, tag = (int)taskType, areaCdoe = platform.Stacker, AreaCdoes = deviceCode, platform.ProductionLine }.ToJsonString()); + // 瑙f瀽杩斿洖鐨凧SON鏁版嵁 + WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result); + + // 妫�鏌ヨ繑鍥炵姸鎬侊紝濡傛灉澶辫触鍒欒繑鍥� + if (!content.Status) + return; + + // 瑙f瀽浠诲姟鏁版嵁 + taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); + + #endregion 璋冪敤WMS鑾峰彇鍑哄簱浠诲姟 + + // 鍒涘缓骞跺彂閫佷换鍔� + CreateAndSendTask(taskDTO); + } + } + + /// <summary> + /// 鍒涘缓浠诲姟 + /// </summary> + public WebResponseContent CreateAndSendTask(WMSTaskDTO taskDTO) + { + var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); + if (content.Status) + { + Console.WriteLine($"{taskDTO.TargetAddress}鍛煎彨鎴愬姛"); + } + return content; + } + + #endregion 妫�娴嬬┖鐩樺疄鐩樹换鍔� + + #region 璁惧NG鍙e叆搴� + + public void NGRequestTaskInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager stationManager, int ProtocalDetailValue) + { + var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); + var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.MOMIP_BASE)?.ConfigValue; + var ipAddress = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.TrayCellsStatus)?.ConfigValue; + if (wmsBase == null || ipAddress == null) + { + throw new InvalidOperationException("MOM IP 鏈厤缃�"); + } + TrayCellsStatusDto trayCells = new TrayCellsStatusDto() + { + Software = "WMS", + TrayBarcode = command.Barcode, + EquipmentCode = stationManager.stationEquipMOM, + SessionId = Guid.NewGuid().ToString(), + EmployeeNo = "MITest", + SceneType = "4", + RequestTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ") + }; + + var MOMIpAddress = wmsBase + ipAddress; + + var result = HttpHelper.PostAsync(MOMIpAddress, trayCells.ToJsonString()).Result; + WriteInfo("鍏ョ珯鏍¢獙", $"銆恵stationManager.stationChildCode}銆戝叆绔欐牎楠岃姹傚弬鏁般�恵trayCells.ToJsonString()}銆�"); + WriteInfo("鍏ョ珯鏍¢獙", ""); + WriteInfo("鍏ョ珯鏍¢獙", $"銆恵stationManager.stationChildCode}銆戝叆绔欐牎楠岃繑鍥炲弬鏁般�恵result}銆�"); + ResultTrayCellsStatus result1 = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(result); + + if (result1.Success) + { + ConsoleHelper.WriteWarningLine("1"); + var serialNosError = result1.SerialNos.Where(x => x.SerialNoStatus != 1 && x.SerialNoStatus != 4).ToList(); + if (serialNosError.Count > 0) + { + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, 100, stationManager.stationChildCode); + ConveyorLineSendFinish(conveyorLine, stationManager.stationChildCode, ProtocalDetailValue, true); + return; + } + + if (stationManager.remark == "ZYNG") + { + ConsoleHelper.WriteWarningLine($"銆愭敞娑睳G鍏ュ簱銆�"); + if (result1.SerialNos.Count <= 0) + { + ConsoleHelper.WriteWarningLine("1000"); + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTaskNum, 5, stationManager.stationChildCode); + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, 1000, stationManager.stationChildCode); + } + else + { + ConsoleHelper.WriteWarningLine("2"); + ConsoleHelper.WriteWarningLine(stationManager.stationLocation); + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTaskNum, 5, stationManager.stationChildCode); + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, stationManager.stationLocation, stationManager.stationChildCode); + } + ConveyorLineSendFinish(conveyorLine, stationManager.stationChildCode, ProtocalDetailValue, true); + } + else + { + if (result1.SerialNos.Count <= 0) + { + ConsoleHelper.WriteWarningLine("2"); + ConsoleHelper.WriteWarningLine(stationManager.stationLocation); + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTaskNum, 5, stationManager.stationChildCode); + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, stationManager.stationLocation, stationManager.stationChildCode); + } + else + { + ConsoleHelper.WriteWarningLine("1000"); + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTaskNum, 5, stationManager.stationChildCode); + conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, 1000, stationManager.stationChildCode); + } + ConveyorLineSendFinish(conveyorLine, stationManager.stationChildCode, ProtocalDetailValue, true); + } + } + else + { + ConsoleHelper.WriteErrorLine(result1.MOMMessage); + } + } + + #endregion 璁惧NG鍙e叆搴� + + public async Task LogAndWarn(string deviceName, string log, string color = "red") + { + ConsoleHelper.WriteWarningLine(log); + await _noticeService.Logs(userTokenIds, new { deviceName, log = log, time = DateTime.Now.ToString("G"), color = color }); + WriteInfo(deviceName, log); + } + + private (ConveyorLineTaskCommand, ConveyorLineTaskCommandWrite) ReadCommands(Dt_StationManager station, CommonConveyorLine conveyorLine) + { + ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(station.stationChildCode); + ConveyorLineTaskCommandWrite commandWrite = conveyorLine.ReadCustomer<ConveyorLineTaskCommandWrite>(station.stationChildCode, "DeviceCommand"); + return (command, commandWrite); + } + } -} +} \ No newline at end of file -- Gitblit v1.9.3