瀏覽代碼

Merge remote-tracking branch 'origin/master'

jiafei 2 月之前
父節點
當前提交
8994b4e693
共有 20 個文件被更改,包括 598 次插入178 次删除
  1. 11 0
      yudao-module-museum/yudao-module-museum-biz/pom.xml
  2. 246 70
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museumflow/MuseumFlowController.java
  3. 2 1
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museumflow/vo/MuseumFlowPageVO.java
  4. 16 3
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museumflow/vo/MuseumFlowReviewVO.java
  5. 2 2
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museumflow/vo/MuseumFlowSaveVO.java
  6. 84 26
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museuminfo/MuseumInfoController.java
  7. 0 3
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museuminfo/vo/MuseumInfoPageReqVO.java
  8. 1 1
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museuminfo/vo/MuseuminfoMonthSaveVO.java
  9. 2 2
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museuminfo/vo/MuseuminfoOriginVO.java
  10. 1 1
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museuminfo/vo/MuseuminfoTypeVO.java
  11. 11 0
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museumpicture/MuseumPictureController.java
  12. 25 5
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/dal/mysql/museumflow/MuseumFlowMapper.java
  13. 22 22
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/dal/mysql/museuminfo/MuseumInfoMapper.java
  14. 23 10
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museumflow/MuseumFlowService.java
  15. 34 10
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museumflow/MuseumFlowServiceImpl.java
  16. 8 5
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museuminfo/MuseumInfoService.java
  17. 8 13
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museuminfo/MuseumInfoServiceImpl.java
  18. 6 0
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museumpicture/MuseumPictureService.java
  19. 95 4
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museumpicture/MuseumPictureServiceImpl.java
  20. 1 0
      yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museumpicture/PictureGroupServiceImpl.java

+ 11 - 0
yudao-module-museum/yudao-module-museum-biz/pom.xml

@@ -65,6 +65,17 @@
             <version>4.0.3</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.11.0</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 246 - 70
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museumflow/MuseumFlowController.java

