跳到主要内容
版本:Next

后端

1. API接口文档说明

CMS2.0基座配备了众多标准化且高效的核心业务模块,并提供了相应的外部接口。借助这些模块,插件能够迅速完成业务开发。以下是为二次开发的外部插件所提供的基座业务模块API接口清单。如需进一步扩展接口,请与产品研发团队联系。

2. 权限模块

提供与用户身份、用户鉴权、用户授权相关信息的API接口。

2.1 获取用户信息

依赖包:CMS.Unit.Authority

命名空间:CMS.Unit.Authority.Services.Abstractions

方法名:IUserService.GetUser

说明:根据用户id获取用户信息

参数

类型名字说明
Guidid用户id

返回值

返回对象类型:UserGetDTO,属性信息如下:

类型名字说明
GuidId用户id
stringUserName用户名
stringName姓名
List<Guid>RoleIds关联的角色id集合,未关联时为空集合
stringRolesDisplay关联的角色全名称,未关联时为空字符串
GuidOrganizationId关联的组织架构id,未关联时为空id:
00000000-0000-0000-0000-000000000000
stringOrignizationDiaplsyName关联的组织架构名称id全名称,为关联时为空字符串

例子

//1.从依赖注入容器中获取IUserService
IUserService userService = ...;

//2.获取用户id
Guid id = ...;

//3.根据用户id获取用户信息
var user = await userService.GetUser(id);

2.2 获取用户的角色信息

依赖包:CMS.Unit.Authority

命名空间:CMS.Unit.Authority.Services.Abstractions

方法名:IRoleService.GetRole

说明:根据角色id获取角色信息

参数

类型名字说明
Guidid角色id

返回值

返回对象类型:RoleGetDTO

类型名字说明
GuidId角色id
stringName角色名称
stringRemark备注

例子

//1.从依赖注入容器中获取IRoleService
IRoleService roleService = ...;

//2.获取角色id
Guid id = ...;

//3.根据角色id获取角色信息
var user = await roleService.GetRole(id);

3. 变量模块

提供与变量相关操作的API接口

3.1 订阅变量变化事件,监听变量的变化

  • 依赖包:CMS.Unit.RuntimeValue.Abstractions

  • 命名空间:CMS.Unit.RuntimeValue.Abstractions

  • 事件名:IVariableDataCache.TagChanged

  • 说明:通过订阅 IVariableDataCache.TagChanged 事件,您可以实时监控变量的变化。此事件会传递所有变量至事件处理函数,因此,业务层需在函数中筛选关注的变量。

    注意事项:

    (1)性能影响: 发布事件时,事件的发送者将阻塞流程。因此,强烈建议避免在事件处理函数中执行 I/O 操作、HTTP 接口访问或其他耗时操作,以防止对系统性能产生严重影响,导致整个系统响应延迟。

    (2)高频率触发: 由于事件订阅了全量变量,触发频率可能非常高。

    (3)异步处理: 鉴于事件触发频率很高,建议业务层在筛选关注变量后,使用 Task 启动新线程处理业务逻辑,以避免阻塞核心的变量监听功能,实现业务层与平台基座的解耦。

    (4)并发管理: 如果业务层并发量大,必须优化代码设计和实施,以减少在高并发情况下的系统资源消耗,防止系统性能问题。

    (5)代码安全: 安装并使用 CMS.CodeAnalysis 分析器来分析 IVariableDataCache.TagChanged 的使用情况。该工具能在使用不当时提供编译错误,帮助您提高代码质量。

事件处理函数输入参数

类型名字说明
objectsender事件发送者
TagChangedEventArgse:
TraceId
Changeds
事件参数:
追踪id
变量列表

返回值

N/A

例子

//1.从依赖注入容器中获取IVariableDataCache
IVariableDataCache cache=...;

cache.TagChanged+=(sender,e)=>
{
//2.找出业务相关的变化变量
var tags _=e.Changeds.Where(a=>......);

//3.开启新线程处理业务,完成基座与插件解耦
_ = Task.Run(() =>
{

});
};

