Browse Source

做了标本审批模块的部分日志

hyy 9 months ago
parent
commit
95e60e7934
19 changed files with 101 additions and 39 deletions
  1. 2 2
      yudao-module-museums/yudao-module-museums-api/src/main/java/cn/iocoder/yudao/module/museums/enums/social/LogRecordConstants.java
  2. 6 0
      yudao-module-museums/yudao-module-museums-biz/pom.xml
  3. 2 3
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/photos/PhotosController.java
  4. 16 0
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/SpecimenInfoController.java
  5. 3 0
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenImportRespVO.java
  6. 0 3
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundOutgoingReqVO.java
  7. 3 0
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundPageReqVO.java
  8. 4 0
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundSaveReqVO.java
  9. 1 2
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/dal/dataobject/specimeninfo/SpecimenInfoDO.java
  10. 4 5
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/dal/dataobject/specimenoutbound/SpecimenOutboundDO.java
  11. 4 0
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/dal/mysql/specimeninfo/SpecimenInfoMapper.java
  12. 0 2
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimeninfo/SpecimenInfoService.java
  13. 22 12
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimeninfo/SpecimenInfoServiceImpl.java
  14. 2 5
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimenoutbound/SpecimenOutboundServiceImpl.java
  15. 0 5
      yudao-module-museums/yudao-module-museums-biz/src/main/resources/mapper/specimeninfo/SpecimenInfoMapper.xml
  16. 5 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/OperateLogMapper.java
  17. 11 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java
  18. 6 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java
  19. 10 0
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/OperateLogMapper.xml

+ 2 - 2
yudao-module-museums/yudao-module-museums-api/src/main/java/cn/iocoder/yudao/module/museums/enums/social/LogRecordConstants.java

