Browse Source

Merge remote-tracking branch 'origin/cjl-dev' into cjl-dev

pull/30/head
CJL6015 1 month ago
parent
commit
379165e075
  1. 42
      yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java
  2. 17
      yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml
  3. 40
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/device/DeviceController.java
  4. 37
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/device/vo/DeviceRespVO.java
  5. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/EXAController.java
  6. 9
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/EXANowListReqVO.java
  7. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/EXAResult.java
  8. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantCalcController.java
  9. 7
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java
  10. 5
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.java
  11. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java
  12. 46
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/device/DeviceDO.java
  13. 10
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/device/DeviceMapper.java
  14. 3
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java
  15. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/model/ModelVersionMapper.java
  16. 72
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/ModelVersion.java
  17. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/ModelVersionMapper.java
  18. 13
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/ModelVersionService.java
  19. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/ModelVersionServiceImpl.java
  20. 6
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/calcgroup/CalcGroupServiceImpl.java
  21. 16
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/device/DeviceService.java
  22. 52
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/device/DeviceServiceImpl.java
  23. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAService.java
  24. 5
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAServiceImpl.java
  25. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelService.java
  26. 28
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/RunModelServiceImpl.java
  27. 32
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java
  28. 114
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/utils/EXAUtils.java
  29. 48
      yudao-module-alert/yudao-module-alert-biz/src/main/resources/mapper/ModelVersionMapper.xml
  30. 9
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
  31. 63
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/FactoryController.java
  32. 24
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryBaseVO.java
  33. 12
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryCreateReqVO.java
  34. 16
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryPageReqVO.java
  35. 22
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryRespVO.java
  36. 30
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactorySaveReqVO.java
  37. 16
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/Factory/vo/FactoryUpdateReqVO.java
  38. 72
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/SystemConfigController.java
  39. 15
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigBaseVO.java
  40. 14
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigPageReqVO.java
  41. 13
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigRespVO.java
  42. 13
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/SystemConfig/vo/SystemConfigSaveReqVO.java
  43. 28
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/config/FactoryConvert.java
  44. 48
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/config/SystemConfigConvert.java
  45. 30
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/config/FactoryDO.java
  46. 35
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/config/SystemConfigDO.java
  47. 16
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/config/FactoryMapper.java
  48. 23
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/config/SystemConfigMapper.java
  49. 60
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/Factory/FactoryService.java
  50. 65
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/Factory/FactoryServiceImpl.java
  51. 44
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/SystemConfig/SystemConfigService.java
  52. 75
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/SystemConfig/SystemConfigServiceImpl.java
  53. 22
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/config/FactoryMapper.xml
  54. 29
      yudao-server/src/main/java/cn/iocoder/yudao/server/config/MybatisPlusCustomConfig.java
  55. 13
      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();
}
}

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

@ -43,11 +43,18 @@
<artifactId>postgresql</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<optional>true</optional>
</dependency>
<!-- <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>

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

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

@ -52,6 +52,15 @@ public class EXAController {
return success(nowList);
}
@PostMapping("/nowListReal")
@Operation(summary = "获取带实时值的列表")
@PreAuthorize("@ss.hasPermission('alert:exa:query')")
public CommonResult<EXAResult> getNowList(@RequestBody EXANowListReqVO list) throws IOException, URISyntaxException {
EXAResult nowList=exaService.getEXAListNowReal(list);
return success(nowList);
}
@GetMapping("/now")
@Operation(summary = "根据点号获取测点实时值-单点或多点")
@PreAuthorize("@ss.hasPermission('alert:exa:query')")
@ -105,8 +114,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 +133,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));
}

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

@ -0,0 +1,9 @@
package cn.iocoder.yudao.module.alert.controller.admin.exa.vo;
import lombok.Data;
@Data
public class EXANowListReqVO {
private String[] ItemNameArray;
}

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

@ -5,4 +5,6 @@ import com.alibaba.fastjson.annotation.JSONField;
public class EXAResult {
@JSONField(name="ReturnValue")
public Long ReturnValue;
@JSONField(name="ValueArray")
public double[] ValueArray;
}

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;

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