3.2 使用变量通道,监听变量的变化

  • 依赖包:CMS.Unit.RuntimeValue.Abstractions

  • 命名空间:CMS.Unit.RuntimeValue.Abstractions

  • 方法名:IVariableDataCache.CreateChannel

  • 说明:业务层可注册一个通道以监控变量变化。当变量发生变化时,通道的监听器处理函数将接收到所有变量,允许业务层筛选关注的变量进行处理。

    (1)解耦和系统稳定性: 通过实现变量通道,基座的变量变化消息发布和业务层的变量变化消息订阅得到了有效解耦,从而避免了系统变量监听的阻塞引起系统整体响应延迟。

    (2)优化并发处理: 如果业务并发量较高,需优化业务处理逻辑,以防止变量变化消息在通道中造成阻塞。

    (3)高频率触发管理: 由于通道会监听所有变量,导致处理方法的触发频率较高。业务层应根据实际业务节奏采取合理策略,避免消息在通道中持续积压,确保流畅的消息处理。

创建通道参数

类型名字说明
stringname通道的名字,命名时请加上与插件相关的防止和其他插件的通道名称重复
;可以通过通道名称在日志中查询出订阅处理函数的耗时;
IVariableChannelListenerchannelListener通道监听器,业务处理入口
ILogger<VariableChannel>logger日志记录器
boolwaitListener是否等待业务处理结束才开始下一个业务(是否有序)
TimeSpan?timeout监听者业务处理函数超时时间,作用于监者听处理函数的入参取消令牌(CancellationToken)参数
boolcontinueCaptureContext请使用默认值
IReadOnlySet<string>?variableFilter过滤变量,如果是空就不过滤

返回值

VariableChannel

返回对象需要存在下来,在不使用的时候需要进行释放(Dispose())

例子

//1.定义自己的通道监听,继承基座提供的IVariableChannelListener(变量通道监听器)接口,
public class MyVariableChannelListener : IVariableChannelListener
{
/// <summary>
/// 变量变化处理方法
/// </summary>
/// <param name="args">变量参数</param>
/// <param name="token">取消令牌</param>
/// <returns></returns>
public async Task RunAsync(TagChangedEventArgs args, CancellationToken token)
{
//从全量变量中找出自己业务的变量信号
var variables = args.Changeds.Where(a => ...);

//链路追踪id
var tranceId = args.TraceId;

//开启新的线程处理业务,完成基座与插件解耦
_ = Task.Run(async() =>
{
await Task.CompletedTask;
});
}
}

//2.创建变量通道
//2.1 从依赖注入容器中获取IVariableDataCachev
IVariableDataCache cache=...;

//2.2 创建变量通道并保存下来,用于后续需要的地方释放通道
var variableChannel = cache.CreateChannel("channel-name", new MyVariableChannelListener(),waitListener:true,timeout:TimeSpan.FromSeconds(30),variableFilter:new HashSet<string> { "a1"});

//3. 在业务结束时需要释放通道,通道释放后如果还有变量变化的消息积压在通道中,消息会随着通道释放而销毁
variableChannel.Dispose();

3.3 变量读取

  • 依赖包:CMS.Extensions.Variable
  • 命名空间:CMS.Extensions.Variable
  • 方法名:IVariableTypeDeterminer.ReadVariableAsync
  • 说明:读取变量

参数

类型名字作用
IReadOnlyList<string>names需要读取的变量名
GuidtraceId链路追踪id
CancellationTokentoken取消令牌

返回值

返回值类型:ReadWriteResult<IReadOnlyDictionary<string, DataQuality?>>

类型名字作用
ReadWriteCodeResultCode结果状态码枚举
IReadOnlyDictionary<string, IVariableValue?>Content读取结果内容,字典key时变量名,字典值时变量的值

ReadWriteCodeResult枚举如下

