From 79a7c2707011902ec4df62ed8a285fa2029a1782 Mon Sep 17 00:00:00 2001 From: 刘磊 <1161824510@qq.com> Date: 星期二, 24 十二月 2024 10:09:23 +0800 Subject: [PATCH] 1 --- Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs | 456 +++++++++++++++++++++++++++++++++----------------------- 1 files changed, 271 insertions(+), 185 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 8352fc6..7e0cec8 100644 --- a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs +++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs @@ -1,5 +1,6 @@ 锘縰sing AutoMapper; using HslCommunication; +using NetTaste; using Newtonsoft.Json; using Quartz; using SqlSugar; @@ -43,6 +44,10 @@ private readonly ICacheService _cacheService; private readonly INoticeService _noticeService; + 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) { _taskService = taskService; @@ -61,83 +66,142 @@ public async Task Execute(IJobExecutionContext context) { string jobName = context.JobDetail.Key.Name; - if (MemoryLockManager.TryAcquireLock(jobName)) + //if (MemoryLockManager.TryAcquireLock(jobName)) + //{ + try { - try + // 浠嶫obDataMap涓幏鍙栦紶閫掔殑鍙傛暟 + CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams"); + if (conveyorLine != null) { - CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams"); - if (conveyorLine != null) - { - List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); - var tasks = childDeviceCodes.Select(childDeviceCode => ProcessDeviceAsync(conveyorLine, childDeviceCode)).ToList(); - await Task.WhenAll(tasks); + // 鏌ヨ鎵�鏈夊瓙璁惧鐨勪綅缃� + List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); + // 骞惰澶勭悊姣忎釜瀛愯澶� + var tasks = childDeviceCodes.Select(childDeviceCode => ProcessDeviceAsync(conveyorLine, childDeviceCode)).ToList(); + await Task.WhenAll(tasks); - List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode); - foreach (var station in stationManagers) + // 鑾峰彇鎵�鏈夌珯鐐圭鐞嗗櫒 + List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode); + foreach (var station in stationManagers) + { + if (station.stationType == 11) { - if (station.stationType == 11) + // 璇诲彇浠诲姟鍛戒护鍜岃澶囧懡浠� + ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(station.stationChildCode); + ConveyorLineTaskCommandWrite commandWrite = conveyorLine.ReadCustomer<ConveyorLineTaskCommandWrite>(station.stationChildCode, "DeviceCommand"); + if (command != null && commandWrite != null) { - 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 structs = BitConverter.GetBytes(commandWrite.WriteInteractiveSignal).Reverse().ToArray().ToBoolArray(); - if (structs[0] == true) + // 杈撳嚭璀﹀憡淇℃伅 + ConsoleHelper.WriteWarningLine($"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戠┖鎵樼洏璇锋眰鎵爜鍏ュ簱"); + // 澶勭悊鍏ュ簱璇锋眰 + NGRequestTaskInbound(conveyorLine, command, station.stationChildCode, 0, station.stationLocation); + } + 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) { - ConsoleHelper.WriteWarningLine($"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戠┖鎵樼洏璇锋眰鎵爜鍏ュ簱"); - NGRequestTaskInbound(conveyorLine, command, station.stationChildCode, 0, station.stationLocation); + return; } - else - { - ConveyorLineSendFinish(conveyorLine, station.stationChildCode, 0, false); - } + // 杈撳嚭璀﹀憡淇℃伅 + ConsoleHelper.WriteWarningLine($"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戝紓甯稿彛璇锋眰鎵爜鍏ュ簱"); + // 澶勭悊鏂颁换鍔� + await HandleNewTaskAsync(conveyorLine, command, station.stationChildCode, 0); + } + else + { + // 鍙戦�佸畬鎴愪俊鍙� + ConveyorLineSendFinish(conveyorLine, station.stationChildCode, 0, false); } } } } } - catch (Exception ex) - { - Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); - } - finally - { - MemoryLockManager.ReleaseLock(jobName); - } } - else + catch (Exception ex) { - ConsoleHelper.WriteErrorLine($"[CommonConveyorLineJob]銆恵jobName}銆戜换鍔″凡琚攣瀹氾紝鏃犳硶澶勭悊"); + // 杈撳嚭寮傚父淇℃伅 + Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); } + // finally + // { + // MemoryLockManager.ReleaseLock(jobName); + // } + // } + // else + // { + // ConsoleHelper.WriteErrorLine($"[CommonConveyorLineJob]銆恵jobName}銆戜换鍔″凡琚攣瀹氾紝鏃犳硶澶勭悊"); + // } return; } private Task ProcessDeviceAsync(CommonConveyorLine conveyorLine, string childDeviceCode) { + // 璇诲彇浠诲姟鍛戒护鍜岃澶囧懡浠� 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()) + // 鑾峰彇缂撳瓨涓殑鐢ㄦ埛淇℃伅 + if (userTokenIds == null && userIds == null) { - var userTokenIds = tokenInfos.Select(x => x.Token_ID).ToList(); - var userIds = tokenInfos.Select(x => x.UserId).ToList(); + 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 }); + } + } + else + { + // 鏋勯�犻�氱煡鏁版嵁 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) @@ -147,116 +211,48 @@ int itemValue = item.ProtocalDetailValue.ObjToInt(); if (structs[itemValue] == true) { - var numRead = itemValue; - var numWrite = itemValue + 1; - ConsoleHelper.WriteWarningLine($"銆恵conveyorLine.DeviceName}銆戙�恵childDeviceCode}銆戙�恵numRead.ToString()}銆戜綅杈撻�佺嚎璇诲彇淇″彿锛氥�恵structs[itemValue]}銆� 銆恵numWrite}銆戜綅WCS鍐欏叆淇″彿锛氥�恵structs[itemValue + 1]}銆�"); - if (structs[itemValue + 1] != structs[itemValue]) + // 鑾峰彇澶勭悊鏂规硶 + MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType); + if (method != null) { - MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType); - if (method != null) - { - command.InteractiveSignal = writeInteractiveSignal; - method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, itemValue }); - } + command.InteractiveSignal = writeInteractiveSignal; + // 璋冪敤澶勭悊鏂规硶 + method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, itemValue }); } } else { + // 鍙戦�佸畬鎴愪俊鍙� ConveyorLineSendFinish(conveyorLine, childDeviceCode, itemValue, false); } } } + // 鏌ヨ骞冲彴淇℃伅 Platform platform = _platFormRepository.QueryFirst(x => x.PLCCode == 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 }); }; } } } - #region - //var structs = BitConverter.GetBytes(commandWrite.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) - // { - // if (structs[item.ProtocalDetailValue.ObjToInt()] == true) - // { - // MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType); - // if (method != null) - // { - // var numRead = item.ProtocalDetailValue.ObjToInt(); - // var numWrite = item.ProtocalDetailValue.ObjToInt() + 1; - // ConsoleHelper.WriteWarningLine($"銆恵conveyorLine.DeviceName}銆戙�恵childDeviceCode}銆戙�恵numRead.ToString()}銆戜綅杈撻�佺嚎璇诲彇淇″彿锛氥�恵structs[item.ProtocalDetailValue.ObjToInt()]}銆� 銆恵numWrite}銆戜綅WCS鍐欏叆淇″彿锛氥�恵structs[item.ProtocalDetailValue.ObjToInt() + 1]}銆�"); - // if (structs[item.ProtocalDetailValue.ObjToInt() + 1] != structs[item.ProtocalDetailValue.ObjToInt()]) - // { - // command.InteractiveSignal = commandWrite.WriteInteractiveSignal; - // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, item.ProtocalDetailValue.ObjToInt() }); - // } - // } - // } - // else - // { - // ConveyorLineSendFinish(conveyorLine, childDeviceCode, item.ProtocalDetailValue.ObjToInt(), false); - // } - // } - //} - - //Platform platform = _platFormRepository.QueryFirst(x => x.PLCCode == conveyorLine.DeviceCode && x.PlatCode == childDeviceCode && x.Status == "Active"); - //if (platform != null) - //{ - // if (command.InteractiveSignal != 2) - // { - // MethodInfo? method = GetType().GetMethod(platform.ExecutionMethod); - // if (method != null) - // { - // command.InteractiveSignal = commandWrite.WriteInteractiveSignal; - // int count = string.IsNullOrEmpty(platform.Location) ? 0 + 1 : platform.Location.Split(',').Count() + 1; - // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, count, platform }); - // } - // } - // else - // { - // if (platform.Location != null && platform.Location != "") - // { - // var strings = platform.Location.Split(',').ToList(); - // foreach (var ite in strings) - // { - // //int index = strings.FindIndex(p => p == ite); - // ConveyorLineTaskCommand command1 = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(ite); - // if (command1.InteractiveSignal != 2) - // { - // MethodInfo? method = GetType().GetMethod(platform.ExecutionMethod); - // if (method != null) - // { - // command.InteractiveSignal = commandWrite.WriteInteractiveSignal; - // //int count = strings.Count - index; - // int count = strings.Count; - // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, count, platform }); - // } - // } - // } - // } - // } - //} - #endregion } return Task.CompletedTask; } @@ -270,44 +266,62 @@ /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param> /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param> - public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) + public async Task RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { try { - ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵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) { + // 濡傛灉浠诲姟绫诲瀷鏄嚭搴撴垨鍑烘墭鐩橈紝鍒欏鐞嗗嚭搴撲换鍔� 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); + // 杈撳嚭璀﹀憡淇℃伅锛岃〃绀轰换鍔″凡鍒拌揪瀛愯澶囧苟璇锋眰鎵爜鍏ュ簱锛屼笅涓�鐩爣鍦板潃 ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"); + // 鍙戦�佷换鍔″畬鎴愰�氱煡 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) - HandleNewTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue); + // 寮傛澶勭悊鏂颁换鍔� + await HandleNewTaskAsync(conveyorLine, command, childDeviceCode, ProtocalDetailValue); } } } catch (Exception ex) { + // 鎹曡幏骞惰緭鍑哄紓甯镐俊鎭� Console.Out.WriteLine(ex.ToString()); } } @@ -322,6 +336,7 @@ /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> public void RequestInNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode) { + ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傚叆搴撲笅涓�鍦板潃"); Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); if (task != null) { @@ -361,7 +376,10 @@ { if (command.Barcode == task.PalletCode && childDeviceCode == task.NextAddress) { - ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍏ュ簱瀹屾垚,涓嬩竴鐩爣鍦板潃銆愮瓑寰呭垎閰嶈揣浣嶃��"); + //conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, "1000", childDeviceCode); + + ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍏ュ簱瀹屾垚,涓嬩竴鐩爣鍦板潃銆愮瓑寰呭垎閰嶈揣浣�,骞跺啓鍏�1000銆�"); + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); if (task.TaskType == (int)TaskInboundTypeEnum.InNG) @@ -399,31 +417,40 @@ /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param> public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { + // 鏌ヨ杈撻�佺嚎浠诲姟锛屾牴鎹緭閫佺嚎璁惧鍜屽瓙璁惧浠g爜鑾峰彇浠诲姟淇℃伅 var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); + + // 杈撳嚭鎴愬姛淇℃伅锛屽寘鎷緭閫佺嚎鍚嶇О銆佷换鍔″彿銆佹墭鐩樻潯鐮佸拰瀛愯澶囦唬鐮侊紝浠ュ強浠诲姟淇℃伅 ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎璇锋眰鍑哄簱,task{task.ToJsonString()}"); + + // 濡傛灉浠诲姟涓嶄负绌猴紝鍒欐墽琛屼互涓嬫搷浣� if (task != null) { - //if (command.Barcode == task.PalletCode) + // 鑾峰彇浠诲姟鐨勪笅涓�鐩爣鍦板潃 + var next = task.NextAddress; + + // 灏嗕换鍔″懡浠ゆ槧灏勫埌褰撳墠浠诲姟 + var taskCommand = MapTaskCommand(task, command); + + // 鎭㈠浠诲姟鐨勪笅涓�鐩爣鍦板潃 + task.NextAddress = next; + + // 杈撳嚭鎴愬姛淇℃伅锛屽寘鎷緭閫佺嚎鍚嶇О銆佷换鍔″彿銆佹墭鐩樻潯鐮併�佸瓙璁惧浠g爜鍜屼笅涓�鐩爣鍦板潃 + ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎璇锋眰鍑哄簱,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"); + + // 鍚戣緭閫佺嚎鍙戦�佸懡浠� + conveyorLine.SendCommand(taskCommand, childDeviceCode); + + // 瀹屾垚杈撻�佺嚎鍙戦�佷换鍔★紝骞舵洿鏂颁换鍔$姸鎬� + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + + // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴涓姸鎬� + _taskService.UpdateTaskStatusToNext(task); + + // 濡傛灉浠诲姟鐨勭洰鏍囧湴鍧�鏄�"1020-1"锛屽垯鍐嶆鏇存柊浠诲姟鐘舵�佸埌涓嬩竴涓姸鎬� + if (task.TargetAddress == "1020-1") { - //task.NextAddress = task.NextAddress.Replace("-1", ""); - //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task); - //taskCommand.InteractiveSignal = command.InteractiveSignal; - - //ConveyorLineTaskCommand taskCommand = MapTaskCommand(task, command); - - var next = task.NextAddress; - var taskCommand = MapTaskCommand(task, command); - task.NextAddress = next; - - ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎璇锋眰鍑哄簱,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"); - - conveyorLine.SendCommand(taskCommand, childDeviceCode); - ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); _taskService.UpdateTaskStatusToNext(task); - if (task.TargetAddress == "1020-1") - { - _taskService.UpdateTaskStatusToNext(task); - } } } } @@ -436,26 +463,40 @@ /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> public void RequestOutNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { + // 鎵撳嵃鎴愬姛鏃ュ織锛屾樉绀哄綋鍓嶈澶囧悕绉般�佷换鍔″彿銆佹墭鐩樻潯鐮佷互鍙婅姹傚嚭搴撲笅涓�鍦板潃鐨勫瓙璁惧浠g爜 + ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎璇锋眰鍑哄簱涓嬩竴鍦板潃"); + + // 鏌ヨ姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟锛屾牴鎹换鍔″彿鍜屽瓙璁惧浠g爜鑾峰彇浠诲姟淇℃伅 Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); + + // 濡傛灉浠诲姟瀛樺湪 if (task != null) { + // 妫�鏌ヤ换鍔′腑鐨勬墭鐩樻潯鐮佹槸鍚︿笌鍛戒护涓殑鎵樼洏鏉$爜涓�鑷� if (command.Barcode == task.PalletCode) { + // 鏇存柊浠诲姟鐨勪綅缃俊鎭紝骞惰幏鍙栨洿鏂板悗鐨勪换鍔″璞� Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); + + // 濡傛灉鏇存柊鍚庣殑浠诲姟瀵硅薄涓嶄负绌� if (newTask != null) { - //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask); - //taskCommand.InteractiveSignal = command.InteractiveSignal; - - //ConveyorLineTaskCommand taskCommand = MapTaskCommand(newTask, command); - + // 鑾峰彇涓嬩竴鐩爣鍦板潃 var next = newTask.NextAddress; + + // 灏嗘柊浠诲姟瀵硅薄鏄犲皠涓轰换鍔″懡浠ゅ璞� var taskCommand = MapTaskCommand(newTask, command); + + // 鎭㈠鏂颁换鍔″璞$殑涓嬩竴鐩爣鍦板潃 newTask.NextAddress = next; + // 鎵撳嵃鎴愬姛鏃ュ織锛屾樉绀哄綋鍓嶈澶囧悕绉般�佷换鍔″彿銆佹墭鐩樻潯鐮併�佸瓙璁惧浠g爜浠ュ強涓嬩竴鐩爣鍦板潃 ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎璇锋眰鍑哄簱涓嬩竴鍦板潃,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"); + // 鍙戦�佷换鍔″懡浠ゅ埌瀛愯澶� conveyorLine.SendCommand(taskCommand, childDeviceCode); + + // 鏍囪杈撻�佺嚎鍙戦�佷换鍔″畬鎴� ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); } } @@ -470,34 +511,63 @@ /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { + // 鎵撳嵃鎴愬姛淇℃伅锛岃〃绀烘墭鐩樺凡鍒拌揪鎸囧畾杈撻�佺嚎骞跺畬鎴愬嚭搴� + ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍑哄簱瀹屾垚"); + + // 鏌ヨ姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟 var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); + + // 濡傛灉浠诲姟瀛樺湪 if (task != null) { + // 濡傛灉浠诲姟涓殑鎵樼洏鏉$爜涓庡懡浠や腑鐨勬墭鐩樻潯鐮佷竴鑷� if (command.Barcode == task.PalletCode) { + // 鍒涘缓涓�涓┖鐨刉ebResponseContent瀵硅薄 WebResponseContent content = new WebResponseContent(); - //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task); - //taskCommand.InteractiveSignal = command.InteractiveSignal; - //ConveyorLineTaskCommand taskCommand = MapTaskCommand(task, command); + // 淇濆瓨浠诲姟鐨勪笅涓�鐩爣鍦板潃 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; } + // 鎵撳嵃鎴愬姛淇℃伅锛岃〃绀烘墭鐩樺凡鍒拌揪鎸囧畾杈撻�佺嚎骞跺畬鎴愬嚭搴擄紝涓嬩竴鐩爣鍦板潃宸茬‘瀹� ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍑哄簱瀹屾垚,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�"); + // 鍙戦�佸懡浠ゅ埌杈撻�佺嚎 conveyorLine.SendCommand(taskCommand, childDeviceCode); + // 瀹屾垚杈撻�佺嚎鍙戦�� ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴涓姸鎬� content = _taskService.UpdateTaskStatusToNext(task); + } + else + { + // 鏌ヨ鐩爣鍦板潃鐨勫閲� + var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == task.TargetAddress).Capacity; + // 鎵撳嵃鎴愬姛淇℃伅锛岃〃绀烘墭鐩樺凡鍒拌揪鎸囧畾杈撻�佺嚎骞跺畬鎴愬嚭搴擄紝涓嬩竴鐩爣鍦板潃宸茬‘瀹� + ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍑哄簱瀹屾垚,涓嬩竴鐩爣鍦板潃銆恵NGAddress}銆�"); + // 璁剧疆杈撻�佺嚎鐨勭洰鏍囧湴鍧�涓篘G鍦板潃 + conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, NGAddress, childDeviceCode); + // 瀹屾垚杈撻�佺嚎鍙戦�� + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴涓姸鎬� + _taskService.UpdateTaskStatusToNext(task); } } } @@ -513,10 +583,21 @@ /// <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); + + // 浣跨敤conveyorLine鐨凜ommunicator瀵硅薄鐨刉rite鏂规硶锛屽皢value鍐欏叆鏂扮殑DeviceProAddress鍦板潃 conveyorLine.Communicator.Write(DeviceProAddress, value); } @@ -529,19 +610,24 @@ /// <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.Stacker, platform); } catch (Exception) { + // 鎹曡幏骞跺拷鐣ュ紓甯� } } @@ -550,38 +636,44 @@ /// </summary> private async Task CheckAndCreateTask(TaskOutboundTypeEnum taskType, string childDeviceCode, int index, string roadWay, Platform platform) { + // 鏌ヨ鏁版嵁搴撲腑宸叉湁鐨勪换鍔� var tasks = _taskRepository.QueryData(x => x.TaskType == (int)taskType && x.TargetAddress == childDeviceCode); + // 濡傛灉宸叉湁浠诲姟鏁伴噺灏忎簬鎸囧畾绱㈠紩 if (tasks.Count < index) { - //ConsoleHelper.WriteErrorLine($"銆恵childDeviceCode}銆戣姹傘�恵taskType.ToString()}銆戜换鍔�,宸叉湁銆恵taskType.ToString()}銆戜换鍔°�恵tasks.Count}銆�,鏈�澶氭嫢鏈夈�恵index - 1}銆�"); + // 璋冪敤WMS鑾峰彇鍑哄簱浠诲姟 #region 璋冪敤WMS鑾峰彇鍑哄簱浠诲姟 + // 瀹氫箟WMS浠诲姟鏁版嵁浼犺緭瀵硅薄 WMSTaskDTO taskDTO = new WMSTaskDTO(); - // 鑾峰彇WMSip鍦板潃 + // 鑾峰彇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; + // 鍙戦�丠TTP POST璇锋眰鑾峰彇浠诲姟鏁版嵁 var result = await HttpHelper.PostAsync(wmsIpAddress, new { position = childDeviceCode, tag = (int)taskType, areaCdoe = roadWay, platform.ProductionLine }.ToJsonString()); - //var result = await HttpHelper.PostAsync("http://localhost:5000/api/Task/RequestTrayOutTaskAsync", dynamic.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); } } @@ -601,7 +693,7 @@ #endregion 妫�娴嬬┖鐩樺疄鐩樹换鍔� - #region 鍖栨垚NG鍙e叆搴� + #region 璁惧NG鍙e叆搴� public void NGRequestTaskInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, string TargetAddress) { @@ -632,50 +724,44 @@ WriteInfo("鍏ョ珯鏍¢獙", $"銆恵childDeviceCode}銆戝叆绔欐牎楠岃繑鍥炲弬鏁般�恵result}銆�"); ResultTrayCellsStatus result1 = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(result); - var serialNosError = result1.SerialNos.Where(x => x.SerialNoStatus != 1).ToList(); - if (serialNosError.Count > 0) + if (result1.Success) { - return; - } - if (result1.SerialNos.Count <= 0) - { - // 绌烘墭鐩樺叆搴撻�昏緫 - Dt_Task dt_Task = new Dt_Task() + var serialNosError = result1.SerialNos.Where(x => x.SerialNoStatus != 1).ToList(); + if (serialNosError.Count > 0) { - TargetAddress = TargetAddress, - PalletCode = command.Barcode, - NextAddress = TargetAddress, - TaskNum = 0 - }; - //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(dt_Task); - //taskCommand.InteractiveSignal = command.InteractiveSignal; + return; + } - //ConveyorLineTaskCommand taskCommand = MapTaskCommand(dt_Task, command); + if (result1.SerialNos.Count <= 0) + { + // 绌烘墭鐩樺叆搴撻�昏緫 + Dt_Task dt_Task = new Dt_Task() + { + TargetAddress = TargetAddress, + PalletCode = command.Barcode, + NextAddress = TargetAddress, + TaskNum = 0 + }; - var next = dt_Task.NextAddress; - var taskCommand = MapTaskCommand(dt_Task, command); - dt_Task.NextAddress = next; + var next = dt_Task.NextAddress; + var taskCommand = MapTaskCommand(dt_Task, command); + dt_Task.NextAddress = next; - conveyorLine.SendCommand(taskCommand, childDeviceCode); + conveyorLine.SendCommand(taskCommand, childDeviceCode); - ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + } + else + { + conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, 1000, childDeviceCode); + + ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + } } else { - // 绌烘墭鐩樺叆搴撻�昏緫 - Dt_Task dt_Task = new Dt_Task() - { - TargetAddress = TargetAddress, - PalletCode = command.Barcode, - NextAddress = "1000", - TaskNum = 0 - }; - ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(dt_Task); - taskCommand.InteractiveSignal = command.InteractiveSignal; - conveyorLine.SendCommand(taskCommand, childDeviceCode); - ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); } } -- Gitblit v1.9.3