Compare commits

...

15 Commits

Author SHA1 Message Date
KangshuYing 0828984e83 Merge branch 'master' of http://120.26.116.243:3000/root/alert-backend into YKS 5 months ago
chenjiale b384843fab Merge pull request 'cjl-dev' (#17) from cjl-dev into master 6 months ago
Jiale 7db7e1710d feat(module-alert): 添加集团管理相关错误码并优化 EXA历史数据查询功能 6 months ago
Jiale 3811a29f0e Merge branch 'dev-xjf' of http://120.26.116.243:3000/root/alert-backend into cjl-dev 6 months ago
肖晋飞 5d8a4c2820 fix:运行中心-修改model相关名称防止冲突 6 months ago
肖晋飞 04248d7516 fix:运行中心-修改model相关名称防止冲突 6 months ago
肖晋飞 fbd7a1ec6a feat:运行中心-预警实例V2.0 6 months ago
chenjiale 35fb59e650 Merge pull request 'cjl-dev' (#16) from cjl-dev into master 6 months ago
Jiale 2e42c6fbf9 feat(model): 添加模型训练时间信息并优化模型信息更新功能 6 months ago
Jiale 4602c84790 refactor(alert): 重构 EXA 相关接口和数据结构- 更新 EXAController、EXAService 和 EXAUtils 中的方法签名和返回类型 6 months ago
肖晋飞 9558c3ea4e feat:运行中心-预警实例V1.0 6 months ago
Jiale 2b38459508 feat(module-alert): 重构模型相关代码并添加新功能 6 months ago
Jiale 63de7f613c Merge branch 'master' of http://120.26.116.243:3000/root/alert-backend into cjl-dev 6 months ago
chenjiale 38d494031f Merge pull request '集团配置' (#15) from YKS into master 6 months ago
CJL6015 c7e484af91 feat(module-alert): 添加模型管理功能 6 months ago
  1. 8
      pom.xml
  2. 6
      yudao-module-alert/yudao-module-alert-biz/pom.xml
  3. 32
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/Algorithm.java
  4. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/ModelStatus.java
  5. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/ModelTrash.java
  6. 19
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/ModelVisible.java
  7. 40
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/calcgroup/CalcGroupController.java
  8. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/calcgroup/vo/CalcGroupPageReqVO.java
  9. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/calcgroup/vo/CalcGroupRespVO.java
  10. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/EXAController.java
  11. 9
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/EXAHistoryReqVO.java
  12. 8
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/EXAPageReqVO.java
  13. 67
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/ExaPoint.java
  14. 106
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantController.java
  15. 14
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantChartReqVO.java
  16. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantChartRespVO.java
  17. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCountReqVO.java
  18. 25
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCountRespVO.java
  19. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantInfoVO.java
  20. 30
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java
  21. 45
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPointRespVO.java
  22. 135
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantRespVO.java
  23. 74
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantSaveReqVO.java
  24. 24
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/pointInfo.java
  25. 54
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.java
  26. 32
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelDataController.java
  27. 55
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/RunModelController.java
  28. 43
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java
  29. 48
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java
  30. 14
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/CreateModelInfo.java
  31. 26
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelDataQuery.java
  32. 35
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelDataVO.java
  33. 90
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.java
  34. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelPageReqVO.java
  35. 47
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelRespVO.java
  36. 47
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelSelectQuery.java
  37. 47
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelSimpleVO.java
  38. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelVersionPageReqVO.java
  39. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelVersionRespVO.java
  40. 59
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/PointVO.java
  41. 134
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/RunModelInfoVO.java
  42. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/TimeRange.java
  43. 56
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/system/SelectController.java
  44. 26
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/system/vo/OptionItemVO.java
  45. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/system/vo/PointOptionItemVO.java
  46. 32
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/system/vo/SelectAllOptionVO.java
  47. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/system/vo/SelectQuery.java
  48. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/vo/WarnPageReqVO.java
  49. 89
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/vo/WarnRespVO.java
  50. 50
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/vo/WarnSaveReqVO.java
  51. 59
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/warnController.java
  52. 24
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/calcgroup/CalcGroupDO.java
  53. 83
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/instant/InstantDO.java
  54. 58
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/instant/InstantTableDO.java
  55. 50
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/model/ModelDO.java
  56. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/model/ModelVersionDO.java
  57. 68
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/warn/WarnDO.java
  58. 60
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/warn/WarnTableDO.java
  59. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/calcgroup/CalcGroupMapper.java
  60. 33
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java
  61. 10
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantTableMapper.java
  62. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/model/ModelMapper.java
  63. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/model/ModelVersionMapper.java
  64. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/warn/WarnMapper.java
  65. 9
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/warn/WarnTableMapper.java
  66. 53
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/ModelCfg.java
  67. 34
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/SystemCfg.java
  68. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/SystemTypeCfg.java
  69. 41
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/UnitCfg.java
  70. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/ModelCfgMapper.java
  71. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/SystemCfgMapper.java
  72. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/SystemTypeCfgMapper.java
  73. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/UnitCfgMapper.java
  74. 13
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/ModelCfgService.java
  75. 13
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/SystemCfgService.java
  76. 13
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/SystemTypeCfgService.java
  77. 13
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/UnitCfgService.java
  78. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/ModelCfgServiceImpl.java
  79. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/SystemCfgServiceImpl.java
  80. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/SystemTypeCfgServiceImpl.java
  81. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/UnitCfgServiceImpl.java
  82. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/calcgroup/CalcGroupService.java
  83. 31
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/calcgroup/CalcGroupServiceImpl.java
  84. 7
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAService.java
  85. 45
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAServiceImpl.java
  86. 57
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantService.java
  87. 372
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java
  88. 26
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelDataService.java
  89. 48
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelService.java
  90. 27
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/RunModelService.java
  91. 34
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/RunModelServiceImpl.java
  92. 29
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelDataServiceImpl.java
  93. 125
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java
  94. 30
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/system/SelectService.java
  95. 88
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/system/impl/SelectServiceImpl.java
  96. 30
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/warn/WarnService.java
  97. 81
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/warn/WarnServiceImpl.java
  98. 17
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/utils/EXAUtils.java
  99. 54
      yudao-module-alert/yudao-module-alert-biz/src/main/resources/mapper/ModelCfgMapper.xml
  100. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/resources/mapper/SystemCfgMapper.xml

8
pom.xml

@ -63,6 +63,14 @@
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.example</groupId>
<artifactId>maven-resources-production</artifactId>
<version>1.0.0</version>
<configuration>
<argLine>-Xmx2g</argLine>
</configuration>
</plugin>
<!-- maven-surefire-plugin 插件,用于运行单元测试。 -->
<!-- 注意,需要使用 3.0.X+,因为要支持 Junit 5 版本 -->
<plugin>

6
yudao-module-alert/yudao-module-alert-biz/pom.xml

@ -62,6 +62,12 @@
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-excel</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-system-biz</artifactId>
<version>2.4.2-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<!-- Test 测试相关 -->
<!-- <dependency>-->

32
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/Algorithm.java

@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.alert.common.enums;
import lombok.AllArgsConstructor;
import java.util.Objects;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 14:07
*/
@AllArgsConstructor
public enum Algorithm {
/**
* 模型算法枚举
*/
ERROR(-1),
PCA(0),
ANN(1);
public final Integer code;
public static Algorithm of(Integer code) {
for (Algorithm algorithm : values()) {
if (Objects.equals(algorithm.code, code)) {
return algorithm;
}
}
return ERROR;
}
}

22
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/ModelStatus.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.common.enums;
import lombok.AllArgsConstructor;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 13:48
*/
@AllArgsConstructor
public enum ModelStatus {
/**
* 模型状态
*/
TRAINING(0, "训练中"),
FINISH(1, "已下装");
public final Integer code;
public final String desc;
}

21
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/ModelTrash.java

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.alert.common.enums;
import lombok.AllArgsConstructor;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 13:53
*/
@AllArgsConstructor
public enum ModelTrash {
/**
* 删除状态
*/
NORMAL(0, "正常"),
TRASH(1, "已删除"),
;
public final Integer code;
public final String desc;
}

19
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/ModelVisible.java

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.alert.common.enums;
import lombok.AllArgsConstructor;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 14:00
*/
@AllArgsConstructor
public enum ModelVisible {
/**
* 模型可见状态
*/
VISIBLE(1),
INVISIBLE(0),
;
public final Integer code;
}

40
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/calcgroup/CalcGroupController.java

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.alert.controller.admin.calcgroup;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.alert.controller.admin.calcgroup.vo.CalcGroupPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.calcgroup.vo.CalcGroupRespVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.calcgroup.CalcGroupDO;
import cn.iocoder.yudao.module.alert.service.calcgroup.CalcGroupService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Comparator;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "运行中心 - 计算组")
@RestController
@RequestMapping("/alert/calcgroup")
@Validated
public class CalcGroupController {
@Resource
private CalcGroupService calcGroupService;
@GetMapping("/list")
@Operation(summary = "获取计算组列表", description = "用于前端的下拉选项")
public CommonResult<List<CalcGroupRespVO>> getCalcGroupList(CalcGroupPageReqVO ReqVO) {
ReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<CalcGroupDO> list = calcGroupService.getCalcGroupPage(ReqVO).getList();
list.sort(Comparator.comparing(CalcGroupDO::getId));
return success(BeanUtils.toBean(list, CalcGroupRespVO.class));
}
}

16
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/calcgroup/vo/CalcGroupPageReqVO.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.alert.controller.admin.calcgroup.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "运行中心 - 模型版本 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class CalcGroupPageReqVO extends PageParam {
@Schema(description = "机组id", example = "1")
private String unitId;
}

22
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/calcgroup/vo/CalcGroupRespVO.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.controller.admin.calcgroup.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "运行中心 - 模型分页 Request VO")
@Data
@ExcelIgnoreUnannotated
public class CalcGroupRespVO {
@Schema(description = "版本id", example = "id")
private Long id;
@Schema(description = "机组id", example = "id")
private Long unitId;
@Schema(description = "计算组名称", example = "yudao")
private String groupName;
}

4
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/EXAController.java

@ -64,8 +64,8 @@ public class EXAController {
@GetMapping("/historys")
@Operation(summary = "获取点号历史-支持多点(点号之间用逗号分割)")
@PreAuthorize("@ss.hasPermission('alert:exa:query')")
public CommonResult<List<List<String>>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo) {
List<List<String>> historyLists=exaService.getEXAHistorys(exaHistoryReqVo);
public CommonResult<List<List<List<Double>>>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo) {
List<List<List<Double>>> historyLists=exaService.getEXAHistorys(exaHistoryReqVo);
return success(historyLists);
}

9
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/EXAHistoryReqVO.java

@ -7,9 +7,12 @@ import lombok.Data;
public class EXAHistoryReqVO {
@Schema(description = "点号")
private String itemName;
private String itemName;
@Schema(description = "开始时间")
private String startTime;
private String startTime;
@Schema(description = "结束时间")
private String endTime;
private String endTime;
@Schema(description = "间隔时间-以秒为单位传入,会自动转为毫秒")
private Long interval = 300L;
}

8
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/EXAPageReqVO.java

@ -4,11 +4,19 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Schema(description = "预警诊断系统 - EXA测点分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class EXAPageReqVO extends PageParam {
@Schema(description = "测点名称或描述,模糊匹配", example = "芋道")
private String condition;
public EXAPageReqVO(String condition) {
this.condition = condition;
}
}

67
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/ExaPoint.java

@ -0,0 +1,67 @@
package cn.iocoder.yudao.module.alert.controller.admin.exa.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-20 20:45
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExaPoint {
/**
* 点号
*/
@JsonProperty("ItemName")
private String itemName;
/**
*
*/
@JsonProperty("SerialNumber")
private int serialNumber;
/**
* 组名
*/
@JsonProperty("GroupName")
private String groupName;
/**
* 类型
*/
@JsonProperty("ItemType")
private int itemType;
/**
* 描述
*/
@JsonProperty("Descriptor")
private String descriptor;
/**
* 单位
*/
@JsonProperty("EngUnits")
private String engUnits;
/**
* 上限
*/
@JsonProperty("UpperLimit")
private Double upperLimit;
/**
* 下限
*/
@JsonProperty("LowerLimit")
private Double lowerLimit;
/**
* 上边界
*/
@JsonProperty("LowerBound")
private Double lowerBound;
/**
* 下变价
*/
@JsonProperty("UpperBound")
private Double upperBound;
}

