hyy 5 月之前
父節點
當前提交
20c327f156
共有 14 個文件被更改,包括 201 次插入54 次删除
  1. 1 9
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/SpecimenInfoController.java
  2. 1 1
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenImportExcelVO.java
  3. 7 2
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenInfoPageReqVO.java
  4. 12 4
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenInfoRespVO.java
  5. 10 4
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenInfoSaveReqVO.java
  6. 19 1
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenOutboundFormRespVO.java
  7. 34 11
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/SpecimenOutboundController.java
  8. 14 4
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimenoutbound/vo/SpecimenOutboundApprovalReqVO.java
  9. 1 1
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/dal/dataobject/specimeninfo/SpecimenInfoDO.java
  10. 23 3
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/dal/dataobject/specimenoutbound/SpecimenOutboundDO.java
  11. 3 0
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/dal/mysql/specimeninfo/SpecimenInfoMapper.java
  12. 16 2
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimeninfo/SpecimenInfoServiceImpl.java
  13. 55 12
      yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimenoutbound/SpecimenOutboundServiceImpl.java
  14. 5 0
      yudao-module-museums/yudao-module-museums-biz/src/main/resources/mapper/specimeninfo/SpecimenInfoMapper.xml

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

@@ -147,7 +147,7 @@ public class SpecimenInfoController {
                         .fallTime("2024-01-02")
                         .preservationType(PreservationTypeEnum.SPECIMEN.getType()) // 使用枚举
                         .size("10cm")
-                        .weight(new BigDecimal("1.5"))
+                        .weight("1.5g")
                         .source(SourceEnum.PURCHASE.getSource()) // 使用枚举
                         .provider("供应商A")
                         .acquisitionTime("2024-01-03")
@@ -335,12 +335,4 @@ public class SpecimenInfoController {
         return success(list); // 返回整个列表
     }
 
-//    @GetMapping("/test")
-//    public Integer test(String status) {
-//        return  specimenInfoService.convertSpecimenType(status);
-//    }
-
-
-
-
 }

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

