From 681d093f9ea16ab2d480d77e6b04b197e506ff60 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 19 六月 2025 01:29:12 +0800
Subject: [PATCH] 1
---
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs | 435 +++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 411 insertions(+), 24 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
index 520f0ca..fc07fe6 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
@@ -18,6 +18,11 @@
using Quartz;
using WIDESEAWCS_QuartzJob;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
+using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_Core.Caches;
+using WIDESEAWCS_QuartzJob.DeviceEnum;
+using WIDESEA_Core.Enums;
+using WIDESEAWCS_DTO.TaskEnum;
namespace WIDESEAWCS_WCSServer.Controllers.System
{
@@ -26,52 +31,434 @@
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> dicList = dicNos.ToList();
-
- string str = AppSettings.Configuration["dics"];
- if (!string.IsNullOrEmpty(str))
+ List<string> cacheDicNos = new List<string>();
+ foreach (string n in dicNos)
{
- 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 = _cacheService.Get(n);
+ if (!string.IsNullOrEmpty(str))
{
- dicList.Remove(item);
- cusDics.Add(item);
- }
+ VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject<VueDictionaryDTO>(str);
- foreach (var item in cusDics)
- {
- string dic = QuartzJobCommonMethod.GetVueDictionary(item.Trim());
- if (!string.IsNullOrEmpty(dic))
+ if (vueDictionary != null)
{
- VueDictionaryDTO vueDictionaryDTO = JsonConvert.DeserializeObject<VueDictionaryDTO>(dic);
- vueDictionaryDTOs.Add(vueDictionaryDTO);
+ vueDictionaryDTOs.Add(vueDictionary);
+ cacheDicNos.Add(n);
+ }
+ }
+ }
+ List<string> dicList = dicNos.ToList();
+ if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0)
+ {
+ string str = AppSettings.Configuration["dics"];
+ if (!string.IsNullOrEmpty(str))
+ {
+ List<string> cusDics = new List<string>();
+
+ List<string> dics = str.Split(",").ToList();
+
+ foreach (var item in dics)
+ {
+ dicList.Remove(item);
+ cusDics.Add(item);
+ }
+
+ foreach (var item in cusDics)
+ {
+ VueDictionaryDTO vueDictionaryDTO = GetVueDictionary(item.Trim());
+ if (vueDictionaryDTO != null)
+ {
+ vueDictionaryDTOs.Add(vueDictionaryDTO);
+ if (!_cacheService.Exists(item))
+ {
+ _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("", Assembly.GetAssembly(type).GetName());
+ Assembly assembly = Assembly.GetAssembly(type);
+ 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 "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>();
+ Type type = typeof(DeviceStatusEnum);
+ List<int> enums = Enum.GetValues(type).Cast<int>().ToList();
+ int index = 0;
+ foreach (var item in enums)
+ {
+ FieldInfo? fieldInfo = type.GetField(((DeviceStatusEnum)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;
+ case "taskType":
+ {
+ List<object> data = new List<object>();
+
+ #region TaskTypeEnum
+ {
+ Type type = typeof(TaskTypeEnum);
+ List<int> enums = Enum.GetValues(typeof(TaskTypeEnum)).Cast<int>().ToList();
+ int index = 0;
+ foreach (var item in enums)
+ {
+ FieldInfo? fieldInfo = typeof(TaskTypeEnum).GetField(((TaskTypeEnum)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 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 InTaskStatusEnum
+ {
+ Type type = typeof(InTaskStatusEnum);
+ List<int> enums = Enum.GetValues(typeof(InTaskStatusEnum)).Cast<int>().ToList();
+ int index = 0;
+ foreach (var item in enums)
+ {
+ FieldInfo? fieldInfo = typeof(InTaskStatusEnum).GetField(((InTaskStatusEnum)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
+
+ #region OutTaskStatusEnum
+ {
+ Type type = typeof(OutTaskStatusEnum);
+ List<int> enums = Enum.GetValues(typeof(OutTaskStatusEnum)).Cast<int>().ToList();
+ int index = 0;
+ foreach (var item in enums)
+ {
+ FieldInfo? fieldInfo = typeof(OutTaskStatusEnum).GetField(((OutTaskStatusEnum)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 RelocationTaskStatusEnum
+ {
+ Type type = typeof(RelocationTaskStatusEnum);
+ List<int> enums = Enum.GetValues(typeof(RelocationTaskStatusEnum)).Cast<int>().ToList();
+ int index = 0;
+ foreach (var item in enums)
+ {
+ FieldInfo? fieldInfo = typeof(RelocationTaskStatusEnum).GetField(((RelocationTaskStatusEnum)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(RouterInOutType);
+ List<int> enums = Enum.GetValues(typeof(RouterInOutType)).Cast<int>().ToList();
+ int index = 0;
+ foreach (var item in enums)
+ {
+ FieldInfo? fieldInfo = typeof(RouterInOutType).GetField(((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