通用的类型定于与信息点定义
集团层面新增或编辑的类型与信息点数据
平台级字典与集团级数据的并集
从集团级字典订阅类型与信息点后形成方案,是集团级字典的子集 集团可以配置任意个集团方案
项目层面新增或编辑的信息点数据
项目所继承的集团方案包含的数据与项目级数据的并集 (继承:当集团方案变化时项目级字典也会同步发生变化)
应用在项目级字典中订阅类型与信息点
站在用户或数据字典使用方的角度来看数据字典有三层:平台级字典,集团级字典,项目级字典
类型相同或信息点相同时项目级字典优先级最高,集团级次之,平台级字典最低,优先级高的会覆盖优先级低的
使用数据字典时明确"使用的字典位于哪个层级"对需求的分析和理解会有很大帮助
集团级数据、集团方案、项目级数据是数据字典内部逻辑概念
应用和服务应该关注的是项目级字典和应用订阅内容
字段 | 说明 | 备注 |
---|---|---|
class | 类型 | |
funcid | 信息点 | |
classCode | 类型定义的code: class.code | |
className | 类型定义的name: class.name | |
infoCode | 信息点定义的code: funcid.code | |
infoName | 信息点定义的name: funcid.name | |
groupId | 集团ID | |
projectId | 项目ID | |
schemeId | 集团方案ID | |
类型 class
字段 | 数据类型 | 说明 |
---|---|---|
code | String | 全局唯一 |
name | String | 类型名称 |
aliasCode | String | 类型别名编码, 集团下唯一 |
aliasName | String | 类型别名名称 |
type | String | 类别:平台级common,集团级group,项目级project |
groupId | String | 集团id, type=group或type=project时该字段为集团id,否则为"0" |
projectId | String | 集团id, type=project时该字段为项目id,否则为"0" |
majorCode | String | 专业编码, 上级类型是系统or设备时该字段有值 |
systemCode | String | 系统编码,上级类型是设备时该字段有值,值为系统类型的code |
parentCode | String | 上级类型code |
信息点 funcid
字段 | 数据类型 | 说明 |
---|---|---|
code | String | 信息点编码,同类型下唯一 |
name | String | 信息点名称 |
classCode | String | 类型编码 |
type | String | 字典级别:平台级common,集团级group,项目级project |
category | String | 信息点分类:静态,脉冲,阶段,时序 |
groupId | String | 集团id, type=group或type=project时该字段为集团id,否则为"0" |
projectId | String | 集团id, type=project时该字段为项目id,否则为"0" |
firstTag | String | 一级标签 |
secondTag | String | 二级标签 |
priority | String | 优先级 |
inputMode | String | 输入方式 |
unit | String | 单位 |
dataType | String | 数据类型 |
isMultiple | Boolean | 是否复数 |
isRegion | Boolean | 是否区间 |
formater | String | 数据格式 |
dataSource | String / Object[] | 数据源取值范围/枚举值清单等,根据dataType有不同的内容 |
note | String | 备注 |
subFlag | String | 子分类标记:是否可以按此信息点进行子分类替换,同一类型下目前只支持一个子分类信息点 |
数据类型 | 类型名称 | 信息点分类 | 是否复数 | 是否区间 | 数据源 | 格式 |
---|---|---|---|---|---|---|
INTEGER | 整数 | 静态/脉冲/时序/阶段 | true/false | true/false | {$gt:10, $lt:50} | 无 |
DOUBLE | 浮点型 | 静态/脉冲/时序/阶段 | true/false | true/false | {$gte:10.1, $lt:50.9} | 无 |
BOOLEAN | 布尔值 | 静态/脉冲/时序/阶段 | true/false | false | 无 | |
STRING | 字符串 | 静态/脉冲/时序/阶段 | true/false | false | (字符串长度区间){$gt:10, $lt:50} | 无 |
DATETIME | 日期时间 | 静态/脉冲/时序/阶段 | true/false | true/false | {$gt:'0915', $lt:'1031'} | 'MMdd' |
ENUM | 单选枚举 | 静态/脉冲/时序/阶段 | true/false | false | [{code: 'GC', name: '国产'},{code: 'JK', name: '进口'}] | 无 |
MENUM | 多选枚举 | 静态/脉冲/时序/阶段 | true/false | false | [{code: 'GC', name: '国产'},{code: 'JK', name: '进口'}] | 无 |
ATTACHMENT | 附件 | 静态 | true/false | false | ||
OBJECT | 对象 | 静态 | true/false | false | 对象id |
说明
把原来的data_type拆解成多个属性,减少了data_type种类数量
使用新的数据类型时,使用新的数据类型时,创建或编辑信息点需要明确指出数据类型、动静分类、是否复数、是否区间、长度(可选)、取值区间(可选)、格式(可选)
Tree、Topology、Route、Function四种类型不再支持(有需求再加回来)
动静分类(静态 STATIC、脉冲 PULSE、时序 SEQUENTIAL、阶段 GRADATION)应该是信息点的一个分类,不是数据类型的属性,放在这里是为了更直观更容易理解
根据动静分类区分动态量或静态量,静态量的值存储的是具体的数据,动态量的值存储的是表号-功能号,动态量包括脉冲量、时序量和阶段量
根据是否区间来判断存储的值是具体值还是区间, 比如INTEGER非区间的值12, 区间值[8, 15],为了区分开闭区间,这里实际存储为{$gt: 12, $lte: 15}, 其中$gt大于,$lt小于,$gte大于等于,$lte小于等于
根据是否复数区分存储的值是单个值还是多个值,单个值存储形式为xxx,多个值存储形式为[xxx, yyy],如果同时是复数和区间,存储的是多个区间
取值区间可以约束值的取值范围,可以通过取值区间做一次校验,如果是区间值,区间也应该是在取值区间的内部
统一用DATETIME表示日期和时间,通过格式设定具体存储的内容,格式由数据字典进行维护,物理世界存储的数据严格符合格式
格式是数据存储的数据格式或文件格式,对于日期时间附件对象等可进行校验
单选枚举Enum单数存储为GC, 复数存储为[GC, JK]
多选枚举MEnum单数存储为[GC, JK], 复数存储为[[GC], [GC,JK]], 多选枚举单数和单选枚举复数的存储形式一样应该不会出现问题,因为实际使用时是和类型(Enum,Menum)一起使用,
请求地址
POST: /major/query
请求参数
{
"criteria": {
"code": "AC"
}
}
返回内容
{
"result": "success",
"count": 1,
"data": [
{
"code": "AC",
"name": "空调专业"
}
]
}
请求地址
POST: /class/query
请求参数
{
"criteria": {
"majorCode": "AC"
}
}
请求参数说明
字段 | 说明 | ||
---|---|---|---|
criteria | |||
code | 类型编码 | ||
type | 分类:平台级common,集团级group,项目级project | ||
groupId | 集团id, type=group时必须传入该参数 | ||
projectId | 项目id, type=project时必须传入该参数 | ||
parentCode | 上级类型编码 | ||
majorCode | 专业编码,查询系统or设备时可以传入该字段 | ||
systemCode | 系统类型编码, 查询设备时可以传入该字段 | ||
返回内容
{
"result": "success",
"count": 2,
"data": class[] // 类型列表
}
请求地址
POST: /funcid/query
请求参数
{
"criteria": {
"type": ["group"],
"classCode": "ACCC"
}
}
参数说明
字段 | 非空 | 描述 | |
---|---|---|---|
criteria | Y | ||
classCode | Y | 根据类型编码查询 | |
type | N | 分类:平台级common,集团级group,项目级project | |
groupId | N | 集团id, type=group时必须传入该参数 | |
projectId | N | 项目id, type=project时必须传入该参数 | |
code | N | 信息点编码 | |
name | N | ||
firstTag | N | 一级标签 | |
secondTag | N | 二级标签 | |
inputMode | N |
返回内容
{
"result": "success",
"count": 159,
"data": funcid[] // 信息点列表
}
请求地址
GET: /class
请求参数
参数名 | 说明 | |
---|---|---|
groupId | 集团id | 可选 |
schemeId | 集团方案id | 可选 |
projectId | 项目id | 可选 |
appId | 应用id,传入appId时必须同时传入projectId | 可选 |
subFlag | true/false, 是否按分类信息点展示子分类 | 可选,默认false |
返回参数
{
"result": "success",
"data": [
{
"code": "project",
"name": "项目",
"aliasCode": "project",
"aliasName": "项目"
},
{
"code": "system",
"name": "系统",
"aliasCode": "system",
"aliasName": "系统",
"children": [
{
"code": "system-AC",
"name": "空调专业",
"aliasCode": "system-AC",
"aliasName": "空调专业",
"children": [
{
"code": "ACCH",
"name": "中央供热系统",
"aliasCode": "ACCH",
"aliasName": "中央供热系统",
"majorCode": "AC",
"parentCode": "system"
},
{
"code": "ACCC",
"name": "中央供冷系统",
"aliasCode": "ACCC",
"aliasName": "中央供冷系统",
"majorCode": "AC",
"parentCode": "system"
}
]
}
]
},
{
"code": "equipment",
"name": "设备",
"aliasCode": "equipment",
"aliasName": "设备",
"children": [
{
"code": "equipment-AC",
"name": "空调专业",
"aliasCode": "equipment-AC",
"aliasName": "空调专业",
"children": [
{
"code": "equipment-ACCH",
"name": "中央供热系统",
"aliasCode": "equipment-ACCH",
"aliasName": "中央供热系统",
"children": [
{
"code": "ACCHCL",
"name": "供热集水器",
"aliasCode": "ACCHCL",
"aliasName": "供热集水器",
"majorCode": "AC",
"systemCode": "ACCH",
"parentCode": "equipment"
}
]
},
{
"code": "equipment-ACCC",
"name": "中央供冷系统",
"aliasCode": "equipment-ACCC",
"aliasName": "中央供冷系统",
"children": [
{
"code": "ACCCWT",
"name": "供冷水箱",
"aliasCode": "ACCCWT",
"aliasName": "供冷水箱",
"majorCode": "AC",
"systemCode": "ACCC",
"parentCode": "equipment"
}
]
}
]
}
]
}
]
}
请求地址
GET: /funcid
请求参数
参数名 | 说明 | |
---|---|---|
classCode | 类型编码 | 必选 |
groupId | 集团id | 可选 |
schemeId | 集团方案id | 可选 |
projectId | 项目id | 可选 |
appId | 应用id,传入appId时必须同时传入projectId | 可选 |
请求参数说明
1.传入projectId是必须同时传入groupId
2.传入projectId时对应项目必须已配置集团方案,schemeId可以不传,否则报错"当前项目未配置集团方案"
3.传入appId时必须同时传入projectId
返回参数
{
"result": "success",
"count": 159,
"data": funcid[] // 信息点列表
}
请求地址
POST: /req/create
请求参数
{
"type": "group",
"groupId": "WD",
"projectId": "pj01",
"note": "变更原因",
"createUser": "f0bcc7a79f7043f9a16812b5f80580d2",
"classes": [{
"code": "类型编码",
"name": "类型名称",
"aliasCode": "",
"aliasName": "",
"parentCode": "",
"majorCode": "",
"systemCode": "",
"note": "",
"funcids": [{
"code": "",
"name": "",
"firstTag": "",
"secondTag": "",
"unit": "",
"dataType": "",
"priority": "",
"inputMode": "",
"dataSource": "",
"subFlag": false,
"note": ""
}]
}]
}
请求参数说明
字段 | 类型 | 说明 | ||
---|---|---|---|---|
type | String | group/project | ||
groupId | String | 集团id, 不可为空 | ||
projectId | String | 项目id, type=project时不可为空 | ||
note | String | 变更原因说明 | ||
createUser | String | 提交人id,不可为空 | ||
classes | Object[] | 不可为空且长度>0 | ||
code | String | 不可为空 | ||
name | String | |||
aliasCode | String | |||
aliasName | String | |||
parentCode | String | |||
majorCode | String | |||
systemCode | String | |||
note | String | |||
funcids | Object[] | |||
code | String | 不可为空 | ||
name | String | |||
firstTag | String | |||
secondTag | String | |||
unit | String | |||
dataType | String | |||
priority | String | |||
inputMode | String | |||
dataSource | String | |||
subFlag | Boolean | |||
note | String | |||
接口逻辑说明:
1.type=group为集团级变更, type=project为项目级变更
2.classes不可为空且长度必须>0
若classes.code存在(从集团级字典判断)则为修改:
name不可修改(传入也无效), 其他字段根据传入值进行修改, 不传则不修改
若classes.code不存在则为新增:
code、name、parentCode不可为空
parentCode=system时majorCode不可为空
parentCode=equipment时majorCode、systemCode不可为空
3.funcids存在且长度>0时,根据classes.code进行判断
若funcids.code存在则为修改:
所有字段都可以修改,根据传入值进行修改,不传则不修改
若funcids.code不存在则为新增:
code、name、unit、dataType、inputMode、dataSource、subFlag不可为空
返回参数
{
"result": "success",
"data": {
"id": 123
}
}
返回参数说明
字段 | 类型 | 说明 |
---|---|---|
id | Int | 变更ID |
请求地址
POST: /req/audit
请求参数
{
"id": 123,
"status": 2,
"applyUser": "f0bcc7a79f7043f9a16812b5f80580d2"
}
请求参数说明
字段 | 类型 | 说明 |
---|---|---|
id | Int | 变更ID,不可为空 |
status | Int | 状态: 1待审核,2审核通过, 3审核不通过 |
applyUser | String | 审核人id |
返回内容
{
"result": "success",
}
请求地址
POST: /req/query
请求参数
{
"criteria": {
"id": 123,
"type": "project",
"groupId": "WD",
"projectId": "pj01",
"status": 2,
"createTime": {
"$gt": "20200330120000"
},
"applyTime": {
"$gt": "20200330120000"
},
},
"withColumns": [ "classes", "funcids" ]
}
请求参数说明
字段 | 说明 | ||
---|---|---|---|
criteria | |||
id | 变更ID | ||
type | 分类:集团级group,项目级project | ||
groupId | 集团id, type=group时必须传入该参数 | ||
projectId | 项目id, type=project时必须传入该参数 | ||
status | 状态: 1待审核,2审核通过, 3审核不通过 | ||
createTime | 提交时间 | ||
creatUser | 申请提交人 | ||
applyTime | 审核时间 | ||
applyUser | 申请审核人 | ||
withColumns | |||
classes | 返回申请的类型数据 | ||
funcids | 返回申请的类型的信息点数据,必须同时指定返回classes |
返回内容
{
"result": "success",
"data": [{
"id": 123,
"type": "group",
"groupId": "WD",
"projectId": "pj01",
"note": "变更原因",
"userId": "提交用户",
"status": 2,
"createTime": 1585014171013,
"createUser": "f0bcc7a79f7043f9a16812b5f80580d2",
"applyTime": 1585014190419,
"applyUser": "f0bcc7a79f7043f9a16812b5f80580d2",
"classes": [{
"code": "类型编码",
"name": "类型名称",
"optType": "create/update",
"aliasCode": "",
"aliasName": "",
"parentCode": "",
"majorCode": "",
"systemCode": "",
"note": "",
"funcids": [{
"optType": "create/update",
"code": "",
"name": "",
"firstTag": "",
"secondTag": "",
"unit": "",
"dataType": "",
"priority": "",
"inputMode": "",
"dataSource": "",
"subFlag": false,
"note": ""
}]
}]
}
]}
返回内容说明
字段 | 类型 | 说明 | |
---|---|---|---|
status | int | 状态: 1待审核,2审核通过, 3审核不通过 | |
createUser | string | 申请人id | |
createTime | long | 申请提交时间 | |
applyUser | string | 审核人id, status=1时为空 | |
applyTime | long | 审核时间 | |
classes.optType | string | 操作类型: create新增,update更新 | |
classes.funcids.optType | string | 操作类型: create新增,update更新 | |
... | 其他字段与申请提交的入参相同 | ||
请求地址
POST: /app/funcid/add?groupId=SN&projectId=Pj01&app=test&classCode=project
请求参数
["ProjUnderArea","Group"]
参数名 | 说明 | 备注 |
---|---|---|
classCode | 类型编码 | 必填 |
groupId | 集团id | 必填 |
projectId | 项目id | 必填 |
app | 应用id | 必填 |
json参数 | 信息点列表 | 列表size大于0 |
返回参数
{
"result": "success"
}
请求地址
POST: /app/funcid/remove?groupId=SN&projectId=Pj01&app=test&classCode=project
请求参数
["ProjUnderArea","Group"]
参数名 | 说明 | 备注 |
---|---|---|
classCode | 类型编码 | 必填 |
groupId | 集团id | 必填 |
projectId | 项目id | 必填 |
app | 应用id | 必填 |
json参数 | 信息点列表 | 列表size大于0 |
返回参数
{
"result": "success"
}
请求地址
POST: /app/class/add?groupId=SN&projectId=Pj01&app=test
请求参数
["ProjUnderArea","Group"]
参数名 | 说明 | 备注 |
---|---|---|
groupId | 集团id | 必填 |
projectId | 项目id | 必填 |
app | 应用id | 必填 |
json参数 | 类型列表 | 列表size大于0 |
返回参数
{
"result": "success"
}
请求地址
POST: /app/class/remove?groupId=SN&projectId=Pj01&app=test
请求参数
["ProjUnderArea","Group"]
参数名 | 说明 | 备注 |
---|---|---|
groupId | 集团id | 必填 |
projectId | 项目id | 必填 |
app | 应用id | 必填 |
json参数 | 类型列表 | 列表size大于0 |
返回参数
{
"result": "success"
}
请求地址
POST: /scheme/funcid/add?schemeId=test&classCode=project
请求参数
["ProjUnderArea","Group"]
参数名 | 说明 | 备注 |
---|---|---|
classCode | 类型编码 | 必填 |
schemeId | 方案id | 必填 |
json参数 | 信息点列表 | 列表size大于0 |
返回参数
{
"result": "success"
}
请求地址
POST: /scheme/funcid/remove?projectId=Pj01&schemeId=test&classCode=project
请求参数
["ProjUnderArea","Group"]
参数名 | 说明 | 备注 |
---|---|---|
classCode | 类型编码 | 必填 |
projectId | 项目id | 必填 |
schemeId | 方案id | 必填 |
json参数 | 信息点列表 | 列表size大于0 |
返回参数
{
"result": "success"
}
请求地址
POST: /scheme/class/add?schemeId=test
请求参数
["ProjUnderArea","Group"]
参数名 | 说明 | 备注 |
---|---|---|
schemeId | 方案id | 必填 |
json参数 | 类型列表 | 列表size大于0 |
返回参数
{
"result": "success"
}
请求地址
POST: /scheme/class/romove?schemeId=test
请求参数
["ProjUnderArea","Group"]
参数名 | 说明 | 备注 |
---|---|---|
schemeId | 方案id | 必填 |
json参数 | 类型列表 | 列表size大于0 |
返回参数
{
"result": "success"
}