Browse Source

feat:运行中心-预警实例V1.0

pull/17/head
肖晋飞 8 months ago
parent
commit
9558c3ea4e
  1. 8
      pom.xml
  2. 6
      yudao-module-alert/yudao-module-alert-biz/pom.xml
  3. 44
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/calcgroup/CalcGroupController.java
  4. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/calcgroup/vo/CalcGroupPageReqVO.java
  5. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/calcgroup/vo/CalcGroupRespVO.java
  6. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/EXAController.java
  7. 3
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/EXAHistoryReqVO.java
  8. 106
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantController.java
  9. 14
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantChartReqVO.java
  10. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantChartRespVO.java
  11. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCountReqVO.java
  12. 25
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCountRespVO.java
  13. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantInfoVO.java
  14. 30
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java
  15. 45
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPointRespVO.java
  16. 135
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantRespVO.java
  17. 80
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantSaveReqVO.java
  18. 24
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/pointInfo.java
  19. 55
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.java
  20. 134
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.java
  21. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelPageReqVO.java
  22. 47
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelRespVO.java
  23. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelVersionPageReqVO.java
  24. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelVersionRespVO.java
  25. 24
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/calcgroup/CalcGroupDO.java
  26. 83
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/instant/InstantDO.java
  27. 58
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/instant/InstantTableDO.java
  28. 50
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/model/ModelDO.java
  29. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/model/ModelVersionDO.java
  30. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/calcgroup/CalcGroupMapper.java
  31. 33
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java
  32. 10
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantTableMapper.java
  33. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/model/ModelMapper.java
  34. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/model/ModelVersionMapper.java
  35. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/calcgroup/CalcGroupService.java
  36. 31
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/calcgroup/CalcGroupServiceImpl.java
  37. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAService.java
  38. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAServiceImpl.java
  39. 57
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantService.java
  40. 373
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java
  41. 30
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelService.java
  42. 34
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelServiceImpl.java
  43. 17
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/utils/EXAUtils.java
  44. 6
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
  45. 13
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/LogRecordConstants.java
  46. 8
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java
  47. 4
      yudao-server/src/main/resources/application-local.yaml

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>-->

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

@ -0,0 +1,44 @@
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.controller.admin.model.vo.ModelVersionPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionRespVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.calcgroup.CalcGroupDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelVersionDO;
import cn.iocoder.yudao.module.alert.service.calcgroup.CalcGroupService;
import cn.iocoder.yudao.module.alert.service.model.ModelService;
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 String id;
@Schema(description = "机组id", example = "id")
private String 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);
}

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

@ -12,4 +12,7 @@ public class EXAHistoryReqVO {
private String startTime;
@Schema(description = "结束时间")
private String endTime;
@Schema(description = "间隔时间-以秒为单位传入,会自动转为毫秒")
private Long interval;
}

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 MODEL_ID;
@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 String id;
@Schema(description = "模型id", example = "yudao")
private String 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 String 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;
}

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

@ -0,0 +1,80 @@
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")
private Long id;
@Schema(description = "模型编号", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@NotNull(message = "模型编号不能为空")
@DiffLogField(name = "模型编号")
private Long modelId;
@Schema(description = "模型实例信息", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@NotNull(message = "模型实例信息不能为空")
@DiffLogField(name = "模型实例信息")
@JsonIgnore
private String instantInfo;
@Schema(description = "输入点号信息-原始数据", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@NotNull(message = "输入点号信息不能为空")
@DiffLogField(name = "输入点号信息")
private List<pointInfo> pointInfo;
@Schema(description = "实例名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotBlank(message = "实例名称不能为空")
@Size(max = 30, message = "实例名称长度不能超过 30 个字符")
@DiffLogField(name = "实例名称")
private String mpName;
@Schema(description = "时间间隔", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "时间间隔不能为空")
@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")
@NotNull(message = "是否存历史不能为空")
@DiffLogField(name = "是否存历史")
private Long hisSto;
@Schema(description = "计算组编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "计算组")
@DiffLogField(name = "计算组")
private Long calcGroup;
@Schema(description = "版本编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "版本编号")
@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;
}

55
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.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.ModelService;
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 ModelController {
@Resource
private ModelService modelService;
@GetMapping("/page")
@Operation(summary = "获得模型分页列表")
@PreAuthorize("@ss.hasPermission('run:model:query')")
public CommonResult<PageResult<ModelRespVO>> getModelPage(@Valid ModelPageReqVO pageReqVO) {
PageResult<ModelDO> pageResult = modelService.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 = modelService.getModelVersionPage(versionReqVO).getList();
list.sort(Comparator.comparing(ModelVersionDO::getVersion));
return success(BeanUtils.toBean(list, ModelVersionRespVO.class));
}
}

134
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.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 ModelInfoVO {
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 ;
}
}

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;
}

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 String id;
@Schema(description = "所属模型id", example = "id")
private String modelId;
@Schema(description = "模型版本名称", example = "yudao")
private String version;
}

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 String 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 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 String 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;
}

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));
}
}

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);
}
}

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

