From f40ba2a9fb9d3c2ece08e9a7cd987d4744dccab2 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期二, 17 六月 2025 15:22:05 +0800 Subject: [PATCH] 优化库内移库,堆垛机和穿梭车交互逻辑 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Interface/LargeScreenController.cs | 392 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 378 insertions(+), 14 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Interface/LargeScreenController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Interface/LargeScreenController.cs" index d5be0f7..39359a8 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Interface/LargeScreenController.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Interface/LargeScreenController.cs" @@ -2,14 +2,27 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; +using System.Collections; +using System.Collections.Generic; +using System.Dynamic; +using System.Reflection; +using System.Threading.Tasks; +using WIDESEAWCS_Common.StackerCraneEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Caches; +using WIDESEAWCS_Core.Utilities; +using WIDESEAWCS_DTO.System; +using WIDESEAWCS_ITaskInfoRepository; +using WIDESEAWCS_ITaskInfoService; +using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.Repository; using WIDESEAWCS_QuartzJob.Service; +using WIDESEAWCS_Server.Controllers.System; using WIDESEAWCS_Tasks.ConveyorLineJob; using WIDESEAWCS_Tasks.ShuttleCarJob; using WIDESEAWCS_Tasks.StackerCraneJob; +using static WIDESEAWCS_Server.Controllers.LargeScreenController; namespace WIDESEAWCS_Server.Controllers { @@ -20,13 +33,97 @@ private readonly IDeviceInfoRepository _deviceInfoRepository; private readonly IRouterService _routerService; private readonly ICacheService _cacheService; - public LargeScreenController(ICacheService cacheService, IRouterService routerService, IDeviceInfoRepository deviceInfoRepository) + private readonly ITaskRepository _taskRepository; + private readonly ITaskService _taskService; + public LargeScreenController(ICacheService cacheService, IRouterService routerService, IDeviceInfoRepository deviceInfoRepository, ITaskRepository taskRepository, ITaskService taskService) { _deviceInfoRepository = deviceInfoRepository; _routerService = routerService; _cacheService = cacheService; + _taskRepository = taskRepository; + _taskService = taskService; } + [HttpPost, Route("GetTaskInfos")] + public WebResponseContent GetTaskInfos([FromBody] SaveModel model) + { + WebResponseContent webResponseContent = new WebResponseContent(); + List<TaskInfo> taskInfos = new List<TaskInfo>(); + List<DictionaryDTO> dictionaryDTOs = new List<DictionaryDTO>(); + try + { + var name = model.MainData["Name"].ToString(); + List<Dt_Task> dt_Tasks = new List<Dt_Task>(); + if (name == "鍏ュ簱") + { + dt_Tasks = _taskRepository.QueryData(x => !_taskService.TaskOutboundTypes.Contains(x.TaskType) && !_taskService.TaskRelocationTypes.Contains(x.TaskType)); + dt_Tasks = dt_Tasks.OrderByDescending(x => x.TaskType).Take(10).ToList(); + } + else + { + dt_Tasks = _taskRepository.QueryData(x => !_taskService.TaskInboundTypes.Contains(x.TaskType)); + dt_Tasks = dt_Tasks.OrderByDescending(x => x.TaskType).Take(10).ToList(); + } + if (dt_Tasks.Count > 0) + { + List<DictionaryDTO> taskTypeDTOs = GetDictionary(Sys_DictionaryController.GetVueDictionary("taskType").Data); + List<DictionaryDTO> taskStateDTOs = GetDictionary(Sys_DictionaryController.GetVueDictionary("taskState").Data); + foreach (var dt_Task in dt_Tasks) + { + TaskInfo taskInfo = new TaskInfo(); + taskInfo.PalletCode = dt_Task.PalletCode; + taskInfo.ShuttleCarCode = dt_Task.ShuttleCarCode; + taskInfo.TaskState = taskStateDTOs.Where(x => x.name == dt_Task.TaskState.ToString()).First().remark; + taskInfo.TaskType = taskTypeDTOs.Where(x => x.name == dt_Task.TaskType.ToString()).First().remark; + taskInfo.SourceAddress = dt_Task.SourceAddress; + taskInfo.TargetAddress = dt_Task.TargetAddress; + taskInfo.TaskNum = dt_Task.TaskNum; + taskInfos.Add(taskInfo); + } + } + webResponseContent.OK(data: taskInfos); + } + catch (Exception ex) + { + webResponseContent.Error(ex.Message); + } + return webResponseContent; + } + /// <summary> + /// 鑾峰彇绌挎杞︾數閲� + /// </summary> + /// <returns></returns> + [HttpPost, Route("GetShuttleCarInfos")] + public WebResponseContent GetShuttleCarInfos() + { + WebResponseContent webResponseContent = new WebResponseContent(); + int ElectricQuantity1 = 0; + int ElectricQuantity2 = 0; + try + { + var Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), "RGV01"); + if (Device != null) + { + ShuttleCarTaskCommandR? shuttleCar = Device as ShuttleCarTaskCommandR; + if (shuttleCar != null) ElectricQuantity1 = shuttleCar.ElectricQuantity; + } + Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), "RGV02"); + if (Device != null) + { + ShuttleCarTaskCommandR? shuttleCar = Device as ShuttleCarTaskCommandR; + if (shuttleCar != null) ElectricQuantity2 = shuttleCar.ElectricQuantity; + } + } + catch (Exception ex) + { + webResponseContent.Error(ex.Message); + } + return webResponseContent.OK(data: new + { + ElectricQuantity1, + ElectricQuantity2 + }); + } /// <summary> /// 鑾峰彇璁惧淇℃伅 /// </summary> @@ -45,13 +142,17 @@ { case "SpeStackerCrane"://鍫嗗灈鏈� { - var Device = _cacheService.Get(typeof(StackerCraneTaskCommandR), item.DeviceCode); + var Device = _cacheService.Get(typeof(StackerCraneTaskCommandR), item.DeviceCode) as StackerCraneTaskCommandR; if (Device != null) { DeviceInfo deviceInfo = new DeviceInfo() { DeviceName = item.DeviceName, - Deviceinfo = Device + DeviceCode = item.DeviceCode, + DeviceStatus = Device.Onlinestate == 1 ? "鍦ㄧ嚎" : "绂荤嚎", + DeviceMachine = GetRunStatus(Device.RunStatus), + Err_Status = GetErr_Status(Device.Err_Status), + TaskID = Device.CurrentTaskNum }; devices.Add(deviceInfo); } @@ -60,15 +161,21 @@ case "CommonConveyorLine"://杈撻�佺嚎 { List<string> childDeviceCodes = _routerService.QueryAllPositions(item.DeviceCode); - foreach (var childDeviceCode in childDeviceCodes) + List<string> strings = new List<string>() { "1003", "1006", "1007" }; + childDeviceCodes.AddRange(strings); + foreach (var childDeviceCode in childDeviceCodes.OrderBy(x => x)) { - var Device = _cacheService.Get(typeof(ConveyorLineTaskCommandR), childDeviceCode); + var Device = _cacheService.Get(typeof(ConveyorLineTaskCommandR), childDeviceCode) as ConveyorLineTaskCommandR; if (Device != null) { DeviceInfo deviceInfo = new DeviceInfo() { DeviceName = item.DeviceName, - Deviceinfo = Device + DeviceCode = childDeviceCode, + DeviceStatus = Device.inRead == 1 ? "鍙啓" : "涓嶅彲鍐�", + DeviceMachine = GetMachine(Device.Status), + TaskID = Device.TaskNum, + Err_Status = GetSpec(Device.Spec) }; devices.Add(deviceInfo); } @@ -77,13 +184,17 @@ break; case "ShuttleCar"://绌挎杞� { - var Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), item.DeviceCode); + var Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), item.DeviceCode) as ShuttleCarTaskCommandR; if (Device != null) { DeviceInfo deviceInfo = new DeviceInfo() { DeviceName = item.DeviceName, - Deviceinfo = Device + DeviceCode = item.DeviceCode, + DeviceStatus = Device.JoinStatus == 1 ? "鍦ㄧ嚎" : "绂荤嚎", + DeviceMachine = GetStatus(Device.Status), + Err_Status = GetErrStatus(Device.Err_Status), + TaskID = Device.number }; devices.Add(deviceInfo); } @@ -93,10 +204,7 @@ break; } } - webResponseContent.OK(data: new - { - devices - }); + webResponseContent.OK(data: devices); } catch (Exception ex) { @@ -104,11 +212,267 @@ } return webResponseContent; } + List<DictionaryDTO> GetDictionary(object data) + { + List<DictionaryDTO> dictionaryDTOs = new List<DictionaryDTO>(); + List<object> a = data as List<object>; + foreach (var task in a) + { + dynamic dictionaryDTO = task; + DictionaryDTO dictionary = new DictionaryDTO + { + name = dictionaryDTO.key, + remark = dictionaryDTO.value, + }; + dictionaryDTOs.Add(dictionary); + } + return dictionaryDTOs; + } + public class DictionaryDTO + { + public string name { get; set; } + public string remark { get; set; } + } + public class TaskInfo + { + /// <summary> + /// 浠诲姟鍙� + /// </summary> + public int TaskNum { get; set; } + /// <summary> + /// 鎵樼洏鍙� + /// </summary> + public string PalletCode { get; set; } + /// <summary> + /// 绌挎杞� + /// </summary> + public string ShuttleCarCode { get; set; } + /// <summary> + /// 浠诲姟绫诲瀷 + /// </summary> + public string TaskType { get; set; } + /// <summary> + /// 浠诲姟鐘舵�� + /// </summary> + public string TaskState { get; set; } + /// <summary> + /// 璧峰鍦板潃 + /// </summary> + public string SourceAddress { get; set; } + /// <summary> + /// 鐩殑鍦板潃 + /// </summary> + public string TargetAddress { get; set; } + } public class DeviceInfo { - //public string DeviceCode { get; set; } + /// <summary> + /// 璁惧鍚� + /// </summary> public string DeviceName { get; set; } - public object Deviceinfo { get; set; } + /// <summary> + /// 璁惧缂栧彿 + /// </summary> + public string DeviceCode { get; set; } + /// <summary> + /// 璁惧鐘舵�� + /// </summary> + public string DeviceStatus { get; set; } + /// <summary> + /// 璁惧淇℃伅 + /// </summary> + public string DeviceMachine { get; set; } + /// <summary> + /// 鏁呴殰 + /// </summary> + public string Err_Status { get; set; } + public int TaskID { get; set; } + } + /// <summary> + /// 鑾峰彇鍫嗗灈鏈鸿繍琛岀姸鎬� + /// </summary> + /// <param name="status"></param> + /// <returns></returns> + string GetRunStatus(ushort status) + { + string RunStatus = string.Empty; + switch (status) + { + case 1: RunStatus = "鍒濆鍖栦腑"; break; + case 2: RunStatus = "鏁呴殰鏆傚仠"; break; + case 3: RunStatus = "鎵嬪姩妯″紡"; break; + case 4: RunStatus = "鍗曟妯″紡"; break; + case 5: RunStatus = "缁存姢妯″紡"; break; + case 6: RunStatus = "鍙栬揣妫�鏌�"; break; + case 7: RunStatus = "鍙栬揣绔欑偣鍒ゆ柇"; break; + case 8: RunStatus = "鏃犺揣杩愯"; break; + case 9: RunStatus = "璇锋眰鍙栬揣"; break; + case 10: RunStatus = "鍙栬揣鎺㈣揣"; break; + case 11: RunStatus = "鍙栬揣浼稿弶"; break; + case 12: RunStatus = "鍙栬揣鎶珮"; break; + case 13: RunStatus = "鍙栬揣鍥炲弶"; break; + case 14: RunStatus = "鍙栬揣瀹屾垚"; break; + case 15: RunStatus = "鏀捐揣妫�鏌�"; break; + case 16: RunStatus = "鏀捐揣绔欑偣鍒ゆ柇"; break; + case 17: RunStatus = "鏈夎揣杩愯"; break; + case 18: RunStatus = "璇锋眰鏀捐揣"; break; + case 19: RunStatus = "鏀捐揣鎺㈣揣"; break; + case 20: RunStatus = "鏀捐揣浼稿弶"; break; + case 21: RunStatus = "鏀捐揣闄嶄綆"; break; + case 22: RunStatus = "鏀捐揣鍥炲弶"; break; + case 23: RunStatus = "鏀捐揣瀹屾垚"; break; + case 24: RunStatus = "鏃犺揣寰呭懡"; break; + case 25: RunStatus = "鏈夎揣寰呭懡"; break; + case 26: RunStatus = "鍗婅嚜鍔ㄦā寮�"; break; + } + return RunStatus; + } + /// <summary> + /// 鑾峰彇鍫嗗灈鏈烘晠闅滀唬鐮� + /// </summary> + /// <param name="status"></param> + /// <returns></returns> + string GetErr_Status(ushort status) + { + string RunStatus = string.Empty; + switch (status) + { + case 1: RunStatus = "璐у弶涓嶅湪涓�"; break; + case 2: RunStatus = "鍙栬揣璐ф灦鏃犺揣"; break; + case 3: RunStatus = "鏀捐揣璐ф灦鏈夎揣"; break; + case 4: RunStatus = "浠诲姟闈炴硶"; break; + case 5: RunStatus = "琛岃蛋鍙嶅悜"; break; + case 6: RunStatus = "琛岃蛋鍙橀鍣ㄦ姤璀�"; break; + case 7: RunStatus = "琛岃蛋鍫佃浆"; break; + case 8: RunStatus = "琛岃蛋澶遍��"; break; + case 9: RunStatus = "鎻愬崌鍙嶅悜"; break; + case 10: RunStatus = "鎻愬崌鍙橀鍣ㄦ姤璀�"; break; + case 11: RunStatus = "鎻愬崌鍫佃浆"; break; + case 12: RunStatus = "鎻愬崌澶遍��"; break; + case 13: RunStatus = "璐у弶1鍙嶅悜"; break; + case 14: RunStatus = "璐у弶1鍙橀鍣ㄦ姤璀�"; break; + case 15: RunStatus = "璐у弶1鍫佃浆"; break; + case 16: RunStatus = "璐у弶1澶遍��"; break; + case 17: RunStatus = "璐у弶2鍙嶅悜"; break; + case 18: RunStatus = "璐у弶2鍙橀鍣ㄦ姤璀�"; break; + case 19: RunStatus = "璐у弶2鍫佃浆"; break; + case 20: RunStatus = "璐у弶2澶遍��"; break; + case 21: RunStatus = "鎬ュ仠鏁呴殰"; break; + case 22: RunStatus = "鍓嶆瀬闄�"; break; + case 23: RunStatus = "鍚庢瀬闄�"; break; + case 24: RunStatus = "琛岃蛋鏋侀檺"; break; + case 25: RunStatus = "涓婃瀬闄�"; break; + case 26: RunStatus = "涓嬫瀬闄�"; break; + case 27: RunStatus = "鍗囬檷鏋侀檺"; break; + case 28: RunStatus = "璐у弶鍓嶆瀬闄�"; break; + case 29: RunStatus = "璐у弶鍚庢瀬闄�"; break; + case 30: RunStatus = "璐у弶鍚庢瀬闄�"; break; + case 31: RunStatus = "鍙宠秴鍙�"; break; + case 32: RunStatus = "鍓嶈秴鍙�"; break; + case 33: RunStatus = "鍚庤秴鍙�"; break; + case 34: RunStatus = "瓒呴珮"; break; + case 35: RunStatus = "璁ゅ潃鏁呴殰"; break; + case 36: RunStatus = "鏀捐揣鏃犺揣"; break; + case 37: RunStatus = "鍙栬揣瀹屾垚鏃犺揣"; break; + case 38: RunStatus = "鍙栬揣璐у弶鏈夎揣"; break; + case 39: RunStatus = "鏀捐揣瀹屾垚鏈夎揣"; break; + case 40: RunStatus = "鎻愬崌缂栫爜"; break; + case 41: RunStatus = "琛岃蛋"; break; + case 42: RunStatus = "璐у弶"; break; + case 43: RunStatus = "鏂怀鏁呴殰"; break; + case 44: RunStatus = "A鍙変笉鍦ㄤ腑"; break; + case 45: RunStatus = "B鍙変笉鍦ㄤ腑"; break; + case 46: RunStatus = "鍙栬揣鍓嶆帓鏈夎揣"; break; + case 47: RunStatus = "鏀捐揣鍓嶆帓鏈夎揣"; break; + case 48: RunStatus = "涓嶅湪鍒楃珯鐐�"; break; + case 49: RunStatus = "涓嶅湪灞傜珯鐐�"; break; + case 50: RunStatus = "閫氳鏁呴殰"; break; + case 51: RunStatus = "鍗歌揣璐у弶鍥炲弶鏈夎揣鏁呴殰"; break; + case 52: RunStatus = "杞借揣鍙拌秴閲嶈繃杞�"; break; + case 53: RunStatus = "楂樺害涓嶇"; break; + case 54: RunStatus = "灞傜粰瀹氫綅缃秴闄愭晠闅�"; break; + case 55: RunStatus = "鍒楃粰瀹氫綅缃秴闄愭晠闅�"; break; + case 56: RunStatus = "鍙夌粰瀹氫綅缃秴闄愭晠闅�"; break; + case 57: RunStatus = "瑙︽懜灞忛�氳鏁呴殰"; break; + } + return RunStatus; + } + string GetMachine(ushort machine) + { + string RunStatus = string.Empty; + switch (machine) + { + case 0: RunStatus = "鍏抽棴"; break; + case 2: RunStatus = "鏈夎揣"; break; + case 3: RunStatus = "绛夊緟鎸囦护"; break; + case 4: RunStatus = "绌洪棽"; break; + case 12: RunStatus = "鑷閿欒"; break; + case 13: RunStatus = "鏃犲彉鏈�"; break; + case 14: RunStatus = "鎻愬墠鍒版潵"; break; + case 15: RunStatus = "鎺ユ敹瓒呮椂"; break; + case 16: RunStatus = "鎺ユ敹鏆傚仠"; break; + case 17: RunStatus = "鏈夊彉鏃�"; break; + case 19: RunStatus = "鏀捐瓒呮椂"; break; + case 20: RunStatus = "鏀捐鏆傚仠"; break; + } + return RunStatus; + } + string GetSpec(ushort spec) + { + string RunStatus = string.Empty; + switch (spec) + { + case 1: RunStatus = "宸﹁秴"; break; + case 2: RunStatus = "鍙宠秴"; break; + case 3: RunStatus = "鍓嶈秴"; break; + case 4: RunStatus = "鍚庤秴"; break; + case 5: RunStatus = "瓒呴珮"; break; + case 6: RunStatus = "瓒呴噸"; break; + } + return RunStatus; + } + string GetStatus(short status) + { + string Status = string.Empty; + switch (status) + { + case 0: Status = "寰呮満涓�"; break; + case 1: Status = "鍏ュ簱涓�"; break; + case 2: Status = "鍑哄簱涓�"; break; + case 3: Status = "绉诲簱涓�"; break; + case 4: Status = "鐩樼偣涓�"; break; + case 9: Status = "鎵嬪姩涓�"; break; + case 10: Status = "鍏呯數涓�"; break; + case 13: Status = "A渚у洖闆朵腑"; break; + case 14: Status = "B渚у洖闆朵腑"; break; + case 15: Status = "A渚у悗閫�涓�"; break; + case 16: Status = "B渚у悗閫�涓�"; break; + } + return Status; + } + string GetErrStatus(short status) + { + string Status = string.Empty; + switch (status) + { + case 0: Status = "姝e父"; break; + case 1: Status = "鍓嶉槻鎾炰繚鎶�"; break; + case 2: Status = "鍚庨槻鎾炰繚鎶�"; break; + case 3: Status = "椤跺崌瓒呮椂"; break; + case 4: Status = "琛岃蛋瓒呮椂"; break; + case 5: Status = "鍓嶅噺閫熸縺鍏夋晠闅�"; break; + case 6: Status = "鍚庡噺閫熸縺鍏夋晠闅�"; break; + case 7: Status = "鍓嶅悜涓婂噺閫熸縺鍏夋晠闅�"; break; + case 8: Status = "鍚庡悜涓婂噺閫熸縺鍏夋晠闅�"; break; + case 9: Status = "鎺ヨ繎寮�鍏虫晠闅�"; break; + case 10: Status = "琛岃蛋鍫佃浆鎶ヨ"; break; + case 11: Status = "A渚ф�ュ仠鎶ヨ"; break; + case 12: Status = "B渚ф�ュ仠鎶ヨ"; break; + case 13: Status = "琛岃蛋鐢垫満鏁呴殰"; break; + case 14: Status = "椤跺崌鐢垫満鏁呴殰"; break; + case 15: Status = "鐢甸噺涓嶈冻"; break; + } + return Status; } } } -- Gitblit v1.9.3