Commit 4e5430b5c093e1ec6a8168562b46e2d87844e297

Authored by 芋道源码
Committed by Gitee
2 parents 28d9ecee c197417d

!3 system logger junit

Merge pull request !3 from kevinwang0224/unit_logger_system
src/main/java/cn/iocoder/dashboard/framework/logger/operatelog/core/service/OperateLogFrameworkService.java
... ... @@ -2,13 +2,16 @@ package cn.iocoder.dashboard.framework.logger.operatelog.core.service;
2 2  
3 3 import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO;
4 4  
  5 +import java.util.concurrent.Future;
  6 +
5 7 public interface OperateLogFrameworkService {
6 8  
7 9 /**
8   - * 要不记录操作日志
  10 + * 异步记录操作日志
9 11 *
10 12 * @param reqVO 操作日志请求
  13 + * @return true: 记录成功,false: 记录失败
11 14 */
12   - void createOperateLogAsync(SysOperateLogCreateReqVO reqVO);
  15 + Future<Boolean> createOperateLogAsync(SysOperateLogCreateReqVO reqVO);
13 16  
14 17 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysOperateLogServiceImpl.java
... ... @@ -7,20 +7,22 @@ import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOp
7 7 import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO;
8 8 import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO;
9 9 import cn.iocoder.dashboard.modules.system.convert.logger.SysOperateLogConvert;
10   -import cn.iocoder.dashboard.modules.system.dal.mysql.logger.SysOperateLogMapper;
11 10 import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysOperateLogDO;
12 11 import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
  12 +import cn.iocoder.dashboard.modules.system.dal.mysql.logger.SysOperateLogMapper;
13 13 import cn.iocoder.dashboard.modules.system.service.logger.SysOperateLogService;
14 14 import cn.iocoder.dashboard.modules.system.service.user.SysUserService;
15 15 import cn.iocoder.dashboard.util.string.StrUtils;
16 16 import lombok.extern.slf4j.Slf4j;
17 17 import org.springframework.scheduling.annotation.Async;
  18 +import org.springframework.scheduling.annotation.AsyncResult;
18 19 import org.springframework.stereotype.Service;
19 20  
20 21 import javax.annotation.Resource;
21 22 import java.util.Collection;
22 23 import java.util.Collections;
23 24 import java.util.List;
  25 +import java.util.concurrent.Future;
24 26  
25 27 import static cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysOperateLogDO.JAVA_METHOD_ARGS_MAX_LENGTH;
26 28 import static cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysOperateLogDO.RESULT_MAX_LENGTH;
... ... @@ -38,16 +40,18 @@ public class SysOperateLogServiceImpl implements SysOperateLogService {
38 40  
39 41 @Override
40 42 @Async
41   - public void createOperateLogAsync(SysOperateLogCreateReqVO reqVO) {
  43 + public Future<Boolean> createOperateLogAsync(SysOperateLogCreateReqVO reqVO) {
  44 + boolean success = false;
42 45 try {
43 46 SysOperateLogDO logDO = SysOperateLogConvert.INSTANCE.convert(reqVO);
44 47 logDO.setJavaMethodArgs(StrUtils.maxLength(logDO.getJavaMethodArgs(), JAVA_METHOD_ARGS_MAX_LENGTH));
45 48 logDO.setResultData(StrUtils.maxLength(logDO.getResultData(), RESULT_MAX_LENGTH));
46   - operateLogMapper.insert(logDO);
  49 + success = operateLogMapper.insert(logDO) == 1;
47 50 } catch (Throwable throwable) {
48 51 // 仅仅打印日志,不对外抛出。原因是,还是要保留现场数据。
49 52 log.error("[createOperateLogAsync][记录操作日志异常,日志为 ({})]", reqVO, throwable);
50 53 }
  54 + return new AsyncResult<>(success);
51 55 }
52 56  
53 57 @Override
... ...
src/test/java/cn/iocoder/dashboard/modules/system/service/logger/SysLoginLogServiceImplTest.java 0 → 100644
  1 +package cn.iocoder.dashboard.modules.system.service.logger;
  2 +
  3 +import cn.hutool.core.util.ArrayUtil;
  4 +import cn.hutool.core.util.RandomUtil;
  5 +import cn.hutool.core.util.ReflectUtil;
  6 +import cn.iocoder.dashboard.BaseDbUnitTest;
  7 +import cn.iocoder.dashboard.common.pojo.PageResult;
  8 +import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
  9 +import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils;
  10 +import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogCreateReqVO;
  11 +import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO;
  12 +import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO;
  13 +import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysLoginLogDO;
  14 +import cn.iocoder.dashboard.modules.system.dal.mysql.logger.SysLoginLogMapper;
  15 +import cn.iocoder.dashboard.modules.system.enums.logger.SysLoginLogTypeEnum;
  16 +import cn.iocoder.dashboard.modules.system.enums.logger.SysLoginResultEnum;
  17 +import cn.iocoder.dashboard.modules.system.service.logger.impl.SysLoginLogServiceImpl;
  18 +import cn.iocoder.dashboard.util.RandomUtils;
  19 +import cn.iocoder.dashboard.util.object.ObjectUtils;
  20 +import org.junit.jupiter.api.Test;
  21 +import org.springframework.context.annotation.Import;
  22 +
  23 +import javax.annotation.Resource;
  24 +import java.lang.reflect.Field;
  25 +import java.util.Arrays;
  26 +import java.util.List;
  27 +import java.util.stream.Collectors;
  28 +
  29 +import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
  30 +import static cn.iocoder.dashboard.util.date.DateUtils.buildTime;
  31 +import static org.junit.jupiter.api.Assertions.assertEquals;
  32 +
  33 +@Import(SysLoginLogServiceImpl.class)
  34 +public class SysLoginLogServiceImplTest extends BaseDbUnitTest {
  35 +
  36 + @Resource
  37 + private SysLoginLogServiceImpl sysLoginLogService;
  38 +
  39 + @Resource
  40 + private SysLoginLogMapper loginLogMapper;
  41 +
  42 + @Test
  43 + public void testCreateLoginLog() {
  44 + String traceId = TracerUtils.getTraceId();
  45 + SysLoginLogCreateReqVO reqVO = RandomUtils.randomPojo(SysLoginLogCreateReqVO.class, vo -> {
  46 + // 指定随机的范围,避免超出范围入库失败
  47 + vo.setLogType(RandomUtil.randomEle(SysLoginLogTypeEnum.values()).getType());
  48 + vo.setResult(RandomUtil.randomEle(SysLoginResultEnum.values()).getResult());
  49 + // 使用TracerUtils生成的TraceId
  50 + vo.setTraceId(traceId);
  51 + });
  52 +
  53 + // 执行service方法
  54 + sysLoginLogService.createLoginLog(reqVO);
  55 +
  56 + // 断言,忽略基本字段
  57 + SysLoginLogDO sysLoginLogDO = loginLogMapper.selectOne(null);
  58 + assertPojoEquals(reqVO, sysLoginLogDO);
  59 + }
  60 +
  61 +
  62 + @Test
  63 + public void testGetLoginLogPage() {
  64 +
  65 + // 构造测试数据
  66 +
  67 + // 登录成功的
  68 + SysLoginLogDO loginLogDO = RandomUtils.randomPojo(SysLoginLogDO.class, logDO -> {
  69 + logDO.setLogType(RandomUtil.randomEle(SysLoginLogTypeEnum.values()).getType());
  70 + logDO.setTraceId(TracerUtils.getTraceId());
  71 +
  72 + logDO.setUserIp("192.168.199.16");
  73 + logDO.setUsername("wangkai");
  74 + logDO.setCreateTime(buildTime(2021, 3, 6));
  75 + logDO.setResult(SysLoginResultEnum.SUCCESS.getResult());
  76 + });
  77 + loginLogMapper.insert(loginLogDO);
  78 +
  79 + // 下面几个都是不匹配的数据
  80 + // 登录失败的
  81 + loginLogMapper.insert(ObjectUtils.clone(loginLogDO, logDO -> logDO.setResult(SysLoginResultEnum.CAPTCHA_CODE_ERROR.getResult())));
  82 + // 不同ip段的
  83 + loginLogMapper.insert(ObjectUtils.clone(loginLogDO, logDO -> logDO.setUserIp("192.168.128.18")));
  84 + // 不同username
  85 + loginLogMapper.insert(ObjectUtils.clone(loginLogDO, logDO -> logDO.setUsername("yunai")));
  86 + // 构造一个早期时间 2021-02-06 00:00:00
  87 + loginLogMapper.insert(ObjectUtils.clone(loginLogDO, logDO -> logDO.setCreateTime(buildTime(2021, 2, 6))));
  88 +
  89 +
  90 + // 构造调用参数
  91 + SysLoginLogPageReqVO reqVO = new SysLoginLogPageReqVO();
  92 + reqVO.setUsername("wangkai");
  93 + reqVO.setUserIp("192.168.199");
  94 + reqVO.setStatus(true);
  95 + reqVO.setBeginTime(buildTime(2021, 3, 5));
  96 + reqVO.setEndTime(buildTime(2021, 3, 7));
  97 +
  98 + // 调用service方法
  99 + PageResult<SysLoginLogDO> pageResult = sysLoginLogService.getLoginLogPage(reqVO);
  100 +
  101 + // 断言,只查到了一条符合条件的
  102 + assertEquals(1, pageResult.getTotal());
  103 + assertEquals(1, pageResult.getList().size());
  104 + assertPojoEquals(loginLogDO, pageResult.getList().get(0));
  105 + }
  106 +
  107 + @Test
  108 + public void testGetLoginLogList() {
  109 +
  110 + // 构造测试数据
  111 +
  112 + // 登录成功的
  113 + SysLoginLogDO loginLogDO = RandomUtils.randomPojo(SysLoginLogDO.class, logDO -> {
  114 + logDO.setLogType(RandomUtil.randomEle(SysLoginLogTypeEnum.values()).getType());
  115 + logDO.setTraceId(TracerUtils.getTraceId());
  116 +
  117 + logDO.setUserIp("192.168.111.16");
  118 + logDO.setUsername("wangxiaokai");
  119 + logDO.setCreateTime(buildTime(2021, 3, 6));
  120 + logDO.setResult(SysLoginResultEnum.SUCCESS.getResult());
  121 + });
  122 + loginLogMapper.insert(loginLogDO);
  123 +
  124 + // 下面几个都是不匹配的数据
  125 + // 登录失败的
  126 + loginLogMapper.insert(ObjectUtils.clone(loginLogDO, logDO -> logDO.setResult(SysLoginResultEnum.CAPTCHA_CODE_ERROR.getResult())));
  127 + // 不同ip段的
  128 + loginLogMapper.insert(ObjectUtils.clone(loginLogDO, logDO -> logDO.setUserIp("192.168.128.18")));
  129 + // 不同username
  130 + loginLogMapper.insert(ObjectUtils.clone(loginLogDO, logDO -> logDO.setUsername("yunai")));
  131 + // 构造一个早期时间 2021-02-06 00:00:00
  132 + loginLogMapper.insert(ObjectUtils.clone(loginLogDO, logDO -> logDO.setCreateTime(buildTime(2021, 2, 6))));
  133 +
  134 +
  135 + // 构造调用参数
  136 + SysLoginLogExportReqVO reqVO = new SysLoginLogExportReqVO();
  137 + reqVO.setUsername("wangxiaokai");
  138 + reqVO.setUserIp("192.168.111");
  139 + reqVO.setStatus(true);
  140 + reqVO.setBeginTime(buildTime(2021, 3, 5));
  141 + reqVO.setEndTime(buildTime(2021, 3, 7));
  142 +
  143 +
  144 + // 调用service方法
  145 + List<SysLoginLogDO> loginLogList = sysLoginLogService.getLoginLogList(reqVO);
  146 +
  147 + // 断言
  148 + assertEquals(1, loginLogList.size());
  149 + assertPojoEquals(loginLogDO, loginLogList.get(0));
  150 + }
  151 +}
... ...
src/test/java/cn/iocoder/dashboard/modules/system/service/logger/SysOperateLogServiceImplTest.java 0 → 100644
  1 +package cn.iocoder.dashboard.modules.system.service.logger;
  2 +
  3 +import cn.hutool.core.map.MapUtil;
  4 +import cn.hutool.core.util.ArrayUtil;
  5 +import cn.hutool.core.util.RandomUtil;
  6 +import cn.hutool.core.util.ReflectUtil;
  7 +import cn.iocoder.dashboard.BaseDbUnitTest;
  8 +import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
  9 +import cn.iocoder.dashboard.common.exception.enums.GlobalErrorCodeConstants;
  10 +import cn.iocoder.dashboard.common.pojo.PageResult;
  11 +import cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum;
  12 +import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
  13 +import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils;
  14 +import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO;
  15 +import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO;
  16 +import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO;
  17 +import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysOperateLogDO;
  18 +import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
  19 +import cn.iocoder.dashboard.modules.system.dal.mysql.logger.SysOperateLogMapper;
  20 +import cn.iocoder.dashboard.modules.system.dal.mysql.user.SysUserMapper;
  21 +import cn.iocoder.dashboard.modules.system.enums.common.SysSexEnum;
  22 +import cn.iocoder.dashboard.modules.system.service.logger.impl.SysOperateLogServiceImpl;
  23 +import cn.iocoder.dashboard.modules.system.service.user.SysUserService;
  24 +import cn.iocoder.dashboard.util.RandomUtils;
  25 +import cn.iocoder.dashboard.util.object.ObjectUtils;
  26 +import org.junit.jupiter.api.Test;
  27 +import org.springframework.boot.test.mock.mockito.MockBean;
  28 +import org.springframework.context.annotation.Import;
  29 +
  30 +import javax.annotation.Resource;
  31 +import java.lang.reflect.Field;
  32 +import java.util.Arrays;
  33 +import java.util.HashMap;
  34 +import java.util.List;
  35 +import java.util.Map;
  36 +import java.util.concurrent.ExecutionException;
  37 +import java.util.concurrent.Future;
  38 +import java.util.stream.Collectors;
  39 +
  40 +import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
  41 +import static cn.iocoder.dashboard.util.date.DateUtils.buildTime;
  42 +import static org.junit.jupiter.api.Assertions.assertEquals;
  43 +import static org.junit.jupiter.api.Assertions.assertNotNull;
  44 +
  45 +@Import({SysOperateLogServiceImpl.class})
  46 +public class SysOperateLogServiceImplTest extends BaseDbUnitTest {
  47 +
  48 + @Resource
  49 + private SysOperateLogService sysOperateLogServiceImpl;
  50 +
  51 + @Resource
  52 + private SysOperateLogMapper sysOperateLogMapper;
  53 +
  54 + @Resource
  55 + private SysUserMapper sysUserMapper;
  56 +
  57 + @MockBean
  58 + private SysUserService sysUserService;
  59 +
  60 + @Test
  61 + public void testCreateOperateLogAsync() throws InterruptedException, ExecutionException {
  62 +
  63 + String traceId = TracerUtils.getTraceId();
  64 + SysOperateLogCreateReqVO reqVO = RandomUtils.randomPojo(SysOperateLogCreateReqVO.class, vo -> {
  65 + vo.setTraceId(traceId);
  66 + vo.setUserId(RandomUtil.randomLong(1, Long.MAX_VALUE));
  67 +
  68 + Map<String, Object> map = MapUtil.builder("orderId", (Object) 1).build();
  69 + vo.setExts(map);
  70 + });
  71 +
  72 + // 执行service方法
  73 + Future<Boolean> future = sysOperateLogServiceImpl.createOperateLogAsync(reqVO);
  74 +
  75 + // 等异步执行完
  76 + future.get();
  77 +
  78 + // 查询插入的数据
  79 + SysOperateLogDO sysOperateLogDO = sysOperateLogMapper.selectOne("trace_id", traceId);
  80 +
  81 + // 断言
  82 + assertNotNull(sysOperateLogDO);
  83 + // 断言,忽略基本字段
  84 + assertPojoEquals(reqVO, sysOperateLogDO);
  85 + }
  86 +
  87 +
  88 + @Test
  89 + public void testPageOperateLog() {
  90 +
  91 + // 构造测试数据
  92 +
  93 + // 先构造用户
  94 + SysUserDO user = RandomUtils.randomPojo(SysUserDO.class, sysUserDO -> {
  95 + sysUserDO.setNickname("wangkai");
  96 + sysUserDO.setSex(SysSexEnum.MALE.getSEX());
  97 + sysUserDO.setStatus(CommonStatusEnum.ENABLE.getStatus());
  98 + });
  99 + sysUserMapper.insert(user);
  100 + Long userId = user.getId();
  101 +
  102 +
  103 + // 构造操作日志
  104 + SysOperateLogDO sysOperateLogDO = RandomUtils.randomPojo(SysOperateLogDO.class, entity -> {
  105 + entity.setTraceId(TracerUtils.getTraceId());
  106 + entity.setUserId(userId);
  107 + entity.setModule("order");
  108 + entity.setType(OperateTypeEnum.CREATE.getType());
  109 + entity.setStartTime(buildTime(2021, 3, 6));
  110 + entity.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode());
  111 +
  112 + Map<String, Object> map = new HashMap<>();
  113 + map.put("orderId", 1);
  114 + entity.setExts(map);
  115 + });
  116 +
  117 + sysOperateLogMapper.insert(sysOperateLogDO);
  118 +
  119 + // 下面几个是不匹配的数据
  120 + // 随机userId
  121 + sysOperateLogMapper.insert(ObjectUtils.clone(sysOperateLogDO, logDO -> logDO.setUserId(userId + 1)));
  122 + // module不同
  123 + sysOperateLogMapper.insert(ObjectUtils.clone(sysOperateLogDO, logDO -> logDO.setModule("user")));
  124 + // type不同
  125 + sysOperateLogMapper.insert(ObjectUtils.clone(sysOperateLogDO, logDO -> logDO.setType(OperateTypeEnum.IMPORT.getType())));
  126 + // createTime不同
  127 + sysOperateLogMapper.insert(ObjectUtils.clone(sysOperateLogDO, logDO -> logDO.setStartTime(buildTime(2021, 2, 6))));
  128 + // resultCode不同
  129 + sysOperateLogMapper.insert(ObjectUtils.clone(sysOperateLogDO, logDO -> logDO.setResultCode(GlobalErrorCodeConstants.BAD_REQUEST.getCode())));
  130 +
  131 + // 构造调用参数
  132 + SysOperateLogPageReqVO reqVO = new SysOperateLogPageReqVO();
  133 + reqVO.setUserNickname("wangkai");
  134 + reqVO.setModule("order");
  135 + reqVO.setType(OperateTypeEnum.CREATE.getType());
  136 + reqVO.setBeginTime(buildTime(2021, 3, 5));
  137 + reqVO.setEndTime(buildTime(2021, 3, 7));
  138 + reqVO.setSuccess(true);
  139 +
  140 + // 调用service方法
  141 + PageResult<SysOperateLogDO> pageResult = sysOperateLogServiceImpl.pageOperateLog(reqVO);
  142 +
  143 + // 断言,只查到了一条符合条件的
  144 + assertEquals(1, pageResult.getTotal());
  145 + assertEquals(1, pageResult.getList().size());
  146 + assertPojoEquals(sysOperateLogDO, pageResult.getList().get(0));
  147 + }
  148 +
  149 + @Test
  150 + public void testListOperateLogs() {
  151 +
  152 + // 构造测试数据
  153 +
  154 + // 先构造用户
  155 + SysUserDO user = RandomUtils.randomPojo(SysUserDO.class, sysUserDO -> {
  156 + sysUserDO.setNickname("wangkai");
  157 + sysUserDO.setSex(SysSexEnum.MALE.getSEX());
  158 + sysUserDO.setStatus(CommonStatusEnum.ENABLE.getStatus());
  159 + });
  160 + sysUserMapper.insert(user);
  161 + Long userId = user.getId();
  162 +
  163 +
  164 + // 构造操作日志
  165 + SysOperateLogDO sysOperateLogDO = RandomUtils.randomPojo(SysOperateLogDO.class, entity -> {
  166 + entity.setTraceId(TracerUtils.getTraceId());
  167 + entity.setUserId(userId);
  168 + entity.setModule("order");
  169 + entity.setType(OperateTypeEnum.CREATE.getType());
  170 + entity.setStartTime(buildTime(2021, 3, 6));
  171 + entity.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode());
  172 +
  173 +
  174 + Map<String, Object> map = MapUtil.builder("orderId", (Object) 1).build();
  175 + entity.setExts(map);
  176 + });
  177 +
  178 + sysOperateLogMapper.insert(sysOperateLogDO);
  179 +
  180 + // 下面几个是不匹配的数据
  181 + // 随机userId
  182 + sysOperateLogMapper.insert(ObjectUtils.clone(sysOperateLogDO, logDO -> logDO.setUserId(userId + 1)));
  183 + // module不同
  184 + sysOperateLogMapper.insert(ObjectUtils.clone(sysOperateLogDO, logDO -> logDO.setModule("user")));
  185 + // type不同
  186 + sysOperateLogMapper.insert(ObjectUtils.clone(sysOperateLogDO, logDO -> logDO.setType(OperateTypeEnum.IMPORT.getType())));
  187 + // createTime不同
  188 + sysOperateLogMapper.insert(ObjectUtils.clone(sysOperateLogDO, logDO -> logDO.setStartTime(buildTime(2021, 2, 6))));
  189 + // resultCode不同
  190 + sysOperateLogMapper.insert(ObjectUtils.clone(sysOperateLogDO, logDO -> logDO.setResultCode(GlobalErrorCodeConstants.BAD_REQUEST.getCode())));
  191 +
  192 + // 构造调用参数
  193 + SysOperateLogExportReqVO reqVO = new SysOperateLogExportReqVO();
  194 + reqVO.setUserNickname("wangkai");
  195 + reqVO.setModule("order");
  196 + reqVO.setType(OperateTypeEnum.CREATE.getType());
  197 + reqVO.setBeginTime(buildTime(2021, 3, 5));
  198 + reqVO.setEndTime(buildTime(2021, 3, 7));
  199 + reqVO.setSuccess(true);
  200 +
  201 + // 调用service方法
  202 + List<SysOperateLogDO> list = sysOperateLogServiceImpl.listOperateLogs(reqVO);
  203 +
  204 + // 断言,只查到了一条符合条件的
  205 + assertEquals(1, list.size());
  206 + assertPojoEquals(sysOperateLogDO, list.get(0));
  207 + }
  208 +}
... ...
src/test/resources/sql/clean.sql
... ... @@ -10,3 +10,6 @@ DELETE FROM &quot;sys_menu&quot;;
10 10 DELETE FROM "sys_dict_type";
11 11 DELETE FROM "sys_user_session";
12 12 DELETE FROM "sys_post";
  13 +DELETE FROM "sys_login_log";
  14 +DELETE FROM "sys_operate_log";
  15 +DELETE FROM "sys_user";
... ...
src/test/resources/sql/create_tables.sql
... ... @@ -161,3 +161,71 @@ CREATE TABLE IF NOT EXISTS &quot;sys_notice&quot; (
161 161 PRIMARY KEY("id")
162 162 ) COMMENT '通知公告表';
163 163  
  164 +
  165 +CREATE TABLE IF NOT EXISTS `sys_login_log` (
  166 + `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY,
  167 + `log_type` bigint(4) NOT NULL,
  168 + `trace_id` varchar(64) NOT NULL DEFAULT '',
  169 + `username` varchar(50) NOT NULL DEFAULT '',
  170 + `result` tinyint(4) NOT NULL,
  171 + `user_ip` varchar(50) NOT NULL,
  172 + `user_agent` varchar(512) NOT NULL,
  173 + `creator` varchar(64) DEFAULT '',
  174 + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  175 + `updater` varchar(64) DEFAULT '',
  176 + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  177 + `deleted` bit(1) NOT NULL DEFAULT '0',
  178 + PRIMARY KEY (`id`)
  179 +) COMMENT ='系统访问记录';
  180 +
  181 +
  182 +CREATE TABLE `sys_operate_log` (
  183 + `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY,
  184 + `trace_id` varchar(64) NOT NULL DEFAULT '',
  185 + `user_id` bigint(20) NOT NULL,
  186 + `module` varchar(50) NOT NULL,
  187 + `name` varchar(50) NOT NULL,
  188 + `operate_type` bigint(4) NOT NULL DEFAULT '0',
  189 + `content` varchar(2000) NOT NULL DEFAULT '',
  190 + `exts` varchar(512) NOT NULL DEFAULT '',
  191 + `request_method` varchar(16) DEFAULT '',
  192 + `request_url` varchar(255) DEFAULT '',
  193 + `user_ip` varchar(50) DEFAULT NULL,
  194 + `user_agent` varchar(200) DEFAULT NULL,
  195 + `java_method` varchar(512) NOT NULL DEFAULT '',
  196 + `java_method_args` varchar(8000) DEFAULT '',
  197 + `start_time` datetime NOT NULL,
  198 + `duration` int(11) NOT NULL,
  199 + `result_code` int(11) NOT NULL DEFAULT '0',
  200 + `result_msg` varchar(512) DEFAULT '',
  201 + `result_data` varchar(4000) DEFAULT '',
  202 + `creator` varchar(64) DEFAULT '',
  203 + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  204 + `updater` varchar(64) DEFAULT '',
  205 + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  206 + `deleted` bit(1) NOT NULL DEFAULT '0',
  207 + PRIMARY KEY (`id`)
  208 +) COMMENT ='操作日志记录';
  209 +
  210 +create table "sys_user" (
  211 + "id" bigint not null GENERATED BY DEFAULT AS IDENTITY,
  212 + "username" varchar(30) not null,
  213 + "password" varchar(100) not null default '',
  214 + "nickname" varchar(30) not null,
  215 + "remark" varchar(500) default null,
  216 + "dept_id" bigint default null,
  217 + "post_ids" varchar(255) default null,
  218 + "email" varchar(50) default '',
  219 + "mobile" varchar(11) default '',
  220 + "sex" tinyint default '0',
  221 + "avatar" varchar(100) default '',
  222 + "status" tinyint not null default '0',
  223 + "login_ip" varchar(50) default '',
  224 + "login_date" timestamp default null,
  225 + "creator" varchar(64) default '',
  226 + "create_time" timestamp not null default current_timestamp,
  227 + "updater" varchar(64) default '',
  228 + "update_time" timestamp not null default current_timestamp,
  229 + "deleted" bit not null default false,
  230 + primary key ("id")
  231 +) comment '用户信息表';
... ...