Commit 03ef1fc764c558111ba90650b61c229a8a9e7960

Authored by YunaiV
1 parent 5b723d02

将 dict 和 login log 迁移到共享库里

Showing 54 changed files with 330 additions and 493 deletions
README.md
... ... @@ -88,6 +88,9 @@
88 88 | `yudao-admin-ui` | 管理后台的 UI 界面 |
89 89 | `yudao-user-server` | 用户前台的服务端 |
90 90 | `yudao-user-ui` | 用户前台的 UI 界面 |
  91 +| `yudao-core-service` | 通用服务,提供共享逻辑 |
  92 +
  93 +> 友情提示:`yudao-admin-server` 和 `yudao-user-server` 会存在需要复用的逻辑,通过 `yudao-core-service` 实现。
91 94  
92 95 ### 后端
93 96  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/SysDictDataController.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.controller.dict;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
3 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 6 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
6 7 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
7 8 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.*;
8 9 import cn.iocoder.yudao.adminserver.modules.system.convert.dict.SysDictDataConvert;
9   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictDataDO;
10 10 import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictDataService;
11 11 import io.swagger.annotations.Api;
12 12 import io.swagger.annotations.ApiImplicitParam;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysLoginLogController.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.controller.logger;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
3 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 6 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
... ... @@ -9,7 +10,6 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog
9 10 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO;
10 11 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogRespVO;
11 12 import cn.iocoder.yudao.adminserver.modules.system.convert.logger.SysLoginLogConvert;
12   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysLoginLogDO;
13 13 import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysLoginLogService;
14 14 import io.swagger.annotations.Api;
15 15 import io.swagger.annotations.ApiOperation;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysAuthConvert.java
... ... @@ -26,8 +26,7 @@ public interface SysAuthConvert {
26 26  
27 27 SysAuthConvert INSTANCE = Mappers.getMapper(SysAuthConvert.class);
28 28  
29   - @Mapping(source = "updateTime", target = "updateTime", ignore = true)
30   - // 字段相同,但是含义不同,忽略
  29 + @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相同,但是含义不同,忽略
31 30 LoginUser convert0(SysUserDO bean);
32 31  
33 32 default LoginUser convert(SysUserDO bean) {
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dict/SysDictDataConvert.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.convert.dict;
2 2  
  3 +import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.*;
  4 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
3 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 6 import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO;
5   -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.*;
6   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictDataDO;
7 7 import org.mapstruct.Mapper;
8 8 import org.mapstruct.factory.Mappers;
9 9  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/logger/SysLoginLogConvert.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.convert.logger;
2 2  
3   -import cn.iocoder.yudao.adminserver.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
4   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 3 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExcelVO;
6 4 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogRespVO;
7   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysLoginLogDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 7 import org.mapstruct.Mapper;
9 8 import org.mapstruct.factory.Mappers;
10 9  
... ... @@ -15,8 +14,6 @@ public interface SysLoginLogConvert {
15 14  
16 15 SysLoginLogConvert INSTANCE = Mappers.getMapper(SysLoginLogConvert.class);
17 16  
18   - SysLoginLogDO convert(SysLoginLogCreateReqDTO bean);
19   -
20 17 PageResult<SysLoginLogRespVO> convertPage(PageResult<SysLoginLogDO> page);
21 18  
22 19 List<SysLoginLogExcelVO> convertList(List<SysLoginLogDO> list);
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dict/SysDictDataMapper.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dict;
2 2  
  3 +import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataExportReqVO;
  4 +import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataPageReqVO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
3 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 8 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
6   -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataExportReqVO;
7   -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataPageReqVO;
8   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictDataDO;
9 9 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10 10 import org.apache.ibatis.annotations.Mapper;
11 11  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/logger/SysLoginLogMapper.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
3 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 6 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
6 7 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO;
7 8 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO;
8   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysLoginLogDO;
9 9 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum;
10 10 import org.apache.ibatis.annotations.Mapper;
11 11  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/dict/SysDictDataRefreshConsumer.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.dict;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.service.dict.SysDictDataCoreService;
3 4 import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener;
4 5 import cn.iocoder.yudao.adminserver.modules.system.mq.message.dict.SysDictDataRefreshMessage;
5 6 import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictDataService;
... ... @@ -18,12 +19,12 @@ import javax.annotation.Resource;
18 19 public class SysDictDataRefreshConsumer extends AbstractChannelMessageListener<SysDictDataRefreshMessage> {
19 20  
20 21 @Resource
21   - private SysDictDataService dictDataService;
  22 + private SysDictDataCoreService dictDataCoreService;
22 23  
23 24 @Override
24 25 public void onMessage(SysDictDataRefreshMessage message) {
25 26 log.info("[onMessage][收到 DictData 刷新消息]");
26   - dictDataService.initLocalCache();
  27 + dictDataCoreService.initLocalCache();
27 28 }
28 29  
29 30 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
... ... @@ -12,13 +12,14 @@ import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeE
12 12 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum;
13 13 import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysAuthService;
14 14 import cn.iocoder.yudao.adminserver.modules.system.service.common.SysCaptchaService;
15   -import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysLoginLogService;
16   -import cn.iocoder.yudao.adminserver.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
17 15 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
18 16 import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
19 17 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
20 18 import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
  19 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
  20 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
21 21 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  22 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
22 23 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
23 24 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
24 25 import cn.iocoder.yudao.framework.security.core.LoginUser;
... ... @@ -65,7 +66,7 @@ public class SysAuthServiceImpl implements SysAuthService {
65 66 @Resource
66 67 private SysCaptchaService captchaService;
67 68 @Resource
68   - private SysLoginLogService loginLogService;
  69 + private SysLoginLogCoreService loginLogCoreService;
69 70 @Resource
70 71 private SysUserSessionCoreService userSessionCoreService;
71 72 @Resource
... ... @@ -164,11 +165,12 @@ public class SysAuthServiceImpl implements SysAuthService {
164 165 if (user != null) {
165 166 reqDTO.setUserId(user.getId());
166 167 }
  168 + reqDTO.setUserType(UserTypeEnum.ADMIN.getValue());
167 169 reqDTO.setUsername(username);
168 170 reqDTO.setUserAgent(ServletUtils.getUserAgent());
169 171 reqDTO.setUserIp(ServletUtils.getClientIP());
170 172 reqDTO.setResult(loginResult.getResult());
171   - loginLogService.createLoginLog(reqDTO);
  173 + loginLogCoreService.createLoginLog(reqDTO);
172 174 // 更新最后登录时间
173 175 if (user != null && Objects.equals(SysLoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) {
174 176 userService.updateUserLogin(user.getId(), ServletUtils.getClientIP());
... ... @@ -258,14 +260,16 @@ public class SysAuthServiceImpl implements SysAuthService {
258 260 }
259 261  
260 262 private void createLogoutLog(String username) {
  263 + // TODO 芋艿:这里未设置 userId
261 264 SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO();
262 265 reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType());
263 266 reqDTO.setTraceId(TracerUtils.getTraceId());
  267 + reqDTO.setUserType(UserTypeEnum.ADMIN.getValue());
264 268 reqDTO.setUsername(username);
265 269 reqDTO.setUserAgent(ServletUtils.getUserAgent());
266 270 reqDTO.setUserIp(ServletUtils.getClientIP());
267 271 reqDTO.setResult(SysLoginResultEnum.SUCCESS.getResult());
268   - loginLogService.createLoginLog(reqDTO);
  272 + loginLogCoreService.createLoginLog(reqDTO);
269 273 }
270 274  
271 275 @Override
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysUserSessionServiceImpl.java
... ... @@ -9,10 +9,12 @@ import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeE
9 9 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum;
10 10 import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysUserSessionService;
11 11 import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysLoginLogService;
12   -import cn.iocoder.yudao.adminserver.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
13 12 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
14 13 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO;
15 14 import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO;
  15 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
  16 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
  17 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
16 18 import cn.iocoder.yudao.framework.common.pojo.PageResult;
17 19 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
18 20 import com.google.common.collect.Lists;
... ... @@ -42,7 +44,7 @@ public class SysUserSessionServiceImpl implements SysUserSessionService {
42 44 @Resource
43 45 private SysUserService userService;
44 46 @Resource
45   - private SysLoginLogService loginLogService;
  47 + private SysLoginLogCoreService loginLogCoreService;
46 48  
47 49 @Resource
48 50 private SysLoginUserCoreRedisDAO loginUserCoreRedisDAO;
... ... @@ -84,11 +86,12 @@ public class SysUserSessionServiceImpl implements SysUserSessionService {
84 86 SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO();
85 87 reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_TIMEOUT.getType());
86 88 reqDTO.setTraceId(TracerUtils.getTraceId());
  89 + reqDTO.setUserType(UserTypeEnum.ADMIN.getValue());
87 90 reqDTO.setUsername(timeoutSessionDO.getUsername());
88 91 reqDTO.setUserAgent(timeoutSessionDO.getUserAgent());
89 92 reqDTO.setUserIp(timeoutSessionDO.getUserIp());
90 93 reqDTO.setResult(SysLoginResultEnum.SUCCESS.getResult());
91   - loginLogService.createLoginLog(reqDTO);
  94 + loginLogCoreService.createLoginLog(reqDTO);
92 95 }
93 96 }
94 97  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataService.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.dict;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
3 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 5 import cn.iocoder.yudao.framework.dict.core.service.DictDataFrameworkService;
5 6 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO;
6 7 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataExportReqVO;
7 8 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataPageReqVO;
8 9 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO;
9   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictDataDO;
10 10  
11 11 import java.util.List;
12 12  
... ... @@ -15,12 +15,7 @@ import java.util.List;
15 15 *
16 16 * @author ruoyi
17 17 */
18   -public interface SysDictDataService extends DictDataFrameworkService {
19   -
20   - /**
21   - * 初始化字典数据的本地缓存
22   - */
23   - void initLocalCache();
  18 +public interface SysDictDataService {
24 19  
25 20 /**
26 21 * 创建字典数据
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictDataServiceImpl.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.dict.impl;
2 2  
3   -import cn.hutool.core.collection.CollUtil;
4   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
6   -import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO;
7   -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
8 3 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO;
9 4 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataExportReqVO;
10 5 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataPageReqVO;
11 6 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO;
12 7 import cn.iocoder.yudao.adminserver.modules.system.convert.dict.SysDictDataConvert;
13   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictDataDO;
14 8 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO;
15 9 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dict.SysDictDataMapper;
16 10 import cn.iocoder.yudao.adminserver.modules.system.mq.producer.dict.SysDictDataProducer;
17 11 import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictDataService;
18 12 import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictTypeService;
  13 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
  14 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  15 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
19 16 import com.google.common.annotations.VisibleForTesting;
20   -import com.google.common.collect.ImmutableTable;
21 17 import lombok.extern.slf4j.Slf4j;
22   -import org.springframework.scheduling.annotation.Scheduled;
23 18 import org.springframework.stereotype.Service;
24 19  
25   -import javax.annotation.PostConstruct;
26 20 import javax.annotation.Resource;
27 21 import java.util.Comparator;
28 22 import java.util.Date;
29 23 import java.util.List;
30 24  
31   -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
32 25 import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*;
  26 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
33 27  
34 28 /**
35 29 * 字典数据 Service 实现类
... ... @@ -47,31 +41,6 @@ public class SysDictDataServiceImpl implements SysDictDataService {
47 41 .comparing(SysDictDataDO::getDictType)
48 42 .thenComparingInt(SysDictDataDO::getSort);
49 43  
50   - /**
51   - * 定时执行 {@link #schedulePeriodicRefresh()} 的周期
52   - * 因为已经通过 Redis Pub/Sub 机制,所以频率不需要高
53   - */
54   - private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L;
55   -
56   - /**
57   - * 字典数据缓存,第二个 key 使用 label
58   - *
59   - * key1:字典类型 dictType
60   - * key2:字典标签 label
61   - */
62   - private ImmutableTable<String, String, SysDictDataDO> labelDictDataCache;
63   - /**
64   - * 字典数据缓存,第二个 key 使用 value
65   - *
66   - * key1:字典类型 dictType
67   - * key2:字典值 value
68   - */
69   - private ImmutableTable<String, String, SysDictDataDO> valueDictDataCache;
70   - /**
71   - * 缓存字典数据的最大更新时间,用于后续的增量轮询,判断是否有更新
72   - */
73   - private volatile Date maxUpdateTime;
74   -
75 44 @Resource
76 45 private SysDictTypeService dictTypeService;
77 46  
... ... @@ -81,34 +50,6 @@ public class SysDictDataServiceImpl implements SysDictDataService {
81 50 @Resource
82 51 private SysDictDataProducer dictDataProducer;
83 52  
84   - @Override
85   - @PostConstruct
86   - public synchronized void initLocalCache() {
87   - // 获取字典数据列表,如果有更新
88   - List<SysDictDataDO> dataList = this.loadDictDataIfUpdate(maxUpdateTime);
89   - if (CollUtil.isEmpty(dataList)) {
90   - return;
91   - }
92   -
93   - // 构建缓存
94   - ImmutableTable.Builder<String, String, SysDictDataDO> labelDictDataBuilder = ImmutableTable.builder();
95   - ImmutableTable.Builder<String, String, SysDictDataDO> valueDictDataBuilder = ImmutableTable.builder();
96   - dataList.forEach(dictData -> {
97   - labelDictDataBuilder.put(dictData.getDictType(), dictData.getLabel(), dictData);
98   - valueDictDataBuilder.put(dictData.getDictType(), dictData.getValue(), dictData);
99   - });
100   - labelDictDataCache = labelDictDataBuilder.build();
101   - valueDictDataCache = valueDictDataBuilder.build();
102   - assert dataList.size() > 0; // 断言,避免告警
103   - maxUpdateTime = dataList.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime();
104   - log.info("[initLocalCache][缓存字典数据,数量为:{}]", dataList.size());
105   - }
106   -
107   - @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD)
108   - public void schedulePeriodicRefresh() {
109   - initLocalCache();
110   - }
111   -
112 53 /**
113 54 * 如果字典数据发生变化,从数据库中获取最新的全量字典数据。
114 55 * 如果未发生变化,则返回空
... ... @@ -238,19 +179,4 @@ public class SysDictDataServiceImpl implements SysDictDataService {
238 179 }
239 180 }
240 181  
241   - @Override
242   - public DictDataRespDTO getDictDataFromCache(String type, String value) {
243   - return SysDictDataConvert.INSTANCE.convert02(valueDictDataCache.get(type, value));
244   - }
245   -
246   - @Override
247   - public DictDataRespDTO parseDictDataFromCache(String type, String label) {
248   - return SysDictDataConvert.INSTANCE.convert02(labelDictDataCache.get(type, label));
249   - }
250   -
251   - @Override
252   - public List<DictDataRespDTO> listDictDatasFromCache(String type) {
253   - return SysDictDataConvert.INSTANCE.convertList03(labelDictDataCache.row(type).values());
254   - }
255   -
256 182 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysLoginLogService.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.logger;
2 2  
3   -import cn.iocoder.yudao.adminserver.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
4   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 3 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO;
6 4 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO;
7   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysLoginLogDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 7  
9 8 import java.util.List;
10 9  
... ... @@ -14,13 +13,6 @@ import java.util.List;
14 13 public interface SysLoginLogService {
15 14  
16 15 /**
17   - * 创建登录日志
18   - *
19   - * @param reqDTO 日志信息
20   - */
21   - void createLoginLog(SysLoginLogCreateReqDTO reqDTO);
22   -
23   - /**
24 16 * 获得登录日志分页
25 17 *
26 18 * @param reqVO 分页条件
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/impl/SysLoginLogServiceImpl.java
... ... @@ -2,12 +2,9 @@ package cn.iocoder.yudao.adminserver.modules.system.service.logger.impl;
2 2  
3 3 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO;
4 4 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO;
5   -import cn.iocoder.yudao.adminserver.modules.system.convert.logger.SysLoginLogConvert;
6   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysLoginLogDO;
7 5 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger.SysLoginLogMapper;
8 6 import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysLoginLogService;
9   -import cn.iocoder.yudao.adminserver.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
10   -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
  7 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
11 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
12 9 import org.springframework.stereotype.Service;
13 10  
... ... @@ -24,14 +21,6 @@ public class SysLoginLogServiceImpl implements SysLoginLogService {
24 21 private SysLoginLogMapper loginLogMapper;
25 22  
26 23 @Override
27   - public void createLoginLog(SysLoginLogCreateReqDTO reqDTO) {
28   - SysLoginLogDO loginLog = SysLoginLogConvert.INSTANCE.convert(reqDTO);
29   - loginLog.setUserType(UserTypeEnum.ADMIN.getValue());
30   - // 插入
31   - loginLogMapper.insert(loginLog);
32   - }
33   -
34   - @Override
35 24 public PageResult<SysLoginLogDO> getLoginLogPage(SysLoginLogPageReqVO reqVO) {
36 25 return loginLogMapper.selectPage(reqVO);
37 26 }
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java
... ... @@ -3,6 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.system.service.auth;
3 3 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
4 4 import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
5 5 import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
  6 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
6 7 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
7 8 import cn.iocoder.yudao.framework.security.core.LoginUser;
8 9 import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthLoginReqVO;
... ... @@ -11,7 +12,6 @@ import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeE
11 12 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum;
12 13 import cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysAuthServiceImpl;
13 14 import cn.iocoder.yudao.adminserver.modules.system.service.common.SysCaptchaService;
14   -import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysLoginLogService;
15 15 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
16 16 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
17 17 import cn.iocoder.yudao.framework.test.core.util.AssertUtils;
... ... @@ -59,7 +59,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
59 59 @MockBean
60 60 private SysCaptchaService captchaService;
61 61 @MockBean
62   - private SysLoginLogService loginLogService;
  62 + private SysLoginLogCoreService loginLogCoreService;
63 63 @MockBean
64 64 private SysUserSessionCoreService userSessionCoreService;
65 65 @MockBean
... ... @@ -132,7 +132,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
132 132 // 调用, 并断言异常
133 133 assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_CAPTCHA_NOT_FOUND);
134 134 // 校验调用参数
135   - verify(loginLogService, times(1)).createLoginLog(
  135 + verify(loginLogCoreService, times(1)).createLoginLog(
136 136 argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType())
137 137 && o.getResult().equals(SysLoginResultEnum.CAPTCHA_NOT_FOUND.getResult()))
138 138 );
... ... @@ -150,7 +150,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
150 150 // 调用, 并断言异常
151 151 assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_CAPTCHA_CODE_ERROR);
152 152 // 校验调用参数
153   - verify(loginLogService, times(1)).createLoginLog(
  153 + verify(loginLogCoreService, times(1)).createLoginLog(
154 154 argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType())
155 155 && o.getResult().equals(SysLoginResultEnum.CAPTCHA_CODE_ERROR.getResult()))
156 156 );
... ... @@ -171,7 +171,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
171 171 assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_BAD_CREDENTIALS);
172 172 // 校验调用参数
173 173 verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid());
174   - verify(loginLogService, times(1)).createLoginLog(
  174 + verify(loginLogCoreService, times(1)).createLoginLog(
175 175 argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType())
176 176 && o.getResult().equals(SysLoginResultEnum.BAD_CREDENTIALS.getResult()))
177 177 );
... ... @@ -192,7 +192,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
192 192 assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_USER_DISABLED);
193 193 // 校验调用参数
194 194 verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid());
195   - verify(loginLogService, times(1)).createLoginLog(
  195 + verify(loginLogCoreService, times(1)).createLoginLog(
196 196 argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType())
197 197 && o.getResult().equals(SysLoginResultEnum.USER_DISABLED.getResult()))
198 198 );
... ... @@ -213,7 +213,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
213 213 assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_FAIL_UNKNOWN);
214 214 // 校验调用参数
215 215 verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid());
216   - verify(loginLogService, times(1)).createLoginLog(
  216 + verify(loginLogCoreService, times(1)).createLoginLog(
217 217 argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType())
218 218 && o.getResult().equals(SysLoginResultEnum.UNKNOWN_ERROR.getResult()))
219 219 );
... ... @@ -247,7 +247,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
247 247 assertEquals(sessionId, login);
248 248 // 校验调用参数
249 249 verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid());
250   - verify(loginLogService, times(1)).createLoginLog(
  250 + verify(loginLogCoreService, times(1)).createLoginLog(
251 251 argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType())
252 252 && o.getResult().equals(SysLoginResultEnum.SUCCESS.getResult()))
253 253 );
... ... @@ -264,7 +264,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
264 264 authService.logout(token);
265 265 // 校验调用参数
266 266 verify(userSessionCoreService, times(1)).deleteUserSession(token);
267   - verify(loginLogService, times(1)).createLoginLog(
  267 + verify(loginLogCoreService, times(1)).createLoginLog(
268 268 argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGOUT_SELF.getType())
269 269 && o.getResult().equals(SysLoginResultEnum.SUCCESS.getResult()))
270 270 );
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysUserSessionServiceImplTest.java
... ... @@ -5,13 +5,13 @@ import cn.iocoder.yudao.adminserver.BaseDbAndRedisUnitTest;
5 5 import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO;
6 6 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
7 7 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.auth.SysUserSessionMapper;
8   -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user.SysUserMapper;
9 8 import cn.iocoder.yudao.adminserver.modules.system.enums.common.SysSexEnum;
10 9 import cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysUserSessionServiceImpl;
11 10 import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysLoginLogService;
12 11 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
13 12 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO;
14 13 import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO;
  14 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
15 15 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
16 16 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
17 17 import cn.iocoder.yudao.framework.common.pojo.PageResult;
... ... @@ -22,8 +22,6 @@ import org.springframework.boot.test.mock.mockito.MockBean;
22 22 import org.springframework.context.annotation.Import;
23 23  
24 24 import javax.annotation.Resource;
25   -import java.util.Arrays;
26   -import java.util.Collections;
27 25 import java.util.Date;
28 26 import java.util.List;
29 27 import java.util.stream.Collectors;
... ... @@ -55,7 +53,7 @@ public class SysUserSessionServiceImplTest extends BaseDbAndRedisUnitTest {
55 53 @MockBean
56 54 private SysUserService userService;
57 55 @MockBean
58   - private SysLoginLogService loginLogService;
  56 + private SysLoginLogCoreService loginLogCoreService;
59 57 @MockBean
60 58 private SysLoginUserCoreRedisDAO loginUserCoreRedisDAO;
61 59  
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataServiceTest.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.dict;
2 2  
3 3 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
  4 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
4 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 7 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO;
7 8 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataExportReqVO;
8 9 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataPageReqVO;
9 10 import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO;
10   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictDataDO;
11 11 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO;
12 12 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dict.SysDictDataMapper;
13 13 import cn.iocoder.yudao.adminserver.modules.system.mq.producer.dict.SysDictDataProducer;
... ... @@ -51,37 +51,6 @@ public class SysDictDataServiceTest extends BaseDbUnitTest {
51 51 @MockBean
52 52 private SysDictDataProducer dictDataProducer;
53 53  
54   - /**
55   - * 测试加载到新的字典数据的情况
56   - */
57   - @Test
58   - @SuppressWarnings("unchecked")
59   - public void testInitLocalCache() {
60   - // mock 数据
61   - SysDictDataDO dictData01 = randomDictDataDO();
62   - dictDataMapper.insert(dictData01);
63   - SysDictDataDO dictData02 = randomDictDataDO();
64   - dictDataMapper.insert(dictData02);
65   -
66   - // 调用
67   - dictDataService.initLocalCache();
68   - // 断言 labelDictDataCache 缓存
69   - ImmutableTable<String, String, SysDictDataDO> labelDictDataCache =
70   - (ImmutableTable<String, String, SysDictDataDO>) getFieldValue(dictDataService, "labelDictDataCache");
71   - assertEquals(2, labelDictDataCache.size());
72   - assertPojoEquals(dictData01, labelDictDataCache.get(dictData01.getDictType(), dictData01.getLabel()));
73   - assertPojoEquals(dictData02, labelDictDataCache.get(dictData02.getDictType(), dictData02.getLabel()));
74   - // 断言 valueDictDataCache 缓存
75   - ImmutableTable<String, String, SysDictDataDO> valueDictDataCache =
76   - (ImmutableTable<String, String, SysDictDataDO>) getFieldValue(dictDataService, "valueDictDataCache");
77   - assertEquals(2, valueDictDataCache.size());
78   - assertPojoEquals(dictData01, valueDictDataCache.get(dictData01.getDictType(), dictData01.getValue()));
79   - assertPojoEquals(dictData02, valueDictDataCache.get(dictData02.getDictType(), dictData02.getValue()));
80   - // 断言 maxUpdateTime 缓存
81   - Date maxUpdateTime = (Date) getFieldValue(dictDataService, "maxUpdateTime");
82   - assertEquals(ObjectUtils.max(dictData01.getUpdateTime(), dictData02.getUpdateTime()), maxUpdateTime);
83   - }
84   -
85 54 @Test
86 55 public void testGetDictDataPage() {
87 56 // mock 数据
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysLoginLogServiceImplTest.java
... ... @@ -2,13 +2,12 @@ package cn.iocoder.yudao.adminserver.modules.system.service.logger;
2 2  
3 3 import cn.hutool.core.util.RandomUtil;
4 4 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
5   -import cn.iocoder.yudao.adminserver.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
6 6 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
7 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 8 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
9 9 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO;
10 10 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO;
11   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysLoginLogDO;
12 11 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger.SysLoginLogMapper;
13 12 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum;
14 13 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum;
... ... @@ -35,30 +34,8 @@ public class SysLoginLogServiceImplTest extends BaseDbUnitTest {
35 34 private SysLoginLogMapper loginLogMapper;
36 35  
37 36 @Test
38   - public void testCreateLoginLog() {
39   - String traceId = TracerUtils.getTraceId();
40   - SysLoginLogCreateReqDTO reqDTO = RandomUtils.randomPojo(SysLoginLogCreateReqDTO.class, vo -> {
41   - // 指定随机的范围,避免超出范围入库失败
42   - vo.setLogType(RandomUtil.randomEle(SysLoginLogTypeEnum.values()).getType());
43   - vo.setResult(RandomUtil.randomEle(SysLoginResultEnum.values()).getResult());
44   - // 使用TracerUtils生成的TraceId
45   - vo.setTraceId(traceId);
46   - });
47   -
48   - // 执行service方法
49   - sysLoginLogService.createLoginLog(reqDTO);
50   -
51   - // 断言,忽略基本字段
52   - SysLoginLogDO sysLoginLogDO = loginLogMapper.selectOne(null);
53   - assertPojoEquals(reqDTO, sysLoginLogDO);
54   - }
55   -
56   -
57   - @Test
58 37 public void testGetLoginLogPage() {
59   -
60 38 // 构造测试数据
61   -
62 39 // 登录成功的
63 40 SysLoginLogDO loginLogDO = RandomUtils.randomPojo(SysLoginLogDO.class, logDO -> {
64 41 logDO.setLogType(RandomUtil.randomEle(SysLoginLogTypeEnum.values()).getType());
... ...
yudao-core-service/pom.xml
... ... @@ -23,6 +23,16 @@
23 23 <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
24 24  
25 25 <dependencies>
  26 + <!-- 业务组件 -->
  27 + <dependency>
  28 + <groupId>cn.iocoder.boot</groupId>
  29 + <artifactId>yudao-spring-boot-starter-biz-dict</artifactId>
  30 + </dependency>
  31 + <dependency>
  32 + <groupId>cn.iocoder.boot</groupId>
  33 + <artifactId>yudao-spring-boot-starter-biz-sms</artifactId>
  34 + </dependency>
  35 +
26 36 <!-- Web 相关 -->
27 37 <dependency>
28 38 <groupId>cn.iocoder.boot</groupId>
... ... @@ -57,6 +67,12 @@
57 67 <artifactId>yudao-spring-boot-starter-test</artifactId>
58 68 <scope>test</scope>
59 69 </dependency>
  70 +
  71 + <!-- 工具类相关 -->
  72 + <dependency>
  73 + <groupId>com.google.guava</groupId>
  74 + <artifactId>guava</artifactId>
  75 + </dependency>
60 76 </dependencies>
61 77  
62 78 </project>
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/dict/SysDictDataConvert.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/dict/SysDictDataCoreConvert.java
1   -package cn.iocoder.yudao.userserver.modules.system.convert.dict;
  1 +package cn.iocoder.yudao.coreservice.modules.system.convert.dict;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
3 4 import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO;
4   -import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.dict.SysDictDataDO;
5 5 import org.mapstruct.Mapper;
6 6 import org.mapstruct.factory.Mappers;
7 7  
... ... @@ -9,9 +9,9 @@ import java.util.Collection;
9 9 import java.util.List;
10 10  
11 11 @Mapper
12   -public interface SysDictDataConvert {
  12 +public interface SysDictDataCoreConvert {
13 13  
14   - SysDictDataConvert INSTANCE = Mappers.getMapper(SysDictDataConvert.class);
  14 + SysDictDataCoreConvert INSTANCE = Mappers.getMapper(SysDictDataCoreConvert.class);
15 15  
16 16 DictDataRespDTO convert02(SysDictDataDO bean);
17 17  
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/logger/SysLoginLogCoreConvert.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.convert.logger;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
  4 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
  5 +import org.mapstruct.Mapper;
  6 +import org.mapstruct.factory.Mappers;
  7 +
  8 +@Mapper
  9 +public interface SysLoginLogCoreConvert {
  10 +
  11 + SysLoginLogCoreConvert INSTANCE = Mappers.getMapper(SysLoginLogCoreConvert.class);
  12 +
  13 + SysLoginLogDO convert(SysLoginLogCreateReqDTO bean);
  14 +
  15 +}
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/package-info.java 0 → 100644
  1 +/**
  2 + * 提供 POJO 类的实体转换
  3 + *
  4 + * 目前使用 MapStruct 框架
  5 + */
  6 +package cn.iocoder.yudao.coreservice.modules.system.convert;
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md 0 → 100644
  1 +<http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao>
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dict/SysDictDataDO.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dict/SysDictDataDO.java
1   -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict;
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict;
2 2  
3 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/logger/SysLoginLogDO.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/logger/SysLoginLogDO.java
1   -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger;
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger;
2 2  
3 3 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5   -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum;
6   -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum;
  5 +import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum;
  6 +import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum;
7 7 import com.baomidou.mybatisplus.annotation.TableName;
8 8 import lombok.Data;
9 9 import lombok.EqualsAndHashCode;
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/mysql/dict/SysDictDataMapper.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dict/SysDictDataCoreMapper.java
1   -package cn.iocoder.yudao.userserver.modules.system.dal.mysql.dict;
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dict;
2 2  
3 3  
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5   -import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.dict.SysDictDataDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
6 6 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
7 7 import org.apache.ibatis.annotations.Mapper;
8 8  
9 9 import java.util.Date;
10 10  
11 11 @Mapper
12   -public interface SysDictDataMapper extends BaseMapperX<SysDictDataDO> {
13   -
14   - default SysDictDataDO selectByDictTypeAndValue(String dictType, String value) {
15   - return selectOne(new QueryWrapper<SysDictDataDO>().eq("dict_type", dictType)
16   - .eq("value", value));
17   - }
18   -
19   - default int selectCountByDictType(String dictType) {
20   - return selectCount("dict_type", dictType);
21   - }
  12 +public interface SysDictDataCoreMapper extends BaseMapperX<SysDictDataDO> {
22 13  
23 14 default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) {
24 15 return selectOne(new QueryWrapper<SysDictDataDO>().select("id")
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/dataobject/logger/SysLoginLogMapper.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/logger/SysLoginLogCoreMapper.java
1   -package cn.iocoder.yudao.userserver.modules.system.dal.dataobject.logger;
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.logger;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
3 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4   -import cn.iocoder.yudao.userserver.modules.system.dal.mysql.logger.SysLoginLogDO;
5 5 import org.apache.ibatis.annotations.Mapper;
6 6  
7 7 @Mapper
8   -public interface SysLoginLogMapper extends BaseMapperX<SysLoginLogDO> {
  8 +public interface SysLoginLogCoreMapper extends BaseMapperX<SysLoginLogDO> {
9 9  
10 10 }
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/logger/SysLoginLogTypeEnum.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/logger/SysLoginLogTypeEnum.java
1   -package cn.iocoder.yudao.userserver.modules.system.enums.logger;
  1 +package cn.iocoder.yudao.coreservice.modules.system.enums.logger;
2 2  
3 3 import lombok.AllArgsConstructor;
4 4 import lombok.Getter;
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/logger/SysLoginResultEnum.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/logger/SysLoginResultEnum.java
1   -package cn.iocoder.yudao.userserver.modules.system.enums.logger;
  1 +package cn.iocoder.yudao.coreservice.modules.system.enums.logger;
2 2  
3 3 import lombok.AllArgsConstructor;
4 4 import lombok.Getter;
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.enums;
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/dict/SysDictDataService.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreService.java
1   -package cn.iocoder.yudao.userserver.modules.system.service.dict;
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.dict;
2 2  
3 3 import cn.iocoder.yudao.framework.dict.core.service.DictDataFrameworkService;
4 4  
5 5 /**
6 6 * 字典数据 Service 接口
7 7 *
8   - * @author ruoyi
  8 + * @author 芋道源码
9 9 */
10   -public interface SysDictDataService extends DictDataFrameworkService {
  10 +public interface SysDictDataCoreService extends DictDataFrameworkService {
11 11  
12 12 /**
13 13 * 初始化字典数据的本地缓存
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/dict/impl/SysDictDataServiceImpl.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/impl/SysDictDataCoreServiceImpl.java
1   -package cn.iocoder.yudao.userserver.modules.system.service.dict.impl;
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.dict.impl;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.coreservice.modules.system.convert.dict.SysDictDataCoreConvert;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
  6 +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dict.SysDictDataCoreMapper;
  7 +import cn.iocoder.yudao.coreservice.modules.system.service.dict.SysDictDataCoreService;
4 8 import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO;
5 9 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
6   -import cn.iocoder.yudao.userserver.modules.system.convert.dict.SysDictDataConvert;
7   -import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.dict.SysDictDataDO;
8   -import cn.iocoder.yudao.userserver.modules.system.dal.mysql.dict.SysDictDataMapper;
9   -import cn.iocoder.yudao.userserver.modules.system.service.dict.SysDictDataService;
10 10 import com.google.common.collect.ImmutableTable;
11 11 import lombok.extern.slf4j.Slf4j;
12 12 import org.springframework.scheduling.annotation.Scheduled;
... ... @@ -21,11 +21,11 @@ import java.util.List;
21 21 /**
22 22 * 字典数据 Service 实现类
23 23 *
24   - * @author ruoyi
  24 + * @author 芋道源码
25 25 */
26 26 @Service
27 27 @Slf4j
28   -public class SysDictDataServiceImpl implements SysDictDataService {
  28 +public class SysDictDataCoreServiceImpl implements SysDictDataCoreService {
29 29  
30 30 /**
31 31 * 定时执行 {@link #schedulePeriodicRefresh()} 的周期
... ... @@ -53,7 +53,7 @@ public class SysDictDataServiceImpl implements SysDictDataService {
53 53 private volatile Date maxUpdateTime;
54 54  
55 55 @Resource
56   - private SysDictDataMapper dictDataMapper;
  56 + private SysDictDataCoreMapper dictDataCoreMapper;
57 57  
58 58 @Override
59 59 @PostConstruct
... ... @@ -95,28 +95,28 @@ public class SysDictDataServiceImpl implements SysDictDataService {
95 95 if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
96 96 log.info("[loadDictDataIfUpdate][首次加载全量字典数据]");
97 97 } else { // 判断数据库中是否有更新的字典数据
98   - if (!dictDataMapper.selectExistsByUpdateTimeAfter(maxUpdateTime)) {
  98 + if (!dictDataCoreMapper.selectExistsByUpdateTimeAfter(maxUpdateTime)) {
99 99 return null;
100 100 }
101 101 log.info("[loadDictDataIfUpdate][增量加载全量字典数据]");
102 102 }
103 103 // 第二步,如果有更新,则从数据库加载所有字典数据
104   - return dictDataMapper.selectList();
  104 + return dictDataCoreMapper.selectList();
105 105 }
106 106  
107 107 @Override
108 108 public DictDataRespDTO getDictDataFromCache(String type, String value) {
109   - return SysDictDataConvert.INSTANCE.convert02(valueDictDataCache.get(type, value));
  109 + return SysDictDataCoreConvert.INSTANCE.convert02(valueDictDataCache.get(type, value));
110 110 }
111 111  
112 112 @Override
113 113 public DictDataRespDTO parseDictDataFromCache(String type, String label) {
114   - return SysDictDataConvert.INSTANCE.convert02(labelDictDataCache.get(type, label));
  114 + return SysDictDataCoreConvert.INSTANCE.convert02(labelDictDataCache.get(type, label));
115 115 }
116 116  
117 117 @Override
118 118 public List<DictDataRespDTO> listDictDatasFromCache(String type) {
119   - return SysDictDataConvert.INSTANCE.convertList03(labelDictDataCache.row(type).values());
  119 + return SysDictDataCoreConvert.INSTANCE.convertList03(labelDictDataCache.row(type).values());
120 120 }
121 121  
122 122 }
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/logger/SysLoginLogService.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogCoreService.java
1   -package cn.iocoder.yudao.userserver.modules.system.service.logger;
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.logger;
2 2  
3   -import cn.iocoder.yudao.userserver.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
  3 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
4 4  
5 5 /**
6   - * 登录日志 Service 接口
  6 + * 登录日志 Core Service 接口
7 7 */
8   -public interface SysLoginLogService {
  8 +public interface SysLoginLogCoreService {
9 9  
10 10 /**
11 11 * 创建登录日志
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/dto/SysLoginLogCreateReqDTO.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/dto/SysLoginLogCreateReqDTO.java
1   -package cn.iocoder.yudao.adminserver.modules.system.service.logger.dto;
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.logger.dto;
2 2  
3 3 import lombok.Data;
4 4  
... ... @@ -31,6 +31,11 @@ public class SysLoginLogCreateReqDTO {
31 31 */
32 32 private Long userId;
33 33 /**
  34 + * 用户类型
  35 + */
  36 + @NotNull(message = "用户类型不能为空")
  37 + private Integer userType;
  38 + /**
34 39 * 用户账号
35 40 */
36 41 @NotBlank(message = "用户账号不能为空")
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/impl/SysLoginLogCoreServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.logger.impl;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.convert.logger.SysLoginLogCoreConvert;
  4 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.logger.SysLoginLogCoreMapper;
  6 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
  7 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
  8 +import org.springframework.stereotype.Service;
  9 +
  10 +import javax.annotation.Resource;
  11 +
  12 +/**
  13 + * 登录日志 Service Core 实现
  14 + *
  15 + * @author 芋道源码
  16 + */
  17 +@Service
  18 +public class SysLoginLogCoreServiceImpl implements SysLoginLogCoreService {
  19 +
  20 + @Resource
  21 + private SysLoginLogCoreMapper loginLogMapper;
  22 +
  23 + @Override
  24 + public void createLoginLog(SysLoginLogCreateReqDTO reqDTO) {
  25 + SysLoginLogDO loginLog = SysLoginLogCoreConvert.INSTANCE.convert(reqDTO);
  26 + // 插入
  27 + loginLogMapper.insert(loginLog);
  28 + }
  29 +
  30 +}
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/package-info.java deleted
1   -package cn.iocoder.yudao.coreservice.modules.system.service;
yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreServiceTest.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.dict;
  2 +
  3 +import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
  4 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dict.SysDictDataCoreMapper;
  6 +import cn.iocoder.yudao.coreservice.modules.system.service.dict.impl.SysDictDataCoreServiceImpl;
  7 +import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
  8 +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
  9 +import com.google.common.collect.ImmutableTable;
  10 +import org.junit.jupiter.api.Test;
  11 +import org.springframework.context.annotation.Import;
  12 +
  13 +import javax.annotation.Resource;
  14 +import java.util.Date;
  15 +import java.util.function.Consumer;
  16 +
  17 +import static cn.hutool.core.bean.BeanUtil.getFieldValue;
  18 +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
  19 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomCommonStatus;
  20 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  21 +import static org.junit.jupiter.api.Assertions.assertEquals;
  22 +
  23 +/**
  24 +* {@link SysDictDataCoreServiceImpl} 的单元测试类
  25 +*
  26 +* @author 芋道源码
  27 +*/
  28 +@Import(SysDictDataCoreServiceImpl.class)
  29 +public class SysDictDataCoreServiceTest extends BaseDbUnitTest {
  30 +
  31 + @Resource
  32 + private SysDictDataCoreServiceImpl dictDataCoreService;
  33 +
  34 + @Resource
  35 + private SysDictDataCoreMapper dictDataMapper;
  36 +
  37 + /**
  38 + * 测试加载到新的字典数据的情况
  39 + */
  40 + @Test
  41 + @SuppressWarnings("unchecked")
  42 + public void testInitLocalCache() {
  43 + // mock 数据
  44 + SysDictDataDO dictData01 = randomDictDataDO();
  45 + dictDataMapper.insert(dictData01);
  46 + SysDictDataDO dictData02 = randomDictDataDO();
  47 + dictDataMapper.insert(dictData02);
  48 +
  49 + // 调用
  50 + dictDataCoreService.initLocalCache();
  51 + // 断言 labelDictDataCache 缓存
  52 + ImmutableTable<String, String, SysDictDataDO> labelDictDataCache =
  53 + (ImmutableTable<String, String, SysDictDataDO>) getFieldValue(dictDataCoreService, "labelDictDataCache");
  54 + assertEquals(2, labelDictDataCache.size());
  55 + assertPojoEquals(dictData01, labelDictDataCache.get(dictData01.getDictType(), dictData01.getLabel()));
  56 + assertPojoEquals(dictData02, labelDictDataCache.get(dictData02.getDictType(), dictData02.getLabel()));
  57 + // 断言 valueDictDataCache 缓存
  58 + ImmutableTable<String, String, SysDictDataDO> valueDictDataCache =
  59 + (ImmutableTable<String, String, SysDictDataDO>) getFieldValue(dictDataCoreService, "valueDictDataCache");
  60 + assertEquals(2, valueDictDataCache.size());
  61 + assertPojoEquals(dictData01, valueDictDataCache.get(dictData01.getDictType(), dictData01.getValue()));
  62 + assertPojoEquals(dictData02, valueDictDataCache.get(dictData02.getDictType(), dictData02.getValue()));
  63 + // 断言 maxUpdateTime 缓存
  64 + Date maxUpdateTime = (Date) getFieldValue(dictDataCoreService, "maxUpdateTime");
  65 + assertEquals(ObjectUtils.max(dictData01.getUpdateTime(), dictData02.getUpdateTime()), maxUpdateTime);
  66 + }
  67 +
  68 + // ========== 随机对象 ==========
  69 +
  70 + @SafeVarargs
  71 + private static SysDictDataDO randomDictDataDO(Consumer<SysDictDataDO>... consumers) {
  72 + Consumer<SysDictDataDO> consumer = (o) -> {
  73 + o.setStatus(randomCommonStatus()); // 保证 status 的范围
  74 + };
  75 + return randomPojo(SysDictDataDO.class, ArrayUtils.append(consumer, consumers));
  76 + }
  77 +
  78 +}
... ...
yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogServiceImplTest.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.logger;
  2 +
  3 +import cn.hutool.core.util.RandomUtil;
  4 +import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
  6 +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.logger.SysLoginLogCoreMapper;
  7 +import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum;
  8 +import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum;
  9 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
  10 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.impl.SysLoginLogCoreServiceImpl;
  11 +import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
  12 +import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
  13 +import org.junit.jupiter.api.Test;
  14 +import org.springframework.context.annotation.Import;
  15 +
  16 +import javax.annotation.Resource;
  17 +
  18 +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
  19 +
  20 +@Import(SysLoginLogCoreServiceImpl.class)
  21 +public class SysLoginLogServiceImplTest extends BaseDbUnitTest {
  22 +
  23 + @Resource
  24 + private SysLoginLogCoreServiceImpl loginLogCoreService;
  25 +
  26 + @Resource
  27 + private SysLoginLogCoreMapper loginLogCoreMapper;
  28 +
  29 + @Test
  30 + public void testCreateLoginLog() {
  31 + SysLoginLogCreateReqDTO reqDTO = RandomUtils.randomPojo(SysLoginLogCreateReqDTO.class, vo -> {
  32 + // 指定随机的范围,避免超出范围入库失败
  33 + vo.setLogType(RandomUtil.randomEle(SysLoginLogTypeEnum.values()).getType());
  34 + vo.setResult(RandomUtil.randomEle(SysLoginResultEnum.values()).getResult());
  35 + vo.setTraceId(TracerUtils.getTraceId());
  36 + });
  37 +
  38 + // 调用
  39 + loginLogCoreService.createLoginLog(reqDTO);
  40 + // 断言,忽略基本字段
  41 + SysLoginLogDO sysLoginLogDO = loginLogCoreMapper.selectOne(null);
  42 + assertPojoEquals(reqDTO, sysLoginLogDO);
  43 + }
  44 +
  45 +}
... ...
yudao-core-service/src/test/resources/sql/clean.sql
... ... @@ -2,3 +2,4 @@
2 2  
3 3 -- sys 开头的 DB
4 4 DELETE FROM "sys_user_session";
  5 +DELETE FROM "sys_dict_data";
... ...
yudao-core-service/src/test/resources/sql/create_tables.sql
... ... @@ -18,3 +18,18 @@ CREATE TABLE IF NOT EXISTS `sys_user_session` (
18 18 PRIMARY KEY (`id`)
19 19 ) COMMENT '用户在线 Session';
20 20  
  21 +CREATE TABLE IF NOT EXISTS "sys_dict_data" (
  22 + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
  23 + "sort" int NOT NULL DEFAULT '0',
  24 + "label" varchar(100) NOT NULL DEFAULT '',
  25 + "value" varchar(100) NOT NULL DEFAULT '',
  26 + "dict_type" varchar(100) NOT NULL DEFAULT '',
  27 + "status" tinyint NOT NULL DEFAULT '0',
  28 + "remark" varchar(500) DEFAULT NULL,
  29 + "creator" varchar(64) DEFAULT '',
  30 + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  31 + "updater" varchar(64) DEFAULT '',
  32 + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  33 + "deleted" bit NOT NULL DEFAULT FALSE,
  34 + PRIMARY KEY ("id")
  35 +) COMMENT '字典数据表';
... ...
yudao-user-server/pom.xml
... ... @@ -20,6 +20,11 @@
20 20 <!-- 业务组件 -->
21 21 <dependency>
22 22 <groupId>cn.iocoder.boot</groupId>
  23 + <artifactId>yudao-core-service</artifactId>
  24 + </dependency>
  25 +
  26 + <dependency>
  27 + <groupId>cn.iocoder.boot</groupId>
23 28 <artifactId>yudao-spring-boot-starter-biz-dict</artifactId>
24 29 </dependency>
25 30 <dependency>
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/UserServerApplication.java
... ... @@ -3,8 +3,8 @@ package cn.iocoder.yudao.userserver;
3 3 import org.springframework.boot.SpringApplication;
4 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
5 5  
6   -@SpringBootApplication
7   -public class UserServerApplication {
  6 +@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package} 和 ${yudao.core-service.base-package}
  7 +@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}", "${yudao.core-service.base-package}"})public class UserServerApplication {
8 8  
9 9 public static void main(String[] args) {
10 10 SpringApplication.run(UserServerApplication.class, args);
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/user/MbrAuthConvert.java
1 1 package cn.iocoder.yudao.userserver.modules.member.convert.user;
2 2  
  3 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
3 4 import cn.iocoder.yudao.framework.security.core.LoginUser;
4 5 import cn.iocoder.yudao.userserver.modules.member.dal.dataobject.user.MbrUserDO;
5 6 import org.mapstruct.Mapper;
... ... @@ -10,6 +11,11 @@ public interface MbrAuthConvert {
10 11  
11 12 MbrAuthConvert INSTANCE = Mappers.getMapper(MbrAuthConvert.class);
12 13  
13   - LoginUser convert(MbrUserDO bean);
  14 + LoginUser convert0(MbrUserDO bean);
  15 +
  16 + default LoginUser convert(MbrUserDO bean) {
  17 + // 目的,为了设置 UserTypeEnum.MEMBER.getValue()
  18 + return convert0(bean).setUserType(UserTypeEnum.MEMBER.getValue());
  19 + }
14 20  
15 21 }
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/auth/impl/MbrAuthServiceImpl.java
1 1 package cn.iocoder.yudao.userserver.modules.member.service.auth.impl;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
  4 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
  5 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
3 6 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
4 7 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
5 8 import cn.iocoder.yudao.framework.security.core.LoginUser;
6 9 import cn.iocoder.yudao.userserver.modules.member.controller.auth.vo.MbrAuthLoginReqVO;
7 10 import cn.iocoder.yudao.userserver.modules.member.convert.user.MbrAuthConvert;
8 11 import cn.iocoder.yudao.userserver.modules.member.dal.dataobject.user.MbrUserDO;
9   -import cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants;
10 12 import cn.iocoder.yudao.userserver.modules.member.service.auth.MbrAuthService;
11 13 import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService;
12   -import cn.iocoder.yudao.userserver.modules.system.enums.logger.SysLoginLogTypeEnum;
13   -import cn.iocoder.yudao.userserver.modules.system.enums.logger.SysLoginResultEnum;
14   -import cn.iocoder.yudao.userserver.modules.system.service.auth.SysUserSessionService;
15   -import cn.iocoder.yudao.userserver.modules.system.service.logger.SysLoginLogService;
16   -import cn.iocoder.yudao.userserver.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
17   -import cn.iocoder.yudao.userserver.modules.system.service.logger.impl.SysLoginLogServiceImpl;
  14 +import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum;
  15 +import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum;
18 16 import lombok.extern.slf4j.Slf4j;
19 17 import org.springframework.context.annotation.Lazy;
20 18 import org.springframework.security.authentication.AuthenticationManager;
... ... @@ -29,7 +27,6 @@ import org.springframework.stereotype.Service;
29 27 import org.springframework.util.Assert;
30 28  
31 29 import javax.annotation.Resource;
32   -
33 30 import java.util.Objects;
34 31  
35 32 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
... ... @@ -51,9 +48,9 @@ public class MbrAuthServiceImpl implements MbrAuthService {
51 48 @Resource
52 49 private MbrUserService userService;
53 50 @Resource
54   - private SysLoginLogService loginLogService;
  51 + private SysLoginLogCoreService loginLogCoreService;
55 52 @Resource
56   - private SysUserSessionService userSessionService;
  53 + private SysUserSessionCoreService userSessionCoreService;
57 54  
58 55 @Override
59 56 public UserDetails loadUserByUsername(String mobile) throws UsernameNotFoundException {
... ... @@ -72,7 +69,7 @@ public class MbrAuthServiceImpl implements MbrAuthService {
72 69 LoginUser loginUser = this.login0(reqVO.getMobile(), reqVO.getPassword());
73 70  
74 71 // 缓存登录用户到 Redis 中,返回 sessionId 编号
75   - return userSessionService.createUserSession(loginUser, userIp, userAgent);
  72 + return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
76 73 }
77 74  
78 75 private LoginUser login0(String username, String password) {
... ... @@ -114,7 +111,7 @@ public class MbrAuthServiceImpl implements MbrAuthService {
114 111 reqDTO.setUserAgent(ServletUtils.getUserAgent());
115 112 reqDTO.setUserIp(ServletUtils.getClientIP());
116 113 reqDTO.setResult(loginResult.getResult());
117   - loginLogService.createLoginLog(reqDTO);
  114 + loginLogCoreService.createLoginLog(reqDTO);
118 115 // 更新最后登录时间
119 116 if (user != null && Objects.equals(SysLoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) {
120 117 userService.updateUserLogin(user.getId(), ServletUtils.getClientIP());
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/logger/SysLoginLogConvert.java deleted
1   -package cn.iocoder.yudao.userserver.modules.system.convert.logger;
2   -
3   -import cn.iocoder.yudao.userserver.modules.system.dal.mysql.logger.SysLoginLogDO;
4   -import cn.iocoder.yudao.userserver.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
5   -import org.mapstruct.Mapper;
6   -import org.mapstruct.factory.Mappers;
7   -
8   -@Mapper
9   -public interface SysLoginLogConvert {
10   -
11   - SysLoginLogConvert INSTANCE = Mappers.getMapper(SysLoginLogConvert.class);
12   -
13   - SysLoginLogDO convert(SysLoginLogCreateReqDTO bean);
14   -
15   -}
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/dataobject/dict/SysDictDataDO.java deleted
1   -package cn.iocoder.yudao.userserver.modules.system.dal.dataobject.dict;
2   -
3   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4   -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5   -import com.baomidou.mybatisplus.annotation.TableId;
6   -import com.baomidou.mybatisplus.annotation.TableName;
7   -import lombok.Data;
8   -import lombok.EqualsAndHashCode;
9   -
10   -/**
11   - * 字典数据表
12   - *
13   - * @author ruoyi
14   - */
15   -@TableName("sys_dict_data")
16   -@Data
17   -@EqualsAndHashCode(callSuper = true)
18   -public class SysDictDataDO extends BaseDO {
19   -
20   - /**
21   - * 字典数据编号
22   - */
23   - @TableId
24   - private Long id;
25   - /**
26   - * 字典排序
27   - */
28   - private Integer sort;
29   - /**
30   - * 字典标签
31   - */
32   - private String label;
33   - /**
34   - * 字典值
35   - */
36   - private String value;
37   - /**
38   - * 字典类型
39   - *
40   - * 冗余 {@link SysDictDataDO#getDictType()}
41   - */
42   - private String dictType;
43   - /**
44   - * 状态
45   - *
46   - * 枚举 {@link CommonStatusEnum}
47   - */
48   - private Integer status;
49   - /**
50   - * 备注
51   - */
52   - private String remark;
53   -
54   -}
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/dataobject/package-info.java deleted
1   -package cn.iocoder.yudao.userserver.modules.system.dal.dataobject;
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/mysql/logger/SysLoginLogDO.java deleted
1   -package cn.iocoder.yudao.userserver.modules.system.dal.mysql.logger;
2   -
3   -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4   -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5   -import cn.iocoder.yudao.userserver.modules.system.enums.logger.SysLoginLogTypeEnum;
6   -import cn.iocoder.yudao.userserver.modules.system.enums.logger.SysLoginResultEnum;
7   -import com.baomidou.mybatisplus.annotation.TableName;
8   -import lombok.Data;
9   -import lombok.EqualsAndHashCode;
10   -import lombok.ToString;
11   -
12   -/**
13   - * 登录日志表
14   - *
15   - * 注意,包括登录和登出两种行为
16   - *
17   - * @author 芋道源码
18   - */
19   -@TableName("sys_login_log")
20   -@Data
21   -@EqualsAndHashCode(callSuper = true)
22   -@ToString(callSuper = true)
23   -public class SysLoginLogDO extends BaseDO {
24   -
25   - /**
26   - * 日志主键
27   - */
28   - private Long id;
29   - /**
30   - * 日志类型
31   - *
32   - * 枚举 {@link SysLoginLogTypeEnum}
33   - */
34   - private Integer logType;
35   - /**
36   - * 链路追踪编号
37   - */
38   - private String traceId;
39   - /**
40   - * 用户编号
41   - */
42   - private Long userId;
43   - /**
44   - * 用户类型
45   - *
46   - * 枚举 {@link UserTypeEnum}
47   - */
48   - private Integer userType;
49   - /**
50   - * 用户账号
51   - *
52   - * 冗余,因为账号可以变更
53   - */
54   - private String username;
55   - /**
56   - * 登录结果
57   - *
58   - * 枚举 {@link SysLoginResultEnum}
59   - */
60   - private Integer result;
61   - /**
62   - * 用户 IP
63   - */
64   - private String userIp;
65   - /**
66   - * 浏览器 UA
67   - */
68   - private String userAgent;
69   -
70   -}
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/package-info.java deleted
1   -package cn.iocoder.yudao.userserver.modules.system.enums;
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/logger/dto/SysLoginLogCreateReqDTO.java deleted
1   -package cn.iocoder.yudao.userserver.modules.system.service.logger.dto;
2   -
3   -import lombok.Data;
4   -
5   -import javax.validation.constraints.NotBlank;
6   -import javax.validation.constraints.NotEmpty;
7   -import javax.validation.constraints.NotNull;
8   -import javax.validation.constraints.Size;
9   -
10   -/**
11   - * 登录日志创建 Request DTO
12   - *
13   - * @author 芋道源码
14   - */
15   -@Data
16   -public class SysLoginLogCreateReqDTO {
17   -
18   - /**
19   - * 日志类型
20   - */
21   - @NotNull(message = "日志类型不能为空")
22   - private Integer logType;
23   - /**
24   - * 链路追踪编号
25   - */
26   - @NotEmpty(message = "链路追踪编号不能为空")
27   - private String traceId;
28   -
29   - /**
30   - * 用户编号
31   - */
32   - private Long userId;
33   - /**
34   - * 用户账号
35   - */
36   - @NotBlank(message = "用户账号不能为空")
37   - @Size(max = 30, message = "用户账号长度不能超过30个字符")
38   - private String username;
39   -
40   - /**
41   - * 登录结果
42   - */
43   - @NotNull(message = "登录结果不能为空")
44   - private Integer result;
45   -
46   - /**
47   - * 用户 IP
48   - */
49   - @NotEmpty(message = "用户 IP 不能为空")
50   - private String userIp;
51   - /**
52   - * 浏览器 UserAgent
53   - */
54   - @NotEmpty(message = "浏览器 UserAgent 不能为空")
55   - private String userAgent;
56   -
57   -}
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/logger/impl/SysLoginLogServiceImpl.java deleted
1   -package cn.iocoder.yudao.userserver.modules.system.service.logger.impl;
2   -
3   -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4   -import cn.iocoder.yudao.userserver.modules.system.convert.logger.SysLoginLogConvert;
5   -import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.logger.SysLoginLogMapper;
6   -import cn.iocoder.yudao.userserver.modules.system.dal.mysql.logger.SysLoginLogDO;
7   -import cn.iocoder.yudao.userserver.modules.system.service.logger.SysLoginLogService;
8   -import cn.iocoder.yudao.userserver.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
9   -import org.springframework.stereotype.Service;
10   -
11   -import javax.annotation.Resource;
12   -
13   -/**
14   - * 登录日志 Service 实现
15   - */
16   -@Service
17   -public class SysLoginLogServiceImpl implements SysLoginLogService {
18   -
19   - @Resource
20   - private SysLoginLogMapper loginLogMapper;
21   -
22   - @Override
23   - public void createLoginLog(SysLoginLogCreateReqDTO reqDTO) {
24   - SysLoginLogDO loginLog = SysLoginLogConvert.INSTANCE.convert(reqDTO);
25   - loginLog.setUserType(UserTypeEnum.MEMBER.getValue());
26   - // 插入
27   - loginLogMapper.insert(loginLog);
28   - }
29   -
30   -}
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/package-info.java deleted
1   -package cn.iocoder.yudao.userserver.modules.system.service;
2 0 \ No newline at end of file
yudao-user-server/src/main/resources/application.yaml
... ... @@ -31,7 +31,7 @@ mybatis-plus:
31 31 logic-delete-value: 1 # 逻辑已删除值(默认为 1)
32 32 logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
33 33 mapper-locations: classpath*:mapper/*.xml
34   - type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject
  34 + type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject, ${yudao.core-service.base-package}.modules.*.dal.dataobject
35 35  
36 36 --- #################### 芋道相关配置 ####################
37 37  
... ... @@ -39,6 +39,8 @@ yudao:
39 39 info:
40 40 version: 1.0.0
41 41 base-package: cn.iocoder.yudao.userserver
  42 + core-service:
  43 + base-package: cn.iocoder.yudao.coreservice
42 44 web:
43 45 api-prefix: /api
44 46 controller-package: ${yudao.info.base-package}
... ...