1
dengjunjie
2025-05-28 01030b05f7ea9b14878102718a2004b4f908dcfc
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_SystemRepository/Sys_DictionaryRepository.cs
@@ -5,20 +5,126 @@
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>
        /// 
@@ -58,7 +164,7 @@
            }
            catch (Exception ex)
            {
                throw ex;
                return new List<Sys_DictionaryList>();
            }
        }