using Microsoft.AspNetCore.DataProtection.KeyManagement;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseRepository;
|
using WIDESEA_DTO.System;
|
using WIDESEA_ISystemRepository;
|
using WIDESEA_Model.Models;
|
using WIDESEA_Model.Models.System;
|
|
namespace WIDESEA_SystemRepository
|
{
|
public class Sys_DictionaryRepository : RepositoryBase<Sys_Dictionary>, ISys_DictionaryRepository
|
{
|
|
|
public Sys_DictionaryRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
|
{
|
|
}
|
|
#region 查询数据库select方法
|
public class SourceKeyVaule
|
{
|
public int id { get; set; }
|
public int parentId { get; set; }
|
public string DicName { get; set; }
|
public int DicValue { get; set; }
|
}
|
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.Sql;
|
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)
|
{
|
return new List<SourceKeyVaule>();
|
}
|
}
|
/// <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)})";
|
}
|
#endregion
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="dicNos"></param>
|
/// <param name="executeSql">是否执行自定义sql</param>
|
/// <returns></returns>
|
public IEnumerable<Sys_Dictionary> GetDictionaries(IEnumerable<string> dicNos, bool executeSql = true)
|
{
|
List<Sys_Dictionary> Dictionaries = GetDictionaries(dicNos.ToList());
|
|
foreach (var item in Dictionaries)
|
{
|
if (executeSql)
|
{
|
// 2020.05.01增加根据用户信息加载字典数据源sql
|
string sql = item.Sql;
|
if (!string.IsNullOrEmpty(sql))
|
{
|
item.DicList = Query(sql);
|
}
|
}
|
}
|
|
return Dictionaries;
|
}
|
|
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)
|
{
|
return new List<Sys_DictionaryList>();
|
}
|
}
|
|
private List<Sys_Dictionary> GetDictionaries(List<string> dicNos)
|
{
|
//base.QueryData().ToList();
|
List<Sys_Dictionary> _dictionaries = Db.Queryable<Sys_Dictionary>().Where(x => x.Enable == 1 && dicNos.Contains(x.DicNo)).Includes(x => x.DicList).ToList();
|
return _dictionaries;
|
}
|
|
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 object Key { get; set; }
|
public string Value { get; set; }
|
}
|
}
|