mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 04:08:43 +08:00 
			
		
		
		
	适配 Oracle 数据库
1. 去除关键字,避免数据库的查询冲突
This commit is contained in:
		@@ -68,15 +68,15 @@ public class ConfigController {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GetMapping(value = "/get-value-by-key")
 | 
			
		||||
    @ApiOperation(value = "根据参数键名查询参数值", notes = "敏感配置,不允许返回给前端")
 | 
			
		||||
    @ApiOperation(value = "根据参数键名查询参数值", notes = "不可见的配置,不允许返回给前端")
 | 
			
		||||
    @ApiImplicitParam(name = "key", value = "参数键", required = true, example = "yunai.biz.username", dataTypeClass = String.class)
 | 
			
		||||
    public CommonResult<String> getConfigKey(@RequestParam("key") String key) {
 | 
			
		||||
        ConfigDO config = configService.getConfigByKey(key);
 | 
			
		||||
        if (config == null) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        if (config.getSensitive()) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_SENSITIVE);
 | 
			
		||||
        if (config.getVisible()) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_VISIBLE);
 | 
			
		||||
        }
 | 
			
		||||
        return success(config.getValue());
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ public class ConfigBaseVO {
 | 
			
		||||
    @ApiModelProperty(value = "参数分组", required = true, example = "biz")
 | 
			
		||||
    @NotEmpty(message = "参数分组不能为空")
 | 
			
		||||
    @Size(max = 50, message = "参数名称不能超过50个字符")
 | 
			
		||||
    private String group;
 | 
			
		||||
    private String category;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "参数名称", required = true, example = "数据库名")
 | 
			
		||||
    @NotBlank(message = "参数名称不能为空")
 | 
			
		||||
@@ -32,7 +32,7 @@ public class ConfigBaseVO {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "是否敏感", required = true, example = "true")
 | 
			
		||||
    @NotNull(message = "是否敏感不能为空")
 | 
			
		||||
    private Boolean sensitive;
 | 
			
		||||
    private Boolean visible;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "备注", example = "备注一下很帅气!")
 | 
			
		||||
    private String remark;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
 | 
			
		||||
import org.mapstruct.Mapper;
 | 
			
		||||
import org.mapstruct.Mapping;
 | 
			
		||||
