From 0fb0f17319ecf71d66b96a6acfd07f754be9443e Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 24 十月 2024 13:44:38 +0800
Subject: [PATCH] WCS添加穿梭车信息表,修改任务信息表

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs |  349 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 326 insertions(+), 23 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
index 520f0ca..8ccdaeb 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
@@ -18,6 +18,9 @@
 using Quartz;
 using WIDESEAWCS_QuartzJob;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
+using WIDESEAWCS_Common.TaskEnum;
+//using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_Core.Caches;
 
 namespace WIDESEAWCS_WCSServer.Controllers.System
 {
@@ -26,52 +29,352 @@
     public class Sys_DictionaryController : ApiBaseController<ISys_DictionaryService, Sys_Dictionary>
     {
         private readonly IHttpContextAccessor _httpContextAccessor;
-        public Sys_DictionaryController(ISys_DictionaryService service, IHttpContextAccessor httpContextAccessor) : base(service)
+        private readonly ICacheService _cacheService;
+
+        public Sys_DictionaryController(ISys_DictionaryService service, IHttpContextAccessor httpContextAccessor, ICacheService cacheService) : base(service)
         {
             _httpContextAccessor = httpContextAccessor;
+            _cacheService = cacheService;
         }
 
         [HttpPost, Route("GetVueDictionary"), AllowAnonymous]
         public IActionResult GetVueDictionary([FromBody] string[] dicNos)
         {
             List<VueDictionaryDTO> vueDictionaryDTOs = Service.GetVueDictionary(dicNos);
-            #region
             try
             {
+                List<string> cacheDicNos = new List<string>();
+                //foreach (string n in dicNos)
+                //{
+                //    string str = _cacheService.Get(n);
+                //    if (!string.IsNullOrEmpty(str))
+                //    {
+                //        VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject<VueDictionaryDTO>(str);
+
+                //        if (vueDictionary != null)
+                //        {
+                //            vueDictionaryDTOs.Add(vueDictionary);
+                //            cacheDicNos.Add(n);
+                //        }
+                //    }
+                //}
                 List<string> dicList = dicNos.ToList();
-
-                string str = AppSettings.Configuration["dics"];
-                if (!string.IsNullOrEmpty(str))
+                if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0)
                 {
-                    string st = vueDictionaryDTOs[0].Data.Serialize();
-
-                    List<string> cusDics = new List<string>();
-
-                    List<string> dics = str.Split(",").ToList();
-
-                    foreach (var item in dics)
+                    string str = AppSettings.Configuration["dics"];
+                    if (!string.IsNullOrEmpty(str))
                     {
-                        dicList.Remove(item);
-                        cusDics.Add(item);
-                    }
+                        List<string> cusDics = new List<string>();
 
-                    foreach (var item in cusDics)
-                    {
-                        string dic = QuartzJobCommonMethod.GetVueDictionary(item.Trim());
-                        if (!string.IsNullOrEmpty(dic))
+                        List<string> dics = str.Split(",").ToList();
+
+                        foreach (var item in dics)
                         {
-                            VueDictionaryDTO vueDictionaryDTO = JsonConvert.DeserializeObject<VueDictionaryDTO>(dic);
-                            vueDictionaryDTOs.Add(vueDictionaryDTO);
+                            if (dicList.Contains(item))
+                                cusDics.Add(item);
+                            dicList.Remove(item);
+                        }
+
+                        foreach (var item in cusDics)
+                        {
+                            VueDictionaryDTO vueDictionaryDTO = GetVueDictionary(item.Trim());
+                            if (vueDictionaryDTO != null)
+                            {
+                                if (!_cacheService.Exists(item))
+                                {
+                                    vueDictionaryDTOs.Add(vueDictionaryDTO);
+                                    _cacheService.Add(item, vueDictionaryDTO.Serialize());
+                                }
+                            }
                         }
                     }
                 }
             }
-            catch (Exception ex)
+            catch
             {
 
             }
-            #endregion
             return Json(vueDictionaryDTOs);
         }
+
+        private VueDictionaryDTO? GetVueDictionary(string key)
+        {
+            VueDictionaryDTO? result = null;
+            try
+            {
+                switch (key)
+                {
+                    case "deviceType":
+                        {
+                            Type type = typeof(IDevice);
+                            var basePath = AppContext.BaseDirectory;
+                            //string path = Path.Combine(basePath, Assembly.GetExecutingAssembly().GetName().Name);
+                            string path = Path.Combine(basePath, $"WIDESEAWCS_QuartzJob.dll");
+                            Assembly assembly = Assembly.LoadFrom(path);
+                            List<Type> types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
+                            List<object> data = new List<object>();
+                            foreach (var deviceType in types)
+                            {
+                                DescriptionAttribute? description = deviceType.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    if (deviceType.Name != "CommonStackerCrane")
+                                        data.Add(new { key = deviceType.Name, value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = deviceType.Name, value = deviceType.Name });
+                                }
+                            }
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                        }
+                        break;
+                    case "jobAssembly":
+                        {
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = new List<object>() { new { key = "WIDESEAWCS_Tasks", value = "WIDESEAWCS_Tasks" } } };
+
+                        }
+                        break;
+                    case "jobClassName":
+                        {
+                            Type type = typeof(IJob);
+                            var basePath = AppContext.BaseDirectory;
+                            string path = Path.Combine(basePath, $"WIDESEAWCS_Tasks");
+                            Assembly assembly = Assembly.LoadFrom(path);
+                            List<Type> types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = types.Select(x => new { key = x.Name, value = x.Name }) };
+                        }
+                        break;
+                    case "deviceStatus":
+                        {
+                            List<object> data = new List<object>();
+                            var basePath = AppContext.BaseDirectory;
+                            string path = Path.Combine(basePath, $"WIDESEAWCS_QuartzJob.dll");
+                            Assembly assembly = Assembly.LoadFrom(path);
+                            Type type = assembly.GetTypes().FirstOrDefault(x => x.Name == "DeviceStatusEnum");
+                            var enums = Enum.GetValues(type);
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = type.GetField((item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = index , value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = index, value = item.ToString() });
+                                }
+                                index++;
+                            }
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                        }
+                        break;
+                    case "taskType":
+                        {
+                            List<object> data = new List<object>();
+
+                            #region TaskInboundTypeEnum
+                            {
+                                Type type = typeof(TaskInboundTypeEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskInboundTypeEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskInboundTypeEnum).GetField(((TaskInboundTypeEnum)item).ToString());
+                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                    if (description != null)
+                                    {
+                                        data.Add(new { key = item.ToString(), value = description.Description });
+                                    }
+                                    else
+                                    {
+                                        data.Add(new { key = item.ToString(), value = item.ToString() });
+                                    }
+                                    index++;
+                                }
+                            }
+                            #endregion
+
+                            #region TaskOutboundTypeEnum
+                            {
+                                Type type = typeof(TaskOutboundTypeEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskOutboundTypeEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskOutboundTypeEnum).GetField(((TaskOutboundTypeEnum)item).ToString());
+                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                    if (description != null)
+                                    {
+                                        data.Add(new { key = item.ToString(), value = description.Description });
+                                    }
+                                    else
+                                    {
+                                        data.Add(new { key = item.ToString(), value = item.ToString() });
+                                    }
+                                    index++;
+                                }
+                            }
+                            #endregion
+
+                            #region TaskRelocationTypeEnum
+                            {
+                                Type type = typeof(TaskRelocationTypeEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskRelocationTypeEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskRelocationTypeEnum).GetField(((TaskRelocationTypeEnum)item).ToString());
+                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                    if (description != null)
+                                    {
+                                        data.Add(new { key = item.ToString(), value = description.Description });
+                                    }
+                                    else
+                                    {
+                                        data.Add(new { key = item.ToString(), value = item.ToString() });
+                                    }
+                                    index++;
+                                }
+                            }
+                            #endregion
+
+                            #region TaskOtherTypeEnum
+                            {
+                                Type type = typeof(TaskOtherTypeEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskOtherTypeEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskOtherTypeEnum).GetField(((TaskOtherTypeEnum)item).ToString());
+                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                    if (description != null)
+                                    {
+                                        data.Add(new { key = item.ToString(), value = description.Description });
+                                    }
+                                    else
+                                    {
+                                        data.Add(new { key = item.ToString(), value = item.ToString() });
+                                    }
+                                    index++;
+                                }
+                            }
+                            #endregion
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                        }
+                        break;
+                    case "taskState":
+                        {
+                            List<object> data = new List<object>();
+
+                            #region TaskInStatusEnum
+                            {
+                                Type type = typeof(TaskInStatusEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString());
+                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                    if (description != null)
+                                    {
+                                        data.Add(new { key = item.ToString(), value = description.Description });
+                                    }
+                                    else
+                                    {
+                                        data.Add(new { key = item.ToString(), value = item.ToString() });
+                                    }
+                                    index++;
+                                }
+                            }
+                            #endregion
+
+                            #region TaskOutStatusEnum
+                            {
+                                Type type = typeof(TaskOutStatusEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
+                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                    if (description != null)
+                                    {
+                                        data.Add(new { key = item.ToString(), value = description.Description });
+                                    }
+                                    else
+                                    {
+                                        data.Add(new { key = item.ToString(), value = item.ToString() });
+                                    }
+                                    index++;
+                                }
+                            }
+                            #endregion
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                        }
+                        break;
+                    case "devicePlcType":
+                        {
+                            Type type = typeof(BaseCommunicator);
+                            var basePath = AppContext.BaseDirectory;
+                            string path = Path.Combine(basePath, $"WIDESEAWCS_Communicator.dll");
+                            Assembly assembly = Assembly.LoadFrom(path);
+                            List<Type> types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
+                            List<object> data = new List<object>();
+                            foreach (var deviceType in types)
+                            {
+                                DescriptionAttribute? description = deviceType.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = deviceType.Name, value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = deviceType.Name, value = deviceType.Name });
+                                }
+                            }
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                        }
+                        break;
+                    case "inOutType":
+                        {
+                            List<object> data = new List<object>();
+                            Type type = typeof(WIDESEAWCS_Core.Enums.RouterInOutType);
+                            List<int> enums = Enum.GetValues(typeof(WIDESEAWCS_Core.Enums.RouterInOutType)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(WIDESEAWCS_Core.Enums.RouterInOutType).GetField(((WIDESEAWCS_Core.Enums.RouterInOutType)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                        }
+                        break;
+                }
+                return result;
+            }
+            catch (Exception ex)
+            {
+                return null;
+            }
+        }
     }
 }

--
Gitblit v1.9.3