/// <summary>
/// 读写结果状态码
/// </summary>
public enum ReadWriteCodeResult : sbyte
{
/// <summary>
/// 没有初始化
/// </summary>
NotInited = -1,

/// <summary>
/// 成功
/// </summary>
Success = 0,

/// <summary>
/// 部分成功
/// </summary>
PartSuccess = 1,

/// <summary>
/// 失败
/// </summary>
Fail = 2,

/// <summary>
/// 其他
/// </summary>
Other = 4
}

IVariableValue描述

类型名字作用
object?Value读到的数据,已经转成 CLR 类型,如果有
VariableInfo?Tag读到的变量信息,如果有
DataQuality?DataQuality读到的数据质量,如果有
DateTime?UpdateTime读到的最后更新时间,如果有
ReadWriteModeMode读到的变量读写方式:

例子

//1. 从依赖注入容器中获取IVariableTypeDeterminer
IVariableTypeDeterminer determiner = ...;

//2. 读取变量
var result = await determiner.ReadVariableAsync(new string[]{"a1","a2","a3"});

//3. 返回的结果信息准确信校验
... ...

//4.从结果中获取变量的值,例如a1
var a1Value = result.Content["a1"]?.Value;

3.4 变量写入

  • 依赖包:CMS.Extensions.Variable
  • 命名空间:CMS.Extensions.Variable
  • 方法名:IVariableTypeDeterminer.WriteVariableAsync
  • 说明:给变量写入值

参数

类型名字作用
IReadOnlyDictionary<string, object?>variables要设置的变量值集合
CancellationTokentoken取消令牌
IEnumerable<string>?notifyVariables需要通知的变量,空则按变量类型自动判断是否需要通知
Guid?traceId链路追踪 Id

返回值

DataQuality 值与描述

描述处理建议
-1未初始化
0成功
1变量名不存在只下发存在的变量名
2变量格式错误
3设备断开排查一下设备连接状态
4其他

ReadWriteCodeResult 值与描述

描述处理建议
-1没有初始化
0全部成功
1部分成功
2全部失败
4其他

例子

//1. 从依赖注入容器中获取IVariableTypeDeterminer
IVariableTypeDeterminer determiner=...;

//2. 批量变量设置值
var result=await determiner.WriteVariableAsync(new Dictionary<string, object?>
{
["a1"] = 123,
["a2"] = "123",
["a3"] = DateTime.Now,
["a4"] = true,
["a5"] = 1.1234,
});

//3. 对写入的结果相关处理
......

4. 数据管理模块

4.1 数据归档功能—新增归档表

  • 依赖包:CMS.Unit.DataConfig.Abstractions

  • 命名空间:CMS.Unit.DataConfig.Abstractions

  • 方法名:IFilingTableService.AddFilingTableAsync

  • 说明:给数据模块的数据表菜单树新增一个归档表 节点;

    如图:

参数

类型名字作用
GuidfolderId文件夹 id
stringname显示的表名字
intsort表排序 id
Action<FilingTable>?settings归档表字段设置,可以无

返回值

FilingTable

类型名字作用
GuidId主键
GuidFolderId文件夹 id
stringName命名
intSort排序
boolEnable启用/禁用
DateTimeCreateDateTime创建时间
SelectModeOperationMode操作按钮选择模式
ICollection<OperationType>?OperationTypes操作按钮
SelectModeFunctionMode功能按钮选择模式
ICollection<FilingTableFunctionType>?FunctionTypes功能按钮
ICollection<string>?ExtendedHeaders扩展的 headers,默认[记录时间]
boolCacheConfig_EnableCache实时缓存
intCacheConfig_QuantityLimit缓存数量上限
intCacheConfig_TimeSpanLimit时间跨度上限
TimeUnitCacheConfig_TimeSpanLimitUnit时间跨度上限单位
stringCacheConfig_ClearCache缓存清除
boolStorageConfig_EnableClear是否启用数据清除
intStorageConfig_RetentionValue保留范围(值)
TimeUnitStorageConfig_RetentionUnit保留范围(单位)
boolStorageConfig_BackupBeforeClear清除前备份
stringStorageConfig_BackupPath备份路径

