Browse Source

feat(alert): 新增模型配置与版本管理功能

- 添加 ModelCfg 和 ModelVersion 实体类,支持模型基础信息存储
- 实现模型创建、查询接口,支持分页和条件筛选
- 引入 MultiDateDeserializer 支持多种日期格式反序列化
- 优化模型名称空值处理逻辑,避免空指针异常
- 增加 Point 类字段注解,确保 JSON 序列化兼容性
- 更新 Dockerfile 镜像源地址,提升构建稳定性
- 新增独立 Dockerfile 支持外部配置挂载与环境变量设置
- 完善实体类 MyBatis 注解,增强数据库映射准确性
pull/46/head
chenjiale 1 month ago
parent
commit
6d9347116b
  1. 27
      Dockerfile
  2. 37
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/MultiDateDeserializer.java
  3. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java
  4. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java
  5. 3
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/ModelCfg.java
  6. 1
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/ModelVersion.java
  7. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java
  8. 2
      yudao-server/Dockerfile

27
Dockerfile

@ -0,0 +1,27 @@
## 使用 JRE 运行,避免在镜像中重新构建 Jar
FROM docker.io/eclipse-temurin:21-jre
## 允许在构建时传入已编译好的 Jar 路径与外部挂载的配置目录
ARG JAR_PATH=/opt/alert/alert-backend/app.jar
ARG CONFIG_DIR=/opt/alert/alert-backend
WORKDIR /yudao-server
## 配置目录来自宿主机挂载,不在镜像内再生成
ENV CONFIG_DIR=${CONFIG_DIR}
RUN mkdir -p ${CONFIG_DIR}
VOLUME ${CONFIG_DIR}
## 拷贝已有的可执行 Jar
COPY ${JAR_PATH} app.jar
## 基础运行时配置
ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom"
ENV ARGS=""
ENV SPRING_CONFIG_ADDITIONAL_LOCATION=file:${CONFIG_DIR}/
ENV LOGGING_CONFIG=${CONFIG_DIR}/logback-spring.xml
EXPOSE 48080
CMD java ${JAVA_OPTS} -Dlogging.config=${LOGGING_CONFIG} -jar /yudao-server/app.jar --spring.config.additional-location=${SPRING_CONFIG_ADDITIONAL_LOCATION} $ARGS

37
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/MultiDateDeserializer.java

@ -0,0 +1,37 @@
package cn.iocoder.yudao.framework.common.util.json.databind;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* @author chenjiale
* @version 1.0
* @date 2025-12-08 19:52
*/
public class MultiDateDeserializer extends JsonDeserializer<Date> {
private static final List<String> FORMATS = Arrays.asList(
"yyyy-MM-dd HH:mm:ss",
"yyyy/MM/dd HH:mm:ss"
);
@Override
public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String text = p.getText().trim();
for (String format : FORMATS) {
try {
return new SimpleDateFormat(format).parse(text);
} catch (ParseException ignored) {
}
}
throw new RuntimeException("Unsupported date format: " + text);
}
}

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

@ -1,10 +1,12 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.model;
import cn.iocoder.yudao.framework.common.util.json.databind.MultiDateDeserializer;
import cn.iocoder.yudao.module.alert.common.enums.Algorithm;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.TrainInfo;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.*;
import java.util.Date;
@ -33,6 +35,7 @@ public class ModelInfo {
@JsonProperty("founder")
private String founder;
@JsonDeserialize(using = MultiDateDeserializer.class)
@JsonProperty("creatTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ -40,6 +43,7 @@ public class ModelInfo {
@JsonProperty("Modifier")
private String modifier;
@JsonDeserialize(using = MultiDateDeserializer.class)
@JsonProperty("modifiedTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifiedTime;

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

@ -16,7 +16,9 @@ import java.math.BigDecimal;
@NoArgsConstructor
@AllArgsConstructor
public class Point {
@JsonProperty("PointId")
private String PointId;
@JsonProperty("Description")
private String Description;
private String Unit;
@JsonProperty("Lower")

3
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dao/domain/ModelCfg.java

@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.alert.dao.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -19,6 +21,7 @@ import java.util.Date;
@AllArgsConstructor
public class ModelCfg implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "model_id")
private Integer id;
private Integer systemId;
private Integer algorithmId;

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

@ -13,6 +13,7 @@ import lombok.Data;
@TableName(value ="model_version")
@Data
public class ModelVersion {
@TableId(value = "model_id")
private Integer id;
private Integer modelId;

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

@ -83,7 +83,7 @@ public class ModelServiceImpl implements ModelService {
List<ModelCfg> list = modelCfgService.list(queryWrapper);
return list.stream().map(modelCfg -> ModelSimpleVO.builder()
.id(modelCfg.getId())
.name(modelCfg.getModelName().trim())
.name(modelCfg.getModelName() == null ? null : modelCfg.getModelName().trim())
.creator(modelCfg.getCreator())
.createTime(modelCfg.getCreateTime())
.version(modelCfg.getCurVersion())

2
yudao-server/Dockerfile

@ -1,6 +1,6 @@
## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性
## 感谢复旦核博士的建议!灰子哥,牛皮!
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:21-jre
FROM docker.io/eclipse-temurin:21-jre
## 创建目录,并使用它作为工作目录
RUN mkdir -p /yudao-server

Loading…
Cancel
Save