Prechádzať zdrojové kódy

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

puhui999 1 rok pred
rodič
commit
3bab9748db
21 zmenil súbory, kde vykonal 187 pridanie a 128 odobranie
  1. 1 1
      yudao-dependencies/pom.xml
  2. 7 0
      yudao-framework/yudao-spring-boot-starter-biz-operatelog/pom.xml
  3. 28 0
      yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/config/YudaoOperateLogV2Configuration.java
  4. 1 0
      yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/package-info.java
  5. 14 17
      yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/service/ILogRecordServiceImpl.java
  6. 20 0
      yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/vo/OperateLogV2PageReqVO.java
  7. 1 0
      yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/package-info.java
  8. 2 1
      yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  9. 0 1
      yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/LogRecordConstants.java
  10. 0 20
      yudao-module-system/yudao-module-system-api/pom.xml
  11. 14 7
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/OperateLogApi.java
  12. 10 9
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogV2CreateReqDTO.java
  13. 28 0
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogV2PageReqDTO.java
  14. 6 21
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogV2RespDTO.java
  15. 24 10
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/logger/OperateLogApiImpl.java
  16. 8 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java
  17. 3 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogV2DO.java
  18. 7 6
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/OperateLogV2Mapper.java
  19. 0 16
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/bizlog/config/YudaoOperateLogV2Configuration.java
  20. 7 10
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java
  21. 6 5
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java

+ 1 - 1
yudao-dependencies/pom.xml

@@ -26,7 +26,7 @@
         <mybatis-plus.version>3.5.4.1</mybatis-plus.version>
         <mybatis-plus-generator.version>3.5.4.1</mybatis-plus-generator.version>
         <dynamic-datasource.version>4.2.0</dynamic-datasource.version>
-        <mybatis-plus-join.version>1.4.7.2</mybatis-plus-join.version>
+        <mybatis-plus-join.version>1.4.8.1</mybatis-plus-join.version>
         <redisson.version>3.25.0</redisson.version>
         <dm8.jdbc.version>8.1.3.62</dm8.jdbc.version>
         <!-- 消息队列 -->

+ 7 - 0
yudao-framework/yudao-spring-boot-starter-biz-operatelog/pom.xml

@@ -46,6 +46,13 @@
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
+        <!-- Springboot-注解-通用操作日志组件 -->
+        <!-- 此组件解决的问题是: 「谁」在「什么时间」对「什么」做了「什么事」 -->
+        <dependency>
+            <groupId>io.github.mouzt</groupId>
+            <artifactId>bizlog-sdk</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 28 - 0
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/config/YudaoOperateLogV2Configuration.java

@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.framework.operatelogv2.config;
+
+import cn.iocoder.yudao.framework.operatelogv2.core.service.ILogRecordServiceImpl;
+import cn.iocoder.yudao.module.system.api.logger.OperateLogApi;
+import com.mzt.logapi.service.ILogRecordService;
+import com.mzt.logapi.starter.annotation.EnableLogRecord;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Primary;
+
+/**
+ * mzt-biz-log 配置类
+ *
+ * @author HUIHUI
+ */
+@EnableLogRecord(tenant = "") // 貌似用不上 tenant 这玩意给个空好啦
+@AutoConfiguration
+@Slf4j
+public class YudaoOperateLogV2Configuration {
+
+    @Bean
+    @Primary
+    public ILogRecordService iLogRecordServiceImpl(OperateLogApi operateLogApi) {
+        return new ILogRecordServiceImpl(operateLogApi);
+    }
+
+}

+ 1 - 0
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/package-info.java

@@ -0,0 +1 @@
+package cn.iocoder.yudao.framework.operatelogv2.core;

+ 14 - 17
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/bizlog/service/ILogRecordServiceImpl.java → yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/service/ILogRecordServiceImpl.java

@@ -1,38 +1,35 @@
-package cn.iocoder.yudao.module.system.framework.bizlog.service;
+package cn.iocoder.yudao.framework.operatelogv2.core.service;
 
 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
-import cn.iocoder.yudao.module.system.service.logger.OperateLogService;
-import cn.iocoder.yudao.module.system.service.logger.bo.OperateLogV2CreateReqBO;
+import cn.iocoder.yudao.module.system.api.logger.OperateLogApi;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
 import com.mzt.logapi.beans.LogRecord;
 import com.mzt.logapi.service.ILogRecordService;
-import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletRequest;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
 
 import java.util.Collections;
 import java.util.List;
 
