Commit 3bab9748db4d7e0661afaf365b3789966223145d

Authored by puhui999
1 parent ddb6fe7e

系统操作日志:使用自定义 starter 的方式重新集成 mzt-biz-log

Showing 21 changed files with 187 additions and 128 deletions
yudao-dependencies/pom.xml
... ... @@ -26,7 +26,7 @@
26 26 <mybatis-plus.version>3.5.4.1</mybatis-plus.version>
27 27 <mybatis-plus-generator.version>3.5.4.1</mybatis-plus-generator.version>
28 28 <dynamic-datasource.version>4.2.0</dynamic-datasource.version>
29   - <mybatis-plus-join.version>1.4.7.2</mybatis-plus-join.version>
  29 + <mybatis-plus-join.version>1.4.8.1</mybatis-plus-join.version>
30 30 <redisson.version>3.25.0</redisson.version>
31 31 <dm8.jdbc.version>8.1.3.62</dm8.jdbc.version>
32 32 <!-- 消息队列 -->
... ...
yudao-framework/yudao-spring-boot-starter-biz-operatelog/pom.xml
... ... @@ -46,6 +46,13 @@
46 46 <groupId>com.google.guava</groupId>
47 47 <artifactId>guava</artifactId>
48 48 </dependency>
  49 + <!-- Springboot-注解-通用操作日志组件 -->
  50 + <!-- 此组件解决的问题是: 「谁」在「什么时间」对「什么」做了「什么事」 -->
  51 + <dependency>
  52 + <groupId>io.github.mouzt</groupId>
  53 + <artifactId>bizlog-sdk</artifactId>
  54 + </dependency>
  55 +