import org.mapstruct.factory.Mappers;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
@@ -18,12 +19,15 @@ public interface ConfigConvert {
 | 
			
		||||
 | 
			
		||||
    PageResult<ConfigRespVO> convertPage(PageResult<ConfigDO> page);
 | 
			
		||||
 | 
			
		||||
    @Mapping(source = "configKey", target = "key")
 | 
			
		||||
    ConfigRespVO convert(ConfigDO bean);
 | 
			
		||||
 | 
			
		||||
    @Mapping(source = "key", target = "configKey")
 | 
			
		||||
    ConfigDO convert(ConfigCreateReqVO bean);
 | 
			
		||||
 | 
			
		||||
    ConfigDO convert(ConfigUpdateReqVO bean);
 | 
			
		||||
 | 
			
		||||
    @Mapping(source = "configKey", target = "key")
 | 
			
		||||
    List<ConfigExcelVO> convertList(List<ConfigDO> list);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.infra.dal.dataobject.config;
 | 
			
		||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.KeySequence;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableField;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableId;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
@@ -28,19 +27,19 @@ public class ConfigDO extends BaseDO {
 | 
			
		||||
    @TableId
 | 
			
		||||
    private Long id;
 | 
			
		||||
    /**
 | 
			
		||||
     * 参数分组
 | 
			
		||||
     * 参数分类
 | 
			
		||||
     */
 | 
			
		||||
    @TableField("\"group\"")
 | 
			
		||||
    private String group;
 | 
			
		||||
    private String category;
 | 
			
		||||
    /**
 | 
			
		||||
     * 参数名称
 | 
			
		||||
     */
 | 
			
		||||
    private String name;
 | 
			
		||||
    /**
 | 
			
		||||
     * 参数键名
 | 
			
		||||
     *
 | 
			
		||||
     * 支持多 DB 类型时,无法直接使用 key + @TableField("config_key") 来实现转换,原因是 "config_key" AS key 而存在报错
 | 
			
		||||
     */
 | 
			
		||||
    @TableField("\"key\"")
 | 
			
		||||
    private String key;
 | 
			
		||||
    private String configKey;
 | 
			
		||||
    /**
 | 
			
		||||
     * 参数键值
 | 
			
		||||
     */
 | 
			
		||||
@@ -50,15 +49,13 @@ public class ConfigDO extends BaseDO {
 | 
			
		||||
     *
 | 
			
		||||
     * 枚举 {@link ConfigTypeEnum}
 | 
			
		||||
     */
 | 
			
		||||
    @TableField("\"type\"")
 | 
			
		||||
    private Integer type;
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否敏感
 | 
			
		||||
     * 是否可见
 | 
			
		||||
     *
 | 
			
		||||
     * 对于敏感配置,需要管理权限才能查看
 | 
			
		||||
     * 不可见的参数,一般是敏感参数,前端不可获取
 | 
			
		||||
     */
 | 
			
		||||
    @TableField("\"sensitive\"")
 | 
			
		||||
    private Boolean sensitive;
 | 
			
		||||
    private Boolean visible;
 | 
			
		||||
    /**
 | 
			
		||||
     * 备注
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.infra.dal.dataobject.file;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.KeySequence;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableField;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
 | 
			
		||||
@@ -47,7 +46,6 @@ public class FileDO extends BaseDO {
 | 
			
		||||
     *
 | 
			
		||||
     * 通过 {@link cn.hutool.core.io.FileTypeUtil#getType(InputStream)} 获取
 | 
			
		||||
     */
 | 
			
		||||
    @TableField("\"type\"")
 | 
			
		||||
    private String type;
 | 
			
		||||
    /**
 | 
			
		||||
     * 文件大小
 | 
			
		||||
 
 | 
			
		||||
@@ -14,13 +14,13 @@ import java.util.List;
 | 
			
		||||
public interface ConfigMapper extends BaseMapperX<ConfigDO> {
 | 
			
		||||
 | 
			
		||||
    default ConfigDO selectByKey(String key) {
 | 
			
		||||
        return selectOne(ConfigDO::getKey, key);
 | 
			
		||||
        return selectOne(ConfigDO::getConfigKey, key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    default PageResult<ConfigDO> selectPage(ConfigPageReqVO reqVO) {
 | 
			
		||||
        return selectPage(reqVO, new LambdaQueryWrapperX<ConfigDO>()
 | 
			
		||||
                .likeIfPresent(ConfigDO::getName, reqVO.getName())
 | 
			
		||||
                .likeIfPresent(ConfigDO::getKey, reqVO.getKey())
 | 
			
		||||
                .likeIfPresent(ConfigDO::getConfigKey, reqVO.getKey())
 | 
			
		||||
                .eqIfPresent(ConfigDO::getType, reqVO.getType())
 | 
			
		||||
                .betweenIfPresent(ConfigDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()));
 | 
			
		||||
    }
 | 
			
		||||
@@ -28,7 +28,7 @@ public interface ConfigMapper extends BaseMapperX<ConfigDO> {
 | 
			
		||||
    default List<ConfigDO> selectList(ConfigExportReqVO reqVO) {
 | 
			
		||||
        return selectList(new LambdaQueryWrapperX<ConfigDO>()
 | 
			
		||||
                .likeIfPresent(ConfigDO::getName, reqVO.getName())
 | 
			
		||||
                .likeIfPresent(ConfigDO::getKey, reqVO.getKey())
 | 
			
		||||
                .likeIfPresent(ConfigDO::getConfigKey, reqVO.getKey())
 | 
			
		||||
                .eqIfPresent(ConfigDO::getType, reqVO.getType())
 | 
			
		||||
                .betweenIfPresent(ConfigDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()));
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ public interface FileConfigMapper extends BaseMapperX<FileConfigDO> {
 | 
			
		||||
                .orderByDesc(FileConfigDO::getId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT id FROM infra_file_config WHERE update_time > #{maxUpdateTime} LIMIT 1")
 | 
			
		||||
    Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);
 | 
			
		||||
    @Select("SELECT COUNT(*) FROM infra_file_config WHERE update_time > #{maxUpdateTime}")
 | 
			
		||||
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenBuilder;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenEngine;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.service.db.DatabaseTableService;
 | 
			
		||||
@@ -88,6 +89,7 @@ public class CodegenServiceImpl implements CodegenService {
 | 
			
		||||
        // 构建 CodegenTableDO 对象,插入到 DB 中
 | 
			
		||||
        CodegenTableDO table = codegenBuilder.buildTable(tableInfo);
 | 
			
		||||
        table.setDataSourceConfigId(dataSourceConfigId);
 | 
			
		||||
        table.setScene(CodegenSceneEnum.ADMIN.getScene()); // 默认配置下,使用管理后台的模板
 | 
			
		||||
        table.setAuthor(userApi.getUser(userId).getNickname());
 | 
			
		||||
        codegenTableMapper.insert(table);
 | 
			
		||||
        // 构建 CodegenColumnDO 数组,插入到 DB 中
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package cn.iocoder.yudao.module.infra.service.config;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.util.StrUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO;
 | 
			
		||||
@@ -96,7 +97,9 @@ public class ConfigServiceImpl implements ConfigService {
 | 
			
		||||
        // 校验自己存在
 | 
			
		||||
        checkConfigExists(id);
 | 
			
		||||
        // 校验参数配置 key 的唯一性
 | 
			
		||||
        checkConfigKeyUnique(id, key);
 | 
			
		||||
        if (StrUtil.isNotEmpty(key)) {
 | 
			
		||||
            checkConfigKeyUnique(id, key);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @VisibleForTesting
 | 
			
		||||
 
 | 
			
		||||
@@ -123,7 +123,7 @@ public class FileConfigServiceImpl implements FileConfigService {
 | 
			
		||||
        if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
            log.info("[loadFileConfigIfUpdate][首次加载全量文件配置]");
 | 
			
		||||
        } else { // 判断数据库中是否有更新的文件配置
 | 
			
		||||
            if (fileConfigMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) {
 | 
			
		||||
            if (fileConfigMapper.selectCountByUpdateTimeGt(maxUpdateTime) == 0) {
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
            log.info("[loadFileConfigIfUpdate][增量加载全量文件配置]");
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user