diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/Algorithm.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/Algorithm.java index 1834ab8..2220171 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/common/enums/Algorithm.java +++ b/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; diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.java index f06d08c..8fe0eb2 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.java +++ b/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 saveModel(@RequestBody ModelInfoVO model) { + public CommonResult 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 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 getTestData(ModelTestParam param) { + ModelTestData modelTestData = modelService.getModelTestData(param); + return CommonResult.success(modelTestData); + } } diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelDataController.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelDataController.java deleted file mode 100644 index cf57c48..0000000 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelDataController.java +++ /dev/null @@ -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 getModelData(@PathVariable Integer id, ModelDataQuery query) { - return CommonResult.success(null); - } - - @PostMapping("/calculate/{id}") - public CommonResult calculate(@PathVariable Integer id, @RequestBody TimeRange timeRange) { - return CommonResult.success(null); - } -} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java index 5fe5db5..8e0e826 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java +++ b/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; + + @JsonProperty("model_state") + private String modelState; + + @JsonProperty("pointInfo") private List pointInfo; - private String condition; + @JsonProperty("rate") + private BigDecimal rate; + + @JsonProperty("outPointInfo") + private List outPointInfo; + + @JsonProperty("biasPointInfo") + private List biasPointInfo; + + @JsonProperty("faultVariablePointInfo") + private List 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; } diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java index 6b3f175..29d9695 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java +++ b/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; } diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/TrainTime.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/TrainTime.java new file mode 100644 index 0000000..a6a0bda --- /dev/null +++ b/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; + +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelDataVO.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelDataVO.java index 2226564..9a4f92a 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelDataVO.java +++ b/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 targetValue; - /** - * 参数个数 - */ - private int[] sampleValue; - /** - * 边界数据 - */ - private List> dataList; + private List data; - /** - * 热力图数据 - */ - private List heatData; + @Data + public static class DataItem { + private List> history; + private List> future; + private String name; + } } diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoDetails.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoDetails.java new file mode 100644 index 0000000..f7ce374 --- /dev/null +++ b/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 trainXMin; + + @JsonProperty("Train_X_max") + private List trainXMax; + + @JsonProperty("Train_X_std") + private List trainXStd; + + @JsonProperty("Train_X_mean") + private List trainXMean; + + @JsonProperty("Train_X_bais_max") + private List> trainXBaisMax; + + @JsonProperty("Train_X_bais_min") + private List> trainXBaisMin; + + @JsonProperty("Train_X_bais_mean") + private List> trainXBaisMean; + + @JsonProperty("QCUL_95") + private double qcul95; + + @JsonProperty("QCUL_99") + private double qcul99; + + @JsonProperty("QCUL_95_line") + private List qcul95Line; + + @JsonProperty("QCUL_99_line") + private List qcul99Line; + + @JsonProperty("T2CUL_95") + private double t2cul95; + + @JsonProperty("T2CUL_99") + private double t2cul99; + + @JsonProperty("T2CUL_95_line") + private List t2cul95Line; + + @JsonProperty("T2CUL_99_line") + private List t2cul99Line; + + @JsonProperty("Kesi_95") + private double kesi95; + + @JsonProperty("Kesi_99") + private double kesi99; + + @JsonProperty("Kesi_95_line") + private List kesi95Line; + + @JsonProperty("Kesi_99_line") + private List kesi99Line; + + @JsonProperty("COV") + private List> cov; + + @JsonProperty("K") + private int k; + + @JsonProperty("R") + private double r; + + @JsonProperty("featValue") + private List featValue; + + @JsonProperty("featVec") + private List> featVec; + + @JsonProperty("selectVec") + private List> selectVec; +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.java index b1f485c..90e3a4e 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.java +++ b/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 pointInfo; - - private List 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; - } } diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInitVO.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInitVO.java new file mode 100644 index 0000000..3d9c100 --- /dev/null +++ b/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 pointInfo; + + private List trainTime; + + private Algorithm algorithm; + + private Integer systemId; + + private Integer sampling; + + private BigDecimal rate; +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelTestData.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelTestData.java new file mode 100644 index 0000000..7bb6d1a --- /dev/null +++ b/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> sampleData; + private List> reconData; + private List> errorData; + private Integer R; + private List SPE; + private List> paraState; + private String time; +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/TrainInfo.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/TrainInfo.java new file mode 100644 index 0000000..a5e2ec5 --- /dev/null +++ b/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; +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/ModelTestParam.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/ModelTestParam.java new file mode 100644 index 0000000..52d3481 --- /dev/null +++ b/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 addBias; + @JsonProperty("AddBias_Time") + private String addBiasTime; + } +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/TrainParam.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/TrainParam.java new file mode 100644 index 0000000..fc7ddaa --- /dev/null +++ b/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; + } +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelDataService.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelDataService.java deleted file mode 100644 index 983c8d6..0000000 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelDataService.java +++ /dev/null @@ -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 indexList, Date st, Date et); -} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelService.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelService.java index 8dcb076..6bd1cce 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelService.java +++ b/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); } diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelDataServiceImpl.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelDataServiceImpl.java deleted file mode 100644 index 449c84e..0000000 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelDataServiceImpl.java +++ /dev/null @@ -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 indexList, Date st, Date et) { - - - return null; - } -} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java index 5c6addd..04e5bcb 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java +++ b/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 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>() { + }).get("error_msg")); + } + return JsonUtils.parseObject(trainBody, new TypeReference>() { + }).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); + } } diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 844e07e..3680358 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/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. \ No newline at end of file + head: XN. +algorithm: + host: 47.98.32.148:8082 \ No newline at end of file