SelectMode

类型名字作用
AllAll包含所有
NoneNone排除所有
IncludeInclude包含
ExcludeExclude排除

例子

//1. 从依赖注入容器中获取 IFilingTableService
IFilingTableService fillingTableService=...;

//2. 生成或者获取文件夹id
Guid folderGuid=...;

//3. 添加归档表id
var result=await fillingTableService.AddFilingTableAsync(folderGuid,"汽车组BU",1,s=>{...});

4.2 数据归档功能—设置归档表字段配置

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IFilingTableService.SetFilingTableFieldsAsync
  • 说明:设置归档表的字段配置;

​ 如图:

参数

类型名字作用
GuidfilingTableId归档表 id
List<FilingTableField>filingTableFields归档表字段配置

FilingTableField

类型名字作用
string?Id主键
GuidFilingTableId归档表 id
stringFieldName字段名称
FieldTypeFieldType字段类型
stringAssociatedVariable关联变量
stringFormula计算公式
intSort排序

FieldType

类型名字作用
FieldTypeUnknowUnknow
FieldType数值数值
FieldType文本文本
FieldType日期日期

返回值

N/A

例子

//1.从依赖注入容器中获取 IFilingTableService
IFilingTableService fillingTableService=...;

//2.获取归档表id
Guid fillingTableId=...;

//3.构造字段配置列表
List<FilingTableField> fields=...;

//4.给配置表设置字段配置
var result=await fillingTableService.SetFilingTableFieldsAsync(fillingTableId,fields);

4.3 数据归档功能—通过 id 获取归档表

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IFilingTableService.GetFilingTableAsync
  • 说明:通过 id 获取归档表在数据表菜单树中的节点信息;

参数

类型名字作用
GuidfilingTableId归档表 id

返回值

FilingTable

例子

//1.从依赖注入容器中获取IFilingTableService
IFilingTableService fillingTableService=...;

//2.获取聚合表id
Guid fillingTableId=...;

//3.根据id获取聚合表信息
var filingTable=await fillingTableService.GetFilingTableAsync(fillingTableId);

4.4 数据归档功能—通过 id 获取归档表字段配置

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IFilingTableService.GetFilingTableAsync
  • 说明:根据归档表节点id获取字段配置信息列表

参数

类型名字作用
GuidfilingTableId归档表 id
boolqueryHeader是否查询header信息:false-不查询 , true-查询

返回值

FilingTableField

例子

//1.从依赖注入容器中获取IFilingTableService
IFilingTableService fillingTableService=...;

//2.获取聚合表id
Guid fillingTableId=...;

//3.根据id获取聚合表字段配置信息
var filingTableFields=await fillingTableService.GetFilingTableFieldsAsync(fillingTableId,false);

4.5 数据归档功能—删除归档表

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IFilingTableService.DeleteFilingTableAsync
  • 说明:根据id删除聚合表节点;

参数

类型名字作用
GuidfilingTableId归档表id

返回值

删除的表及引用的 Id 列表;

例子

//1.从依赖注入容器中获取IFilingTableService
IFilingTableService fillingTableService=...;

//2.获取聚合表id
Guid fillingTableId=...;

//3.根据id删除聚合表配置节点
await fillingTableService.DeleteFilingTableAsync(fillingTableId);

4.6 数据归档功能—往实时归档表写入数据

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IFilingTableService.DataInsertAsync
  • 说明:往实时归档表写入数据

参数

类型名字作用
GuidtableId归档表id
List<string>columns列名列表
List<List<object>>dataList数据列表,第一层列表表示数据值的行列表;第二层列表表示每行中的值列表,其值的索引要和columns中索引一致

返回值

批量的往实时归档表中写入数据

例子

//1.从依赖注入容器中获取IFilingTableService
IFilingTableService fillingTableService=...;

