revit-algorithm 服务补充文档
项目结构
主要分为两大块, 一个是后台基于springboot scheduling的后台处理线程, 一个是对外接口
使用的pg数据库 datacenter库revit模式和revit_calc模式
依赖的服务
1. 文件服务(带有分块上传接口): 主要上传和下载 模型文件, 模型报告, 模型底图, 模型导出json的zip数据
2. 调度器: 将模型转发给调度器处理, 包括检查和导出数据
3. 消息中心: 发送通知, 刷新类消息
4. 数据中心: 将模型的数据(主要是元空间, 设备, 部件)同步给数据中心
后台scheduling服务
1. 跟后台scheduling相关的包基本都在 cn.sagacloud.server.algorithm.backstage里
2. 其中state包里, 是模型文件的各种状态, 都实现了ModelState接口
ModelState接口 提供了prepareModel 函数, 主要用来做当前状态处理的准备工作
handle 函数, 主要用来处理当前状态的主业务流程
3. state包里的类, 名字结尾的数字表示模型当前的状态
0 : 初始状态
主流程: 将处在0状态时间超过1天的模型删除
1 : 上传完成状态
将模型依次发送到模型调度器处理(模型检查任务), 进入状态10
10 : 等待调度器处理状态
调用调度器接口查询模型处理结果, 如果未处理完则继续等待, 如果已处理完成则做进一步检查
检查调度器返回的模型检查结果是否符合模型建模规范, 全部正确则进入状态2
如果不符合规范, 则进入状态11
11 : 模型检查失败状态
直接删除模型, 并将模型所在的楼层版本回退到上一个版本
2 : 初步检查通过状态
将模型依次发送到模型调度器处理(模型数据导出任务), 进入状态20
20 : 等待模型导出状态
调用调度器接口查询模型处理结果, 如果未处理完则继续等待, 如果已处理完成则进入状态3
如果调度器导出模型数据失败, 则进入状态21
21 : 模型导出数据失败状态
同11状态
3 : 模型核心处理状态
1). 模型数据提取, 获取在文件服务器(Ali OSS)中存放的模型jsonz数据, 解压并解析成对象, 然后保存到数据库revit模式内
2). 多模型检查, 把当前模型跟上下楼层模型之间做检查(轴网检查, 标高检查)
3). 同步模型数据到数据中心(设备, 部件, 模型空间)
4). 记录同步数据过程中的增删日志
如果以上流程出现程序异常, 则进入31状态
31 : 模型数据处理失败状态
在31状态一定的时间之后, 将模型状态切换到3
4 : 模型完成状态
给模型文件版本号
计算因为模型空间的改变而受到影响的业务空间, 并给业务空间设置标记
注意事项, 常见问题
1. 如果出现模型上传之后报错需要删除模型重新上传的情况, 使用model-file/delete-file接口删除模型
2. 如果模型出现问题, 可以看一下模型文件表的sync_error_msg列的错误信息, 如果有的话
表
model_file 模型表
model_floor 楼层表
model_folder 文件夹表
model_monitor 模型文件处理流程监控表
sync_log 同步数据到数据中心的日志表
其他为模型构件信息表
打包
gradle 视图里找到 --> 项目名称 --> Tasks --> other -->
buildDevJar : 构建dev环境的jar包
buildDevWar : 构建dev环境的war包
buildProdJar : 构建prod环境的jar包
buildProdWar : 构建prod环境的war包
以上是在项目内的build.gradle文件内部写的 groovy 脚本, 可以根据需要更改