-// TODO @puhui999:这个应该搞到 operatelog 组件里哈;
 /**
  * 操作日志 ILogRecordService 实现类
  *
- * 基于 {@link OperateLogService} 实现,记录操作日志
+ * 基于 {@link OperateLogApi} 实现,记录操作日志
  *
  * @author HUIHUI
  */
 @Slf4j
-@Service
+@RequiredArgsConstructor
 public class ILogRecordServiceImpl implements ILogRecordService {
 
-    @Resource
-    private OperateLogService operateLogService;
+    private final OperateLogApi operateLogApi;
 
     @Override
     public void record(LogRecord logRecord) {
-        OperateLogV2CreateReqBO reqBO = new OperateLogV2CreateReqBO();
+        OperateLogV2CreateReqDTO reqBO = new OperateLogV2CreateReqDTO();
         // 补全通用字段
         reqBO.setTraceId(TracerUtils.getTraceId());
         // 补充用户信息
@@ -42,24 +39,24 @@ public class ILogRecordServiceImpl implements ILogRecordService {
         // 补全请求信息
         fillRequestFields(reqBO);
         // 异步记录日志
-        operateLogService.createOperateLogV2(reqBO);
+        operateLogApi.createOperateLogV2(reqBO);
         log.info("操作日志 ===> {}", reqBO);
     }
 
-    private static void fillUserFields(OperateLogV2CreateReqBO reqBO) {
+    private static void fillUserFields(OperateLogV2CreateReqDTO reqBO) {
         reqBO.setUserId(WebFrameworkUtils.getLoginUserId());
         reqBO.setUserType(WebFrameworkUtils.getLoginUserType());
     }
 
-    public static void fillModuleFields(OperateLogV2CreateReqBO reqBO, LogRecord logRecord) {
-        reqBO.setModule(logRecord.getType()); // 大模块类型如 crm-客户
-        reqBO.setName(logRecord.getSubType());// 操作名称如 转移客户
+    public static void fillModuleFields(OperateLogV2CreateReqDTO reqBO, LogRecord logRecord) {
+        reqBO.setType(logRecord.getType()); // 大模块类型如 crm-客户
+        reqBO.setSubType(logRecord.getSubType());// 操作名称如 转移客户
         reqBO.setBizId(Long.parseLong(logRecord.getBizNo())); // 操作模块业务编号
         reqBO.setContent(logRecord.getAction());// 例如说,修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。
         reqBO.setExtra(logRecord.getExtra()); // 拓展字段,有些复杂的业务,需要记录一些字段 ( JSON 格式 ),例如说,记录订单编号,{ orderId: "1"}
     }
 
-    private static void fillRequestFields(OperateLogV2CreateReqBO reqBO) {
+    private static void fillRequestFields(OperateLogV2CreateReqDTO reqBO) {
         // 获得 Request 对象
         HttpServletRequest request = ServletUtils.getRequest();
         if (request == null) {

+ 20 - 0
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/vo/OperateLogV2PageReqVO.java

@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.framework.operatelogv2.core.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 操作日志分页 Request VO")
+@Data
+public class OperateLogV2PageReqVO extends PageParam {
+
+    @Schema(description = "模块数据编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long bizId;
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long userId;
+
+    @Schema(description = "模块类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private String bizType;
+
+}

+ 1 - 0
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/package-info.java

@@ -0,0 +1 @@
+package cn.iocoder.yudao.framework.operatelogv2;

+ 2 - 1
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -1 +1,2 @@
-cn.iocoder.yudao.framework.operatelog.config.YudaoOperateLogAutoConfiguration
+cn.iocoder.yudao.framework.operatelog.config.YudaoOperateLogAutoConfiguration
+cn.iocoder.yudao.framework.operatelogv2.config.YudaoOperateLogV2Configuration

+ 0 - 1
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 {
     //======================= 客户转移操作日志 =======================
 
     String TRANSFER_CUSTOMER_LOG_SUCCESS = "把客户【{{#crmCustomer.name}}】的负责人从【{getAdminUserById{#crmCustomer.ownerUserId}}】变更为了【{getAdminUserById{#reqVO.newOwnerUserId}}】";
-    String TRANSFER_CUSTOMER_LOG_FAIL = ""; // TODO @puhui999:这个可以删除哈,一般不搞失败的日志
 
 }

+ 0 - 20
yudao-module-system/yudao-module-system-api/pom.xml

@@ -22,32 +22,12 @@
             <artifactId>yudao-common</artifactId>
         </dependency>
 
-        <!-- TODO @puhui999 & 芋艿:操作日志,要不要这么引入? -->
-        <!-- Springboot-注解-通用操作日志组件 -->
-        <!-- 此组件解决的问题是: 「谁」在「什么时间」对「什么」做了「什么事」 -->
-        <dependency>
-            <groupId>io.github.mouzt</groupId>
-            <artifactId>bizlog-sdk</artifactId>
-        </dependency>
-
-        <!-- TODO @puhui999 & 芋艿:要不要移除掉 -->
-        <!--工具类相关-->
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
-        </dependency>
-
         <!-- 参数校验 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-validation</artifactId>
             <optional>true</optional>
         </dependency>
-
     </dependencies>
 
 </project>

+ 14 - 7
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/OperateLogApi.java

@@ -1,11 +1,12 @@
 package cn.iocoder.yudao.module.system.api.logger;
 
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2RespDTO;
 import jakarta.validation.Valid;
 
-import java.util.List;
-
 /**
  * 操作日志 API 接口
  *
@@ -21,12 +22,18 @@ public interface OperateLogApi {
     void createOperateLog(@Valid OperateLogCreateReqDTO createReqDTO);
 
     /**
-     * 获取指定模块的指定数据的操作日志
+     * 创建操作日志
+     *
+     * @param createReqDTO 请求
+     */
+    void createOperateLogV2(@Valid OperateLogV2CreateReqDTO createReqDTO);
+
+    /**
+     * 获取指定模块的指定数据的操作日志分页
      *
-     * @param module 操作模块
-     * @param bizId  操作模块编号
-     * @return 操作日志
+     * @param pageReqVO 请求
+     * @return 操作日志分页
      */
-    List<OperateLogV2RespDTO> getOperateLogByModuleAndBizId(String module, Long bizId);
+    PageResult<OperateLogV2RespDTO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO);
 
 }

+ 10 - 9
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/bo/OperateLogV2CreateReqBO.java → yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogV2CreateReqDTO.java

@@ -1,7 +1,8 @@
-package cn.iocoder.yudao.module.system.service.logger.bo;
+package cn.iocoder.yudao.module.system.api.logger.dto;
 
 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
 import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 /**
@@ -10,7 +11,7 @@ import lombok.Data;
  * @author HUIHUI
  */
 @Data
-public class OperateLogV2CreateReqBO {
+public class OperateLogV2CreateReqDTO {
 
     /**
      * 链路追踪编号
@@ -23,29 +24,29 @@ public class OperateLogV2CreateReqBO {
      *
      * 关联 MemberUserDO 的 id 属性,或者 AdminUserDO 的 id 属性
      */
-    @NotEmpty(message = "用户编号不能为空")
+    @NotNull(message = "用户编号不能为空")
     private Long userId;
     /**
      * 用户类型
      *
      * 关联 {@link  UserTypeEnum}
      */
-    @NotEmpty(message = "用户类型不能为空")
+    @NotNull(message = "用户类型不能为空")
     private Integer userType;
     /**
-     * 操作模块
+     * 操作模块类型
      */
-    @NotEmpty(message = "操作模块不能为空")
-    private String module;
+    @NotEmpty(message = "操作模块类型不能为空")
+    private String type;
     /**
      * 操作名
      */
     @NotEmpty(message = "操作名不能为空")
-    private String name;
+    private String subType;
     /**
      * 操作模块业务编号
      */
-    @NotEmpty(message = "操作模块业务编号不能为空")
+    @NotNull(message = "操作模块业务编号不能为空")
     private Long bizId;
     /**
      * 操作内容,记录整个操作的明细

+ 28 - 0
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogV2PageReqDTO.java

@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.module.system.api.logger.dto;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import lombok.Data;
+
+/**
+ * 操作日志分页 Request DTO
+ *
+ * @author HUIHUI
+ */
+@Data
+public class OperateLogV2PageReqDTO extends PageParam {
+
+    /**
+     * 模块类型
+     */
+    private String bizType;
+    /**
+     * 模块数据编号
+     */
+    private Long bizId;
+
+    /**
+     * 用户编号
+     */
+    private Long userId;
+
+}

+ 6 - 21
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogV2RespDTO.java

@@ -1,14 +1,7 @@
 package cn.iocoder.yudao.module.system.api.logger.dto;
 
-import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
-
 /**
  * 系统操作日志 Resp DTO
  *
@@ -25,6 +18,10 @@ public class OperateLogV2RespDTO {
      * 用户编号
      */
     private Long userId;
+    /**
+     * 用户名称
+     */
+    private String userName;
     /**
      * 用户类型
      */
@@ -68,20 +65,8 @@ public class OperateLogV2RespDTO {
     private String userAgent;
 
     /**
-     * 创建时间
-     */
-    // TODO puhui999: 木得效果怎么肥事
-    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
-    private LocalDateTime createTime;
-
-    // TODO @puhui999:下面 2 个字段不用返回;用 userId 哈;返回一个 userName
-    /**
-     * 创建者
-     */
-    private String creator;
-    /**
-     * 创建者名称
+     * 创建时间, 直接返回字符串
      */
-    private String creatorName;
+    private String createTime;
 
 }

+ 24 - 10
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/logger/OperateLogApiImpl.java

@@ -1,18 +1,22 @@
 package cn.iocoder.yudao.module.system.api.logger;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2RespDTO;
+import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.service.logger.OperateLogService;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import jakarta.annotation.Resource;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -39,21 +43,31 @@ public class OperateLogApiImpl implements OperateLogApi {
     }
 
     @Override
-    public List<OperateLogV2RespDTO> getOperateLogByModuleAndBizId(String module, Long bizId) {
-        List<OperateLogV2DO> logList = operateLogService.getOperateLogByModuleAndBizId(module, bizId);
-        if (CollUtil.isEmpty(logList)) {
-            return Collections.emptyList();
+    @Async
+    public void createOperateLogV2(OperateLogV2CreateReqDTO createReqDTO) {
+        operateLogService.createOperateLogV2(createReqDTO);
+    }
+
+    @Override
+    public PageResult<OperateLogV2RespDTO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO) {
+        PageResult<OperateLogV2DO> operateLogPage = operateLogService.getOperateLogPage(pageReqVO);
+        if (CollUtil.isEmpty(operateLogPage.getList())) {
+            return PageResult.empty();
         }
 
         // 获取用户
-        List<AdminUserDO> userList = adminUserService.getUserList(convertSet(logList, item -> Long.parseLong(item.getCreator())));
+        List<AdminUserDO> userList = adminUserService.getUserList(convertSet(operateLogPage.getList(), OperateLogV2DO::getUserId));
+        return BeanUtils.toBean(operateLogPage, OperateLogV2RespDTO.class).setList(setUserInfo(operateLogPage.getList(), userList));
+    }
+
+    private static List<OperateLogV2RespDTO> setUserInfo(List<OperateLogV2DO> logList, List<AdminUserDO> userList) {
         Map<Long, AdminUserDO> userMap = convertMap(userList, AdminUserDO::getId);
         return convertList(logList, item -> {
-            OperateLogV2RespDTO bean = BeanUtils.toBean(item, OperateLogV2RespDTO.class);
-            findAndThen(userMap, Long.parseLong(item.getCreator()), user -> {
-                bean.setCreatorName(user.getNickname());
+            OperateLogV2RespDTO respDTO = OperateLogConvert.INSTANCE.convert(item);
+            findAndThen(userMap, item.getUserId(), user -> {
+                respDTO.setUserName(user.getNickname());
             });
-            return bean;
+            return respDTO;
         });
     }
 

+ 8 - 0
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;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2RespDTO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
 import org.mapstruct.factory.Mappers;
 
 import java.util.List;
 import java.util.Map;
 
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
 @Mapper
 public interface OperateLogConvert {
 
@@ -25,4 +30,7 @@ public interface OperateLogConvert {
         });
     }
 
+    @Mapping(target = "createTime", source = "logV2DO.createTime", dateFormat = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    OperateLogV2RespDTO convert(OperateLogV2DO logV2DO);
+
 }

+ 3 - 4
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 {
      * 关联 {@link  UserTypeEnum}
      */
     private Integer userType;
-    // TODO @puhui999:module 改成 type,name 改成 subType;
     /**
-     * 操作模块
+     * 操作模块类型
      */
-    private String module;
+    private String type;
     /**
      * 操作名
      */
-    private String name;
+    private String subType;
     /**
      * 操作模块业务编号
      */

+ 7 - 6
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;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.Collection;
-import java.util.List;
 
 @Mapper
 public interface OperateLogV2Mapper extends BaseMapperX<OperateLogV2DO> {
 
     default PageResult<OperateLogV2DO> selectPage(OperateLogPageReqVO reqVO, Collection<Long> userIds) {
         LambdaQueryWrapperX<OperateLogV2DO> query = new LambdaQueryWrapperX<OperateLogV2DO>()
-                .likeIfPresent(OperateLogV2DO::getModule, reqVO.getModule())
+                .likeIfPresent(OperateLogV2DO::getType, reqVO.getModule())
                 .inIfPresent(OperateLogV2DO::getUserId, userIds);
         query.orderByDesc(OperateLogV2DO::getId); // 降序
         return selectPage(reqVO, query);
     }
 
-    default List<OperateLogV2DO> selectListByModuleAndBizId(String module, Long bizId) {
-        return selectList(new LambdaQueryWrapperX<OperateLogV2DO>()
-                .eq(OperateLogV2DO::getModule, module)
-                .eq(OperateLogV2DO::getBizId, bizId)
+    default PageResult<OperateLogV2DO> selectPage(OperateLogV2PageReqDTO pageReqVO) {
+        return selectPage(pageReqVO, new LambdaQueryWrapperX<OperateLogV2DO>()
+                .eqIfPresent(OperateLogV2DO::getType, pageReqVO.getBizType())
+                .eqIfPresent(OperateLogV2DO::getBizId, pageReqVO.getBizId())
+                .eqIfPresent(OperateLogV2DO::getUserId, pageReqVO.getUserId())
                 .orderByDesc(OperateLogV2DO::getCreateTime));
     }
 

+ 0 - 16
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/bizlog/config/YudaoOperateLogV2Configuration.java

@@ -1,16 +0,0 @@
-package cn.iocoder.yudao.module.system.framework.bizlog.config;
-
-import com.mzt.logapi.starter.annotation.EnableLogRecord;
-import org.springframework.context.annotation.Configuration;
-
-// TODO @puhui999:挪到 yudao-spring-boot-starter-biz-operatelog 下,搞个 cn.iocoder.yudao.framework.operatelogv2;跑通后,我们直接就删除老的实现了;
-/**
- * mzt-biz-log 配置类
- *
- * @author HUIHUI
- */
-@Configuration(proxyBeanMethods = false)
-@EnableLogRecord(tenant = "") // 貌似用不上 tenant 这玩意给个空好啦
-public class YudaoOperateLogV2Configuration {
-
-}

+ 7 - 10
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;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
-import cn.iocoder.yudao.module.system.service.logger.bo.OperateLogV2CreateReqBO;
-
-import java.util.List;
 
 /**
  * 操作日志 Service 接口
@@ -38,16 +37,14 @@ public interface OperateLogService {
      *
      * @param createReqBO 创建请求
      */
-    void createOperateLogV2(OperateLogV2CreateReqBO createReqBO);
+    void createOperateLogV2(OperateLogV2CreateReqDTO createReqBO);
 
-    // TODO @puhui999:module 改成 type
     /**
-     * 获取指定模块的指定数据的操作日志
+     * 获得操作日志分页列表
      *
-     * @param module 操作模块
-     * @param bizId  操作模块编号
-     * @return 操作日志
+     * @param pageReqVO 分页条件
+     * @return 操作日志分页列表
      */
-    List<OperateLogV2DO> getOperateLogByModuleAndBizId(String module, Long bizId);
+    PageResult<OperateLogV2DO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO);
 
 }

+ 6 - 5
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;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.common.util.string.StrUtils;
 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
+import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogV2Mapper;
-import cn.iocoder.yudao.module.system.service.logger.bo.OperateLogV2CreateReqBO;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
@@ -20,7 +21,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import java.util.Collection;
-import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 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 {
     // ======================= LOG V2 =======================
 
     @Override
-    public void createOperateLogV2(OperateLogV2CreateReqBO createReqBO) {
+    public void createOperateLogV2(OperateLogV2CreateReqDTO createReqBO) {
         OperateLogV2DO log = BeanUtils.toBean(createReqBO, OperateLogV2DO.class);
         operateLogV2Mapper.insert(log);
     }
 
+
     @Override
-    public List<OperateLogV2DO> getOperateLogByModuleAndBizId(String module, Long bizId) {
-        return operateLogV2Mapper.selectListByModuleAndBizId(module, bizId);
+    public PageResult<OperateLogV2DO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO) {
+        return operateLogV2Mapper.selectPage(pageReqVO);
     }
 
 }