@ -23,9 +23,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;

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

@ -78,12 +78,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);
}

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;
}

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

@ -0,0 +1,373 @@
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.EXAHistoryReqVO;
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.ModelInfoVO;
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值
ModelInfoVO modelInfoVO = JsonUtils.parseObject(instant.getModelInfo(), ModelInfoVO.class);
Double Kesi_99 = modelInfoVO.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);
// }
// }
}

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

@ -0,0 +1,30 @@
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.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 java.util.List;
public interface ModelService {
/**
* 获得模型分页
*
* @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/ModelServiceImpl.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 ModelServiceImpl implements ModelService {
@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);
}
}

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);

6
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java

@ -169,4 +169,10 @@ public interface ErrorCodeConstants {
ErrorCode EXA_POINT_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_002_029_000, "导入EXA测点数据不能为空!");
// ========== 模型实例模块 3-001==========
ErrorCode INSTANT_NOT_EXISTS = new ErrorCode(3_001_000, "模型实例不存在");
}

13
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/LogRecordConstants.java

@ -30,4 +30,17 @@ public interface LogRecordConstants {
String SYSTEM_ROLE_DELETE_SUB_TYPE = "删除角色";
String SYSTEM_ROLE_DELETE_SUCCESS = "删除了角色【{{#role.name}}】";
// =======================instant_cfg 模型实例 =======================
String SYSTEM_INSTANT_TYPE = "模型实例";
String SYSTEM_INSTANT_CREATE_SUB_TYPE = "创建模型实例";
String SYSTEM_INSTANT_CREATE_SUCCESS = "创建了模型实例【{{#instant.mpName}}】";
String SYSTEM_INSTANT_UPDATE_SUB_TYPE = "更新模型实例";
String SYSTEM_INSTANT_UPDATE_SUCCESS = "更新了模型实例【{{#instant.mpName}}】: {_DIFF{#updateReqVO}}";
String SYSTEM_INSTANT_DELETE_SUB_TYPE = "删除模型实例";
String SYSTEM_INSTANT_DELETE_SUCCESS = "删除了模型实例【{{#instant.mpName}}】";
}

8
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java

@ -24,6 +24,13 @@ public interface RedisKeyConstants {
* VALUE 数据类型String 角色信息
*/
String ROLE = "role";
/**
* 模型实例的缓存
* <p>
* KEY 格式instant:{id}
* VALUE 数据类型String 模型实例信息
*/
String INSTANT = "instant";
/**
* 用户拥有的角色编号的缓存
@ -107,4 +114,5 @@ public interface RedisKeyConstants {
*/
String WXA_SUBSCRIBE_TEMPLATE = "wxa_subscribe_template";
}

4
yudao-server/src/main/resources/application-local.yaml

@ -271,4 +271,6 @@ pf4j:
# pluginsDir: /tmp/
pluginsDir: ../plugins
EXA:
ip: 47.98.32.148
ip: 47.98.32.148
point:
head: XN.
Loading…
Cancel
Save