using Autofac.Core;
|
using Microsoft.AspNetCore.Mvc;
|
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_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_DTO.System;
|
using WIDESEA_IRepository;
|
using WIDESEA_IServices;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_Services
|
{
|
public class Sys_DictionaryService : ServiceBase<Sys_Dictionary, ISys_DictionaryRepository>, ISys_DictionaryService
|
{
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
private readonly ICacheService _cacheService;
|
public Sys_DictionaryService(ISys_DictionaryRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService) : base(BaseDal)
|
{
|
_unitOfWorkManage = unitOfWorkManage;
|
_cacheService = cacheService;
|
}
|
|
//public object GetVueDictionary(string[] dicNos)
|
//{
|
// if (dicNos == null || dicNos.Count() == 0) return new string[] { };
|
|
// var dicConfig = BaseDal.GetDictionaries(dicNos, false).Select(s => new
|
// {
|
// dicNo = s.DicNo,
|
// config = s.Config,
|
// dbSql = s.DBSql,
|
// list = s.DicList.OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName })
|
// }).ToList();
|
|
// object GetSourceData(string dicNo, string dbSql, object data)
|
// {
|
// if (string.IsNullOrEmpty(dbSql))
|
// {
|
// return data as object;
|
// }
|
// return BaseDal.QueryObjectDataBySql(dbSql, null);
|
// }
|
// return dicConfig.Select(item => new
|
// {
|
// item.dicNo,
|
// item.config,
|
// data = GetSourceData(item.dicNo, item.dbSql, item.list)
|
// }).ToList();
|
//}
|
|
public List<VueDictionaryDTO> GetVueDictionary(string[] dicNos)
|
{
|
if (dicNos == null || dicNos.Count() == 0) return new List<VueDictionaryDTO>();
|
List<VueDictionaryDTO> vueDictionaryDTOs = new List<VueDictionaryDTO>();
|
|
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);
|
}
|
}
|
}
|
if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0)
|
{
|
List<string> list = dicNos.Where(x => !cacheDicNos.Contains(x)).ToList();
|
List<Sys_Dictionary> dictionaries = BaseDal.GetDictionaries(list).ToList();
|
|
List<VueDictionaryDTO> selectDics = dictionaries.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 v in dictionaries)
|
{
|
if (!string.IsNullOrEmpty(v.DBSql))
|
{
|
VueDictionaryDTO? temp = selectDics.FirstOrDefault(x => x.DicNo == v.DicNo);
|
if (temp != null)
|
selectDics.Remove(temp);
|
selectDics.Add(new VueDictionaryDTO
|
{
|
Config = v.Config,
|
DicNo = v.DicNo,
|
Data = BaseDal.QueryDynamicDataBySql(v.DBSql),
|
SaveCache = false,
|
});
|
}
|
}
|
|
foreach (var item in selectDics)
|
{
|
if (!_cacheService.Exists(item.DicNo) && item.SaveCache)
|
{
|
_cacheService.Add(item.DicNo, item.Serialize());
|
}
|
}
|
vueDictionaryDTOs.AddRange(selectDics);
|
}
|
|
return vueDictionaryDTOs;
|
}
|
|
|
|
}
|
}
|