Browse Source

Merge branch 'master' into dev-xjf

# Conflicts:
#	yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/utils/EXAUtils.java
pull/29/head
肖晋飞 7 hours ago
parent
commit
7bb537fbed
  1. 7
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/ModelController.java
  2. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java
  3. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java
  4. 23
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/model/ModelVersionMapper.java
  5. 72
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/ModelVersion.java
  6. 18
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/mapper/ModelVersionMapper.java
  7. 13
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/ModelVersionService.java
  8. 22
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/service/impl/ModelVersionServiceImpl.java
  9. 7
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/ModelTestParam.java
  10. 7
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/TrainParam.java
  11. 6
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/calcgroup/CalcGroupServiceImpl.java
  12. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/ModelService.java
  13. 28
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/RunModelServiceImpl.java
  14. 42
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java
  15. 1
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/utils/EXAUtils.java
  16. 48
      yudao-module-alert/yudao-module-alert-biz/src/main/resources/mapper/ModelVersionMapper.xml
  17. 4
      yudao-server/src/main/resources/application-local.yaml

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

@ -63,8 +63,13 @@ public class ModelController {
}
@PostMapping("/test")
public CommonResult<ModelTestData> getTestData(ModelTestParam param) {
public CommonResult<ModelTestData> getTestData(@RequestBody ModelTestParam param) {
ModelTestData modelTestData = modelService.getModelTestData(param);
return CommonResult.success(modelTestData);
}
@PostMapping("/bottom/{id}")
public CommonResult<ModelInfoVO> bottomModel(@PathVariable Integer id) {
return CommonResult.success(modelService.bottomModel(id));
}
}

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

@ -115,7 +115,7 @@ public class ModelInfo {
private String alarmCondition;
public static AlarmModelSet defaultInit() {
return new AlarmModelSet("全工况运行", "1=1");
return new AlarmModelSet("全工况运行", "1==1");
}
}

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

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

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

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

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

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

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

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

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

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

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

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

7
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/ModelTestParam.java

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.alert.param;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
@ -12,7 +13,11 @@ import java.util.List;
@NoArgsConstructor
public class ModelTestParam {
@JsonProperty("Test_Data")
@JsonAlias("Test_Data")
private TestData testData;
@JsonProperty("Model_id")
@JsonAlias("Model_id")
private Integer modelId;
private String version;
@ -24,8 +29,10 @@ public class ModelTestParam {
private String points;
private Integer interval;
@JsonProperty("AddBias")
@JsonAlias("AddBias")
private List<Double> addBias;
@JsonProperty("AddBias_Time")
@JsonAlias("AddBias_Time")
private String addBiasTime;
}
}

7
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/param/TrainParam.java

@ -1,6 +1,5 @@
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;
@ -21,16 +20,17 @@ public class TrainParam {
@JsonProperty("Hyper_para")
private HyperPara hyperPara;
private String type;
private String condition;
private String conditon;
@JsonAlias("smote_config")
@JsonProperty("smote_config")
private String smoteConfig;
private List<Object> smoteConfig;
private Boolean smote;
private String targetPoint;
@Data
public static class Smote {
private String pointId;
@ -55,5 +55,6 @@ public class TrainParam {
private String dead;
private String limit;
private String uplow;
private Integer interval;
}
}

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

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

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

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

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

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

42
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.alert.service.model.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
@ -12,26 +13,26 @@ import cn.iocoder.yudao.module.alert.common.enums.ModelVisible;
import cn.iocoder.yudao.module.alert.controller.admin.model.model.ModelInfo;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.*;
import cn.iocoder.yudao.module.alert.dao.domain.ModelCfg;
import cn.iocoder.yudao.module.alert.dao.domain.ModelVersion;
import cn.iocoder.yudao.module.alert.dao.domain.SystemCfg;
import cn.iocoder.yudao.module.alert.dao.service.ModelCfgService;
import cn.iocoder.yudao.module.alert.dao.service.ModelVersionService;
import cn.iocoder.yudao.module.alert.dao.service.SystemCfgService;
import cn.iocoder.yudao.module.alert.param.ModelTestParam;
import cn.iocoder.yudao.module.alert.param.TrainParam;
import cn.iocoder.yudao.module.alert.service.model.ModelService;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.fasterxml.jackson.core.type.TypeReference;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -47,6 +48,8 @@ public class ModelServiceImpl implements ModelService {
private final SystemCfgService systemCfgService;
private final ModelVersionService modelVersionService;
@Value("${algorithm.host}")
private String algorithmHost;
@ -119,6 +122,7 @@ public class ModelServiceImpl implements ModelService {
info.setName(model.getModelName());
info.setDescription(model.getDescription());
info.setRate(model.getRate());
info.setTrainTime(new ArrayList<>());
modelCfg.setModelInfo(JsonUtils.toJsonString(info));
modelCfgService.updateById(modelCfg);
return modelId;
@ -143,22 +147,42 @@ public class ModelServiceImpl implements ModelService {
@Override
public TrainInfo trainModel(TrainParam param) {
String trainBody = HttpUtils.post(algorithmHost + "/api/get_smote_data", null, JsonUtils.toJsonString(param));
String trainBody = HttpUtils.post(algorithmHost + "/api/test/ClearTrain", 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);
return JsonUtils.parseObject(trainBody, new TypeReference<>() {
});
}
@Override
public ModelTestData getModelTestData(ModelTestParam param) {
String result = HttpUtils.post(algorithmHost + "/api/test/Test", null, JsonUtils.toJsonString(param))
.replace("NaN", "-1").replace("Infinity", "1");
return JsonUtils.parseObject(result, ModelTestData.class);
}
@Override
@Transactional(rollbackFor = Exception.class)
public ModelInfoVO bottomModel(Integer id) {
ModelCfg modelCfg = modelCfgService.getById(id);
ModelInfoVO modelInfo = JSON.parseObject(modelCfg.getModelInfo(), ModelInfoVO.class);
modelInfo.setBtmState(ModelStatus.FINISH.desc);
modelInfo.setVersion("v-" + DateUtil.now());
modelInfo.setModifier(SecurityFrameworkUtils.getLoginUserNickname());
modelInfo.setModifiedTime(new Date());
modelCfg.setModelInfo(JSON.toJSONString(modelInfo));
modelCfg.setUpdateTime(new Date());
modelCfg.setStatus(ModelStatus.FINISH.code);
modelCfgService.updateById(modelCfg);
ModelVersion modelVersion = BeanUtil.copyProperties(modelCfg, ModelVersion.class);
modelVersion.setId(null);
modelVersion.setModelId(id);
modelVersionService.save(modelVersion);
return modelInfo;
}
}

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

@ -104,7 +104,6 @@ public class EXAUtils {
* @return exa列表
*/
public List<String> getNowData(String EXA_IP, String itemNames) throws URISyntaxException, IOException {
List<String> result = new ArrayList<>();
try {

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

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

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

@ -272,8 +272,8 @@ pf4j:
# pluginsDir: /tmp/
pluginsDir: ../plugins
EXA:
ip: 120.27.236.75
ip: 120.26.116.243
point:
head: XN.
algorithm:
host: 47.98.32.148:8082
host: 120.26.116.243:8082
Loading…
Cancel
Save