106
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantController.java

@ -0,0 +1,106 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAHistoryReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.*;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import cn.iocoder.yudao.module.alert.service.instant.InstantService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
@Tag(name = "运行中心 - 模型实例")
@RestController
@RequestMapping("/alert/instant")
@Validated
public class InstantController {
@Resource
private InstantService instantService;
@GetMapping("/page")
@Operation(summary = "获得模型实例分页列表")
@PreAuthorize("@ss.hasPermission('run:instant:query')")
public CommonResult<PageResult<InstantRespVO>> getInstantPage(@Valid InstantPageReqVO pageReqVO) {
PageResult<InstantDO> pageResult = instantService.getInstantPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, InstantRespVO.class));
}
@GetMapping("/get")
@Operation(summary = "获得实例信息")
@PreAuthorize("@ss.hasPermission('run:instant:query')")
public CommonResult<InstantRespVO> getInstant(@RequestParam("id") Long id) {
InstantDO instant = instantService.getInstant(id);
return success(BeanUtils.toBean(instant, InstantRespVO.class));
}
@GetMapping("/getPoint")
@Operation(summary = "获得某实例的测点列表")
@PreAuthorize("@ss.hasPermission('run:instant:query')")
public CommonResult<List<InstantPointRespVO>> getInstantPoint(@RequestParam("id") Long id) {
List<InstantPointRespVO> instantPointList= instantService.getInstantPoint(id);
return success(instantPointList);
}
@PostMapping("/getChart")
@Operation(summary = "获得某实例的曲线数据--默认-读历史")
@PreAuthorize("@ss.hasPermission('run:instant:query')")
public CommonResult<List<InstantChartRespVO>> getInstantChart( @Valid @RequestBody InstantChartReqVO instantChartReqVO) {
List<InstantChartRespVO> instantChartList= instantService.getInstantChart(instantChartReqVO);
return success(instantChartList);
}
// @GetMapping("/getChartCalc")
// @Operation(summary = "获得某实例的曲线数据--复盘")
// @PreAuthorize("@ss.hasPermission('run:instant:query')")
// public CommonResult<List<InstantChartRespVO>> getInstantChartCalc(@RequestParam("id") Long id,@Valid EXAHistoryReqVO exaHistoryReqVo) {
// List<InstantChartRespVO> result= instantService.getInstantChart(id,exaHistoryReqVo);
// return success(result);
// }
@PutMapping("/update")
@Operation(summary = "修改模型实例")
@PreAuthorize("@ss.hasPermission('run:instant:update')")
public CommonResult<Boolean> updateInstant(@Valid @RequestBody InstantSaveReqVO updateReqVO) {
instantService.updateInstant(updateReqVO);
return success(true);
}
@GetMapping("/count")
@Operation(summary = "获得各状态数量列表")
@PreAuthorize("@ss.hasPermission('run:instant:query')")
public CommonResult<InstantCountRespVO> getInstantPage() {
InstantCountRespVO instantCountRespVO= instantService.getInstantCount();
return success(BeanUtils.toBean(instantCountRespVO, InstantCountRespVO.class));
}
@PostMapping("/create")
@Operation(summary = "创建模型实例")
@PreAuthorize("@ss.hasPermission('run:instant:create')")
public CommonResult<List<String>> createInstant(@RequestBody InstantSaveReqVO createReqVO) throws IOException {
return success(instantService.createInstant(createReqVO, null));
}
}

14
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantChartReqVO.java

@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAHistoryReqVO;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class InstantChartReqVO extends EXAHistoryReqVO {
@JsonProperty(value="id")
@Schema(description = "实例id", example = "id")
private Long id;
}

21
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantChartRespVO.java

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class InstantChartRespVO {
private String title;
private List<String> name;
private List<List<List<Double>>> seriesData;
}

20
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCountReqVO.java

@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "运行中心 - 模型实例分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = false)
public class InstantCountReqVO {
@Schema(description = "运行状态", example = "yudao")
private Long running;
@Schema(description = "运行日志", example = "yudao")
private String runningLog;
@Schema(description = "更新状态", example = "yudao")
private Long isUpdate;
}

25
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCountRespVO.java

@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "运行中心 - 模型实例分页 Request VO")
@Data
@ExcelIgnoreUnannotated
public class InstantCountRespVO {
@Schema(description = "正常运行数量", example = "id")
private Long normal;
@Schema(description = "模式外运行数量", example = "yudao")
private Long outside;
@Schema(description = "运行失败数量", example = "yudao")
private Long failure;
@Schema(description = "版本更新数量", example = "yudao")
private Long update;
@Schema(description = "模型停运数量", example = "yudao")
private Long stop;
}

21
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantInfoVO.java

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import lombok.Data;
import java.util.List;
@Data
public class InstantInfoVO {
private List<String> inputInfo;
private List<String> inputName;
private List<String> unit;
//重构值
private List<String> outPointInfo;
private List<String> timePointInfo;
private List<String> biasPointInfo;
private List<String> faultVariablePointInfo;
private String model_state;
private String model_status;
}

30
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "运行中心 - 模型实例分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class InstantPageReqVO extends PageParam {
@Schema(description = "机组id", example = "id")
private Integer unitId;
@Schema(description = "系统id", example = "yudao")
private Integer modelId;
@Schema(description = "模型名称", example = "yudao")
private String mpName;
@Schema(description = "运行状态", example = "yudao")
private String running;
@Schema(description = "运行日志", example = "yudao")
private String runningLog;
@Schema(description = "更新状态", example = "yudao")
private String isUpdate;
}

45
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPointRespVO.java

