using Autofac.Core;
|
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.Extensions.DependencyModel;
|
using Newtonsoft.Json;
|
using System.Reflection;
|
using WIDESEAWCS_Core.BaseController;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_ISystemServices;
|
using WIDESEAWCS_Model.Models;
|
using System.IO;
|
using WIDESEAWCS_QuartzJob.DeviceBase;
|
using WIDESEAWCS_DTO.System;
|
using System.ComponentModel;
|
using System.Collections.Generic;
|
using WIDESEAWCS_Communicator;
|
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;
|
|
namespace WIDESEAWCS_WCSServer.Controllers.System
|
{
|
[Route("api/Sys_Dictionary")]
|
[ApiController]
|
public class Sys_DictionaryController : ApiBaseController<ISys_DictionaryService, Sys_Dictionary>
|
{
|
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<VueDictionaryDTO> vueDictionaryDTOs = Service.GetVueDictionary(dicNos);
|
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();
|
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
|
{
|
|
}
|
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
|
|
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;
|
}
|
}
|
}
|
}
|