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