49 56 </dependencies>
50 57  
51 58 </project>
... ...
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/config/YudaoOperateLogV2Configuration.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.operatelogv2.config;
  2 +
  3 +import cn.iocoder.yudao.framework.operatelogv2.core.service.ILogRecordServiceImpl;
  4 +import cn.iocoder.yudao.module.system.api.logger.OperateLogApi;
  5 +import com.mzt.logapi.service.ILogRecordService;
  6 +import com.mzt.logapi.starter.annotation.EnableLogRecord;
  7 +import lombok.extern.slf4j.Slf4j;
  8 +import org.springframework.boot.autoconfigure.AutoConfiguration;
  9 +import org.springframework.context.annotation.Bean;
  10 +import org.springframework.context.annotation.Primary;
  11 +
  12 +/**
  13 + * mzt-biz-log 配置类
  14 + *
  15 + * @author HUIHUI
  16 + */
  17 +@EnableLogRecord(tenant = "") // 貌似用不上 tenant 这玩意给个空好啦
  18 +@AutoConfiguration
  19 +@Slf4j
  20 +public class YudaoOperateLogV2Configuration {
  21 +
  22 + @Bean
  23 + @Primary
  24 + public ILogRecordService iLogRecordServiceImpl(OperateLogApi operateLogApi) {
  25 + return new ILogRecordServiceImpl(operateLogApi);
  26 + }
  27 +
  28 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.operatelogv2.core;
0 2 \ No newline at end of file
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/bizlog/service/ILogRecordServiceImpl.java renamed to yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/service/ILogRecordServiceImpl.java
1   -package cn.iocoder.yudao.module.system.framework.bizlog.service;
  1 +package cn.iocoder.yudao.framework.operatelogv2.core.service;
2 2  
3 3 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
4 4 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
5 5 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
6   -import cn.iocoder.yudao.module.system.service.logger.OperateLogService;
7   -import cn.iocoder.yudao.module.system.service.logger.bo.OperateLogV2CreateReqBO;
  6 +import cn.iocoder.yudao.module.system.api.logger.OperateLogApi;
  7 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
8 8 import com.mzt.logapi.beans.LogRecord;
9 9 import com.mzt.logapi.service.ILogRecordService;
10   -import jakarta.annotation.Resource;
11 10 import jakarta.servlet.http.HttpServletRequest;
  11 +import lombok.RequiredArgsConstructor;
12 12 import lombok.extern.slf4j.Slf4j;
13   -import org.springframework.stereotype.Service;
14 13  
15 14 import java.util.Collections;
16 15 import java.util.List;
17 16  
18   -// TODO @puhui999:这个应该搞到 operatelog 组件里哈;
19 17 /**
20 18 * 操作日志 ILogRecordService 实现类
21 19 *
22   - * 基于 {@link OperateLogService} 实现,记录操作日志
  20 + * 基于 {@link OperateLogApi} 实现,记录操作日志
23 21 *
24 22 * @author HUIHUI
25 23 */
26 24 @Slf4j
27   -@Service
  25 +@RequiredArgsConstructor
28 26 public class ILogRecordServiceImpl implements ILogRecordService {
29 27  
30   - @Resource
31   - private OperateLogService operateLogService;
  28 + private final OperateLogApi operateLogApi;
32 29  
33 30 @Override
34 31 public void record(LogRecord logRecord) {
35   - OperateLogV2CreateReqBO reqBO = new OperateLogV2CreateReqBO();
  32 + OperateLogV2CreateReqDTO reqBO = new OperateLogV2CreateReqDTO();
36 33 // 补全通用字段
37 34 reqBO.setTraceId(TracerUtils.getTraceId());
38 35 // 补充用户信息
... ... @@ -42,24 +39,24 @@ public class ILogRecordServiceImpl implements ILogRecordService {
42 39 // 补全请求信息
43 40 fillRequestFields(reqBO);
44 41 // 异步记录日志
45   - operateLogService.createOperateLogV2(reqBO);
  42 + operateLogApi.createOperateLogV2(reqBO);
46 43 log.info("操作日志 ===> {}", reqBO);
47 44 }
48 45  
49   - private static void fillUserFields(OperateLogV2CreateReqBO reqBO) {
  46 + private static void fillUserFields(OperateLogV2CreateReqDTO reqBO) {
50 47 reqBO.setUserId(WebFrameworkUtils.getLoginUserId());
51 48 reqBO.setUserType(WebFrameworkUtils.getLoginUserType());
52 49 }
53 50  
54   - public static void fillModuleFields(OperateLogV2CreateReqBO reqBO, LogRecord logRecord) {
55   - reqBO.setModule(logRecord.getType()); // 大模块类型如 crm-客户
56   - reqBO.setName(logRecord.getSubType());// 操作名称如 转移客户
  51 + public static void fillModuleFields(OperateLogV2CreateReqDTO reqBO, LogRecord logRecord) {
  52 + reqBO.setType(logRecord.getType()); // 大模块类型如 crm-客户
  53 + reqBO.setSubType(logRecord.getSubType());// 操作名称如 转移客户
57 54 reqBO.setBizId(Long.parseLong(logRecord.getBizNo())); // 操作模块业务编号
58 55 reqBO.setContent(logRecord.getAction());// 例如说,修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。
59 56 reqBO.setExtra(logRecord.getExtra()); // 拓展字段,有些复杂的业务,需要记录一些字段 ( JSON 格式 ),例如说,记录订单编号,{ orderId: "1"}
60 57 }
61 58  
62   - private static void fillRequestFields(OperateLogV2CreateReqBO reqBO) {
  59 + private static void fillRequestFields(OperateLogV2CreateReqDTO reqBO) {
63 60 // 获得 Request 对象
64 61 HttpServletRequest request = ServletUtils.getRequest();
65 62 if (request == null) {
... ...
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/vo/OperateLogV2PageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.operatelogv2.core.vo;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +
  7 +@Schema(description = "管理后台 - 操作日志分页 Request VO")
  8 +@Data
  9 +public class OperateLogV2PageReqVO extends PageParam {
  10 +
  11 + @Schema(description = "模块数据编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  12 + private Long bizId;
  13 +
  14 + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  15 + private Long userId;
  16 +
  17 + @Schema(description = "模块类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  18 + private String bizType;
  19 +
  20 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.operatelogv2;
0 2 \ No newline at end of file
... ...
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
1   -cn.iocoder.yudao.framework.operatelog.config.YudaoOperateLogAutoConfiguration
2 1 \ No newline at end of file
  2 +cn.iocoder.yudao.framework.operatelog.config.YudaoOperateLogAutoConfiguration
  3 +cn.iocoder.yudao.framework.operatelogv2.config.YudaoOperateLogV2Configuration
3 4 \ No newline at end of file
... ...
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/LogRecordConstants.java
... ... @@ -22,6 +22,5 @@ public interface LogRecordConstants {
22 22 //======================= 客户转移操作日志 =======================
23 23  
24 24 String TRANSFER_CUSTOMER_LOG_SUCCESS = "把客户【{{#crmCustomer.name}}】的负责人从【{getAdminUserById{#crmCustomer.ownerUserId}}】变更为了【{getAdminUserById{#reqVO.newOwnerUserId}}】";
25   - String TRANSFER_CUSTOMER_LOG_FAIL = ""; // TODO @puhui999:这个可以删除哈,一般不搞失败的日志
26 25  
27 26 }
... ...
yudao-module-system/yudao-module-system-api/pom.xml
... ... @@ -22,32 +22,12 @@
22 22 <artifactId>yudao-common</artifactId>
23 23 </dependency>
24 24  
25   - <!-- TODO @puhui999 & 芋艿:操作日志,要不要这么引入? -->
26   - <!-- Springboot-注解-通用操作日志组件 -->
27   - <!-- 此组件解决的问题是: 「谁」在「什么时间」对「什么」做了「什么事」 -->
28   - <dependency>
29   - <groupId>io.github.mouzt</groupId>
30   - <artifactId>bizlog-sdk</artifactId>
31   - </dependency>
32   -
33   - <!-- TODO @puhui999 & 芋艿:要不要移除掉 -->
34   - <!--工具类相关-->
35   - <dependency>
36   - <groupId>com.fasterxml.jackson.core</groupId>
37   - <artifactId>jackson-databind</artifactId>
38   - </dependency>
39   - <dependency>
40   - <groupId>com.fasterxml.jackson.core</groupId>
41   - <artifactId>jackson-core</artifactId>
42   - </dependency>
43   -
44 25 <!-- 参数校验 -->
45 26 <dependency>
46 27 <groupId>org.springframework.boot</groupId>
47 28 <artifactId>spring-boot-starter-validation</artifactId>
48 29 <optional>true</optional>
49 30 </dependency>
50   -
51 31 </dependencies>
52 32  
53 33 </project>
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/OperateLogApi.java
1 1 package cn.iocoder.yudao.module.system.api.logger;
2 2  
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
3 4 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
  5 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
  6 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
4 7 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2RespDTO;
5 8 import jakarta.validation.Valid;
6 9  
7   -import java.util.List;
8   -
9 10 /**
10 11 * 操作日志 API 接口
11 12 *
... ... @@ -21,12 +22,18 @@ public interface OperateLogApi {
21 22 void createOperateLog(@Valid OperateLogCreateReqDTO createReqDTO);
22 23  
23 24 /**
24   - * 获取指定模块的指定数据的操作日志
  25 + * 创建操作日志
  26 + *
  27 + * @param createReqDTO 请求
  28 + */
  29 + void createOperateLogV2(@Valid OperateLogV2CreateReqDTO createReqDTO);
  30 +
  31 + /**
  32 + * 获取指定模块的指定数据的操作日志分页
25 33 *
26   - * @param module 操作模块
27   - * @param bizId 操作模块编号
28   - * @return 操作日志
  34 + * @param pageReqVO 请求
  35 + * @return 操作日志分页
29 36 */
30   - List<OperateLogV2RespDTO> getOperateLogByModuleAndBizId(String module, Long bizId);
  37 + PageResult<OperateLogV2RespDTO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO);
31 38  
32 39 }
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/bo/OperateLogV2CreateReqBO.java renamed to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogV2CreateReqDTO.java
1   -package cn.iocoder.yudao.module.system.service.logger.bo;
  1 +package cn.iocoder.yudao.module.system.api.logger.dto;
2 2  
3 3 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4 4 import jakarta.validation.constraints.NotEmpty;
  5 +import jakarta.validation.constraints.NotNull;
5 6 import lombok.Data;
6 7  
7 8 /**
... ... @@ -10,7 +11,7 @@ import lombok.Data;
10 11 * @author HUIHUI
11 12 */
12 13 @Data
13   -public class OperateLogV2CreateReqBO {
  14 +public class OperateLogV2CreateReqDTO {
14 15  
15 16 /**
16 17 * 链路追踪编号
... ... @@ -23,29 +24,29 @@ public class OperateLogV2CreateReqBO {
23 24 *
24 25 * 关联 MemberUserDO 的 id 属性,或者 AdminUserDO 的 id 属性
25 26 */
26   - @NotEmpty(message = "用户编号不能为空")
  27 + @NotNull(message = "用户编号不能为空")
27 28 private Long userId;
28 29 /**
29 30 * 用户类型
30 31 *
31 32 * 关联 {@link UserTypeEnum}
32 33 */
33   - @NotEmpty(message = "用户类型不能为空")
  34 + @NotNull(message = "用户类型不能为空")
34 35 private Integer userType;
35 36 /**
36   - * 操作模块
  37 + * 操作模块类型
37 38 */
38   - @NotEmpty(message = "操作模块不能为空")
39   - private String module;
  39 + @NotEmpty(message = "操作模块类型不能为空")
  40 + private String type;
40 41 /**
41 42 * 操作名
42 43 */
43 44 @NotEmpty(message = "操作名不能为空")
44   - private String name;
  45 + private String subType;
45 46 /**
46 47 * 操作模块业务编号
47 48 */
48   - @NotEmpty(message = "操作模块业务编号不能为空")
  49 + @NotNull(message = "操作模块业务编号不能为空")
49 50 private Long bizId;
50 51 /**
51 52 * 操作内容,记录整个操作的明细
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogV2PageReqDTO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.logger.dto;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import lombok.Data;
  5 +
  6 +/**
  7 + * 操作日志分页 Request DTO
  8 + *
  9 + * @author HUIHUI
  10 + */
  11 +@Data
  12 +public class OperateLogV2PageReqDTO extends PageParam {
  13 +
  14 + /**
  15 + * 模块类型
  16 + */
  17 + private String bizType;
  18 + /**
  19 + * 模块数据编号
  20 + */
  21 + private Long bizId;
  22 +
  23 + /**
  24 + * 用户编号
  25 + */
  26 + private Long userId;
  27 +
  28 +}
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogV2RespDTO.java
1 1 package cn.iocoder.yudao.module.system.api.logger.dto;
2 2  
3   -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4   -import com.fasterxml.jackson.annotation.JsonFormat;
5 3 import lombok.Data;
6 4  
7   -import java.time.LocalDateTime;
8   -
9   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
11   -
12 5 /**
13 6 * 系统操作日志 Resp DTO
14 7 *
... ... @@ -26,6 +19,10 @@ public class OperateLogV2RespDTO {
26 19 */
27 20 private Long userId;
28 21 /**
  22 + * 用户名称
  23 + */
  24 + private String userName;
  25 + /**
29 26 * 用户类型
30 27 */
31 28 private Integer userType;
... ... @@ -68,20 +65,8 @@ public class OperateLogV2RespDTO {
68 65 private String userAgent;
69 66  
70 67 /**
71   - * 创建时间
72   - */
73   - // TODO puhui999: 木得效果怎么肥事
74   - @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
75   - private LocalDateTime createTime;
76   -
77   - // TODO @puhui999:下面 2 个字段不用返回;用 userId 哈;返回一个 userName
78   - /**
79   - * 创建者
80   - */
81   - private String creator;
82   - /**
83   - * 创建者名称
  68 + * 创建时间, 直接返回字符串
84 69 */
85   - private String creatorName;
  70 + private String createTime;
86 71  
87 72 }
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/logger/OperateLogApiImpl.java
1 1 package cn.iocoder.yudao.module.system.api.logger;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5 6 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
  7 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
  8 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
6 9 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2RespDTO;
  10 +import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert;
7 11 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
8 12 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
9 13 import cn.iocoder.yudao.module.system.service.logger.OperateLogService;
10 14 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
11 15 import jakarta.annotation.Resource;
  16 +import org.springframework.scheduling.annotation.Async;
12 17 import org.springframework.stereotype.Service;
13 18 import org.springframework.validation.annotation.Validated;
14 19  
15   -import java.util.Collections;
16 20 import java.util.List;
17 21 import java.util.Map;
18 22  
... ... @@ -39,21 +43,31 @@ public class OperateLogApiImpl implements OperateLogApi {
39 43 }
40 44  
41 45 @Override
42   - public List<OperateLogV2RespDTO> getOperateLogByModuleAndBizId(String module, Long bizId) {
43   - List<OperateLogV2DO> logList = operateLogService.getOperateLogByModuleAndBizId(module, bizId);
44   - if (CollUtil.isEmpty(logList)) {
45   - return Collections.emptyList();
  46 + @Async
  47 + public void createOperateLogV2(OperateLogV2CreateReqDTO createReqDTO) {
  48 + operateLogService.createOperateLogV2(createReqDTO);
  49 + }
  50 +
  51 + @Override
  52 + public PageResult<OperateLogV2RespDTO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO) {
  53 + PageResult<OperateLogV2DO> operateLogPage = operateLogService.getOperateLogPage(pageReqVO);
  54 + if (CollUtil.isEmpty(operateLogPage.getList())) {
  55 + return PageResult.empty();
46 56 }
47 57  
48 58 // 获取用户
49   - List<AdminUserDO> userList = adminUserService.getUserList(convertSet(logList, item -> Long.parseLong(item.getCreator())));
  59 + List<AdminUserDO> userList = adminUserService.getUserList(convertSet(operateLogPage.getList(), OperateLogV2DO::getUserId));
  60 + return BeanUtils.toBean(operateLogPage, OperateLogV2RespDTO.class).setList(setUserInfo(operateLogPage.getList(), userList));
  61 + }
  62 +
  63 + private static List<OperateLogV2RespDTO> setUserInfo(List<OperateLogV2DO> logList, List<AdminUserDO> userList) {
50 64 Map<Long, AdminUserDO> userMap = convertMap(userList, AdminUserDO::getId);
51 65 return convertList(logList, item -> {
52   - OperateLogV2RespDTO bean = BeanUtils.toBean(item, OperateLogV2RespDTO.class);
53   - findAndThen(userMap, Long.parseLong(item.getCreator()), user -> {
54   - bean.setCreatorName(user.getNickname());
  66 + OperateLogV2RespDTO respDTO = OperateLogConvert.INSTANCE.convert(item);
  67 + findAndThen(userMap, item.getUserId(), user -> {
  68 + respDTO.setUserName(user.getNickname());
55 69 });
56   - return bean;
  70 + return respDTO;
57 71 });
58 72 }
59 73  
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java
... ... @@ -3,15 +3,20 @@ package cn.iocoder.yudao.module.system.convert.logger;
3 3 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
4 4 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
5 5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  6 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2RespDTO;
6 7 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO;
7 8 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
  9 +import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
8 10 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
9 11 import org.mapstruct.Mapper;
  12 +import org.mapstruct.Mapping;
10 13 import org.mapstruct.factory.Mappers;
11 14  
12 15 import java.util.List;
13 16 import java.util.Map;
14 17  
  18 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  19 +
15 20 @Mapper
16 21 public interface OperateLogConvert {
17 22  
... ... @@ -25,4 +30,7 @@ public interface OperateLogConvert {
25 30 });
26 31 }
27 32  
  33 + @Mapping(target = "createTime", source = "logV2DO.createTime", dateFormat = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  34 + OperateLogV2RespDTO convert(OperateLogV2DO logV2DO);
  35 +
28 36 }
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogV2DO.java
... ... @@ -42,15 +42,14 @@ public class OperateLogV2DO extends BaseDO {
42 42 * 关联 {@link UserTypeEnum}
43 43 */
44 44 private Integer userType;
45   - // TODO @puhui999:module 改成 type,name 改成 subType;
46 45 /**
47   - * 操作模块
  46 + * 操作模块类型
48 47 */
49   - private String module;
  48 + private String type;
50 49 /**
51 50 * 操作名
52 51 */
53   - private String name;
  52 + private String subType;
54 53 /**
55 54 * 操作模块业务编号
56 55 */
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/OperateLogV2Mapper.java
... ... @@ -3,28 +3,29 @@ package cn.iocoder.yudao.module.system.dal.mysql.logger;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  6 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
6 7 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
7 8 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
8 9 import org.apache.ibatis.annotations.Mapper;
9 10  
10 11 import java.util.Collection;
11   -import java.util.List;
12 12  
13 13 @Mapper
14 14 public interface OperateLogV2Mapper extends BaseMapperX<OperateLogV2DO> {
15 15  
16 16 default PageResult<OperateLogV2DO> selectPage(OperateLogPageReqVO reqVO, Collection<Long> userIds) {
17 17 LambdaQueryWrapperX<OperateLogV2DO> query = new LambdaQueryWrapperX<OperateLogV2DO>()
18   - .likeIfPresent(OperateLogV2DO::getModule, reqVO.getModule())
  18 + .likeIfPresent(OperateLogV2DO::getType, reqVO.getModule())
19 19 .inIfPresent(OperateLogV2DO::getUserId, userIds);
20 20 query.orderByDesc(OperateLogV2DO::getId); // 降序
21 21 return selectPage(reqVO, query);
22 22 }
23 23  
24   - default List<OperateLogV2DO> selectListByModuleAndBizId(String module, Long bizId) {
25   - return selectList(new LambdaQueryWrapperX<OperateLogV2DO>()
26   - .eq(OperateLogV2DO::getModule, module)
27   - .eq(OperateLogV2DO::getBizId, bizId)
  24 + default PageResult<OperateLogV2DO> selectPage(OperateLogV2PageReqDTO pageReqVO) {
  25 + return selectPage(pageReqVO, new LambdaQueryWrapperX<OperateLogV2DO>()
  26 + .eqIfPresent(OperateLogV2DO::getType, pageReqVO.getBizType())
  27 + .eqIfPresent(OperateLogV2DO::getBizId, pageReqVO.getBizId())
  28 + .eqIfPresent(OperateLogV2DO::getUserId, pageReqVO.getUserId())
28 29 .orderByDesc(OperateLogV2DO::getCreateTime));
29 30 }
30 31  
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/bizlog/config/YudaoOperateLogV2Configuration.java deleted
1   -package cn.iocoder.yudao.module.system.framework.bizlog.config;
2   -
3   -import com.mzt.logapi.starter.annotation.EnableLogRecord;
4   -import org.springframework.context.annotation.Configuration;
5   -
6   -// TODO @puhui999:挪到 yudao-spring-boot-starter-biz-operatelog 下,搞个 cn.iocoder.yudao.framework.operatelogv2;跑通后,我们直接就删除老的实现了;
7   -/**
8   - * mzt-biz-log 配置类
9   - *
10   - * @author HUIHUI
11   - */
12   -@Configuration(proxyBeanMethods = false)
13   -@EnableLogRecord(tenant = "") // 貌似用不上 tenant 这玩意给个空好啦
14   -public class YudaoOperateLogV2Configuration {
15   -
16   -}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java
... ... @@ -2,12 +2,11 @@ package cn.iocoder.yudao.module.system.service.logger;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
  5 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
  6 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
5 7 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
6 8 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
7 9 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
8   -import cn.iocoder.yudao.module.system.service.logger.bo.OperateLogV2CreateReqBO;
9   -
10   -import java.util.List;
11 10  
12 11 /**
13 12 * 操作日志 Service 接口
... ... @@ -38,16 +37,14 @@ public interface OperateLogService {
38 37 *
39 38 * @param createReqBO 创建请求
40 39 */
41   - void createOperateLogV2(OperateLogV2CreateReqBO createReqBO);
  40 + void createOperateLogV2(OperateLogV2CreateReqDTO createReqBO);
42 41  
43   - // TODO @puhui999:module 改成 type
44 42 /**
45   - * 获取指定模块的指定数据的操作日志
  43 + * 获得操作日志分页列表
46 44 *
47   - * @param module 操作模块
48   - * @param bizId 操作模块编号
49   - * @return 操作日志
  45 + * @param pageReqVO 分页条件
  46 + * @return 操作日志分页列表
50 47 */
51   - List<OperateLogV2DO> getOperateLogByModuleAndBizId(String module, Long bizId);
  48 + PageResult<OperateLogV2DO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO);
52 49  
53 50 }
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java
... ... @@ -6,13 +6,14 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7 7 import cn.iocoder.yudao.framework.common.util.string.StrUtils;
8 8 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
  9 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
  10 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
9 11 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
10 12 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
11 13 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
12 14 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
13 15 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper;
14 16 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogV2Mapper;
15   -import cn.iocoder.yudao.module.system.service.logger.bo.OperateLogV2CreateReqBO;
16 17 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
17 18 import jakarta.annotation.Resource;
18 19 import lombok.extern.slf4j.Slf4j;
... ... @@ -20,7 +21,6 @@ import org.springframework.stereotype.Service;
20 21 import org.springframework.validation.annotation.Validated;
21 22  
22 23 import java.util.Collection;
23   -import java.util.List;
24 24  
25 25 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
26 26 import static cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO.JAVA_METHOD_ARGS_MAX_LENGTH;
... ... @@ -69,14 +69,15 @@ public class OperateLogServiceImpl implements OperateLogService {
69 69 // ======================= LOG V2 =======================
70 70  
71 71 @Override
72   - public void createOperateLogV2(OperateLogV2CreateReqBO createReqBO) {
  72 + public void createOperateLogV2(OperateLogV2CreateReqDTO createReqBO) {
73 73 OperateLogV2DO log = BeanUtils.toBean(createReqBO, OperateLogV2DO.class);
74 74 operateLogV2Mapper.insert(log);
75 75 }
76 76  
  77 +
77 78 @Override
78   - public List<OperateLogV2DO> getOperateLogByModuleAndBizId(String module, Long bizId) {
79   - return operateLogV2Mapper.selectListByModuleAndBizId(module, bizId);
  79 + public PageResult<OperateLogV2DO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO) {
  80 + return operateLogV2Mapper.selectPage(pageReqVO);
80 81 }
81 82  
82 83 }
... ...