|
|
#region << 版 本 注 释 >>
|
|
|
|
|
|
/*--------------------------------------------------------------------
|
|
|
* 版权所有 (c) 2025 WenJY 保留所有权利。
|
|
|
* CLR版本:4.0.30319.42000
|
|
|
* 机器名称:Mr.Wen's MacBook Pro
|
|
|
* 命名空间:Sln.Iot.Repository.service.split
|
|
|
* 唯一标识:2D1DE17A-79B9-48D8-BB98-60E89BEC711A
|
|
|
*
|
|
|
* 创建者:WenJY
|
|
|
* 电子邮箱:
|
|
|
* 创建时间:2025-04-27 10:10:14
|
|
|
* 版本:V1.0.0
|
|
|
* 描述:
|
|
|
*
|
|
|
*--------------------------------------------------------------------
|
|
|
* 修改人:
|
|
|
* 时间:
|
|
|
* 修改说明:
|
|
|
*
|
|
|
* 版本:V1.0.0
|
|
|
*--------------------------------------------------------------------*/
|
|
|
|
|
|
#endregion << 版 本 注 释 >>
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Reflection;
|
|
|
using SqlSugar;
|
|
|
|
|
|
namespace Sln.Iot.Repository.service.split
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 自定义分表策略:根据传感器 ID 进行分表
|
|
|
/// </summary>
|
|
|
public class MonitorIdToSplitService:ISplitTableService
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 返回数据库中所有分表
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
/// <param name="EntityInfo"></param>
|
|
|
/// <param name="tableInfos"></param>
|
|
|
/// <returns></returns>
|
|
|
public List<SplitTableInfo> GetAllTables(ISqlSugarClient db, EntityInfo EntityInfo, List<DbTableInfo> tableInfos)
|
|
|
{
|
|
|
List<SplitTableInfo> result = new List<SplitTableInfo>();
|
|
|
foreach (var item in tableInfos)
|
|
|
{
|
|
|
if (item.Name.Contains("record_iotenv_instant")) //区分标识如果不用正则符复杂一些,防止找错表
|
|
|
{
|
|
|
SplitTableInfo data = new SplitTableInfo()
|
|
|
{
|
|
|
TableName = item.Name //要用item.name不要写错了
|
|
|
};
|
|
|
result.Add(data);
|
|
|
}
|
|
|
}
|
|
|
return result.OrderBy(it=>it.TableName).ToList();//打断点看一下有没有查出所有分表
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取分表字段的值
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
/// <param name="entityInfo"></param>
|
|
|
/// <param name="splitType"></param>
|
|
|
/// <param name="entityValue"></param>
|
|
|
/// <returns></returns>
|
|
|
public object GetFieldValue(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType, object entityValue)
|
|
|
{
|
|
|
var splitColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.GetCustomAttribute<SplitFieldAttribute>() != null);
|
|
|
var value = splitColumn.PropertyInfo.GetValue(entityValue, null);
|
|
|
return value;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 默认表名
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
/// <param name="EntityInfo"></param>
|
|
|
/// <returns></returns>
|
|
|
public string GetTableName(ISqlSugarClient db, EntityInfo entityInfo)
|
|
|
{
|
|
|
return entityInfo.DbTableName;
|
|
|
}
|
|
|
|
|
|
public string GetTableName(ISqlSugarClient db, EntityInfo entityInfo, SplitType type)
|
|
|
{
|
|
|
return entityInfo.DbTableName;//目前模式少不需要分类(自带的有 日、周、月、季、年等进行区分)
|
|
|
}
|
|
|
|
|
|
public string GetTableName(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType, object fieldValue)
|
|
|
{
|
|
|
return entityInfo.DbTableName + "_"+fieldValue; //根据值按首字母
|
|
|
}
|
|
|
}
|
|
|
} |