@ -0,0 +1,45 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import com.mzt.logapi.starter.annotation.DiffLogField;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Schema(description = "运行中心 - 模型实例所用测点 Req VO")
@Data
public class InstantPointRespVO {
@Schema(description = "实例编号,后端手动生成--直接用", example = "1")
private Long id;
@Schema(description = "输入点号", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@NotNull(message = "输入点号不能为空")
@DiffLogField(name = "输入点号")
private String inputInfo;
@Schema(description = "输入点号名称", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@NotNull(message = "输入点号名称不能为空")
@DiffLogField(name = "输入点号名称")
private String inputName;
@Schema(description = "单位名称", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@NotNull(message = "单位名称不能为空")
@DiffLogField(name = "单位名称")
private String unit;
@Schema(description = "重构值点号", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@NotNull(message = "重构值点号不能为空")
@DiffLogField(name = "重构值点号")
private String outPointInfo;
@Schema(description = "偏差值点号", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@NotNull(message = "偏差值点号不能为空")
@DiffLogField(name = "偏差值点号")
private String biasPointInfo;
@Schema(description = "错误状态点号", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@NotNull(message = "错误状态点号不能为空")
@DiffLogField(name = "错误状态点号")
private String faultVariablePointInfo;
}

135
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantRespVO.java

@ -0,0 +1,135 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.ibatis.type.JdbcType;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "运行中心 - 模型实例分页 Request VO")
@Data
@ExcelIgnoreUnannotated
public class InstantRespVO {
@Schema(description = "实例id", example = "id")
private Long id;
@Schema(description = "模型id", example = "yudao")
private Long modelId;
@Schema(description = "实例名称", example = "yudao")
private String mpName;
@Schema(description = "实例信息", example = "yudao")
private String instantInfo;
@Schema(description = "时间间隔", example = "1")
private Integer intervalTime;
@Schema(description = "是否存历史", example = "1")
private Integer hisSto;
@Schema(description = "是否可见", example = "1")
private Integer visible;
@Schema(description = "状态", example = "1")
private Integer status;
@Schema(description = "创建时间", example = "2022-07-01 00:00:00")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime setupTime;
@Schema(description = "更新时间", example = "2022-07-01 00:00:00")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime newestUpdateTime;
@Schema(description = "运行", example = "1024")
private Long running;
@Schema(description = "运行日志", example = "1024")
private String runningLog;
@Schema(description = "计算组", example = "1024")
private Long calcGroup;
@Schema(description = "版本号", example = "1024")
private Long modelVersionId;
private Integer isUpdate;
//视图额外增加的字段
private String conditionInfo;
private String groupName;
@Schema(description = "实例所属模型名称", example = "1024")
private String modelName;
@Schema(description = "实例所属模型信息", example = "1024")
private String modelInfo;
@Schema(description = "算法id", example = "1024")
private Integer algorithmId;
@Schema(description = "算法名称-缩写", example = "1024")
private String algorithmShortname;
@Schema(description = "算法名称", example = "1024")
private String algorithmName;
private String areaId;
private String plantShortname;
private String plantName;
private String areaShortname;
private String areaName;
private String unitShortname;
private String unitName;
private Integer plantId;
private String systemTypeShortname;
private String systemTypeName;
private Integer unitId;
private Integer systemTypeId;
private String systemName;
private Integer systemId;
private String systemShortname;
@Schema(description = "模式", example = "1024")
private String conditionName;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
/**
* 创建者目前使用 SysUser id 编号
*
* 使用 String 类型的原因是未来可能会存在非数值的情况留好拓展性
*/
private String creator;
/**
* 更新者目前使用 SysUser id 编号
*
* 使用 String 类型的原因是未来可能会存在非数值的情况留好拓展性
*/
private String updater;
/**
* 创建者-名称
*
*
*/
private String createName;
/**
* 更新者-名称
*
*
*/
private String updateName;
}

74
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantSaveReqVO.java

@ -0,0 +1,74 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.mzt.logapi.starter.annotation.DiffLogField;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import org.apache.poi.ss.formula.functions.T;
import java.util.List;
@Schema(description = "运行中心 - 模型实例创建/更新 Request VO")
@Data
public class InstantSaveReqVO extends InstantInfoVO {
@Schema(description = "实例编号", example = "1")
@NotNull(message = "实例编号不能为空")
private Long id;
@Schema(description = "模型编号", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@DiffLogField(name = "模型编号")
private Long modelId;
@Schema(description = "模型实例信息", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@DiffLogField(name = "模型实例信息")
@JsonIgnore
private String instantInfo;
@Schema(description = "输入点号信息-原始数据", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@DiffLogField(name = "输入点号信息")
private List<pointInfo> pointInfo;
@Schema(description = "实例名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@Size(max = 30, message = "实例名称长度不能超过 30 个字符")
@DiffLogField(name = "实例名称")
private String mpName;
@Schema(description = "时间间隔", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@DiffLogField(name = "时间间隔")
private Long intervalTime;
@Schema(description = "是否可见", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@DiffLogField(name = "是否可见")
private Long visible;
@Schema(description = "状态可见", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@DiffLogField(name = "状态")
private Long status;
@Schema(description = "是否存历史-是(存),否(不存)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@DiffLogField(name = "是否存历史")
private Long hisSto;
@Schema(description = "计算组编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@DiffLogField(name = "计算组")
private Long calcGroup;
@Schema(description = "版本编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@DiffLogField(name = "版本编号")
private Long modelVersionId;
}

24
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/pointInfo.java

@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class pointInfo {
@JsonProperty(value="PointId")
@Schema(description = "点号", example = "id")
private String PointId;
@JsonProperty(value="Description")
@Schema(description = "描述", example = "yudao")
private String Description;
@JsonProperty(value="Unit")
@Schema(description = "单位", example = "yudao")
private String Unit;
@JsonProperty(value="Type")
@Schema(description = "类型(输入-false;输出-true;ANN-空)", example = "yudao")
private Object Type;
}

54
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.java

@ -0,0 +1,54 @@
package cn.iocoder.yudao.module.alert.controller.admin.model;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelInfoVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSelectQuery;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSimpleVO;
import cn.iocoder.yudao.module.alert.service.model.ModelService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 13:07
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/alert/model")
public class ModelController {
private final ModelService modelService;
@GetMapping("/card/list")
public CommonResult<List<ModelSimpleVO>> getModelList(ModelSelectQuery query) {
List<ModelSimpleVO> modelList = modelService.getModelList(query);
return CommonResult.success(modelList);
}
@GetMapping("info/{id}")
public CommonResult<ModelInfoVO> getModelInfo(@PathVariable Integer id) {
ModelInfoVO modelInfo = modelService.getModelInfo(id);
return CommonResult.success(modelInfo);
}
@PostMapping("/")
public CommonResult<Integer> saveModel(@RequestBody ModelInfoVO model) {
Integer id = modelService.createModel(model);
if (Objects.nonNull(id) && id > 0) {
return CommonResult.success(id);
}
return CommonResult.error(INTERNAL_SERVER_ERROR.getCode(), "新建模型异常");
}
@PatchMapping("/info")
public CommonResult<Boolean> updateModelInfo(@RequestBody ModelInfoVO vo) {
Boolean b = modelService.updateModelInfo(vo);
return CommonResult.success(b);
}
}

32
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelDataController.java

@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.alert.controller.admin.model;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelDataQuery;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelDataVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.TimeRange;
import cn.iocoder.yudao.module.alert.service.model.ModelDataService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
* @author chenjiale
* @version 1.0
* @date 2023-09-05 22:08
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/alert/model/data")
public class ModelDataController {
private final ModelDataService modelDataService;
@GetMapping("/{id}")
public CommonResult<ModelDataVO> getModelData(@PathVariable Integer id, ModelDataQuery query) {
return CommonResult.success(null);
}
@PostMapping("/calculate/{id}")
public CommonResult<Boolean> calculate(@PathVariable Integer id, @RequestBody TimeRange timeRange) {
return CommonResult.success(null);
}
}

55
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/RunModelController.java

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.alert.controller.admin.model;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelRespVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionRespVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelVersionDO;
import cn.iocoder.yudao.module.alert.service.model.RunModelService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Comparator;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "运行中心 - 模型")
@RestController
@RequestMapping("/alert/model")
@Validated
public class RunModelController {
@Resource
private RunModelService runModelService;
@GetMapping("/page")
@Operation(summary = "获得模型分页列表")
@PreAuthorize("@ss.hasPermission('run:model:query')")
public CommonResult<PageResult<ModelRespVO>> getModelPage(@Valid ModelPageReqVO pageReqVO) {
PageResult<ModelDO> pageResult = runModelService.getModelPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ModelRespVO.class));
}
@GetMapping("/version/list")
@Operation(summary = "获取模型版本列表", description = "用于前端的下拉选项")
public CommonResult<List<ModelVersionRespVO>> getModelVersionList(ModelVersionPageReqVO versionReqVO) {
versionReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ModelVersionDO> list = runModelService.getModelVersionPage(versionReqVO).getList();
list.sort(Comparator.comparing(ModelVersionDO::getVersion));
return success(BeanUtils.toBean(list, ModelVersionRespVO.class));
}
}

43
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java

@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import java.util.Date;
import java.util.List;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 23:02
*/
@Data
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ModelInfo {
/**
* id
*/
private Integer id;
/**
* 创建人
*/
private String creator;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/**
* 名称
*/
private String modelName;
private List<Point> pointInfo;
private String condition;
private Integer sampling;
}

48
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import java.math.BigDecimal;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 22:48
*/
@Data
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Point {
/**
* 系统名称
*/
private String systemName;
/**
* 目标点号
*/
private String point;
/**
* 描述
*/
private String description;
/**
* 单位
*/
private String unit;
/**
* 上限
*/
private BigDecimal upperlimit;
/**
* 下限
*/
private BigDecimal lowerlimit;
}

14
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/CreateModelInfo.java

@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import lombok.Data;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-20 22:57
*/
@Data
public class CreateModelInfo {
private Integer systemId;
private ModelInfoVO modelInfo;
}

26
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelDataQuery.java

@ -0,0 +1,26 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* @author chenjiale
* @version 1.0
* @date 2023-09-15 22:52
*/
@Data
public class ModelDataQuery {
private String type;
@NotBlank
private String index;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date st;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date et;
}

35
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelDataVO.java

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import lombok.*;
import java.util.List;
/**
* @author chenjiale
* @version 1.0
* @date 2023-09-05 22:50
*/
@Data
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ModelDataVO {
/**
* 目标数值
*/
private List<Double> targetValue;
/**
* 参数个数
*/
private int[] sampleValue;
/**
* 边界数据
*/
private List<List<Double>> dataList;
/**
* 热力图数据
*/
private List<int[]> heatData;
}

90
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.java

@ -0,0 +1,90 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import cn.iocoder.yudao.module.alert.controller.admin.model.model.Point;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import java.util.Date;
import java.util.List;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 22:41
*/
@Data
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ModelInfoVO {
/**
* id
*/
private Integer id;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/**
* 运行条件
*/
private String condition;
/**
* 名称
*/
private String modelName;
private List<Point> pointInfo;
private List<TrainTime> trainTime;
private Integer algorithmId;
private Integer systemId;
private Integer sampling;
@Data
public static class TrainTime {
/**
* 开始时间
*/
private String st;
/**
* 结束时间
*/
private String et;
/**
* 时长
*/
private Integer duration;
/**
* 采样数量
*/
private Integer number;
/**
* 清洗样本数
*/
private Integer filter;
/**
* 有效样本数
*/
private Integer mode;
}
}

18
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelPageReqVO.java

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "运行中心 - 模型实例分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class ModelPageReqVO extends PageParam {
@Schema(description = "模型名称", example = "yudao")
private String modelName;
}

47
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelRespVO.java

@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "运行中心 - 模型分页 Request VO")
@Data
@ExcelIgnoreUnannotated
public class ModelRespVO {
@Schema(description = "模型id", example = "id")
private String id;
@Schema(description = "模型名称", example = "yudao")
private String modelName;
/**
* 机组名称
*/
@Schema(description = "机组id", example = "1")
private String unitId;
/**
* 机组名称
*/
@Schema(description = "机组名称", example = "yudao")
private String unitName;
/**
* 算法名称
*/
@Schema(description = "算法名称-简写", example = "yudao")
private String algorithmName;
/**
* 模型信息
*/
@Schema(description = "模型信息-长字符串", example = "yudao")
private String modelInfo;
}

47
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelSelectQuery.java

@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import lombok.Data;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 13:25
*/
@Data
public class ModelSelectQuery {
/**
* 机组id
*/
private Integer unitId;
/**
* 系统id
*/
private Integer typeId;
/**
* 子系统id
*/
private Integer systemId;
/**
* 名称
*/
private String name;
/**
* @see seu.powersis.alert.common.enums.ModelStatus
* 模型状态
*/
private Integer status;
/**
* @see seu.powersis.alert.common.enums.ModelTrash
* 可见状态
*/
private Integer visible;
/**
* @see seu.powersis.alert.common.enums.ModelTrash
* 删除状态
*/
private Integer trash;
}

47
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelSimpleVO.java

@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import java.util.Date;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 13:08
*/
@Data
@Builder
@ToString
@AllArgsConstructor
public class ModelSimpleVO {
/**
* 模型id
*/
private Integer id;
/**
* 模型名称
*/
private String name;
/**
* 算法名称
*/
private String algorithm;
/**
* 创建人
*/
private String creator;
/**
* 模型状态
*/
private Integer status;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}

16
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelVersionPageReqVO.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "运行中心 - 模型版本 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class ModelVersionPageReqVO extends PageParam {
@Schema(description = "模型id", example = "modelId")
private String modelId;
}

22
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelVersionRespVO.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "运行中心 - 模型分页 Request VO")
@Data
@ExcelIgnoreUnannotated
public class ModelVersionRespVO {
@Schema(description = "版本id", example = "id")
private Long id;
@Schema(description = "所属模型id", example = "id")
private Long modelId;
@Schema(description = "模型版本名称", example = "yudao")
private String version;
}

59
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/PointVO.java

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import java.math.BigDecimal;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 22:48
*/
@Data
@Builder
@ToString
@AllArgsConstructor
public class PointVO {
/**
* 系统名称
*/
private String systemName;
/**
* 目标点号
*/
private String targetPoint;
/**
* 描述
*/
private String description;
/**
* 单位
*/
private String unit;
/**
* 类型
*/
private String marktype;
/**
* 上限
*/
private BigDecimal upperlimit;
/**
* 下限
*/
private BigDecimal lowerlimit;
/**
* 网格数
*/
private Integer gridNumber;
}

134
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/RunModelInfoVO.java

@ -0,0 +1,134 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
public class RunModelInfoVO {
public Para_ch_instant para;
@JsonProperty(value="alarmmodelset")
public alarmmodelset alarmmodelset;
@Data
@NoArgsConstructor
public static class alarmmodelset
{
@JsonProperty(value="alarmname")
public String alarmname;
@JsonProperty(value="alarmcondition")
public String alarmcondition;
}
@Data
@NoArgsConstructor
public static class Para_ch_instant
{
/// <summary>
///
/// </summary>
@JsonProperty(value="Model_info")
public Model_info_ch_instant Model_info;
@JsonProperty(value="limit")
public double limit;
}
@Data
@NoArgsConstructor
public static class Model_info_ch_instant
{
/// <summary>
///
/// </summary>
@JsonProperty(value="QCUL_95")
public Double QCUL_95;
/// <summary>
///
/// </summary>
@JsonProperty(value="QCUL_99")
public Double QCUL_99 ;
/// <summary>
///
/// </summary>
@JsonProperty(value="QCUL_95_line")
public List<Double> QCUL_95_line;
/// <summary>
///
/// </summary>
@JsonProperty(value="QCUL_99_line")
public List<Double> QCUL_99_line ;
/// <summary>
///
/// </summary>
@JsonProperty(value="T2CUL_95")
public Double T2CUL_95 ;
/// <summary>
///
/// </summary>
@JsonProperty(value="T2CUL_99")
public Double T2CUL_99;
/// <summary>
///
/// </summary>
@JsonProperty(value="T2CUL_95_line")
public List<Double> T2CUL_95_line;
/// <summary>
///
/// </summary>
@JsonProperty(value="T2CUL_99_line")
public List<Double> T2CUL_99_line;
/// <summary>
///
/// </summary>
@JsonProperty(value="Kesi_95")
public Double Kesi_95;
/// <summary>
///
/// </summary>
@JsonProperty(value="Kesi_99")
public Double Kesi_99 ;
/// <summary>
///
/// </summary>
@JsonProperty(value="Kesi_95_line")
public List<Double> Kesi_95_line ;
/// <summary>
///
/// </summary>
@JsonProperty(value="Kesi_99_line")
public List<Double> Kesi_99_line;
/// <summary>
///
/// </summary>
@JsonProperty(value="COV")
public List<List<Double>> COV ;
/// <summary>
///
/// </summary>
@JsonProperty(value="K")
public int K ;
/// <summary>
///
/// </summary>
@JsonProperty(value="R")
public Double R ;
}
}

16
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/TimeRange.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import lombok.Data;
import java.util.Date;
/**
* @author chenjiale
* @version 1.0
* @date 2023-09-15 22:33
*/
@Data
public class TimeRange {
private Date st;
private Date et;
}

56
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/system/SelectController.java

@ -0,0 +1,56 @@
package cn.iocoder.yudao.module.alert.controller.admin.system;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.OptionItemVO;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.SelectQuery;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.PointOptionItemVO;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.SelectAllOptionVO;
import cn.iocoder.yudao.module.alert.service.exa.EXAService;
import cn.iocoder.yudao.module.alert.service.system.SelectService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-16 22:37
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/alert/select")
public class SelectController {
/**
* 查询条件不能含有这个,否则exa会挂掉
*/
private static final String EXA_NOT_SUPPORT_STR = "'";
private final SelectService selectService;
private final EXAService exaService;
@GetMapping("list")
public CommonResult<SelectAllOptionVO> getAllOptions() {
SelectAllOptionVO allOptions = selectService.getAllOptions();
return CommonResult.success(allOptions);
}
@GetMapping("/system/options")
public CommonResult<List<OptionItemVO>> getTypeOptions(@Valid SelectQuery query) {
List<OptionItemVO> systemOptions = selectService.getSystemOptions(query);
return CommonResult.success(systemOptions);
}
@GetMapping("/point/options")
public CommonResult<List<PointOptionItemVO>> getPointOptions(String keyword) {
List<PointOptionItemVO> pointOptionList = new ArrayList<>();
if (StringUtils.hasText(keyword) && !keyword.contains(EXA_NOT_SUPPORT_STR)) {
pointOptionList = exaService.getPointOptionList(keyword);
}
return CommonResult.success(pointOptionList);
}
}

26
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/system/vo/OptionItemVO.java

@ -0,0 +1,26 @@
package cn.iocoder.yudao.module.alert.controller.admin.system.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-16 22:39
*/
@Data
@Builder
@ToString
@AllArgsConstructor
public class OptionItemVO {
/**
* id
*/
private Integer id;
/**
* 名称
*/
private String name;
}

21
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/system/vo/PointOptionItemVO.java

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.alert.controller.admin.system.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-20 20:55
*/
@Data
@Builder
@ToString
@AllArgsConstructor
public class PointOptionItemVO {
private String id;
private String name;
}

32
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/system/vo/SelectAllOptionVO.java

@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.alert.controller.admin.system.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import java.util.List;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-16 22:38
*/
@Data
@Builder
@ToString
@AllArgsConstructor
public class SelectAllOptionVO {
/**
* 机组选项
*/
private List<OptionItemVO> units;
/**
* 系统选项
*/
private List<OptionItemVO> types;
/**
* 子系统选项
*/
private List<OptionItemVO> systems;
}

18
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/system/vo/SelectQuery.java

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.alert.controller.admin.system.vo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-17 23:48
*/
@Data
public class SelectQuery {
@NotNull
private Integer unitId;
@NotNull
private Integer typeId;
}

16
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/vo/WarnPageReqVO.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.alert.controller.admin.warn.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "运行中心 - 预警分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class WarnPageReqVO extends PageParam {
@Schema(description = "实例id", example = "id")
private Long mpId;
}

89
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/vo/WarnRespVO.java

@ -0,0 +1,89 @@
package cn.iocoder.yudao.module.alert.controller.admin.warn.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "运行中心 - 预警分页 Request VO")
@Data
@ExcelIgnoreUnannotated
public class WarnRespVO {
@Schema(description = "预警id", example = "id")
private Long id;
@Schema(description = "实例id", example = "id")
private Long mpId;
@Schema(description = "点号", example = "id")
private String pointId;
@Schema(description = "点号描述", example = "id")
private String pointName;
@Schema(description = "实例名称", example = "id")
private String mpName;
private String unit;
private Long alarmLevel;
//报警类型
private String alarmModelRuleName;
private String warnConstraint;
private String warnConstraintName;
private String timeDurationThreshold;
//短信开关
private Long shortMessageOnOff;
//光字牌
private Long gzpOnOff;
private String gzpName;
//推送诊断
private Long copyToDiagOnOff;
//已有实例数量
private Long number;
//参与报警
private Long warnStatus;
private Double uplimit;
private Double lowlimit;
private String systemName;
/**
* 创建者-名称
*
*
*/
private String createName;
/**
* 更新者-名称
*
*
*/
private String updateName;
}

50
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/vo/WarnSaveReqVO.java

@ -0,0 +1,50 @@
package cn.iocoder.yudao.module.alert.controller.admin.warn.vo;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.InstantInfoVO;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.mzt.logapi.starter.annotation.DiffLogField;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.util.List;
@Schema(description = "运行中心 - 预警创建/更新 Request VO")
@Data
public class WarnSaveReqVO {
@Schema(description = "预警编号", example = "1")
@NotNull(message = "预警编号不能为空")
private Long id;
@Schema(description = "参与报警", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@DiffLogField(name = "参与报警")
private Long warnStatus;
private Long timeDurationThreshold;
private Long alarmLevel;
private String warnConstraint;
private String warnConstraintName;
//短信开关
private Long shortMessageOnOff;
//光字牌
private Long gzpOnOff;
private String gzpName;
//推送诊断
private Long copyToDiagOnOff;
//已有实例数量
private Long number;
private Double uplimit;
private Double lowlimit;
}

59
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/warnController.java

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.alert.controller.admin.warn;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.InstantPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.InstantRespVO;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.InstantSaveReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.warn.vo.WarnPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.warn.vo.WarnRespVO;
import cn.iocoder.yudao.module.alert.controller.admin.warn.vo.WarnSaveReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnDO;
import cn.iocoder.yudao.module.alert.service.instant.InstantService;
import cn.iocoder.yudao.module.alert.service.warn.WarnService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "运行中心 - 预警")
@RestController
@RequestMapping("/alert/warn")
@Validated
public class warnController {
@Resource
private WarnService warnService;
@GetMapping("/page")
@Operation(summary = "获得预警分页列表")
@PreAuthorize("@ss.hasPermission('run:warn:query')")
public CommonResult<PageResult<WarnRespVO>> getInstantPage(@Valid WarnPageReqVO pageReqVO) {
PageResult<WarnDO> pageResult = warnService.getWarnPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, WarnRespVO.class));
}
@GetMapping("/get")
@Operation(summary = "获得预警信息")
@PreAuthorize("@ss.hasPermission('run:warn:query')")
public CommonResult<WarnRespVO> getWarn(@RequestParam("id") Long id) {
WarnDO warn = warnService.getWarn(id);
return success(BeanUtils.toBean(warn, WarnRespVO.class));
}
@PutMapping("/update")
@Operation(summary = "修改预警")
@PreAuthorize("@ss.hasPermission('run:warn:update')")
public CommonResult<Boolean> updateInstant(@Valid @RequestBody WarnSaveReqVO updateReqVO) {
warnService.updateWarn(updateReqVO);
return success(true);
}
}

24
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/calcgroup/CalcGroupDO.java

@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.calcgroup;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@TableName(value = "group_view", autoResultMap = true)
@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
public class CalcGroupDO extends BaseDO {
private String id;
/**
* 计算组名称
*/
private String groupName;
/**
* 机组id
*/
private String unitId;
}

83
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/instant/InstantDO.java

@ -0,0 +1,83 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.instant;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.InstantInfoVO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
import java.util.List;
@TableName(value = "instant_view", autoResultMap = true)
@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
public class InstantDO extends BaseDO {
private Long id;
private Long modelId;
private String mpName;
private String instantInfo;
private Long intervalTime;
private Long hisSto;
private Long visible;
private Long status;
private LocalDateTime setupTime;
private LocalDateTime newestUpdateTime;
private Long running;
private String runningLog;
private Long calcGroup;
private Long modelVersionId;
private Long isUpdate;
//所用模型的信息-json字符串
private String modelInfo;
//视图额外增加的字段
private String conditionInfo;
private String groupName;
private String modelName;
private String algorithmShortname;
private String algorithmName;
private String areaId;
private String plantShortname;
private String plantName;
private String areaShortname;
private String areaName;
private String unitShortname;
private String unitName;
private Long plantId;
private String systemTypeShortname;
private String systemTypeName;
private Long unitId;
private Long systemTypeId;
private String systemShortname;
private String systemName;
private Long algorithmId;
private Long systemId;
private String conditionName;
private String createName;
private String updateName;
}

58
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/instant/InstantTableDO.java

@ -0,0 +1,58 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.instant;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
@TableName(value = "instant_cfg", autoResultMap = true)
@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
public class InstantTableDO extends BaseDO {
private Long id;
private Long modelId;
private String mpName;
private String instantInfo;
private Long intervalTime;
private Long hisSto;
private Long visible;
private Long status;
private LocalDateTime setupTime;
private LocalDateTime newestUpdateTime;
private Long running;
private String runningLog;
private Long calcGroup;
private String modelVersionId;
private Long isUpdate;
//所用模型的信息-json字符串
private String modelInfo;
private String createName;
private String updateName;
}

50
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/model/ModelDO.java

@ -0,0 +1,50 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.model;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
@TableName(value = "model_view", autoResultMap = true)
@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
public class ModelDO extends BaseDO {
private String id;
/**
* 专业名称
*/
private String systemId;
private String algorithmId;
/**
* 模型名称
*/
private String modelName;
/**
* 机组id
*/
private String unitId;
/**
* 机组名称
*/
private String unitName;
/**
* 算法名称
*/
private String algorithmName;
/**
* 模型信息
*/
private String modelInfo;
}

21
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/model/ModelVersionDO.java

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.model;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@TableName(value = "model_version", autoResultMap = true)
@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
public class ModelVersionDO extends BaseDO {
private String id;
private String modelId;
private String version;
}

68
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/warn/WarnDO.java

@ -0,0 +1,68 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.warn;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
@TableName(value = "warn_online_cfg_view", autoResultMap = true)
@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
public class WarnDO extends BaseDO {
private Long id;
private Long mpId;
private String pointId;
private String pointName;
private String mpName;
private String formula;
private String unit;
//报警类型-id
private Long alarmLevel;
//报警类型
private String alarmModelRuleName;
private String warnConstraint;
private String warnConstraintName;
private Long timeDurationThreshold;
//短信开关
private Long shortMessageOnOff;
//光字牌
private Long gzpOnOff;
private String gzpName;
//推送诊断
private Long copyToDiagOnOff;
//已有实例数量
private Long number;
//参与报警
private Long warnStatus;
private Double uplimit;
private Double lowlimit;
private String systemName;
private String createName;
private String updateName;
}

60
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/warn/WarnTableDO.java

@ -0,0 +1,60 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.warn;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
@TableName(value = "warn_online_cfg", autoResultMap = true)
@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
public class WarnTableDO extends BaseDO {
private Long id;
private Long mpId;
private String pointId;
private String pointName;
private String mpName;
private String formula;
private String unit;
//报警类型
private String modelOrRule;
private String warnConstraint;
private String warnConstraintName;
private Long alarmLevel;
private Long timeDurationThreshold;
//短信开关
private Long shortMessageOnOff;
//光字牌
private Long gzpOnOff;
private String gzpName;
//推送诊断
private Long copyToDiagOnOff;
//参与报警
private Long warnStatus;
private Double uplimit;
private Double lowlimit;
}

22
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/calcgroup/CalcGroupMapper.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.dal.mysql.calcgroup;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.alert.controller.admin.calcgroup.vo.CalcGroupPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.calcgroup.CalcGroupDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelVersionDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CalcGroupMapper extends BaseMapperX<CalcGroupDO> {
default PageResult<CalcGroupDO> selectPage(CalcGroupPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<CalcGroupDO>()
.eqIfPresent(CalcGroupDO::getUnitId, reqVO.getUnitId())
.orderByAsc(CalcGroupDO::getId));
}
}

33
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java

@ -0,0 +1,33 @@
package cn.iocoder.yudao.module.alert.dal.mysql.instant;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.InstantPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface InstantMapper extends BaseMapperX<InstantDO> {
default PageResult<InstantDO> selectPage(InstantPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<InstantDO>()
.likeIfPresent(InstantDO::getMpName, reqVO.getMpName())
.eqIfPresent(InstantDO::getIsUpdate,reqVO.getIsUpdate())
.eqIfPresent(InstantDO::getRunning,reqVO.getRunning())
.eqIfPresent(InstantDO::getRunningLog,reqVO.getRunningLog())
.orderByAsc(InstantDO::getId));
}
default Long selectCountByRunningLog(String runningLog){
return selectCount(InstantDO::getRunningLog,runningLog);
}
default Long selectCountByRunning(Long running){
return selectCount(InstantDO::getRunning,running);
}
default Long selectCountByIsUpdate(Long isUpdate){
return selectCount(InstantDO::getIsUpdate,isUpdate);
}
}

10
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantTableMapper.java

@ -0,0 +1,10 @@
package cn.iocoder.yudao.module.alert.dal.mysql.instant;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantTableDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface InstantTableMapper extends BaseMapperX<InstantTableDO> {
}

20
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/model/ModelMapper.java

@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.alert.dal.mysql.model;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ModelMapper extends BaseMapperX<ModelDO> {
default PageResult<ModelDO> selectPage(ModelPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ModelDO>()
.likeIfPresent(ModelDO::getModelName, reqVO.getModelName())
.orderByAsc(ModelDO::getId));
}
}

23
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/model/ModelVersionMapper.java

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.alert.dal.mysql.model;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionRespVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelVersionDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ModelVersionMapper extends BaseMapperX<ModelVersionDO> {
default PageResult<ModelVersionDO> selectPage(ModelVersionPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ModelVersionDO>()
.eqIfPresent(ModelVersionDO::getModelId, reqVO.getModelId())
.orderByAsc(ModelVersionDO::getId));
}
}

