using Microsoft.AspNetCore.DataProtection.KeyManagement;
|
using Microsoft.AspNetCore.Routing;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
|
using SqlSugar;
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.BaseRepository;
|
using WIDESEAWCS_DTO.System;
|
using WIDESEAWCS_ISystemRepository;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_Model.Models.System;
|
|
namespace WIDESEAWCS_SystemRepository
|
{
|
public class Sys_DictionaryRepository : RepositoryBase<Sys_Dictionary>, ISys_DictionaryRepository
|
{
|
public Sys_DictionaryRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
|
{
|
}
|
public IEnumerable<VueDictionaryDTO> GetDictionaries(IEnumerable<string> dicNos, List<RoleNodes> roleNodes, bool executeSql = true)
|
{
|
List<Sys_Dictionary> Dictionaries = GetAllDictionary();
|
List<VueDictionaryDTO> DictionaryDTO = new List<VueDictionaryDTO>();
|
|
|
foreach (var item in Dictionaries.Where(x => dicNos.Contains(x.DicNo)))
|
{
|
VueDictionaryDTO dictionaryDTO = new VueDictionaryDTO();
|
dictionaryDTO.DicNo = item.DicNo;
|
dictionaryDTO.Config = item.Config;
|
dictionaryDTO.Data = item.DicList.OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName });
|
if (executeSql)
|
{
|
// 2020.05.01增加根据用户信息加载字典数据源sql
|
string sql = item.DBSql;
|
if (!string.IsNullOrEmpty(sql))
|
{
|
dictionaryDTO.Data = item.DicNo == "tree_roles" ?
|
QueryRole(GetCustomDBSql(item.DicNo, sql, roleNodes)).OrderBy(x => x.id).Select(list => new { id = list.id, parentId = list.parentId, key = list.DicValue, value = list.DicName }) : Query(GetCustomDBSql(item.DicNo, sql, roleNodes)).OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName });
|
}
|
}
|
DictionaryDTO.Add(dictionaryDTO);
|
}
|
return DictionaryDTO;
|
}
|
List<SourceKeyVaule> QueryRole(string sql)
|
{
|
try
|
{
|
return base.QueryDynamicDataBySql(sql, null).Select(s => new SourceKeyVaule()
|
{
|
id = s.id,
|
parentId = s.parentId,
|
DicName = s.value,
|
DicValue = s.key
|
}).ToList();
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
List<Sys_DictionaryList> Query(string sql)
|
{
|
try
|
{
|
return base.QueryDynamicDataBySql(sql, null).Select(s => new Sys_DictionaryList()
|
{
|
DicName = s.value,
|
DicValue = s.key.ToString()
|
}).ToList();
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 获取自定义数据源sql
|
/// </summary>
|
/// <param name="dicNo"></param>
|
/// <param name="originalSql"></param>
|
/// <returns></returns>
|
public static string GetCustomDBSql(string dicNo, string originalSql, List<RoleNodes> roleNodes)
|
{
|
switch (dicNo)
|
{
|
case "roles":
|
//2020.05.24增加绑定table表时,获取所有的角色列表
|
//注意,如果是2020.05.24之前获取的数据库脚本
|
//请在菜单【下拉框绑定设置】添加一个字典编号【t_roles】,除了字典编号,其他内容随便填写
|
case "t_roles":
|
case "tree_roles":
|
originalSql = GetRolesSql(originalSql, roleNodes);
|
break;
|
default:
|
break;
|
}
|
return originalSql;
|
}
|
|
/// <summary>
|
/// 获取解决的数据源,只能看到自己与下级所有角色
|
/// </summary>
|
/// <param name="context"></param>
|
/// <param name="originalSql"></param>
|
/// <returns></returns>
|
public static string GetRolesSql(string originalSql, List<RoleNodes> roleNodes)
|
{
|
if (App.User.IsSuperAdmin)
|
{
|
return originalSql;
|
}
|
|
var RoleNodes = roleNodes.Where(x => x.Id == App.User.RoleId)
|
.Select(s => new RoleNodes()
|
{
|
Id = s.Id,
|
ParentId = 0,//将自己的角色作为root节点
|
RoleName = s.RoleName
|
}).ToList();
|
List<int> roleIds = roleNodes.Select(x => x.Id).ToList();
|
//roleIds.Add(App.User.RoleId);
|
|
return originalSql = $@"SELECT RoleId as 'key',RoleId AS id,ParentId AS parentId,RoleName as 'value' FROM Sys_Role
|
WHERE Enable=1 and RoleId in ({string.Join(',', roleIds)})";
|
}
|
|
private List<Sys_Dictionary> GetAllDictionary()
|
{
|
//base.QueryData().ToList();
|
List<Sys_Dictionary> _dictionaries = Db.Queryable<Sys_Dictionary>().Includes(x => x.DicList).Where(x => x.Enable == 1).ToList();
|
return _dictionaries;
|
}
|
}
|
|
public class SourceKeyVaule
|
{
|
public int id { get; set; }
|
public int parentId { get; set; }
|
public string DicName { get; set; }
|
public int DicValue { get; set; }
|
}
|
}
|