//2.获取聚合表id、构造列名列表、构造数据列表 参数
Guid fillingTableId=...;
List<string> columns = ...;
List<List<object>> dataList = ...;

//3.根据id删除聚合表配置节点
await fillingTableService.DataInsertAsync(fillingTableId,columns,dataList);

4.7 数据归档功能—对实时归档表数据进行更新

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IFilingTableService.DataUpdateAsync
  • 说明:对实时归档表数据进行更新

参数

类型名字作用
GuidtableId归档表id
List<(string FieldName, string Operator, object Value)>conditions条件项属性(多个项时会进行与操作):FieldName-字段名称,Operator-运算符('>' '&lt;' '=' '!='),Value-值; 参数类型是元组类型
IDictionary<string, object?>dataList待更新的数据值列表

返回值

批量的往实时归档表中写入数据

例子

//1.从依赖注入容器中获取IFilingTableService
IFilingTableService fillingTableService=...;

//2.获取聚合表id、构造列名列表、构造数据列表 参数
Guid fillingTableId=...;
List<(string FieldName, string Operator, object Value) conditions = ...;
IDictionary<string, object?> dataList = ...;

//3.根据id删除聚合表配置节点
await fillingTableService.DataUpdateAsync(fillingTableId,conditions,dataList);

4.8 数据归档功能—通过id清除归档表数据

  • 依赖包:CMS.Unit.DataConfig.Abstractions

  • 命名空间:CMS.Unit.DataConfig.Abstractions

  • 方法名:IFilingTableService.CleanupAsync

  • 说明:通过id清除归档表数据

    参数

类型名字作用
GuidfilingTableId归档表 id

返回值

N/A

例子

//1.从依赖注入容器中获取IFilingTableService
IFilingTableService fillingTableService=...;

//2.获取聚合表id
Guid fillingTableId=...;

//3.通过id清除归档表数据
await fillingTableService.CleanupAsync(fillingTableId);

4.9 数据聚合功能—新增聚合表

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IAggregateTableService.AddAggregateTableAsync
  • 说明:给数据模块的数据表菜单树新增一个聚合表 节点;

参数

类型名字作用
GuidfolderId文件夹 id
GuidrelativeTableId关联表 id
NodeTyperelativeType关联类型
stringname命名
intsort排序
Action<AggregateTable>?settings聚合表字段设置,可以无

返回值

AggregateTable

例子

//1.从依赖注入容器中获取IAggregateTableService
IAggregateTableService aggregateTableService=...;

//2.获取相关参数
Guid folderId=...;
Guid relativeTableId=...;
NodeType relativeType=...;
string name=...;
int sort=...;

//3.创建聚合表
var aggregateTable=await aggregateTableService.AddAggregateTableAsync(folderId,relativeTableId,relativeType,name,sort,table=>{...});

4.10 数据聚合功能—设置聚合表字段配置

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IAggregateTableService.SetAggregateTableFieldsAsync
  • 说明:设置聚合表的字段配置;

参数

类型名字作用
GuidaggregateTableId聚合表 id
List<AggregateTableField>aggregateTableFields聚合表字段配置

AggregateTableField

类型名字作用
string?Id主键
GuidAggregateTableId聚合表 id
stringFieldName字段名称
string?RelativeFieldId关联字段 Id
stringFormula计算公式
GroupTypeGroupType分组方式
HandleTypeHandleType处理方式
FieldTypeFieldType字段类型
intSort排序

返回值

N/A

例子

//1.从依赖注入容器中获取 IAggregateTableService
IAggregateTableService aggregateTableService=...;

//2.获取构造参数信息
Guid aggregateTableId=...;
List<AggregateTableField> aggregateTableFields=...;

//3.设置聚合表的字段配置
await aggregateTableService.SetAggregateTableFieldsAsync(aggregateTableId,aggregateTableFields);

4.11 数据聚合功能—通过 id 获取聚合表

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IAggregateTableService.GetAggregateTableAsync
  • 说明: 通过 id 获取聚合表在数据表菜单树中的节点信息;

参数