20
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/warn/WarnMapper.java

@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.alert.dal.mysql.warn;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.InstantPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.warn.vo.WarnPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface WarnMapper extends BaseMapperX<WarnDO> {
default PageResult<WarnDO> selectPage(WarnPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<WarnDO>()
.likeIfPresent(WarnDO::getMpId, reqVO.getMpId().toString())
.orderByAsc(WarnDO::getId));
}
}

9
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/warn/WarnTableMapper.java

@ -0,0 +1,9 @@
package cn.iocoder.yudao.module.alert.dal.mysql.warn;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnTableDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface WarnTableMapper extends BaseMapperX<WarnTableDO> {
}

53
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/ModelCfg.java

@ -0,0 +1,53 @@
package cn.iocoder.yudao.module.alert.dao.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @TableName model_cfg
*/
@TableName(value = "model_cfg")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ModelCfg implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private Integer systemId;
private Integer algorithmId;
private String modelName;
private Date creatTime;
private String creatName;
private String modelInfo;
private Integer status;
private Integer visible;
private String conditionInfo;
private Integer trash;
private String assessRes;
private Integer needToAssess;
private Double score;
private String clearOrNot;
private Integer effNumber;
private Integer needToClean;
private String origAssessRes;
private Double loadCover;
private String coverOutput;
private String curVersion;
private String modelVersion;
private String versionInfo;
private String conditionName;
private Integer isOnline;
private Integer trainStatus;
private String creator;
private Date createTime;
private String updater;
private Date updateTime;
private Boolean deleted;
}

