Browse Source

feat(module-alert): 优化模型相关接口和数据结构

- 重构了模型信息相关的数据结构和接口
- 新增了模型训练和测试相关的功能
- 优化了模型数据的存储和传输格式- 调整了部分字段名称和类型,提高了数据准确性
pull/20/head
CJL6015 3 weeks ago
parent
commit
8d6a08e5b1
  1. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/Algorithm.java
  2. 24
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.java
  3. 32
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelDataController.java
  4. 106
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java
  5. 47
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java
  6. 41
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/TrainTime.java
  7. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelDataVO.java
  8. 87
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoDetails.java
  9. 67
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.java
  10. 58
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInitVO.java
  11. 20
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelTestData.java
  12. 26
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/TrainInfo.java
  13. 31
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/ModelTestParam.java
  14. 59
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/TrainParam.java
  15. 26
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelDataService.java
  16. 13
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelService.java
  17. 29
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelDataServiceImpl.java
  18. 53
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java
  19. 38
      yudao-server/src/main/resources/application-local.yaml

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;

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

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

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

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

@ -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 连接的示例
@ -68,13 +68,13 @@ spring:
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
# 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 +193,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 +207,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 +268,11 @@ justauth:
--- #################### iot相关配置 TODO 芋艿【IOT】:再瞅瞅 ####################
pf4j:
# pluginsDir: /tmp/
# pluginsDir: /tmp/
pluginsDir: ../plugins
EXA:
ip: 120.26.116.243
point:
head: XN.
head: XN.
algorithm:
host: 47.98.32.148:8082
Loading…
Cancel
Save