类型名字作用
GuidfilingTableId聚合表 id

返回值

AggregateTable

类型名字作用
GuidId主键
GuidFolderId文件夹 id
GuidRelativeTableId关联表 id
NodeTypeRelativeType关联类型
stringName命名
intSort排序
boolEnable启用/禁用
DateTimeCreateDateTime创建时间
PreConditionTypePreConditionType满足条件:所有/任意
SelectModeOperationMode操作按钮选择模式
ICollection<OperationType>?OperationTypes操作按钮
SelectModeFunctionMode功能按钮选择模式
ICollection<FilingTableFunctionType>?FunctionTypes功能按钮
ICollection<string>?ExtendedHeaders扩展的 headers,默认[记录时间]
boolStorageConfig_EnableClear是否启用数据清除
intStorageConfig_RetentionValue保留范围(值)
TimeUnitStorageConfig_RetentionUnit保留范围(单位)
boolStorageConfig_BackupBeforeClear清除前备份
stringStorageConfig_BackupPath备份路径

例子

//1.从依赖注入容器中获取AggregateTableService
IAggregateTableService aggregateTableService=...;

//2.获取聚合表id
Guid aggregateTableId=...;

//3.通过 id 获取聚合表
var aggregateTable = await aggregateTableService.GetAggregateTableAsync(aggregateTableId);

4.12 数据聚合功能—通过id获取聚合表字段配置

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IAggregateTableService.GetAggregateTableFieldsAsync
  • 说明:根据聚合表节点id获取字段配置信息列表

参数

类型名字作用
GuidaggregateTableId聚合表 id
boolqueryHeader是否查询 header

返回值

AggregateTableField

例子

//1.从依赖注入容器中获取AggregateTableService
IAggregateTableService aggregateTableService=...;

//2.获取聚合表id
Guid aggregateTableId=...;

//3.通过id获取聚合表字段配置
var result=await aggregateTableService.GetAggregateTableFieldsAsync(aggregateTableId,true);

4.13 数据聚合功能—删除聚合表

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IAggregateTableService.DeleteAggregateTableAsync
  • 说明:根据id删除聚合表节点, 相关联的表都会删除

参数

类型名字作用
GuidaggregateTableId聚合表 id

返回值

删除的表及引用的 Id 列表

例子

//1.从依赖注入容器中获取AggregateTableService
IAggregateTableService aggregateTableService=...;

//2.获取聚合表id
Guid aggregateTableId=...;

//3.删除聚合表
await aggregateTableService.DeleteAggregateTableAsync(aggregateTableId);

4.14 数据聚合功能—往实时聚合表写入数据

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IAggregateTableService.DataInsertAsync
  • 说明:往实时归档表写入数据

参数

类型名字作用
GuidtableId归档表id
List<string>columns列名列表
List<List<object>>dataList数据列表,第一层列表表示数据值的行列表;第二层列表表示每行中的值列表,其值的索引要和columns中索引一致

返回值

批量的往实时归档表中写入数据

例子

//1.从依赖注入容器中获取IFilingTableService
IAggregateTableService aggregateTableService=...;

//2.获取聚合表id、构造列名列表、构造数据列表 参数
Guid fillingTableId=...;
List<string> columns = ...;
List<List<object>> dataList = ...;

//3.根据id删除聚合表配置节点
await aggregateTableService.DataInsertAsync(fillingTableId,columns,dataList);

4.15 数据聚合功能—对实时聚合表数据进行更新

  • 依赖包:CMS.Unit.DataConfig.Abstractions
  • 命名空间:CMS.Unit.DataConfig.Abstractions
  • 方法名:IAggregateTableService.DataUpdateAsync
  • 说明:对实时归档表数据进行更新

参数

类型名字作用
GuidtableId归档表id
List<(string FieldName, string Operator, object Value)>conditions条件项属性(多个项时会进行与操作):FieldName-字段名称,Operator-运算符('>' '<' '=' '!='),Value-值; 参数类型是元组类型
IDictionary<string, object?>dataList待更新的数据值列表