34
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/SystemCfg.java

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.alert.dao.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* @TableName system_cfg
*/
@TableName(value ="system_cfg")
@Data
public class SystemCfg implements Serializable {
private Integer systemId;
private Integer systemTypeId;
private String systemName;
private String systemShortname;
private Integer unitId;
private String resetpoint;
private Date resettime;
private String resetlist;
private static final long serialVersionUID = 1L;
}

23
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/SystemTypeCfg.java

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.alert.dao.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
/**
* @TableName system_type_cfg
*/
@TableName(value ="system_type_cfg")
@Data
public class SystemTypeCfg implements Serializable {
private Integer systemTypeId;
private String systemTypeName;
private String systemTypeShortname;
private static final long serialVersionUID = 1L;
}

41
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/UnitCfg.java

@ -0,0 +1,41 @@
package cn.iocoder.yudao.module.alert.dao.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
/**
* @TableName unit_cfg
*/
@TableName(value ="unit_cfg")
@Data
public class UnitCfg implements Serializable {
private Integer unitId;
private Integer plantId;
private String unitName;
private String unitShortname;
private String alertBasicSample;
private String loadpoint;
private String temppoint;
private Integer capacity;
private String zqylqx;
private String zqylMeasured;
private String zqylTarget;
private String datas;
private static final long serialVersionUID = 1L;
}

18
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/ModelCfgMapper.java

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.alert.dao.mapper;
import cn.iocoder.yudao.module.alert.dao.domain.ModelCfg;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author 陈小黑
* @description 针对表model_cfg的数据库操作Mapper
* @createDate 2025-05-22 15:45:38
* @Entity cn.iocoder.yudao.module.alert.dao.domain.ModelCfg
*/
public interface ModelCfgMapper extends BaseMapper<ModelCfg> {
}

18
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/SystemCfgMapper.java

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.alert.dao.mapper;
import cn.iocoder.yudao.module.alert.dao.domain.SystemCfg;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author 陈小黑
* @description 针对表system_cfg的数据库操作Mapper
* @createDate 2025-05-21 16:10:38
* @Entity cn.iocoder.yudao.module.alert.dao.domain.SystemCfg
*/
public interface SystemCfgMapper extends BaseMapper<SystemCfg> {
}

18
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/SystemTypeCfgMapper.java

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.alert.dao.mapper;
import cn.iocoder.yudao.module.alert.dao.domain.SystemTypeCfg;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author 陈小黑
* @description 针对表system_type_cfg的数据库操作Mapper
* @createDate 2025-05-21 16:10:57
* @Entity cn.iocoder.yudao.module.alert.dao.domain.SystemTypeCfg
*/
public interface SystemTypeCfgMapper extends BaseMapper<SystemTypeCfg> {
}

18
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/UnitCfgMapper.java

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.alert.dao.mapper;
import cn.iocoder.yudao.module.alert.dao.domain.UnitCfg;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author 陈小黑
* @description 针对表unit_cfg的数据库操作Mapper
* @createDate 2025-05-21 16:07:43
* @Entity cn.iocoder.yudao.module.alert.dao.domain.UnitCfg
*/
public interface UnitCfgMapper extends BaseMapper<UnitCfg> {
}

13
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/ModelCfgService.java

@ -0,0 +1,13 @@
package cn.iocoder.yudao.module.alert.dao.service;
import cn.iocoder.yudao.module.alert.dao.domain.ModelCfg;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author 陈小黑
* @description 针对表model_cfg的数据库操作Service
* @createDate 2025-05-22 15:45:38
*/
public interface ModelCfgService extends IService<ModelCfg> {
}

13
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/SystemCfgService.java

@ -0,0 +1,13 @@
package cn.iocoder.yudao.module.alert.dao.service;
import cn.iocoder.yudao.module.alert.dao.domain.SystemCfg;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author 陈小黑
* @description 针对表system_cfg的数据库操作Service
* @createDate 2025-05-21 16:10:38
*/
public interface SystemCfgService extends IService<SystemCfg> {
}

13
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/SystemTypeCfgService.java

@ -0,0 +1,13 @@
package cn.iocoder.yudao.module.alert.dao.service;
import cn.iocoder.yudao.module.alert.dao.domain.SystemTypeCfg;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author 陈小黑
* @description 针对表system_type_cfg的数据库操作Service
* @createDate 2025-05-21 16:10:57
*/
public interface SystemTypeCfgService extends IService<SystemTypeCfg> {
}

13
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/UnitCfgService.java

@ -0,0 +1,13 @@
package cn.iocoder.yudao.module.alert.dao.service;
import cn.iocoder.yudao.module.alert.dao.domain.UnitCfg;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author 陈小黑
* @description 针对表unit_cfg的数据库操作Service
* @createDate 2025-05-21 16:07:43
*/
public interface UnitCfgService extends IService<UnitCfg> {
}

22
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/ModelCfgServiceImpl.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.dao.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.iocoder.yudao.module.alert.dao.domain.ModelCfg;
import cn.iocoder.yudao.module.alert.dao.service.ModelCfgService;
import cn.iocoder.yudao.module.alert.dao.mapper.ModelCfgMapper;
import org.springframework.stereotype.Service;
/**
* @author 陈小黑
* @description 针对表model_cfg的数据库操作Service实现
* @createDate 2025-05-22 15:45:38
*/
@Service
public class ModelCfgServiceImpl extends ServiceImpl<ModelCfgMapper, ModelCfg>
implements ModelCfgService{
}

22
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/SystemCfgServiceImpl.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.dao.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.iocoder.yudao.module.alert.dao.domain.SystemCfg;
import cn.iocoder.yudao.module.alert.dao.service.SystemCfgService;
import cn.iocoder.yudao.module.alert.dao.mapper.SystemCfgMapper;
import org.springframework.stereotype.Service;
/**
* @author 陈小黑
* @description 针对表system_cfg的数据库操作Service实现
* @createDate 2025-05-21 16:10:38
*/
@Service
public class SystemCfgServiceImpl extends ServiceImpl<SystemCfgMapper, SystemCfg>
implements SystemCfgService{
}

22
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/SystemTypeCfgServiceImpl.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.dao.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.iocoder.yudao.module.alert.dao.domain.SystemTypeCfg;
import cn.iocoder.yudao.module.alert.dao.service.SystemTypeCfgService;
import cn.iocoder.yudao.module.alert.dao.mapper.SystemTypeCfgMapper;
import org.springframework.stereotype.Service;
/**
* @author 陈小黑
* @description 针对表system_type_cfg的数据库操作Service实现
* @createDate 2025-05-21 16:10:57
*/
@Service
public class SystemTypeCfgServiceImpl extends ServiceImpl<SystemTypeCfgMapper, SystemTypeCfg>
implements SystemTypeCfgService{
}

22
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/UnitCfgServiceImpl.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.dao.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.iocoder.yudao.module.alert.dao.domain.UnitCfg;
import cn.iocoder.yudao.module.alert.dao.service.UnitCfgService;
import cn.iocoder.yudao.module.alert.dao.mapper.UnitCfgMapper;
import org.springframework.stereotype.Service;
/**
* @author 陈小黑
* @description 针对表unit_cfg的数据库操作Service实现
* @createDate 2025-05-21 16:07:43
*/
@Service
public class UnitCfgServiceImpl extends ServiceImpl<UnitCfgMapper, UnitCfg>
implements UnitCfgService{
}

21
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/calcgroup/CalcGroupService.java

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.alert.service.calcgroup;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.calcgroup.vo.CalcGroupPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.calcgroup.CalcGroupDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelVersionDO;
public interface CalcGroupService {
/**
* 获得计算组不分页-主要用于下拉框
*
* @param ReqVO 计算组查询
* @return 计算组查询结果
*/
PageResult<CalcGroupDO> getCalcGroupPage(CalcGroupPageReqVO ReqVO);
}

31
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/calcgroup/CalcGroupServiceImpl.java

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.alert.service.calcgroup;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.calcgroup.vo.CalcGroupPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.calcgroup.CalcGroupDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelVersionDO;
import cn.iocoder.yudao.module.alert.dal.mysql.calcgroup.CalcGroupMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.model.ModelMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.model.ModelVersionMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class CalcGroupServiceImpl implements CalcGroupService {
@Resource
private CalcGroupMapper calcGroupMapper;
@Override
public PageResult<CalcGroupDO> getCalcGroupPage (CalcGroupPageReqVO reqVO) {
return calcGroupMapper.selectPage(reqVO);
}
}

7
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAService.java

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.alert.service.exa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.*;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.PointOptionItemVO;
import java.io.IOException;
import java.net.URISyntaxException;
@ -23,9 +24,9 @@ public interface EXAService {
List<EXAHttp> getEXAListNow(List<EXAHttp> list) throws URISyntaxException, IOException;
String getEXANow(String itemName) throws URISyntaxException, IOException;
List<String> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo);
List<List<Double>> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo);
List<List<String>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo);
List<List<List<Double>>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo);
String createPoint(Point pointVo) throws IOException;
@ -33,4 +34,6 @@ public interface EXAService {
public String deletePoint(String ItemName);
EXAPointImportRespVO importPointList(List<Point> importPoints, boolean isUpdateSupport);
List<PointOptionItemVO> getPointOptionList(String search);
}

45
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAServiceImpl.java

