YunaiV 4 лет назад
Родитель
Сommit
0e28ab169c

+ 10 - 38
ruoyi-ui/src/views/infra/config/index.vue

@@ -2,24 +2,12 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="参数名称" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="请输入参数名称"
-          clearable
-          size="small"
-          style="width: 240px"
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.name" placeholder="请输入参数名称" clearable size="small" style="width: 240px"
+                  @keyup.enter.native="handleQuery"/>
       </el-form-item>
       <el-form-item label="参数键名" prop="key">
-        <el-input
-          v-model="queryParams.key"
-          placeholder="请输入参数键名"
-          clearable
-          size="small"
-          style="width: 240px"
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.key" placeholder="请输入参数键名" clearable size="small" style="width: 240px"
+                  @keyup.enter.native="handleQuery"/>
       </el-form-item>
       <el-form-item label="系统内置" prop="type">
         <el-select v-model="queryParams.type" placeholder="系统内置" clearable size="small">
@@ -56,7 +44,7 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
-          v-hasPermi="['infra:config:add']"
+          v-hasPermi="['infra:config:create']"
         >新增</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -95,31 +83,15 @@
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['infra:config:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['infra:config:remove']"
-          >删除</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+                     v-hasPermi="['infra:config:update']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+                     v-hasPermi="['infra:config:delete']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
 
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNo"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
+    <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" @pagination="getList"/>
 
     <!-- 添加或修改参数配置对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>

+ 3 - 6
src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/InfConfigController.java

@@ -3,7 +3,6 @@ package cn.iocoder.dashboard.modules.infra.controller.config;
 import cn.iocoder.dashboard.common.pojo.CommonResult;
 import cn.iocoder.dashboard.common.pojo.PageResult;
 import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils;
-import cn.iocoder.dashboard.framework.idempotent.core.annotation.Idempotent;
 import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog;
 import cn.iocoder.dashboard.modules.infra.controller.config.vo.*;
 import cn.iocoder.dashboard.modules.infra.convert.config.InfConfigConvert;
@@ -19,7 +18,6 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
-
 import java.io.IOException;
 import java.util.List;
 
@@ -44,18 +42,17 @@ public class InfConfigController {
         return success(configService.createConfig(reqVO));
     }
 
-    @ApiOperation("修改参数配置")
     @PutMapping("/update")
+    @ApiOperation("修改参数配置")
     @PreAuthorize("@ss.hasPermission('infra:config:update')")
-    @Idempotent(timeout = 60)
     public CommonResult<Boolean> updateConfig(@Valid @RequestBody InfConfigUpdateReqVO reqVO) {
         configService.updateConfig(reqVO);
         return success(true);
     }
 
+    @DeleteMapping("/delete")
     @ApiOperation("删除参数配置")
     @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
-    @DeleteMapping("/delete")
     @PreAuthorize("@ss.hasPermission('infra:config:delete')")
     public CommonResult<Boolean> deleteConfig(@RequestParam("id") Long id) {
         configService.deleteConfig(id);
@@ -70,9 +67,9 @@ public class InfConfigController {
         return success(InfConfigConvert.INSTANCE.convert(configService.getConfig(id)));
     }
 
+    @GetMapping(value = "/get-value-by-key")
     @ApiOperation(value = "根据参数键名查询参数值", notes = "敏感配置,不允许返回给前端")
     @ApiImplicitParam(name = "key", value = "参数键", required = true, example = "yunai.biz.username", dataTypeClass = String.class)
-    @GetMapping(value = "/get-value-by-key")
     public CommonResult<String> getConfigKey(@RequestParam("key") String key) {
         InfConfigDO config = configService.getConfigByKey(key);
         if (config == null) {

+ 10 - 9
src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/config/InfConfigMapper.java

@@ -14,20 +14,21 @@ import java.util.List;
 @Mapper
 public interface InfConfigMapper extends BaseMapperX<InfConfigDO> {
 
-    default PageResult<InfConfigDO> selectPage(InfConfigPageReqVO reqVO) {
-        return selectPage(reqVO,
-                new QueryWrapperX<InfConfigDO>().likeIfPresent("name", reqVO.getName())
-                        .likeIfPresent("`key`", reqVO.getKey())
-                        .eqIfPresent("`type`", reqVO.getType())
-                        .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()));
-    }
-
     default InfConfigDO selectByKey(String key) {
         return selectOne(new QueryWrapper<InfConfigDO>().eq("`key`", key));
     }
 
+    default PageResult<InfConfigDO> selectPage(InfConfigPageReqVO reqVO) {
+        return selectPage(reqVO, new QueryWrapperX<InfConfigDO>()
+                .likeIfPresent("name", reqVO.getName())
+                .likeIfPresent("`key`", reqVO.getKey())
+                .eqIfPresent("`type`", reqVO.getType())
+                .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()));
+    }
+
     default List<InfConfigDO> selectList(InfConfigExportReqVO reqVO) {
-        return selectList(new QueryWrapperX<InfConfigDO>().likeIfPresent("name", reqVO.getName())
+        return selectList(new QueryWrapperX<InfConfigDO>()
+                .likeIfPresent("name", reqVO.getName())
                 .likeIfPresent("`key`", reqVO.getKey())
                 .eqIfPresent("`type`", reqVO.getType())
                 .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()));

+ 23 - 21
src/main/java/cn/iocoder/dashboard/modules/infra/service/config/InfConfigService.java

@@ -7,6 +7,7 @@ import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigPageReqV
 import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigUpdateReqVO;
 import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO;
 
+import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -17,20 +18,26 @@ import java.util.List;
 public interface InfConfigService {
 
     /**
-     * 获得参数配置分页列表
+     * 创建参数配置
      *
-     * @param reqVO 分页条件
-     * @return 分页列表
+     * @param reqVO 创建信息
+     * @return 配置编号
      */
-    PageResult<InfConfigDO> getConfigPage(InfConfigPageReqVO reqVO);
+    Long createConfig(@Valid InfConfigCreateReqVO reqVO);
 
     /**
-     * 获得参数配置列表
+     * 更新参数配置
      *
-     * @param reqVO 列表
-     * @return 列表
+     * @param reqVO 更新信息
      */
-    List<InfConfigDO> getConfigList(InfConfigExportReqVO reqVO);
+    void updateConfig(@Valid InfConfigUpdateReqVO reqVO);
+
+    /**
+     * 删除参数配置
+     *
+     * @param id 配置编号
+     */
+    void deleteConfig(Long id);
 
     /**
      * 获得参数配置
@@ -49,25 +56,20 @@ public interface InfConfigService {
     InfConfigDO getConfigByKey(String key);
 
     /**
-     * 创建参数配置
+     * 获得参数配置分页列表
      *
-     * @param reqVO 创建信息
-     * @return 配置编号
+     * @param reqVO 分页条件
+     * @return 分页列表
      */
-    Long createConfig(InfConfigCreateReqVO reqVO);
+    PageResult<InfConfigDO> getConfigPage(@Valid InfConfigPageReqVO reqVO);
 
     /**
-     * 更新参数配置
+     * 获得参数配置列表
      *
-     * @param reqVO 更新信息
+     * @param reqVO 列表
+     * @return 列表
      */
-    void updateConfig(InfConfigUpdateReqVO reqVO);
+    List<InfConfigDO> getConfigList(@Valid InfConfigExportReqVO reqVO);
 
-    /**
-     * 删除参数配置
-     *
-     * @param id 配置编号
-     */
-    void deleteConfig(Long id);
 
 }

+ 22 - 20
src/main/java/cn/iocoder/dashboard/modules/infra/service/config/impl/InfConfigServiceImpl.java

@@ -15,6 +15,7 @@ import cn.iocoder.dashboard.modules.infra.service.config.InfConfigService;
 import com.google.common.annotations.VisibleForTesting;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 
@@ -27,6 +28,7 @@ import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.*;
  */
 @Service
 @Slf4j
+@Validated
 public class InfConfigServiceImpl implements InfConfigService {
 
     @Resource
@@ -35,26 +37,6 @@ public class InfConfigServiceImpl implements InfConfigService {
     @Resource
     private InfConfigProducer configProducer;
 
-    @Override
-    public PageResult<InfConfigDO> getConfigPage(InfConfigPageReqVO reqVO) {
-        return configMapper.selectPage(reqVO);
-    }
-
-    @Override
-    public List<InfConfigDO> getConfigList(InfConfigExportReqVO reqVO) {
-        return configMapper.selectList(reqVO);
-    }
-
-    @Override
-    public InfConfigDO getConfig(Long id) {
-        return configMapper.selectById(id);
-    }
-
-    @Override
-    public InfConfigDO getConfigByKey(String key) {
-        return configMapper.selectByKey(key);
-    }
-
     @Override
     public Long createConfig(InfConfigCreateReqVO reqVO) {
         // 校验正确性
@@ -93,6 +75,26 @@ public class InfConfigServiceImpl implements InfConfigService {
         configProducer.sendConfigRefreshMessage();
     }
 
+    @Override
+    public InfConfigDO getConfig(Long id) {
+        return configMapper.selectById(id);
+    }
+
+    @Override
+    public InfConfigDO getConfigByKey(String key) {
+        return configMapper.selectByKey(key);
+    }
+
+    @Override
+    public PageResult<InfConfigDO> getConfigPage(InfConfigPageReqVO reqVO) {
+        return configMapper.selectPage(reqVO);
+    }
+
+    @Override
+    public List<InfConfigDO> getConfigList(InfConfigExportReqVO reqVO) {
+        return configMapper.selectList(reqVO);
+    }
+
     private void checkCreateOrUpdate(Long id, String key) {
         // 校验自己存在
         checkConfigExists(id);

+ 82 - 82
src/test/java/cn/iocoder/dashboard/modules/infra/service/config/InfConfigServiceTest.java

@@ -47,88 +47,6 @@ public class InfConfigServiceTest extends BaseDbUnitTest {
     @MockBean
     private InfConfigProducer configProducer;
 
-    @Test
-    public void testGetConfigPage() {
-        // mock 数据
-        InfConfigDO dbConfig = randomInfConfigDO(o -> { // 等会查询到
-            o.setName("芋艿");
-            o.setKey("yunai");
-            o.setType(InfConfigTypeEnum.SYSTEM.getType());
-            o.setCreateTime(buildTime(2021, 2, 1));
-        });
-        configMapper.insert(dbConfig);
-        // 测试 name 不匹配
-        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setName("土豆")));
-        // 测试 key 不匹配
-        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setKey("tudou")));
-        // 测试 type 不匹配
-        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setType(InfConfigTypeEnum.CUSTOM.getType())));
-        // 测试 createTime 不匹配
-        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1))));
-        // 准备参数
-        InfConfigPageReqVO reqVO = new InfConfigPageReqVO();
-        reqVO.setName("艿");
-        reqVO.setKey("nai");
-        reqVO.setType(InfConfigTypeEnum.SYSTEM.getType());
-        reqVO.setBeginTime(buildTime(2021, 1, 15));
-        reqVO.setEndTime(buildTime(2021, 2, 15));
-
-        // 调用
-        PageResult<InfConfigDO> pageResult = configService.getConfigPage(reqVO);
-        // 断言
-        assertEquals(1, pageResult.getTotal());
-        assertEquals(1, pageResult.getList().size());
-        assertPojoEquals(dbConfig, pageResult.getList().get(0));
-    }
-
-    @Test
-    public void testGetConfigList() {
-        // mock 数据
-        InfConfigDO dbConfig = randomInfConfigDO(o -> { // 等会查询到
-            o.setName("芋艿");
-            o.setKey("yunai");
-            o.setType(InfConfigTypeEnum.SYSTEM.getType());
-            o.setCreateTime(buildTime(2021, 2, 1));
-        });
-        configMapper.insert(dbConfig);
-        // 测试 name 不匹配
-        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setName("土豆")));
-        // 测试 key 不匹配
-        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setKey("tudou")));
-        // 测试 type 不匹配
-        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setType(InfConfigTypeEnum.CUSTOM.getType())));
-        // 测试 createTime 不匹配
-        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1))));
-        // 准备参数
-        InfConfigExportReqVO reqVO = new InfConfigExportReqVO();
-        reqVO.setName("艿");
-        reqVO.setKey("nai");
-        reqVO.setType(InfConfigTypeEnum.SYSTEM.getType());
-        reqVO.setBeginTime(buildTime(2021, 1, 15));
-        reqVO.setEndTime(buildTime(2021, 2, 15));
-
-        // 调用
-        List<InfConfigDO> list = configService.getConfigList(reqVO);
-        // 断言
-        assertEquals(1, list.size());
-        assertPojoEquals(dbConfig, list.get(0));
-    }
-
-    @Test
-    public void testGetConfigByKey() {
-        // mock 数据
-        InfConfigDO dbConfig = randomInfConfigDO();
-        configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据
-        // 准备参数
-        String key = dbConfig.getKey();
-
-        // 调用
-        InfConfigDO config = configService.getConfigByKey(key);
-        // 断言
-        assertNotNull(config);
-        assertPojoEquals(dbConfig, config);
-    }
-
     @Test
     public void testCreateConfig_success() {
         // 准备参数
@@ -243,6 +161,88 @@ public class InfConfigServiceTest extends BaseDbUnitTest {
                 CONFIG_KEY_DUPLICATE);
     }
 