返回值

批量的往实时归档表中写入数据

例子

//1.从依赖注入容器中获取IFilingTableService
IFilingTableService fillingTableService=...;

//2.获取聚合表id、构造列名列表、构造数据列表 参数
Guid fillingTableId=...;
List<(string FieldName, string Operator, object Value) conditions = ...;
IDictionary<string, object?> dataList = ...;

//3.根据id删除聚合表配置节点
await fillingTableService.DataUpdateAsync(fillingTableId,conditions,dataList);

4.16 数据聚合功能—通过id清除聚合表数据

  • 依赖包:CMS.Unit.DataConfig.Abstractions

  • 命名空间:CMS.Unit.DataConfig.Abstractions

  • 方法名:IAggregateTableService.CleanupAsync

  • 说明:通过id清除聚合表数据

    参数

类型名字作用
GuidaggregateTableId聚合表 id

返回值

N/A

例子

//1.从依赖注入容器中获取AggregateTableService
IAggregateTableService aggregateTableService=...;

//2.获取聚合表id
Guid aggregateTableId=...;

//3.通过id清除聚合表数据
await aggregateTableService.CleanupAsync(aggregateTableId);

5. 项目服务管理模块

5.1 添加项目服务

  • 依赖包:CMS.Project
  • 命名空间:CMS.Project.Abstractions
  • 抽象类名:IProjectService
  • 说明:基座提供了项目服务管理模块,允许插件通过继承提供的 IProjectService 抽象类,将其服务集成至项目服务管理中,以便进行统一管理。同时,基座还提供了一个基础抽象类 BaseProjectService。为了实现高效的服务管理,建议插件继承此基础抽象类来开发自己的项目服务。

如图:

属性及方法

类型名字作用
stringKey工程服务 key
intPriority工程服务优先级,值越大启动优先级越高
boolAuthRequired是否需要授权
boolAllowTrial是否允许试用
boolAllowBaseAuth是否包含在基础授权
ProjectServiceStateState服务状态
stringDescription服务描述
方法StartAsync服务启动处理方法
方法StopAsync服务停止处理方法

例子

public class XXProjectService:BaseProjectService
{
public override string Key => "ExternalPlugin.LongkongDemo";
public override string Description => "隆控Demo服务";
public override async Task StartAsync(IServiceProvider serviceProvider)
{
//开启服务....
await base.StartAsync(serviceProvider);
}

public override async Task StopAsync(IServiceProvider serviceProvider)
{
//结束服务....
await base.StopAsync(serviceProvider);
}
}

6. 报警模块

6.1 报警监听事件

  • 依赖包:CMS.Unit.Alarm.Abstractions
  • 命名空间:CMS.Unit.Alarm.Abstractions.Event
  • 事件名:VariableAlarmEventHandler.OnVariableAlarmEvent
  • 说明:插件通过订阅报警监听事件,可以监测报警的发生并执行相关业务的处理;

事件处理函数输入参数

类型名字作用
VariableAlarmEvent@event事件参数

VariableAlarmEvent

类型名字作用
stringAlarmPointID报警点ID
AlarmTriggerStateTriggerState触发状态枚举
AlarmStateCacheItemAlarmStateCache报警的信息数据,该字段在2.11.0版本才支持

注意:事件参数在基座2.11.0版本之后才支持AlarmStateCache属性

AlarmTriggerState

/// <summary>
/// 报警触发类型
/// </summary>
public enum AlarmTriggerState
{
/// <summary>
/// 新增报警
/// </summary>
Inactive = 0,

/// <summary>
/// 激活的报警
/// </summary>
Active = 1,
}

返回值

N/A

例子

//1.从依赖注入容器中获取VariableAlarmEventHandler
VariableAlarmEventHandler variableAlarmEventHandler=...;

//2.注册报警事件
variableAlarmEventHandler.OnVariableAlarmEvent += (e)=>
{
//3.开启新线程处理业务,完成基座与插件解耦
_ = Task.Run(() =>
{

});
};

