Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/photogroup/PhotoGroupServiceImpl.java
yzx 8 months ago
parent
commit
1d94110594
16 changed files with 79 additions and 58 deletions
  1. 12 4
      yudao-module-museums/yudao-module-museums-api/src/main/java/cn/iocoder/yudao/module/museums/enums/ErrorCodeConstants.java
  2. 6 6
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/photogroup/PhotoGroupController.java
  3. 0 1
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/SpecimenInfoController.java
  4. 10 12
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/SpecimenOutboundController.java
  5. 9 0
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundOutgoingReqVO.java
  6. 8 3
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundPageReqVO.java
  7. 9 0
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundRespVO.java
  8. 4 1
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundSaveReqVO.java
  9. 4 0
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundWithInfoRespVO.java
  10. 4 0
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/dal/dataobject/specimenoutbound/SpecimenOutboundDO.java
  11. 1 18
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/photogroup/PhotoGroupService.java
  12. 4 5
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/photogroup/PhotoGroupServiceImpl.java
  13. 2 4
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimeninfo/SpecimenInfoServiceImpl.java
  14. 1 1
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimenoutbound/SpecimenOutboundServiceImpl.java
  15. 0 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java
  16. 5 2
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/OperateLogMapper.xml

+ 12 - 4
yudao-module-museums/yudao-module-museums-api/src/main/java/cn/iocoder/yudao/module/museums/enums/ErrorCodeConstants.java