+    @Test
+    public void testGetConfigPage() {
+        // mock 数据
+        InfConfigDO dbConfig = randomInfConfigDO(o -> { // 等会查询到
+            o.setName("芋艿");
+            o.setKey("yunai");
+            o.setType(InfConfigTypeEnum.SYSTEM.getType());
+            o.setCreateTime(buildTime(2021, 2, 1));
+        });
+        configMapper.insert(dbConfig);
+        // 测试 name 不匹配
+        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setName("土豆")));
+        // 测试 key 不匹配
+        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setKey("tudou")));
+        // 测试 type 不匹配
+        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setType(InfConfigTypeEnum.CUSTOM.getType())));
+        // 测试 createTime 不匹配
+        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1))));
+        // 准备参数
+        InfConfigPageReqVO reqVO = new InfConfigPageReqVO();
+        reqVO.setName("艿");
+        reqVO.setKey("nai");
+        reqVO.setType(InfConfigTypeEnum.SYSTEM.getType());
+        reqVO.setBeginTime(buildTime(2021, 1, 15));
+        reqVO.setEndTime(buildTime(2021, 2, 15));
+
+        // 调用
+        PageResult<InfConfigDO> pageResult = configService.getConfigPage(reqVO);
+        // 断言
+        assertEquals(1, pageResult.getTotal());
+        assertEquals(1, pageResult.getList().size());
+        assertPojoEquals(dbConfig, pageResult.getList().get(0));
+    }
+
+    @Test
+    public void testGetConfigList() {
+        // mock 数据
+        InfConfigDO dbConfig = randomInfConfigDO(o -> { // 等会查询到
+            o.setName("芋艿");
+            o.setKey("yunai");
+            o.setType(InfConfigTypeEnum.SYSTEM.getType());
+            o.setCreateTime(buildTime(2021, 2, 1));
+        });
+        configMapper.insert(dbConfig);
+        // 测试 name 不匹配
+        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setName("土豆")));
+        // 测试 key 不匹配
+        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setKey("tudou")));
+        // 测试 type 不匹配
+        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setType(InfConfigTypeEnum.CUSTOM.getType())));
+        // 测试 createTime 不匹配
+        configMapper.insert(ObjectUtils.clone(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1))));
+        // 准备参数
+        InfConfigExportReqVO reqVO = new InfConfigExportReqVO();
+        reqVO.setName("艿");
+        reqVO.setKey("nai");
+        reqVO.setType(InfConfigTypeEnum.SYSTEM.getType());
+        reqVO.setBeginTime(buildTime(2021, 1, 15));
+        reqVO.setEndTime(buildTime(2021, 2, 15));
+
+        // 调用
+        List<InfConfigDO> list = configService.getConfigList(reqVO);
+        // 断言
+        assertEquals(1, list.size());
+        assertPojoEquals(dbConfig, list.get(0));
+    }
+
+    @Test
+    public void testGetConfigByKey() {
+        // mock 数据
+        InfConfigDO dbConfig = randomInfConfigDO();
+        configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        String key = dbConfig.getKey();
+
+        // 调用
+        InfConfigDO config = configService.getConfigByKey(key);
+        // 断言
+        assertNotNull(config);
+        assertPojoEquals(dbConfig, config);
+    }
+
     // ========== 随机对象 ==========
 
     @SafeVarargs