using Microsoft.AspNetCore.Mvc.ViewFeatures; using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.OrderEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Caches; using WIDESEA_Core.DB; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_Core.TaskEnum; using WIDESEA_DTO.System; using WIDESEA_IBasicRepository; using WIDESEA_ISystemRepository; using WIDESEA_ISystemService; using WIDESEA_Model.Models; namespace WIDESEA_SystemService { public class Sys_DictionaryService : ServiceBase, ISys_DictionaryService { private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly ICacheService _cacheService; private readonly IBasicRepository _basicRepository; public Sys_DictionaryService(ISys_DictionaryRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, IBasicRepository basicRepository) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _cacheService = cacheService; _basicRepository = basicRepository; } public ISys_DictionaryRepository Repository => BaseDal; public override WebResponseContent AddData(SaveModel saveModel) { Sys_Dictionary dictionary = saveModel.MainData.DicToModel(); _cacheService.Remove(dictionary.DicNo); return base.AddData(saveModel); } public override WebResponseContent UpdateData(SaveModel saveModel) { Sys_Dictionary dictionary = saveModel.MainData.DicToModel(); _cacheService.Remove(dictionary.DicNo); return base.UpdateData(saveModel); } public List GetVueDictionary(string[] dicNos) { if (dicNos == null || dicNos.Count() == 0) return new List(); List vueDictionaryDTOs = new List(); 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); } } } if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0) { List selectDics = BaseDal.GetDictionaries(dicNos.Where(x => !cacheDicNos.Contains(x))).Select(s => new VueDictionaryDTO { DicNo = s.DicNo, Config = s.Config, //dbSql = s.Sql, Data = s.DicList.OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName }) }).ToList(); foreach (var item in selectDics) { if (!_cacheService.Exists(item.DicNo)) { _cacheService.Add(item.DicNo, item.Serialize()); } } vueDictionaryDTOs.AddRange(selectDics); } //object GetSourceData(string dicNo, string dbSql, object data) //{ // if (string.IsNullOrEmpty(dbSql)) // { // return data; // } // return BaseDal.QueryObjectDataBySql(dbSql, null); //} //List vueDictionaryDTOs = dicConfig.Select(item => new VueDictionaryDTO //{ // DicNo = item.dicNo, // Config = item.config, // Data = GetSourceData(item.dicNo, item.dbSql, item.list) //}).ToList(); try { 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)) { _cacheService.Add(item, vueDictionaryDTO.Serialize()); } } } } } } catch { } return vueDictionaryDTOs; } private VueDictionaryDTO GetVueDictionary(string key) { VueDictionaryDTO result = null; try { switch (key) { case "warehouses": { List data = new List(); { List warehouses = _basicRepository.WarehouseRepository.QueryData(); int index = 0; foreach (var item in warehouses) { data.Add(new { key = item.WarehouseId, value = item.WarehouseName }); index++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "inboundState": { List data = new List(); Type type = typeof(InboundStatusEnum); List enums = Enum.GetValues(typeof(InboundStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(InboundStatusEnum).GetField(((InboundStatusEnum)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++; } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "inoutType": { List data = new List(); Type type = typeof(InoutTypeEnum); List enums = Enum.GetValues(typeof(InoutTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(InoutTypeEnum).GetField(((InoutTypeEnum)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++; } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "outboundStatusEnum": { List data = new List(); Type type = typeof(OutboundStatusEnum); List enums = Enum.GetValues(typeof(OutboundStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(OutboundStatusEnum).GetField(((OutboundStatusEnum)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++; } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "inOrderType": { List data = new List(); { Type type = typeof(OrderTypeEnum); List enums = Enum.GetValues(typeof(OrderTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(OrderTypeEnum).GetField(((OrderTypeEnum)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++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "outOrderType": { List data = new List(); { Type type = typeof(OutOrderTypeEnum); List enums = Enum.GetValues(typeof(OutOrderTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(OutOrderTypeEnum).GetField(((OutOrderTypeEnum)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++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "orderDetailStatusEnum": { List data = new List(); { Type type = typeof(OrderDetailStatusEnum); List enums = Enum.GetValues(typeof(OrderDetailStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(OrderDetailStatusEnum).GetField(((OrderDetailStatusEnum)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++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "createType": { List data = new List(); { Type type = typeof(CreateType); List enums = Enum.GetValues(typeof(CreateType)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(CreateType).GetField(((CreateType)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++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "enableEnum": { List data = new List(); { 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++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "enableStatusEnum": { List data = new List(); { Type type = typeof(EnableStatusEnum); List enums = Enum.GetValues(typeof(EnableStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(EnableStatusEnum).GetField(((EnableStatusEnum)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++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "locationStatusEnum": { List data = new List(); { Type type = typeof(LocationStatusEnum); List enums = Enum.GetValues(typeof(LocationStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(LocationStatusEnum).GetField(((LocationStatusEnum)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++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "locationTypeEnum": { List data = new List(); { Type type = typeof(LocationTypeEnum); List enums = Enum.GetValues(typeof(LocationTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(LocationTypeEnum).GetField(((LocationTypeEnum)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++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "taskTypeEnum": { List data = new List(); { Type type = typeof(TaskTypeEnum); List enums = Enum.GetValues(typeof(TaskTypeEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskTypeEnum).GetField(((TaskTypeEnum)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++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "taskStatusEnum": { List data = new List(); { Type type = typeof(TaskStatusEnum); List enums = Enum.GetValues(typeof(TaskStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TaskStatusEnum).GetField(((TaskStatusEnum)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++; } } { Type type = typeof(OutTaskStatusEnum); List enums = Enum.GetValues(typeof(OutTaskStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(OutTaskStatusEnum).GetField(((OutTaskStatusEnum)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++; } } { Type type = typeof(AGVTaskStatusEnum); List enums = Enum.GetValues(typeof(AGVTaskStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(AGVTaskStatusEnum).GetField(((AGVTaskStatusEnum)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++; } } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "InventoryMaterialType": { List data = new List(); Type type = typeof(InventoryMaterialType); List enums = Enum.GetValues(typeof(InventoryMaterialType)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(InventoryMaterialType).GetField(((InventoryMaterialType)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++; } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "InventoryMaterialStatus": { List data = new List(); Type type = typeof(InventoryMaterialStatus); List enums = Enum.GetValues(typeof(InventoryMaterialStatus)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(InventoryMaterialStatus).GetField(((InventoryMaterialStatus)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++; } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "stockStatusEmun": { List data = new List(); Type type = typeof(StockStatusEmun); List enums = Enum.GetValues(typeof(StockStatusEmun)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(StockStatusEmun).GetField(((StockStatusEmun)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++; } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "stockChangeType": { List data = new List(); Type type = typeof(StockChangeType); List enums = Enum.GetValues(typeof(StockChangeType)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(StockChangeType).GetField(((StockChangeType)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++; } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "outStockStatus": { List data = new List(); Type type = typeof(OutStockStatus); List enums = Enum.GetValues(typeof(OutStockStatus)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(OutStockStatus).GetField(((OutStockStatus)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++; } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "inoutTypeEnum": { List data = new List(); Type enumType = typeof(InoutTypeEnum); // 获取所有枚举成员的字段信息 foreach (var field in enumType.GetFields(BindingFlags.Public | BindingFlags.Static)) { // 字段名称就是枚举成员的字符标识(如"StandardCount") string enumName = field.Name; // 获取描述属性 var descriptionAttr = field.GetCustomAttribute(); string description = descriptionAttr?.Description ?? enumName; int enumValue = (int)field.GetValue(null); data.Add(new { key = enumName, // 使用枚举名称作为key value = description, enumValue = enumValue // 可选:保留整数value }); } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "takeStockStatusEnum": { List data = new List(); Type type = typeof(TakeStockStatusEnum); List enums = Enum.GetValues(typeof(TakeStockStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TakeStockStatusEnum).GetField(((TakeStockStatusEnum)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++; } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; case "takeStockDetailStatusEnum": { List data = new List(); Type type = typeof(TakeStockDetailStatusEnum); List enums = Enum.GetValues(typeof(TakeStockDetailStatusEnum)).Cast().ToList(); int index = 0; foreach (var item in enums) { FieldInfo? fieldInfo = typeof(TakeStockDetailStatusEnum).GetField(((TakeStockDetailStatusEnum)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++; } result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data }; } break; } return result; } catch (Exception ex) { return null; } } } }