Browse Source

Merge pull request 'cjl-dev' (#17) from cjl-dev into master

Reviewed-on: http://120.26.116.243:3000/root/alert-backend/pulls/17
pull/19/head
chenjiale 6 months ago
parent
commit
b384843fab
  1. 8
      pom.xml
  2. 6
      yudao-module-alert/yudao-module-alert-biz/pom.xml
  3. 40
      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. 11
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/EXAHistoryReqVO.java
  7. 106
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantController.java
  8. 14
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantChartReqVO.java
  9. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantChartRespVO.java
  10. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCountReqVO.java
  11. 25
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCountRespVO.java
  12. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantInfoVO.java
  13. 30
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java
  14. 45
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPointRespVO.java
  15. 135
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantRespVO.java
  16. 74
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantSaveReqVO.java
  17. 24
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/pointInfo.java
  18. 55
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/RunModelController.java
  19. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelPageReqVO.java
  20. 47
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelRespVO.java
  21. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelVersionPageReqVO.java
  22. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelVersionRespVO.java
  23. 134
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/RunModelInfoVO.java
  24. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/vo/WarnPageReqVO.java
  25. 89
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/vo/WarnRespVO.java
  26. 50
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/vo/WarnSaveReqVO.java
  27. 59
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/warn/warnController.java
  28. 24
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/calcgroup/CalcGroupDO.java
  29. 83
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/instant/InstantDO.java
  30. 58
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/instant/InstantTableDO.java
  31. 50
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/model/ModelDO.java
  32. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/model/ModelVersionDO.java
  33. 68
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/warn/WarnDO.java
  34. 60
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/warn/WarnTableDO.java
  35. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/calcgroup/CalcGroupMapper.java
  36. 33
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java
  37. 10
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantTableMapper.java
  38. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/model/ModelMapper.java
  39. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/model/ModelVersionMapper.java
  40. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/warn/WarnMapper.java
  41. 9
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/warn/WarnTableMapper.java
  42. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/calcgroup/CalcGroupService.java
  43. 31
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/calcgroup/CalcGroupServiceImpl.java
  44. 11
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAService.java
  45. 57
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantService.java
  46. 372
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java
  47. 27
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/RunModelService.java
  48. 34
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/RunModelServiceImpl.java
  49. 30
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/warn/WarnService.java
  50. 81
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/warn/WarnServiceImpl.java
  51. 87
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/utils/EXAUtils.java
  52. 7
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
  53. 21
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/LogRecordConstants.java
  54. 15
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java
  55. 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>-->

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

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

@ -7,11 +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;
@Schema(description = "间隔")
private Integer interval=300;
private String endTime;
@Schema(description = "间隔时间-以秒为单位传入,会自动转为毫秒")
private Long interval = 300L;
}

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

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

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

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/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> {
}

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

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

