Browse Source

add object

yaoll 4 years ago
parent
commit
7e03ad6ea4
2 changed files with 183 additions and 1 deletions
  1. 1 1
      README.md
  2. 182 0
      object.md

+ 1 - 1
README.md

@@ -12,7 +12,7 @@
 | 用户组织管理服务 | orgnization.md | 描述集团、项目、部门、岗位、用户、应用、功能等信息的数据结构以及之间的关系,并提供接口。 |
 | 报警服务         | alarm.md       | 描述报警条目、报警记录、自动报警配置等信息的数据结构,并提供接口 |
 | 任务调度服务     | scheduler.md   | 描述任务配置、执行记录等信息的数据结构以及使用方式与约束,并提供接口 |
-| 空间设备对象服务 |                | (原数据字典与物理世界)描述类型定义、信息点定义、对象、关系等数据结构,并提供接口 |
+| 空间设备对象服务 | object.md      | (原数据字典与物理世界)描述类型定义、信息点定义、对象、关系等数据结构,并提供接口 |
 | 供应商服务       | 待补充         |                                                              |
 | 库存耗材与工具   | 待补充         |                                                              |
 | 租户             | 待补充         |                                                              |

+ 182 - 0
object.md

@@ -0,0 +1,182 @@
+### 本次重点重构内容
+
+1. 底层存储数据库切换为mysql
+2. 对信息点编码进行调整,整体使用驼峰命名
+3. 调整存储方式和分库分表方案,数据字典部分调整为平台字典单独一个库,集团数据和项目数据按集团进行分库,物理世界部分按集团进行分库,按项目进行分表
+4. 枚举型信息点修改为引用数据标准化定义的数据
+5. 提供可行的数据迁移方案
+
+### 数据模型
+
+------
+
+1. 类型定义,用于描述现实世界的对象的分类,如空间、新风机等
+2. 信息点定义,用于描述类型的属性
+3. 对象数据,即类型定义的实例,表示现实世界中的一个具体的物体,比如一个具体的房间,一个具体的空调
+4. 图类型,用于描述对象之间的关系的分类
+5. 边类型,对图类型的补充说明
+6. 关系数据,描述具体的关系,比如某个空调位于某个空间
+7. 平台字典,系统内置的一组类型定义和信息点定义数据,与集团和项目无关
+8. 集团变更,基于集团对平台字典的扩充和自定义,比如新增类型、新增信息点、修改信息点,集团变更需要审核,审核通过后才会生效,同时对其他集团不可见
+9. 集团字典,是平台字典和通过审核的集团变更的数据的并集
+10. 集团方案,根据业态不同,从集团字典中筛选(订阅)特定的类型和信息点形成方案,从而过滤掉实际业务中不关注的类型和信息点,集团方案是集团字典的子集,集团所拥有的项目必须应用一个且仅有一个集团方案
+11. 项目变更,基于项目对平台字典的扩充和自定义,比如新增信息点、修改信息点,同样需要审核,审核通过后才会生效,同时对其他项目不可见
+12. 项目字典,集团方案和项目变更的并集
+13. 应用订阅,根据应用关注点不同,从项目字典中筛选(订阅)特定的类型和信息点,从而过滤掉应用不关注的类型和信息点,每个应用对每个项目都需要进行订阅配置
+
+### 业务说明
+
+------
+
+1. 站在用户或数据字典使用方的角度来看数据字典有三层:平台级字典,集团级字典,项目级字典
+
+2. 类型相同或信息点相同时(编码相同)项目级字典优先级最高,集团级次之,平台级字典最低,优先级高的会覆盖优先级低的
+
+3. 使用数据字典时明确"使用的字典位于哪个层级"对需求的分析和理解会有很大帮助
+
+4. 集团级数据、集团方案、项目级数据是数据字典内部逻辑概念,项目实际使用过程中应该不会用到这些概念
+
+5. 应用和服务应该关注的是项目级字典和应用订阅内容
+
+6. 对集团变更和项目变更的数据应该定时进行汇总分析,暂定线下人工处理
+
+7. 默认每个类型都有id、name、localId、localName、objType、classCode、projectId,无需订阅,也不能取消订阅
+
+8. 
+
+   
+
+### 字段约定
+
+| 字段      | 说明                          | 备注 |
+| --------- | ----------------------------- | ---- |
+| class     | 类型                          |      |
+| funcid    | 信息点                        |      |
+| classCode | 类型定义的code: class.code    |      |
+| className | 类型定义的name: class.name    |      |
+| infoCode  | 信息点定义的code: funcid.code |      |
+| infoName  | 信息点定义的name: funcid.name |      |
+| groupCode | 集团编码                      |      |
+| 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            | 子分类标记:是否可以按此信息点进行子分类替换,同一类型下目前只支持一个子分类信息点 |
+
+对象 object
+
+| 字段           | 数据类型       | 说明               |
+| -------------- | -------------- | ------------------ |
+| id             | String         | id,全局唯一       |
+| projectId      | String         | 项目id,不可为空   |
+| classCode      | String         | 类型code,不可为空 |
+| 其他信息点编码 | 根据信息点定义 |                    |
+|                |                |                    |
+
+关系 relation
+
+| 字段    | 数据类型 | 说明         |
+| ------- | -------- | ------------ |
+| graphId | String   | 图实例id     |
+| rel     | String   | 边类型       |
+| from    | String   | 对象id       |
+| to      | String   | 对象id       |
+| infos   | Object   | 关系附加信息 |
+
+
+
+### 信息点数据类型
+
+| 数据类型   | 类型名称 | 信息点分类          | 是否复数   | 是否区间   | 数据源                           | 格式   |
+| ---------- | -------- | ------------------- | ---------- | ---------- | -------------------------------- | ------ |
+| 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      | 应用数据标准化中定义的数据类型   | 无     |
+| MENUM      | 多选枚举 | 静态/脉冲/时序/阶段 | true/false | false      | 应用数据标准化中定义的数据类型   | 无     |
+| ATTACHMENT | 附件     | 静态                | true/false | false      |                                  | pdf    |
+| 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)一起使用,
+
+```
+
+### 接口清单
+
+1. 查询类型定义
+2. 查询信息点定义
+3. 创建变更(集团变更、项目变更)
+4. 查询变更
+5. 修改变更
+6. 提交变更(发起审核)
+7. 创建集团方案
+8. 集团方案订阅、取消订阅类型与信息点(批量)
+9. 应用订阅、取消订阅类型与信息点(批量)
+10. 保存对象(批量,创建、修改)
+11. 删除对象(批量)
+12. 创建关系(批量)
+13. 删除关系(批量)
+14. 根据关系查询对象
+15. 根据对象和信息点查询实时数据(批量)
+16. 根据对象、信息点、开始结束时间查询分精度数据(批量)
+17. 发送控制指令(批量,异步,返回指令查询码)
+18. 根据指令查询码查询执行结果(批量)
+