Commit 3bab9748db4d7e0661afaf365b3789966223145d
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
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
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 | } | ... | ... |