Compare commits

...

21 Commits

Author SHA1 Message Date
HVAC001 0ca36be409 预警分析(日报月报和年报)制作 2 months ago
xiaojinfei f42ba68fdc Merge pull request 'dev-xjf' (#24) from dev-xjf into master 2 months ago
肖晋飞 c07a739911 fix:解决DUAL不存在问题 2 months ago
肖晋飞 a6627716e5 fix:增加sqlserver驱动 2 months ago
肖晋飞 fd0323865b feat:增加根据id查询json接口 2 months ago
肖晋飞 d596b1fcf0 Merge branch 'master' into dev-xjf 2 months ago
肖晋飞 c3ecd4ea72 fix:预警回算 2 months ago
chenjiale 3683ed3779 Merge pull request '系统配置' (#23) from Zyq into master 3 months ago
Dreamglade 82fc7fe2c8 系统配置 3 months ago
肖晋飞 bbbfa9c54f Merge remote-tracking branch 'origin/master' into dev-xjf 4 months ago
chenjiale 8511dea90f Merge pull request '厂级配置一次修改' (#22) from Zyq into master 4 months ago
Dreamglade 9575c2f5bd 厂级配置一次修改 4 months ago
chenjiale 0d03103873 Merge pull request '新增厂级配置' (#21) from Zyq into master 4 months ago
Dreamglade 5854784fca 新增厂级配置 4 months ago
肖晋飞 66a82465e3 fix:将excel改为csv格式 5 months ago
肖晋飞 70fae8bb37 fix:增加机组、系统、子系统筛选条件 5 months ago
chenjiale 9b6eda256e Merge pull request 'feat(module-alert): 优化模型相关接口和数据结构' (#20) from cjl-dev into master 5 months ago
CJL6015 8d6a08e5b1 feat(module-alert): 优化模型相关接口和数据结构 5 months ago
xiaojinfei 12882dca12 Merge pull request 'fix:exaip变化' (#19) from dev-xjf into master 5 months ago
肖晋飞 653b1d0cd3 fix:exaip变化 5 months ago
chenjiale 1fd7f15c87 Merge pull request '修改系统配置' (#18) from YKS into master 5 months ago
  1. 42
      yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java
  2. 7
      yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml
  3. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/Algorithm.java
  4. 95
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/DayReportController.java
  5. 27
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/DayReportvo/AlarmDailyVO.java
  6. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/DayReportvo/AlarmDetailVO.java
  7. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/DayReportvo/GzpAlarmDetailVO.java
  8. 61
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/MonthReportController.java
  9. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/MonthReportvo/AlarmDetailVO.java
  10. 28
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/MonthReportvo/AlarmMonthlyVO.java
  11. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/MonthReportvo/GzpAlarmDetailVO.java
  12. 95
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/YearReportController.java
  13. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/YearReportvo/AlarmDetailVO.java
  14. 27
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/YearReportvo/AlarmYearlyVO.java
  15. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/YearReportvo/GzpAlarmDetailVO.java
  16. 40
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/device/DeviceController.java
  17. 37
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/device/vo/DeviceRespVO.java
  18. 11
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/EXAController.java
  19. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantCalcController.java
  20. 7
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java
  21. 24
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.java
  22. 32
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelDataController.java
  23. 106
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java
  24. 47
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java
  25. 41
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/TrainTime.java
  26. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelDataVO.java
  27. 87
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoDetails.java
  28. 67
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.java
  29. 58
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInitVO.java
  30. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelTestData.java
  31. 26
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/TrainInfo.java
  32. 56
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/alarm/analysis/dayDO.java
  33. 67
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/alarm/analysis/monthDO.java
  34. 59
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/alarm/analysis/yearDO.java
  35. 46
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/device/DeviceDO.java
  36. 10
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/device/DeviceMapper.java
  37. 3
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java
  38. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/DayReport.java
  39. 24
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/MonthReport.java
  40. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/YearReport.java
  41. 51
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/DayReportMapper.java
  42. 53
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/MonthReportMapper.java
  43. 45
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/YearReportMapper.java
  44. 31
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/DayReportService.java
  45. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/MonthReportService.java
  46. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/YearReportService.java
  47. 156
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/DayReportServiceImpl.java
  48. 169
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/MonthReportServiceImpl.java
  49. 133
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/YearReportServiceImpl.java
  50. 31
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/ModelTestParam.java
  51. 59
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/TrainParam.java
  52. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/device/DeviceService.java
  53. 52
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/device/DeviceServiceImpl.java
  54. 26
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelDataService.java
  55. 13
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelService.java
  56. 29
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelDataServiceImpl.java
  57. 53
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java
  58. 9
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
  59. 63
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/FactoryController.java
  60. 24
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryBaseVO.java
  61. 12
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryCreateReqVO.java
  62. 16
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryPageReqVO.java
  63. 22
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryRespVO.java
  64. 30
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactorySaveReqVO.java
  65. 16
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryUpdateReqVO.java
  66. 72
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/SystemConfigController.java
  67. 15
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigBaseVO.java
  68. 14
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigPageReqVO.java
  69. 13
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigRespVO.java
  70. 13
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigSaveReqVO.java
  71. 28
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/config/FactoryConvert.java
  72. 48
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/config/SystemConfigConvert.java
  73. 30
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/config/FactoryDO.java
  74. 35
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/config/SystemConfigDO.java
  75. 16
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/config/FactoryMapper.java
  76. 23
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/config/SystemConfigMapper.java
  77. 60
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/Factory/FactoryService.java
  78. 65
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/Factory/FactoryServiceImpl.java
  79. 44
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/SystemConfig/SystemConfigService.java
  80. 75
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/SystemConfig/SystemConfigServiceImpl.java
  81. 22
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/config/FactoryMapper.xml
  82. 29
      yudao-server/src/main/java/cn/iocoder/yudao/server/config/MybatisPlusCustomConfig.java
  83. 52
      yudao-server/src/main/resources/application-local.yaml

42
yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java

@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
import cn.iocoder.yudao.framework.excel.core.handler.SelectSheetWriteHandler;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.converters.longconverter.LongStringConverter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
@ -54,4 +55,45 @@ public class ExcelUtils {
.doReadAllSync();
}
/**
* 将列表以 CSV 响应给前端
*
* @param response 响应
* @param filename 文件名
* @param sheetName Excel sheet
* @param head Excel head
* @param data 数据列表哦
* @param <T> 泛型保证 head data 类型的一致性
* @throws IOException 写入失败的情况
*/
public static <T> void writeCSV(HttpServletResponse response, String filename, String sheetName,
Class<T> head, List<T> data) throws IOException {
response.setHeader("Content-Disposition", "attachment;filename=" + HttpUtils.encodeUtf8(filename));
// response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setContentType("application/vnd.opencmlformats-officedocument.spreadsheetml.sheet");
// 输出 Excel
EasyExcel.write(response.getOutputStream(), head)
.excelType(ExcelTypeEnum.CSV)
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度
.registerWriteHandler(new SelectSheetWriteHandler(head)) // 基于固定 sheet 实现下拉框
.registerConverter(new LongStringConverter()) // 避免 Long 类型丢失精度
.sheet(sheetName).doWrite(data);
// 设置 header 和 contentType。写在最后的原因是,避免报错时,响应 contentType 已经被修改了
response.setHeader("Content-Disposition", "attachment;filename=" + HttpUtils.encodeUtf8(filename));
// response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setContentType("application/vnd.opencmlformats-officedocument.spreadsheetml.sheet");
}
public static <T> List<T> readCSV(MultipartFile file, Class<T> head) throws IOException {
return EasyExcel.read(file.getInputStream(), head, null)
.excelType(ExcelTypeEnum.CSV)
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
.doReadAllSync();
}
}

7
yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml

@ -46,8 +46,15 @@
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>11.2.0.jre11</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>

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

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.alert.common.enums;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import java.util.Objects;
@ -14,8 +15,11 @@ public enum Algorithm {
/**
* 模型算法枚举
*/
@JsonProperty("ERROR")
ERROR(-1),
@JsonProperty("PCA")
PCA(0),
@JsonProperty("ANN")
ANN(1);
public final Integer code;

95
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/DayReportController.java

@ -0,0 +1,95 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.DayReportvo.*;
import cn.iocoder.yudao.module.alert.dao.domain.DayReport;
import cn.iocoder.yudao.module.alert.dao.service.DayReportService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.List;
import java.util.stream.Collectors;
@Tag(name = "日报")
@RestController
@RequestMapping("/alarm")
public class DayReportController {
private final DayReportService service;
public DayReportController(DayReportService service) {
this.service = service;
}
@Operation(summary = "获取日报表数据")
@GetMapping("/daily-report")
public CommonResult<PageResult<AlarmDailyVO>> getDailyReport(
@RequestParam(required = false) String unit,
@RequestParam(required = false) String driverType,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
PageResult<DayReport> pageResult = service.getDailyAlarmData(unit, driverType, date, pageNo, pageSize);
List<AlarmDailyVO> vos = pageResult.getList().stream()
.map(this::convertToVO)
.collect(Collectors.toList());
return CommonResult.success(new PageResult<>(vos, pageResult.getTotal()));
}
private AlarmDailyVO convertToVO(DayReport domain) {
AlarmDailyVO vo = new AlarmDailyVO();
vo.setId(domain.getId());
vo.setInstanceName(domain.getInstanceName());
vo.setTotalAlarms(domain.getTotalAlarms());
vo.setHourCounts(domain.getHourCounts());
vo.setAlarmDuration(domain.getAlarmDuration());
vo.setHasDetails(true); // 添加详情标识
return vo;
}
@Operation(summary = "获取报警详情")
@GetMapping("/details/{instanceId}")
public CommonResult<List<AlarmDetailVO>> getDetails(
@PathVariable String instanceId,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) {
List<AlarmDetailVO> details = service.getAlarmDetails(instanceId, date).stream()
.map(domain -> {
AlarmDetailVO vo = new AlarmDetailVO();
vo.setTagname(domain.getTagname());
vo.setAlarmcount(domain.getAlarmcount());
vo.setAlarmtime(domain.getAlarmtime());
return vo;
})
.collect(Collectors.toList());
return CommonResult.success(details);
}
@Operation(summary = "获取光字牌报警详情")
@GetMapping("/gzp-details/{gzpName}")
public CommonResult<List<GzpAlarmDetailVO>> getGzpDetails(
@PathVariable String gzpName,
@RequestParam String instanceId,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) {
List<GzpAlarmDetailVO> details = service.getGzpAlarmDetails(gzpName, instanceId, date).stream()
.map(domain -> {
GzpAlarmDetailVO vo = new GzpAlarmDetailVO();
vo.setGzpName(domain.getGzpName());
vo.setStartTime(domain.getStartTime().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime());
vo.setEndTime(domain.getEndTime().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime());
vo.setDuration(domain.getExceedDuration());
return vo;
})
.collect(Collectors.toList());
return CommonResult.success(details);
}
}

27
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/DayReportvo/AlarmDailyVO.java

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.DayReportvo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Map;
@Data
@Schema(description = "报警日报表视图对象")
public class AlarmDailyVO {
@Schema(description = "实例ID", example = "mp_123456")
private String id;
@Schema(description = "实例名称", example = "锅炉1号压力传感器")
private String instanceName;
@Schema( description= "总报警次数", example = "42")
private Integer totalAlarms;
@Schema(description = "各小时报警数量", example = "{\"hour_0\":10,\"hour_1\":20}")
private Map<String, Integer> hourCounts;
@Schema(description = "总报警时长(秒)", example = "8130")
private Long alarmDuration;
@Schema(description = "是否可查看详情", example = "true")
private Boolean hasDetails;
}

16
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/DayReportvo/AlarmDetailVO.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.DayReportvo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "报警详情视图对象")
public class AlarmDetailVO {
@Schema(description = "光字牌名称", example = "锅炉超压报警")
private String tagname;
@Schema(description = "报警次数", example = "5")
private Integer alarmcount;
@Schema(description = "报警时长(秒)", example = "1510")
private Long alarmtime;
}

23
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/DayReportvo/GzpAlarmDetailVO.java

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.DayReportvo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@Schema(description = "光字牌详情视图对象")
public class GzpAlarmDetailVO {
@Schema(description = "光字牌名称", example = "锅炉压力高报警")
private String gzpName;
@Schema(description = "开始时间", example = "2023-08-01 10:15:30")
private LocalDateTime startTime;
@Schema(description = "结束时间", example = "2023-08-01 10:25:45")
private LocalDateTime endTime;
@Schema(description = "超限时长(秒)", example = "615")
private Long duration;
}

61
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/MonthReportController.java

@ -0,0 +1,61 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.MonthReportvo.*;
import cn.iocoder.yudao.module.alert.dao.service.MonthReportService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import java.time.YearMonth;
import java.util.List;
import java.util.stream.Collectors;
@Tag(name = "管理后台 - 月报分析")
@RestController
@RequestMapping("/alarm")
public class MonthReportController {
private final MonthReportService monthlyReportService;
public MonthReportController(MonthReportService monthlyReportService) {
this.monthlyReportService = monthlyReportService;
}
@Operation(summary = "获取月报表数据")
@GetMapping("/monthly-report")
public CommonResult<PageResult<AlarmMonthlyVO>> getMonthlyReport(
@RequestParam(required = false) String unit,
@RequestParam(required = false) String driverType,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM") YearMonth month,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
PageResult<AlarmMonthlyVO> result = monthlyReportService.getMonthlyAlarmData(unit, driverType, month, pageNo, pageSize);
return CommonResult.success(result);
}
@Operation(summary = "获取报警详情")
@GetMapping("/monthly-details/{instanceId}")
public CommonResult<List<AlarmDetailVO>> getMonthlyDetails(
@PathVariable String instanceId,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM") YearMonth month) {
List<AlarmDetailVO> details = monthlyReportService.getAlarmDetails(instanceId, month);
return CommonResult.success(details);
}
@Operation(summary = "获取光字牌报警详情")
@GetMapping("/monthly-gzp-details/{gzpName}")
public CommonResult<List<GzpAlarmDetailVO>> getGzpMonthlyDetails(
@PathVariable String gzpName,
@RequestParam String instanceId,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM") YearMonth month) {
List<GzpAlarmDetailVO> details = monthlyReportService.getGzpAlarmDetails(gzpName, instanceId, month);
return CommonResult.success(details);
}
}

18
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/MonthReportvo/AlarmDetailVO.java

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.MonthReportvo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "报警详情视图对象")
public class AlarmDetailVO {
@Schema(description = "光字牌名称", example = "锅炉超压报警")
private String tagname;
@Schema(description = "报警次数", example = "5")
private Integer alarmcount;
@Schema(description = "报警时长(秒)", example = "1510")
private Long alarmtime;
}

28
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/MonthReportvo/AlarmMonthlyVO.java

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.MonthReportvo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Map;
@Data
@Schema(description = "报警月报表视图对象")
public class AlarmMonthlyVO {
@Schema(description = "实例ID", example = "mp_123456")
private String id;
@Schema(description = "实例名称", example = "锅炉1号压力传感器")
private String instanceName;
@Schema(description = "总报警次数", example = "42")
private Integer totalAlarms;
@Schema(description = "各天报警数量", example = "{\"day_1\":10,\"day_2\":20}")
private Map<String, Integer> dayCounts;
@Schema(description = "总报警时长(秒)", example = "8130")
private Long alarmDuration;
@Schema(description = "是否可查看详情", example = "true")
private Boolean hasDetails;
}

22
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/MonthReportvo/GzpAlarmDetailVO.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.MonthReportvo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@Schema(description = "光字牌详情视图对象")
public class GzpAlarmDetailVO {
@Schema(description = "光字牌名称", example = "锅炉压力高报警")
private String gzpName;
@Schema(description = "开始时间", example = "2023-08-01 10:15:30")
private LocalDateTime startTime;
@Schema(description = "结束时间", example = "2023-08-01 10:25:45")
private LocalDateTime endTime;
@Schema(description = "超限时长(秒)", example = "615")
private Long duration;
}

95
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/YearReportController.java

@ -0,0 +1,95 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.YearReportvo.*;
import cn.iocoder.yudao.module.alert.dao.domain.YearReport;
import cn.iocoder.yudao.module.alert.dao.service.YearReportService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.List;
import java.util.stream.Collectors;
@Tag(name = "年报")
@RestController
@RequestMapping("/alarm")
public class YearReportController {
private final YearReportService service;
public YearReportController(YearReportService service) {
this.service = service;
}
@Operation(summary = "获取年报表数据")
@GetMapping("/yearly-report")
public CommonResult<PageResult<AlarmYearlyVO>> getYearlyReport(
@RequestParam(required = false) String unit,
@RequestParam(required = false) String driverType,
@RequestParam(required = false) Integer year,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
PageResult<YearReport> pageResult = service.getYearlyAlarmData(unit, driverType, year, pageNo, pageSize);
List<AlarmYearlyVO> vos = pageResult.getList().stream()
.map(this::convertToVO)
.collect(Collectors.toList());
return CommonResult.success(new PageResult<>(vos, pageResult.getTotal()));
}
private AlarmYearlyVO convertToVO(YearReport domain) {
AlarmYearlyVO vo = new AlarmYearlyVO();
vo.setId(domain.getId());
vo.setInstanceName(domain.getInstanceName());
vo.setTotalAlarms(domain.getTotalAlarms());
vo.setMonthCounts(domain.getMonthCounts());
vo.setAlarmDuration(domain.getAlarmDuration());
vo.setHasDetails(true);
return vo;
}
@Operation(summary = "获取报警详情")
@GetMapping("/yearly-details/{instanceId}")
public CommonResult<List<AlarmDetailVO>> getYearlyDetails(
@PathVariable String instanceId,
@RequestParam(required = false) Integer year) {
List<AlarmDetailVO> details = service.getAlarmDetails(instanceId, year).stream()
.map(domain -> {
AlarmDetailVO vo = new AlarmDetailVO();
vo.setTagname(domain.getTagname());
vo.setAlarmcount(domain.getAlarmcount());
vo.setAlarmtime(domain.getAlarmtime());
return vo;
})
.collect(Collectors.toList());
return CommonResult.success(details);
}
@Operation(summary = "获取光字牌报警详情")
@GetMapping("/yearly-gzp-details/{gzpName}")
public CommonResult<List<GzpAlarmDetailVO>> getGzpYearlyDetails(
@PathVariable String gzpName,
@RequestParam String instanceId,
@RequestParam(required = false) Integer year) {
List<GzpAlarmDetailVO> details = service.getGzpAlarmDetails(gzpName, instanceId, year).stream()
.map(domain -> {
GzpAlarmDetailVO vo = new GzpAlarmDetailVO();
vo.setGzpName(domain.getGzpName());
vo.setStartTime(domain.getStartTime().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime());
vo.setEndTime(domain.getEndTime().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime());
vo.setDuration(domain.getExceedDuration());
return vo;
})
.collect(Collectors.toList());
return CommonResult.success(details);
}
}

18
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/YearReportvo/AlarmDetailVO.java

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.YearReportvo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "报警详情视图对象")
public class AlarmDetailVO {
@Schema(description = "光字牌名称", example = "锅炉超压报警")
private String tagname;
@Schema(description = "报警次数", example = "5")
private Integer alarmcount;
@Schema(description = "报警时长(秒)", example = "1510")
private Long alarmtime;
}

27
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/YearReportvo/AlarmYearlyVO.java

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.YearReportvo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Map;
@Data
@Schema(description = "报警年报表视图对象")
public class AlarmYearlyVO {
@Schema(description = "实例ID", example = "mp_123456")
private String id;
@Schema(description = "实例名称", example = "锅炉1号压力传感器")
private String instanceName;
@Schema(description = "总报警次数", example = "42")
private Integer totalAlarms;
@Schema(description = "各月报警数量", example = "{\"month_1\":10,\"month_2\":20}")
private Map<String, Integer> monthCounts;
@Schema(description = "总报警时长(秒)", example = "8130")
private Long alarmDuration;
@Schema(description = "是否可查看详情", example = "true")
private Boolean hasDetails;
}

22
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/alarm/analysis/YearReportvo/GzpAlarmDetailVO.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.YearReportvo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@Schema(description = "光字牌详情视图对象")
public class GzpAlarmDetailVO {
@Schema(description = "光字牌名称", example = "锅炉压力高报警")
private String gzpName;
@Schema(description = "开始时间", example = "2023-08-01 10:15:30")
private LocalDateTime startTime;
@Schema(description = "结束时间", example = "2023-08-01 10:25:45")
private LocalDateTime endTime;
@Schema(description = "超限时长(秒)", example = "615")
private Long duration;
}

40
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/device/DeviceController.java

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.alert.controller.admin.device;
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.device.vo.DeviceRespVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.calcgroup.CalcGroupDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.alert.service.calcgroup.CalcGroupService;
import cn.iocoder.yudao.module.alert.service.device.DeviceService;
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("/device")
@Validated
public class DeviceController {
@Resource
private DeviceService deviceService;
@GetMapping("/info")
@Operation(summary = "获取页面属性", description = "用于构造前端页面")
public CommonResult<DeviceRespVO> getdeviceInfo(Long id) {
DeviceDO list = deviceService.getDeviceInfo(id);
return success(BeanUtils.toBean(list, DeviceRespVO.class));
}
}

37
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/device/vo/DeviceRespVO.java

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.alert.controller.admin.device.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "设备 - 设备首页")
@Data
@ExcelIgnoreUnannotated
public class DeviceRespVO {
@JsonProperty("ID")
@Schema(description = "id", example = "id")
private Long id;
@JsonProperty("Unit_ID")
@Schema(description = "机组id", example = "id")
private Long unitId;
@JsonProperty("System_ID")
@Schema(description = "系统id", example = "id")
private Long systemId;
@JsonProperty("Name")
@Schema(description = "页面名称", example = "yudao")
private String name;
@JsonProperty("Page_Content")
@Schema(description = "页面信息", example = "yudao")
private String pageContent;
}

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

@ -105,8 +105,13 @@ public class EXAController {
Point.builder().ItemName("gbqegj").GroupName("test").ItemType(5).Descriptor("fqnewfej")
.EngUnits("ge").Source("批量录入").AutoSave(true).build()
);
// 输出
ExcelUtils.write(response, "用户导入模板.xls", "测点列表", Point.class, list);
// 输出excel
// ExcelUtils.write(response, "用户导入模板.xls", "测点列表", Point.class, list);
//输出csv
ExcelUtils.writeCSV(response, "用户导入模板.csv", "测点列表", Point.class, list);
}
@PostMapping("/import")
@ -119,7 +124,7 @@ public class EXAController {
public CommonResult<EXAPointImportRespVO> importExcel(@RequestParam("file") MultipartFile file,
@RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {
System.out.println(file);
List<Point> list = ExcelUtils.read(file, Point.class);
List<Point> list = ExcelUtils.readCSV(file, Point.class);
return success(exaService.importPointList(list, updateSupport));
}

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

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant;
import cn.iocoder.yudao.module.alert.service.instant.InstantService;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "运行中心 - 模型实例-回算")
@RestController
@RequestMapping("/alert/instant/calc")
@Validated
public class InstantCalcController {
@Resource
private InstantService instantService;
}

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

@ -10,8 +10,13 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
public class InstantPageReqVO extends PageParam {
@Schema(description = "机组id", example = "id")
private Integer unitId;
private Integer unit;
@Schema(description = "系统id", example = "id")
private Integer type;
@Schema(description = "子系统id", example = "id")
private Integer system;
@Schema(description = "系统id", example = "yudao")
private Integer modelId;

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

@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.alert.controller.admin.model;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelInfoVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSelectQuery;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSimpleVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.*;
import cn.iocoder.yudao.module.alert.param.ModelTestParam;
import cn.iocoder.yudao.module.alert.param.TrainParam;
import cn.iocoder.yudao.module.alert.service.model.ModelService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@ -38,7 +38,7 @@ public class ModelController {
}
@PostMapping("/")
public CommonResult<Integer> saveModel(@RequestBody ModelInfoVO model) {
public CommonResult<Integer> saveModel(@RequestBody ModelInitVO model) {
Integer id = modelService.createModel(model);
if (Objects.nonNull(id) && id > 0) {
return CommonResult.success(id);
@ -51,4 +51,20 @@ public class ModelController {
Boolean b = modelService.updateModelInfo(vo);
return CommonResult.success(b);
}
@PostMapping("/train")
public CommonResult<TrainInfo> getTrainData(@RequestBody TrainParam param) {
try {
TrainInfo trainInfo = modelService.trainModel(param);
return CommonResult.success(trainInfo);
} catch (Exception e) {
return CommonResult.error(INTERNAL_SERVER_ERROR.getCode(), e.getMessage());
}
}
@PostMapping("/test")
public CommonResult<ModelTestData> getTestData(ModelTestParam param) {
ModelTestData modelTestData = modelService.getModelTestData(param);
return CommonResult.success(modelTestData);
}
}

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

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

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

@ -1,9 +1,13 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.model;
import cn.iocoder.yudao.module.alert.common.enums.Algorithm;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelInfoVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.TrainInfo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -18,26 +22,102 @@ import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
public class ModelInfo {
/**
* id
*/
@JsonProperty("id")
private Integer id;
/**
* 创建人
*/
private String creator;
@JsonProperty("name")
private String name;
@JsonProperty("description")
private String description;
@JsonProperty("founder")
private String founder;
@JsonProperty("creatTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/**
* 名称
*/
private String modelName;
@JsonProperty("Modifier")
private String modifier;
@JsonProperty("modifiedTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifiedTime;
@JsonProperty("algorithm")
private Algorithm algorithm;
@JsonProperty("sampling")
private Integer sampling;
@JsonProperty("monitor")
private String monitor;
@JsonProperty("trainTime")
private List<TrainTime> trainTime;
@JsonProperty("model_state")
private String modelState;
@JsonProperty("pointInfo")
private List<Point> pointInfo;
private String condition;
@JsonProperty("rate")
private BigDecimal rate;
@JsonProperty("outPointInfo")
private List<Point> outPointInfo;
@JsonProperty("biasPointInfo")
private List<Point> biasPointInfo;
@JsonProperty("faultVariablePointInfo")
private List<Point> faultVariablePointInfo;
@JsonProperty("btmState")
private String btmState;
@JsonProperty("version")
private String version;
@JsonProperty("online")
private Integer online;
@JsonProperty("unit")
private String unit;
@JsonProperty("versionNumber")
private Integer versionNumber;
@JsonProperty("alarmmodelset")
private AlarmModelSet alarmModelSet;
@JsonProperty("para")
private TrainInfo para;
@JsonProperty("principal")
private Integer principal;
@JsonProperty("precision")
private String precision;
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class AlarmModelSet {
@JsonProperty("alarmname")
private String alarmName;
@JsonProperty("alarmcondition")
private String alarmCondition;
public static AlarmModelSet defaultInit() {
return new AlarmModelSet("全工况运行", "1=1");
}
}
private Integer sampling;
}

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

@ -16,33 +16,30 @@ import java.math.BigDecimal;
@NoArgsConstructor
@AllArgsConstructor
public class Point {
private String PointId;
private String Description;
private String Unit;
@JsonProperty("Lower")
private BigDecimal Lower;
@JsonProperty("Upper")
private BigDecimal Upper;
private Boolean dead;
private String limit;
private Boolean lock;
/**
* 系统名称
* 残差下限
*/
private String systemName;
/**
* 目标点号
*/
private String point;
/**
* 描述
*/
private String description;
/**
* 单位
*/
private String unit;
/**
* 上限
*/
private BigDecimal upperlimit;
private BigDecimal lowerBound;
/**
*
* 残差上限
*/
private BigDecimal lowerlimit;
private BigDecimal upperBound;
private BigDecimal TMax;
private BigDecimal TMin;
private BigDecimal TAvg;
private BigDecimal DMax;
private BigDecimal DMin;
private BigDecimal DAvg;
private BigDecimal C95;
private BigDecimal C99;
}

41
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/TrainTime.java

@ -0,0 +1,41 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TrainTime {
/**
* 开始时间
*/
private String st;
/**
* 结束时间
*/
private String et;
/**
* 时长
*/
private Integer duration;
/**
* 采样数量
*/
private Integer number;
/**
* 清洗样本数
*/
private Integer filter;
/**
* 有效样本数
*/
private Integer mode;
}

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

@ -15,21 +15,12 @@ import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
public class ModelDataVO {
/**
* 目标数值
*/
private List<Double> targetValue;
/**
* 参数个数
*/
private int[] sampleValue;
/**
* 边界数据
*/
private List<List<Double>> dataList;
private List<DataItem> data;
/**
* 热力图数据
*/
private List<int[]> heatData;
@Data
public static class DataItem {
private List<List<Object>> history;
private List<List<Object>> future;
private String name;
}
}

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

@ -0,0 +1,87 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ModelInfoDetails {
@JsonProperty("Train_X_min")
private List<Double> trainXMin;
@JsonProperty("Train_X_max")
private List<Double> trainXMax;
@JsonProperty("Train_X_std")
private List<Double> trainXStd;
@JsonProperty("Train_X_mean")
private List<Double> trainXMean;
@JsonProperty("Train_X_bais_max")
private List<List<Double>> trainXBaisMax;
@JsonProperty("Train_X_bais_min")
private List<List<Double>> trainXBaisMin;
@JsonProperty("Train_X_bais_mean")
private List<List<Double>> trainXBaisMean;
@JsonProperty("QCUL_95")
private double qcul95;
@JsonProperty("QCUL_99")
private double qcul99;
@JsonProperty("QCUL_95_line")
private List<Double> qcul95Line;
@JsonProperty("QCUL_99_line")
private List<Double> qcul99Line;
@JsonProperty("T2CUL_95")
private double t2cul95;
@JsonProperty("T2CUL_99")
private double t2cul99;
@JsonProperty("T2CUL_95_line")
private List<Double> t2cul95Line;
@JsonProperty("T2CUL_99_line")
private List<Double> t2cul99Line;
@JsonProperty("Kesi_95")
private double kesi95;
@JsonProperty("Kesi_99")
private double kesi99;
@JsonProperty("Kesi_95_line")
private List<Double> kesi95Line;
@JsonProperty("Kesi_99_line")
private List<Double> kesi99Line;
@JsonProperty("COV")
private List<List<Double>> cov;
@JsonProperty("K")
private int k;
@JsonProperty("R")
private double r;
@JsonProperty("featValue")
private List<Double> featValue;
@JsonProperty("featVec")
private List<List<Double>> featVec;
@JsonProperty("selectVec")
private List<List<Double>> selectVec;
}

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

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

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

@ -0,0 +1,58 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import cn.iocoder.yudao.module.alert.common.enums.Algorithm;
import cn.iocoder.yudao.module.alert.controller.admin.model.model.Point;
import cn.iocoder.yudao.module.alert.controller.admin.model.model.TrainTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ModelInitVO {
/**
* id
*/
private Integer id;
/**
* 创建人
*/
private String founder;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/**
* 运行条件
*/
private String condition;
/**
* 名称
*/
private String modelName;
private String description;
private List<Point> pointInfo;
private List<TrainTime> trainTime;
private Algorithm algorithm;
private Integer systemId;
private Integer sampling;
private BigDecimal rate;
}

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

@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ModelTestData {
private List<List<Double>> sampleData;
private List<List<Double>> reconData;
private List<List<Double>> errorData;
private Integer R;
private List<Double> SPE;
private List<List<Integer>> paraState;
private String time;
}

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

@ -0,0 +1,26 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TrainInfo {
@JsonProperty("Model_info")
private ModelInfoDetails modelInfo;
@JsonProperty("Model_type")
private String modelType;
@JsonProperty("BeforeCleanSamNum")
private int beforeCleanSamNum;
@JsonProperty("AfterCleanSamNum")
private int afterCleanSamNum;
@JsonProperty("CleanOrNot")
private boolean cleanOrNot;
}

56
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/alarm/analysis/dayDO.java

@ -0,0 +1,56 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.util.Date;
@Data
public class dayDO {
private Long id;
private String warnId;
private Date startTime;
private Date endTime;
@TableField("超限时长")
private Long exceedDuration; // 超限时长(秒)
private String year;
private Integer month;
private Integer day;
private Integer hour;
private String timeFlag;
private String mpId;
private String unitId;
private String systemTypeName;
private String systemName;
private String systemTypeId;
private String systemId;
private String algorithmId;
private String modelId;
private String mpName; // 实例名称
private String alarmTypeId;
@TableField("UNIT")
private String unit; // 机组
private String alarmLevelName;
private String alarmModelRuleName;
private String pointId;
private String pointName;
private String modelOrRuleName;
private String warnStatus1;
private String pointOrModel;
private String gzpName; // 光字牌名称
private Integer alarmCount;
@TableField("Algorithm_ShortName")
private String algorithmShortName;
@TableField("Confirmed")
private Boolean confirmed;
@TableField("SUGGESTION")
private String suggestion;
private Date confirmTime;
private String modelName;
}

67
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/alarm/analysis/monthDO.java

@ -0,0 +1,67 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
@Data
@TableName("WARN_HISTORY_VIEW")
public class monthDO {
private Long id;
private String warnId;
private Date startTime;
private Date endTime;
@TableField("超限时长")
private Long exceedDuration;
private String year;
private Integer month;
private Integer day;
private Integer hour;
private String timeFlag;
private String mpId;
private String unitId;
private String systemTypeName;
private String systemName;
private String systemTypeId;
private String systemId;
private String algorithmId;
private String modelId;
@TableField("mpName")
private String mpName;
private String alarmTypeId;
@TableField("UNIT")
private String unit;
private String alarmLevelName;
private String alarmModelRuleName;
private String pointId;
private String pointName;
private String modelOrRuleName;
private String warnStatus1;
private String pointOrModel;
@TableField("gzpName")
private String gzpName;
private Integer alarmCount;
@TableField("Algorithm_ShortName")
private String algorithmShortName;
@TableField("Confirmed")
private Boolean confirmed;
@TableField("SUGGESTION")
private String suggestion;
private Date confirmTime;
private String modelName;
}

59
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/alarm/analysis/yearDO.java

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.util.Date;
@Data
public class yearDO {
private Long id;
private String warnId;
private Date startTime;
private Date endTime;
@TableField("超限时长")
private Long exceedDuration; // 超限时长(秒)
private Integer year;
private Integer month;
private Integer day;
private Integer hour;
private String timeFlag;
private String mpId;
private String unitId;
private String systemTypeName;
private String systemName;
private String systemTypeId;
private String systemId;
private String algorithmId;
private String modelId;
private String mpName; // 实例名称
private String alarmTypeId;
@TableField("UNIT")
private String unit; // 机组
private String alarmLevelName;
private String alarmModelRuleName;
private String pointId;
private String pointName;
private String modelOrRuleName;
private String warnStatus1;
private String pointOrModel;
private String gzpName; // 光字牌名称
private Integer alarmCount;
@TableField("Algorithm_ShortName")
private String algorithmShortName;
@TableField("Confirmed")
private Boolean confirmed;
@TableField("SUGGESTION")
private String suggestion;
private Date confirmTime;
private String modelName;
}

46
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/device/DeviceDO.java

@ -0,0 +1,46 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.device;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@DS("slave")
@TableName(value = "Page_Display", autoResultMap = true)
@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = false)
public class DeviceDO {
@TableId("ID")
@Schema(description = "id", example = "id")
private Long id;
@TableField("Unit_ID")
@Schema(description = "机组id", example = "id")
private Long unitId;
@TableField("System_ID")
@Schema(description = "系统id", example = "id")
private Long systemId;
@TableField("Name")
@Schema(description = "页面名称", example = "yudao")
private String name;
@TableField("Page_Content")
@Schema(description = "页面信息", example = "yudao")
private String pageContent;
}

10
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/device/DeviceMapper.java

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

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

@ -17,6 +17,9 @@ public interface InstantMapper extends BaseMapperX<InstantDO> {
.eqIfPresent(InstantDO::getIsUpdate,reqVO.getIsUpdate())
.eqIfPresent(InstantDO::getRunning,reqVO.getRunning())
.eqIfPresent(InstantDO::getRunningLog,reqVO.getRunningLog())
.eqIfPresent(InstantDO::getUnitId,reqVO.getUnit())
.eqIfPresent(InstantDO::getSystemTypeId,reqVO.getType())
.eqIfPresent(InstantDO::getSystemId,reqVO.getSystem())
.orderByAsc(InstantDO::getId));
}

16
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/DayReport.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.alert.dao.domain;
import lombok.Data;
import java.util.Map;
@Data
public class DayReport {
private String id;
private String instanceName;
private Integer totalAlarms;
private Long alarmDuration;
private Map<String, Integer> hourCounts;
// 详情用
private String tagname;
private Integer alarmcount;
private Long alarmtime;
}

24
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/MonthReport.java

@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.alert.dao.domain;
import lombok.Data;
import java.util.Map;
@Data
public class MonthReport {
private String id;
private String instanceName;
private Integer totalAlarms;
private Long alarmDuration;
private Map<String, Integer> dayCounts;
// 详情用字段
private String tagname;
private Integer alarmcount;
private Long alarmtime;
// 光字牌详情用字段
private String gzpName;
private java.util.Date startTime;
private java.util.Date endTime;
private Long exceedDuration;
}

18
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/YearReport.java

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.alert.dao.domain;
import lombok.Data;
import java.util.Map;
@Data
public class YearReport {
private String id;
private String instanceName;
private Integer totalAlarms;
private Long alarmDuration;
private Map<String, Integer> monthCounts;
// 详情用
private String tagname;
private Integer alarmcount;
private Long alarmtime;
}

51
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/DayReportMapper.java

@ -0,0 +1,51 @@
package cn.iocoder.yudao.module.alert.dao.mapper;
import cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis.dayDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface DayReportMapper extends BaseMapper<dayDO> {
@Select("<script>" +
"SELECT * FROM WARN_HISTORY_VIEW " +
"<where>" +
" <if test='unit != null'> AND unit_id = #{unit} </if>" +
" <if test='driverType != null'> AND model_or_rule_name = #{driverType} </if>" +
" <if test='date != null'> " +
" AND YY = YEAR(#{date}) AND MM = MONTH(#{date}) AND DD = DAY(#{date}) " +
" </if>" +
"</where>" +
"</script>")
List<dayDO> selectByCondition(
@Param("unit") String unit,
@Param("driverType") String driverType,
@Param("date") String date);
@Select("<script>" +
"SELECT * FROM WARN_HISTORY_VIEW " +
"WHERE mp_id = #{instanceId} " +
"<if test='date != null'> " +
" AND YY = YEAR(#{date}) AND MM = MONTH(#{date}) AND DD = DAY(#{date}) " +
"</if>" +
"</script>")
List<dayDO> selectDetailsByInstanceId(
@Param("instanceId") String instanceId,
@Param("date") String date);
@Select("<script>" +
"SELECT * FROM WARN_HISTORY_VIEW " +
"WHERE mp_id = #{instanceId} AND gzp_name = #{gzpName} " +
"<if test='date != null'> " +
" AND YY = YEAR(#{date}) AND MM = MONTH(#{date}) AND DD = DAY(#{date}) " +
"</if>" +
"</script>")
List<dayDO> selectGzpDetails(
@Param("gzpName") String gzpName,
@Param("instanceId") String instanceId,
@Param("date") String date);
}

53
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/MonthReportMapper.java

@ -0,0 +1,53 @@
package cn.iocoder.yudao.module.alert.dao.mapper;
import cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis.monthDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface MonthReportMapper extends BaseMapper<monthDO>{
@Select("<script>" +
"SELECT * FROM WARN_HISTORY_VIEW " +
"<where>" +
" <if test='unit != null'> AND unit_id = #{unit} </if>" +
" <if test='driverType != null'> AND model_or_rule_name = #{driverType} </if>" +
" <if test='year != null and month != null'> " +
" AND YY = #{year} AND MM = #{month} " +
" </if>" +
"</where>" +
"</script>")
List<monthDO> selectByCondition(
@Param("unit") String unit,
@Param("driverType") String driverType,
@Param("year") Integer year,
@Param("month") Integer month);
@Select("<script>" +
"SELECT * FROM WARN_HISTORY_VIEW " +
"WHERE mp_id = #{instanceId} " +
"<if test='year != null and month != null'> " +
" AND YY = #{year} AND MM = #{month} " +
"</if>" +
"</script>")
List<monthDO> selectDetailsByInstanceId(
@Param("instanceId") String instanceId,
@Param("year") Integer year,
@Param("month") Integer month);
@Select("<script>" +
"SELECT * FROM WARN_HISTORY_VIEW " +
"WHERE mp_id = #{instanceId} AND gzp_name = #{gzpName} " +
"<if test='year != null and month != null'> " +
" AND YY = #{year} AND MM = #{month} " +
"</if>" +
"</script>")
List<monthDO> selectGzpDetails(
@Param("gzpName") String gzpName,
@Param("instanceId") String instanceId,
@Param("year") Integer year,
@Param("month") Integer month);
}

45
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/YearReportMapper.java

@ -0,0 +1,45 @@
package cn.iocoder.yudao.module.alert.dao.mapper;
import cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis.yearDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface YearReportMapper extends BaseMapper<yearDO> {
@Select("<script>" +
"SELECT * FROM WARN_HISTORY_VIEW " +
"<where>" +
" <if test='unit != null'> AND unit_id = #{unit} </if>" +
" <if test='driverType != null'> AND MODEL_OR_RULE_NAME = #{driverType} </if>" +
" <if test='year != null'> AND YY = #{year} </if>" +
"</where>" +
"</script>")
List<yearDO> selectByCondition(
@Param("unit") String unit,
@Param("driverType") String driverType,
@Param("year") Integer year);
@Select("<script>" +
"SELECT * FROM WARN_HISTORY_VIEW " +
"WHERE mp_id = #{instanceId} " +
"<if test='year != null'> AND YY = #{year} </if>" +
"</script>")
List<yearDO> selectDetailsByInstanceId(
@Param("instanceId") String instanceId,
@Param("year") Integer year);
@Select("<script>" +
"SELECT * FROM WARN_HISTORY_VIEW " +
"WHERE mp_id = #{instanceId} AND gzp_name = #{gzpName} " +
"<if test='year != null'> AND YY = #{year} </if>" +
"</script>")
List<yearDO> selectGzpDetails(
@Param("gzpName") String gzpName,
@Param("instanceId") String instanceId,
@Param("year") Integer year);
}

31
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/DayReportService.java

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.alert.dao.service;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis.dayDO;
import cn.iocoder.yudao.module.alert.dao.domain.DayReport;
import java.time.LocalDate;
import java.util.List;
public interface DayReportService {
/**
* 获取日报表数据分页版本
*/
PageResult<DayReport> getDailyAlarmData(String unit, String driverType, LocalDate date, int pageNo, int pageSize);
/**
* 获取报警详情
*/
List<DayReport> getAlarmDetails(String instanceId, LocalDate date);
/**
* @deprecated 使用分页版本 {@link #getDailyAlarmData(String, String, LocalDate, int, int)} 代替
*/
@Deprecated
default List<DayReport> getDailyAlarmData(String unit, String driverType, String date) {
return getDailyAlarmData(unit, driverType, date != null ? LocalDate.parse(date) : null, 1, Integer.MAX_VALUE).getList();
}
/**
* 获取光字牌报警详情
*/
List<dayDO> getGzpAlarmDetails(String gzpName, String instanceId, LocalDate date);
}

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

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.alert.dao.service;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.MonthReportvo.*;
import java.time.YearMonth;
import java.util.List;
public interface MonthReportService {
/**
* 获取月报表数据
*/
PageResult<AlarmMonthlyVO> getMonthlyAlarmData(String unit, String driverType, YearMonth month, int pageNo, int pageSize);
/**
* 获取报警详情
*/
List<AlarmDetailVO> getAlarmDetails(String instanceId, YearMonth month);
/**
* 获取光字牌报警详情
*/
List<GzpAlarmDetailVO> getGzpAlarmDetails(String gzpName, String instanceId, YearMonth month);
}

23
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/YearReportService.java

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.alert.dao.service;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis.yearDO;
import cn.iocoder.yudao.module.alert.dao.domain.YearReport;
import java.util.List;
public interface YearReportService {
/**
* 获取年报表数据分页版本
*/
PageResult<YearReport> getYearlyAlarmData(String unit, String driverType, Integer year, int pageNo, int pageSize);
/**
* 获取报警详情
*/
List<YearReport> getAlarmDetails(String instanceId, Integer year);
/**
* 获取光字牌报警详情
*/
List<yearDO> getGzpAlarmDetails(String gzpName, String instanceId, Integer year);
}

156
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/DayReportServiceImpl.java

@ -0,0 +1,156 @@
package cn.iocoder.yudao.module.alert.dao.service.impl;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis.dayDO;
import cn.iocoder.yudao.module.alert.dao.domain.DayReport;
import cn.iocoder.yudao.module.alert.dao.mapper.DayReportMapper;
import cn.iocoder.yudao.module.alert.dao.service.DayReportService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class DayReportServiceImpl implements DayReportService {
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.BASIC_ISO_DATE;
private final DayReportMapper dayReportMapper;
public DayReportServiceImpl(DayReportMapper dayReportMapper) {
this.dayReportMapper = dayReportMapper;
}
@Override
public PageResult<DayReport> getDailyAlarmData(String unit, String driverType, LocalDate date, int pageNo, int pageSize) {
Page<dayDO> page = new Page<>(pageNo, pageSize);
String formattedDate = (date != null) ? date.format(DATE_FORMATTER) : null;
List<dayDO> rawData = dayReportMapper.selectByCondition( unit, driverType, formattedDate);
if (CollectionUtils.isEmpty(rawData)) {
return new PageResult<>(Collections.emptyList(), 0L);
}
// 动态计算 exceedDuration、year、month、day、hour
rawData.forEach(this::calculateDynamicFields);
Map<String, List<dayDO>> groupByInstance = rawData.stream()
.collect(Collectors.groupingBy(dayDO::getMpName));
// 4. 获取所有 instanceName 并按分页截取
List<String> instanceNames = new ArrayList<>(groupByInstance.keySet());
Long totalInstances = (long) instanceNames.size();
// 5. 计算分页范围
int fromIndex = (pageNo - 1) * pageSize;
if (fromIndex >= totalInstances) {
return new PageResult<>(Collections.emptyList(), (long) totalInstances);
}
int toIndex = (int) Math.min(fromIndex + pageSize, totalInstances);
List<String> pagedInstanceNames = instanceNames.subList(fromIndex, toIndex);
// 6. 构建分页结果
List<DayReport> result = pagedInstanceNames.stream()
.map(instanceName -> {
List<dayDO> instanceData = groupByInstance.get(instanceName);
return buildDayReport(instanceName, instanceData);
})
.collect(Collectors.toList());
return new PageResult<>(result, (Long) totalInstances);
}
@Override
public List<DayReport> getAlarmDetails(String instanceId, LocalDate date) {
// 1. 查询原始数据(按 instanceId + 日期)
List<dayDO> rawData = dayReportMapper.selectDetailsByInstanceId(
instanceId,
date != null ? date.format(DATE_FORMATTER) : null
);
if (CollectionUtils.isEmpty(rawData)) {
return Collections.emptyList();
}
// 2. 动态计算 exceedDuration
rawData.forEach(this::calculateDynamicFields);
// 3. 按 GZP_NAME 分组
Map<String, List<dayDO>> groupByGzp = rawData.stream()
.collect(Collectors.groupingBy(dayDO::getGzpName));
// 4. 构建返回结果
List<DayReport> result = new ArrayList<>(groupByGzp.size());
groupByGzp.forEach((gzpName, gzpData) -> {
DayReport domain = new DayReport();
domain.setTagname(gzpName);
domain.setAlarmcount(gzpData.size());
domain.setAlarmtime(gzpData.stream()
.mapToLong(item -> item.getExceedDuration() != null ? item.getExceedDuration() : 0L)
.sum());
result.add(domain);
});
return result;
}
@Override
public List<dayDO> getGzpAlarmDetails(String gzpName, String instanceId, LocalDate date) {
String formattedDate = (date != null) ? date.format(DATE_FORMATTER) : null;
List<dayDO> rawData = dayReportMapper.selectGzpDetails(gzpName, instanceId, formattedDate);
rawData.forEach(this::calculateDynamicFields);
return rawData;
}
/**
* 动态计算字段exceedDurationyearmonthdayhour
*/
private void calculateDynamicFields(dayDO item) {
if (item.getStartTime() != null && item.getEndTime() != null) {
// 计算超限时长(秒)
long durationSeconds = Duration.between(
item.getStartTime().toInstant(),
item.getEndTime().toInstant()
).getSeconds();
item.setExceedDuration(durationSeconds);
// 计算年、月、日、小时
LocalDateTime localStart = item.getStartTime().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
item.setYear(String.valueOf(localStart.getYear()));
item.setMonth(localStart.getMonthValue());
item.setDay(localStart.getDayOfMonth());
item.setHour(localStart.getHour());
}
}
private DayReport buildDayReport(String instanceName, List<dayDO> instanceData) {
DayReport domain = new DayReport();
domain.setId(instanceData.get(0).getMpId());
domain.setInstanceName(instanceName);
domain.setTotalAlarms(instanceData.size());
domain.setAlarmDuration(instanceData.stream()
.mapToLong(item -> item.getExceedDuration() != null ? item.getExceedDuration() : 0)
.sum());
domain.setHourCounts(calculateHourlyCounts(instanceData));
return domain;
}
private Map<String, Integer> calculateHourlyCounts(List<dayDO> data) {
Map<String, Integer> hourCounts = new HashMap<>(24);
for (int i = 0; i < 24; i++) {
final int hour = i;
hourCounts.put("hour_" + i, (int) data.stream()
.filter(item -> item.getHour() != null && item.getHour() == hour)
.count());
}
return hourCounts;
}
}

169
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/MonthReportServiceImpl.java

@ -0,0 +1,169 @@
package cn.iocoder.yudao.module.alert.dao.service.impl;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.alarm.analysis.MonthReportvo.*;
import cn.iocoder.yudao.module.alert.dao.service.MonthReportService;
import cn.iocoder.yudao.module.alert.dao.mapper.MonthReportMapper;
import cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis.monthDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.*;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class MonthReportServiceImpl implements MonthReportService {
private final MonthReportMapper monthlyReportMapper;
public MonthReportServiceImpl(MonthReportMapper monthlyReportMapper) {
this.monthlyReportMapper = monthlyReportMapper;
}
@Override
public PageResult<AlarmMonthlyVO> getMonthlyAlarmData(String unit, String driverType, YearMonth month, int pageNo, int pageSize) {
Integer year = month != null ? month.getYear() : null;
Integer monthValue = month != null ? month.getMonthValue() : null;
List<monthDO> rawData = monthlyReportMapper.selectByCondition(unit, driverType, year, monthValue);
if (CollectionUtils.isEmpty(rawData)) {
return new PageResult<>(Collections.emptyList(), 0L);
}
// 动态计算字段
rawData.forEach(this::calculateDynamicFields);
// 按实例名称分组
Map<String, List<monthDO>> groupByInstance = rawData.stream()
.collect(Collectors.groupingBy(monthDO::getMpName));
List<String> instanceNames = new ArrayList<>(groupByInstance.keySet());
Long totalInstances = (long) instanceNames.size();
// 分页处理
int fromIndex = (pageNo - 1) * pageSize;
if (fromIndex >= totalInstances) {
return new PageResult<>(Collections.emptyList(), totalInstances);
}
int toIndex = (int) Math.min(fromIndex + pageSize, totalInstances);
List<String> pagedInstanceNames = instanceNames.subList(fromIndex, toIndex);
// 构建结果
List<AlarmMonthlyVO> result = pagedInstanceNames.stream()
.map(instanceName -> {
List<monthDO> instanceData = groupByInstance.get(instanceName);
return buildMonthlyVO(instanceName, instanceData, month);
})
.collect(Collectors.toList());
return new PageResult<>(result, totalInstances);
}
@Override
public List<AlarmDetailVO> getAlarmDetails(String instanceId, YearMonth month) {
Integer year = month != null ? month.getYear() : null;
Integer monthValue = month != null ? month.getMonthValue() : null;
List<monthDO> rawData = monthlyReportMapper.selectDetailsByInstanceId(instanceId, year, monthValue);
if (CollectionUtils.isEmpty(rawData)) {
return Collections.emptyList();
}
for (monthDO rawDatum : rawData) {
calculateDynamicFields(rawDatum);
}
// 按光字牌名称分组
Map<String, List<monthDO>> groupByGzp = rawData.stream()
.collect(Collectors.groupingBy(monthDO::getGzpName));
List<AlarmDetailVO> result = new ArrayList<>();
groupByGzp.forEach((gzpName, gzpData) -> {
AlarmDetailVO vo = new AlarmDetailVO();
vo.setTagname(gzpName);
vo.setAlarmcount(gzpData.size());
vo.setAlarmtime(gzpData.stream()
.mapToLong(item -> item.getExceedDuration() != null ? item.getExceedDuration() : 0L)
.sum());
result.add(vo);
});
return result;
}
@Override
public List<GzpAlarmDetailVO> getGzpAlarmDetails(String gzpName, String instanceId, YearMonth month) {
Integer year = month != null ? month.getYear() : null;
Integer monthValue = month != null ? month.getMonthValue() : null;
List<monthDO> rawData = monthlyReportMapper.selectGzpDetails(gzpName, instanceId, year, monthValue);
if (CollectionUtils.isEmpty(rawData)) {
return Collections.emptyList();
}
rawData.forEach(this::calculateDynamicFields);
return rawData.stream()
.map(this::convertToGzpDetailVO)
.collect(Collectors.toList());
}
private void calculateDynamicFields(monthDO item) {
if (item.getStartTime() != null && item.getEndTime() != null) {
// 计算超限时长(秒)
long durationSeconds = Duration.between(
item.getStartTime().toInstant(),
item.getEndTime().toInstant()
).getSeconds();
item.setExceedDuration(durationSeconds);
// 计算年、月、日
LocalDateTime localStart = item.getStartTime().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
item.setYear(String.valueOf(localStart.getYear()));
item.setMonth(localStart.getMonthValue());
item.setDay(localStart.getDayOfMonth());
item.setHour(localStart.getHour());
}
}
private AlarmMonthlyVO buildMonthlyVO(String instanceName, List<monthDO> instanceData, YearMonth month) {
AlarmMonthlyVO vo = new AlarmMonthlyVO();
vo.setId(instanceData.get(0).getMpId());
vo.setInstanceName(instanceName);
vo.setTotalAlarms(instanceData.size());
vo.setAlarmDuration(instanceData.stream()
.mapToLong(item -> item.getExceedDuration() != null ? item.getExceedDuration() : 0L)
.sum());
vo.setDayCounts(calculateDailyCounts(instanceData, month));
vo.setHasDetails(true);
return vo;
}
private Map<String, Integer> calculateDailyCounts(List<monthDO> data, YearMonth month) {
int daysInMonth = month != null ? month.lengthOfMonth() : YearMonth.now().lengthOfMonth();
Map<String, Integer> dayCounts = new HashMap<>(daysInMonth);
for (int day = 1; day <= daysInMonth; day++) {
final int targetDay = day;
long count = data.stream()
.filter(item -> item.getDay() != null && item.getDay() == targetDay)
.count();
dayCounts.put("day_" + day, (int) count);
}
return dayCounts;
}
private GzpAlarmDetailVO convertToGzpDetailVO(monthDO domain) {
GzpAlarmDetailVO vo = new GzpAlarmDetailVO();
vo.setGzpName(domain.getGzpName());
vo.setStartTime(domain.getStartTime().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime());
vo.setEndTime(domain.getEndTime().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime());
vo.setDuration(domain.getExceedDuration());
return vo;
}
}

133
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/YearReportServiceImpl.java

@ -0,0 +1,133 @@
package cn.iocoder.yudao.module.alert.dao.service.impl;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.dao.domain.YearReport;
import cn.iocoder.yudao.module.alert.dao.mapper.YearReportMapper;
import cn.iocoder.yudao.module.alert.dao.service.YearReportService;
import cn.iocoder.yudao.module.alert.dal.dataobject.alarm.analysis.yearDO;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class YearReportServiceImpl implements YearReportService {
private final YearReportMapper yearReportMapper;
public YearReportServiceImpl(YearReportMapper yearReportMapper) {
this.yearReportMapper = yearReportMapper;
}
@Override
public PageResult<YearReport> getYearlyAlarmData(String unit, String driverType, Integer year, int pageNo, int pageSize) {
System.out.printf("查询参数 - unit: %s, driverType: %s, year: %d, pageNo: {}, pageSize: {}",
unit, driverType, year, pageNo, pageSize);
List<yearDO> rawData = yearReportMapper.selectByCondition(unit, driverType, year);
if (CollectionUtils.isEmpty(rawData)) {
return new PageResult<>(Collections.emptyList(), 0L);
}
rawData.forEach(this::calculateDynamicFields);
Map<String, List<yearDO>> groupByInstance = rawData.stream()
.collect(Collectors.groupingBy(yearDO::getMpName));
List<String> instanceNames = new ArrayList<>(groupByInstance.keySet());
Long totalInstances = (long) instanceNames.size();
int fromIndex = (pageNo - 1) * pageSize;
if (fromIndex >= totalInstances) {
return new PageResult<>(Collections.emptyList(), totalInstances);
}
int toIndex = (int) Math.min(fromIndex + pageSize, totalInstances);
List<String> pagedInstanceNames = instanceNames.subList(fromIndex, toIndex);
List<YearReport> result = pagedInstanceNames.stream()
.map(instanceName -> {
List<yearDO> instanceData = groupByInstance.get(instanceName);
return buildYearReport(instanceName, instanceData);
})
.collect(Collectors.toList());
return new PageResult<>(result, totalInstances);
}
private void calculateDynamicFields(yearDO item) {
if (item.getStartTime() != null && item.getEndTime() != null) {
long durationSeconds = Duration.between(
item.getStartTime().toInstant(),
item.getEndTime().toInstant()
).getSeconds();
item.setExceedDuration(durationSeconds);
LocalDateTime localStart = item.getStartTime().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
item.setYear(localStart.getYear());
item.setMonth(localStart.getMonthValue());
}
}
private YearReport buildYearReport(String instanceName, List<yearDO> instanceData) {
YearReport domain = new YearReport();
domain.setId(instanceData.get(0).getMpId());
domain.setInstanceName(instanceName);
domain.setTotalAlarms(instanceData.size());
domain.setAlarmDuration(instanceData.stream()
.mapToLong(item -> item.getExceedDuration() != null ? item.getExceedDuration() : 0)
.sum());
domain.setMonthCounts(calculateMonthlyCounts(instanceData));
return domain;
}
private Map<String, Integer> calculateMonthlyCounts(List<yearDO> data) {
Map<String, Integer> monthCounts = new HashMap<>(12);
for (int i = 1; i <= 12; i++) {
final int month = i;
monthCounts.put("month_" + i, (int) data.stream()
.filter(item -> item.getMonth() != null && item.getMonth() == month)
.count());
}
return monthCounts;
}
@Override
public List<YearReport> getAlarmDetails(String instanceId, Integer year) {
List<yearDO> rawData = yearReportMapper.selectDetailsByInstanceId(instanceId, year);
if (CollectionUtils.isEmpty(rawData)) {
return Collections.emptyList();
}
rawData.forEach(this::calculateDynamicFields);
Map<String, List<yearDO>> groupByGzp = rawData.stream()
.collect(Collectors.groupingBy(yearDO::getGzpName));
List<YearReport> result = new ArrayList<>(groupByGzp.size());
groupByGzp.forEach((gzpName, gzpData) -> {
YearReport domain = new YearReport();
domain.setTagname(gzpName);
domain.setAlarmcount(gzpData.size());
domain.setAlarmtime(gzpData.stream()
.mapToLong(item -> item.getExceedDuration() != null ? item.getExceedDuration() : 0L)
.sum());
result.add(domain);
});
return result;
}
@Override
public List<yearDO> getGzpAlarmDetails(String gzpName, String instanceId, Integer year) {
List<yearDO> rawData = yearReportMapper.selectGzpDetails(gzpName, instanceId, year);
rawData.forEach(this::calculateDynamicFields);
return rawData;
}
}

31
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/ModelTestParam.java

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.alert.param;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ModelTestParam {
@JsonProperty("Test_Data")
private TestData testData;
private Integer modelId;
private String version;
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class TestData {
private String time;
private String points;
private Integer interval;
@JsonProperty("AddBias")
private List<Double> addBias;
@JsonProperty("AddBias_Time")
private String addBiasTime;
}
}

59
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/TrainParam.java

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.alert.param;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TrainParam {
@JsonAlias("Train_Data")
@JsonProperty("Train_Data")
private TrainData trainData;
@JsonAlias("Hyper_para")
@JsonProperty("Hyper_para")
private HyperPara hyperPara;
private String type;
private String condition;
@JsonAlias("smote_config")
@JsonProperty("smote_config")
private String smoteConfig;
private Boolean smote;
private String targetPoint;
@Data
public static class Smote {
private String pointId;
private String max;
private String min;
private String number;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class HyperPara {
private Double percent;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class TrainData {
private String time;
private String points;
private String dead;
private String limit;
private String uplow;
}
}

16
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/device/DeviceService.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.alert.service.device;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.*;
import cn.iocoder.yudao.module.alert.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import jakarta.validation.Valid;
import java.io.IOException;
import java.util.List;
public interface DeviceService {
DeviceDO getDeviceInfo(Long id);
}

52
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/device/DeviceServiceImpl.java

@ -0,0 +1,52 @@
package cn.iocoder.yudao.module.alert.service.device;
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.device.DeviceDO;
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.device.DeviceMapper;
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 cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.Slave;
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 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.INSTANT_NOT_EXISTS;
import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.*;
@Slave
@Service
@Slf4j
public class DeviceServiceImpl implements DeviceService {
@Resource
private DeviceMapper deviceMapper;
@Override
public DeviceDO getDeviceInfo(Long id) {
return deviceMapper.selectById(id);
}
}

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

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

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

@ -1,10 +1,9 @@
package cn.iocoder.yudao.module.alert.service.model;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.CreateModelInfo;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelInfoVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSelectQuery;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSimpleVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.*;
import cn.iocoder.yudao.module.alert.param.ModelTestParam;
import cn.iocoder.yudao.module.alert.param.TrainParam;
import java.util.List;
@ -36,7 +35,7 @@ public interface ModelService {
* @param model 模型参数
* @return 模型id
*/
Integer createModel(ModelInfoVO model);
Integer createModel(ModelInitVO model);
/**
* 更新model info
@ -45,4 +44,8 @@ public interface ModelService {
* @return 是否成功
*/
Boolean updateModelInfo(ModelInfoVO info);
TrainInfo trainModel(TrainParam param);
ModelTestData getModelTestData(ModelTestParam param);
}

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

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

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

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.alert.service.model.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.alert.common.enums.Algorithm;
@ -9,22 +10,27 @@ import cn.iocoder.yudao.module.alert.common.enums.ModelStatus;
import cn.iocoder.yudao.module.alert.common.enums.ModelTrash;
import cn.iocoder.yudao.module.alert.common.enums.ModelVisible;
import cn.iocoder.yudao.module.alert.controller.admin.model.model.ModelInfo;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelInfoVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSelectQuery;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSimpleVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.*;
import cn.iocoder.yudao.module.alert.dao.domain.ModelCfg;
import cn.iocoder.yudao.module.alert.dao.domain.SystemCfg;
import cn.iocoder.yudao.module.alert.dao.service.ModelCfgService;
import cn.iocoder.yudao.module.alert.dao.service.SystemCfgService;
import cn.iocoder.yudao.module.alert.param.ModelTestParam;
import cn.iocoder.yudao.module.alert.param.TrainParam;
import cn.iocoder.yudao.module.alert.service.model.ModelService;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.core.type.TypeReference;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@ -41,6 +47,9 @@ public class ModelServiceImpl implements ModelService {
private final SystemCfgService systemCfgService;
@Value("${algorithm.host}")
private String algorithmHost;
@Override
public List<ModelSimpleVO> getModelList(ModelSelectQuery query) {
Integer systemId = query.getSystemId();
@ -78,19 +87,21 @@ public class ModelServiceImpl implements ModelService {
public ModelInfoVO getModelInfo(Integer id) {
ModelCfg modelCfg = modelCfgService.getById(id);
if (Objects.nonNull(modelCfg)) {
return JsonUtils.parseObject(modelCfg.getModelInfo(), ModelInfoVO.class);
ModelInfoVO modelInfoVO = JsonUtils.parseObject(modelCfg.getModelInfo(), ModelInfoVO.class);
modelInfoVO.setSystemId(modelCfg.getSystemId());
return modelInfoVO;
}
return null;
}
@Override
public Integer createModel(ModelInfoVO model) {
public Integer createModel(ModelInitVO model) {
try {
ModelInfo info = new ModelInfo();
BeanUtil.copyProperties(model, info);
ModelCfg modelCfg = ModelCfg.builder()
.systemId(model.getSystemId())
.algorithmId(model.getAlgorithmId())
.algorithmId(model.getAlgorithm().code)
.modelName(model.getModelName())
.createTime(new Date())
.trash(ModelTrash.NORMAL.code)
@ -101,8 +112,13 @@ public class ModelServiceImpl implements ModelService {
modelCfgService.save(modelCfg);
Integer modelId = modelCfg.getId();
info.setId(modelId);
info.setCreator(modelCfg.getCreator());
info.setAlgorithm(model.getAlgorithm());
info.setFounder(modelCfg.getCreator());
info.setCreateTime(modelCfg.getCreateTime());
info.setAlarmModelSet(ModelInfo.AlarmModelSet.defaultInit());
info.setName(model.getModelName());
info.setDescription(model.getDescription());
info.setRate(model.getRate());
modelCfg.setModelInfo(JsonUtils.toJsonString(info));
modelCfgService.updateById(modelCfg);
return modelId;
@ -115,6 +131,8 @@ public class ModelServiceImpl implements ModelService {
@Override
public Boolean updateModelInfo(ModelInfoVO modelInfo) {
modelInfo.setModifier(SecurityFrameworkUtils.getLoginUserNickname());
modelInfo.setModifiedTime(new Date());
ModelCfg modelCfg = ModelCfg.builder()
.id(modelInfo.getId())
.modelInfo(JsonUtils.toJsonString(modelInfo))
@ -122,4 +140,25 @@ public class ModelServiceImpl implements ModelService {
.build();
return modelCfgService.updateById(modelCfg);
}
@Override
public TrainInfo trainModel(TrainParam param) {
String trainBody = HttpUtils.post(algorithmHost + "/api/get_smote_data", null, JsonUtils.toJsonString(param));
if (trainBody.contains("error_msg")) {
throw new RuntimeException("模型训练异常:" + JsonUtils.parseObject(trainBody,
new TypeReference<Map<String, String>>() {
}).get("error_msg"));
}
return JsonUtils.parseObject(trainBody, new TypeReference<List<TrainInfo>>() {
}).get(0);
}
@Override
public ModelTestData getModelTestData(ModelTestParam param) {
String result = HttpUtils.post(algorithmHost + "/api/test/Test", null, JsonUtils.toJsonString(param))
.replace("NaN", "-1").replace("Infinity", "1");
return JsonUtils.parseObject(result, ModelTestData.class);
}
}

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

@ -178,4 +178,13 @@ public interface ErrorCodeConstants {
ErrorCode WARN_NOT_EXISTS = new ErrorCode(4_001_000, "预警不存在");
ErrorCode Company_NOT_EXISTS = new ErrorCode(1_002_30_000,"集团不存在");
ErrorCode Company_NAME_DUPLICATE = new ErrorCode(1_002_31_000,"集团名称已存在");
// ========== 厂级 1-002-32-000 ==========
ErrorCode Factory_NOT_EXISTS = new ErrorCode(1_002_32_000, "厂级不存在");
ErrorCode Factory_NAME_DUPLICATE = new ErrorCode(1_002_32_001, "已经存在相同名字的厂级");
// ========== 系统配置 1-002-033-000 ==========
ErrorCode SYSTEM_CONFIG_NOT_EXISTS = new ErrorCode(1_002_033_000, "系统配置不存在");
ErrorCode SYSTEM_CONFIG_NAME_DUPLICATE = new ErrorCode(1_002_033_001, "已经存在该名字的系统配置");
}

63
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/FactoryController.java

@ -0,0 +1,63 @@
package cn.iocoder.yudao.module.system.controller.admin.config.Factory;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryRespVO;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactorySaveReqVO;
import cn.iocoder.yudao.module.system.convert.config.FactoryConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO;
import cn.iocoder.yudao.module.system.service.config.Factory.FactoryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; // 新增导入
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("/system/Factory")
@Validated
@RequiredArgsConstructor // << 修改点1:新增注解
public class FactoryController {
private final FactoryService factoryService; // << 修改点2:移除@Resource, 添加final
@GetMapping("/page")
@Operation(summary = "获得厂级分页列表")
public CommonResult<PageResult<FactoryRespVO>> getFactoryPage(@Valid FactoryPageReqVO reqVO) {
PageResult<FactoryRespVO> pageResult = factoryService.getFactoryPage(reqVO);
return success(pageResult);
}
// ... 其他方法保持不变 ...
@GetMapping("/get")
@Operation(summary = "获得厂级详情")
public CommonResult<FactoryRespVO> getFactory(@RequestParam("id") Long id) {
FactoryDO factory = factoryService.getFactory(id);
return success(FactoryConvert.INSTANCE.convert(factory));
}
@PostMapping("/create")
@Operation(summary = "创建厂级")
public CommonResult<Long> createFactory(@Valid @RequestBody FactorySaveReqVO reqVO) {
return success(factoryService.createFactory(reqVO));
}
@PutMapping("/update")
@Operation(summary = "修改厂级")
public CommonResult<Boolean> updateFactory(@Valid @RequestBody FactorySaveReqVO reqVO) {
factoryService.updateFactory(reqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除厂级")
public CommonResult<Boolean> deleteFactory(@RequestParam("id") Long id) {
factoryService.deleteFactory(id);
return success(true);
}
}

24
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryBaseVO.java

@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 厂级基础VO")
@Data
public class FactoryBaseVO {
@Schema(description = "序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
@Schema(description = "厂级序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1001")
private Long num;
@Schema(description = "厂级名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试厂级")
private String name;
@Schema(description = "厂级简称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试")
private String shortName;
}

12
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryCreateReqVO.java

@ -0,0 +1,12 @@
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo;
import cn.iocoder.yudao.module.system.controller.admin.config.Company.vo.CompanyBaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "管理后台 - 厂级创建请求VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class FactoryCreateReqVO extends CompanyBaseVO {
}

16
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryPageReqVO.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.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 = "管理后台 - 厂级分页请求VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class FactoryPageReqVO extends PageParam {
@Schema(description = "厂级名称", example = "测试")
private String name;
private Long num;
}

22
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryRespVO.java

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 电厂响应 VO")
@Data
public class FactoryRespVO {
@Schema(description = "电厂编号 (对应 plant_id)", requiredMode = Schema.RequiredMode.REQUIRED)
private Long id;
@Schema(description = "电厂名称 (对应 plant_name)", requiredMode = Schema.RequiredMode.REQUIRED)
private String name;
@Schema(description = "电厂简称 (对应 plant_shortname)")
private String shortName;
@Schema(description = "所属集团编号 (对应 area_id)", requiredMode = Schema.RequiredMode.REQUIRED)
private Long areaId;
@Schema(description = "所属集团名称 (后端关联查询得到)")
private String areaName;
@Schema(description = "创建时间")
private LocalDateTime createTime;
}

30
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactorySaveReqVO.java

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo;
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; // 新增导入
@Schema(description = "管理后台 - 电厂创建/修改 Request VO")
@Data // << 修改点:新增注解,并移除所有手写的getter/setter
public class FactorySaveReqVO {
@Schema(description = "电厂编号,更新时必填", example = "1")
private Long id;
@Schema(description = "电厂名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "正宁电厂")
@NotBlank(message = "电厂名称不能为空")
@Size(max = 255)
private String name;
@Schema(description = "电厂简称", example = "正宁")
@Size(max = 50)
private String shortName;
@Schema(description = "所属集团编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "9")
@NotNull(message = "所属集团不能为空")
private Long areaId;
// --- 此处所有手写的 Getter 和 Setter 方法均已删除 ---
}

16
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryUpdateReqVO.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo;
import cn.iocoder.yudao.module.system.controller.admin.config.Company.vo.CompanyBaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "管理后台 - 厂级更新请求VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class FactoryUpdateReqVO extends CompanyBaseVO {
@Schema(description = "序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
}

72
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/SystemConfigController.java

@ -0,0 +1,72 @@
package cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.vo.*;
import cn.iocoder.yudao.module.system.convert.config.SystemConfigConvert; // 确保引入正确的Convert
import cn.iocoder.yudao.module.system.dal.dataobject.config.SystemConfigDO;
import cn.iocoder.yudao.module.system.service.config.SystemConfig.SystemConfigService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
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("/system/system-config")
@Validated
public class SystemConfigController {
@Resource
private SystemConfigService systemConfigService;
@Resource
private SystemConfigConvert systemConfigConvert; // 【关键修正】注入Converter
@PostMapping("/create")
@Operation(summary = "创建系统配置")
@PreAuthorize("@ss.hasPermission('system:system-config:create')")
public CommonResult<Long> createSystemConfig(@Valid @RequestBody SystemConfigSaveReqVO createReqVO) {
return success(systemConfigService.createSystemConfig(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新系统配置")
@PreAuthorize("@ss.hasPermission('system:system-config:update')")
public CommonResult<Boolean> updateSystemConfig(@Valid @RequestBody SystemConfigSaveReqVO updateReqVO) {
systemConfigService.updateSystemConfig(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除系统配置")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('system:system-config:delete')")
public CommonResult<Boolean> deleteSystemConfig(@RequestParam("id") Long id) {
systemConfigService.deleteSystemConfig(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得系统配置")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('system:system-config:query')")
public CommonResult<SystemConfigRespVO> getSystemConfig(@RequestParam("id") Long id) {
SystemConfigDO config = systemConfigService.getSystemConfig(id);
return success(systemConfigConvert.convert(config)); // 【关键修正】使用注入的bean进行转换
}
@GetMapping("/page")
@Operation(summary = "获得系统配置分页")
@PreAuthorize("@ss.hasPermission('system:system-config:query')")
public CommonResult<PageResult<SystemConfigRespVO>> getSystemConfigPage(@Valid SystemConfigPageReqVO pageVO) {
PageResult<SystemConfigDO> pageResult = systemConfigService.getSystemConfigPage(pageVO);
return success(systemConfigConvert.convertPage(pageResult)); // 【关键修正】使用注入的bean进行转换
}
}

15
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigBaseVO.java

@ -0,0 +1,15 @@
package cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
@Data
public class SystemConfigBaseVO {
@Schema(description = "系统名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "锅炉系统")
@NotBlank(message = "系统名称不能为空")
private String name;
@Schema(description = "系统简称", example = "锅炉")
private String abbreviation;
}

14
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigPageReqVO.java

@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.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 = "管理后台 - 系统配置分页请求 VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class SystemConfigPageReqVO extends PageParam {
@Schema(description = "系统名称", example = "锅炉")
private String name;
}

13
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigRespVO.java

@ -0,0 +1,13 @@
package cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "管理后台 - 系统配置响应 VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class SystemConfigRespVO extends SystemConfigBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long id;
}

13
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigSaveReqVO.java

@ -0,0 +1,13 @@
package cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "管理后台 - 系统配置创建/修改 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class SystemConfigSaveReqVO extends SystemConfigBaseVO {
@Schema(description = "编号,更新时必填", example = "1")
private Long id;
}

28
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/config/FactoryConvert.java

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.system.convert.config;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryRespVO;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactorySaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper(componentModel = "spring") // 【核心修正】添加 componentModel = "spring" 属性
public interface FactoryConvert {
FactoryConvert INSTANCE = Mappers.getMapper(FactoryConvert.class);
// 将 SaveReqVO 转换为 DO
FactoryDO convert(FactorySaveReqVO bean);
// 将 DO 转换为 RespVO
FactoryRespVO convert(FactoryDO bean);
// 将 DO 列表转换为 RespVO 列表
List<FactoryRespVO> convertList(List<FactoryDO> list);
// 将 DO 分页 转换为 RespVO 分页
PageResult<FactoryRespVO> convertPage(PageResult<FactoryDO> page);
}

48
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/config/SystemConfigConvert.java

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.system.convert.config;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.vo.SystemConfigRespVO;
import cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.vo.SystemConfigSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.config.SystemConfigDO;
import org.mapstruct.Mapper;
import java.util.ArrayList;
import java.util.List;
@Mapper(componentModel = "spring")
public interface SystemConfigConvert {
default SystemConfigRespVO convert(SystemConfigDO bean) {
if (bean == null) {
return null;
}
SystemConfigRespVO respVO = new SystemConfigRespVO();
respVO.setId(bean.getId());
respVO.setName(bean.getName());
respVO.setAbbreviation(bean.getAbbreviation());
return respVO;
}
default List<SystemConfigRespVO> convertList(List<SystemConfigDO> list) {
if (list == null) {
return null;
}
List<SystemConfigRespVO> result = new ArrayList<>(list.size());
for (SystemConfigDO systemConfigDO : list) {
result.add(convert(systemConfigDO));
}
return result;
}
default PageResult<SystemConfigRespVO> convertPage(PageResult<SystemConfigDO> page) {
if (page == null) {
return null;
}
return new PageResult<>(convertList(page.getList()), page.getTotal());
}
SystemConfigDO convert(SystemConfigSaveReqVO bean);
}

30
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/config/FactoryDO.java

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.system.dal.dataobject.config;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
@TableName("plant_cfg")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FactoryDO {
@TableId("plant_id")
private Long id;
@TableField("plant_name")
private String name;
@TableField("plant_shortname")
private String shortName;
@TableField("area_id")
private Long areaId;
@TableField(exist = false)
private String areaName;
}

35
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/config/SystemConfigDO.java

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.system.dal.dataobject.config;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* 系统配置 DO
*
* @author 芋道源码
*/
@TableName("system_cfg")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SystemConfigDO {
@TableId("system_id")
private Long id;
@TableField("system_name")
private String name;
@TableField("system_shortname")
private String abbreviation;
@TableField("system_type_id")
private Integer systemTypeId;
@TableField("unit_id")
private Integer unitId;
}

16
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/config/FactoryMapper.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.system.dal.mysql.config;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface FactoryMapper extends BaseMapperX<FactoryDO> {
IPage<FactoryDO> selectFactoryPage(Page<?> page, @Param("reqVO") FactoryPageReqVO reqVO);
}

23
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/config/SystemConfigMapper.java

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.system.dal.mysql.config;
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.system.controller.admin.config.SystemConfig.vo.SystemConfigPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.config.SystemConfigDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SystemConfigMapper extends BaseMapperX<SystemConfigDO> {
// 【关键修正】恢复使用框架默认的分页查询,无需XML
default PageResult<SystemConfigDO> selectPage(SystemConfigPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<SystemConfigDO>()
.likeIfPresent(SystemConfigDO::getName, reqVO.getName())
.orderByDesc(SystemConfigDO::getId));
}
default SystemConfigDO selectByName(String name) {
return selectOne(SystemConfigDO::getName, name);
}
}

60
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/Factory/FactoryService.java

@ -0,0 +1,60 @@
package cn.iocoder.yudao.module.system.service.config.Factory;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryRespVO;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactorySaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO;
import jakarta.validation.Valid;
import java.util.Collection;
import java.util.List;
public interface FactoryService {
/**
* 创建电厂
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createFactory(@Valid FactorySaveReqVO createReqVO);
/**
* 更新电厂
*
* @param updateReqVO 更新信息
*/
void updateFactory(@Valid FactorySaveReqVO updateReqVO);
/**
* 删除电厂
*
* @param id 编号
*/
void deleteFactory(Long id);
/**
* 获得电厂
*
* @param id 编号
* @return 电厂
*/
FactoryDO getFactory(Long id);
/**
* 获得电厂列表
*
* @param ids 编号
* @return 电厂列表
*/
List<FactoryDO> getFactoryList(Collection<Long> ids);
/**
* 获得电厂分页
*
* @param pageReqVO 分页查询
* @return 电厂分页
*/
PageResult<FactoryRespVO> getFactoryPage(FactoryPageReqVO pageReqVO);
}

65
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/Factory/FactoryServiceImpl.java

@ -0,0 +1,65 @@
package cn.iocoder.yudao.module.system.service.config.Factory;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactoryRespVO;
import cn.iocoder.yudao.module.system.controller.admin.config.Factory.vo.FactorySaveReqVO;
import cn.iocoder.yudao.module.system.convert.config.FactoryConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO;
import cn.iocoder.yudao.module.system.dal.mysql.config.FactoryMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; // 新增导入
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@Service
@Validated
@RequiredArgsConstructor // << 修改点1:新增注解
public class FactoryServiceImpl implements FactoryService {
private final FactoryMapper factoryMapper; // << 修改点2:移除@Resource, 添加final
private final FactoryConvert factoryConvert; // << 修改点3:移除@Resource, 添加final
@Override
public Long createFactory(FactorySaveReqVO createReqVO) {
FactoryDO factory = factoryConvert.convert(createReqVO);
factoryMapper.insert(factory);
return factory.getId();
}
@Override
public void updateFactory(FactorySaveReqVO updateReqVO) {
FactoryDO updateObj = factoryConvert.convert(updateReqVO);
factoryMapper.updateById(updateObj);
}
@Override
public void deleteFactory(Long id) {
factoryMapper.deleteById(id);
}
@Override
public FactoryDO getFactory(Long id) {
return factoryMapper.selectById(id);
}
@Override
public List<FactoryDO> getFactoryList(Collection<Long> ids) {
if (ids == null || ids.isEmpty()) {
return Collections.emptyList();
}
return factoryMapper.selectBatchIds(ids);
}
@Override
public PageResult<FactoryRespVO> getFactoryPage(FactoryPageReqVO pageReqVO) {
Page<FactoryDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
IPage<FactoryDO> pageResult = factoryMapper.selectFactoryPage(page, pageReqVO);
return new PageResult<>(factoryConvert.convertList(pageResult.getRecords()), pageResult.getTotal());
}
}

44
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/SystemConfig/SystemConfigService.java

@ -0,0 +1,44 @@
package cn.iocoder.yudao.module.system.service.config.SystemConfig;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.vo.SystemConfigPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.vo.SystemConfigSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.config.SystemConfigDO;
import jakarta.validation.Valid;
public interface SystemConfigService {
/**
* 创建系统配置
* @param createReqVO 创建信息
* @return 编号
*/
Long createSystemConfig(@Valid SystemConfigSaveReqVO createReqVO);
/**
* 更新系统配置
* @param updateReqVO 更新信息
*/
void updateSystemConfig(@Valid SystemConfigSaveReqVO updateReqVO);
/**
* 删除系统配置
* @param id 编号
*/
void deleteSystemConfig(Long id);
/**
* 获得系统配置
* @param id 编号
* @return 系统配置
*/
SystemConfigDO getSystemConfig(Long id);
/**
* 获得系统配置分页
* @param pageReqVO 分页查询
* @return 系统配置分页
*/
PageResult<SystemConfigDO> getSystemConfigPage(SystemConfigPageReqVO pageReqVO);
}

75
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/SystemConfig/SystemConfigServiceImpl.java

@ -0,0 +1,75 @@
package cn.iocoder.yudao.module.system.service.config.SystemConfig;
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.vo.SystemConfigPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.config.SystemConfig.vo.SystemConfigSaveReqVO;
import cn.iocoder.yudao.module.system.convert.config.SystemConfigConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.config.SystemConfigDO;
import cn.iocoder.yudao.module.system.dal.mysql.config.SystemConfigMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.Objects;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
@Service
@Validated
public class SystemConfigServiceImpl implements SystemConfigService {
@Resource
private SystemConfigMapper systemConfigMapper;
@Resource
private SystemConfigConvert systemConfigConvert;
@Override
public Long createSystemConfig(SystemConfigSaveReqVO createReqVO) {
validateNameDuplicate(createReqVO.getName(), null);
SystemConfigDO systemConfig = systemConfigConvert.convert(createReqVO);
systemConfigMapper.insert(systemConfig);
return systemConfig.getId();
}
@Override
public void updateSystemConfig(SystemConfigSaveReqVO updateReqVO) {
validateExists(updateReqVO.getId());
validateNameDuplicate(updateReqVO.getName(), updateReqVO.getId());
SystemConfigDO updateObj = systemConfigConvert.convert(updateReqVO);
systemConfigMapper.updateById(updateObj);
}
@Override
public void deleteSystemConfig(Long id) {
validateExists(id);
systemConfigMapper.deleteById(id);
}
@Override
public SystemConfigDO getSystemConfig(Long id) {
return systemConfigMapper.selectById(id);
}
@Override
public PageResult<SystemConfigDO> getSystemConfigPage(SystemConfigPageReqVO pageReqVO) {
return systemConfigMapper.selectPage(pageReqVO);
}
private void validateExists(Long id) {
if (systemConfigMapper.selectById(id) == null) {
throw ServiceExceptionUtil.exception(SYSTEM_CONFIG_NOT_EXISTS);
}
}
private void validateNameDuplicate(String name, Long id) {
SystemConfigDO config = systemConfigMapper.selectByName(name);
if (config == null) {
return;
}
if (id == null || !Objects.equals(config.getId(), id)) {
throw ServiceExceptionUtil.exception(SYSTEM_CONFIG_NAME_DUPLICATE);
}
}
}

22
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/config/FactoryMapper.xml

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.config.FactoryMapper">
<select id="selectFactoryPage" resultType="cn.iocoder.yudao.module.system.dal.dataobject.config.FactoryDO">
SELECT
p.plant_id AS id,
p.plant_name AS name,
p.plant_shortname AS short_name,
p.area_id,
a.area_name AS area_name
FROM
plant_cfg AS p
LEFT JOIN area_cfg AS a ON p.area_id = a.area_id
<where>
<if test="reqVO.name != null and reqVO.name != ''">
AND p.plant_name LIKE CONCAT('%', #{reqVO.name}, '%')
</if>
</where>
</select>
</mapper>

29
yudao-server/src/main/java/cn/iocoder/yudao/server/config/MybatisPlusCustomConfig.java

@ -0,0 +1,29 @@
package cn.iocoder.yudao.server.config;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* MyBatis Plus 的自定义配置类
*
* @author 芋道源码
*/
@Configuration
public class MybatisPlusCustomConfig {
/**
* 创建一个 MybatisPlusPropertiesCustomizer Bean
* 用于在 Spring Boot 自动配置 MyBatis-Plus 之前自定义其属性
*/
@Bean
public MybatisPlusPropertiesCustomizer mybatisPlusPropertiesCustomizer() {
return properties -> {
// 【核心配置】在这里用代码的方式,为 mybatis-plus.mapper-locations 赋上我们期望的值
// "classpath*:mapper/**/*.xml" 会递归扫描所有模块下 resources/mapper 目录中的所有xml文件
String[] mapperLocations = {"classpath*:mapper/**/*.xml"};
properties.setMapperLocations(mapperLocations);
};
}
}

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

@ -40,7 +40,7 @@ spring:
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
validation-query: SELECT 1 # 配置检测连接是否有效
test-while-idle: true
test-on-borrow: false
test-on-return: false
@ -48,7 +48,7 @@ spring:
datasource:
master:
url: jdbc:mysql://120.26.116.243:3306/alert?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
# url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例
# url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例
# url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例
# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true;useUnicode=true;characterEncoding=utf-8 # SQLServer 连接的示例
@ -64,17 +64,19 @@ spring:
# username: root # OpenGauss 连接的示例
# password: Yudao@2024 # OpenGauss 连接的示例
slave: # 模拟从库,可根据自己需要修改
lazy: true # 开启懒加载,保证启动速度
url: jdbc:mysql://120.26.116.243:3306/alert?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
username: root
password: 123456
# tdengine: # IoT 数据库(需要 IoT 物联网再开启噢!)
# url: jdbc:TAOS-RS://127.0.0.1:6041/ruoyi_vue_pro
# driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
# username: root
# password: taosdata
# druid:
# validation-query: SELECT SERVER_STATUS() # TDengine 数据源的有效性检查 SQL
# lazy: true # 开启懒加载,保证启动速度
# url: jdbc:mysql://120.26.116.243:3306/alert?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
url: jdbc:sqlserver://47.98.32.148:1433;DatabaseName=alert # SQLServer 连接的示例
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: sa
password: powerSIS#123
# tdengine: # IoT 数据库(需要 IoT 物联网再开启噢!)
# url: jdbc:TAOS-RS://127.0.0.1:6041/ruoyi_vue_pro
# driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
# username: root
# password: taosdata
# druid:
# validation-query: SELECT SERVER_STATUS() # TDengine 数据源的有效性检查 SQL
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
data:
@ -193,12 +195,12 @@ debug: false
--- #################### 微信公众号、小程序相关配置 ####################
wx:
mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
# app-id: wx041349c6f39b268b # 测试号(牛希尧提供的)
# secret: 5abee519483bc9f8cb37ce280e814bd0
# app-id: wx041349c6f39b268b # 测试号(牛希尧提供的)
# secret: 5abee519483bc9f8cb37ce280e814bd0
app-id: wx5b23ba7a5589ecbb # 测试号(自己的)
secret: 2a7b3b20c537e52e74afd395eb85f61f
# app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的)
# secret: bd4f9fab889591b62aeac0d7b8d8b4a0
# app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的)
# secret: bd4f9fab889591b62aeac0d7b8d8b4a0
# 存储配置,解决 AccessToken 的跨节点的共享
config-storage:
type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
@ -207,10 +209,10 @@ wx:
miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档
# appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的)
# secret: 333ae72f41552af1e998fe1f54e1584a
# appid: wx63c280fe3248a3e7 # wenhualian的接口测试号
# secret: 6f270509224a7ae1296bbf1c8cb97aed
# appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的)
# secret: 4a1a04e07f6a4a0751b39c3064a92c8b
# appid: wx63c280fe3248a3e7 # wenhualian的接口测试号
# secret: 6f270509224a7ae1296bbf1c8cb97aed
# appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的)
# secret: 4a1a04e07f6a4a0751b39c3064a92c8b
appid: wx66186af0759f47c9 # 测试号(puhui 提供的)
secret: 3218bcbd112cbc614c7264ceb20144ac
config-storage:
@ -268,9 +270,11 @@ justauth:
--- #################### iot相关配置 TODO 芋艿【IOT】:再瞅瞅 ####################
pf4j:
# pluginsDir: /tmp/
# pluginsDir: /tmp/
pluginsDir: ../plugins
EXA:
ip: 47.98.32.148
ip: 120.27.236.75
point:
head: XN.
head: XN.
algorithm:
host: 47.98.32.148:8082
Loading…
Cancel
Save