@ -1,12 +1,13 @@
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;
import java.util.List;
import java.util.*;
public interface EXAService {
/**
@ -21,19 +22,17 @@ public interface EXAService {
List<EXAHttp> getEXAListNow(List<EXAHttp> list) throws URISyntaxException, IOException;
String getEXANow(String itemName) throws URISyntaxException, IOException;
List<List<Double>> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo);
List<List<Double>> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo);
List<List<List<Double>>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo);
String createPoint(Point pointVo) throws IOException;
List<Object> getEXAGroupInfo() throws URISyntaxException, IOException;
String deletePoint(String ItemName);
public List<Object> getEXAGroupInfo() throws URISyntaxException, IOException;
public String deletePoint(String ItemName);
EXAPointImportRespVO importPointList(List<Point> importPoints, boolean isUpdateSupport);
List<PointOptionItemVO> getPointOptionList(String search);

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

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

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

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

@ -1,14 +1,8 @@
package cn.iocoder.yudao.module.alert.utils;
import cn.hutool.http.HttpUtil;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAHistoryReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAHttp;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.Point;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.core.type.TypeReference;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
@ -17,33 +11,39 @@ import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
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 java.io.IOException;
import java.lang.reflect.Type;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class EXAUtils {
/**
* 根据分页条件和测点名称测点描述模糊查询
*
* @param reqVO 传入对象页数页数量查询条件
* @return exa列表
*/
public List<EXAHttp> getPointInfo(String EXA_IP, EXAPageReqVO reqVO) throws URISyntaxException, IOException {
public List<EXAHttp> getPointInfo(String EXA_IP,EXAPageReqVO reqVO) throws URISyntaxException, IOException {
// PageResult<EXAHttp> result = new PageResult<>();
List<EXAHttp> exaListAll = new ArrayList<EXAHttp>();
try {
// 目标 RPC 服务的 URL
String url = "http://" + EXA_IP + ":9000/exawebapi/exaitem/getitems";
String url = "http://"+EXA_IP+":9000/exawebapi/exaitem/getitems";
//创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
/*
@ -104,11 +104,11 @@ public class EXAUtils {
* @return exa列表
*/
public List<String> getNowData(String EXA_IP, String itemNames) throws URISyntaxException, IOException {
public List<String> getNowData(String EXA_IP,String itemNames) throws URISyntaxException, IOException {
List<String> result = new ArrayList<>();
try {
// 目标 RPC 服务的 URL
String url = "http://" + EXA_IP + ":9000/exawebapi/exanow/getfloatvaluebatch";
String url = "http://"+EXA_IP+":9000/exawebapi/exanow/getfloatvaluebatch";
//创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
/*
@ -154,34 +154,61 @@ public class EXAUtils {
* @param exaHistoryReqVo 传入对象点号开始时间结束时间
* @return exa列表
*/
public List<List<Double>> getHistory(String EXA_IP, EXAHistoryReqVO exaHistoryReqVo) {
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/GetSamplingValueArrayFloat";
// String url = "http://"+EXA_IP+":9000/exawebapi/exatime/GetRawValueArrayFloat";
String url = "http://"+EXA_IP+":9000/exawebapi/exatime/GetSamplingValueArrayFloat";
//创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
/*
* 由于GET请求的参数都是拼装在URL地址后方所以我们要构建一个URL带参数
*/
URIBuilder uriBuilder = new URIBuilder(url);
/** 添加参数 */
uriBuilder.addParameter("ItemName", exaHistoryReqVo.getItemName());
uriBuilder.addParameter("StartingTime", exaHistoryReqVo.getStartTime());
uriBuilder.addParameter("TerminalTime", exaHistoryReqVo.getEndTime());
uriBuilder.addParameter("SamplingPeriod", String.valueOf(1000*exaHistoryReqVo.getInterval()));
Map<String,Object> params=new HashMap<>();
params.put("ItemName", exaHistoryReqVo.getItemName());
params.put("StartingTime", exaHistoryReqVo.getStartTime());
params.put("TerminalTime", exaHistoryReqVo.getEndTime());
params.put("SamplingPeriod", exaHistoryReqVo.getInterval() * 1000);
String body = HttpUtil.createGet(url).form(params)
.header("Content-Type", "application/json")
.execute().body();
//创建请求对象
HttpGet httpGet = new HttpGet(uriBuilder.build());
// 传输的类型
httpGet.addHeader("Content-Type", "application/json");
//发送请求,请求响应结果
CloseableHttpResponse response = httpClient.execute(httpGet);
//获取服务器返回的状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("服务端返回成功的状态码为:" + statusCode);
HttpEntity entity = response.getEntity();
String body = EntityUtils.toString(entity).replaceAll("\\\\", "");
System.out.println("服务端返回的数据为:" + body);
if (body.startsWith("\"") && body.endsWith("\"")) {
// 步骤3:去掉双引号
body = body.substring(1, body.length() - 1); // 去掉首尾的双引号
}
result = JsonUtils.parseObject(body, new TypeReference<List<List<Double>>>(){});
Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
Type listType = new TypeToken<List<List<Double>>>() {
}.getType();
result = gson.fromJson(body, listType);
//关闭资源
response.close();
httpClient.close();
} catch (Exception e) {
}
return result;
}
public List<List<List<Double>>> getHistorys(String EXA_IP, EXAHistoryReqVO exaHistoryReqVo) {
public List<List<List<Double>>> getHistorys(String EXA_IP,EXAHistoryReqVO exaHistoryReqVo) {
List<List<List<Double>>> results = new ArrayList<>();
try {
@ -190,7 +217,7 @@ public class EXAUtils {
pointName.forEach(entity -> {
List<List<Double>> result = new ArrayList<>();
exaHistoryReqVo.setItemName(entity);
result = getHistory(EXA_IP, exaHistoryReqVo);
result = getHistory(EXA_IP,exaHistoryReqVo);
results.add(result);
});
} catch (Exception e) {
@ -200,8 +227,8 @@ public class EXAUtils {
}
//写入点号
public String setPoint(String EXA_IP, Point point) throws IOException {
String requestPathAddItem = "http://" + EXA_IP + ":9000/exawebapi/exaitem/AddItem";
public String setPoint(String EXA_IP,Point point) throws IOException {
String requestPathAddItem = "http://"+EXA_IP+":9000/exawebapi/exaitem/AddItem";
String param = JSON.toJSONString(point);
String result = Request.Post(requestPathAddItem)
.addHeader("Content-type", "application/json")
@ -218,7 +245,7 @@ public class EXAUtils {
List<Object> result = new ArrayList<>();
try {
// 目标 RPC 服务的 URL
String url = "http://" + EXA_IP + ":9000/exawebapi/exagroup/getgroups";
String url = "http://"+EXA_IP+":9000/exawebapi/exagroup/getgroups";
//创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
/*
@ -261,8 +288,8 @@ public class EXAUtils {
return result;
}
public String deletePoint(String EXA_IP, String ItemName) {
String requestPathDeleteItem = "http://" + EXA_IP + ":9000/exawebapi/exaitem/DeleteItem?ItemName=" + ItemName;
public String deletePoint(String EXA_IP,String ItemName){
String requestPathDeleteItem ="http://"+EXA_IP+":9000/exawebapi/exaitem/DeleteItem?ItemName="+ItemName;
// 创建HttpClient
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// 创建HttpDelete请求

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

@ -169,6 +169,13 @@ 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, "模型实例不存在");
// ========== 预警模块 4-001==========
ErrorCode WARN_NOT_EXISTS = new ErrorCode(4_001_000, "预警不存在");
ErrorCode Company_NOT_EXISTS = new ErrorCode(1_002_30_000,"集团不存在");
ErrorCode Company_DISABLED = new ErrorCode(1_002_30_001,"集团被禁用");
ErrorCode Company_NAME_DUPLICATE = new ErrorCode(1_002_31_000,"集团名称已存在");

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

@ -30,4 +30,25 @@ 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}}】";
// =======================warn_online_cfg 预警 =======================
String SYSTEM_WARN_TYPE = "预警";
String SYSTEM_WARN_CREATE_SUB_TYPE = "创建预警";
String SYSTEM_WARN_CREATE_SUCCESS = "创建了预警【{{#warn.pointName}}】";
String SYSTEM_WARN_UPDATE_SUB_TYPE = "更新预警";
String SYSTEM_WARN_UPDATE_SUCCESS = "更新了模预警【{{#warn.pointName}}】: {_DIFF{#updateReqVO}}";
String SYSTEM_WARN_DELETE_SUB_TYPE = "删除预警";
String SYSTEM_WARN_DELETE_SUCCESS = "删除了预警【{{#warn.pointName}}】";
}

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

@ -24,7 +24,21 @@ public interface RedisKeyConstants {
* VALUE 数据类型String 角色信息
*/
String ROLE = "role";
/**
* 模型实例的缓存
* <p>
* KEY 格式instant:{id}
* VALUE 数据类型String 模型实例信息
*/
String INSTANT = "instant";
/**
* 预警的缓存
* <p>
* KEY 格式warn:{id}
* VALUE 数据类型String 模型实例信息
*/
String WARN = "warn";
/**
* 用户拥有的角色编号的缓存
* <p>
@ -107,4 +121,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