@ -1,36 +1,22 @@
package cn.iocoder.yudao.module.alert.service.exa;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.*;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.PointOptionItemVO;
import cn.iocoder.yudao.module.alert.utils.EXAUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import java.io.IOException;
import java.lang.reflect.Type;
import java.net.URISyntaxException;
import java.util.*;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.alert.utils.PageUtils.getPartList;
@ -40,6 +26,11 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
@Validated
@Slf4j
public class EXAServiceImpl implements EXAService {
private static final String EXA_SEARCH_FORMATTER = "ItemName like'%%%s%%' or Descriptor like '%%%s%%'";
private static final String EXA_SEARCH_KEY = "WhereClause";
private static final String ID_SPLIT = "|";
EXAUtils exaUtils = new EXAUtils();
@ -78,12 +69,12 @@ public class EXAServiceImpl implements EXAService {
}
@Override
public List<String> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo) {
public List<List<Double>> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo) {
return exaUtils.getHistory(EXA_IP,exaHistoryReqVo);
}
@Override
public List<List<String>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo) {
public List<List<List<Double>>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo) {
return exaUtils.getHistorys(EXA_IP,exaHistoryReqVo);
}
@ -126,4 +117,22 @@ public class EXAServiceImpl implements EXAService {
return respVO;
}
@Override
public List<PointOptionItemVO> getPointOptionList(String search) {
try {
List<EXAHttp> points = exaUtils.getPointInfo(EXA_IP, new EXAPageReqVO(search));
return points.stream().map(p -> PointOptionItemVO.builder()
.id(p.getDescriptor() + ID_SPLIT +
p.getItemName() + ID_SPLIT +
p.getEngUnits() + ID_SPLIT +
p.getUpperLimit() + ID_SPLIT +
p.getLowerLimit())
.name(p.getDescriptor() + " (" + p.getItemName() + ")")
.build())
.collect(Collectors.toList());
} catch (Exception e) {
log.error("获取exa异常:{}", search, e);
}
return new ArrayList<>();
}
}

57
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantService.java

@ -0,0 +1,57 @@
package cn.iocoder.yudao.module.alert.service.instant;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAHistoryReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.*;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import jakarta.validation.Valid;
import java.io.IOException;
import java.util.List;
public interface InstantService {
/**
* 获得模型实例分页
*
* @param reqVO 模型实例分页查询
* @return 模型实例分页结果
*/
PageResult<InstantDO> getInstantPage(InstantPageReqVO reqVO);
/**
* 获得模型实例所用测点信息
*
* @param id 模型实例的id
* @return 模型实例测点列表结果list
*/
List<InstantPointRespVO> getInstantPoint(Long id);
List<InstantChartRespVO> getInstantChart(InstantChartReqVO instantChartReqVO);
InstantDO getInstant(Long id);
/**
* 更新模型实例
*
* @param updateReqVO 更新模型实例
*/
void updateInstant(@Valid InstantSaveReqVO updateReqVO);
/**
* 获取各状态的模型实例数量
*
* @param
*/
InstantCountRespVO getInstantCount();
/**
* 创建实例
*
* @param createReqVO 创建实例信息
* @param type 实例类型--目前用不到
* @return 实例编号
*/
List<String> createInstant(@Valid InstantSaveReqVO createReqVO, Integer type) throws IOException;
}

372
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java

@ -0,0 +1,372 @@
package cn.iocoder.yudao.module.alert.service.instant;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.Point;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.*;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.RunModelInfoVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantTableDO;
import cn.iocoder.yudao.module.alert.dal.mysql.instant.InstantMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.instant.InstantTableMapper;
import cn.iocoder.yudao.module.alert.utils.EXAUtils;
import com.google.common.annotations.VisibleForTesting;
import com.mzt.logapi.context.LogRecordContext;
import com.mzt.logapi.service.impl.DiffParseFunction;
import com.mzt.logapi.starter.annotation.LogRecord;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.*;
@Service
@Slf4j
public class InstantServiceImpl implements InstantService {
@Resource
private InstantMapper instantMapper;
@Resource
private InstantTableMapper instantTableMapper;
EXAUtils exaUtils = new EXAUtils();
@Value("${point.head}")
private String HEAD;
@Value("${EXA.ip}")
private String EXA_IP;
@Override
@Transactional(rollbackFor = Exception.class)
@LogRecord(type = SYSTEM_INSTANT_TYPE, subType = SYSTEM_INSTANT_CREATE_SUB_TYPE, bizNo = "{{#role.id}}",
success = SYSTEM_INSTANT_CREATE_SUCCESS)
public List<String> createInstant(InstantSaveReqVO createReqVO, Integer type) throws IOException {
// 1. 校验角色
// validateRoleDuplicate(createReqVO.getName(), createReqVO.getCode(), null);
//插入除instantInfo外的所有数据,获取到id
// 2. 插入到数据库-status、visible默认值
InstantTableDO instant = BeanUtils.toBean(createReqVO, InstantTableDO.class)
.setStatus(ObjUtil.defaultIfNull(createReqVO.getStatus(), 1L))
.setVisible(ObjUtil.defaultIfNull(createReqVO.getVisible(), 1L));
instantTableMapper.insert(instant);
// 3. 记录操作日志上下文
LogRecordContext.putVariable("instant", instant);
Long insertId = instant.getId();
//处理数据
// inputInfo 各种转换
List<pointInfo> pointInfoList = createReqVO.getPointInfo();
System.out.println(pointInfoList);
List<String> inputInfoList = new ArrayList<>();
List<String> inputNameList = new ArrayList<>();
List<String> unitList = new ArrayList<>();
List<String> outPointInfoList = new ArrayList<>();
List<String> timePointInfoList = new ArrayList<>();
List<String> biasPointInfoList = new ArrayList<>();
List<String> faultVariablePointList = new ArrayList<>();
List<Point> InstantPointList = new ArrayList<>();
Point point = new Point();
String outpoint = "";
for (Integer i = 0; i < pointInfoList.size(); i++) {
inputInfoList.add(pointInfoList.get(i).getPointId());
inputNameList.add(pointInfoList.get(i).getDescription());
unitList.add(pointInfoList.get(i).getUnit());
if (Objects.isNull(pointInfoList.get(i).getType()) || pointInfoList.get(i).getType().equals("1")) {
//构建重构值对象
outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "R";
point = new Point();
point.setGroupName("warn");
outPointInfoList.add(outpoint);
point.setItemName(outpoint);
point.setDescriptor(pointInfoList.get(i).getDescription() + "_重构值");
point.setEngUnits(pointInfoList.get(i).getUnit());
point.setItemType(5);
InstantPointList.add(point);
//构建时间值对象
outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "T";
point = new Point();
point.setGroupName("warn");
timePointInfoList.add(outpoint);
point.setItemName(outpoint);
point.setDescriptor(pointInfoList.get(i).getDescription() + "_时间值");
point.setEngUnits(pointInfoList.get(i).getUnit());
point.setItemType(5);
InstantPointList.add(point);
//构建偏差值对象
outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "B";
point = new Point();
point.setGroupName("warn");
biasPointInfoList.add(outpoint);
point.setItemName(outpoint);
point.setDescriptor(pointInfoList.get(i).getDescription() + "_偏差值");
point.setEngUnits(pointInfoList.get(i).getUnit());
point.setItemType(5);
InstantPointList.add(point);
//构建状态值对象
outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "F";
point = new Point();
point.setGroupName("warn");
faultVariablePointList.add(outpoint);
point.setItemName(outpoint);
point.setDescriptor(pointInfoList.get(i).getDescription() + "_状态值");
point.setEngUnits(pointInfoList.get(i).getUnit());
point.setItemType(5);
InstantPointList.add(point);
} else {
outpoint = "";
outPointInfoList.add(outpoint);
timePointInfoList.add(outpoint);
biasPointInfoList.add(outpoint);
faultVariablePointList.add(outpoint);
}
}
createReqVO.setId(insertId);
createReqVO.setStatus(instant.getStatus());
createReqVO.setVisible(instant.getVisible());
createReqVO.setInputInfo(inputInfoList);
createReqVO.setInputName(inputNameList);
createReqVO.setUnit(unitList);
createReqVO.setOutPointInfo(outPointInfoList);
createReqVO.setTimePointInfo(timePointInfoList);
createReqVO.setBiasPointInfo(biasPointInfoList);
createReqVO.setFaultVariablePointInfo(faultVariablePointList);
//构建模型实例ste值-没有unit参数
outpoint = HEAD + "M" + String.format("%04d", insertId) + "_ste";
//赋值-createReqVO
createReqVO.setModel_state(outpoint);
point = new Point();
point.setGroupName("warn");
point.setItemName(outpoint);
point.setDescriptor(instant.getMpName() + "_残差值");
point.setItemType(5);
InstantPointList.add(point);
//构建模型实例状态值-没有unit参数
outpoint = HEAD + "M" + String.format("%04d", insertId) + "_status";
//赋值-createReqVO
createReqVO.setModel_status(outpoint);
point = new Point();
point.setGroupName("warn");
point.setItemName(outpoint);
point.setDescriptor(instant.getMpName() + "_状态值");
point.setItemType(5);
InstantPointList.add(point);
//更新instantInfo字段
InstantSaveReqVO updateReqVO = new InstantSaveReqVO();
updateReqVO.setId(instant.getId());
updateReqVO.setInstantInfo(JsonUtils.toJsonString(createReqVO));
updateInstant(updateReqVO);
List<String> resultList = new ArrayList<String>();
resultList.add(instant.getId().toString());
for (Point item : InstantPointList) {
// 每次循环输出list中的元素
System.out.println(item.toString());
//循环加点
String ss = exaUtils.setPoint(EXA_IP, item);
resultList.add(ss);
}
return resultList;
}
@Override
public List<InstantPointRespVO> getInstantPoint(Long id) {
List<InstantPointRespVO> instantPointList = new ArrayList<>();
InstantDO instant = instantMapper.selectById(id);
InstantInfoVO instantInfo = JsonUtils.parseObject(instant.getInstantInfo(), InstantInfoVO.class);
for (int i = 0; i < instantInfo.getInputInfo().size(); i++) {
InstantPointRespVO instantPointRespVO = new InstantPointRespVO();
instantPointRespVO.setId(Long.valueOf(i + 1));
instantPointRespVO.setInputInfo(instantInfo.getInputInfo().get(i));
instantPointRespVO.setInputName(instantInfo.getInputName().get(i));
instantPointRespVO.setUnit(instantInfo.getUnit().get(i));
instantPointRespVO.setOutPointInfo(instantInfo.getOutPointInfo().get(i));
instantPointRespVO.setBiasPointInfo(instantInfo.getBiasPointInfo().get(i));
instantPointRespVO.setFaultVariablePointInfo(instantInfo.getFaultVariablePointInfo().get(i));
instantPointList.add(instantPointRespVO);
}
return instantPointList;
}
@Override
public List<InstantChartRespVO> getInstantChart(InstantChartReqVO instantChartReqVO) {
List<InstantChartRespVO> result = new ArrayList<>();
InstantDO instant = getInstant(instantChartReqVO.getId());
//构造第一个图表数据
//获取数据库modelInfo字段,从而获取Kesi_99值
RunModelInfoVO runModelInfoVO = JsonUtils.parseObject(instant.getModelInfo(), RunModelInfoVO.class);
Double Kesi_99 = runModelInfoVO.getPara().getModel_info().getKesi_99();
//获取数据库instantInfo字段
InstantInfoVO instantInfoVO = JsonUtils.parseObject(instant.getInstantInfo(), InstantInfoVO.class);
instantChartReqVO.setItemName(instantInfoVO.getModel_state());
List<List<List<Double>>> modelStateHistory = exaUtils.getHistorys(EXA_IP, instantChartReqVO);
//构造Kesi_99常量值
List<List<Double>> Kesi_99List = new ArrayList<>();
InstantChartRespVO instantChartRespVO = new InstantChartRespVO();
for (int i = 0; i < modelStateHistory.get(0).size(); i++) {
List<Double> ke = new ArrayList<>();
ke.add(modelStateHistory.get(0).get(i).get(0));
ke.add(Kesi_99);
Kesi_99List.add(ke);
}
modelStateHistory.add(Kesi_99List);
instantChartRespVO.setSeriesData(modelStateHistory);
List<String> legendList = Arrays.asList("SPE", "残差阈值");
instantChartRespVO.setName(legendList);
instantChartRespVO.setTitle("模型残差");
result.add(instantChartRespVO);
//构造后面的图表数据
for (int i = 0; i < instantInfoVO.getInputInfo().size(); i++) {
instantChartRespVO = new InstantChartRespVO();
List<String> pointList = new ArrayList<>();
legendList = Arrays.asList("测量值", "重构值", "偏差值");
pointList.add(instantInfoVO.getInputInfo().get(i));
pointList.add(instantInfoVO.getOutPointInfo().get(i));
pointList.add(instantInfoVO.getBiasPointInfo().get(i));
//读历史
instantChartReqVO.setItemName(String.join(",", pointList));
// exaHistoryReqVo.setItemName(",10HAG10CL101_3S,10HAG04CT609");
List<List<List<Double>>> ss = exaUtils.getHistorys(EXA_IP, instantChartReqVO);
instantChartRespVO.setSeriesData(ss);
instantChartRespVO.setName(legendList);
instantChartRespVO.setTitle(instantInfoVO.getInputName().get(i));
result.add(instantChartRespVO);
}
return result;
}
@Override
public PageResult<InstantDO> getInstantPage(InstantPageReqVO reqVO) {
return instantMapper.selectPage(reqVO);
}
@Override
public InstantDO getInstant(Long id) {
return instantMapper.selectById(id);
}
@Override
@CacheEvict(value = RedisKeyConstants.INSTANT, key = "#updateReqVO.id")
@LogRecord(type = SYSTEM_INSTANT_TYPE, subType = SYSTEM_INSTANT_UPDATE_SUB_TYPE, bizNo = "{{#updateReqVO.id}}",
success = SYSTEM_INSTANT_UPDATE_SUCCESS)
public void updateInstant(InstantSaveReqVO updateReqVO) {
//为简单--省去检验步骤,之后根据情况增加
// 1.1 校验是否可以更新
InstantDO instant = validateRoleForUpdate(updateReqVO.getId());
// 1.2 校验角色的唯一字段是否重复
// validateRoleDuplicate(updateReqVO.getName(), updateReqVO.getCode(), updateReqVO.getId());
// 2. 更新到数据库
InstantTableDO updateObj = BeanUtils.toBean(updateReqVO, InstantTableDO.class);
instantTableMapper.updateById(updateObj);
// 3. 记录操作日志上下文
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(instant, InstantSaveReqVO.class));
LogRecordContext.putVariable("instant", instant);
}
/**
* 校验模型实例是否可以被更新
*
* @param id 角色编号
*/
@VisibleForTesting
InstantDO validateRoleForUpdate(Long id) {
InstantDO instant = instantMapper.selectById(id);
if (instant == null) {
throw exception(INSTANT_NOT_EXISTS);
}
return instant;
}
@Override
public InstantCountRespVO getInstantCount() {
InstantCountRespVO instantCountRespVO = new InstantCountRespVO();
instantCountRespVO.setOutside(instantMapper.selectCountByRunningLog("模式外运行"));
instantCountRespVO.setStop(instantMapper.selectCountByRunningLog("模型已停运"));
instantCountRespVO.setNormal(instantMapper.selectCountByRunningLog("运行正常"));
instantCountRespVO.setFailure(instantMapper.selectCountByRunning(0L));
instantCountRespVO.setUpdate(instantMapper.selectCountByIsUpdate(1L));
return instantCountRespVO;
}
// /**
// * 校验角色的唯一字段是否重复
// *
// * 1. 是否存在相同名字的角色
// * 2. 是否存在相同编码的角色
// *
// * @param name 角色名字
// * @param code 角色额编码
// * @param id 角色编号
// */
// @VisibleForTesting
// void validateRoleDuplicate(String name, String code, Long id) {
// // 0. 超级管理员,不允许创建
// if (RoleCodeEnum.isSuperAdmin(code)) {
// throw exception(ROLE_ADMIN_CODE_ERROR, code);
// }
// // 1. 该 name 名字被其它角色所使用
// RoleDO role = roleMapper.selectByName(name);
// if (role != null && !role.getId().equals(id)) {
// throw exception(ROLE_NAME_DUPLICATE, name);
// }
// // 2. 是否存在相同编码的角色
// if (!StringUtils.hasText(code)) {
// return;
// }
// // 该 code 编码被其它角色所使用
// role = roleMapper.selectByCode(code);
// if (role != null && !role.getId().equals(id)) {
// throw exception(ROLE_CODE_DUPLICATE, code);
// }
// }
}