@@ -59,35 +59,114 @@ public class MuseumFlowController {
     @PostMapping("/outbound")
     @Operation(summary = "添加出库单")
     public CommonResult<Boolean>  createMuseumFlowOutbound(@RequestBody MuseumFlowSaveVO saveVO) {
-        List<String> sample_ids = saveVO.getNumber();
+        String sample_id = saveVO.getNumber();
+        String number = saveVO.getNumber();
+        MuseumInfoDO result = museumFlowService.selectMuseumFlowSampleId(sample_id);
+        MuseumFlowDO event = museumFlowService.selectMuseumFlowNumber(number);
+//             Save中 1现为未出库或已回库,0为已出库
+//             State中 0现为未出库或已回库,1为已出库,2为审批中,3为审批通过,4为审批驳回
+        //TODO 你这里上面获取了result和event的值再判断他为空,怎么可能为空 ,所以如果为空的话,上面两句就直接报错了
+        if (result == null) {
+            return CommonResult.error(200, "标本不存在");
+        }
+        else{
+            int Save = result.getSave();
+            if (Save == 1) {
+                if (event != null) {
+                    int State = event.getState();
+                    if (State == 2) {
+                    return CommonResult.error(200, "标本正在审批");
+                    } else if (State == 3) {
+                        return CommonResult.error(200, "标本审批已通过");
+                    } else if (State == 4) {
+                        return CommonResult.error(200, "标本已审批已驳回");
+                    }
+                } else {
+                    String name = result.getChineseName();
+                    saveVO.setSampleName(name);
+                    museumFlowService.createMuseumFlow(saveVO);
+                    museumFlowService.updateMuseumFlowStateOutbound2(saveVO);
+                    return CommonResult.success(true);
+                }
+            } else {
+                return CommonResult.error(200, "标本不在库中");
+            }
+        }
+        return CommonResult.success(true);
+//        List<String> sample_ids = saveVO.getNumber();
+//        List<String> errorList = new ArrayList<>();
+//        List<String> sample_names = new ArrayList<>();
+//////             Save中 1现为未出库或已回库,0为已出库
+//////             State中 0现为未出库或已回库,1为已出库,2为审批中,3为审批通过,4为审批驳回
+//        for (String sample_id : sample_ids) {
+//            MuseumInfoDO result = museumFlowService.selectMuseumFlowSampleId(sample_id);
+//            if (result == null) {
+//                errorList.add(sample_id+"标本不存在");
+//                return CommonResult.error(200, "标本不存在");
+//            }
+//            else {
+//                int save = result.getSave();
+//                String name = result.getChineseName();
+//                if (save == 0) {
+//                    errorList.add(sample_id+"标本不在库中");
+//                    return CommonResult.error(200, "标本不在库中");
+//                }else {
+//                    sample_names.add(name);
+//                }
+//            }
+//        }
+//        if (errorList.isEmpty()) {
+//            saveVO.setSampleName(sample_names);//设置标本名称
+//            museumFlowService.createMuseumFlow(saveVO);//创建表单
+//            museumFlowService.updateMuseumFlowStateOutbound2(saveVO);//更改标本状态为出库
+//
+////            museumFlowService.selectPageS(respVO);
+//            return CommonResult.success(true);
+//        }else {
+//            System.out.println(errorList);
+//            return CommonResult.error(200, "标本存在错误");
+//        }
+    }
+
+    @PostMapping("outboundEnd")
+    @Operation(summary = "出库完成功能")
+    public CommonResult<Boolean> createMuseumFlowOutboundEnd(@RequestBody MuseumFlowReviewVO reviewVO){
+        List<String> sample_ids = reviewVO.getNumber();
         List<String> errorList = new ArrayList<>();
         List<String> sample_names = new ArrayList<>();
+////             Save中 1现为未出库或已回库,0为已出库
+////             State中 0现为未出库或已回库,1为已出库,2为审批中,3为审批通过,4为审批驳回
         for (String sample_id : sample_ids) {
             MuseumInfoDO result = museumFlowService.selectMuseumFlowSampleId(sample_id);
-            if (result == null) {
-                errorList.add(sample_id+"标本不存在");
-            }
-            else {
-                int save = result.getSave();
-                String name = result.getChineseName();
-                if (save == 0) {
-                    errorList.add(sample_id+"标本不在库中");
-                }else {
+            MuseumFlowDO event = museumFlowService.selectMuseumFlowNumber(sample_id);
+            String name = result.getChineseName();
+            if (event != null) {
+                int State = event.getState();
+                if (State == 2) {
+                    errorList.add(sample_id+"标本正在审批");
+                }else if (State == 3) {
                     sample_names.add(name);
+                }else if (State == 4) {
+                    errorList.add(sample_id+"标本审批已驳回");
                 }
+            }else {
+                errorList.add(sample_id+"标本未申请出库");
             }
         }
         if (errorList.isEmpty()) {
-            saveVO.setSampleName(sample_names);//设置标本名称
-            museumFlowService.createMuseumFlow(saveVO);//创建表单
-            museumFlowService.updateMuseumFlowStateOutbound2(saveVO);//更改标本状态为出库
-
+            for (String sample_id : sample_ids) {
+                String number = sample_id;
+                museumFlowService.updateMuseumFlowStateOutbound1(number);
+            }
+            reviewVO.setSampleName(sample_names);//设置标本名称
+            museumFlowService.createMuseumFlowReview(reviewVO);//创建表单
+            museumFlowService.updateMuseumFlowStateOutbounds1(reviewVO);//更改标本状态为出库
 
 //            museumFlowService.selectPageS(respVO);
             return CommonResult.success(true);
         }else {
             System.out.println(errorList);
-            return CommonResult.error(200, "标本存在错误");
+            return CommonResult.error(200, errorList.toString());
         }
     }
 
@@ -106,71 +185,169 @@ public class MuseumFlowController {
     @PostMapping("/review")
     @Operation(summary = "通过的审批单")
     public CommonResult<Boolean> createMuseumFlowReview(@RequestBody MuseumFlowReviewVO reviewVO) {
-        String sample_id = reviewVO.getNumber();
-        String number = reviewVO.getNumber();
-        MuseumInfoDO result = museumFlowService.selectMuseumFlowSampleId(sample_id);
-        MuseumFlowDO event = museumFlowService.selectMuseumFlowNumber(number);
-
-        int Save = result.getSave();
-        int State = event.getState();
-//             Save中 0现为未出库或已回库,1为已出库
-//             State中 0现为未出库或已回库,1为已出库,2为审批中,3为审批通过,4为审批驳回
-        //TODO 你这里上面获取了result和event的值再判断他为空,怎么可能为空 ,所以如果为空的话,上面两句就直接报错了
-        if (result == null) {
-            return CommonResult.error(200, "样品不存在");
-        } else if (event == null) {
-            return CommonResult.error(200, "样品在出入库的库中不存在");
+        List<String> sample_ids = reviewVO.getNumber();
+        List<String> errorList = new ArrayList<>();
+        List<String> sample_names = new ArrayList<>();
+////             Save中 1现为未出库或已回库,0为已出库
+////             State中 0现为未出库或已回库,1为已出库,2为审批中,3为审批通过,4为审批驳回
+        for (String sample_id : sample_ids) {
+            MuseumInfoDO result = museumFlowService.selectMuseumFlowSampleId(sample_id);
+            MuseumFlowDO event = museumFlowService.selectMuseumFlowNumber(sample_id);
+            String name = result.getChineseName();
+                if (event != null) {
+                    int State = event.getState();
+                    if (State == 2) {
+                        sample_names.add(name);
+                    }else if (State == 3) {
+                        errorList.add(sample_id+"标本审批已通过");
+                    }else if (State == 4) {
+                        errorList.add(sample_id+"标本审批已驳回");
+                    }
+                }else {
+                    errorList.add(sample_id+"标本未申请出库");
+                }
         }
-        else if (Save == 0) {
-            return CommonResult.error(200, "样品并未申请出库");
-        } else if (Save == 1) {
-            if (State == 2) {
-                museumFlowService.createMuseumFlowReview(reviewVO);
-                museumFlowService.updateMuseumFlowStateReview3(reviewVO);
-                return CommonResult.success(true);
-            } else if (State == 3) {
-                return CommonResult.error(200, "样品已审批通过");
-            } else if (State == 4) {
-                return CommonResult.error(200, "样品审批已被驳回");
+        if (errorList.isEmpty()) {
+            for (String sample_id : sample_ids) {
+                String number = sample_id;
+                museumFlowService.updateMuseumFlowStateReview3(number);
             }
-        } else {
-            return CommonResult.error(200, "样品已审批通过并出库");
+            reviewVO.setSampleName(sample_names);//设置标本名称
+            museumFlowService.createMuseumFlowReview(reviewVO);//创建表单
+            museumFlowService.updateMuseumFlowStateReviews3(reviewVO);//更改标本状态为出库
+
+//            museumFlowService.selectPageS(respVO);
+            return CommonResult.success(true);
+        }else {
+            System.out.println(errorList);
+            return CommonResult.error(200, errorList.toString());
         }
-        return CommonResult.success(true);
     }
+//        String sample_id = reviewVO.getNumber();
+//        String number = reviewVO.getNumber();
+//        MuseumInfoDO result = museumFlowService.selectMuseumFlowSampleId(sample_id);
+//        MuseumFlowDO event = museumFlowService.selectMuseumFlowNumber(number);
+//
+//        int Save = result.getSave();
+//        int State = event.getState();
+////             Save中 0现为未出库或已回库,1为已出库
+////             State中 0现为未出库或已回库,1为已出库,2为审批中,3为审批通过,4为审批驳回
+//        //TODO 你这里上面获取了result和event的值再判断他为空,怎么可能为空 ,所以如果为空的话,上面两句就直接报错了
+//        if (result == null) {
+//            return CommonResult.error(200, "样品不存在");
+//        } else if (event == null) {
+//            return CommonResult.error(200, "样品在出入库的库中不存在");
+//        }
+//        else if (Save == 0) {
+//            return CommonResult.error(200, "样品并未申请出库");
+//        } else if (Save == 1) {
+//            if (State == 2) {
+//                museumFlowService.createMuseumFlowReview(reviewVO);
+//                museumFlowService.updateMuseumFlowStateReview3(reviewVO);
+//                return CommonResult.success(true);
+//            } else if (State == 3) {
+//                return CommonResult.error(200, "样品已审批通过");
+//            } else if (State == 4) {
+//                return CommonResult.error(200, "样品审批已被驳回");
+//            }
+//        } else {
+//            return CommonResult.error(200, "样品已审批通过并出库");
+//        }
 
     @PostMapping("/reject")
     @Operation(summary = "新增驳回的审批单")
     public CommonResult<Boolean> createMuseumFlowReject(@RequestBody MuseumFlowReviewVO reviewVO) {
-        String sample_id = reviewVO.getNumber();
-        String number = reviewVO.getNumber();
-        MuseumInfoDO result = museumFlowService.selectMuseumFlowSampleId(sample_id);
-        MuseumFlowDO event = museumFlowService.selectMuseumFlowNumber(number);
-        int Save = result.getSave();
-        int State = event.getState();
-//             Save中 0现为未出库或已回库,1为已出库
-//             State中 0现为未出库或已回库,1为已出库,2为审批中,3为审批通过,4为审批驳回
-        if (result == null) {
-            return CommonResult.error(200, "样品不存在");
-        } else if (event == null) {
-            return CommonResult.error(200, "样品在出入库的库中不存在");
+        List<String> sample_ids = reviewVO.getNumber();
+        List<String> errorList = new ArrayList<>();
+        List<String> sample_names = new ArrayList<>();
+////             Save中 1现为未出库或已回库,0为已出库
+////             State中 0现为未出库或已回库,1为已出库,2为审批中,3为审批通过,4为审批驳回
+        for (String sample_id : sample_ids) {
+            MuseumInfoDO result = museumFlowService.selectMuseumFlowSampleId(sample_id);
+            MuseumFlowDO event = museumFlowService.selectMuseumFlowNumber(sample_id);
+            String name = result.getChineseName();
+            if (event != null) {
+                int State = event.getState();
+                if (State == 2) {
+                    sample_names.add(name);
+                }else if (State == 3) {
+                    errorList.add(sample_id+"标本审批已通过");
+                }else if (State == 4) {
+                    errorList.add(sample_id+"标本审批已驳回");
+                }
+            }else {
+                errorList.add(sample_id+"标本未申请出库");
+            }
         }
-        else if (Save == 1) {
-            return CommonResult.error(200, "样品已出库");
-        } else if (Save == 0) {
-            if (State == 2) {
-                museumFlowService.createMuseumFlowReview(reviewVO);
-                museumFlowService.updateMuseumFlowStateReview4(reviewVO);
-                return CommonResult.success(true);
-            } else if (State == 3) {
-                return CommonResult.error(200, "样品已审批通过");
-            } else if (State == 4) {
-                return CommonResult.error(200, "样品审批已被驳回");
+        if (errorList.isEmpty()) {
+            for (String sample_id : sample_ids) {
+                String number = sample_id;
+                museumFlowService.updateMuseumFlowStateReview4(number);
             }
-        } else {
-            return CommonResult.error(200, "样品已审批通过并出库");
+            reviewVO.setSampleName(sample_names);//设置标本名称
+            museumFlowService.createMuseumFlowReview(reviewVO);//创建表单
+            museumFlowService.updateMuseumFlowStateReviews4(reviewVO);//更改标本状态为出库
+
+//            museumFlowService.selectPageS(respVO);
+            return CommonResult.success(true);
+        }else {
+            System.out.println(errorList);
+            return CommonResult.error(200, errorList.toString());
         }
-        return CommonResult.success(true);
+//        for (String sample_id : sample_ids) {
+//            MuseumInfoDO result = museumFlowService.selectMuseumFlowSampleId(sample_id);
+//            if (result == null) {
+//                errorList.add(sample_id+"标本不存在");
+//            }
+//            else {
+//                int save = result.getSave();
+//                String name = result.getChineseName();
+//                if (save == 0) {
+//                    errorList.add(sample_id+"标本不在库中");
+//                }else {
+//                    sample_names.add(name);
+//                }
+//            }
+//        }
+//        if (errorList.isEmpty()) {
+//            reviewVO.setSampleName(sample_names);//设置标本名称
+//            museumFlowService.createMuseumFlowReview(reviewVO);//创建表单
+//            museumFlowService.updateMuseumFlowStateReview4(reviewVO);
+////            museumFlowService.selectPageS(respVO);
+//            return CommonResult.success(true);
+//        }else {
+//            System.out.println(errorList);
+//            return CommonResult.error(200, "标本存在错误");
+//        }
+//        String sample_id = reviewVO.getNumber();
+//        String number = reviewVO.getNumber();
+//        MuseumInfoDO result = museumFlowService.selectMuseumFlowSampleId(sample_id);
+//        MuseumFlowDO event = museumFlowService.selectMuseumFlowNumber(number);
+//        int Save = result.getSave();
+//        int State = event.getState();
+////             Save中 0现为未出库或已回库,1为已出库
+////             State中 0现为未出库或已回库,1为已出库,2为审批中,3为审批通过,4为审批驳回
+//        if (result == null) {
+//            return CommonResult.error(200, "样品不存在");
+//        } else if (event == null) {
+//            return CommonResult.error(200, "样品在出入库的库中不存在");
+//        }
+//        else if (Save == 1) {
+//            return CommonResult.error(200, "样品已出库");
+//        } else if (Save == 0) {
+//            if (State == 2) {
+//                museumFlowService.createMuseumFlowReview(reviewVO);
+//                museumFlowService.updateMuseumFlowStateReview4(reviewVO);
+//                return CommonResult.success(true);
+//            } else if (State == 3) {
+//                return CommonResult.error(200, "样品已审批通过");
+//            } else if (State == 4) {
+//                return CommonResult.error(200, "样品审批已被驳回");
+//            }
+//        } else {
+//            return CommonResult.error(200, "样品已审批通过并出库");
+//        }
+//        return CommonResult.success(true);
     }
 
     @PostMapping("/return")
@@ -206,5 +383,4 @@ public class MuseumFlowController {
         }
         return CommonResult.success(true);
     }
-
 }

+ 2 - 1
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museumflow/vo/MuseumFlowPageVO.java

@@ -9,6 +9,7 @@ import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Schema(description ="博物馆-申请表分页 page VO")
 @Data
@@ -21,7 +22,7 @@ public class MuseumFlowPageVO extends PageParam {
     private Integer id;
 
     @Schema(description = "样品编号")
-    private String number;
+    private List<String> number;
 
     @Schema(description = "样品名称")
     private String sampleName;

+ 16 - 3
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museumflow/vo/MuseumFlowReviewVO.java

@@ -5,20 +5,20 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Schema(description = "博物馆-审批表信息 review VO")
 @Data
 public class MuseumFlowReviewVO {
 
-    @TableId
     @Schema(description = "样品ID")
     private Integer id;
 
     @Schema(description = "样品编号")
-    private String number;
+    private List<String> number;
 
     @Schema(description = "样品名称")
-    private String sampleName;
+    private List<String> sampleName;
 
     @Schema(description = "出库员")
     private String outboundPerson;
@@ -53,9 +53,22 @@ public class MuseumFlowReviewVO {
     @Schema(description = "拒绝原因")
     private String rejectSeason;
 
+    @Schema(description = "退还员")
+    private String returnPerson;
+
+    @Schema(description = "退还时间")
+    private LocalDateTime returnTime;
+
+    @Schema(description = "点收人")
+    private String receivePerson;
+
+    @Schema(description = "回库附件")
+    private String annexReturn;
+
     @Schema(description = "备注")
     private String nots;
 
     @Schema(description = "状态")
     private Integer state;
+
 }

+ 2 - 2
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museumflow/vo/MuseumFlowSaveVO.java

@@ -16,10 +16,10 @@ public class MuseumFlowSaveVO {
     private Integer id;
 
     @Schema(description = "样品编号")
-    private List<String> number;
+    private String number;
 
     @Schema(description = "样品名称")
-    private List<String> sampleName;
+    private String sampleName;
 
     @Schema(description = "出库员")
     private String outboundPerson;

+ 84 - 26
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museuminfo/MuseumInfoController.java

@@ -8,11 +8,14 @@ import cn.iocoder.yudao.module.museum.dal.database.museuminfo.MuseumInfoDO;
 import cn.iocoder.yudao.module.museum.service.museuminfo.MuseumInfoService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,14 +36,14 @@ public class MuseumInfoController {
     @Operation(summary = "新增标本")
     public CommonResult<Integer> createMuseumInfo(@RequestBody MuseumInfoSaveVO saveVO) {
         String sampleId = saveVO.getSampleId();
-        MuseumInfoDO result = museumInfoService.getMuseumInfoBySampleId(sampleId);
+        List<MuseumInfoDO> result = museumInfoService.getMuseumInfoBySampleId(sampleId);
         if (result != null) {
             return CommonResult.error(1, "标本编号已存在");
         } else {
             return CommonResult.success(museumInfoService.createMuseumInfo(saveVO));
         }
     }
-
+    @PostMapping("/update")
     @Operation(summary = "更新标本")
     public CommonResult<Boolean> updateMuseumInfo(@RequestBody MuseumInfoSaveVO saveVO){
         museumInfoService.updateMuseumInfo(saveVO);
@@ -67,14 +70,23 @@ public class MuseumInfoController {
       return CommonResult.success(result1);
     }
 
-    @GetMapping("/selectMuseumInfoList")
-    @Operation(summary = "标本类型查找")
+    @GetMapping("/getSampleId")
+    @Operation(summary = "标本编号查寻")
+    public CommonResult<List<MuseumInfoRespVO>> getMuseumInfoList(@RequestParam("sampleId") String sampleId){
+        List<MuseumInfoDO> result = museumInfoService.getMuseumInfoBySampleId(sampleId);
+        List<MuseumInfoRespVO> result1 = BeanUtils.toBean(result,MuseumInfoRespVO.class);
+        return CommonResult.success(result1);
+    }
+
+    @GetMapping("/getSampleType")
+    @Operation(summary = "标本类型查寻")
     public CommonResult<List<MuseumInfoRespVO>> getMuseumInfoList(@RequestParam("sampleType") Integer sampleType){
         List<MuseumInfoDO> result = museumInfoService.selectMuseumInfoListBySampleType(sampleType);
         List<MuseumInfoRespVO> result1 = BeanUtils.toBean(result,MuseumInfoRespVO.class);
         return CommonResult.success(result1);
     }
 
+
     @GetMapping("/page")
     @Operation(summary = "获取分页")
     public CommonResult<PageResult<MuseumInfoPageReqVO>> getPage(@Valid MuseumInfoPageReqVO pageReqVO){
@@ -90,10 +102,18 @@ public class MuseumInfoController {
 //
     @GetMapping("/sampleTypeCount")
     @Operation(summary = "标本类型计数")
-    public CommonResult<List<MuseuminfoTypeVO>> getMap(@RequestParam("sampleType") Integer sampleType) {
-        List<MuseuminfoTypeVO> result = museumInfoService.MuseumInfoBySampleType(sampleType);
+    public CommonResult<Map<String,Integer>> getMap() {
+        Integer count1 = museumInfoService.MuseumInfoBySampleType(1);
+        Integer count2 = museumInfoService.MuseumInfoBySampleType(2);
+        Integer count3 = museumInfoService.MuseumInfoBySampleType(3);
+        Integer count4 = museumInfoService.MuseumInfoBySampleType(4);
 //          标本类型:矿石-1 岩石-2 矿物-3 陨石-4>
-        return CommonResult.success(result);
+        Map<String, Integer> map = new HashMap<>();
+        map.put("矿石", count1);
+        map.put("岩石", count2);
+        map.put("矿物", count3);
+        map.put("陨石", count4);
+        return CommonResult.success(map);
     }
 
 
@@ -101,36 +121,74 @@ public class MuseumInfoController {
 
     @GetMapping("/joinSaveCount")
     @Operation(summary = "标本出入库状态计数(每月)(入库)")
-    public CommonResult<List<MuseuminfoMonthSaveVO>> getJoinSave(@RequestParam("save") Integer save) {
-        List<MuseuminfoMonthSaveVO> result1 = museumInfoService.MuseumInfoBySaveJoin(save);
+    public CommonResult<List<MuseuminfoMonthSaveVO>> getJoinSave() {
 //        状态:在库-1 出库-0
 //          构造 12 个月的数据,确保每个月都有数据(即使为 0)
-//        List<MuseuminfoMonthSaveVO> result = new ArrayList<>();
-//        for (int month = 1 ; month <= 1 ; month++){
-//            String monthStr = String.format("%d-%2d",save, month);
-//            Optional<MuseuminfoMonthSaveVO> found = MonthSave.stream()
-//            filter(f ->f.getMonth().equals(monthStr))
-//                    .findFirst();
-//            MuseuminfoMonthSaveVO vo = new MuseuminfoMonthSaveVO();
-//            vo.setMonth(monthStr);
-//            vo.setCount(found.map(MuseuminfoMonthSaveVO::getSave).orElse( other: 0)).
-//            result.add(vo);
-        return CommonResult.success(result1);
+        List<MuseuminfoMonthSaveVO> result = new ArrayList<>();
+        LocalDate date = LocalDate.now();
+        int currentYear =date.getYear();
+        for (int month = 1 ; month <= 12 ; month++) {
+
+            Integer number =museumInfoService.MuseumInfoBySaveJoin(month,currentYear);
+            MuseuminfoMonthSaveVO  re = new MuseuminfoMonthSaveVO();
+            re.setMonth(month);
+            if (number == null) {
+                re.setCount(0);
+            }else {
+                re.setCount(number);
+            }
+            result.add(re);
+        }
+        return CommonResult.success(result);
     }
 
     @GetMapping("/outSaveCount")
     @Operation(summary = "标本出入库状态计数(每月)(出库)")
-    public CommonResult<List<MuseuminfoMonthSaveVO>> getOutSave(@RequestParam("save") Integer save) {
-        List<MuseuminfoMonthSaveVO> result1 = museumInfoService.MuseumInfoBySaveOut(save);
-        return CommonResult.success(result1);
+    public CommonResult<List<MuseuminfoMonthSaveVO>> getOutSave() {
+        LocalDate date = LocalDate.now();
+        int currentYear =date.getYear();
+        List<MuseuminfoMonthSaveVO> result = new ArrayList<>();
+        for (int month = 1 ; month <= 12 ; month++) {
+
+            Integer number =museumInfoService.MuseumInfoBySaveOut(month,currentYear);
+            MuseuminfoMonthSaveVO  re = new MuseuminfoMonthSaveVO();
+            re.setMonth(month);
+            if (number == null) {
+                re.setCount(0);
+            }else {
+                re.setCount(number);
+            }
+            result.add(re);
+        }
+        return CommonResult.success(result);
     }
 
     @GetMapping("/originCount")
     @Operation(summary = "标本来源计数")
-    public CommonResult<List<MuseuminfoOriginVO>> getOrigin(@RequestParam("origin") Integer origin){
-        List<MuseuminfoOriginVO> result1 =museumInfoService.MuseumInfoByOrigin(origin);
+    public CommonResult<List<Map<Integer,Object>>> getOrigin(){
 //        来源:采购-1 捐赠-2 采集-3 其他-4
-        return CommonResult.success(result1);
+
+        List<Map<Integer,Object>> result = new ArrayList<>();
+        LocalDate date = LocalDate.now();
+        int currentYear =date.getYear();
+        int year1 =currentYear-2;
+        for (int year =currentYear ; year>=year1  ; year--) {
+
+            Integer number1 = museumInfoService.MuseumInfoByOrigin(year,1);
+            Integer number2 = museumInfoService.MuseumInfoByOrigin(year,2);
+            Integer number3 = museumInfoService.MuseumInfoByOrigin(year,3);
+            Integer number4 = museumInfoService.MuseumInfoByOrigin(year,4);
+
+            Map<Integer,Object> map = new HashMap<>();
+            Map<String, Integer> innerMap = new HashMap<>();
+            innerMap.put("采购", number1);
+            innerMap.put("捐赠", number2);
+            innerMap.put("采集", number3);
+            innerMap.put("其他", number4);
+            map.put(year,innerMap);
+            result.add(map);
+        }
+        return CommonResult.success(result);
     }
 
 

+ 0 - 3
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museuminfo/vo/MuseumInfoPageReqVO.java

@@ -1,14 +1,11 @@
 package cn.iocoder.yudao.module.museum.controller.admin.museuminfo.vo;
 
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.module.museum.controller.admin.museuminfo.MuseumInfoController;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
-import java.time.LocalDateTime;
-
 @Schema(description = "博物馆-标本信息-分页 pageReq VO")
 @Data
 @EqualsAndHashCode(callSuper = true)

+ 1 - 1
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museuminfo/vo/MuseuminfoMonthSaveVO.java

@@ -10,5 +10,5 @@ import java.time.LocalDateTime;
 @Data
 public class MuseuminfoMonthSaveVO {
     private Integer month;
-    private Long count;
+    private Integer count;
 }

+ 2 - 2
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museuminfo/vo/MuseuminfoOriginVO.java

@@ -9,8 +9,8 @@ import java.time.LocalDateTime;
 @Schema(description = "博物馆-标本信息 origin VO")
 @Data
 public class MuseuminfoOriginVO {
-    private String year;
+    private Integer year;
     private Integer origin;
-    private Long count;
+    private Integer count;
 
 }

+ 1 - 1
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museuminfo/vo/MuseuminfoTypeVO.java

@@ -10,5 +10,5 @@ import java.time.LocalDateTime;
 @Data
 public class MuseuminfoTypeVO {
     private Integer sampleType;
-    private Long count;
+    private Integer count;
 }

+ 11 - 0
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/controller/admin/museumpicture/MuseumPictureController.java

@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 
@@ -120,4 +121,14 @@ public class MuseumPictureController {
 //
 //        controller.handleUnzipRequest(groupId, zipFilePath);
 //    }
+
+
+    @PostMapping("/upload-zip")
+    @Operation(summary = "照片上传")
+    @PreAuthorize("@ss.hasPermission('system:tenant:query')")
+    public CommonResult<Boolean> uploadZip(@RequestParam("file") MultipartFile file,
+                                               @RequestParam("groupId") Long groupId) throws IOException {
+        museumPictureService.processZipUpload(file, groupId);
+        return CommonResult.success(true);
+    }
 }

+ 25 - 5
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/dal/mysql/museumflow/MuseumFlowMapper.java

@@ -37,6 +37,9 @@ public interface MuseumFlowMapper extends BaseMapperX<MuseumFlowDO> {
     @Select("SELECT * FROM museum_outbound WHERE number = #{number} AND deleted = 0 ")
     MuseumFlowDO selectMuseumFlowByNumber(@Param("number")String number);
 
+    /**根据编号数组在Flow库中进行查找*/
+    @Select("SELECT * FROM museum_outbound WHERE number = #{number} AND deleted = 0 ")
+    MuseumFlowDO selectMuseumFlowByNumbers(@Param("number")List<String> number);
 
 /**出库功能
 
@@ -44,6 +47,18 @@ public interface MuseumFlowMapper extends BaseMapperX<MuseumFlowDO> {
     @Update("UPDATE museum_info SET save=1  WHERE sample_id = #{sample_id} AND deleted =0 ")
     void updateMuseumFlowSave1(MuseumFlowDO museumFlowDO);
 
+    /**将样品状态更新为1 已出库**/
+    @Update("UPDATE museum_info SET save=1  WHERE sample_id = #{sample_id} AND deleted =0 ")
+    void updateMuseumFlowStateOutbound1(String number);
+
+    /**将样品数组状态更新为1 已出库**/
+    @Update("UPDATE museum_info SET save=1  WHERE sample_id = #{sample_id} AND deleted =0 ")
+    void updateMuseumFlowStateOutbounds1(MuseumFlowDO MuseumFlowDO);
+
+
+    /**将样品状态更新为2 审批中**/
+    @Update("UPDATE museum_outbound SET state=2  WHERE number =#{number} AND deleted =0 ")
+    void updateMuseumFlowStateOutbound2(MuseumFlowDO MuseumFlowDO);
 
 //   default MuseumFlowDO selectPageMuseumFlowByPage(String number){return selectOne(MuseumFlowDO::getNumber,number);}
 /**分页**/
@@ -79,17 +94,22 @@ public interface MuseumFlowMapper extends BaseMapperX<MuseumFlowDO> {
 
 /**审批功能
 
-    /**将样品状态更新为2 审批中**/
-    @Update("UPDATE museum_outbound SET state=2  WHERE number =#{number} AND deleted =0 ")
-    void updateMuseumFlowStateReview2(MuseumFlowDO MuseumFlowDO);
 
     /**将样品状态更新为3 审批通过**/
     @Update("UPDATE museum_outbound SET state=3  WHERE number =#{number} AND deleted =0 ")
-    void updateMuseumFlowStateReview3(MuseumFlowDO MuseumFlowDO);
+    void updateMuseumFlowStateReview3(String number);
 
     /**将样品状态更新为4 审批驳回**/
     @Update("UPDATE museum_outbound SET state=4  WHERE number =#{number} AND deleted =0 ")
-    void updateMuseumFlowStateReview4(MuseumFlowDO MuseumFlowDO);
+    void updateMuseumFlowStateReview4(String number);
+
+    /**将样品数组状态更新为3 审批通过**/
+    @Update("UPDATE museum_outbound SET state=3  WHERE number =#{number} AND deleted =0 ")
+    void updateMuseumFlowStateReviews3(MuseumFlowDO MuseumFlowDO);
+
+    /**将样品数组状态更新为4 审批驳回**/
+    @Update("UPDATE museum_outbound SET state=4  WHERE number =#{number} AND deleted =0 ")
+    void updateMuseumFlowStateReviews4(MuseumFlowDO MuseumFlowDO);
 
 
 /**回库功能

+ 22 - 22
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/dal/mysql/museuminfo/MuseumInfoMapper.java

@@ -40,7 +40,7 @@ public interface MuseumInfoMapper extends BaseMapperX<MuseumInfoDO> {
      * 查询标本编号
      */
     @Select("SELECT * FROM museum_info WHERE sample_id =#{sampleId} AND deleted =0")
-    MuseumInfoDO getMuseumInfoBySampleId(@Param("sampleId") String sampleId);
+    List<MuseumInfoDO> getMuseumInfoBySampleId(@Param("sampleId") String sampleId);
 
     /**
      * 查询标本类型
@@ -51,40 +51,40 @@ public interface MuseumInfoMapper extends BaseMapperX<MuseumInfoDO> {
     /**
      * 标本类型计数1
      */
-    @Select("SELECT sample_type ,COUNT(*)AS count FROM museum_info WHERE deleted =0 GROUP BY sample_type")
-    List<MuseuminfoTypeVO> countMuseumInfoBySampleType(@Param("sampleType") Integer sampleType);
-
+    @Select("SELECT COUNT(*) FROM museum_info WHERE deleted =0 AND sample_type =#{sampleType}")
+    Integer countMuseumInfoBySampleType(@Param("sampleType") Integer sampleType);
     /**
      * 标本入库状态计数
      */
     @Select("SELECT" +
-            " DATE_FORMAT(sample_save_time,'%m')AS month," +
-            " COUNT(*) AS count " +
+            " COUNT(*)"+
             " FROM museum_info " +
-            " WHERE deleted =0 AND save =1" +
-            " GROUP BY DATE_FORMAT(sample_save_time,'%m')" +
-            " ORDER BY month")
-    List<MuseuminfoMonthSaveVO> countMuseumInfoBySaveJoin(@Param("save") Integer save);
-
+            " WHERE deleted =0 AND save =1"+
+            " AND DATE_FORMAT(sample_save_time,'%m') = #{month}"+
+            " AND DATE_FORMAT(sample_save_time,'%Y') = #{currentYear}")
+    Integer countMuseumInfoBySaveJoin(@Param("month") Integer month,@Param("currentYear") Integer currentYear);
     /**
      * 标本出库状态计数
      */
     @Select("SELECT" +
-            " DATE_FORMAT(sample_save_time,'%m')AS month," +
-            " COUNT(*) AS count " +
-            " FROM museum_info " +
-            " WHERE deleted =0 AND save =1" +
-            " GROUP BY DATE_FORMAT(sample_save_time,'%m')" +
-            " ORDER BY month")
-    List<MuseuminfoMonthSaveVO> countMuseumInfoBySaveOut(@Param("save") Integer save);
+            " COUNT(*)"+
+            " FROM museum_outbound " +
+            " WHERE deleted =0 "+
+            " AND DATE_FORMAT(outbound_time,'%m') = #{month}"+
+            " AND DATE_FORMAT(sample_save_time,'%Y') = #{currentYear}")
+    Integer countMuseumInfoBySaveOut(@Param("month") Integer month,@Param("currentYear") Integer currentYear);
 
     /**
      * 标本来源计数(年)
      */
-//    @Select("SELECT COUNT(*)  FROM museum_info  WHERE origin =#{origin} AND deleted =0 AND sample_save_time >=2025-02")
-//    Integer countMuseumInfoByOrigin (@Param("origin") Integer origin);
-    @Select("SELECT origin,DATE_FORMAT(sample_save_time,'%Y')AS year ,COUNT(*)AS count  FROM museum_info WHERE deleted =0 AND save =1 GROUP BY origin,DATE_FORMAT(sample_save_time,'%Y')")
-    List<MuseuminfoOriginVO> countMuseumInfoByOrigin(@Param("origin") Integer origin);
+    @Select("SELECT" +
+            " COUNT(*)"+
+            " FROM museum_info " +
+            " WHERE deleted =0 AND save =1"+
+            " AND DATE_FORMAT(sample_save_time,'%Y') = #{year}"+
+            " AND origin = #{origin}")
+    Integer countMuseumInfoByOrigin(@Param("year") Integer year, @Param("origin") Integer origin);
+
 
     /**
      * 分页

+ 23 - 10
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museumflow/MuseumFlowService.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.museum.service.museumflow;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.museum.controller.admin.museumflow.vo.MuseumFlowPageVO;
 import cn.iocoder.yudao.module.museum.controller.admin.museumflow.vo.MuseumFlowReturnVO;
 import cn.iocoder.yudao.module.museum.controller.admin.museumflow.vo.MuseumFlowReviewVO;
@@ -8,6 +9,8 @@ import cn.iocoder.yudao.module.museum.controller.admin.museumflow.vo.MuseumFlowS
 import cn.iocoder.yudao.module.museum.dal.database.museumflow.MuseumFlowDO;
 import cn.iocoder.yudao.module.museum.dal.database.museuminfo.MuseumInfoDO;
 
+import java.util.List;
+
 public interface MuseumFlowService {
     /**
      * 创建标本
@@ -33,19 +36,27 @@ public interface MuseumFlowService {
 
 /**搜索功能
 
-    /**根据号在Flow库中进行查找*/
+    /**根据号在Flow库中进行查找*/
     MuseumFlowDO selectMuseumFlowNumber(String number);
 
     /**根据编号在总表中进行查找*/
     MuseumInfoDO selectMuseumFlowSampleId(String sample_id);
 
+    /**根据编号数组在Flow库中进行查找*/
+    MuseumFlowDO selectMuseumFlowNumbers(List<String> number);
 
 /**出库功能
 
-    /**将主库中样品状态设置为1*/
+    /**将主库中标本状态设置为1*/
     void updateMuseumFlowSave1(MuseumFlowSaveVO saveVO);
 
-    /**将样品状态设置为2 审批中*/
+    /**标本状态设置为1*/
+    void updateMuseumFlowStateOutbound1(String number);
+
+    /**标本状态设置为1*/
+    void updateMuseumFlowStateOutbounds1(MuseumFlowReviewVO reviewVO);
+
+    /**将标本状态设置为2 审批中*/
     void updateMuseumFlowStateOutbound2(MuseumFlowSaveVO saveVO);
 
 
@@ -63,21 +74,23 @@ public interface MuseumFlowService {
     /**新建审批单*/
     Integer createMuseumFlowReview(MuseumFlowReviewVO reviewVO);
 
-    /**将样品状态设置为2 审批中*/
-    void updateMuseumFlowStateReview2(MuseumFlowReviewVO reviewVO);
+    /**将标本状态设置为3 审批通过*/
+    void updateMuseumFlowStateReview3(String number);
 
-    /**将样品状态设置为2 审批通过*/
-    void updateMuseumFlowStateReview3(MuseumFlowReviewVO reviewVO);
+    /**将标本状态设置为4 审批驳回*/
+    void updateMuseumFlowStateReview4(String number);
 
-    /**将样品状态设置为2 审批驳回*/
-    void updateMuseumFlowStateReview4(MuseumFlowReviewVO reviewVO);
+    /**将标本数组状态设置为3 审批通过*/
+    void updateMuseumFlowStateReviews3(MuseumFlowReviewVO reviewVO);
 
+    /**将标本数组状态设置为4 审批驳回*/
+    void updateMuseumFlowStateReviews4(MuseumFlowReviewVO reviewVO);
 
 /**回库功能
 
     /**新建出库单**/
     Integer createMuseumFlowReturn(MuseumFlowReturnVO returnVO);
 
-    /**将主库中样品状态设置为1*/
+    /**将主库中标本状态设置为1*/
     void updateMuseumFlowSave0(MuseumFlowReturnVO returnVO);
 }

+ 34 - 10
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museumflow/MuseumFlowServiceImpl.java

@@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.museum.dal.mysql.museumflow.MuseumFlowMapper;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 @Service
 public class MuseumFlowServiceImpl implements MuseumFlowService {
@@ -55,6 +56,11 @@ public class MuseumFlowServiceImpl implements MuseumFlowService {
         return museumFlowMapper.selectMuseumFlowByNumber(number);
     }
 
+    /**根据编号数组在Flow库中进行查找**/
+    public MuseumFlowDO selectMuseumFlowNumbers(List<String> number){
+        return museumFlowMapper.selectMuseumFlowByNumbers(number);
+    }
+
 /**出库功能
 
     /**创建出库单*/
@@ -70,9 +76,21 @@ public class MuseumFlowServiceImpl implements MuseumFlowService {
         museumFlowMapper.updateMuseumFlowSave1(BeanUtils.toBean(saveVO,MuseumFlowDO.class));
     }
 
+    /**将样品状态设置为1 已出库*/
+    @Override
+    public void updateMuseumFlowStateOutbound1(String number){
+        museumFlowMapper.updateMuseumFlowStateOutbound1(number);
+    }
+
+    /**将样品组状态设置为1 已出库*/
+    @Override
+    public void updateMuseumFlowStateOutbounds1(MuseumFlowReviewVO reviewVO){
+        museumFlowMapper.updateMuseumFlowStateOutbounds1(BeanUtils.toBean(reviewVO,MuseumFlowDO.class));
+    }
+
     /**将样品状态设置为2 审批中*/
     public void updateMuseumFlowStateOutbound2(MuseumFlowSaveVO saveVO){
-        museumFlowMapper.updateMuseumFlowStateReview2(BeanUtils.toBean(saveVO,MuseumFlowDO.class));
+        museumFlowMapper.updateMuseumFlowStateOutbound2(BeanUtils.toBean(saveVO,MuseumFlowDO.class));
     }
 
 
@@ -102,20 +120,26 @@ public class MuseumFlowServiceImpl implements MuseumFlowService {
     return museumFlowMapper.insert(result);
     }
 
-    /**将样品状态设置为2 审批中*/
-    @Override
-    public void updateMuseumFlowStateReview2(MuseumFlowReviewVO reviewVO){
-        museumFlowMapper.updateMuseumFlowStateReview2(BeanUtils.toBean(reviewVO,MuseumFlowDO.class));
-    }
     /**将样品状态设置为3 审批通过*/
     @Override
-    public void updateMuseumFlowStateReview3(MuseumFlowReviewVO reviewVO){
-        museumFlowMapper.updateMuseumFlowStateReview3(BeanUtils.toBean(reviewVO,MuseumFlowDO.class));
+    public void updateMuseumFlowStateReview3(String number){
+        museumFlowMapper.updateMuseumFlowStateReview3(number);
     }
     /**将样品状态设置为4 审批驳回*/
     @Override
-    public void updateMuseumFlowStateReview4(MuseumFlowReviewVO reviewVO){
-        museumFlowMapper.updateMuseumFlowStateReview4(BeanUtils.toBean(reviewVO,MuseumFlowDO.class));
+    public void updateMuseumFlowStateReview4(String number) {
+        museumFlowMapper.updateMuseumFlowStateReview4(number);
+    }
+    /**将样品数组状态设置为3 审批通过*/
+    @Override
+    public void updateMuseumFlowStateReviews3(MuseumFlowReviewVO reviewVO) {
+        museumFlowMapper.updateMuseumFlowStateReviews3(BeanUtils.toBean(reviewVO,MuseumFlowDO.class));
+    }
+
+    /**将样品数组状态设置为4 审批驳回*/
+    @Override
+    public void updateMuseumFlowStateReviews4(MuseumFlowReviewVO reviewVO) {
+        museumFlowMapper.updateMuseumFlowStateReviews4(BeanUtils.toBean(reviewVO,MuseumFlowDO.class));
     }
 
 

+ 8 - 5
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museuminfo/MuseumInfoService.java

@@ -34,7 +34,8 @@ public interface MuseumInfoService {
    /**
     * 查询标本编号
     * */
-   MuseumInfoDO getMuseumInfoBySampleId(String sampleId);
+   List<MuseumInfoDO> getMuseumInfoBySampleId(String sampleId);
+
    /**
    * 查询标本类型
    * */
@@ -49,16 +50,18 @@ public interface MuseumInfoService {
    /**
     * 标本类型计数
     * */
-   List<MuseuminfoTypeVO> MuseumInfoBySampleType(Integer sampleType);
+   Integer MuseumInfoBySampleType(Integer sampleType);
    /**
     * 标本出入库状态计数
     * */
-   List<MuseuminfoMonthSaveVO> MuseumInfoBySaveJoin(Integer save);
+//
+    Integer MuseumInfoBySaveJoin(Integer month,Integer currentYear);
+
 
-   List<MuseuminfoMonthSaveVO> MuseumInfoBySaveOut(Integer save);
+   Integer MuseumInfoBySaveOut(Integer month,Integer currentYear);
 
    /**
     * 标本来源计数(年)
     * */
-   List<MuseuminfoOriginVO> MuseumInfoByOrigin(Integer origin);
+   Integer MuseumInfoByOrigin(Integer year, Integer origin);
 }

+ 8 - 13
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museuminfo/MuseumInfoServiceImpl.java

@@ -43,12 +43,7 @@ public  class  MuseumInfoServiceImpl implements MuseumInfoService {
    @Override
    public void deleteMuseumInfo(Integer id,String reason) {
       museumInfoMapper.deleteMuseumInfo(id,reason);
-//      museumInfoMapper.deleteById(id);
    }
-   /**
-    * 删除标本
-    */
-
    /**
     * 查询标本id
     */
@@ -61,7 +56,7 @@ public  class  MuseumInfoServiceImpl implements MuseumInfoService {
     * 查询标本编号
     */
    @Override
-   public MuseumInfoDO getMuseumInfoBySampleId (String sampleId) {
+   public List<MuseumInfoDO> getMuseumInfoBySampleId (String sampleId) {
       return museumInfoMapper.getMuseumInfoBySampleId(sampleId);
    }
    /**
@@ -82,27 +77,27 @@ public  class  MuseumInfoServiceImpl implements MuseumInfoService {
     * 标本类型计数
     * */
    @Override
-   public List<MuseuminfoTypeVO> MuseumInfoBySampleType(Integer sampleType){
+   public Integer MuseumInfoBySampleType(Integer sampleType){
       return museumInfoMapper.countMuseumInfoBySampleType(sampleType);
    }
    /**
     * 标本出入库状态计数
     * */
    @Override
-   public List<MuseuminfoMonthSaveVO> MuseumInfoBySaveJoin(Integer save) {
-      return museumInfoMapper.countMuseumInfoBySaveJoin(save);
+   public Integer MuseumInfoBySaveJoin(Integer month,Integer currentYear) {
+      return museumInfoMapper.countMuseumInfoBySaveJoin(month,currentYear);
    }
 
    @Override
-   public List<MuseuminfoMonthSaveVO> MuseumInfoBySaveOut(Integer save) {
-      return museumInfoMapper.countMuseumInfoBySaveOut(save);
+   public Integer MuseumInfoBySaveOut(Integer month,Integer currentYear) {
+      return museumInfoMapper.countMuseumInfoBySaveOut(month,currentYear);
    }
    /**
     * 标本来源计数(年)
     * */
    @Override
-   public List<MuseuminfoOriginVO> MuseumInfoByOrigin(Integer origin) {
-      return museumInfoMapper.countMuseumInfoByOrigin(origin);
+   public Integer MuseumInfoByOrigin(Integer year, Integer origin) {
+      return museumInfoMapper.countMuseumInfoByOrigin(year,origin);
    }
 }
 

+ 6 - 0
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museumpicture/MuseumPictureService.java

@@ -5,6 +5,9 @@ import cn.iocoder.yudao.module.museum.controller.admin.museumpicture.vo.MuseumPi
 import cn.iocoder.yudao.module.museum.controller.admin.museumpicture.vo.PicturePageReqVO;
 import cn.iocoder.yudao.module.museum.dal.database.museumpicture.MuseumPictureDO;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
 
 
 @Service
@@ -40,4 +43,7 @@ public interface MuseumPictureService {
 
 //     解压并添加图片
 //     void unzipAndAddToGroup(String groupId, String zipFilePath) throws Exception;
+
+    void processZipUpload(MultipartFile file, Long groupId) throws IOException;
+
 }

+ 95 - 4
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museumpicture/MuseumPictureServiceImpl.java

@@ -1,19 +1,24 @@
 package cn.iocoder.yudao.module.museum.service.museumpicture;
 
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.museum.controller.admin.museumpicture.vo.MuseumPictureSaveVO;
 import cn.iocoder.yudao.module.museum.controller.admin.museumpicture.vo.PicturePageReqVO;
 import cn.iocoder.yudao.module.museum.dal.database.museumpicture.MuseumPictureDO;
 import cn.iocoder.yudao.module.museum.dal.mysql.museumpicture.MuseumPictureMapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
+import java.io.*;
+import java.util.Date;
 import java.util.List;
-import java.io.IOException;
+import java.util.Set;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
@@ -25,6 +30,9 @@ public  class MuseumPictureServiceImpl implements MuseumPictureService {
     @Resource
     private MuseumPictureMapper museumPictureMapper;
 
+    @Resource
+    private FileApi fileApi;
+
 //    @Override
 //    public Integer createMuseumPicture(MuseumPictureSaveVO saveVO){
 //        return museumPictureMapper.insert(BeanUtils.toBean(saveVO, MuseumPictureDO.class));
@@ -66,10 +74,93 @@ public  class MuseumPictureServiceImpl implements MuseumPictureService {
         return null;
     }
 
+
+//    private final Set<String> ALLOWED_EXTENSIONS = Set.of("jpg", "jpeg", "png", "gif");
+
+//    @Override
+//    public void processZipUpload(MultipartFile file, Long groupId) throws IOException {
+//        try (ZipInputStream zis = new ZipInputStream(file.getInputStream())) {
+//            ZipEntry entry;
+//            while ((entry = zis.getNextEntry()) != null) {
+//                processZipEntry(zis, entry, groupId);
+//            }
+//        }
+//    }
+//
+//    private void processZipEntry(ZipInputStream zis, ZipEntry entry, Long groupId) throws IOException {
+//        if (entry.isDirectory() || !isImageFile(entry.getName())) {
+//            return;
+//        }
+//
+//        // 读取文件内容并上传
+//        byte[] content = IoUtil.readBytes(zis);
+//        String url = fileApi.createFile(content);
+//
+//        // 构建并保存数据库记录
+//        MuseumPictureDO photo = new MuseumPictureDO();
+//        photo.setGroupId(Math.toIntExact(groupId));
+//        photo.setPictureUrl(url);
+//        museumPictureMapper.insert(photo);
+//    }
+//
+//    private boolean isImageFile(String filename) {
+//        String extension = FilenameUtil.getExtension(filename);
+//        return StringUtils.isNotEmpty(extension);
+////                ALLOWED_EXTENSIONS.contains(extension.toLowerCase());
+//    }
+
 //    @Override
 //    public MuseumPictureDO selectMuseumPictureSet(Integer group_id){
 //        return museumPictureMapper.selectMuseumPictureSetById(group_id);
 //    }
+
+
+    @Override
+    public void processZipUpload(MultipartFile file, Long groupId) {
+        if (file == null || file.isEmpty()) {
+            throw new IllegalArgumentException("上传的文件不能为空");
+        }
+
+        try (InputStream inputStream = file.getInputStream();
+             ZipInputStream zipInputStream = new ZipInputStream(inputStream)) {
+
+            ZipEntry entry;
+            while ((entry = zipInputStream.getNextEntry()) != null) {
+                if (!entry.isDirectory() && isImageFile(entry.getName())) {
+                    // 使用 ByteArrayOutputStream 读取当前条目的内容
+                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                    byte[] buffer = new byte[4096];
+                    int bytesRead;
+                    while ((bytesRead = zipInputStream.read(buffer)) != -1) {
+                        baos.write(buffer, 0, bytesRead);
+                    }
+                    byte[] content = baos.toByteArray();
+
+                    // 上传文件并获取 URL
+                    String url = fileApi.createFile(content);
+                    // 保存到数据库
+                    savePhotoToDatabase(groupId, url);
+                }
+                // 关闭当前条目
+                zipInputStream.closeEntry();
+            }
+        } catch (IOException e) {
+            throw new RuntimeException("处理压缩包时发生错误", e);
+        }
+    }
+
+    private boolean isImageFile(String filename) {
+        // 简单检查文件扩展名是否为图片格式
+        String extension = StrUtil.subAfter(filename, '.', true).toLowerCase();
+        return extension != null && ("jpg,jpeg,png,gif,bmp".contains(extension));
+    }
+
+    private void savePhotoToDatabase(Long groupId, String url) {
+        MuseumPictureDO photo = new MuseumPictureDO();
+        photo.setGroupId(Math.toIntExact(groupId));
+        photo.setPictureUrl(url);
+        museumPictureMapper.insert(photo);
+    }
 }
 
 //     @Override

+ 1 - 0
yudao-module-museum/yudao-module-museum-biz/src/main/java/cn/iocoder/yudao/module/museum/service/museumpicture/PictureGroupServiceImpl.java

@@ -41,4 +41,5 @@ public  class PictureGroupServiceImpl implements PictureGroupService {
     public PageResult<PictureGroupDO> getGroupPage(GroupPageReqVO pageVO) {
         return null;
     }
+
 }