Browse Source

Merge pull request 'feat(module-alert): 优化模型相关接口和数据结构' (#20) from cjl-dev into master

Reviewed-on: http://120.26.116.243:3000/root/alert-backend/pulls/20
master
chenjiale 3 weeks ago
parent
commit
9b6eda256e
  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; package cn.iocoder.yudao.module.alert.common.enums;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import java.util.Objects; import java.util.Objects;
@ -14,8 +15,11 @@ public enum Algorithm {
/** /**
* 模型算法枚举 * 模型算法枚举
*/ */
@JsonProperty("ERROR")
ERROR(-1), ERROR(-1),
@JsonProperty("PCA")
PCA(0), PCA(0),
@JsonProperty("ANN")
ANN(1); ANN(1);
public final Integer code; 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; package cn.iocoder.yudao.module.alert.controller.admin.model;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; 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.*;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSelectQuery; import cn.iocoder.yudao.module.alert.param.ModelTestParam;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSimpleVO; import cn.iocoder.yudao.module.alert.param.TrainParam;
import cn.iocoder.yudao.module.alert.service.model.ModelService; import cn.iocoder.yudao.module.alert.service.model.ModelService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -38,7 +38,7 @@ public class ModelController {
} }
@PostMapping("/") @PostMapping("/")
public CommonResult<Integer> saveModel(@RequestBody ModelInfoVO model) { public CommonResult<Integer> saveModel(@RequestBody ModelInitVO model) {
Integer id = modelService.createModel(model); Integer id = modelService.createModel(model);
if (Objects.nonNull(id) && id > 0) { if (Objects.nonNull(id) && id > 0) {
return CommonResult.success(id); return CommonResult.success(id);
@ -51,4 +51,20 @@ public class ModelController {
Boolean b = modelService.updateModelInfo(vo); Boolean b = modelService.updateModelInfo(vo);
return CommonResult.success(b); 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; 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.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*; import lombok.*;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -18,26 +22,102 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class ModelInfo { public class ModelInfo {
/** @JsonProperty("id")
* id
*/
private Integer id; private Integer id;
/**
* 创建人 @JsonProperty("name")
*/ private String name;
private String creator;
@JsonProperty("description")
private String description;
@JsonProperty("founder")
private String founder;
@JsonProperty("creatTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; 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 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 @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class Point { 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 BigDecimal lowerBound;
/**
* 目标点号
*/
private String point;
/**
* 描述
*/
private String description;
/**
* 单位
*/
private String unit;
/**
* 上限
*/
private BigDecimal upperlimit;
/** /**
* * 残差上限
*/ */
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 @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class ModelDataVO { public class ModelDataVO {
/** private List<DataItem> data;
* 目标数值
*/
private List<Double> targetValue;
/**
* 参数个数
*/
private int[] sampleValue;
/**
* 边界数据
*/
private List<List<Double>> dataList;
/** @Data
* 热力图数据 public static class DataItem {
*/ private List<List<Object>> history;
private List<int[]> heatData; 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; 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.Point;
import cn.iocoder.yudao.module.alert.controller.admin.model.model.TrainTime;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*; import lombok.*;
@ -13,78 +15,15 @@ import java.util.List;
* @date 2023-08-19 22:41 * @date 2023-08-19 22:41
*/ */
@Data @Data
@Builder
@ToString @ToString
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class ModelInfoVO { public class ModelInfoVO extends ModelInfo {
/**
* id
*/
private Integer id;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
@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 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; 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.*;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelInfoVO; import cn.iocoder.yudao.module.alert.param.ModelTestParam;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSelectQuery; import cn.iocoder.yudao.module.alert.param.TrainParam;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelSimpleVO;
import java.util.List; import java.util.List;
@ -36,7 +35,7 @@ public interface ModelService {
* @param model 模型参数 * @param model 模型参数
* @return 模型id * @return 模型id
*/ */
Integer createModel(ModelInfoVO model); Integer createModel(ModelInitVO model);
/** /**
* 更新model info * 更新model info
@ -45,4 +44,8 @@ public interface ModelService {
* @return 是否成功 * @return 是否成功
*/ */
Boolean updateModelInfo(ModelInfoVO info); 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.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; 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.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.alert.common.enums.Algorithm; 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.ModelTrash;
import cn.iocoder.yudao.module.alert.common.enums.ModelVisible; 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.model.ModelInfo;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.ModelInfoVO; import cn.iocoder.yudao.module.alert.controller.admin.model.vo.*;
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.dao.domain.ModelCfg; 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.domain.SystemCfg;
import cn.iocoder.yudao.module.alert.dao.service.ModelCfgService; import cn.iocoder.yudao.module.alert.dao.service.ModelCfgService;
import cn.iocoder.yudao.module.alert.dao.service.SystemCfgService; 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 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.query.LambdaQueryWrapper;
import com.fasterxml.jackson.core.type.TypeReference;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -41,6 +47,9 @@ public class ModelServiceImpl implements ModelService {
private final SystemCfgService systemCfgService; private final SystemCfgService systemCfgService;
@Value("${algorithm.host}")
private String algorithmHost;
@Override @Override
public List<ModelSimpleVO> getModelList(ModelSelectQuery query) { public List<ModelSimpleVO> getModelList(ModelSelectQuery query) {
Integer systemId = query.getSystemId(); Integer systemId = query.getSystemId();
@ -78,19 +87,21 @@ public class ModelServiceImpl implements ModelService {
public ModelInfoVO getModelInfo(Integer id) { public ModelInfoVO getModelInfo(Integer id) {
ModelCfg modelCfg = modelCfgService.getById(id); ModelCfg modelCfg = modelCfgService.getById(id);
if (Objects.nonNull(modelCfg)) { 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; return null;
} }
@Override @Override
public Integer createModel(ModelInfoVO model) { public Integer createModel(ModelInitVO model) {
try { try {
ModelInfo info = new ModelInfo(); ModelInfo info = new ModelInfo();
BeanUtil.copyProperties(model, info); BeanUtil.copyProperties(model, info);
ModelCfg modelCfg = ModelCfg.builder() ModelCfg modelCfg = ModelCfg.builder()
.systemId(model.getSystemId()) .systemId(model.getSystemId())
.algorithmId(model.getAlgorithmId()) .algorithmId(model.getAlgorithm().code)
.modelName(model.getModelName()) .modelName(model.getModelName())
.createTime(new Date()) .createTime(new Date())
.trash(ModelTrash.NORMAL.code) .trash(ModelTrash.NORMAL.code)
@ -101,8 +112,13 @@ public class ModelServiceImpl implements ModelService {
modelCfgService.save(modelCfg); modelCfgService.save(modelCfg);
Integer modelId = modelCfg.getId(); Integer modelId = modelCfg.getId();
info.setId(modelId); info.setId(modelId);
info.setCreator(modelCfg.getCreator()); info.setAlgorithm(model.getAlgorithm());
info.setFounder(modelCfg.getCreator());
info.setCreateTime(modelCfg.getCreateTime()); 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)); modelCfg.setModelInfo(JsonUtils.toJsonString(info));
modelCfgService.updateById(modelCfg); modelCfgService.updateById(modelCfg);
return modelId; return modelId;
@ -115,6 +131,8 @@ public class ModelServiceImpl implements ModelService {
@Override @Override
public Boolean updateModelInfo(ModelInfoVO modelInfo) { public Boolean updateModelInfo(ModelInfoVO modelInfo) {
modelInfo.setModifier(SecurityFrameworkUtils.getLoginUserNickname());
modelInfo.setModifiedTime(new Date());
ModelCfg modelCfg = ModelCfg.builder() ModelCfg modelCfg = ModelCfg.builder()
.id(modelInfo.getId()) .id(modelInfo.getId())
.modelInfo(JsonUtils.toJsonString(modelInfo)) .modelInfo(JsonUtils.toJsonString(modelInfo))
@ -122,4 +140,25 @@ public class ModelServiceImpl implements ModelService {
.build(); .build();
return modelCfgService.updateById(modelCfg); 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 ip: 120.26.116.243
point: point:
head: XN. head: XN.
algorithm:
host: 47.98.32.148:8082
Loading…
Cancel
Save