@@ -21,8 +21,8 @@ public interface LogRecordConstants {
     // ======================= SPECIMEN 导入 =======================
     String SPECIMEN_IMPORT_TYPE = "MUSEUMS 标本导入";
     String SPECIMEN_IMPORT_SUB_TYPE = "导入标本";
-    String SPECIMEN_IMPORT_SUCCESS = "成功导入标本,总数量: {{#totalImported}}";
-
+    String SPECIMEN_IMPORT_SUCCESS = "成功导入标本";
+    String SPECIMEN_IMPORT_SUCCESS_ID = "{{#extra}}";
 
     // ======================= SPECIMEN_OUTBOUND 相关日志 =======================
 //    String SYSTEM_SPECIMEN_TYPE = "MUSEUMS 标本出库单";

+ 6 - 0
yudao-module-museums/yudao-module-museums-biz/pom.xml

@@ -103,6 +103,12 @@
             <version>2.2.0-jdk8-snapshot</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-module-system-biz</artifactId>
+            <version>2.2.0-jdk8-snapshot</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

+ 2 - 3
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/photos/PhotosController.java

@@ -46,12 +46,12 @@ public class PhotosController {
     @PostMapping("/create")
     @Operation(summary = "创建博物馆照片")
     @PreAuthorize("@ss.hasPermission('museums:photos:create')")
-    public CommonResult<Integer> createPhotos(@Valid @RequestBody PhotosSaveReqVO createReqVO) {
+    public CommonResult<Boolean> createPhotos(@Valid @RequestBody PhotosSaveReqVO createReqVO) {
         List<String> photoUrlList = createReqVO.getPhotoUrl();
         for (String url :photoUrlList){
             photosService.TcreatePhotos(url,createReqVO.getGroupId());
         }
-        return null;
+        return success(true);
     }
 
 
@@ -127,5 +127,4 @@ public class PhotosController {
         }
     }
 
-
 }

+ 16 - 0
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/SpecimenInfoController.java

@@ -4,6 +4,9 @@ import cn.iocoder.yudao.module.museums.enums.common.CollectionStatusEnum;
 import cn.iocoder.yudao.module.museums.enums.common.PreservationTypeEnum;
 import cn.iocoder.yudao.module.museums.enums.common.SourceEnum;
 import cn.iocoder.yudao.module.museums.enums.common.SpecimenTypeEnum;
+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.service.logger.OperateLogService;
 import io.swagger.v3.oas.annotations.Parameters;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -51,6 +54,8 @@ public class SpecimenInfoController {
 
     @Resource
     private SpecimenInfoService specimenInfoService;
+    @Resource
+    private OperateLogService operateLogService;
 
     @PostMapping("/create")
     @Operation(summary = "创建标本管理")
@@ -325,4 +330,15 @@ public class SpecimenInfoController {
         return success(list); // 返回整个列表
     }
 
+    @GetMapping("/logs")
+    @Operation(summary = "获得标本相关的系统日志")
+    @Parameter(name = "specimenId", description = "标本编号", required = true, example = "1024")
+    @Parameter(name = "moduleType", description = "操作模块类型", required = true, example = "MUSEUMS 标本")
+    public CommonResult<List<OperateLogRespVO>> getSpecimenLogs(
+            @RequestParam("specimenId") Integer specimenId,
+            @RequestParam("moduleType") String moduleType) {
+        List<OperateLogDO> logs = operateLogService.getLogsBySpecimenIdAndType(specimenId, moduleType);
+        return success(BeanUtils.toBean(logs, OperateLogRespVO.class));
+    }
+
 }

+ 3 - 0
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenImportRespVO.java

@@ -24,6 +24,9 @@ public class SpecimenImportRespVO {
     @Schema(description = "导入失败的标本集合,key 为标本编号,value 为失败原因", requiredMode = Schema.RequiredMode.REQUIRED)
     private Map<String, String> failureSpecimenNumbers;
 
+    @Schema(description = "成功导入的标本id", requiredMode = Schema.RequiredMode.REQUIRED)
+    private List<Long> createdSpecimenIds; // 新增字段
+
 //    @Schema(description = "创建成功的图片名称数组", requiredMode = Schema.RequiredMode.REQUIRED)
 //    private List<String> createSpecimenImages;
 //

+ 0 - 3
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundOutgoingReqVO.java

@@ -36,7 +36,6 @@ public class SpecimenOutboundOutgoingReqVO {
     @NotEmpty(message = "申请出库的用途不能为空")
     private String applicationUsage;
 
-
     @Schema(description = "审批状态", example = "2")
     private Integer status;
 
@@ -55,6 +54,4 @@ public class SpecimenOutboundOutgoingReqVO {
     @Schema(description = "出库员")
     private Long operator;
 
-
-
 }

+ 3 - 0
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundPageReqVO.java

@@ -80,4 +80,7 @@ public class SpecimenOutboundPageReqVO extends PageParam {
     @Schema(description = "审批员")
     private Long approveUsers;
 
+    @Schema(description = "预计退还时间")
+    private LocalDateTime estimatedReturnTime;
+
 }

+ 4 - 0
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundSaveReqVO.java

@@ -53,6 +53,10 @@ public class SpecimenOutboundSaveReqVO {
     @DiffLogField(name = "备注信息")
     private String remarks;
 
+    @Schema(description = "预计退还时间")
+    @DiffLogField(name = "预计退还时间时间")
+    private LocalDateTime estimatedReturnTime;
+
 //    @Schema(description = "出库时间")
 //    private LocalDateTime outgoingTime;
 //

+ 1 - 2
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/dal/dataobject/specimeninfo/SpecimenInfoDO.java

@@ -34,7 +34,7 @@ public class SpecimenInfoDO extends BaseDO {
      * 主键
      */
     @TableId
-    private Integer id;
+    private Long id;
     /**
      * 标本类型(矿物、岩石、矿石、化石、陨石)
      *
@@ -168,7 +168,6 @@ public class SpecimenInfoDO extends BaseDO {
      * 标本价格
      */
     private BigDecimal specimenPrice;
-
     /**
      * 新加的
      */

+ 4 - 5
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/dal/dataobject/specimenoutbound/SpecimenOutboundDO.java

@@ -117,11 +117,10 @@ public class SpecimenOutboundDO extends BaseDO {
      * 二审批者
      */
     private Long twoApproveUsers;
-
-
-
-
-
+    /**
+     * 预计退还时间
+     */
+    private LocalDateTime estimatedReturnTime;
 
 
 

+ 4 - 0
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/dal/mysql/specimeninfo/SpecimenInfoMapper.java

@@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.module.museums.dal.dataobject.specimeninfo.SpecimenInfoDO;
 import cn.iocoder.yudao.module.museums.dal.dataobject.specimenoutbound.SpecimenOutboundDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.ibatis.annotations.Mapper;
 import cn.iocoder.yudao.module.museums.controller.admin.specimeninfo.vo.*;
@@ -164,4 +165,7 @@ public interface SpecimenInfoMapper extends BaseMapperX<SpecimenInfoDO> {
     boolean existsByNumber(String number);
 
 
+
+
+
 }

+ 0 - 2
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimeninfo/SpecimenInfoService.java

@@ -122,6 +122,4 @@ public interface SpecimenInfoService {
 
 
 
-
-
 }

+ 22 - 12
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimeninfo/SpecimenInfoServiceImpl.java

@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.museums.dal.dataobject.specimenoutbound.SpecimenOutboundDO;
 import cn.iocoder.yudao.module.museums.dal.mysql.specimenoutbound.SpecimenOutboundMapper;
 import cn.iocoder.yudao.module.museums.enums.social.LogRecordConstants;
+import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -21,6 +22,7 @@ import org.springframework.validation.annotation.Validated;
 import java.io.*;
 import java.nio.file.Files;
 import java.util.*;
+import java.util.stream.Collectors;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
@@ -143,10 +145,8 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
     // 标本Excel的批量导入
     @Override
     @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
-//    @LogRecord(type = SPECIMEN_IMPORT_TYPE,
-//            subType = SPECIMEN_IMPORT_SUB_TYPE,
-//            bizNo = "{{#specimenNumbers}}",
-//            success = SPECIMEN_IMPORT_SUCCESS)
+    @LogRecord(type = MUSEUMS_SPECIMEN_TYPE, subType = SPECIMEN_IMPORT_SUB_TYPE, bizNo = "1",
+            success = SPECIMEN_IMPORT_SUCCESS, extra = SPECIMEN_IMPORT_SUCCESS_ID)
     public SpecimenImportRespVO importSpecimenList(List<SpecimenImportExcelVO> importSpecimens, boolean isUpdateSupport) {
         // 1.1 参数校验
         if (CollUtil.isEmpty(importSpecimens)) {
@@ -157,7 +157,11 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
         SpecimenImportRespVO respVO = SpecimenImportRespVO.builder()
                 .createSpecimenNumbers(new ArrayList<>())
                 .updateSpecimenNumbers(new ArrayList<>())
-                .failureSpecimenNumbers(new LinkedHashMap<>()).build();
+                .failureSpecimenNumbers(new LinkedHashMap<>())
+                .createdSpecimenIds(new ArrayList<>()).build();
+
+        List<Long> successfulSpecimenIds = new ArrayList<>(); // 用于存储成功导入的标本ID
+        List<Long> updatedSpecimenIds = new ArrayList<>(); // 用于存储成功更新的标本ID
 
         importSpecimens.forEach(importSpecimen -> {
             // 校验逻辑可以根据需要添加
@@ -176,6 +180,8 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
                 SpecimenInfoDO newSpecimen = BeanUtils.toBean(importSpecimen, SpecimenInfoDO.class);
                 specimenInfoMapper.insert(newSpecimen);
                 respVO.getCreateSpecimenNumbers().add(importSpecimen.getSpecimenNumber());
+                respVO.getCreatedSpecimenIds().add(newSpecimen.getId()); // 添加新标本 ID
+                successfulSpecimenIds.add(newSpecimen.getId()); // 记录成功导入的ID
                 return;
             }
 
@@ -190,18 +196,23 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
             updateSpecimen.setId(existSpecimen.getId()); // 设置 ID 进行更新
             specimenInfoMapper.updateById(updateSpecimen);
             respVO.getUpdateSpecimenNumbers().add(importSpecimen.getSpecimenNumber());
+            updatedSpecimenIds.add(updateSpecimen.getId()); // 记录成功更新的ID
         });
 
-//        // 记录成功导入的标本编号到日志上下文
-//        LogRecordContext.putVariable("specimenNumbers", String.join(", ", respVO.getCreateSpecimenNumbers()));
-//        LogRecordContext.putVariable("updateSpecimenNumbers", String.join(", ", respVO.getUpdateSpecimenNumbers()));
-//
-//        // 记录操作日志上下文
-//        LogRecordContext.putVariable("totalImported", respVO.getCreateSpecimenNumbers().size() + respVO.getUpdateSpecimenNumbers().size());
+        // 合并成功导入和更新的标本ID
+        successfulSpecimenIds.addAll(updatedSpecimenIds);
+
+        // 记录成功导入和更新的标本ID到日志上下文
+        LogRecordContext.putVariable("extra", successfulSpecimenIds.stream()
+                .map(String::valueOf)
+                .collect(Collectors.joining(", "))); // 转换为逗号分隔的字符串
 
+        System.out.println(successfulSpecimenIds);
         return respVO;
     }
 
+
+
     private boolean isValidImageName(String imageNames) {
         if (imageNames == null || imageNames.trim().isEmpty()) {
             return true; // 如果图片名称为空或仅含空格,则视为通过校验
@@ -432,5 +443,4 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
     public List<SpecimenInfoDO> getSpecimenRecords(Long id) {
         return specimenInfoMapper.getSpecimenRecords(id);
     }
-
 }

+ 2 - 5
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimenoutbound/SpecimenOutboundServiceImpl.java

@@ -247,7 +247,7 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
     @Transactional(rollbackFor = Exception.class)
     @LogRecord(type = MUSEUMS_SPECIMEN_TYPE, subType = MUSEUMS_SPECIMEN_OUTBOUND_SUB_TYPE,
             bizNo = "{{#id}}", // 使用出库单 ID
-            success = MUSEUMS_SPECIMEN_CREATE_CONFIEM_OUTBOUND_SUCCESS) // 使用_DIFF记录变化
+            success = MUSEUMS_SPECIMEN_CREATE_CONFIEM_OUTBOUND_SUCCESS)
     public String confirmOutbound(Long id, Long operator) {
         // 校验存在
         validateSpecimenOutboundExists(id);
@@ -279,9 +279,7 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
 
     @Override
     public void deleteSpecimenOutbound(Long id) {
-
         // TODO 删除方法待考虑是否关闭开放,如果开放可以考虑鉴权,或者需要多个老师确认(先不弄)
-
         // 校验存在
         validateSpecimenOutboundExists(id);
         // 删除
@@ -331,7 +329,7 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
     }
 
 
-    //获取出库单的方法
+    //获取出库单的方法
     @Override
     public SpecimenOutboundWithInfoRespVO getSpecimenOutboundWithInfo(Long id) {
         // 查询出库信息
@@ -361,5 +359,4 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
         response.setSpecimenInfoList(specimenInfoList);
         return response;
     }
-
 }

+ 0 - 5
yudao-module-museums/yudao-module-museums-biz/src/main/resources/mapper/specimeninfo/SpecimenInfoMapper.xml

@@ -55,9 +55,4 @@
     </select>
 
 
-
-
-
-
-
 </mapper>

+ 5 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/OperateLogMapper.java

@@ -7,6 +7,9 @@ import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogPageReqDTO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface OperateLogMapper extends BaseMapperX<OperateLogDO> {
@@ -30,4 +33,6 @@ public interface OperateLogMapper extends BaseMapperX<OperateLogDO> {
                 .orderByDesc(OperateLogDO::getId));
     }
 
+    List<OperateLogDO> selectBySpecimenIdAndType(@Param("specimenId") Integer specimenId, @Param("moduleType") String moduleType);
+
 }

+ 11 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java

@@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogPageReqDTO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 
+import java.util.List;
+
 /**
  * 操作日志 Service 接口
  *
@@ -36,4 +38,13 @@ public interface OperateLogService {
      */
     PageResult<OperateLogDO> getOperateLogPage(OperateLogPageReqDTO pageReqVO);
 
+    /**
+     * 根据标本编号和操作模块类型获取系统日志
+     *
+     * @param specimenId 标本编号
+     * @param moduleType 操作模块类型
+     * @return 系统日志列表
+     */
+    List<OperateLogDO> getLogsBySpecimenIdAndType(Integer specimenId, String moduleType);
+
 }

+ 6 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java

@@ -12,6 +12,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 操作日志 Service 实现类
@@ -42,4 +43,9 @@ public class OperateLogServiceImpl implements OperateLogService {
         return operateLogMapper.selectPage(pageReqDTO);
     }
 
+    @Override
+    public List<OperateLogDO> getLogsBySpecimenIdAndType(Integer specimenId, String moduleType) {
+        return operateLogMapper.selectBySpecimenIdAndType(specimenId, moduleType);
+    }
+
 }

+ 10 - 0
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/OperateLogMapper.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper">
+
+    <select id="selectBySpecimenIdAndType" resultType="OperateLogDO">
+        SELECT * FROM system_operate_log
+        WHERE biz_id = #{specimenId} AND type = #{moduleType}
+    </select>
+
+</mapper>