26
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelDataService.java

@ -0,0 +1,26 @@
package cn.iocoder.yudao.module.alert.service.model;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelDataVO;
import java.util.Date;
import java.util.List;
/**
* @author chenjiale
* @version 1.0
* @date 2023-09-05 22:10
*/
public interface ModelDataService {
/**
* 获取模型数据
*
* @param modelId 模型id
* @param type 类型
* @param indexList 边界参数索引
* @param st 开始时间
* @param et 结束时间
* @return 模型数据
*/
ModelDataVO getModelData(Integer modelId, String type, List<Integer> indexList, Date st, Date et);
}

48
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelService.java

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.alert.service.model;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.CreateModelInfo;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelInfoVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSelectQuery;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSimpleVO;
import java.util.List;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 13:22
*/
public interface ModelService {
/**
* 获取模型列表
*
* @param query 请求参数
* @return model 列表
*/
List<ModelSimpleVO> getModelList(ModelSelectQuery query);
/**
* 获取模型信息
*
* @param id 模型id
* @return 模型信息
*/
ModelInfoVO getModelInfo(Integer id);
/**
* 新建模型
*
* @param model 模型参数
* @return 模型id
*/
Integer createModel(ModelInfoVO model);
/**
* 更新model info
*
* @param info 模型info
* @return 是否成功
*/
Boolean updateModelInfo(ModelInfoVO info);
}

27
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/RunModelService.java

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.alert.service.model;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelVersionDO;
public interface RunModelService {
/**
* 获得模型分页
*
* @param reqVO 模型分页查询
* @return 模型分页结果
*/
PageResult<ModelDO> getModelPage(ModelPageReqVO reqVO);
/**
* 获得模型版本不分页-主要用于下拉框
*
* @param versionReqVO 模型版本查询
* @return 模型版本结果
*/
PageResult<ModelVersionDO> getModelVersionPage(ModelVersionPageReqVO versionReqVO);
}

34
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/RunModelServiceImpl.java

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.alert.service.model;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelVersionDO;
import cn.iocoder.yudao.module.alert.dal.mysql.model.ModelMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.model.ModelVersionMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class RunModelServiceImpl implements RunModelService {
@Resource
private ModelMapper modelMapper;
@Resource
private ModelVersionMapper modelVersionMapper;
@Override
public PageResult<ModelDO> getModelPage(ModelPageReqVO reqVO) {
return modelMapper.selectPage(reqVO);
}
@Override
public PageResult<ModelVersionDO> getModelVersionPage (ModelVersionPageReqVO reqVO) {
return modelVersionMapper.selectPage(reqVO);
}
}

29
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelDataServiceImpl.java

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.alert.service.model.impl;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelDataVO;
import cn.iocoder.yudao.module.alert.service.model.ModelDataService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @author chenjiale
* @version 1.0
* @date 2023-09-05 22:11
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ModelDataServiceImpl implements ModelDataService {
@Override
public ModelDataVO getModelData(Integer modelId, String type, List<Integer> indexList, Date st, Date et) {
return null;
}
}

125
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java

@ -0,0 +1,125 @@
package cn.iocoder.yudao.module.alert.service.model.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.alert.common.enums.Algorithm;
import cn.iocoder.yudao.module.alert.common.enums.ModelStatus;
import cn.iocoder.yudao.module.alert.common.enums.ModelTrash;
import cn.iocoder.yudao.module.alert.common.enums.ModelVisible;
import cn.iocoder.yudao.module.alert.controller.admin.model.model.ModelInfo;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelInfoVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSelectQuery;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSimpleVO;
import cn.iocoder.yudao.module.alert.dao.domain.ModelCfg;
import cn.iocoder.yudao.module.alert.dao.domain.SystemCfg;
import cn.iocoder.yudao.module.alert.dao.service.ModelCfgService;
import cn.iocoder.yudao.module.alert.dao.service.SystemCfgService;
import cn.iocoder.yudao.module.alert.service.model.ModelService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-19 13:22
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ModelServiceImpl implements ModelService {
private final ModelCfgService modelCfgService;
private final SystemCfgService systemCfgService;
@Override
public List<ModelSimpleVO> getModelList(ModelSelectQuery query) {
Integer systemId = query.getSystemId();
String modelName = query.getName();
Integer status = query.getStatus();
Integer trash = query.getTrash();
Integer typeId = query.getTypeId();
List<Integer> systems = null;
if (Objects.nonNull(typeId)) {
LambdaQueryWrapper<SystemCfg> systemQuery = new LambdaQueryWrapper<>();
systemQuery.eq(SystemCfg::getSystemTypeId, typeId);
List<SystemCfg> list = systemCfgService.list(systemQuery);
systems = list.stream().map(SystemCfg::getSystemId).collect(Collectors.toList());
}
LambdaQueryWrapper<ModelCfg> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Objects.nonNull(systemId), ModelCfg::getSystemId, systemId)
.eq(Objects.nonNull(status), ModelCfg::getStatus, status)
.eq(Objects.nonNull(trash), ModelCfg::getTrash, trash)
.eq(ModelCfg::getVisible, ModelVisible.VISIBLE.code)
.in(CollUtil.isNotEmpty(systems), ModelCfg::getSystemId, systems)
.like(StringUtils.hasLength(modelName), ModelCfg::getModelName, modelName);
List<ModelCfg> list = modelCfgService.list(queryWrapper);
return list.stream().map(modelCfg -> ModelSimpleVO.builder()
.id(modelCfg.getId())
.name(modelCfg.getModelName().trim())
.creator(modelCfg.getCreator())
.createTime(modelCfg.getCreateTime())
.status(modelCfg.getStatus())
.algorithm(Algorithm.of(modelCfg.getAlgorithmId()).toString())
.build())
.collect(Collectors.toList());
}
@Override
public ModelInfoVO getModelInfo(Integer id) {
ModelCfg modelCfg = modelCfgService.getById(id);
if (Objects.nonNull(modelCfg)) {
return JsonUtils.parseObject(modelCfg.getModelInfo(), ModelInfoVO.class);
}
return null;
}
@Override
public Integer createModel(ModelInfoVO model) {
try {
ModelInfo info = new ModelInfo();
BeanUtil.copyProperties(model, info);
ModelCfg modelCfg = ModelCfg.builder()
.systemId(model.getSystemId())
.algorithmId(model.getAlgorithmId())
.modelName(model.getModelName())
.createTime(new Date())
.trash(ModelTrash.NORMAL.code)
.visible(ModelVisible.VISIBLE.code)
.status(ModelStatus.TRAINING.code)
.creator(SecurityFrameworkUtils.getLoginUserNickname())
.build();
modelCfgService.save(modelCfg);
Integer modelId = modelCfg.getId();
info.setId(modelId);
info.setCreator(modelCfg.getCreator());
info.setCreateTime(modelCfg.getCreateTime());
modelCfg.setModelInfo(JsonUtils.toJsonString(info));
modelCfgService.updateById(modelCfg);
return modelId;
} catch (Exception e) {
log.error("新建模型异常,model:{}", model);
}
return -1;
}
@Override
public Boolean updateModelInfo(ModelInfoVO modelInfo) {
ModelCfg modelCfg = ModelCfg.builder()
.id(modelInfo.getId())
.modelInfo(JsonUtils.toJsonString(modelInfo))
.updateTime(new Date())
.build();
return modelCfgService.updateById(modelCfg);
}
}

30
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/system/SelectService.java

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.alert.service.system;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.OptionItemVO;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.SelectAllOptionVO;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.SelectQuery;
import java.util.List;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-16 22:44
*/
public interface SelectService {
/**
* 获取所有的下拉框选项
*
* @return 下拉框选项
*/
SelectAllOptionVO getAllOptions();
/**
* 根据unit id和type id获取系统选项
*
* @param query 查询参数
* @return 系统选项
*/
List<OptionItemVO> getSystemOptions(SelectQuery query);
}

88
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/system/impl/SelectServiceImpl.java