@ -67,4 +67,9 @@ public class ModelController {
ModelTestData modelTestData = modelService.getModelTestData(param);
return CommonResult.success(modelTestData);
}
@PostMapping("/bottom/{id}")
public CommonResult<ModelInfoVO> bottomModel(@PathVariable Integer id) {
return CommonResult.success(modelService.bottomModel(id));
}
}

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

@ -24,7 +24,7 @@ public class Point {
@JsonProperty("Upper")
private BigDecimal Upper;
private Boolean dead;
private String limit;
private Boolean limit;
private Boolean lock;
/**
* 残差下限

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

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

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

72
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/ModelVersion.java

@ -0,0 +1,72 @@
package cn.iocoder.yudao.module.alert.dao.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* @TableName model_version
*/
@TableName(value ="model_version")
@Data
public class ModelVersion implements Serializable {
private Integer id;
private Integer modelId;
private Integer algorithmId;
private String modelName;
private String createName;
private String modelInfo;
private Integer status;
private Integer visible;
private String conditionInfo;
private Integer trash;
private String assessRes;
private Integer needToAssess;
private Double score;
private String clearOrNot;
private Integer effNumber;
private Integer needToClean;
private String origAssessRes;
private Double loadCover;
private String coverOutput;
private String version;
private String conditionName;
private Integer isOnline;
private String creator;
private Date createTime;
private String updater;
private Date updateTime;
private Boolean deleted;
private static final long serialVersionUID = 1L;
}

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

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

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

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

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

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

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

@ -2,14 +2,8 @@ package cn.iocoder.yudao.module.alert.service.calcgroup;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.alert.controller.admin.calcgroup.vo.CalcGroupPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.calcgroup.CalcGroupDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelVersionDO;
import cn.iocoder.yudao.module.alert.dal.mysql.calcgroup.CalcGroupMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.model.ModelMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.model.ModelVersionMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

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

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

@ -22,6 +22,10 @@ public interface EXAService {
List<EXAHttp> getEXAListNow(List<EXAHttp> list) throws URISyntaxException, IOException;
EXAResult getEXAListNowReal(EXANowListReqVO list) throws URISyntaxException, IOException;
String getEXANow(String itemName) throws URISyntaxException, IOException;
List<List<Double>> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo);

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

@ -62,7 +62,10 @@ public class EXAServiceImpl implements EXAService {
return list;
}
@Override
public EXAResult getEXAListNowReal(EXANowListReqVO list) throws URISyntaxException, IOException {
return exaUtils.getNowDataList(EXA_IP,list);
}
@Override
public String getEXANow(String itemName) throws URISyntaxException, IOException {
return exaUtils.getNowData(EXA_IP,itemName).get(0);

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

@ -48,4 +48,6 @@ public interface ModelService {
TrainInfo trainModel(TrainParam param);
ModelTestData getModelTestData(ModelTestParam param);
ModelInfoVO bottomModel(Integer id);
}

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

@ -1,31 +1,45 @@
package cn.iocoder.yudao.module.alert.service.model;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelVersionPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.model.ModelVersionDO;
import cn.iocoder.yudao.module.alert.dal.mysql.model.ModelMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.model.ModelVersionMapper;
import cn.iocoder.yudao.module.alert.dao.domain.ModelVersion;
import cn.iocoder.yudao.module.alert.dao.service.ModelVersionService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
@RequiredArgsConstructor
public class RunModelServiceImpl implements RunModelService {
@Resource
private ModelMapper modelMapper;
@Resource
private ModelVersionMapper modelVersionMapper;
private final ModelVersionService modelVersionService;
@Override
public PageResult<ModelDO> getModelPage(ModelPageReqVO reqVO) {
return modelMapper.selectPage(reqVO);
Page<ModelVersion> page = modelVersionService.page(new Page<>(reqVO.getPageNo(), reqVO.getPageSize()),
new LambdaQueryWrapperX<ModelVersion>()
.likeIfPresent(ModelVersion::getModelName, reqVO.getModelName())
.orderByAsc(ModelVersion::getId));
return new PageResult<>(BeanUtils.toBean(page.getRecords(), ModelDO.class),
page.getTotal());
}
@Override
public PageResult<ModelVersionDO> getModelVersionPage (ModelVersionPageReqVO reqVO) {
return modelVersionMapper.selectPage(reqVO);
Page<ModelVersion> page = modelVersionService.page(new Page<>(reqVO.getPageNo(), reqVO.getPageSize()),
new LambdaQueryWrapperX<ModelVersion>()
.eqIfPresent(ModelVersion::getModelId, reqVO.getModelId())
.orderByAsc(ModelVersion::getId));
return new PageResult<>(BeanUtils.toBean(page.getRecords(), ModelVersionDO.class),
page.getTotal());
}

32
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.hutool.core.date.DateUtil;
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;
@ -12,21 +13,24 @@ 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.*;
import cn.iocoder.yudao.module.alert.dao.domain.ModelCfg;
import cn.iocoder.yudao.module.alert.dao.domain.ModelVersion;
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.ModelVersionService;
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.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.*;
import java.util.stream.Collectors;
@ -44,6 +48,8 @@ public class ModelServiceImpl implements ModelService {
private final SystemCfgService systemCfgService;
private final ModelVersionService modelVersionService;
@Value("${algorithm.host}")
private String algorithmHost;
@ -147,16 +153,36 @@ public class ModelServiceImpl implements ModelService {
new TypeReference<Map<String, String>>() {
}).get("error_msg"));
}
return JsonUtils.parseObject(trainBody, new TypeReference<TrainInfo>() {
return JsonUtils.parseObject(trainBody, new TypeReference<>() {
});
}
@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);
}
@Override
@Transactional(rollbackFor = Exception.class)
public ModelInfoVO bottomModel(Integer id) {
ModelCfg modelCfg = modelCfgService.getById(id);
ModelInfoVO modelInfo = JSON.parseObject(modelCfg.getModelInfo(), ModelInfoVO.class);
modelInfo.setBtmState(ModelStatus.FINISH.desc);
modelInfo.setVersion("v-" + DateUtil.now());
modelInfo.setModifier(SecurityFrameworkUtils.getLoginUserNickname());
modelInfo.setModifiedTime(new Date());
modelCfg.setModelInfo(JSON.toJSONString(modelInfo));
modelCfg.setUpdateTime(new Date());
modelCfg.setStatus(ModelStatus.FINISH.code);
modelCfgService.updateById(modelCfg);
ModelVersion modelVersion = BeanUtil.copyProperties(modelCfg, ModelVersion.class);
modelVersion.setId(null);
modelVersion.setModelId(id);
modelVersionService.save(modelVersion);
return modelInfo;
}
}

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

