Prechádzať zdrojové kódy

迁移登陆日志完成
开始迁移参数配置

YunaiV 4 rokov pred
rodič
commit
35a01cbf29
38 zmenil súbory, kde vykonal 389 pridanie a 571 odobranie
  1. 13 32
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
  2. 0 61
      ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java
  3. 0 73
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
  4. 0 40
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java
  5. 0 61
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
  6. 0 54
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
  7. 0 112
      ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
  8. 0 57
      ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml
  9. 0 39
      ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml
  10. 2 2
      src/main/java/cn/iocoder/dashboard/framework/excel/core/annotations/DictFormat.java
  11. 4 4
      src/main/java/cn/iocoder/dashboard/framework/excel/core/convert/DictConvert.java
  12. 27 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/config/SysConfigController.java
  13. 42 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigBaseVO.java
  14. 22 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigCreateReqVO.java
  15. 41 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExcelVO.java
  16. 28 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigRespVO.java
  17. 20 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigUpdateReqVO.java
  18. 6 3
      src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostExcelVO.java
  19. 1 1
      src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDictDataExcelVO.java
  20. 1 1
      src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/type/SysDictTypeExcelVO.java
  21. 18 8
      src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/SysLoginLogController.java
  22. 2 5
      src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java
  23. 33 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java
  24. 2 2
      src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java
  25. 0 2
      src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java
  26. 2 2
      src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/role/SysRoleExcelVO.java
  27. 2 2
      src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserExcelVO.java
  28. 3 3
      src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserImportExcelVO.java
  29. 5 0
      src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysLoginLogConvert.java
  30. 17 0
      src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/logger/SysLoginLogMapper.java
  31. 52 0
      src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/config/SysConfigDO.java
  32. 2 2
      src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/permission/SysRoleDO.java
  33. 21 0
      src/main/java/cn/iocoder/dashboard/modules/system/enums/config/SysConfigTypeEnum.java
  34. 1 1
      src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java
  35. 1 1
      src/main/java/cn/iocoder/dashboard/modules/system/enums/permission/SysRoleTypeEnum.java
  36. 11 0
      src/main/java/cn/iocoder/dashboard/modules/system/service/logger/SysLoginLogService.java
  37. 7 0
      src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysLoginLogServiceImpl.java
  38. 3 3
      src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysRoleServiceImpl.java

+ 13 - 32
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java

@@ -1,6 +1,7 @@
 package com.ruoyi.web.controller.system;
 
 import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -26,13 +27,13 @@ import com.ruoyi.system.service.ISysConfigService;
 
 /**
  * 参数配置 信息操作处理
- * 
+ *
  * @author ruoyi
  */
 @RestController
 @RequestMapping("/system/config")
