using Newtonsoft.Json; using System.ComponentModel; using System.Reflection; using WIDESEA_Common; using WIDESEA_Core.Caches; using WIDESEA_Core.Enums; namespace WIDESEA_WMSServer.Controllers; [Route("api/Sys_Dictionary")] [ApiController] public class Sys_DictionaryController : ApiBaseController { private readonly IHttpContextAccessor _httpContextAccessor; 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 vueDictionaryDTOs = Service.GetVueDictionary(dicNos); try { List cacheDicNos = new List(); foreach (string n in dicNos) { string str = _cacheService.Get(n); if (!string.IsNullOrEmpty(str)) { VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject(str); if (vueDictionary != null) { vueDictionaryDTOs.Add(vueDictionary); cacheDicNos.Add(n); } } } List dicList = dicNos.ToList(); if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0) { string str = AppSettings.Configuration["dics"]; if (!string.IsNullOrEmpty(str)) { List cusDics = new List(); List 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) && vueDictionaryDTO.SaveCache) { _cacheService.Add(item, vueDictionaryDTO.Serialize()); } } } } } } catch { } return Json(vueDictionaryDTOs); } private VueDictionaryDTO GetVueDictionary(string key) { VueDictionaryDTO result = null; try { switch (key) { case "taskType": { List data = new List(); #region TaskInboundTypeEnum { Type type = typeof(TaskInboundTypeEnum); List enums = Enum.GetValues(typeof(TaskInboundTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskInboundTypeEnum).GetField(((TaskInboundTypeEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 enums = Enum.GetValues(typeof(TaskOutboundTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskOutboundTypeEnum).GetField(((TaskOutboundTypeEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 enums = Enum.GetValues(typeof(TaskRelocationTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskRelocationTypeEnum).GetField(((TaskRelocationTypeEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 enums = Enum.GetValues(typeof(TaskOtherTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskOtherTypeEnum).GetField(((TaskOtherTypeEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 TaskAGVCarryTypeEnum { Type type = typeof(TaskAGVCarryTypeEnum); List enums = Enum.GetValues(typeof(TaskAGVCarryTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskAGVCarryTypeEnum).GetField(((TaskAGVCarryTypeEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 TaskAcrossFloorTypeEnum { Type type = typeof(TaskAcrossFloorTypeEnum); List enums = Enum.GetValues(typeof(TaskAcrossFloorTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskAcrossFloorTypeEnum).GetField(((TaskAcrossFloorTypeEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 data = new List(); #region TaskInStatusEnum { Type type = typeof(TaskInStatusEnum); List enums = Enum.GetValues(typeof(TaskInStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 enums = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 enums = Enum.GetValues(typeof(TaskRelocationStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskRelocationStatusEnum).GetField(((TaskRelocationStatusEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 TaskAGVCarryStatusEnum { Type type = typeof(TaskAGVCarryStatusEnum); List enums = Enum.GetValues(typeof(TaskAGVCarryStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskAGVCarryStatusEnum).GetField(((TaskAGVCarryStatusEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 TaskAcrossFloorStatusEnum { Type type = typeof(TaskAcrossFloorStatusEnum); List enums = Enum.GetValues(typeof(TaskAcrossFloorStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskAcrossFloorStatusEnum).GetField(((TaskAcrossFloorStatusEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 "StatusChangeType": { List data = new List(); #region StatusChangeTypeEnum { Type type = typeof(StatusChangeTypeEnum); List enums = Enum.GetValues(typeof(StatusChangeTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(StatusChangeTypeEnum).GetField(((StatusChangeTypeEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 "operateTypeEnum": { List data = new List(); #region operateTypeEnum { Type type = typeof(OperateTypeEnum); List enums = Enum.GetValues(typeof(OperateTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(OperateTypeEnum).GetField(((OperateTypeEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 "LocationState": { List data = new List(); #region LocationEnum { Type type = typeof(LocationEnum); List enums = Enum.GetValues(typeof(LocationEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(LocationEnum).GetField(((LocationEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 "StockStateEmun": { List data = new List(); #region StockStateEmun { Type type = typeof(StockStateEmun); List enums = Enum.GetValues(typeof(StockStateEmun)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(StockStateEmun).GetField(((StockStateEmun)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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 "EnableEnum": { List data = new List(); #region EnableEnum { Type type = typeof(EnableEnum); List enums = Enum.GetValues(typeof(EnableEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(EnableEnum).GetField(((EnableEnum)item).ToString()); DescriptionAttribute? description = fieldInfo.GetCustomAttribute(); 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; } return result; } catch (Exception ex) { return null; } } }