From e5642daf4b6820d0706967e486b16e8d33a46d6d Mon Sep 17 00:00:00 2001 From: 刘磊 <1161824510@qq.com> Date: 星期四, 26 十二月 2024 14:37:52 +0800 Subject: [PATCH] 1 --- Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs | 459 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 244 insertions(+), 215 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 71047ab..433a120 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; @@ -21,6 +22,7 @@ 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; @@ -31,7 +33,7 @@ [DisallowConcurrentExecution] public partial class CommonConveyorLineJob : JobBase, IJob { - public readonly ITaskService _taskService; + private readonly ITaskService _taskService; private readonly ITaskRepository _taskRepository; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly IRouterService _routerService; @@ -42,8 +44,13 @@ 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, ITaskRepository taskRepository, IPlatFormRepository platFormRepository, ISys_ConfigService sys_ConfigService, IDt_StationManagerService stationManagerService, IDt_StationManagerRepository stationManagerRepository, ICacheService cacheService, 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, IDeviceInfoRepository deviceInfoRepository) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; @@ -56,13 +63,12 @@ _stationManagerRepository = stationManagerRepository; _cacheService = cacheService; _noticeService = noticeService; + _deviceInfoRepository = deviceInfoRepository; } public async Task Execute(IJobExecutionContext context) { string jobName = context.JobDetail.Key.Name; - //if (MemoryLockManager.TryAcquireLock(jobName)) - //{ try { // 浠嶫obDataMap涓幏鍙栦紶閫掔殑鍙傛暟 @@ -71,9 +77,11 @@ { // 鏌ヨ鎵�鏈夊瓙璁惧鐨勪綅缃� 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); @@ -93,7 +101,7 @@ // 杈撳嚭璀﹀憡淇℃伅 ConsoleHelper.WriteWarningLine($"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戠┖鎵樼洏璇锋眰鎵爜鍏ュ簱"); // 澶勭悊鍏ュ簱璇锋眰 - NGRequestTaskInbound(conveyorLine, command, station.stationChildCode, 0, station.stationLocation); + NGRequestTaskInbound(conveyorLine, command, station, 0); } else { @@ -138,64 +146,52 @@ // 杈撳嚭寮傚父淇℃伅 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) + try { - #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇 - // 鑾峰彇缂撳瓨涓殑鐢ㄦ埛淇℃伅 - var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken"); - if (tokenInfos != null && tokenInfos.Any()) + // 璇诲彇浠诲姟鍛戒护鍜岃澶囧懡浠� + ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode); + ConveyorLineTaskCommandWrite commandWrite = conveyorLine.ReadCustomer<ConveyorLineTaskCommandWrite>(childDeviceCode, "DeviceCommand"); + if (command != null && commandWrite != null) { - var userTokenIds = tokenInfos.Select(x => x.Token_ID).ToList(); - var userIds = tokenInfos.Select(x => x.UserId).ToList(); + #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇 - // 鏋勯�犻�氱煡鏁版嵁 - object obj = new + // 鑾峰彇缂撳瓨涓殑鐢ㄦ埛淇℃伅 + var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken"); + if (tokenInfos != null && tokenInfos.Any()) { - command, - commandWrite - }; - // 鍙戦�侀�氱煡 - _noticeService.LineData(userIds.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, childDeviceCode, data = obj }); - } + userTokenIds = tokenInfos.Select(x => x.Token_ID).ToList(); + userIds = tokenInfos.Select(x => x.UserId).ToList(); - #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) + // 鏋勯�犻�氱煡鏁版嵁 + object obj = new { - 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]) + 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); @@ -206,39 +202,47 @@ 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) + else { - command.InteractiveSignal = commandWrite.WriteInteractiveSignal; - // 璋冪敤澶勭悊鏂规硶 - method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, count, platform }); - }; + // 鍙戦�佸畬鎴愪俊鍙� + 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 }); + }; + } + } + } + //if (conveyorLine.DeviceCode == "1001") + //{ + // ConsoleHelper.WriteSuccessLine("ProcessDeviceAsync鏂规硶缁撴潫鏃堕棿锛�" + DateTime.Now.ToString("G") + $"鐐逛綅锛歿childDeviceCode}"); + //} } + } + catch (Exception ex) + { + } return Task.CompletedTask; } @@ -252,12 +256,16 @@ /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param> /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param> - public async Task RequestInboundAsync(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); @@ -352,37 +360,45 @@ /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param> public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { - ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍏ュ簱瀹屾垚"); - var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); - if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish) + try { - if (command.Barcode == task.PalletCode && childDeviceCode == task.NextAddress) + + ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍏ュ簱瀹屾垚"); + var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); + if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish) { - //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) + if (command.Barcode == task.PalletCode && childDeviceCode == task.NextAddress) { - int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); + //conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, "1000", childDeviceCode); - 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()); + ConsoleHelper.WriteWarningLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍏ュ簱瀹屾垚,涓嬩竴鐩爣鍦板潃銆愮瓑寰呭垎閰嶈揣浣�,骞跺啓鍏�1000銆�"); + + 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) + { + } } @@ -399,41 +415,49 @@ /// <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) + try { - // 鑾峰彇浠诲姟鐨勪笅涓�鐩爣鍦板潃 - var next = task.NextAddress; - // 灏嗕换鍔″懡浠ゆ槧灏勫埌褰撳墠浠诲姟 - var taskCommand = MapTaskCommand(task, command); + // 鏌ヨ杈撻�佺嚎浠诲姟锛屾牴鎹緭閫佺嚎璁惧鍜屽瓙璁惧浠g爜鑾峰彇浠诲姟淇℃伅 + var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); - // 鎭㈠浠诲姟鐨勪笅涓�鐩爣鍦板潃 - task.NextAddress = next; + // 杈撳嚭鎴愬姛淇℃伅锛屽寘鎷緭閫佺嚎鍚嶇О銆佷换鍔″彿銆佹墭鐩樻潯鐮佸拰瀛愯澶囦唬鐮侊紝浠ュ強浠诲姟淇℃伅 + ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎璇锋眰鍑哄簱,task{task.ToJsonString()}"); - // 杈撳嚭鎴愬姛淇℃伅锛屽寘鎷緭閫佺嚎鍚嶇О銆佷换鍔″彿銆佹墭鐩樻潯鐮併�佸瓙璁惧浠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") + // 濡傛灉浠诲姟涓嶄负绌猴紝鍒欐墽琛屼互涓嬫搷浣� + if (task != null) { + // 鑾峰彇浠诲姟鐨勪笅涓�鐩爣鍦板潃 + 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") + { + _taskService.UpdateTaskStatusToNext(task); + } } + } + catch (Exception ex) + { + } } @@ -493,64 +517,72 @@ /// <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) + try { - // 濡傛灉浠诲姟涓殑鎵樼洏鏉$爜涓庡懡浠や腑鐨勬墭鐩樻潯鐮佷竴鑷� - if (command.Barcode == task.PalletCode) + + // 鎵撳嵃鎴愬姛淇℃伅锛岃〃绀烘墭鐩樺凡鍒拌揪鎸囧畾杈撻�佺嚎骞跺畬鎴愬嚭搴� + ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣緭閫佺嚎鍑哄簱瀹屾垚"); + + // 鏌ヨ姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟 + var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); + + // 濡傛灉浠诲姟瀛樺湪 + if (task != null) { - // 鍒涘缓涓�涓┖鐨刉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") + // 濡傛灉浠诲姟涓殑鎵樼洏鏉$爜涓庡懡浠や腑鐨勬墭鐩樻潯鐮佷竴鑷� + if (command.Barcode == task.PalletCode) { - // 鏌ヨ鐩爣鍦板潃鐨勫閲� - var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == task.TargetAddress).Capacity; - // 璁剧疆鍛戒护鐨勭洰鏍囧湴鍧�涓篘G鍦板潃 - taskCommand.TargetAddress = NGAddress; + // 鍒涘缓涓�涓┖鐨刉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; + } + + // 鎵撳嵃鎴愬姛淇℃伅锛岃〃绀烘墭鐩樺凡鍒拌揪鎸囧畾杈撻�佺嚎骞跺畬鎴愬嚭搴擄紝涓嬩竴鐩爣鍦板潃宸茬‘瀹� + 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 { - // 璁剧疆鍛戒护鐨勭洰鏍囧湴鍧�涓�1000 - taskCommand.TargetAddress = 1000; + // 鏌ヨ鐩爣鍦板潃鐨勫閲� + 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); } + } + } + catch (Exception ex) + { - // 鎵撳嵃鎴愬姛淇℃伅锛岃〃绀烘墭鐩樺凡鍒拌揪鎸囧畾杈撻�佺嚎骞跺畬鎴愬嚭搴擄紝涓嬩竴鐩爣鍦板潃宸茬‘瀹� - 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); - } } } @@ -605,7 +637,7 @@ else taskOutboundTypeEnum = TaskOutboundTypeEnum.Outbound; // 璋冪敤妫�鏌ュ苟鍒涘缓浠诲姟鐨勬柟娉� - await CheckAndCreateTask(taskOutboundTypeEnum, childDeviceCode, index, platform.Stacker, platform); + await CheckAndCreateTask(taskOutboundTypeEnum, childDeviceCode, index, platform); } catch (Exception) { @@ -616,7 +648,7 @@ /// <summary> /// 妫�鏌ヤ换鍔″苟鍒涘缓鏂颁换鍔� /// </summary> - private async Task CheckAndCreateTask(TaskOutboundTypeEnum taskType, string childDeviceCode, int index, string roadWay, Platform platform) + private async Task CheckAndCreateTask(TaskOutboundTypeEnum taskType, string childDeviceCode, int index, Platform platform) { // 鏌ヨ鏁版嵁搴撲腑宸叉湁鐨勪换鍔� var tasks = _taskRepository.QueryData(x => x.TaskType == (int)taskType && x.TargetAddress == childDeviceCode); @@ -641,8 +673,11 @@ } var wmsIpAddress = wmsBase + requestTrayOutTask; + var device = _deviceInfoRepository.QueryData(x => x.DeviceStatus == "1" && x.DeviceRemark == platform.Id.ToString()); + var deviceCode = device.Select(x => x.DeviceCode).ToList(); + // 鍙戦�丠TTP POST璇锋眰鑾峰彇浠诲姟鏁版嵁 - var result = await HttpHelper.PostAsync(wmsIpAddress, new { position = childDeviceCode, tag = (int)taskType, areaCdoe = roadWay, platform.ProductionLine }.ToJsonString()); + 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); @@ -675,9 +710,9 @@ #endregion 妫�娴嬬┖鐩樺疄鐩樹换鍔� - #region 鍖栨垚NG鍙e叆搴� + #region 璁惧NG鍙e叆搴� - public void NGRequestTaskInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, string TargetAddress) + 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; @@ -686,7 +721,6 @@ { throw new InvalidOperationException("MOM IP 鏈厤缃�"); } - Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode); TrayCellsStatusDto trayCells = new TrayCellsStatusDto() { Software = "WMS", @@ -701,41 +735,36 @@ var MOMIpAddress = wmsBase + ipAddress; var result = HttpHelper.PostAsync(MOMIpAddress, trayCells.ToJsonString()).Result; - WriteInfo("鍏ョ珯鏍¢獙", $"銆恵childDeviceCode}銆戝叆绔欐牎楠岃姹傚弬鏁般�恵trayCells.ToJsonString()}銆�"); + WriteInfo("鍏ョ珯鏍¢獙", $"銆恵stationManager.stationChildCode}銆戝叆绔欐牎楠岃姹傚弬鏁般�恵trayCells.ToJsonString()}銆�"); WriteInfo("鍏ョ珯鏍¢獙", ""); - WriteInfo("鍏ョ珯鏍¢獙", $"銆恵childDeviceCode}銆戝叆绔欐牎楠岃繑鍥炲弬鏁般�恵result}銆�"); + WriteInfo("鍏ョ珯鏍¢獙", $"銆恵stationManager.stationChildCode}銆戝叆绔欐牎楠岃繑鍥炲弬鏁般�恵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 - }; + return; + } - var next = dt_Task.NextAddress; - var taskCommand = MapTaskCommand(dt_Task, command); - dt_Task.NextAddress = next; + if (result1.SerialNos.Count <= 0) + { - conveyorLine.SendCommand(taskCommand, childDeviceCode); + conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, stationManager.stationLocation, stationManager.stationChildCode); - ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + ConveyorLineSendFinish(conveyorLine, stationManager.stationChildCode, ProtocalDetailValue, true); + } + else + { + conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, 1000, stationManager.stationChildCode); + + ConveyorLineSendFinish(conveyorLine, stationManager.stationChildCode, ProtocalDetailValue, true); + } } else { - conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, 1000, childDeviceCode); - - ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); + ConsoleHelper.WriteErrorLine(result1.MOMMessage); } } -- Gitblit v1.9.3