using JNPF.Common.Core.Manager;
using JNPF.Common.Core.Manager.Files;
using JNPF.Common.Enums;
using JNPF.Common.Manager;
using JNPF.Common.Security;
using JNPF.DatabaseAccessor;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using JNPF.Systems.Entitys.Dto.DictionaryData;
using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System;
using Mapster;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
namespace JNPF.Systems;
///
/// 字典数据
/// 版 本:V3.2
/// 版 权:拓通智联科技有限公司(http://www.tuotong-tech.com)
/// 日 期:2021-06-01.
///
[ApiDescriptionSettings(Tag = "System", Name = "DictionaryData", Order = 203)]
[Route("api/system/[controller]")]
public class DictionaryDataService : IDictionaryDataService, IDynamicApiController, ITransient
{
///
/// 服务基础仓储.
///
private readonly ISqlSugarRepository _repository;
///
/// 字典类型服务.
///
private readonly IDictionaryTypeService _dictionaryTypeService;
///
/// 文件服务.
///
private readonly IFileManager _fileManager;
///
/// 用户管理.
///
private readonly IUserManager _userManager;
private readonly ICacheManager _cache;
///
/// 初始化一个类型的新实例.
///
public DictionaryDataService(
ISqlSugarRepository repository,
IDictionaryTypeService dictionaryTypeService,
IFileManager fileManager,
IUserManager userManager,
ICacheManager cache)
{
_repository = repository;
_dictionaryTypeService = dictionaryTypeService;
_fileManager = fileManager;
_userManager = userManager;
_cache = cache;
}
#region GET
///
/// 获取数据字典列表.
///
/// 分类id.
/// 参数.
///
[HttpGet("{dictionaryTypeId}")]
public async Task GetList_Api(string dictionaryTypeId, [FromQuery] DictionaryDataListQuery input)
{
var data = await GetList(dictionaryTypeId, false);
if ("1".Equals(input.isTree))
{
var treeList = data.Adapt>();
if (!string.IsNullOrEmpty(input.keyword))
treeList = treeList.TreeWhere(t => t.enCode.Contains(input.keyword) || t.fullName.Contains(input.keyword), t => t.id, t => t.parentId);
return new { list = treeList.ToTree() };
}
else
{
if (!string.IsNullOrEmpty(input.keyword))
data = data.FindAll(t => t.EnCode.Contains(input.keyword) || t.FullName.Contains(input.keyword));
var treeList = data.Adapt>();
return new { list = treeList };
}
}
///
/// 获取部分数据字典列表(多个分类).
///
[HttpGet("Many")]
public async Task GetListMany(string[] dictionaryTypeIds)
{
var dictionaryData = await _repository.AsQueryable().Where(d => d.DeleteMark == null && d.EnabledMark == 1 && dictionaryTypeIds.Contains(d.DictionaryTypeId))
.OrderBy(o => o.SortCode).OrderBy(o => o.CreatorTime, OrderByType.Desc).OrderBy(o => o.LastModifyTime, OrderByType.Desc).ToListAsync();
var dictionaryType = await _dictionaryTypeService.GetListMany(dictionaryTypeIds);
var data = dictionaryType.Adapt>();
data.ForEach(dataall =>
{
if (dataall.isTree == 1)
dataall.dictionaryList = dictionaryData.FindAll(d => d.DictionaryTypeId == dataall.id).Adapt>().ToTree();
else
dataall.dictionaryList = dictionaryData.FindAll(d => d.DictionaryTypeId == dataall.id).Adapt>();
});
return new { list = data };
}
///
/// 获取所有数据字典列表(分类+内容).
///
///
[HttpGet("All")]
public async Task GetListAll()
{
var dictionaryData = await _repository.AsQueryable().Where(d => d.DeleteMark == null && d.EnabledMark == 1)
.OrderBy(o => o.SortCode).OrderBy(o => o.CreatorTime, OrderByType.Desc).OrderBy(o => o.LastModifyTime, OrderByType.Desc).ToListAsync();
var dictionaryType = await _dictionaryTypeService.GetList();
var data = dictionaryType.Adapt>();
data.ForEach(dataall =>
{
if (dataall.isTree == 1)
dataall.dictionaryList = dictionaryData.FindAll(d => d.DictionaryTypeId == dataall.id).Adapt>().ToTree();
else
dataall.dictionaryList = dictionaryData.FindAll(d => d.DictionaryTypeId == dataall.id).Adapt>();
});
return new { list = data };
}
///
/// 获取字典分类下拉框.
///
///
[HttpGet("{dictionaryTypeId}/Selector/{id}")]
public async Task GetSelector(string dictionaryTypeId, string id, string isTree)
{
var output = new List();
var typeEntity = await _dictionaryTypeService.GetInfo(dictionaryTypeId);
// 顶级节点
var dataEntity = typeEntity.Adapt();
dataEntity.id = "0";
dataEntity.parentId = "-1";
output.Add(dataEntity);
if ("1".Equals(isTree))
{
var dataList = (await GetList(dictionaryTypeId, false)).Adapt>();
if (!id.Equals("0"))
dataList.RemoveAll(x => x.id == id);
output = output.Union(dataList).ToList();
return new { list = output.ToTree("-1") };
}
return new { list = output };
}
///
/// 获取字典数据下拉框列表.
///
///
[HttpGet("{dictionaryTypeId}/Data/Selector")]
public async Task GetDataSelector(string dictionaryTypeId)
{
try
{
var isTree = (await _dictionaryTypeService.GetInfo(dictionaryTypeId)).IsTree;
var datalist = await GetList(dictionaryTypeId);
var treeList = datalist.Adapt>();
if (isTree == 1)
{
var typeEntity = await _dictionaryTypeService.GetInfo(dictionaryTypeId);
// 顶级节点
var dataEntity = typeEntity.Adapt();
dataEntity.id = "0";
dataEntity.parentId = "-1";
treeList.Add(dataEntity);
treeList = treeList.ToTree();
}
return new { list = treeList };
}
catch (Exception)
{
return new { list = new List