From c9f7314cd0e02201940a7800e5668bb4bbd932be Mon Sep 17 00:00:00 2001 From: 孤舟烟雨 <494979+gzyy@user.noreply.gitee.com> Date: 星期五, 13 八月 2021 10:03:46 +0800 Subject: [PATCH] !77 update 对象存储配置 重构到数据库 动态配置 * 增加对象存储配置sql * 修改对象存储配置 * Merge branch 'dev' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus into dev * 增加对象存储配置 * 增加对象存储配置 --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java | 126 +++++ ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java | 111 +++++ ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOssConfigMapper.java | 16 ruoyi-ui/src/views/system/ossConfig/index.vue | 495 ++++++++++++++++++++++ ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java | 94 ++++ ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java | 66 +++ ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java | 126 +++++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java | 145 ++++++ ruoyi-system/src/main/resources/mapper/system/SysOssConfigMapper.xml | 27 + ruoyi-ui/src/api/system/sysOssConfig.js | 58 ++ sql/sys_oss_config.sql | 45 ++ 11 files changed, 1,309 insertions(+), 0 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java new file mode 100644 index 0000000..669fcb9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java @@ -0,0 +1,126 @@ +package com.ruoyi.web.controller.system; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysOssConfig; +import com.ruoyi.system.domain.bo.SysOssConfigBo; +import com.ruoyi.system.domain.vo.SysOssConfigVo; +import com.ruoyi.system.service.ISysOssConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Arrays; +import java.util.List; + +/** + * 浜戝瓨鍌ㄩ厤缃瓹ontroller + * + * @author ruoyi + * @date 2021-08-11 + */ +@Validated +@Api(value = "浜戝瓨鍌ㄩ厤缃帶鍒跺櫒", tags = {"浜戝瓨鍌ㄩ厤缃鐞�"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) +@RestController +@RequestMapping("/system/sysOssConfig") +public class SysOssConfigController extends BaseController { + + private final ISysOssConfigService iSysOssConfigService; + + /** + * 鏌ヨ浜戝瓨鍌ㄩ厤缃垪琛� + */ + @ApiOperation("鏌ヨ浜戝瓨鍌ㄩ厤缃垪琛�") + @PreAuthorize("@ss.hasPermi('system:sysOssConfig:list')") + @GetMapping("/list") + public TableDataInfo<SysOssConfigVo> list(@Validated SysOssConfigBo bo) { + return iSysOssConfigService.queryPageList(bo); + } + + /** + * 鑾峰彇浜戝瓨鍌ㄩ厤缃缁嗕俊鎭� + */ + @ApiOperation("鑾峰彇浜戝瓨鍌ㄩ厤缃缁嗕俊鎭�") + @PreAuthorize("@ss.hasPermi('system:sysOssConfig:query')") + @GetMapping("/{ossConfigId}") + public AjaxResult<SysOssConfigVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable("ossConfigId") Integer ossConfigId) { + return AjaxResult.success(iSysOssConfigService.queryById(ossConfigId)); + } + + /** + * 鏂板浜戝瓨鍌ㄩ厤缃� + */ + @ApiOperation("鏂板浜戝瓨鍌ㄩ厤缃�") + @PreAuthorize("@ss.hasPermi('system:sysOssConfig:add')") + @Log(title = "浜戝瓨鍌ㄩ厤缃�", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody SysOssConfigBo bo) { + if (StringUtils.isNotEmpty(bo.getConfigKey()) + && UserConstants.NOT_UNIQUE.equals(iSysOssConfigService.checkConfigKeyUnique(bo))) { + return AjaxResult.error("鏂板浜戦厤缃�'" + bo.getConfigKey() + "'澶辫触锛宑onfigKey宸插瓨鍦�"); + } + return toAjax(iSysOssConfigService.insertByBo(bo) ? 1 : 0); + } + + /** + * 淇敼浜戝瓨鍌ㄩ厤缃� + */ + @ApiOperation("淇敼浜戝瓨鍌ㄩ厤缃�") + @PreAuthorize("@ss.hasPermi('system:sysOssConfig:edit')") + @Log(title = "浜戝瓨鍌ㄩ厤缃�", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody SysOssConfigBo bo) { + if (StringUtils.isNotEmpty(bo.getConfigKey()) + && UserConstants.NOT_UNIQUE.equals(iSysOssConfigService.checkConfigKeyUnique(bo))) { + return AjaxResult.error("淇敼浜戦厤缃�'" + bo.getConfigKey() + "'澶辫触锛宑onfigKey宸插瓨鍦�"); + } + return toAjax(iSysOssConfigService.updateByBo(bo) ? 1 : 0); + } + + /** + * 鍒犻櫎浜戝瓨鍌ㄩ厤缃� + */ + @ApiOperation("鍒犻櫎浜戝瓨鍌ㄩ厤缃�") + @PreAuthorize("@ss.hasPermi('system:sysOssConfig:remove')") + @Log(title = "浜戝瓨鍌ㄩ厤缃�", businessType = BusinessType.DELETE) + @DeleteMapping("/{ossConfigIds}") + public AjaxResult<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Integer[] ossConfigIds) { + List<SysOssConfig> list = iSysOssConfigService.list(); + if(ObjectUtil.isNotNull(list)&&list.size()==1){ + return AjaxResult.error("蹇呴』淇濈暀涓�鏉′簯閰嶇疆鏂囦欢"); + } + return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true) ? 1 : 0); + } + + /** + * 鐘舵�佷慨鏀� + */ + @PreAuthorize("@ss.hasPermi('system:sysOssConfig:edit')") + @Log(title = "浜戝瓨鍌ㄧ姸鎬佷慨鏀�", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysOssConfig sysOssConfig) { + return toAjax(iSysOssConfigService.updateOssConfigStatus(sysOssConfig)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java new file mode 100644 index 0000000..cb21fec --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java @@ -0,0 +1,111 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; + +/** + * 浜戝瓨鍌ㄩ厤缃璞� sys_oss_config + * + * @author ruoyi + * @date 2021-08-11 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("sys_oss_config") +public class SysOssConfig implements Serializable { + + private static final long serialVersionUID=1L; + + + /** + * 涓诲缓 + */ + @TableId(value = "oss_config_id") + private Integer ossConfigId; + + /** + * 閰嶇疆key + */ + private String configKey; + + /** + * accessKey + */ + private String accessKey; + + /** + * 绉橀挜 + */ + private String secretKey; + + /** + * 妗跺悕绉� + */ + private String bucketName; + + /** + * 鍓嶇紑 + */ + private String prefix; + + /** + * 璁块棶绔欑偣 + */ + private String endpoint; + + /** + * 鏄惁htpps锛�0鍚� 1鏄級 + */ + private String isHttps; + + /** + * 鍩� + */ + private String region; + + /** + * 鐘舵��(0姝e父 1鍋滅敤) + */ + private String status; + + /** + * 鎵╁睍瀛楁 + */ + private String ext1; + + /** + * 鍒涘缓鑰� + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 鍒涘缓鏃堕棿 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 鏇存柊鑰� + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 鏇存柊鏃堕棿 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 澶囨敞 + */ + private String remark; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java new file mode 100644 index 0000000..2836f26 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java @@ -0,0 +1,126 @@ +package com.ruoyi.system.domain.bo; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 浜戝瓨鍌ㄩ厤缃笟鍔″璞� sys_oss_config + * + * @author ruoyi + * @date 2021-08-11 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("浜戝瓨鍌ㄩ厤缃笟鍔″璞�") +public class SysOssConfigBo extends BaseEntity { + + /** + * 涓诲缓 + */ + @ApiModelProperty("涓诲缓") + private Integer ossConfigId; + /** + * 閰嶇疆key + */ + @ApiModelProperty(value = "configKey", required = true) + @NotBlank(message = "configKey涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + @Size(min = 2, max = 100, message = "configKey闀垮害蹇呴』浠嬩簬2鍜�20 涔嬮棿") + private String configKey; + + /** + * accessKey + */ + @ApiModelProperty(value = "accessKey") + @NotBlank(message = "accessKey涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + @Size(min = 2, max = 100, message = "accessKey闀垮害蹇呴』浠嬩簬2鍜�100 涔嬮棿") + private String accessKey; + + /** + * 绉橀挜 + */ + @ApiModelProperty(value = "secretKey") + @NotBlank(message = "secretKey涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + @Size(min = 2, max = 100, message = "secretKey闀垮害蹇呴』浠嬩簬2鍜�100 涔嬮棿") + private String secretKey; + + /** + * 妗跺悕绉� + */ + @ApiModelProperty(value = "bucketName") + @NotBlank(message = "bucketName涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + @Size(min = 2, max = 100, message = "bucketName闀垮害蹇呴』浠嬩簬2鍜�100涔嬮棿") + private String bucketName; + + /** + * 鍓嶇紑 + */ + @ApiModelProperty(value = "鍓嶇紑") + private String prefix; + + /** + * 璁块棶绔欑偣 + */ + @ApiModelProperty(value = "endpoint") + @NotBlank(message = "endpoint涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + @Size(min = 2, max = 100, message = "endpoint闀垮害蹇呴』浠嬩簬2鍜�100涔嬮棿") + private String endpoint; + + /** + * 鏄惁htpps锛�0鍚� 1鏄級 + */ + @ApiModelProperty(value = "鏄惁htpps锛�0鍚� 1鏄級") + private String isHttps; + + /** + * 鍩� + */ + @ApiModelProperty(value = "region") + private String region; + + /** + * 鎵╁睍瀛楁 + */ + @ApiModelProperty(value = "鎵╁睍瀛楁") + private String ext1; + + + /** + * 鍒嗛〉澶у皬 + */ + @ApiModelProperty("鍒嗛〉澶у皬") + private Integer pageSize; + + /** + * 褰撳墠椤垫暟 + */ + @ApiModelProperty("褰撳墠椤垫暟") + private Integer pageNum; + + /** + * 鎺掑簭鍒� + */ + @ApiModelProperty("鎺掑簭鍒�") + private String orderByColumn; + + /** + * 鎺掑簭鐨勬柟鍚慸esc鎴栬�卆sc + */ + @ApiModelProperty(value = "鎺掑簭鐨勬柟鍚�", example = "asc,desc") + private String isAsc; + /** + * 鐘舵��(0姝e父 1鍋滅敤) + */ + @ApiModelProperty("鐘舵��(0姝e父 1鍋滅敤)") + private String status; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java new file mode 100644 index 0000000..06b00d3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java @@ -0,0 +1,94 @@ +package com.ruoyi.system.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + + + +/** + * 浜戝瓨鍌ㄩ厤缃鍥惧璞� sys_oss_config + * + * @author ruoyi + * @date 2021-08-11 + */ +@Data +@ApiModel("浜戝瓨鍌ㄩ厤缃鍥惧璞�") +@ExcelIgnoreUnannotated +public class SysOssConfigVo { + + private static final long serialVersionUID = 1L; + + /** + * 涓诲缓 + */ + @ApiModelProperty("涓诲缓") + private Integer ossConfigId; + + /** + * 閰嶇疆key + */ + @ApiModelProperty("閰嶇疆key") + private String configKey; + + /** + * accessKey + */ + @ApiModelProperty("accessKey") + private String accessKey; + + /** + * 绉橀挜 + */ + @ApiModelProperty("secretKey") + private String secretKey; + + /** + * 妗跺悕绉� + */ + @ApiModelProperty("妗跺悕绉�") + private String bucketName; + + /** + * 鍓嶇紑 + */ + @ApiModelProperty("鍓嶇紑") + private String prefix; + + /** + * 璁块棶绔欑偣 + */ + @ApiModelProperty("璁块棶绔欑偣") + private String endpoint; + + /** + * 鏄惁htpps锛�0鍚� 1鏄級 + */ + @ApiModelProperty("鏄惁htpps锛�0鍚� 1鏄級") + private String isHttps; + + /** + * 鍩� + */ + @ApiModelProperty("鍩�") + private String region; + + /** + * 鐘舵��(0姝e父 1鍋滅敤) + */ + @ApiModelProperty("鐘舵��(0姝e父 1鍋滅敤)") + private String status; + + /** + * 鎵╁睍瀛楁 + */ + @ApiModelProperty("鎵╁睍瀛楁") + private String ext1; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOssConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOssConfigMapper.java new file mode 100644 index 0000000..d55ea27 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOssConfigMapper.java @@ -0,0 +1,16 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysOssConfig; +import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; +import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache; +import org.apache.ibatis.annotations.CacheNamespace; + +/** + * 浜戝瓨鍌ㄩ厤缃甅apper鎺ュ彛 + * + * @author ruoyi + * @date 2021-08-11 + */ +public interface SysOssConfigMapper extends BaseMapperPlus<SysOssConfig> { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java new file mode 100644 index 0000000..76b3f11 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java @@ -0,0 +1,66 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.SysOssConfig; +import com.ruoyi.system.domain.vo.SysOssConfigVo; +import com.ruoyi.system.domain.bo.SysOssConfigBo; +import com.ruoyi.common.core.mybatisplus.core.IServicePlus; +import com.ruoyi.common.core.page.TableDataInfo; + +import java.util.Collection; +import java.util.List; + +/** + * 浜戝瓨鍌ㄩ厤缃甋ervice鎺ュ彛 + * + * @author ruoyi + * @date 2021-08-11 + */ +public interface ISysOssConfigService extends IServicePlus<SysOssConfig, SysOssConfigVo> { + /** + * 鏌ヨ鍗曚釜 + * @return + */ + SysOssConfigVo queryById(Integer ossConfigId); + + /** + * 鏌ヨ鍒楄〃 + */ + TableDataInfo<SysOssConfigVo> queryPageList(SysOssConfigBo bo); + + + /** + * 鏍规嵁鏂板涓氬姟瀵硅薄鎻掑叆浜戝瓨鍌ㄩ厤缃� + * @param bo 浜戝瓨鍌ㄩ厤缃柊澧炰笟鍔″璞� + * @return + */ + Boolean insertByBo(SysOssConfigBo bo); + + /** + * 鏍规嵁缂栬緫涓氬姟瀵硅薄淇敼浜戝瓨鍌ㄩ厤缃� + * @param bo 浜戝瓨鍌ㄩ厤缃紪杈戜笟鍔″璞� + * @return + */ + Boolean updateByBo(SysOssConfigBo bo); + + /** + * 鏍¢獙骞跺垹闄ゆ暟鎹� + * @param ids 涓婚敭闆嗗悎 + * @param isValid 鏄惁鏍¢獙,true-鍒犻櫎鍓嶆牎楠�,false-涓嶆牎楠� + * @return + */ + Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid); + + /** + * 鍚敤鍋滅敤鐘舵�� + * @param sysOssConfig + * @return + */ + int updateOssConfigStatus(SysOssConfig sysOssConfig); + + /** + * 鍒ゆ柇configkey鏄惁鍞竴 + * @param bo + * @return + */ + String checkConfigKeyUnique(SysOssConfigBo bo); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java new file mode 100644 index 0000000..fdce385 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java @@ -0,0 +1,145 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.CustomException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.core.page.PagePlus; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.oss.constant.CloudConstant; +import com.ruoyi.system.domain.SysConfig; +import com.ruoyi.system.mapper.SysConfigMapper; +import com.ruoyi.system.service.ISysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.system.domain.bo.SysOssConfigBo; +import com.ruoyi.system.domain.vo.SysOssConfigVo; +import com.ruoyi.system.domain.SysOssConfig; +import com.ruoyi.system.mapper.SysOssConfigMapper; +import com.ruoyi.system.service.ISysOssConfigService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 浜戝瓨鍌ㄩ厤缃甋ervice涓氬姟灞傚鐞� + * + * @author ruoyi + * @date 2021-08-11 + */ +@Service +public class SysOssConfigServiceImpl extends ServicePlusImpl<SysOssConfigMapper, SysOssConfig, SysOssConfigVo> implements ISysOssConfigService { + + @Autowired + private ISysConfigService iSysConfigService; + @Autowired + private SysConfigMapper sysConfigMapper; + @Autowired + private RedisCache redisCache; + + @Override + public SysOssConfigVo queryById(Integer ossConfigId){ + return getVoById(ossConfigId); + } + + @Override + public TableDataInfo<SysOssConfigVo> queryPageList(SysOssConfigBo bo) { + PagePlus<SysOssConfig, SysOssConfigVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo)); + return PageUtils.buildDataInfo(result); + } + + + private LambdaQueryWrapper<SysOssConfig> buildQueryWrapper(SysOssConfigBo bo) { + Map<String, Object> params = bo.getParams(); + LambdaQueryWrapper<SysOssConfig> lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getConfigKey()), SysOssConfig::getConfigKey, bo.getConfigKey()); + lqw.like(StringUtils.isNotBlank(bo.getBucketName()), SysOssConfig::getBucketName, bo.getBucketName()); + return lqw; + } + + @Override + public Boolean insertByBo(SysOssConfigBo bo) { + SysOssConfig add = BeanUtil.toBean(bo, SysOssConfig.class); + validEntityBeforeSave(add); + return save(add); + } + + @Override + public Boolean updateByBo(SysOssConfigBo bo) { + SysOssConfig update = BeanUtil.toBean(bo, SysOssConfig.class); + validEntityBeforeSave(update); + return updateById(update); + } + + /** + * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 + * + * @param entity 瀹炰綋绫绘暟鎹� + */ + private void validEntityBeforeSave(SysOssConfig entity){ + //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 + } + + @Override + public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) { + return removeByIds(ids); + } + + /** + * 鍒ゆ柇configKey鏄惁鍞竴 + * @param bo + * @return + */ + @Override + public String checkConfigKeyUnique(SysOssConfigBo bo) { + Long ossConfigId = StringUtils.isNull(bo.getOssConfigId()) ? -1L : bo.getOssConfigId(); + SysOssConfig info = getOne(new LambdaQueryWrapper<SysOssConfig>() + .select(SysOssConfig::getOssConfigId, SysOssConfig::getConfigKey) + .eq(SysOssConfig::getConfigKey, bo.getConfigKey()).last("limit 1")); + if (StringUtils.isNotNull(info) && info.getOssConfigId().longValue() != ossConfigId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鍚敤绂佺敤鐘舵�� + * @param sysOssConfig + * @return + */ + @Override + public int updateOssConfigStatus(SysOssConfig sysOssConfig) { + LambdaQueryWrapper<SysConfig> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysConfig::getConfigKey, CloudConstant.CLOUD_STORAGE_CONFIG_KEY); + SysConfig sysConfig = sysConfigMapper.selectOne(queryWrapper); + + if(ObjectUtil.isNotNull(sysConfig)){ + sysConfig.setConfigValue(sysOssConfig.getConfigKey()); + iSysConfigService.updateConfig(sysConfig); + } + return baseMapper.updateById(sysOssConfig); + } + + /** + * 璁剧疆cache key + * + * @param configKey 鍙傛暟閿� + * @return 缂撳瓨閿甼ey + */ + private String getCacheKey(String configKey) { + return Constants.SYS_CONFIG_KEY + configKey; + } + + +} diff --git a/ruoyi-system/src/main/resources/mapper/system/SysOssConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysOssConfigMapper.xml new file mode 100644 index 0000000..77dc40e --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysOssConfigMapper.xml @@ -0,0 +1,27 @@ +<?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="com.ruoyi.system.mapper.SysOssConfigMapper"> + + <resultMap type="com.ruoyi.system.domain.SysOssConfig" id="SysOssConfigResult"> + <result property="ossConfigId" column="oss_config_id"/> + <result property="configKey" column="config_key"/> + <result property="accessKey" column="access_key"/> + <result property="secretKey" column="secret_key"/> + <result property="bucketName" column="bucket_name"/> + <result property="prefix" column="prefix"/> + <result property="endpoint" column="endpoint"/> + <result property="isHttps" column="is_https"/> + <result property="region" column="region"/> + <result property="status" column="status"/> + <result property="ext1" column="ext1"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + +</mapper> diff --git a/ruoyi-ui/src/api/system/sysOssConfig.js b/ruoyi-ui/src/api/system/sysOssConfig.js new file mode 100644 index 0000000..23269b0 --- /dev/null +++ b/ruoyi-ui/src/api/system/sysOssConfig.js @@ -0,0 +1,58 @@ +import request from '@/utils/request' + +// 鏌ヨ浜戝瓨鍌ㄩ厤缃垪琛� +export function listSysOssConfig(query) { + return request({ + url: '/system/sysOssConfig/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ浜戝瓨鍌ㄩ厤缃缁� +export function getSysOssConfig(ossConfigId) { + return request({ + url: '/system/sysOssConfig/' + ossConfigId, + method: 'get' + }) +} + +// 鏂板浜戝瓨鍌ㄩ厤缃� +export function addSysOssConfig(data) { + return request({ + url: '/system/sysOssConfig', + method: 'post', + data: data + }) +} + +// 淇敼浜戝瓨鍌ㄩ厤缃� +export function updateSysOssConfig(data) { + return request({ + url: '/system/sysOssConfig', + method: 'put', + data: data + }) +} + +// 鍒犻櫎浜戝瓨鍌ㄩ厤缃� +export function delSysOssConfig(ossConfigId) { + return request({ + url: '/system/sysOssConfig/' + ossConfigId, + method: 'delete' + }) +} + +// 鐢ㄦ埛鐘舵�佷慨鏀� +export function changeOssConfigStatus(ossConfigId, status,configKey) { + const data = { + ossConfigId, + status, + configKey + } + return request({ + url: '/system/sysOssConfig/changeStatus', + method: 'put', + data: data + }) +} diff --git a/ruoyi-ui/src/views/system/ossConfig/index.vue b/ruoyi-ui/src/views/system/ossConfig/index.vue new file mode 100644 index 0000000..3d8525f --- /dev/null +++ b/ruoyi-ui/src/views/system/ossConfig/index.vue @@ -0,0 +1,495 @@ +<template> + <div class="app-container"> + <el-form + :model="queryParams" + ref="queryForm" + :inline="true" + v-show="showSearch" + label-width="100px" + > + <el-form-item label="configKey" prop="configKey"> + <el-input + v-model="queryParams.configKey" + placeholder="璇疯緭鍏onfigKey" + clearable + size="small" + @keyup.enter.native="handleQuery" + /> + </el-form-item> + <el-form-item label="bucketName" prop="bucketName"> + <el-input + v-model="queryParams.bucketName" + placeholder="璇疯緭鍏ucketName" + clearable + size="small" + @keyup.enter.native="handleQuery" + /> + </el-form-item> + <el-form-item> + <el-button + type="primary" + icon="el-icon-search" + size="mini" + @click="handleQuery" + >鎼滅储</el-button + > + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" + >閲嶇疆</el-button + > + </el-form-item> + </el-form> + + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <el-button + type="primary" + plain + icon="el-icon-plus" + size="mini" + @click="handleAdd" + v-hasPermi="['system:sysOssConfig:add']" + >鏂板</el-button + > + </el-col> + <el-col :span="1.5"> + <el-button + type="success" + plain + icon="el-icon-edit" + size="mini" + :disabled="single" + @click="handleUpdate" + v-hasPermi="['system:sysOssConfig:edit']" + >淇敼</el-button + > + </el-col> + <el-col :span="1.5"> + <el-button + type="warning" + plain + icon="el-icon-download" + size="mini" + :loading="exportLoading" + @click="handleExport" + v-hasPermi="['system:sysOssConfig:export']" + >瀵煎嚭</el-button + > + </el-col> + <right-toolbar + :showSearch.sync="showSearch" + @queryTable="getList" + ></right-toolbar> + </el-row> + + <el-table v-loading="loading" :data="sysOssConfigList"> + <el-table-column + label="涓诲缓" + align="center" + prop="ossConfigId" + v-if="false" + /> + <el-table-column label="configKey" align="center" prop="configKey" /> + <el-table-column label="accessKey" align="center" prop="accessKey" /> + <el-table-column label="seretKey" align="center" prop="secretKey" /> + <el-table-column label="bucketName" align="center" prop="bucketName" /> + <el-table-column + label="endpoint" + width="200" + align="center" + prop="endpoint" + /> + <el-table-column label="鍓嶇紑" align="center" prop="prefix" /> + <el-table-column + label="鏄惁htpps" + align="center" + prop="isHttps" + :formatter="isHttpsFormat" + /> + <el-table-column label="region" align="center" prop="region" /> + <el-table-column label="鐘舵��" align="center" prop="status"> + <template slot-scope="scope"> + <el-switch + v-model="scope.row.status" + active-value="0" + inactive-value="1" + @change="handleStatusChange(scope.row)" + ></el-switch> + </template> + </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="['system:sysOssConfig:edit']" + >淇敼</el-button + > + <el-button + size="mini" + type="text" + icon="el-icon-delete" + @click="handleDelete(scope.row)" + v-hasPermi="['system:sysOssConfig:remove']" + >鍒犻櫎</el-button + > + </template> + </el-table-column> + </el-table> + + <pagination + v-show="total > 0" + :total="total" + :page.sync="queryParams.pageNum" + :limit.sync="queryParams.pageSize" + @pagination="getList" + /> + + <!-- 娣诲姞鎴栦慨鏀逛簯瀛樺偍閰嶇疆瀵硅瘽妗� --> + <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> + <el-form ref="form" :model="form" :rules="rules" label-width="120px"> + <el-form-item label="configKey" prop="configKey"> + <el-row> + <el-col :span="12"> + <el-select v-model="form.configKey" placeholder="璇烽�夋嫨"> + <el-option + v-for="item in configKeyOptions" + :key="item.configKey" + :label="item.label" + :value="item.configKey" + > + <span style="float: left">{{ item.configKey }}</span> + <span style="float: right; color: #8492a6; font-size: 13px">{{ + item.label + }}</span> + </el-option> + </el-select> + </el-col> + <el-col :span="12"> + <el-form-item label="bucketName" prop="bucketName"> + <el-input + v-model="form.bucketName" + placeholder="璇疯緭鍏ucketName" + /> + </el-form-item> + </el-col> + </el-row> + </el-form-item> + <el-row> + <el-col :span="12"> + <el-form-item label="accessKey" prop="accessKey"> + <el-input + v-model="form.accessKey" + placeholder="璇疯緭鍏ccessKey" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="secretKey" prop="secretKey"> + <el-input + v-model="form.secretKey" + placeholder="璇疯緭鍏ecretKey" + /> + </el-form-item> + </el-col> + </el-row> + <el-form-item label="endpoint" prop="endpoint"> + <el-input v-model="form.endpoint" placeholder="璇疯緭鍏ndpoint" /> + </el-form-item> + <el-form-item label="鍓嶇紑" prop="prefix"> + <el-input v-model="form.prefix" placeholder="璇疯緭鍏ュ墠缂�" /> + </el-form-item> + <el-row> + <el-col :span="12"> + <el-form-item label="鐘舵��"> + <el-radio-group v-model="form.status"> + <el-radio label="0">鍚敤</el-radio> + <el-radio label="1">绂佺敤</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鏄惁htpps"> + <el-radio-group v-model="form.isHttps"> + <el-radio label="0">鍚�</el-radio> + <el-radio label="1">鏄�</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + <el-form-item label="region" prop="region"> + <el-input v-model="form.region" placeholder="璇疯緭鍏egion" /> + </el-form-item> + <el-form-item label="澶囨敞" prop="remark"> + <el-input + v-model="form.remark" + type="textarea" + placeholder="璇疯緭鍏ュ唴瀹�" + /> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button :loading="buttonLoading" type="primary" @click="submitForm" + >纭� 瀹�</el-button + > + <el-button @click="cancel">鍙� 娑�</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import { + listSysOssConfig, + getSysOssConfig, + delSysOssConfig, + addSysOssConfig, + updateSysOssConfig, + changeOssConfigStatus, +} from "@/api/system/sysOssConfig"; +import { downLoadExcel } from "@/utils/download"; + +export default { + name: "SysOssConfig", + data() { + return { + // 鎸夐挳loading + buttonLoading: false, + // 閬僵灞� + loading: true, + // 瀵煎嚭閬僵灞� + exportLoading: false, + // 閫変腑鏁扮粍 + ids: [], + // 闈炲崟涓鐢� + single: true, + // 闈炲涓鐢� + multiple: true, + // 鏄剧ず鎼滅储鏉′欢 + showSearch: true, + // 鎬绘潯鏁� + total: 0, + // 浜戝瓨鍌ㄩ厤缃〃鏍兼暟鎹� + sysOssConfigList: [], + //configKeyOptions + configKeyOptions: [], + configKeyDatas: [ + { configKey: "monio", label: "minio" }, + { configKey: "qcloud", label: "鑵捐浜�" }, + { configKey: "aliyun", label: "闃块噷浜�" }, + { configKey: "qiniu", label: "涓冪墰浜�" }, + ], + // 寮瑰嚭灞傛爣棰� + title: "", + // 鏄惁鏄剧ず寮瑰嚭灞� + open: false, + // 鏌ヨ鍙傛暟 + queryParams: { + pageNum: 1, + pageSize: 10, + configKey: undefined, + bucketName: undefined, + }, + // 琛ㄥ崟鍙傛暟 + form: {}, + // 琛ㄥ崟鏍¢獙 + rules: { + configKey: [ + { required: true, message: "configKey涓嶈兘涓虹┖", trigger: "blur" }, + ], + accessKey: [ + { required: true, message: "accessKey涓嶈兘涓虹┖", trigger: "blur" }, + { + min: 2, + max: 200, + message: "accessKey闀垮害蹇呴』浠嬩簬 2 鍜� 100 涔嬮棿", + trigger: "blur", + }, + ], + secretKey: [ + { required: true, message: "secretKey涓嶈兘涓虹┖", trigger: "blur" }, + { + min: 2, + max: 100, + message: "secretKey闀垮害蹇呴』浠嬩簬 2 鍜� 100 涔嬮棿", + trigger: "blur", + }, + ], + bucketName: [ + { required: true, message: "bucketName涓嶈兘涓虹┖", trigger: "blur" }, + { + min: 2, + max: 100, + message: "bucketName闀垮害蹇呴』浠嬩簬 2 鍜� 100 涔嬮棿", + trigger: "blur", + }, + ], + endpoint: [ + { required: true, message: "endpoint涓嶈兘涓虹┖", trigger: "blur" }, + { + min: 2, + max: 100, + message: "endpoint鍚嶇О闀垮害蹇呴』浠嬩簬 2 鍜� 100 涔嬮棿", + trigger: "blur", + }, + ], + }, + }; + }, + created() { + this.getList(); + this.configKeyOptions = this.configKeyDatas; + }, + methods: { + /** 鏌ヨ浜戝瓨鍌ㄩ厤缃垪琛� */ + getList() { + this.loading = true; + listSysOssConfig(this.queryParams).then((response) => { + this.sysOssConfigList = response.rows; + this.total = response.total; + this.loading = false; + }); + }, + // 鏄惁htpps瀛楀吀缈昏瘧 + isHttpsFormat(row, column) { + return row.isHttps == "0" ? "鍚�" : "鏄�"; + }, + // 鍙栨秷鎸夐挳 + cancel() { + this.open = false; + this.reset(); + }, + // 琛ㄥ崟閲嶇疆 + reset() { + this.form = { + ossConfigId: undefined, + configKey: undefined, + accessKey: undefined, + secretKey: undefined, + bucketName: undefined, + prefix: undefined, + endpoint: undefined, + isHttps: "0", + region: undefined, + status: "1", + remark: undefined, + }; + this.resetForm("form"); + }, + /** 鎼滅储鎸夐挳鎿嶄綔 */ + handleQuery() { + this.queryParams.pageNum = 1; + this.getList(); + }, + /** 閲嶇疆鎸夐挳鎿嶄綔 */ + resetQuery() { + this.resetForm("queryForm"); + this.handleQuery(); + }, + /** 鏂板鎸夐挳鎿嶄綔 */ + handleAdd() { + this.reset(); + this.open = true; + this.title = "娣诲姞浜戝瓨鍌ㄩ厤缃�"; + }, + /** 淇敼鎸夐挳鎿嶄綔 */ + handleUpdate(row) { + this.loading = true; + this.reset(); + const ossConfigId = row.ossConfigId || this.ids; + getSysOssConfig(ossConfigId).then((response) => { + this.loading = false; + this.form = response.data; + this.open = true; + this.title = "淇敼浜戝瓨鍌ㄩ厤缃�"; + }); + }, + /** 鎻愪氦鎸夐挳 */ + submitForm() { + this.$refs["form"].validate((valid) => { + if (valid) { + this.buttonLoading = true; + if (this.form.ossConfigId != null) { + updateSysOssConfig(this.form) + .then((response) => { + this.msgSuccess("淇敼鎴愬姛"); + this.open = false; + this.getList(); + }) + .finally(() => { + this.buttonLoading = false; + }); + } else { + addSysOssConfig(this.form) + .then((response) => { + this.msgSuccess("鏂板鎴愬姛"); + this.open = false; + this.getList(); + }) + .finally(() => { + this.buttonLoading = false; + }); + } + } + }); + }, + /** 鍒犻櫎鎸夐挳鎿嶄綔 */ + handleDelete(row) { + const ossConfigIds = row.ossConfigId || this.ids; + this.$confirm( + '鏄惁纭鍒犻櫎configKey涓�"' + row.configKey + '"鐨勬暟鎹」?', + "璀﹀憡", + { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + } + ) + .then(() => { + return delSysOssConfig(ossConfigIds); + }) + .then(() => { + this.loading = false; + this.getList(); + this.msgSuccess("鍒犻櫎鎴愬姛"); + }) + .catch(() => {}); + }, + /** 瀵煎嚭鎸夐挳鎿嶄綔 */ + handleExport() { + downLoadExcel("/system/sysOssConfig/export", this.queryParams); + }, + // 浜戝瓨鍌ㄩ厤缃姸鎬佷慨鏀� + handleStatusChange(row) { + let text = row.status === "0" ? "鍚敤" : "鍋滅敤"; + this.$confirm( + '纭瑕�"' + text + '""' + row.configKey + '"閰嶇疆鍚�?', + "璀﹀憡", + { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + } + ) + .then(function () { + return changeOssConfigStatus( + row.ossConfigId, + row.status, + row.configKey + ); + }) + .then(() => { + this.msgSuccess(text + "鎴愬姛"); + }) + .catch(function () { + row.status = row.status === "0" ? "1" : "0"; + }); + }, + }, +}; +</script> diff --git a/sql/sys_oss_config.sql b/sql/sys_oss_config.sql new file mode 100644 index 0000000..5d64420 --- /dev/null +++ b/sql/sys_oss_config.sql @@ -0,0 +1,45 @@ +/* +Navicat MySQL Data Transfer + +Source Server : mysql57 +Source Server Version : 50735 +Source Host : localhost:3306 +Source Database : ry-vue + +Target Server Type : MYSQL +Target Server Version : 50735 +File Encoding : 65001 + +Date: 2021-08-12 09:01:33 +*/ + +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for sys_oss_config +-- ---------------------------- +DROP TABLE IF EXISTS `sys_oss_config`; +CREATE TABLE `sys_oss_config` ( + `oss_config_id` int(5) NOT NULL AUTO_INCREMENT COMMENT '涓诲缓', + `config_key` varchar(255) NOT NULL DEFAULT '' COMMENT '閰嶇疆key', + `access_key` varchar(255) DEFAULT '' COMMENT 'access_key', + `secret_key` varchar(255) DEFAULT '' COMMENT '绉橀挜', + `bucket_name` varchar(255) DEFAULT '' COMMENT '妗跺悕绉�', + `prefix` varchar(255) DEFAULT '' COMMENT '鍓嶇紑', + `endpoint` varchar(255) DEFAULT '' COMMENT '璁块棶绔欑偣', + `is_https` char(1) DEFAULT '0' COMMENT '鏄惁htpps锛�0鍚� 1鏄級', + `region` varchar(255) DEFAULT '' COMMENT '鍩�', + `status` char(1) DEFAULT '0' COMMENT '鐘舵��(0姝e父 1鍋滅敤)', + `ext1` varchar(255) DEFAULT '' COMMENT '鎵╁睍瀛楁', + `create_by` varchar(64) DEFAULT '' COMMENT '鍒涘缓鑰�', + `create_time` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿', + `update_by` varchar(64) DEFAULT '' COMMENT '鏇存柊鑰�', + `update_time` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿', + `remark` varchar(500) DEFAULT NULL COMMENT '澶囨敞', + PRIMARY KEY (`oss_config_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='浜戝瓨鍌ㄩ厤缃〃'; + +-- ---------------------------- +-- Records of sys_oss_config +-- ---------------------------- +INSERT INTO `sys_oss_config` VALUES ('1', 'minio3', 'ruoyi', 'ruoyi123', 'ruoyi', '', 'http://localhost:9000', '0', '', '0', '', 'admin', '2021-08-11 21:29:37', 'admin', '2021-08-11 22:52:41', null); -- Gitblit v1.9.3