@@ -10,16 +10,24 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
 public class ErrorCodeConstants {
     // ========== 标本管理 1-016-000-000 ==========
     public static final ErrorCode SPECIMEN_INFO_NOT_EXISTS = new ErrorCode(1-016-000-000, "标本管理不存在");
-    public static final ErrorCode SPECIMEN_INFO_LIST_IS_EMPTY = new ErrorCode(1-016-000-001, "标本管理不存在");
+    public static final ErrorCode SPECIMEN_INFO_LIST_IS_EMPTY = new ErrorCode(1-016-000-001, "标本excel列表为空");
     public static final ErrorCode UPLOADED_FOLDER_CANNOT_EMPTY = new ErrorCode(1-016-000-002, "上传的压缩包不能为空");
     public static final ErrorCode INVALID_IMAGE_FORMAT = new ErrorCode(1-016-000-003, "图片格式无效");
+    public static final ErrorCode SPECIMEN_NUMBER_ALREADY_EXISTS_CANNOT_ADDED = new ErrorCode(1-016-000-004, "标本编号已存在,无法新增");
     // ========== 标本出库回库信息 1-016-001-000 ==========
     public static final ErrorCode SPECIMEN_OUTBOUND_NOT_EXISTS = new ErrorCode(1-016-001-000, "标本出库回库信息不存在");
-    public static final ErrorCode NO_PERMISSION_VIEW_NON_RETURNED_SPECIMENS = new ErrorCode(1-016-001-000, "没有权限查看非已回库的标本出库信息");
-    public static final ErrorCode SPECIMEN_IS_LENDING_OUT = new ErrorCode(1-016-001-000, "标本当前状态为借出中,无法进行出库操作");
+    public static final ErrorCode NO_PERMISSION_VIEW_NON_RETURNED_SPECIMENS = new ErrorCode(1-016-001-001, "没有权限查看非已回库的标本出库信息");
+    public static final ErrorCode SPECIMEN_OUTBOUND_ORDER_NOT_EXISTS = new ErrorCode(1-016-001-002, "标本出库单信息不存在");
+    public static final ErrorCode SPECIMEN_IS_LENDING_OUT = new ErrorCode(1-016-001-003, "标本当前状态为借出中,无法进行出库操作");
+    public static final ErrorCode USER_NOT_HAVE_THE_RIGHT_FIRST_INSTANCE = new ErrorCode(1-016-001-004, "用户没有一审权限");
+    public static final ErrorCode USER_NOT_HAVE_THE_RIGHT_SECOND_INSTANCE = new ErrorCode(1-016-001-005, "用户没有二审权限");
+    public static final ErrorCode INVALID_APPROVAL_STATUS = new ErrorCode(1-016-001-005, "无效的审批状态");
+
     // ========== 博物馆照片组 1-016-002-000 ==========
     public static final ErrorCode PHOTO_GROUP_NOT_EXISTS = new ErrorCode(1-016-002-000, "博物馆照片组不存在");
-    public static final ErrorCode PHOTO_GROUP_UPLOAD_FAILED = new ErrorCode(1-016-000-003, "照片组上传失败");
+    public static final ErrorCode PHOTO_GROUP_UPLOAD_FAILED = new ErrorCode(1-016-002-001, "照片组上传失败");
+    public static final ErrorCode PHOTO_GROUP_PACKAGE_FAILED_DECOMPRESS = new ErrorCode(1-016-002-002, "照片组上传失败");
+    public static final ErrorCode PHOTO_GROUP_MUST_BE_COMPRESSED_PACKAGE = new ErrorCode(1-016-002-003, "请上传图片压缩包");
 
     // ========== 博物馆文件管理 1-016-003-000 ==========
     public static final ErrorCode DOCUMENT_NOT_EXISTS = new ErrorCode(1-016-003-000, "博物馆文件管理不存在");

+ 6 - 6
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/photogroup/PhotoGroupController.java

@@ -105,15 +105,15 @@ public class PhotoGroupController {
     @PostMapping("/import-package")
     @Operation(summary = "创建博物馆照片组(压缩包)")
     @PreAuthorize("@ss.hasPermission('museums:photo-group:create')")
-    public CommonResult<Integer> createePhotoGroup(
-            @NotEmpty @RequestPart("groupName") String groupName,
-            @RequestPart(value = "groupDescription", required = false) String groupDescription, // 设置为非必填
-            @RequestPart(value = "groupDate", required = false) LocalDateTime groupDate, // 设置为非必填
-            @RequestPart("file") MultipartFile file) {
+    public CommonResult<Integer> importPhotoGroup(
+            @NotEmpty @RequestParam("groupName") String groupName,
+            @RequestParam(value = "groupDescription", required = false) String groupDescription, // 设置为非必填
+            @RequestParam(value = "groupDate", required = false) LocalDateTime groupDate, // 设置为非必填
+            @RequestParam("file") MultipartFile file) {
 
         try {
             // 调用服务层创建照片组并上传照片
-            Integer groupId = photoGroupService.createePhotoGroup(groupName, groupDescription, groupDate, file);
+            Integer groupId = photoGroupService.importPhotoGroup(groupName, groupDescription, groupDate, file);
 
             // 返回上传成功的结果,附带照片组ID
             return CommonResult.success(groupId);

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

@@ -370,5 +370,4 @@ public class SpecimenInfoController {
         List<OperateLogDO> logs = operateLogService.getLogsBySpecimenIdAndType(specimenId, moduleType);
         return success(BeanUtils.toBean(logs, OperateLogRespVO.class));
     }
-
 }

+ 10 - 12
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/SpecimenOutboundController.java

@@ -28,7 +28,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-import static cn.iocoder.yudao.module.museums.enums.ErrorCodeConstants.NO_PERMISSION_VIEW_NON_RETURNED_SPECIMENS;
+import static cn.iocoder.yudao.module.museums.enums.ErrorCodeConstants.*;
 
 import cn.iocoder.yudao.module.museums.controller.admin.specimenoutbound.vo.*;
 import cn.iocoder.yudao.module.museums.dal.dataobject.specimenoutbound.SpecimenOutboundDO;
@@ -62,20 +62,20 @@ public class SpecimenOutboundController {
         // 验证审批类型
         if (req.getStatus() == 1 || req.getStatus() == 2) {
             // 一审逻辑
-//            if (!permissionApi.hasAnyRoles(operatorId, "deputy_leader")) {
-//                throw new IllegalArgumentException("用户没有一审权限");
-//            }
+            if (!permissionApi.hasAnyRoles(operatorId, "deputy_leader")) {
+                throw exception(USER_NOT_HAVE_THE_RIGHT_FIRST_INSTANCE);
+            }
             req.setApproveUsers(operatorId);
             req.setApprovalTime(now);
         } else if (req.getStatus() == 5 || req.getStatus() == 6) {
             // 二审逻辑
-//            if (!permissionApi.hasAnyRoles(operatorId, "leadership")) {
-//                throw new IllegalArgumentException("用户没有二审权限");
-//            }
+            if (!permissionApi.hasAnyRoles(operatorId, "leadership")) {
+                throw exception(USER_NOT_HAVE_THE_RIGHT_SECOND_INSTANCE);
+            }
             req.setTwoApproveUsers(operatorId);
             req.setTwoApprovalTime(now);
         } else {
-            throw new IllegalArgumentException("无效的审批状态");
+            throw exception(INVALID_APPROVAL_STATUS);
         }
         // 调用更新状态方法
         specimenOutboundService.updateStatus(req);
@@ -98,7 +98,7 @@ public class SpecimenOutboundController {
             specimenOutboundService.recompileSpecimenOutbound(updateReqVO);
             return success(true);
         } else {
-            throw new IllegalArgumentException("无效的审批状态,无法编辑");
+            throw exception(INVALID_APPROVAL_STATUS);
         }
     }
 
@@ -119,7 +119,6 @@ public class SpecimenOutboundController {
         return success(true);
     }
 
-
     @DeleteMapping("/delete")
     @Operation(summary = "删除标本出库回库信息")
     @Parameter(name = "id", description = "编号", required = true)
@@ -236,9 +235,8 @@ public class SpecimenOutboundController {
         SpecimenOutboundWithInfoRespVO specimenOutbound = specimenOutboundService.getSpecimenOutboundWithInfo(id);
 
         if (specimenOutbound == null) {
-            throw exception(NO_PERMISSION_VIEW_NON_RETURNED_SPECIMENS);
+            throw exception(SPECIMEN_OUTBOUND_ORDER_NOT_EXISTS);
         }
         return success(specimenOutbound);
     }
-
 }

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

@@ -2,10 +2,13 @@ package cn.iocoder.yudao.module.museums.controller.admin.specimenoutbound.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotEmpty;
 import java.time.LocalDateTime;
 
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
 @Schema(description = "管理后台 - 根据出库登记情况统计本年标本出库信息/修改 Request VO")
 @Data
 
@@ -45,6 +48,12 @@ public class SpecimenOutboundOutgoingReqVO {
     @Schema(description = "出库时间")
     private LocalDateTime outgoingTime;
 
+    @Schema(description = "预计领取时间")
+    private LocalDateTime expectedCollectionTime;
+
+    @Schema(description = "预计退还时间")
+    private LocalDateTime estimatedReturnTime;
+
     @Schema(description = "标本情况")
     private String specimenCondition;
 

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

@@ -31,6 +31,14 @@ public class SpecimenOutboundPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] applicationDate;
 
+    @Schema(description = "预计退还时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] estimatedReturnTime;
+
+    @Schema(description = "预计领取时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] expectedCollectionTime;
+
     @Schema(description = "申请出库的用途")
     private String applicationUsage;
 
@@ -80,7 +88,4 @@ public class SpecimenOutboundPageReqVO extends PageParam {
     @Schema(description = "审批员")
     private Long approveUsers;
 
-    @Schema(description = "预计退还时间")
-    private LocalDateTime estimatedReturnTime;
-
 }

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

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.museums.controller.admin.specimenoutbound.vo;
 
+import com.mzt.logapi.starter.annotation.DiffLogField;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import java.util.*;
@@ -38,6 +39,14 @@ public class SpecimenOutboundRespVO {
     @ExcelProperty("申请日期")
     private LocalDateTime applicationDate;
 
+    @Schema(description = "预计退还时间")
+    @ExcelProperty("预计退还时间")
+    private LocalDateTime estimatedReturnTime;
+
+    @Schema(description = "预计领取时间")
+    @ExcelProperty("预计领取时间")
+    private LocalDateTime expectedCollectionTime;
+
     @Schema(description = "申请出库的用途", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("申请出库的用途")
     private String applicationUsage;

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

@@ -55,9 +55,12 @@ public class SpecimenOutboundSaveReqVO {
     private String remarks;
 
     @Schema(description = "预计退还时间")
-    @DiffLogField(name = "预计退还时间时间")
+    @DiffLogField(name = "预计退还时间")
     private LocalDateTime estimatedReturnTime;
 
+    @Schema(description = "预计领取时间")
+    @DiffLogField(name = "预计领取时间")
+    private LocalDateTime expectedCollectionTime;
 
 
 //    @Schema(description = "出库时间")

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

@@ -52,6 +52,10 @@ public class SpecimenOutboundWithInfoRespVO {
     @ExcelProperty("标本情况")
     private String specimenCondition;
 
+    @Schema(description = "预计退还时间")
+    @ExcelProperty("预计退还时间")
+    private LocalDateTime estimatedReturnTime;
+
     @Schema(description = "关联标本信息列表")
     @ExcelProperty("关联标本信息")
     private List<SpecimenOutboundFormRespVO> specimenInfoList;

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

@@ -121,6 +121,10 @@ public class SpecimenOutboundDO extends BaseDO {
      * 预计退还时间
      */
     private LocalDateTime estimatedReturnTime;
+    /**
+     * 预计领取时间
+     */
+    private LocalDateTime expectedCollectionTime;
 
 
     /**

+ 1 - 18
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/photogroup/PhotoGroupService.java

@@ -26,7 +26,6 @@ public interface PhotoGroupService {
      */
     Integer createPhotoGroup(@Valid PhotoGroupSaveReqVO createReqVO);
 
-
     /**
      * 创建博物馆照片组
      *
@@ -36,10 +35,7 @@ public interface PhotoGroupService {
      * @param file 上传的压缩包文件
      * @return 照片组编号
      */
-    Integer createePhotoGroup(@NotEmpty String groupName, String groupDescription, LocalDateTime groupDate, MultipartFile file) throws Exception;
-
-
-
+    Integer importPhotoGroup(@NotEmpty String groupName, String groupDescription, LocalDateTime groupDate, MultipartFile file) throws Exception;
 
     /**
      * 更新博物馆照片组
@@ -70,17 +66,4 @@ public interface PhotoGroupService {
      * @return 博物馆照片组分页
      */
     PageResult<PhotoGroupDO> getPhotoGroupPage(PhotoGroupPageReqVO pageReqVO);
-
-
-//    /**
-//     * 创建博物馆照片组
-//     *
-//     * @param createReqVO 创建信息
-//     * @return 编号
-//     */
-//    Integer createePhotoGroup(@Valid PhotoGroupSaveReqVO createReqVO);
-
-
-
-
 }

+ 4 - 5
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/photogroup/PhotoGroupServiceImpl.java

@@ -104,12 +104,12 @@ public class PhotoGroupServiceImpl implements PhotoGroupService {
 
     @Override
     @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
-    public Integer createePhotoGroup(String groupName, String groupDescription, LocalDateTime groupDate, MultipartFile file) throws Exception {
-        //TODO 同一个类型的方法怎么写了两种,可以尝试封装成公共方法,这里没有判断图片类型,隔壁方法判断了
+    public Integer importPhotoGroup(String groupName, String groupDescription, LocalDateTime groupDate, MultipartFile file) throws Exception {
+         //TODO 同一个类型的方法怎么写了两种,可以尝试封装成公共方法,这里没有判断图片类型,隔壁方法判断了
 
         // 校验文件类型
         if (!file.getOriginalFilename().endsWith(".zip")) {
-            throw new IllegalArgumentException("上传文件必须是压缩包");
+            throw exception(PHOTO_GROUP_MUST_BE_COMPRESSED_PACKAGE);
         }
 
         // 插入照片组信息
@@ -151,8 +151,7 @@ public class PhotoGroupServiceImpl implements PhotoGroupService {
                 }
             }
         } catch (Exception e) {
-            // 捕获异常并重新抛出,事务会自动回滚
-            throw new Exception("照片上传或解压失败: " + e.getMessage(), e);
+            throw exception(PHOTO_GROUP_PACKAGE_FAILED_DECOMPRESS);
         } finally {
             // 清理临时文件
             FileUtils.deleteDirectory(tempDir); // 使用 FileUtils 清理

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

@@ -67,7 +67,7 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
     public String createSpecimenInfo(SpecimenInfoSaveReqVO createReqVO) {
         // 校验标本编号是否已存在
         if (specimenInfoMapper.existsByNumber(createReqVO.getSpecimenNumber())) {
-            return "标本编号已存在,无法新增";
+            throw exception(SPECIMEN_NUMBER_ALREADY_EXISTS_CANNOT_ADDED);
         }
 
         // 插入新标本信息
@@ -78,11 +78,9 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
         LogRecordContext.putVariable("specimenInfo", specimenInfo);
 
         // 返回新创建的标本ID
-        return "标本创建成功 " + specimenInfo.getId();
+        return "标本创建成功,标本ID:" + specimenInfo.getId();
     }
 
-
-
 //    @Override
 //    public void updateSpecimenInfo(SpecimenInfoSaveReqVO updateReqVO) {
 //        // 校验存在

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

@@ -255,7 +255,7 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
         // 记录日志上下文
         LogRecordContext.putVariable("existingSpecimen", existingSpecimen); // 添加更新后的出库单对象
 
-        return "标本ID"+existingSpecimen.getInfoId()+"出库成功";
+        return "标本ID"+existingSpecimen.getInfoId()+"出库成功";
     }
 
     //用来填写回库表单,为方便添加数据,现在先用上面这段

+ 0 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java

@@ -13,7 +13,6 @@ public class UserSimpleRespVO {
 
     @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Long id;
-
     @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
     private String nickname;
 

+ 5 - 2
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/OperateLogMapper.xml

@@ -3,8 +3,11 @@
 <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 *
+        FROM system_operate_log
+        WHERE extra LIKE CONCAT('%',#{specimenId},'%')
+          AND type = #{moduleType}
+        ORDER BY create_time DESC;
     </select>
 
 </mapper>