1
huangxiaoqiang
2025-10-22 d4b0b578752a1478f6c11b352fbb8d2bad1f9e1d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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;
        }
 
 
       
    }
}