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

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

@ -274,3 +274,5 @@ EXA:
ip: 120.26.116.243
point:
head: XN.
algorithm:
host: 47.98.32.148:8082
Loading…
Cancel
Save