@ -0,0 +1,88 @@
package cn.iocoder.yudao.module.alert.service.system.impl;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.OptionItemVO;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.SelectAllOptionVO;
import cn.iocoder.yudao.module.alert.controller.admin.system.vo.SelectQuery;
import cn.iocoder.yudao.module.alert.dao.domain.SystemCfg;
import cn.iocoder.yudao.module.alert.dao.domain.SystemTypeCfg;
import cn.iocoder.yudao.module.alert.dao.domain.UnitCfg;
import cn.iocoder.yudao.module.alert.dao.service.SystemCfgService;
import cn.iocoder.yudao.module.alert.dao.service.SystemTypeCfgService;
import cn.iocoder.yudao.module.alert.dao.service.UnitCfgService;
import cn.iocoder.yudao.module.alert.service.system.SelectService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author chenjiale
* @version 1.0
* @date 2023-08-16 22:45
*/
@Service
@RequiredArgsConstructor
public class SelectServiceImpl implements SelectService {
private final UnitCfgService unitCfgService;
private final SystemTypeCfgService systemTypeCfgService;
private final SystemCfgService systemCfgService;
@Override
public SelectAllOptionVO getAllOptions() {
List<UnitCfg> unitCfgList = unitCfgService.list();
LambdaQueryWrapper<SystemTypeCfg> typeQuery = new LambdaQueryWrapper<>();
typeQuery.orderByAsc(SystemTypeCfg::getSystemTypeId);
List<SystemTypeCfg> typeCfgList = systemTypeCfgService.list(typeQuery);
LambdaQueryWrapper<SystemCfg> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SystemCfg::getSystemTypeId, typeCfgList.get(0).getSystemTypeId())
.eq(SystemCfg::getUnitId, unitCfgList.get(0).getUnitId())
.orderByAsc(SystemCfg::getSystemId);
List<SystemCfg> systemCfgList = systemCfgService.list(queryWrapper);
List<OptionItemVO> units = unitCfgList.stream().map(o -> OptionItemVO.builder()
.id(o.getUnitId())
.name(o.getUnitName().trim())
.build()).collect(Collectors.toList());
List<OptionItemVO> types = typeCfgList.stream().map(o -> OptionItemVO.builder()
.id(o.getSystemTypeId())
.name(o.getSystemTypeShortname().trim())
.build()).collect(Collectors.toList());
List<OptionItemVO> systems = systemCfgList.stream().map(o -> OptionItemVO.builder()
.id(o.getSystemId())
.name(o.getSystemName().trim())
.build()).collect(Collectors.toList());
systems.add(0, OptionItemVO.builder().id(null).name("全部").build());
return SelectAllOptionVO.builder()
.units(units)
.types(types)
.systems(systems)
.build();
}
@Override
public List<OptionItemVO> getSystemOptions(@Valid SelectQuery query) {
LambdaQueryWrapper<SystemCfg> queryWrapper = new LambdaQueryWrapper<>();
Integer unitId = query.getUnitId();
Integer typeId = query.getTypeId();
queryWrapper.eq(SystemCfg::getSystemTypeId, typeId)
.eq(SystemCfg::getUnitId, unitId)
.orderByAsc(SystemCfg::getSystemId);
List<SystemCfg> systemCfgList = systemCfgService.list(queryWrapper);
List<OptionItemVO> systems = systemCfgList.stream().map(o -> OptionItemVO.builder()
.id(o.getSystemId())
.name(o.getSystemName().trim())
.build())
.collect(Collectors.toList());
systems.add(0, OptionItemVO.builder().id(null).name("全部").build());
return systems;
}
}

30
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/warn/WarnService.java

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.alert.service.warn;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.InstantSaveReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.warn.vo.WarnPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.warn.vo.WarnSaveReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnDO;
import jakarta.validation.Valid;
public interface WarnService {
/**
* 获得预警分页
*
* @param reqVO 预警分页查询
* @return 预警分页结果
*/
PageResult<WarnDO> getWarnPage(WarnPageReqVO reqVO);
WarnDO getWarn(Long id);
/**
* 更新预警
*
* @param updateReqVO 更新预警
*/
void updateWarn(@Valid WarnSaveReqVO updateReqVO);
}

81
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/warn/WarnServiceImpl.java

@ -0,0 +1,81 @@
package cn.iocoder.yudao.module.alert.service.warn;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.InstantSaveReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.warn.vo.WarnPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.warn.vo.WarnSaveReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnTableDO;
import cn.iocoder.yudao.module.alert.dal.mysql.warn.WarnMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.warn.WarnTableMapper;
import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
import com.google.common.annotations.VisibleForTesting;
import com.mzt.logapi.context.LogRecordContext;
import com.mzt.logapi.service.impl.DiffParseFunction;
import com.mzt.logapi.starter.annotation.LogRecord;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.WARN_NOT_EXISTS;
import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.*;
@Service
@Slf4j
public class WarnServiceImpl implements WarnService {
@Resource
private WarnMapper warnMapper;
@Resource
private WarnTableMapper warnTableMapper;
@Override
public PageResult<WarnDO> getWarnPage(WarnPageReqVO reqVO) {
return warnMapper.selectPage(reqVO);
}
@Override
public WarnDO getWarn(Long id) {
return warnMapper.selectById(id);
}
@Override
@CacheEvict(value = RedisKeyConstants.WARN, key = "#updateReqVO.id")
@LogRecord(type = SYSTEM_WARN_TYPE, subType = SYSTEM_WARN_UPDATE_SUB_TYPE, bizNo = "{{#updateReqVO.id}}",
success = SYSTEM_WARN_UPDATE_SUCCESS)
public void updateWarn(WarnSaveReqVO updateReqVO) {
//为简单--省去检验步骤,之后根据情况增加
// 1.1 校验是否可以更新
WarnDO warn = validateWarnForUpdate(updateReqVO.getId());
// 1.2 校验角色的唯一字段是否重复
// validateRoleDuplicate(updateReqVO.getName(), updateReqVO.getCode(), updateReqVO.getId());
// 2. 更新到数据库
WarnTableDO updateObj = BeanUtils.toBean(updateReqVO, WarnTableDO.class);
warnTableMapper.updateById(updateObj);
// 3. 记录操作日志上下文
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(warn, WarnSaveReqVO.class));
LogRecordContext.putVariable("warn", warn);
}
/**
* 校验预警是否可以被更新
*
* @param id 编号
*/
@VisibleForTesting
WarnDO validateWarnForUpdate(Long id) {
WarnDO warn = warnMapper.selectById(id);
if (warn == null) {
throw exception(WARN_NOT_EXISTS);
}
return warn;
}
}

17
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/utils/EXAUtils.java

@ -154,11 +154,14 @@ public class EXAUtils {
* @param exaHistoryReqVo 传入对象点号开始时间结束时间
* @return exa列表
*/
public List<String> getHistory(String EXA_IP,EXAHistoryReqVO exaHistoryReqVo) {
List<String> result = new ArrayList<>();
public List<List<Double>> getHistory(String EXA_IP,EXAHistoryReqVO exaHistoryReqVo) {
List<List<Double>> result = new ArrayList<>();
try {
// 目标 RPC 服务的 URL
String url = "http://"+EXA_IP+":9000/exawebapi/exatime/GetRawValueArrayFloat";
// String url = "http://"+EXA_IP+":9000/exawebapi/exatime/GetRawValueArrayFloat";
String url = "http://"+EXA_IP+":9000/exawebapi/exatime/GetSamplingValueArrayFloat";
//创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
/*
@ -170,6 +173,8 @@ public class EXAUtils {
uriBuilder.addParameter("ItemName", exaHistoryReqVo.getItemName());
uriBuilder.addParameter("StartingTime", exaHistoryReqVo.getStartTime());
uriBuilder.addParameter("TerminalTime", exaHistoryReqVo.getEndTime());
uriBuilder.addParameter("SamplingPeriod", String.valueOf(1000*exaHistoryReqVo.getInterval()));
//创建请求对象
HttpGet httpGet = new HttpGet(uriBuilder.build());
@ -203,14 +208,14 @@ public class EXAUtils {
return result;
}
public List<List<String>> getHistorys(String EXA_IP,EXAHistoryReqVO exaHistoryReqVo) {
List<List<String>> results = new ArrayList<>();
public List<List<List<Double>>> getHistorys(String EXA_IP,EXAHistoryReqVO exaHistoryReqVo) {
List<List<List<Double>>> results = new ArrayList<>();
try {
String itemNames = exaHistoryReqVo.getItemName();
List<String> pointName = Arrays.asList(itemNames.split(","));
pointName.forEach(entity -> {
List<String> result = new ArrayList<>();
List<List<Double>> result = new ArrayList<>();
exaHistoryReqVo.setItemName(entity);
result = getHistory(EXA_IP,exaHistoryReqVo);
results.add(result);

54
yudao-module-alert/yudao-module-alert-biz/src/main/resources/mapper/ModelCfgMapper.xml

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.alert.dao.mapper.ModelCfgMapper">
<resultMap id="BaseResultMap" type="cn.iocoder.yudao.module.alert.dao.domain.ModelCfg">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="systemId" column="system_id" jdbcType="INTEGER"/>
<result property="algorithmId" column="algorithm_id" jdbcType="INTEGER"/>
<result property="modelName" column="model_name" jdbcType="VARCHAR"/>
<result property="creatTime" column="creat_time" jdbcType="TIMESTAMP"/>
<result property="creatName" column="creat_name" jdbcType="VARCHAR"/>
<result property="modelInfo" column="model_info" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="visible" column="visible" jdbcType="INTEGER"/>
<result property="conditionInfo" column="condition_info" jdbcType="VARCHAR"/>
<result property="trash" column="trash" jdbcType="INTEGER"/>
<result property="assessRes" column="assess_res" jdbcType="VARCHAR"/>
<result property="needToAssess" column="need_to_assess" jdbcType="INTEGER"/>
<result property="score" column="score" jdbcType="FLOAT"/>
<result property="clearOrNot" column="clear_or_not" jdbcType="CHAR"/>
<result property="effNumber" column="eff_number" jdbcType="INTEGER"/>
<result property="needToClean" column="need_to_clean" jdbcType="INTEGER"/>
<result property="origAssessRes" column="orig_assess_res" jdbcType="VARCHAR"/>
<result property="loadCover" column="load_cover" jdbcType="FLOAT"/>
<result property="coverOutput" column="cover_output" jdbcType="VARCHAR"/>
<result property="curVersion" column="cur_version" jdbcType="VARCHAR"/>
<result property="modelVersion" column="model_version" jdbcType="VARCHAR"/>
<result property="versionInfo" column="version_info" jdbcType="VARCHAR"/>
<result property="conditionName" column="condition_name" jdbcType="VARCHAR"/>
<result property="isOnline" column="is_online" jdbcType="INTEGER"/>
<result property="trainStatus" column="train_status" jdbcType="INTEGER"/>
<result property="creator" column="creator" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updater" column="updater" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="deleted" column="deleted" jdbcType="BIT"/>
</resultMap>
<sql id="Base_Column_List">
id,system_id,algorithm_id,
model_name,creat_time,creat_name,
model_info,status,visible,
condition_info,trash,assess_res,
need_to_assess,score,clear_or_not,
eff_number,need_to_clean,orig_assess_res,
load_cover,cover_output,cur_version,
model_version,version_info,condition_name,
is_online,train_status,creator,
create_time,updater,update_time,
deleted
</sql>
</mapper>

23
yudao-module-alert/yudao-module-alert-biz/src/main/resources/mapper/SystemCfgMapper.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.alert.dao.mapper.SystemCfgMapper">
<resultMap id="BaseResultMap" type="cn.iocoder.yudao.module.alert.dao.domain.SystemCfg">
<result property="systemId" column="system_id" jdbcType="INTEGER"/>
<result property="systemTypeId" column="system_type_id" jdbcType="INTEGER"/>
<result property="systemName" column="system_name" jdbcType="VARCHAR"/>
<result property="systemShortname" column="system_shortname" jdbcType="CHAR"/>
<result property="unitId" column="unit_id" jdbcType="INTEGER"/>
<result property="resetpoint" column="resetpoint" jdbcType="VARCHAR"/>
<result property="resettime" column="resettime" jdbcType="TIMESTAMP"/>
<result property="resetlist" column="resetlist" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
system_id,system_type_id,system_name,
system_shortname,unit_id,resetpoint,
resettime,resetlist
</sql>
</mapper>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save