dengjunjie
2025-02-24 733e63cb362f17aea4a1020654fa348a0d0c1f06
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Core/DB/BaseDBConfig.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Const;
using WIDESEA_Core.Helper;
using WIDESEA_Core.Tenants;
namespace WIDESEA_Core.DB
{
    public class BaseDBConfig
    {
        /* ä¹‹å‰çš„单库操作已经删除,如果想要之前的代码,可以查看我的GitHub的历史记录
         * ç›®å‰æ˜¯å¤šåº“操作,默认加载的是appsettings.json设置为true的第一个db连接。
         */
        public static List<MutiDBOperate> MutiConnectionString => MutiInitConn();
        private static string DifDBConnOfSecurity(params string[] conn)
        {
            foreach (var item in conn)
            {
                try
                {
                    if (File.Exists(item))
                    {
                        return File.ReadAllText(item).Trim();
                    }
                }
                catch (System.Exception)
                {
                }
            }
            return conn[conn.Length - 1];
        }
        public static List<MutiDBOperate> MutiInitConn()
        {
            SqlSugarClient sqlSugarClient = new SqlSugarClient(new ConnectionConfig
            {
                ConfigId = MainDb.CurrentDbConnId,
                ConnectionString = AppSettings.app(MainDb.ConnectionString).DecryptDES(AppSecret.DB),
                IsAutoCloseConnection = true,
                DbType = MainDb.DbType,
                AopEvents = new AopEvents
                {
                    OnError = x =>
                    {
                        Console.WriteLine(x.Sql);
                    }
                }
            });
            List<ExpandoObject> list = sqlSugarClient.Queryable(MainDb.TenantTableName, "x").Where(MainDb.TenantStatus, "=", TenantStatus.Enable).Select(TenantUtil.GetTenantSelectModels()).ToList();
            List<MutiDBOperate> listdatabaseSlaveDB = new List<MutiDBOperate>();
            MutiDBOperate mainDb = new MutiDBOperate()
            {
                Connection = AppSettings.app(MainDb.ConnectionString).DecryptDES(AppSecret.DB),
                ConnId = MainDb.CurrentDbConnId,
                DbType = DataBaseType.SqlServer
            };
            listdatabaseSlaveDB.Add(mainDb);
            for (int i = 0; i < list.Count; i++)
            {
                dynamic data = list[i];
                MutiDBOperate mutiDBOperate = new MutiDBOperate()
                {
                    Connection = data.ConnectionString,
                    ConnId = data.TenantId + "",
                    DbType = (DataBaseType)data.DbType,
                };
                mutiDBOperate.Connection = mutiDBOperate.Connection.DecryptDES(AppSecret.DB);
                listdatabaseSlaveDB.Add(mutiDBOperate);
            }
            return listdatabaseSlaveDB;
        }
    }
    public enum DataBaseType
    {
        MySql = 0,
        SqlServer = 1,
        Sqlite = 2,
        Oracle = 3,
        PostgreSQL = 4,
        Dm = 5,
        Kdbndp = 6,
    }
    public class MutiDBOperate
    {
        /// <summary>
        /// è¿žæŽ¥å¯ç”¨å¼€å…³
        /// </summary>
        public bool Enabled { get; set; }
        /// <summary>
        /// è¿žæŽ¥ID
        /// </summary>
        public string ConnId { get; set; }
        /// <summary>
        /// ä»Žåº“执行级别,越大越先执行
        /// </summary>
        public int HitRate { get; set; }
        /// <summary>
        /// è¿žæŽ¥å­—符串
        /// </summary>
        public string Connection { get; set; }
        /// <summary>
        /// æ•°æ®åº“类型
        /// </summary>
        public DataBaseType DbType { get; set; }
    }
}