6.2 根据报警点Id获取报警信息

待补充

如果有使用需求,请与盛原成产研开发人员沟通;

7. 日志管理模块

基座提供的日志管理 模块如下

7. 1 添加登录日志

  • 依赖包:MediatR
  • 命名空间:MediatR
  • 方法名:ISender.Send
  • 说明:调用接口,往登录日志模块添加登录日志

参数

类型名字作用
LoginLogAddRequestrequest添加登录日志请求入参参数

LoginLogAddRequest

类型名字作用
LoginLogAddDTODTO添加登录日志的数据传输对象

LoginLogAddDTO

类型名字作用
stringUserName用户名称
LogTypeType日志类型
DateTimeRecordTime记录事件

LogType为枚举类型,定义如下

/// <summary>
/// 日志类型
/// </summary>
public enum LogType : byte
{
/// <summary>
/// 登录
/// </summary>
Login = 0,

/// <summary>
/// 退出登录
/// </summary>
Logout = 1,

/// <summary>
/// 写变量
/// </summary>
WriteTag = 2,

/// <summary>
/// 读变量
/// </summary>
ReadTag = 3,

/// <summary>
/// 添加
/// </summary>
Add = 4,

/// <summary>
/// 修改
/// </summary>
Modify = 5,

/// <summary>
/// 删除
/// </summary>
Delete = 6,

/// <summary>
/// 重置密码
/// </summary>
ResetPassword = 7,

/// <summary>
/// 授权
/// </summary>
AuthSetting = 8,
}

返回值

N/A

例子

//基座日志模块使用了MediatR中介者模式库,如需了解请看https://github.com/jbogard/MediatR
//1.从依赖注入容器中获取IMediator
IMediator mediator = ... ;

//2.构造入参
LoginLogAddDTO dto = ... ;

//3.发送日志
await mediator.Send(new LoginLogAddRequest());

7.2 添加设备日志

  • 依赖包:MediatR
  • 命名空间:MediatR
  • 方法名:ISender.Send
  • 说明:调用接口,往登录设备日志模块添加设备日志

参数

类型名字作用
DeviceLogAddRequestrequest添加日志的请求入参参数

DeviceLogAddRequest

类型名字作用
DeviceLogAddDTODTO添加登录日志的数据传输对象

DeviceLogAddDTO

类型名字作用
stringDevice设备
stringGroup设备组
stringTagName变量名
stringTagDescription变量描述
Dictionary<string, string>DynamicParams动态参数
stringUserName用户名称
LogTypeType日志类型
DateTimeRecordTime记录时间

返回值

N/A

例子

//基座日志模块使用了MediatR中介者模式库,如需了解请看https://github.com/jbogard/MediatR
//1.从依赖注入容器中获取IMediator
IMediator mediator = ... ;

//2.构造入参
DeviceLogAddDTO dto = ... ;

//3.发送日志
await mediator.Send(new DeviceLogAddRequest());

7.3 添加模块日志

  • 依赖包:MediatR
  • 命名空间:MediatR
  • 方法名:ISender.Send
  • 说明:调用接口,往登录模块日志模块添加模块日志

参数

类型名字作用
ModuleLogAddRequestrequest添加模块日志的请求入参参数

ModuleLogAddRequest

类型名字作用
ModuleLogAddDTODTO添加日志的数据传输对象

ModuleLogAddDTO

类型名字作用
stringModuleKey模块 id
stringTarget目标
List<ModuleLogDynamicParam>DynamicParamList动态参数

ModuleLogDynamicParam

类型名字作用
stringKey
string[]KeyArgs键参数
string[]OldValues旧值列表
string[]NewValues新值列表

返回值

N/A

例子


//1.从依赖注入容器中获取IMediator
IMediator mediator = ... ;

//2.构造入参
ModuleLogAddDTO dto = ... ;

//3.发送日志
await mediator.Send(new ModuleLogAddRequest(dto));