BaseInfoCacheService.cs
5.02 KB
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
131
132
133
134
135
136
137
138
139
140
using Hh.Mes.Common.config;
using Hh.Mes.Common.log;
using Hh.Mes.POJO.Entity;
using Hh.Mes.Service.Repository;
using Microsoft.Extensions.Caching.Distributed;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using JsonSerializer = System.Text.Json.JsonSerializer;
namespace Hh.Mes.Service
{
/// <summary>
/// 公共信息缓存 只负责读取数据 缓存
/// </summary>
public class BaseInfoCacheService : RepositorySqlSugar<sys_user>
{
private readonly IDistributedCache _cache;
private Dictionary<string, string> baseSql { get; set; }
public BaseInfoCacheService(IDistributedCache cache)
{
baseSql = ConfigRead.GetInstance.GetBaseInfoSql();
_cache = cache;
}
/// <summary>
/// 第一次默认把所有的基础信息缓存
/// </summary>
public void SetBaseInfoCacheFirst()
{
try
{
var sql = GetAllFileJosnSql();
var ds = Context.Ado.GetDataSetAllAsync(sql).Result;
var index = 0;
foreach (var item in baseSql)
{
var jsonStr = JsonConvert.SerializeObject(ds.Tables[index], new DataTableConverter());
var cacheOption = new DistributedCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(1));
_cache.Set(item.Key, Encoding.UTF8.GetBytes(jsonStr), cacheOption);
index++;
}
}
catch (Exception ex)
{
Console.WriteLine();
Console.WriteLine($"WebApp Connection DataBase Error!Please Check Connection 【{ConfigRead.GetInstance.GetAppsetConnection().BaseDBContext}】");
Console.WriteLine();
Log4NetHelper.Instance.Error(ex.Message);
}
}
/// <summary>
/// 获取缓存数据
/// </summary>
/// <param name="key">key</param>
/// <param name="isRemove"> true 重新设置值</param>
/// <returns></returns>
public string GetOneBaseInfo(string key, bool isRemove = false)
{
if (!baseSql.ContainsKey(key))
{
return string.Empty;
}
var sql = baseSql[key];
if (isRemove)
{
return getDataBySql(sql, key);
}
var bytes = _cache.Get(key);
if (bytes != null)
{
return Encoding.UTF8.GetString(bytes);
//var dt = JsonSerializer.Deserialize<DataTable>(Encoding.UTF8.GetString(bytes));
//return JsonConvert.SerializeObject(dt, new DataTableConverter());
}
return getDataBySql(sql, key);
}
/// <summary>
/// 读取数据库数据,并存入缓存
/// </summary>
private string getDataBySql(string sql, string key)
{
var dt = Context.Ado.GetDataTableAsync(sql).Result;
var jsonStr = JsonConvert.SerializeObject(dt, new DataTableConverter());
var cacheOption = new DistributedCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(1));
_cache.Set(key, Encoding.UTF8.GetBytes(jsonStr), cacheOption);
return JsonConvert.SerializeObject(dt, new DataTableConverter());
}
/// <summary>
/// 获取所有的配置文件json sql
/// </summary>
/// <returns></returns>
private string GetAllFileJosnSql()
{
StringBuilder stringBuilder = new StringBuilder();
foreach (var item in baseSql)
{
stringBuilder.AppendLine(item.Value);
}
return stringBuilder.ToString();
}
/// <summary>
/// api 启动检查数据库是否已连接上
/// </summary>
public void CheckDatabaseConnected()
{
var isConnection = false;
ExceptionsHelp.Instance.ExecuteT(() =>
{
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"The database is being connected......");
Console.WriteLine();
var sql = baseSql["base_factory"];
Context.Ado.GetDataTable(sql);
return "";
}, actionCatCh: () =>
{
isConnection = true;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine();
Console.WriteLine($"The database connection is Error!Please Check Connection 【{ConfigRead.GetInstance.GetAppsetConnection().BaseDBContext}】");
Console.WriteLine();
Console.ResetColor();
}, actionFinally: () =>
{
if (!isConnection) Console.WriteLine("The database connection is successful");
});
}
}
}