@ -1,9 +1,10 @@
package cn.iocoder.yudao.module.alert.utils;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAHistoryReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAHttp;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.Point;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.google.gson.Gson;
@ -14,23 +15,25 @@ import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import java.io.IOException;
import java.lang.reflect.Type;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
public class EXAUtils {
/**
* 根据分页条件和测点名称测点描述模糊查询
*
@ -147,63 +150,74 @@ public class EXAUtils {
return result;
}
public EXAResult getNowDataList(String EXA_IP,EXANowListReqVO exaNowListReqVO) throws URISyntaxException, IOException {
EXAResult result = new EXAResult();
try {
// 目标 RPC 服务的 URL
String url = "http://"+EXA_IP+":9000/exawebapi/exanow/GetFloatValueBatch";
String param = JSON.toJSONString(exaNowListReqVO);
String resultStr = Request.Post(url)
.addHeader("Content-type", "application/json")
.bodyString(param, ContentType.APPLICATION_JSON)
.execute().returnContent().asString(Charset.forName("utf-8"));
Gson gson=new Gson();
result= gson.fromJson(resultStr, EXAResult.class);
} catch (Exception e) {
}
return result;
}
/**
* 根据分页条件和测点名称测点描述模糊查询
*
* @param exaHistoryReqVo 传入对象点号开始时间结束时间
* @return exa列表
*/
public List<List<Double>> getHistory(String EXA_IP, EXAHistoryReqVO exaHistoryReqVo) {
List<List<Double>> result = new ArrayList<>();
try {
// 目标 RPC 服务的 URL
// String url = "http://"+EXA_IP+":9000/exawebapi/exatime/GetRawValueArrayFloat";
String url = "http://" + EXA_IP + ":9000/exawebapi/exatime/GetSamplingValueArrayFloat";
//创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
/*
* 由于GET请求的参数都是拼装在URL地址后方所以我们要构建一个URL带参数
*/
URIBuilder uriBuilder = new URIBuilder(url);
public List<List<Double>> getHistory(String exaIp, EXAHistoryReqVO req) {
List<List<Double>> result = Collections.emptyList();
/** 添加参数 */
uriBuilder.addParameter("ItemName", exaHistoryReqVo.getItemName());
uriBuilder.addParameter("StartingTime", exaHistoryReqVo.getStartTime());
uriBuilder.addParameter("TerminalTime", exaHistoryReqVo.getEndTime());
uriBuilder.addParameter("SamplingPeriod", String.valueOf(1000 * exaHistoryReqVo.getInterval()));
try {
String url = String.format(
"http://%s:9000/exawebapi/EXATime/GetSamplingValueArrayFloat",
exaIp
);
// 拼接参数
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("ItemName", req.getItemName());
paramMap.put("StartingTime", req.getStartTime());
paramMap.put("TerminalTime", req.getEndTime());
paramMap.put("SamplingPeriod", 1000 * req.getInterval());
// 发送 GET 请求
String body = HttpUtil.createGet(url)
.form(paramMap)
.header("Content-Type", "application/json")
.timeout(5000)
.execute()
.body();
System.out.println("服务端返回的数据为:" + body);
//创建请求对象
HttpGet httpGet = new HttpGet(uriBuilder.build());
// 处理转义字符 \\
body = StrUtil.replace(body, "\\", "");
// 传输的类型
httpGet.addHeader("Content-Type", "application/json");
//发送请求,请求响应结果
CloseableHttpResponse response = httpClient.execute(httpGet);
//获取服务器返回的状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("服务端返回成功的状态码为:" + statusCode);
HttpEntity entity = response.getEntity();
String body = EntityUtils.toString(entity).replaceAll("\\\\", "");
System.out.println("服务端返回的数据为:" + body);
// 去除首尾双引号
body = StrUtil.unWrap(body, '\"');
if (body.startsWith("\"") && body.endsWith("\"")) {
// 步骤3:去掉双引号
body = body.substring(1, body.length() - 1); // 去掉首尾的双引号
}
Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
Type listType = new TypeToken<List<List<Double>>>() {
}.getType();
result = gson.fromJson(body, listType);
// 反序列化
result = JSONUtil.toBean(body, new TypeReference<List<List<Double>>>() {}, true);
//关闭资源
response.close();
httpClient.close();
} catch (Exception e) {
System.err.println("请求历史数据失败:" + e.getMessage());
}
return result;
}

48
yudao-module-alert/yudao-module-alert-biz/src/main/resources/mapper/ModelVersionMapper.xml

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

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

13
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
@ -64,10 +64,11 @@ 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
# lazy: true # 开启懒加载,保证启动速度
# url: jdbc:mysql://120.26.116.243:3306/alert?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
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 连接的示例
username: root
password: 123456
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
@ -271,8 +272,8 @@ pf4j:
# pluginsDir: /tmp/
pluginsDir: ../plugins
EXA:
ip: 47.98.32.148
ip: 120.26.116.243
point:
head: XN.
algorithm:
host: 47.98.32.148:8082
host: 120.26.116.243:8082
Loading…
Cancel
Save