@@ -45,7 +45,7 @@ public class SpecimenImportExcelVO {
     private String size;
 
     @ExcelProperty("重量")
-    private BigDecimal weight;
+    private String weight;
 
     @ExcelProperty("成分/化学式")
     private String composition;

+ 7 - 2
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenInfoPageReqVO.java

@@ -59,7 +59,7 @@ public class SpecimenInfoPageReqVO extends PageParam {
     private String size;
 
     @Schema(description = "重量")
-    private BigDecimal weight;
+    private String weight;
 
     @Schema(description = "来源(采购、捐赠、采集)")
     private Integer source;
@@ -73,7 +73,7 @@ public class SpecimenInfoPageReqVO extends PageParam {
     @Schema(description = "描述", example = "黑红色陨石")
     private String description;
 
-    @Schema(description = "馆藏状态(在馆、借出)", example = "2")
+    @Schema(description = "馆藏状态(在馆、借出、展陈)", example = "2")
     private Integer collectionStatus;
 
     @Schema(description = "备注")
@@ -111,4 +111,9 @@ public class SpecimenInfoPageReqVO extends PageParam {
     @Schema(description = "注销原因", example = "不香")
     private String deletedReason;
 
+    @Schema(description = "标本数量")
+    private String specimenAmount;
+
+    @Schema(description = "标本价格")
+    private String specimenPrice;
 }

+ 12 - 4
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenInfoRespVO.java

@@ -79,7 +79,7 @@ public class SpecimenInfoRespVO {
 
     @Schema(description = "重量")
     @ExcelProperty("重量")
-    private BigDecimal weight;
+    private String weight;
 
     @Schema(description = "来源(采购、捐赠、采集)")
     @ExcelProperty(value = "来源(采购、捐赠、采集)", converter = DictConvert.class)
@@ -98,8 +98,8 @@ public class SpecimenInfoRespVO {
     @ExcelProperty("描述")
     private String description;
 
-    @Schema(description = "馆藏状态(在馆、借出)", example = "2")
-    @ExcelProperty(value = "馆藏状态(在馆、借出)", converter = DictConvert.class)
+    @Schema(description = "馆藏状态(在馆、借出、展陈)", example = "2")
+    @ExcelProperty(value = "馆藏状态(在馆、借出、展陈)", converter = DictConvert.class)
     @DictFormat("museums_specimen_info") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
     private Integer collectionStatus;
 
@@ -113,7 +113,7 @@ public class SpecimenInfoRespVO {
 
     @Schema(description = "图片路径")
     @ExcelProperty("图片路径")
-    private String imagePath;
+    private List<String> imagePath;
 
     @Schema(description = "入库操作员")
     @ExcelProperty("入库操作员")
@@ -143,4 +143,12 @@ public class SpecimenInfoRespVO {
     @ExcelProperty("注销原因")
     private String deletedReason;
 
+    @Schema(description = "标本数量")
+    @ExcelProperty("标本数量")
+    private String specimenAmount;
+
+    @Schema(description = "标本价格")
+    @ExcelProperty("标本价格")
+    private String specimenPrice;
+
 }

+ 10 - 4
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenInfoSaveReqVO.java

@@ -60,7 +60,7 @@ public class SpecimenInfoSaveReqVO {
     private String size;
 
     @Schema(description = "重量")
-    private BigDecimal weight;
+    private String weight;
 
     @Schema(description = "来源(采购、捐赠、采集)")
     private Integer source;
@@ -74,7 +74,7 @@ public class SpecimenInfoSaveReqVO {
     @Schema(description = "描述", example = "黑红色陨石")
     private String description;
 
-    @Schema(description = "馆藏状态(在馆、借出)", example = "2")
+    @Schema(description = "馆藏状态(在馆、借出、展陈)", example = "2")
     private Integer collectionStatus;
 
     @Schema(description = "备注")
@@ -84,7 +84,7 @@ public class SpecimenInfoSaveReqVO {
     private String imageName;
 
     @Schema(description = "图片路径")
-    private String imagePath;
+    private List<String> imagePath;
 
     @Schema(description = "入库操作员")
     private String operator;
@@ -101,7 +101,13 @@ public class SpecimenInfoSaveReqVO {
     @Schema(description = "入藏时间(购买、捐赠、采集时间)")
     private LocalDateTime acquisitionTime;
 
-    @Schema(description = "注销原因", example = "不香")
+    @Schema(description = "注销原因", example = "坏了")
     private String deletedReason;
 
+    @Schema(description = "标本数量")
+    private String specimenAmount;
+
+    @Schema(description = "标本价格")
+    private String specimenPrice;
+
 }

+ 19 - 1
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/vo/SpecimenOutboundFormRespVO.java

@@ -4,6 +4,9 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
 @Schema(description = "管理后台 - 标本出库单 Request VO")
 @Data
 public class SpecimenOutboundFormRespVO {
@@ -15,6 +18,18 @@ public class SpecimenOutboundFormRespVO {
     @NotNull(message = "标本类型(矿物、岩石矿石、化石、陨石)不能为空")
     private Integer specimenType;
 
+    @Schema(description = "中文名称", example = "赵六")
+    private String chineseName;
+
+    @Schema(description = "英文名称", example = "Maven")
+    private String englishName;
+
+    @Schema(description = "保存类型(标本、光片、薄片模型及其他)", example = "1")
+    private Integer preservationType;
+
+    @Schema(description = "重量")
+    private String weight;
+
     @Schema(description = "存放位置")
     private String storageLocation;
 
@@ -22,5 +37,8 @@ public class SpecimenOutboundFormRespVO {
     private String imageName;
 
     @Schema(description = "图片路径")
-    private String imagePath;
+    private List<String> imagePath;
+
+    @Schema(description = "标本数量")
+    private String specimenAmount;
 }

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

@@ -59,28 +59,51 @@ public class SpecimenOutboundController {
     }
 
 
-    @PostMapping("/approve")
-    @Operation(summary = "审通过")
-    @PreAuthorize("@ss.hasPermission('museums:specimen-outbound:approve')")
-    public CommonResult<Void> approveSpecimenOutbound(@RequestBody SpecimenOutboundApprovalReqVO req) {
+    @PostMapping("/approveFirst")
+    @Operation(summary = "审通过")
+    @PreAuthorize("@ss.hasPermission('museums:specimen-outbound:approveFirst')")
+    public CommonResult<Void> approveFirstSpecimenOutbound(@RequestBody SpecimenOutboundApprovalReqVO req) {
         req.setApproveUsers(getLoginUserId()); // 获取操作员ID
         req.setApprovalTime(LocalDateTime.now()); // 设置当前时间
-        req.setStatus(1); // 设置审批状态为通过
+        req.setStatus(1); // 设置审批状态为一审通过
         specimenOutboundService.updateStatus(req);
         return success(null);
     }
 
-    @PostMapping("/reject")
-    @Operation(summary = "审驳回")
-    @PreAuthorize("@ss.hasPermission('museums:specimen-outbound:reject')")
-    public CommonResult<Void> rejectSpecimenOutbound(@Valid @RequestBody SpecimenOutboundApprovalReqVO req) {
+    @PostMapping("/rejectFirst")
+    @Operation(summary = "审驳回")
+    @PreAuthorize("@ss.hasPermission('museums:specimen-outbound:rejectFirst')")
+    public CommonResult<Void> rejectFirstSpecimenOutbound(@Valid @RequestBody SpecimenOutboundApprovalReqVO req) {
         req.setApproveUsers(getLoginUserId()); // 获取操作员ID
         req.setApprovalTime(LocalDateTime.now()); // 设置当前时间
-        req.setStatus(2); // 设置审批状态为驳回
+        req.setStatus(2); // 设置审批状态为一审驳回
         specimenOutboundService.updateStatus(req);
         return success(null);
     }
 
+    @PostMapping("/approveSecond")
+    @Operation(summary = "二审通过")
+    @PreAuthorize("@ss.hasPermission('museums:specimen-outbound:approveSecond')")
+    public CommonResult<Void> approveSecondSpecimenOutbound(@RequestBody SpecimenOutboundApprovalReqVO req) {
+        req.setTwoApproveUsers(getLoginUserId()); // 获取二审操作员ID
+        req.setTwoApprovalTime(LocalDateTime.now()); // 设置当前时间
+        req.setStatus(5); // 设置审批状态为二审通过
+        specimenOutboundService.updateStatus(req);
+        return success(null);
+    }
+
+    @PostMapping("/rejectSecond")
+    @Operation(summary = "二审驳回")
+    @PreAuthorize("@ss.hasPermission('museums:specimen-outbound:rejectSecond')")
+    public CommonResult<Void> rejectSecondSpecimenOutbound(@Valid @RequestBody SpecimenOutboundApprovalReqVO req) {
+        req.setTwoApproveUsers(getLoginUserId()); // 获取二审操作员ID
+        req.setTwoApprovalTime(LocalDateTime.now()); // 设置当前时间
+        req.setStatus(6); // 设置审批状态为二审驳回
+        specimenOutboundService.updateStatus(req);
+        return success(null);
+    }
+
+
 //    @GetMapping("/confirmOutbound")
 //    @Operation(summary = "确认标本出库")
 //    @PreAuthorize("@ss.hasPermission('museums:specimen-outbound:confirm')")
@@ -222,7 +245,7 @@ public class SpecimenOutboundController {
 
     //获取出库单,方便操作员查看标本编号、图片及标本存放位置等。
     @GetMapping("/specimenInfo")
-    @Operation(summary = "获得标本出库回库信息")
+    @Operation(summary = "获得标本出库")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('museums:specimen-outbound:query')")
     public CommonResult<SpecimenOutboundWithInfoRespVO> getSpecimen(@RequestParam("id") Long id) {

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

@@ -17,13 +17,23 @@ public class SpecimenOutboundApprovalReqVO {
     @Schema(description = "审批状态", example = "2")
     private Integer status;
 
-    @Schema(description = "驳回原因", example = "反对")
-    @NotEmpty(message = "驳回原因是必填项")
+    @Schema(description = "一审驳回原因", example = "反对")
+//    @NotEmpty(message = "驳回原因是必填项")
     private String processInstanceId;
 
-    @Schema(description = "审批员", example = "反对")
+    @Schema(description = "二审驳回原因", example = "反对")
+//    @NotEmpty(message = "驳回原因是必填项")
+    private String rejectionReasons ;
+
+    @Schema(description = "一审批员", example = "100")
     private Long approveUsers;
 
-    @Schema(description = "审批时间")
+    @Schema(description = "二审批员", example = "101")
+    private Long twoApproveUsers;
+
+    @Schema(description = "一审时间")
     private LocalDateTime approvalTime;
+
+    @Schema(description = "二审时间")
+    private LocalDateTime  twoApprovalTime;
 }

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

@@ -96,7 +96,7 @@ public class SpecimenInfoDO extends BaseDO {
     /**
      * 重量
      */
-    private BigDecimal weight;
+    private String weight;
     /**
      * 来源(采购、捐赠、采集)
      *

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

@@ -78,9 +78,13 @@ public class SpecimenOutboundDO extends BaseDO {
      */
     private String sampleStatus;
     /**
-     * 驳回原因
+     * 一审驳回原因
      */
     private String processInstanceId;
+    /**
+     * 二审驳回原因
+     */
+    private String rejectionReasons;
     /**
      * 出库员
      */
@@ -98,13 +102,29 @@ public class SpecimenOutboundDO extends BaseDO {
      */
     private LocalDateTime returnDate;
     /**
-     * 审时间
+     * 审时间
      */
     private LocalDateTime approvalTime;
     /**
-     * 审批者
+     * 二审时间
+     */
+    private LocalDateTime twoApprovalTime;
+    /**
+     * 一审批者
      */
     private Long approveUsers;
+    /**
+     * 二审批者
+     */
+    private Long twoApproveUsers;
+
+
+
+
+
+
+
+
     /**
      * 存放位置
      */

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

@@ -168,4 +168,7 @@ public interface SpecimenInfoMapper extends BaseMapperX<SpecimenInfoDO> {
      */
     void markAsDeletedById(@Param("id") Integer id);
 
+    boolean existsByNumber(String number);
+
+
 }

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

@@ -55,15 +55,29 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
     }
 
 
+//    @Override
+//    public Integer createSpecimenInfo(SpecimenInfoSaveReqVO createReqVO) {
+//        // 插入
+//        SpecimenInfoDO specimenInfo = BeanUtils.toBean(createReqVO, SpecimenInfoDO.class);
+//        specimenInfoMapper.insert(specimenInfo);
+//        // 返回
+//        return specimenInfo.getId();
+//    }
+
     @Override
     public Integer createSpecimenInfo(SpecimenInfoSaveReqVO createReqVO) {
-        // 插入
+        // 校验标本编号是否已存在
+        if (specimenInfoMapper.existsByNumber(createReqVO.getSpecimenNumber())) {
+            throw new IllegalArgumentException("标本编号已存在,无法新增");
+        }
+        // 插入新标本信息
         SpecimenInfoDO specimenInfo = BeanUtils.toBean(createReqVO, SpecimenInfoDO.class);
         specimenInfoMapper.insert(specimenInfo);
-        // 返回
+        // 返回新创建的标本ID
         return specimenInfo.getId();
     }
 
+
     @Override
     public void updateSpecimenInfo(SpecimenInfoSaveReqVO updateReqVO) {
         // 校验存在

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

@@ -132,33 +132,76 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
 
 
     //出库审批
+//    @Override
+//    public void updateStatus(SpecimenOutboundApprovalReqVO req) {
+//        // 从数据库获取标本出库记录
+//        SpecimenOutboundDO specimenOutbound = specimenOutboundMapper.selectById(req.getId());
+//
+//        // 判断状态是否为审批中状态(0)
+//        if (specimenOutbound == null || specimenOutbound.getStatus() != 0) {
+//            throw new IllegalStateException("只有状态为审批中的标本才能进行审批");
+//        }
+//
+//        // 更新状态
+//        specimenOutbound.setStatus(req.getStatus());
+//        if (req.getStatus() == 1) { // 审批通过
+//            specimenOutbound.setApprovalTime(req.getApprovalTime()); // 设置当前审批时间
+//        } else if (req.getStatus() == 2) { // 审批驳回
+//            specimenOutbound.setProcessInstanceId(req.getProcessInstanceId());
+//            specimenOutbound.setApprovalTime(req.getApprovalTime()); // 设置当前驳回时间
+//        }
+//
+//        // TODO 获取用户的id有现成的方法
+//        //  specimenOutbound.setApproveUsers(getLoginUserId()); // 设置操作员 ID
+//        specimenOutbound.setApproveUsers(getLoginUserId()); // 设置操作员 ID
+//
+//        // 更新数据库
+//        specimenOutboundMapper.updateById(specimenOutbound);
+//    }
+
     @Override
     public void updateStatus(SpecimenOutboundApprovalReqVO req) {
         // 从数据库获取标本出库记录
         SpecimenOutboundDO specimenOutbound = specimenOutboundMapper.selectById(req.getId());
 
-        // 判断状态是否为审批中状态(0)
-        if (specimenOutbound == null || specimenOutbound.getStatus() != 0) {
-            throw new IllegalStateException("只有状态为审批中的标本才能进行审批");
+        // 验证状态
+        if (specimenOutbound == null) {
+            throw new IllegalStateException("标本记录不存在");
         }
 
-        // 更新状态
-        specimenOutbound.setStatus(req.getStatus());
-        if (req.getStatus() == 1) { // 审批通过
-            specimenOutbound.setApprovalTime(req.getApprovalTime()); // 设置当前审批时间
-        } else if (req.getStatus() == 2) { // 审批驳回
+        // 一审逻辑
+        if (req.getStatus() == 1 || req.getStatus() == 2) {
+            if (specimenOutbound.getStatus() != 0) {
+                throw new IllegalStateException("只有状态为待审批的标本才能进行一审");
+            }
+            if (req.getStatus() == 2 && req.getProcessInstanceId() == null) {
+                throw new IllegalArgumentException("一审驳回时必须填写驳回原因");
+            }
+            specimenOutbound.setStatus(req.getStatus());
             specimenOutbound.setProcessInstanceId(req.getProcessInstanceId());
-            specimenOutbound.setApprovalTime(req.getApprovalTime()); // 设置当前驳回时间
+            specimenOutbound.setApprovalTime(req.getApprovalTime()); // 设置当前审批时间
+            specimenOutbound.setApproveUsers(getLoginUserId()); // 设置操作员 ID
         }
 
-        // TODO 获取用户的id有现成的方法
-        //  specimenOutbound.setApproveUsers(getLoginUserId()); // 设置操作员 ID
-        specimenOutbound.setApproveUsers(getLoginUserId()); // 设置操作员 ID
+        // 二审逻辑
+        if (req.getStatus() == 5 || req.getStatus() == 6) {
+            if (specimenOutbound.getStatus() != 1) {
+                throw new IllegalStateException("只有状态为一审通过的标本才能进行二审");
+            }
+            if (req.getStatus() == 6 && req.getRejectionReasons() == null) {
+                throw new IllegalArgumentException("二审驳回时必须填写驳回原因");
+            }
+            specimenOutbound.setStatus(req.getStatus());
+            specimenOutbound.setRejectionReasons(req.getRejectionReasons());
+            specimenOutbound.setTwoApprovalTime(req.getTwoApprovalTime()); // 设置当前审批时间
+            specimenOutbound.setTwoApproveUsers(getLoginUserId()); // 设置二审操作员 ID
+        }
 
         // 更新数据库
         specimenOutboundMapper.updateById(specimenOutbound);
     }
 
+
     //确认出库,已经简化
     @Override
     public void confirmOutbound(Long id, Long operator) {

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

@@ -50,6 +50,11 @@
         WHERE id = #{id}
     </update>
 
+    <select id="existsByNumber" resultType="boolean">
+        SELECT COUNT(*) > 0 FROM museums_specimen_info WHERE specimen_number = #{number}
+    </select>
+
+