From fbc6fae6c793220d0b67ac603ce9bbf22837de79 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期四, 19 六月 2025 17:50:47 +0800 Subject: [PATCH] 1 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs | 419 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 394 insertions(+), 25 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..66a3a70 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,60 +18,429 @@ 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 +namespace WIDESEAWCS_Server.Controllers.System { [Route("api/Sys_Dictionary")] [ApiController] 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 && vueDictionaryDTOs.Where(x => x.DicNo == vueDictionary.DicNo).FirstOrDefault() == 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) + { + 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); } + + public static 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 + + #region TaskRelocationStatusEnum/绉诲簱浠诲姟鐘舵�� + { + Type type = typeof(TaskRelocationStatusEnum); + List<int> enums = Enum.GetValues(typeof(TaskRelocationStatusEnum)).Cast<int>().ToList(); + int index = 0; + foreach (var item in enums) + { + FieldInfo? fieldInfo = typeof(TaskRelocationStatusEnum).GetField(((TaskRelocationStatusEnum)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 TaskCarStatusEnum/绉昏溅浠诲姟鐘舵�� + { + Type type = typeof(TaskCarStatusEnum); + List<int> enums = Enum.GetValues(typeof(TaskCarStatusEnum)).Cast<int>().ToList(); + int index = 0; + foreach (var item in enums) + { + FieldInfo? fieldInfo = typeof(TaskCarStatusEnum).GetField(((TaskCarStatusEnum)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 CarChargingTaskEnum/绌挎杞﹀厖鐢典换鍔$姸鎬� + { + Type type = typeof(CarChargingTaskEnum); + List<int> enums = Enum.GetValues(typeof(CarChargingTaskEnum)).Cast<int>().ToList(); + int index = 0; + foreach (var item in enums) + { + FieldInfo? fieldInfo = typeof(CarChargingTaskEnum).GetField(((CarChargingTaskEnum)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