合并拉取请求 #74

* feat: Implement system parameter management with Redis integration
This commit is contained in:
Dallas98
2025-11-11 22:13:14 +08:00
committed by GitHub
parent c5ccc56cca
commit aa01f52535
30 changed files with 343 additions and 73 deletions

View File

@@ -38,5 +38,9 @@
<artifactId>langchain4j-open-ai</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -1,15 +1,14 @@
package com.datamate.common.models.application;
package com.datamate.common.setting.application;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.datamate.common.infrastructure.exception.BusinessAssert;
import com.datamate.common.interfaces.PagedResponse;
import com.datamate.common.models.domain.entity.ModelConfig;
import com.datamate.common.models.domain.repository.ModelConfigRepository;
import com.datamate.common.models.infrastructure.client.ModelClient;
import com.datamate.common.models.infrastructure.exception.ModelsErrorCode;
import com.datamate.common.models.interfaces.rest.dto.CreateModelRequest;
import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest;
import dev.langchain4j.model.chat.ChatModel;
import com.datamate.common.setting.domain.entity.ModelConfig;
import com.datamate.common.setting.domain.repository.ModelConfigRepository;
import com.datamate.common.setting.infrastructure.client.ModelClient;
import com.datamate.common.setting.infrastructure.exception.ModelsErrorCode;
import com.datamate.common.setting.interfaces.rest.dto.CreateModelRequest;
import com.datamate.common.setting.interfaces.rest.dto.QueryModelRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -33,7 +32,7 @@ public class ModelConfigApplicationService {
providers.add(ModelConfig.builder().provider("ModelEngine").baseUrl("http://localhost:9981").build());
providers.add(ModelConfig.builder().provider("Ollama").baseUrl("http://localhost:11434").build());
providers.add(ModelConfig.builder().provider("OpenAI").baseUrl("https://api.openai.com/v1").build());
providers.add(ModelConfig.builder().provider("DeepSeek").baseUrl("https://api.deepseek.cn/v1").build());
providers.add(ModelConfig.builder().provider("DeepSeek").baseUrl("https://api.deepseek.com/v1").build());
providers.add(ModelConfig.builder().provider("火山方舟").baseUrl("https://ark.cn-beijing.volces.com/api/v3").build());
providers.add(ModelConfig.builder().provider("阿里云百炼").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build());
providers.add(ModelConfig.builder().provider("硅基流动").baseUrl("https://api.siliconflow.cn/v1").build());

View File

@@ -0,0 +1,70 @@
package com.datamate.common.setting.application;
import com.datamate.common.infrastructure.exception.BusinessAssert;
import com.datamate.common.infrastructure.exception.SystemErrorCode;
import com.datamate.common.setting.domain.entity.SysParam;
import com.datamate.common.setting.domain.repository.SysParamRepository;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 系统参数应用服务
*
* @author dallas
* @since 2025-11-04
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class SysParamApplicationService {
private final SysParamRepository sysParamRepository;
private final StringRedisTemplate redisTemplate;
/**
* 列表查询系统参数
*
* @return 系统参数列表
*/
public List<SysParam> list() {
return sysParamRepository.list();
}
/**
* 根据参数id修改系统参数值
*
* @param paramId 参数id
* @param paramValue 参数值
*/
public void updateParamValueById(String paramId, String paramValue) {
SysParam sysParam = sysParamRepository.getById(paramId);
BusinessAssert.notNull(sysParam, SystemErrorCode.RESOURCE_NOT_FOUND);
sysParam.setParamValue(paramValue);
sysParamRepository.updateById(sysParam);
redisTemplate.opsForValue().set(sysParam.getParamKey(), paramValue);
}
public void deleteParamById(String paramId) {
SysParam sysParam = sysParamRepository.getById(paramId);
BusinessAssert.notNull(sysParam, SystemErrorCode.RESOURCE_NOT_FOUND);
sysParamRepository.removeById(paramId);
redisTemplate.delete(sysParam.getParamKey());
}
/**
* 初始化系统参数到Redis
*/
@PostConstruct
public void init() {
try {
List<SysParam> sysParams = sysParamRepository.list();
sysParams.forEach(sysParam -> redisTemplate.opsForValue().set(sysParam.getParamKey(), sysParam.getParamValue()));
} catch (Exception e) {
log.error("Init sys params to redis error", e);
}
}
}

View File

@@ -1,4 +1,4 @@
package com.datamate.common.models.domain.entity;
package com.datamate.common.setting.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.datamate.common.domain.model.base.BaseEntity;

View File

@@ -1,4 +1,4 @@
package com.datamate.common.models.domain.entity;
package com.datamate.common.setting.domain.entity;
/**
* 模型类型枚举类

View File

@@ -0,0 +1,57 @@
package com.datamate.common.setting.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.datamate.common.domain.model.base.BaseEntity;
import lombok.Getter;
import lombok.Setter;
/**
* 系统参数设置实体类
*
* @author dallas
* @since 2025-10-27
*/
@Setter
@Getter
@TableName("t_sys_param")
public class SysParam extends BaseEntity<String> {
/**
* 设置项键(唯一)
*/
private String paramKey;
/**
* 设置项值
*/
private String paramValue;
/**
* 设置项类型(如 string、integer、boolean)
*/
private String paramType;
/**
* 选项列表(JSON格式,仅对enum类型有效)
*/
private String optionList;
/**
* 设置项描述
*/
private String description;
/**
* 是否内置:1-是,0-否
*/
private Boolean isBuiltIn;
/**
* 是否可修改:1-可修改,0-不可修改
*/
private Boolean canModify;
/**
* 是否启用:1-启用,0-禁用
*/
private Boolean isEnabled;
}

View File

@@ -1,9 +1,9 @@
package com.datamate.common.models.domain.repository;
package com.datamate.common.setting.domain.repository;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.repository.IRepository;
import com.datamate.common.models.domain.entity.ModelConfig;
import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest;
import com.datamate.common.setting.domain.entity.ModelConfig;
import com.datamate.common.setting.interfaces.rest.dto.QueryModelRequest;
/**
* 模型配置仓库接口

View File

@@ -0,0 +1,13 @@
package com.datamate.common.setting.domain.repository;
import com.baomidou.mybatisplus.extension.repository.IRepository;
import com.datamate.common.setting.domain.entity.SysParam;
/**
* 系统参数仓库接口
*
* @author dallas
* @since 2025-11-04
*/
public interface SysParamRepository extends IRepository<SysParam> {
}

View File

@@ -1,8 +1,8 @@
package com.datamate.common.models.infrastructure.client;
package com.datamate.common.setting.infrastructure.client;
import com.datamate.common.infrastructure.exception.BusinessException;
import com.datamate.common.models.domain.entity.ModelConfig;
import com.datamate.common.models.infrastructure.exception.ModelsErrorCode;
import com.datamate.common.setting.domain.entity.ModelConfig;
import com.datamate.common.setting.infrastructure.exception.ModelsErrorCode;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.openai.OpenAiChatModel;

View File

@@ -1,4 +1,4 @@
package com.datamate.common.models.infrastructure.exception;
package com.datamate.common.setting.infrastructure.exception;
import com.datamate.common.infrastructure.exception.ErrorCode;
import lombok.AllArgsConstructor;

View File

@@ -1,13 +1,13 @@
package com.datamate.common.models.infrastructure.persistence.impl;
package com.datamate.common.setting.infrastructure.persistence.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.repository.CrudRepository;
import com.datamate.common.models.domain.entity.ModelConfig;
import com.datamate.common.models.domain.repository.ModelConfigRepository;
import com.datamate.common.models.infrastructure.persistence.mapper.ModelConfigMapper;
import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest;
import com.datamate.common.setting.domain.entity.ModelConfig;
import com.datamate.common.setting.domain.repository.ModelConfigRepository;
import com.datamate.common.setting.infrastructure.persistence.mapper.ModelConfigMapper;
import com.datamate.common.setting.interfaces.rest.dto.QueryModelRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;

View File

@@ -0,0 +1,17 @@
package com.datamate.common.setting.infrastructure.persistence.impl;
import com.baomidou.mybatisplus.extension.repository.CrudRepository;
import com.datamate.common.setting.domain.entity.SysParam;
import com.datamate.common.setting.domain.repository.SysParamRepository;
import com.datamate.common.setting.infrastructure.persistence.mapper.SysParamMapper;
import org.springframework.stereotype.Repository;
/**
* 系统参数仓储实现类
*
* @author dallas
* @since 2025-11-04
*/
@Repository
public class SysParamRepositoryImpl extends CrudRepository<SysParamMapper, SysParam> implements SysParamRepository {
}

View File

@@ -1,7 +1,7 @@
package com.datamate.common.models.infrastructure.persistence.mapper;
package com.datamate.common.setting.infrastructure.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.datamate.common.models.domain.entity.ModelConfig;
import com.datamate.common.setting.domain.entity.ModelConfig;
import org.apache.ibatis.annotations.Mapper;
/**

View File

@@ -0,0 +1,15 @@
package com.datamate.common.setting.infrastructure.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.datamate.common.setting.domain.entity.SysParam;
import org.apache.ibatis.annotations.Mapper;
/**
* 系统参数映射器
*
* @author dallas
* @since 2025-11-04
*/
@Mapper
public interface SysParamMapper extends BaseMapper<SysParam> {
}

View File

@@ -1,11 +1,11 @@
package com.datamate.common.models.interfaces.rest;
package com.datamate.common.setting.interfaces.rest;
import com.datamate.common.interfaces.PagedResponse;
import com.datamate.common.models.application.ModelConfigApplicationService;
import com.datamate.common.models.domain.entity.ModelConfig;
import com.datamate.common.models.interfaces.rest.dto.CreateModelRequest;
import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest;
import com.datamate.common.setting.application.ModelConfigApplicationService;
import com.datamate.common.setting.domain.entity.ModelConfig;
import com.datamate.common.setting.interfaces.rest.dto.CreateModelRequest;
import com.datamate.common.setting.interfaces.rest.dto.QueryModelRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

View File

@@ -0,0 +1,52 @@
package com.datamate.common.setting.interfaces.rest;
import com.datamate.common.setting.application.SysParamApplicationService;
import com.datamate.common.setting.domain.entity.SysParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 系统参数控制器
*
* @author dallas
* @since 2025-11-04
*/
@RestController
@RequestMapping("/sys-param")
@RequiredArgsConstructor
public class SysParamController {
private final SysParamApplicationService sysParamApplicationService;
/**
* 获取系统参数列表
*
* @return 系统参数列表
*/
@GetMapping("/list")
public List<SysParam> list() {
return sysParamApplicationService.list();
}
/**
* 根据参数id修改系统参数值
*
* @param paramId 参数id
* @param paramValue 参数值
*/
@PutMapping("/{paramId}")
public void updateParamValueById(@PathVariable("paramId") String paramId, @RequestBody String paramValue) {
sysParamApplicationService.updateParamValueById(paramId, paramValue);
}
/**
* 根据参数id删除系统参数
*
* @param paramId 参数id
*/
@DeleteMapping("/{paramId}")
public void deleteParamById(@PathVariable("paramId") String paramId) {
sysParamApplicationService.deleteParamById(paramId);
}
}

View File

@@ -1,6 +1,6 @@
package com.datamate.common.models.interfaces.rest.dto;
package com.datamate.common.setting.interfaces.rest.dto;
import com.datamate.common.models.domain.entity.ModelType;
import com.datamate.common.setting.domain.entity.ModelType;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;

View File

@@ -1,7 +1,7 @@
package com.datamate.common.models.interfaces.rest.dto;
package com.datamate.common.setting.interfaces.rest.dto;
import com.datamate.common.interfaces.PagingQuery;
import com.datamate.common.models.domain.entity.ModelType;
import com.datamate.common.setting.domain.entity.ModelType;
import lombok.Getter;
import lombok.Setter;