using Hh.Mes.Common.config; using Hh.Mes.Common.log; using Hh.Mes.Common.Redis; using Hh.Mes.POJO.Entity; using Hh.Mes.Service.Repository; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System; using System.Collections.Generic; using System.Data; using System.Text; namespace Hh.Mes.Service { /// <summary> /// 公共信息缓存 只负责读取数据 缓存 /// </summary> public class BaseInfoCacheService : RepositorySqlSugar<sys_user> { private Dictionary<string, string> baseSql { get; set; } private RedisBase cli { get; set; } public BaseInfoCacheService() { baseSql = ConfigRead.GetInstance.GetBaseInfoSql(); cli=new RedisBase(); } /// <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 json = JsonConvert.SerializeObject(ds.Tables[index], new DataTableConverter()); cli.Set(item.Key, json); 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 ""; var sql = baseSql[key]; if (isRemove) return getDataBySql(sql, key); return cli.ExistsKey(key) ? cli.redisClient.Get(key) : getDataBySql(sql, key); } /// <summary> /// 读取数据库数据,并存入缓存 /// </summary> private string getDataBySql(string sql, string key) { Random rd = new Random(); var expirestime = rd.Next(cli.dayTime, cli.dayTimeTwo); var dt = Context.Ado.GetDataTableAsync(sql).Result; var jsonStr = JsonConvert.SerializeObject(dt, new DataTableConverter()); cli.Set(key, jsonStr, expirestime); return jsonStr; } /// <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(); } public DataTable GetMaterialList() { //var sqlMater = baseSql["base_material"]; //var dt = Context.Ado.GetDataTable(sqlMater); return null; } } }