-public class SysConfigController extends BaseController
-{
+public class SysConfigController extends BaseController {
+
     @Autowired
     private ISysConfigService configService;
 
@@ -41,8 +42,7 @@ public class SysConfigController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:config:list')")
     @GetMapping("/list")
-    public TableDataInfo list(SysConfig config)
-    {
+    public TableDataInfo list(SysConfig config) {
         startPage();
         List<SysConfig> list = configService.selectConfigList(config);
         return getDataTable(list);
@@ -51,8 +51,7 @@ public class SysConfigController extends BaseController
     @Log(title = "参数管理", businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('system:config:export')")
     @GetMapping("/export")
-    public AjaxResult export(SysConfig config)
-    {
+    public AjaxResult export(SysConfig config) {
         List<SysConfig> list = configService.selectConfigList(config);
         ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
         return util.exportExcel(list, "参数数据");
@@ -63,8 +62,7 @@ public class SysConfigController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:config:query')")
     @GetMapping(value = "/{configId}")
-    public AjaxResult getInfo(@PathVariable Long configId)
-    {
+    public AjaxResult getInfo(@PathVariable Long configId) {
         return AjaxResult.success(configService.selectConfigById(configId));
     }
 
@@ -72,8 +70,7 @@ public class SysConfigController extends BaseController
      * 根据参数键名查询参数值
      */
     @GetMapping(value = "/configKey/{configKey}")
-    public AjaxResult getConfigKey(@PathVariable String configKey)
-    {
+    public AjaxResult getConfigKey(@PathVariable String configKey) {
         return AjaxResult.success(configService.selectConfigByKey(configKey));
     }
 
@@ -84,10 +81,8 @@ public class SysConfigController extends BaseController
     @Log(title = "参数管理", businessType = BusinessType.INSERT)
     @PostMapping
     @RepeatSubmit
-    public AjaxResult add(@Validated @RequestBody SysConfig config)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
-        {
+    public AjaxResult add(@Validated @RequestBody SysConfig config) {
+        if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
             return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
         }
         config.setCreateBy(SecurityUtils.getUsername());
@@ -100,10 +95,8 @@ public class SysConfigController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:config:edit')")
     @Log(title = "参数管理", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysConfig config)
-    {
-        if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
-        {
+    public AjaxResult edit(@Validated @RequestBody SysConfig config) {
+        if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
             return AjaxResult.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
         }
         config.setUpdateBy(SecurityUtils.getUsername());
@@ -116,20 +109,8 @@ public class SysConfigController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:config:remove')")
     @Log(title = "参数管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/{configIds}")
-    public AjaxResult remove(@PathVariable Long[] configIds)
-    {
+    public AjaxResult remove(@PathVariable Long[] configIds) {
         return toAjax(configService.deleteConfigByIds(configIds));
     }
 
-    /**
-     * 清空缓存
-     */
-    @PreAuthorize("@ss.hasPermi('system:config:remove')")
-    @Log(title = "参数管理", businessType = BusinessType.CLEAN)
-    @DeleteMapping("/clearCache")
-    public AjaxResult clearCache()
-    {
-        configService.clearCache();
-        return AjaxResult.success();
-    }
 }

+ 0 - 61
ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java

@@ -1,61 +0,0 @@
-package com.ruoyi.system.domain;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.common.annotation.Excel;
-import com.ruoyi.common.annotation.Excel.ColumnType;
-import com.ruoyi.common.core.domain.BaseEntity;
-
-/**
- * 参数配置表 sys_config
- *
- * @author ruoyi
- */
-public class SysConfig extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 参数主键 */
-    @Excel(name = "参数主键", cellType = ColumnType.NUMERIC)
-    private Long configId;
-
-    /** 参数名称 */
-    @Excel(name = "参数名称")
-    private String configName;
-
-    /** 参数键名 */
-    @Excel(name = "参数键名")
-    private String configKey;
-
-    /** 参数键值 */
-    @Excel(name = "参数键值")
-    private String configValue;
-
-    /** 系统内置(Y是 N否) */
-    @Excel(name = "系统内置", readConverterExp = "Y=是,N=否")
-    private String configType;
-
-    @NotBlank(message = "参数名称不能为空")
-    @Size(min = 0, max = 100, message = "参数名称不能超过100个字符")
-    public String getConfigName()
-    {
-        return configName;
-    }
-
-    @NotBlank(message = "参数键名长度不能为空")
-    @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符")
-    public String getConfigKey()
-    {
-        return configKey;
-    }
-
-    @NotBlank(message = "参数键值不能为空")
-    @Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符")
-    public String getConfigValue()
-    {
-        return configValue;
-    }
-
-}

+ 0 - 73
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java

@@ -1,73 +0,0 @@
-package com.ruoyi.system.service;
-
-import java.util.List;
-import com.ruoyi.system.domain.SysConfig;
-
-/**
- * 参数配置 服务层
- * 
- * @author ruoyi
- */
-public interface ISysConfigService
-{
-    /**
-     * 查询参数配置信息
-     * 
-     * @param configId 参数配置ID
-     * @return 参数配置信息
-     */
-    public SysConfig selectConfigById(Long configId);
-
-    /**
-     * 根据键名查询参数配置信息
-     * 
-     * @param configKey 参数键名
-     * @return 参数键值
-     */
-    public String selectConfigByKey(String configKey);
-
-    /**
-     * 查询参数配置列表
-     * 
-     * @param config 参数配置信息
-     * @return 参数配置集合
-     */
-    public List<SysConfig> selectConfigList(SysConfig config);
-
-    /**
-     * 新增参数配置
-     * 
-     * @param config 参数配置信息
-     * @return 结果
-     */
-    public int insertConfig(SysConfig config);
-
-    /**
-     * 修改参数配置
-     * 
-     * @param config 参数配置信息
-     * @return 结果
-     */
-    public int updateConfig(SysConfig config);
-
-    /**
-     * 批量删除参数信息
-     * 
-     * @param configIds 需要删除的参数ID
-     * @return 结果
-     */
-    public int deleteConfigByIds(Long[] configIds);
-
-    /**
-     * 清空缓存数据
-     */
-    public void clearCache();
-
-    /**
-     * 校验参数键名是否唯一
-     * 
-     * @param config 参数信息
-     * @return 结果
-     */
-    public String checkConfigKeyUnique(SysConfig config);
-}

+ 0 - 40
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java

@@ -1,40 +0,0 @@
-package com.ruoyi.system.service;
-
-import java.util.List;
-import com.ruoyi.system.domain.SysLogininfor;
-
-/**
- * 系统访问日志情况信息 服务层
- * 
- * @author ruoyi
- */
-public interface ISysLogininforService
-{
-    /**
-     * 新增系统登录日志
-     * 
-     * @param logininfor 访问日志对象
-     */
-    public void insertLogininfor(SysLogininfor logininfor);
-
-    /**
-     * 查询系统登录日志集合
-     * 
-     * @param logininfor 访问日志对象
-     * @return 登录记录集合
-     */
-    public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);
-
-    /**
-     * 批量删除系统登录日志
-     * 
-     * @param infoIds 需要删除的登录日志ID
-     * @return
-     */
-    public int deleteLogininforByIds(Long[] infoIds);
-
-    /**
-     * 清空系统登录日志
-     */
-    public void cleanLogininfor();
-}

+ 0 - 61
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java

@@ -1,61 +0,0 @@
-package com.ruoyi.system.service.impl;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.ruoyi.system.domain.SysLogininfor;
-import com.ruoyi.system.mapper.SysLogininforMapper;
-import com.ruoyi.system.service.ISysLogininforService;
-
-/**
- * 系统访问日志情况信息 服务层处理
- *
- * @author ruoyi
- */
-@Service
-public class SysLogininforServiceImpl implements ISysLogininforService {
-
-    @Autowired
-    private SysLogininforMapper logininforMapper;
-
-    /**
-     * 新增系统登录日志
-     *
-     * @param logininfor 访问日志对象
-     */
-    @Override
-    public void insertLogininfor(SysLogininfor logininfor) {
-        logininforMapper.insertLogininfor(logininfor);
-    }
-
-    /**
-     * 查询系统登录日志集合
-     *
-     * @param logininfor 访问日志对象
-     * @return 登录记录集合
-     */
-    @Override
-    public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor) {
-        return logininforMapper.selectLogininforList(logininfor);
-    }
-
-    /**
-     * 批量删除系统登录日志
-     *
-     * @param infoIds 需要删除的登录日志ID
-     * @return
-     */
-    @Override
-    public int deleteLogininforByIds(Long[] infoIds) {
-        return logininforMapper.deleteLogininforByIds(infoIds);
-    }
-
-    /**
-     * 清空系统登录日志
-     */
-    @Override
-    public void cleanLogininfor() {
-        logininforMapper.cleanLogininfor();
-    }
-}

+ 0 - 54
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java

@@ -1,54 +0,0 @@
-package com.ruoyi.system.service.impl;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.ruoyi.system.domain.SysOperLog;
-import com.ruoyi.system.mapper.SysOperLogMapper;
-import com.ruoyi.system.service.ISysOperLogService;
-
-/**
- * 操作日志 服务层处理
- *
- * @author ruoyi
- */
-@Service
-public class SysOperLogServiceImpl implements ISysOperLogService {
-    @Autowired
-    private SysOperLogMapper operLogMapper;
-
-    /**
-     * 新增操作日志
-     *
-     * @param operLog 操作日志对象
-     */
-    @Override
-    public void insertOperlog(SysOperLog operLog) {
-        operLogMapper.insertOperlog(operLog);
-    }
-
-    /**
-     * 查询系统操作日志集合
-     *
-     * @param operLog 操作日志对象
-     * @return 操作日志集合
-     */
-    @Override
-    public List<SysOperLog> selectOperLogList(SysOperLog operLog) {
-        return operLogMapper.selectOperLogList(operLog);
-    }
-
-
-    /**
-     * 查询操作日志详细
-     *
-     * @param operId 操作ID
-     * @return 操作日志对象
-     */
-    @Override
-    public SysOperLog selectOperLogById(Long operId) {
-        return operLogMapper.selectOperLogById(operId);
-    }
-
-}

+ 0 - 112
ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml

@@ -1,112 +0,0 @@
-<?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.SysConfigMapper">
-    
-    <resultMap type="SysConfig" id="SysConfigResult">
-    	<id     property="configId"      column="config_id"      />
-        <result property="configName"    column="config_name"    />
-        <result property="configKey"     column="config_key"     />
-        <result property="configValue"   column="config_value"   />
-        <result property="configType"    column="config_type"    />
-        <result property="createBy"      column="create_by"      />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"      column="update_by"      />
-        <result property="updateTime"    column="update_time"    />
-    </resultMap>
-    
-    <sql id="selectConfigVo">
-        select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark 
-		from sys_config
-    </sql>
-    
-    <!-- 查询条件 -->
-	<sql id="sqlwhereSearch">
-		<where>
-			<if test="configId !=null">
-				and config_id = #{configId}
-			</if>
-			<if test="configKey !=null and configKey != ''">
-				and config_key = #{configKey}
-			</if>
-		</where>
-	</sql>
-    
-    <select id="selectConfig" parameterType="SysConfig" resultMap="SysConfigResult">
-        <include refid="selectConfigVo"/>
-        <include refid="sqlwhereSearch"/>
-    </select>
-    
-    <select id="selectConfigList" parameterType="SysConfig" resultMap="SysConfigResult">
-        <include refid="selectConfigVo"/>
-        <where>
-			<if test="configName != null and configName != ''">
-				AND config_name like concat('%', #{configName}, '%')
-			</if>
-			<if test="configType != null and configType != ''">
-				AND config_type = #{configType}
-			</if>
-			<if test="configKey != null and configKey != ''">
-				AND config_key like concat('%', #{configKey}, '%')
-			</if>
-			<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-				and date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
-			</if>
-			<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-				and date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
-			</if>
-		</where>
-    </select>
-    
-    <select id="checkConfigKeyUnique" parameterType="String" resultMap="SysConfigResult">
-        <include refid="selectConfigVo"/>
-        where config_key = #{configKey} limit 1
-    </select>
-    
-    <insert id="insertConfig" parameterType="SysConfig">
-        insert into sys_config (
-			<if test="configName != null and configName != '' ">config_name,</if>
-			<if test="configKey != null and configKey != '' ">config_key,</if>
-			<if test="configValue != null and configValue != '' ">config_value,</if>
-			<if test="configType != null and configType != '' ">config_type,</if>
-			<if test="createBy != null and createBy != ''">create_by,</if>
-			<if test="remark != null and remark != ''">remark,</if>
- 			create_time
-        )values(
-			<if test="configName != null and configName != ''">#{configName},</if>
-			<if test="configKey != null and configKey != ''">#{configKey},</if>
-			<if test="configValue != null and configValue != ''">#{configValue},</if>
-			<if test="configType != null and configType != ''">#{configType},</if>
-			<if test="createBy != null and createBy != ''">#{createBy},</if>
-			<if test="remark != null and remark != ''">#{remark},</if>
- 			sysdate()
-		)
-    </insert>
-	 
-    <update id="updateConfig" parameterType="SysConfig">
-        update sys_config 
-        <set>
-            <if test="configName != null and configName != ''">config_name = #{configName},</if>
-            <if test="configKey != null and configKey != ''">config_key = #{configKey},</if>
-            <if test="configValue != null and configValue != ''">config_value = #{configValue},</if>
-            <if test="configType != null and configType != ''">config_type = #{configType},</if>
-            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="remark != null">remark = #{remark},</if>
- 			update_time = sysdate()
-        </set>
-        where config_id = #{configId}
-    </update>
-	
-    <delete id="deleteConfigById" parameterType="Long">
-        delete from sys_config where config_id = #{configId}
-    </delete>
-    
-    <delete id="deleteConfigByIds" parameterType="Long">
-        delete from sys_config where config_id in 
-        <foreach item="configId" collection="array" open="(" separator="," close=")">
-        	#{configId}
-        </foreach>
-    </delete>
-    
-</mapper>

+ 0 - 57
ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml

@@ -1,57 +0,0 @@
-<?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.SysLogininforMapper">
-
-	<resultMap type="SysLogininfor" id="SysLogininforResult">
-		<id     property="infoId"        column="info_id"           />
-		<result property="userName"      column="user_name"         />
-		<result property="status"        column="status"            />
-		<result property="ipaddr"        column="ipaddr"            />
-		<result property="loginLocation" column="login_location"    />
-		<result property="browser"       column="browser"           />
-		<result property="os"            column="os"                />
-		<result property="msg"           column="msg"               />
-		<result property="loginTime"     column="login_time"        />
-	</resultMap>
-
-	<insert id="insertLogininfor" parameterType="SysLogininfor">
-		insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time)
-		values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate())
-	</insert>
-	
-	<select id="selectLogininforList" parameterType="SysLogininfor" resultMap="SysLogininforResult">
-		select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_logininfor
-		<where>
-			<if test="ipaddr != null and ipaddr != ''">
-				AND ipaddr like concat('%', #{ipaddr}, '%')
-			</if>
-			<if test="status != null and status != ''">
-				AND status = #{status}
-			</if>
-			<if test="userName != null and userName != ''">
-				AND user_name like concat('%', #{userName}, '%')
-			</if>
-			<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-				and date_format(login_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
-			</if>
-			<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-				and date_format(login_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
-			</if>
-		</where>
-		order by info_id desc
-	</select>
-	
-	<delete id="deleteLogininforByIds" parameterType="Long">
- 		delete from sys_logininfor where info_id in
- 		<foreach collection="array" item="infoId" open="(" separator="," close=")">
- 			#{infoId}
-        </foreach> 
- 	</delete>
-    
-    <update id="cleanLogininfor">
-        truncate table sys_logininfor
-    </update>
-    
-</mapper> 

+ 0 - 39
ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml

@@ -1,39 +0,0 @@
-<?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.SysOperLogMapper">
-
-	<select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult">
-		<include refid="selectOperLogVo"/>
-		<where>
-			<if test="title != null and title != ''">
-				AND title like concat('%', #{title}, '%')
-			</if>
-			<if test="businessType != null and businessType != ''">
-				AND business_type = #{businessType}
-			</if>
-			<if test="businessTypes != null and businessTypes.length > 0">
-			    AND business_type in
-			    <foreach collection="businessTypes" item="businessType" open="(" separator="," close=")">
-		 			#{businessType}
-		        </foreach>
-			</if>
-			<if test="status != null">
-				AND status = #{status}
-			</if>
-			<if test="operName != null and operName != ''">
-				AND oper_name like concat('%', #{operName}, '%')
-			</if>
-			<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-				and date_format(oper_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
-			</if>
-			<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-				and date_format(oper_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
-			</if>
-		</where>
-		order by oper_id desc
-	</select>
-
-
-</mapper>

+ 2 - 2
src/main/java/cn/iocoder/dashboard/framework/excel/core/annotations/DictFormat.java

@@ -1,6 +1,6 @@
 package cn.iocoder.dashboard.framework.excel.core.annotations;
 
-import cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum;
+import cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum;
 
 import java.lang.annotation.*;
 
@@ -14,6 +14,6 @@ import java.lang.annotation.*;
 @Inherited
 public @interface DictFormat {
 
-    DictTypeEnum value();
+    SysDictTypeEnum value();
 
 }

+ 4 - 4
src/main/java/cn/iocoder/dashboard/framework/excel/core/convert/DictConvert.java

@@ -5,7 +5,7 @@ import cn.hutool.core.convert.Convert;
 import cn.iocoder.dashboard.framework.dict.core.util.DictUtils;
 import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat;
 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO;
-import cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum;
+import cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum;
 import com.alibaba.excel.converters.Converter;
 import com.alibaba.excel.enums.CellDataTypeEnum;
 import com.alibaba.excel.metadata.CellData;
@@ -30,7 +30,7 @@ public class DictConvert implements Converter<Object> {
     public Object convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
                                     GlobalConfiguration globalConfiguration) {
         // 使用字典解析
-        DictTypeEnum type = getType(contentProperty);
+        SysDictTypeEnum type = getType(contentProperty);
         String label = cellData.getStringValue();
         SysDictDataDO dictData = DictUtils.parseDictDataFromCache(type.getValue(), label);
         if (dictData == null) {
@@ -46,7 +46,7 @@ public class DictConvert implements Converter<Object> {
     public CellData<String> convertToExcelData(Object object, ExcelContentProperty contentProperty,
                                        GlobalConfiguration globalConfiguration) {
         // 使用字典格式化
-        DictTypeEnum type = getType(contentProperty);
+        SysDictTypeEnum type = getType(contentProperty);
         String value = String.valueOf(object);
         SysDictDataDO dictData = DictUtils.getDictDataFromCache(type.getValue(), value);
         if (dictData == null) {
@@ -57,7 +57,7 @@ public class DictConvert implements Converter<Object> {
         return new CellData<>(dictData.getLabel());
     }
 
-    private static DictTypeEnum getType(ExcelContentProperty contentProperty) {
+    private static SysDictTypeEnum getType(ExcelContentProperty contentProperty) {
         return contentProperty.getField().getAnnotation(DictFormat.class).value();
     }
 

+ 27 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/config/SysConfigController.java

@@ -0,0 +1,27 @@
+package cn.iocoder.dashboard.modules.system.controller.config;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "参数配置")
+@RestController
+@RequestMapping("/system/config")
+public class SysConfigController {
+
+//    private SpringValueRegistry
+//
+//    @Value("demo.test")
+//    private String demo;
+//
+//    @GetMapping("/demo")
+//    public String demo() {
+//        return demo;
+//    }
+//
+//    @PostMapping("/demo")
+//    public void setDemo() {
+//
+//    }
+
+}

+ 42 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigBaseVO.java

@@ -0,0 +1,42 @@
+package cn.iocoder.dashboard.modules.system.controller.config.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Size;
+
+/**
+ * 参数配置 Base VO,提供给添加、修改、详细的子 VO 使用
+ * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
+ */
+@Data
+public class SysConfigBaseVO {
+
+    @ApiModelProperty(value = "参数分组", required = true, example = "biz")
+    @NotEmpty(message = "参数分组不能为空")
+    @Size(max = 100, message = "参数名称不能超过50个字符")
+    private String group;
+
+    @ApiModelProperty(value = "参数名称", required = true, example = "数据库名")
+    @NotBlank(message = "参数名称不能为空")
+    @Size(max = 100, message = "参数名称不能超过100个字符")
+    private String name;
+
+    @ApiModelProperty(value = "参数键值", required = true, example = "1024")
+    @NotBlank(message = "参数键值不能为空")
+    @Size(max = 500, message = "参数键值长度不能超过500个字符")
+    private String value;
+
+    @ApiModelProperty(value = "参数类型", required = true, example = "1", notes = "参见 SysConfigTypeEnum 枚举")
+    private String type;
+
+    @ApiModelProperty(value = "是否敏感", required = true, example = "true")
+    @NotBlank(message = "是否敏感不能为空")
+    private Boolean sensitive;
+
+    @ApiModelProperty(value = "备注", example = "备注一下很帅气!")
+    private String remark;
+
+}

+ 22 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigCreateReqVO.java

@@ -0,0 +1,22 @@
+package cn.iocoder.dashboard.modules.system.controller.config.vo;
+
+import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptBaseVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+@ApiModel("参数配置创建 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SysConfigCreateReqVO extends SysDeptBaseVO {
+
+    @ApiModelProperty(value = "参数键名", required = true, example = "yunai.db.username")
+    @NotBlank(message = "参数键名长度不能为空")
+    @Size(max = 100, message = "参数键名长度不能超过100个字符")
+    private String key;
+
+}

+ 41 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExcelVO.java

@@ -0,0 +1,41 @@
+package cn.iocoder.dashboard.modules.system.controller.config.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 参数配置 Excel 导出响应 VO
+ */
+@Data
+public class SysConfigExcelVO {
+
+    @ExcelProperty("参数配置序号")
+    private Long id;
+
+    @ExcelProperty("参数键名")
+    private String key;
+
+    @ExcelProperty("参数分组")
+    private String group;
+
+    @ExcelProperty("参数名称")
+    private String name;
+
+    @ExcelProperty("参数键值")
+    private String value;
+
+    @ExcelProperty("参数类型")
+    private String type;
+
+    @ExcelProperty("是否敏感")
+    private Boolean sensitive;
+
+    @ExcelProperty("备注")
+    private String remark;
+
+    @ExcelProperty("创建时间")
+    private Date createTime;
+
+}

+ 28 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigRespVO.java

@@ -0,0 +1,28 @@
+package cn.iocoder.dashboard.modules.system.controller.config.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.Date;
+
+@ApiModel("参数配置信息 Response VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SysConfigRespVO extends SysConfigBaseVO {
+
+    @ApiModelProperty(value = "参数配置序号", required = true, example = "1024")
+    private Long id;
+
+    @ApiModelProperty(value = "参数键名", required = true, example = "yunai.db.username")
+    @NotBlank(message = "参数键名长度不能为空")
+    @Size(max = 100, message = "参数键名长度不能超过100个字符")
+    private String key;
+
+    @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
+    private Date createTime;
+
+}

+ 20 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigUpdateReqVO.java

@@ -0,0 +1,20 @@
+package cn.iocoder.dashboard.modules.system.controller.config.vo;
+
+import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptBaseVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+
+@ApiModel("参数配置创建 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SysConfigUpdateReqVO extends SysDeptBaseVO {
+
+    @ApiModelProperty(value = "参数配置序号", required = true, example = "1024")
+    @NotNull(message = "参数配置编号不能为空")
+    private Long id;
+
+}

+ 6 - 3
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostExcelVO.java

@@ -1,8 +1,12 @@
 package cn.iocoder.dashboard.modules.system.controller.dept.vo.post;
 
+import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 
+import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.SYS_COMMON_STATUS;
+
 /**
  * 岗位 Excel 导出响应 VO
  */
@@ -21,9 +25,8 @@ public class SysPostExcelVO {
     @ExcelProperty("岗位排序")
     private String sort;
 
-//    @ExcelProperty(value = "状态", converter = DictConvert.class)
-//    @DictFormat(SYS_COMMON_STATUS)
-    @ExcelProperty(value = "状态")
+    @ExcelProperty(value = "状态", converter = DictConvert.class)
+    @DictFormat(SYS_COMMON_STATUS)
     private String status;
 
 }

+ 1 - 1
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDictDataExcelVO.java

@@ -5,7 +5,7 @@ import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 
-import static cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum.SYS_COMMON_STATUS;
+import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.SYS_COMMON_STATUS;
 
 /**
  * 字典数据 Excel 导出响应 VO

+ 1 - 1
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/type/SysDictTypeExcelVO.java

@@ -5,7 +5,7 @@ import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 
-import static cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum.SYS_COMMON_STATUS;
+import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.SYS_COMMON_STATUS;
 
 /**
  * 字典类型 Excel 导出响应 VO

+ 18 - 8
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/SysLoginLogController.java

@@ -2,6 +2,9 @@ package cn.iocoder.dashboard.modules.system.controller.logger;
 
 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.modules.system.controller.logger.vo.loginlog.SysLoginLogExcelVO;
+import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogRespVO;
 import cn.iocoder.dashboard.modules.system.convert.logger.SysLoginLogConvert;
@@ -15,6 +18,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
 
 @Api(tags = "登陆日志 API")
 @RestController
@@ -32,13 +38,17 @@ public class SysLoginLogController {
         return CommonResult.success(SysLoginLogConvert.INSTANCE.convertPage(page));
     }
 
-//    @GetMapping("/export")
-////    @Log(title = "登录日志", businessType = BusinessType.EXPORT)
-////    @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
-//    public void exportLoginLog(SysLogininfor logininfor) {
-//        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
-//        ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
-//        return util.exportExcel(list, "登录日志");
-//    }
+    @ApiOperation("导出登陆日志 Excel")
+    @GetMapping("/export")
+//    @Log(title = "登录日志", businessType = BusinessType.EXPORT)
+//    @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
+    public void exportLoginLog(HttpServletResponse response, @Validated SysLoginLogExportReqVO reqVO) throws IOException {
+        List<SysLoginLogDO> list = loginLogService.getLoginLogList(reqVO);
+        // 拼接数据
+        List<SysLoginLogExcelVO> excelDataList = SysLoginLogConvert.INSTANCE.convertList(list);
+        // 输出
+        ExcelUtils.write(response, "登陆日志.xls", "数据列表",
+                SysLoginLogExcelVO.class, excelDataList);
+    }
 
 }

+ 2 - 5
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java

@@ -2,7 +2,7 @@ package cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog;
 
 import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat;
 import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert;
-import cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum;
+import cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 
@@ -17,14 +17,11 @@ public class SysLoginLogExcelVO {
     @ExcelProperty("日志主键")
     private Long id;
 
-    @ExcelProperty("用户编号")
-    private Long userId;
-
     @ExcelProperty("用户账号")
     private String username;
 
     @ExcelProperty(value = "登陆结果", converter = DictConvert.class)
-    @DictFormat(DictTypeEnum.SYS_LOGIN_RESULT)
+    @DictFormat(SysDictTypeEnum.SYS_LOGIN_RESULT)
     private Integer result;
 
     @ExcelProperty("登陆 IP")

+ 33 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java

@@ -0,0 +1,33 @@
+package cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@ApiModel("登陆日志分页列表 Request VO")
+@Data
+public class SysLoginLogExportReqVO {
+
+    @ApiModelProperty(value = "用户 IP", example = "127.0.0.1", notes = "模拟匹配")
+    private String userIp;
+
+    @ApiModelProperty(value = "用户账号", example = "芋道", notes = "模拟匹配")
+    private String username;
+
+    @ApiModelProperty(value = "操作状态", example = "true")
+    private Boolean status;
+
+    @ApiModelProperty(value = "开始时间", example = "2020-10-24")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private Date beginTime;
+
+    @ApiModelProperty(value = "结束时间", example = "2020-10-24")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private Date endTime;
+
+}

+ 2 - 2
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java

@@ -2,7 +2,7 @@ package cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog;
 
 import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat;
 import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert;
-import cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum;
+import cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 
@@ -24,7 +24,7 @@ public class SysOperateLogExcelVO {
     private String name;
 
     @ExcelProperty(value = "操作类型", converter = DictConvert.class)
-    @DictFormat(DictTypeEnum.SYS_OPERATE_TYPE)
+    @DictFormat(SysDictTypeEnum.SYS_OPERATE_TYPE)
     private String type;
 
     @ExcelProperty("操作人")

+ 0 - 2
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java

@@ -4,7 +4,6 @@ import cn.iocoder.dashboard.common.pojo.PageParam;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
@@ -13,7 +12,6 @@ import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOU
 
 @ApiModel("操作日志分页列表 Request VO")
 @Data
-@EqualsAndHashCode(callSuper = true)
 public class SysOperateLogPageReqVO extends PageParam {
 
     @ApiModelProperty(value = "操作模块", example = "订单", notes = "模拟匹配")

+ 2 - 2
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/role/SysRoleExcelVO.java

@@ -2,7 +2,7 @@ package cn.iocoder.dashboard.modules.system.controller.permission.vo.role;
 
 import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat;
 import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert;
-import cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum;
+import cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 
@@ -28,7 +28,7 @@ public class SysRoleExcelVO {
     private Integer dataScope;
 
     @ExcelProperty(value = "角色状态", converter = DictConvert.class)
-    @DictFormat(DictTypeEnum.SYS_COMMON_STATUS)
+    @DictFormat(SysDictTypeEnum.SYS_COMMON_STATUS)
     private String status;
 
 }

+ 2 - 2
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserExcelVO.java

@@ -7,8 +7,8 @@ import lombok.Data;
 
 import java.util.Date;
 
-import static cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum.SYS_COMMON_STATUS;
-import static cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum.SYS_USER_SEX;
+import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.SYS_COMMON_STATUS;
+import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.SYS_USER_SEX;
 
 /**
  * 用户 Excel 导出 VO

+ 3 - 3
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserImportExcelVO.java

@@ -2,7 +2,7 @@ package cn.iocoder.dashboard.modules.system.controller.user.vo.user;
 
 import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat;
 import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert;
-import cn.iocoder.dashboard.modules.system.enums.dict.DictTypeEnum;
+import cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -34,11 +34,11 @@ public class SysUserImportExcelVO {
     private String mobile;
 
     @ExcelProperty(value = "用户性别", converter = DictConvert.class)
-    @DictFormat(DictTypeEnum.SYS_USER_SEX)
+    @DictFormat(SysDictTypeEnum.SYS_USER_SEX)
     private Integer sex;
 
     @ExcelProperty(value = "账号状态", converter = DictConvert.class)
-    @DictFormat(DictTypeEnum.SYS_COMMON_STATUS)
+    @DictFormat(SysDictTypeEnum.SYS_COMMON_STATUS)
     private Integer status;
 
 }

+ 5 - 0
src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysLoginLogConvert.java

@@ -2,11 +2,14 @@ package cn.iocoder.dashboard.modules.system.convert.logger;
 
 import cn.iocoder.dashboard.common.pojo.PageResult;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogCreateReqVO;
+import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogExcelVO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogRespVO;
 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.logger.SysLoginLogDO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
+import java.util.List;
+
 @Mapper
 public interface SysLoginLogConvert {
 
@@ -16,4 +19,6 @@ public interface SysLoginLogConvert {
 
     PageResult<SysLoginLogRespVO> convertPage(PageResult<SysLoginLogDO> page);
 
+    List<SysLoginLogExcelVO> convertList(List<SysLoginLogDO> list);
+
 }

+ 17 - 0
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/logger/SysLoginLogMapper.java

@@ -3,11 +3,14 @@ package cn.iocoder.dashboard.modules.system.dal.mysql.dao.logger;
 import cn.iocoder.dashboard.common.pojo.PageResult;
 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX;
+import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO;
 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.logger.SysLoginLogDO;
 import cn.iocoder.dashboard.modules.system.enums.logger.SysLoginResultEnum;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 @Mapper
 public interface SysLoginLogMapper extends BaseMapperX<SysLoginLogDO> {
 
@@ -25,4 +28,18 @@ public interface SysLoginLogMapper extends BaseMapperX<SysLoginLogDO> {
         return selectPage(reqVO, query);
     }
 
+    default List<SysLoginLogDO> selectList(SysLoginLogExportReqVO reqVO) {
+        QueryWrapperX<SysLoginLogDO> query = new QueryWrapperX<SysLoginLogDO>()
+                .likeIfPresent("user_ip", reqVO.getUserIp())
+                .likeIfPresent("username", reqVO.getUsername())
+                .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime());
+        if (Boolean.TRUE.equals(reqVO.getStatus())) {
+            query.eq("result", SysLoginResultEnum.SUCCESS.getResult());
+        } else if (Boolean.FALSE.equals(reqVO.getStatus())) {
+            query.gt("result", SysLoginResultEnum.SUCCESS.getResult());
+        }
+        query.orderByDesc("id"); // 降序
+        return selectList(query);
+    }
+
 }

+ 52 - 0
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/config/SysConfigDO.java

@@ -0,0 +1,52 @@
+package cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.config;
+
+import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.dashboard.modules.system.enums.config.SysConfigTypeEnum;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+ * 参数配置表
+ *
+ * @author ruoyi
+ */
+@TableName("sys_config")
+public class SysConfigDO extends BaseDO {
+
+    /**
+     * 参数主键
+     */
+    private Long id;
+    /**
+     * 参数分组
+     */
+    private String group;
+    /**
+     * 参数名称
+     */
+    private String name;
+    /**
+     * 参数键名
+     */
+    private String key;
+    /**
+     * 参数键值
+     */
+    private String value;
+    /**
+     * 参数类型
+     *
+     * 枚举 {@link SysConfigTypeEnum}
+     */
+    private String type;
+    /**
+     * 是否敏感
+     *
+     * 对于敏感配置,需要管理权限才能查看
+     */
+    private Boolean sensitive;
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 2 - 2
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/permission/SysRoleDO.java

@@ -4,7 +4,7 @@ import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
 import cn.iocoder.dashboard.framework.security.core.enums.DataScopeEnum;
 import cn.iocoder.dashboard.modules.system.enums.permission.RoleCodeEnum;
-import cn.iocoder.dashboard.modules.system.enums.permission.RoleTypeEnum;
+import cn.iocoder.dashboard.modules.system.enums.permission.SysRoleTypeEnum;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -52,7 +52,7 @@ public class SysRoleDO extends BaseDO {
     /**
      * 角色类型
      *
-     * 枚举 {@link RoleTypeEnum}
+     * 枚举 {@link SysRoleTypeEnum}
      */
     private Integer type;
     /**

+ 21 - 0
src/main/java/cn/iocoder/dashboard/modules/system/enums/config/SysConfigTypeEnum.java

@@ -0,0 +1,21 @@
+package cn.iocoder.dashboard.modules.system.enums.config;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum SysConfigTypeEnum {
+
+    /**
+     * 系统配置
+     */
+    SYSTEM(1),
+    /**
+     * 自定义配置
+     */
+    CUSTOM(2);
+
+    private final Integer type;
+
+}

+ 1 - 1
src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/DictTypeEnum.java → src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java

@@ -8,7 +8,7 @@ import lombok.Getter;
  */
 @Getter
 @AllArgsConstructor
-public enum DictTypeEnum {
+public enum SysDictTypeEnum {
 
     SYS_USER_SEX("sys_user_sex"), // 用户性别
     SYS_COMMON_STATUS("sys_common_status"), // 系统状态

+ 1 - 1
src/main/java/cn/iocoder/dashboard/modules/system/enums/permission/RoleTypeEnum.java → src/main/java/cn/iocoder/dashboard/modules/system/enums/permission/SysRoleTypeEnum.java

@@ -5,7 +5,7 @@ import lombok.Getter;
 
 @Getter
 @AllArgsConstructor
-public enum RoleTypeEnum {
+public enum SysRoleTypeEnum {
 
     /**
      * 内置角色

+ 11 - 0
src/main/java/cn/iocoder/dashboard/modules/system/service/logger/SysLoginLogService.java

@@ -2,9 +2,12 @@ package cn.iocoder.dashboard.modules.system.service.logger;
 
 import cn.iocoder.dashboard.common.pojo.PageResult;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogCreateReqVO;
+import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO;
 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.logger.SysLoginLogDO;
 
+import java.util.List;
+
 /**
  * 登陆日志 Service 接口
  */
@@ -25,4 +28,12 @@ public interface SysLoginLogService {
      */
     PageResult<SysLoginLogDO> getLoginLogPage(SysLoginLogPageReqVO reqVO);
 
+    /**
+     * 获得登陆日志列表
+     *
+     * @param reqVO 列表条件
+     * @return 登陆日志列表
+     */
+    List<SysLoginLogDO> getLoginLogList(SysLoginLogExportReqVO reqVO);
+
 }

+ 7 - 0
src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysLoginLogServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.dashboard.common.pojo.PageResult;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogCreateReqVO;
+import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO;
 import cn.iocoder.dashboard.modules.system.convert.logger.SysLoginLogConvert;
 import cn.iocoder.dashboard.modules.system.dal.mysql.dao.logger.SysLoginLogMapper;
@@ -15,6 +16,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.Collection;
+import java.util.List;
 
 import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertSet;
 
@@ -41,4 +43,9 @@ public class SysLoginLogServiceImpl implements SysLoginLogService {
         return loginLogMapper.selectPage(reqVO);
     }
 
+    @Override
+    public List<SysLoginLogDO> getLoginLogList(SysLoginLogExportReqVO reqVO) {
+        return loginLogMapper.selectList(reqVO);
+    }
+
 }

+ 3 - 3
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysRoleServiceImpl.java

@@ -12,7 +12,7 @@ import cn.iocoder.dashboard.modules.system.convert.permission.SysRoleConvert;
 import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysRoleMapper;
 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO;
 import cn.iocoder.dashboard.modules.system.enums.permission.RoleCodeEnum;
-import cn.iocoder.dashboard.modules.system.enums.permission.RoleTypeEnum;
+import cn.iocoder.dashboard.modules.system.enums.permission.SysRoleTypeEnum;
 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService;
 import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -101,7 +101,7 @@ public class SysRoleServiceImpl implements SysRoleService {
         checkDuplicateRole(reqVO.getName(), reqVO.getCode(), null);
         // 插入到数据库
         SysRoleDO role = SysRoleConvert.INSTANCE.convert(reqVO);
-        role.setType(RoleTypeEnum.CUSTOM.getType());
+        role.setType(SysRoleTypeEnum.CUSTOM.getType());
         role.setStatus(CommonStatusEnum.ENABLE.getStatus());
         roleMapper.insert(role);
         // 返回
@@ -207,7 +207,7 @@ public class SysRoleServiceImpl implements SysRoleService {
             throw ServiceExceptionUtil.exception(ROLE_NOT_EXISTS);
         }
         // 内置角色,不允许删除
-        if (RoleTypeEnum.SYSTEM.getType().equals(roleDO.getType())) {
+        if (SysRoleTypeEnum.SYSTEM.getType().equals(roleDO.getType())) {
             throw ServiceExceptionUtil.exception(ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE);
         }
     }