From 082bddee7df8a05ca95f473ec2643701d41a5213 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 08 十月 2026 11:09:01 +0800
Subject: [PATCH] 更新代码

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java |  177 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 122 insertions(+), 55 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java
index ddd14bd..ef97301 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java
@@ -164,28 +164,7 @@
         }
         culturePreservationService.saveBatch(culturePreservations);
         if (dto.getStatus()!=null&&dto.getStatus()==2){
-            // 新增消息
-            TNotice tNotice = new TNotice();
-            List<String> allProjectIds = projectTeamStaffService.lambdaQuery()
-                    .eq(TProjectTeamStaff::getTeamId,dto.getProjectId())
-                    .eq(TProjectTeamStaff::getRoleType, 2)
-                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
-            if (!allProjectIds.isEmpty()){
-                TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
-                        .eq(TProjectTeam::getStatus, 1)
-                        .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
-                TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery()
-                        .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
-                tNotice.setUserId(projectTeamStaff.getUserId());
-
-                tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
-                tNotice.setStatus(1);
-                tNotice.setNoticeContent("您有【1】条【菌种选育保藏记录】等待签字入库确认;");
-                tNotice.setDataId(dto.getId());
-                tNotice.setNoticeType(5);
-                noticeService.save(tNotice);
-            }
-
+            notifyProjectEngineers(dto.getProjectId(), dto.getId(), 5);
         }
         return R.ok();
     }
@@ -209,8 +188,33 @@
             dto.setIsDraft(0);
         }
         TBreedingAndPreservation breedingAndPreservationServiceById = breedingAndPreservationService.getById(dto.getId());
+        if (breedingAndPreservationServiceById == null) {
+            return R.fail("记录不存在");
+        }
         if (breedingAndPreservationServiceById.getStatus()==1){
             return R.fail("该记录已提交,不可编辑!");
+        }
+        SysUser currentUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+        if ("3".equals(currentUser.getRoleType())) {
+            return R.fail("菌种工程师只能进行入库确认,不能编辑记录");
+        }
+        List<TVaccinationSlope> vaccinationSlopes = dto.getVaccinationSlopes();
+        List<TCulturePreservation> culturePreservations = dto.getCulturePreservations();
+        if (vaccinationSlopes == null || culturePreservations == null) {
+            return R.fail("接种斜面记录和菌种保藏记录不能为空");
+        }
+        if (dto.getStatus() != null && dto.getStatus() == 1) {
+            if (breedingAndPreservationServiceById.getStatus() == null
+                    || breedingAndPreservationServiceById.getStatus() != 2) {
+                return R.fail("请先同步给保藏人并完成入库确认");
+            }
+            boolean slopeUnconfirmed = vaccinationSlopes.stream().anyMatch(item ->
+                    !StringUtils.hasLength(item.getPreserveId()) || !StringUtils.hasLength(item.getPreserveSignature()));
+            boolean preservationUnconfirmed = culturePreservations.stream().anyMatch(item ->
+                    !StringUtils.hasLength(item.getPreserveId()) || !StringUtils.hasLength(item.getPreserveSignature()));
+            if (slopeUnconfirmed || preservationUnconfirmed) {
+                return R.fail("存在未确认的接种斜面或菌种保藏记录,不能提交");
+            }
         }
         breedingAndPreservationService.updateById(dto);
         List<TSeparationOfCultureDishes> separationOfCultureDishesList = dto.getSeparationOfCultureDishesList();
@@ -225,60 +229,62 @@
         }
         observationOfPetriDishesService.remove(new LambdaQueryWrapper<TObservationOfPetriDishes>().eq(TObservationOfPetriDishes::getBreedingPreserveId, dto.getId()));
         observationOfPetriDishesService.saveBatch(observationOfPetriDishes);
-        List<TVaccinationSlope> vaccinationSlopes = dto.getVaccinationSlopes();
         for (TVaccinationSlope vaccinationSlope : vaccinationSlopes) {
-            if (dto.getStatus()==1&&!StringUtils.hasLength(vaccinationSlope.getPreserveId())){
-                return R.fail("接种斜面记录未确认,不能提交");
-            }
             vaccinationSlope.setBreedingPreserveId(dto.getId());
         }
         vaccinationSlopeService.remove(new LambdaQueryWrapper<TVaccinationSlope>().eq(TVaccinationSlope::getBreedingPreserveId, dto.getId()));
         vaccinationSlopeService.saveBatch(vaccinationSlopes);
-        List<TCulturePreservation> culturePreservations = dto.getCulturePreservations();
         for (TCulturePreservation tSeparationOfCultureDishes : culturePreservations) {
 
             tSeparationOfCultureDishes.setBreedingPreserveId(dto.getId());
         }
         culturePreservationService.remove(new LambdaQueryWrapper<TCulturePreservation>().eq(TCulturePreservation::getBreedingPreserveId, dto.getId()));
         for (TCulturePreservation culturePreservation : culturePreservations) {
-            if (dto.getStatus()==1&&!StringUtils.hasLength(culturePreservation.getPreserveId())){
-                return R.fail("菌种保藏记录未确认,不能提交");
-            }
             culturePreservation.setBreedingPreserveId(dto.getId());
         }
         culturePreservationService.saveBatch(culturePreservations);
         if (dto.getStatus()==2){
-            // 新增消息
-            TNotice tNotice = new TNotice();
-            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
-                    .eq(TProjectTeamStaff::getRoleType, 3)
-                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
-            if (!allProjectIds.isEmpty()){
-                TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
-                        .eq(TProjectTeam::getStatus, 1)
-                        .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
-                TProjectTeamStaff one1 = projectTeamStaffService.lambdaQuery()
-                        .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
-                tNotice.setUserId(one1.getUserId());
-
-                tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
-                tNotice.setStatus(1);
-                tNotice.setNoticeContent("您有【1】条【菌种选育保藏记录】等待签字入库确认;");
-                tNotice.setDataId(dto.getId());
-                tNotice.setNoticeType(6);
-                noticeService.save(tNotice);
-            }
+            notifyProjectEngineers(dto.getProjectId(), dto.getId(), 6);
         }
         return R.ok();
     }
+
+    private void notifyProjectEngineers(String projectId, String dataId, int noticeType) {
+        List<TProjectTeamStaff> engineers = projectTeamStaffService.lambdaQuery()
+                .eq(TProjectTeamStaff::getTeamId, projectId)
+                .eq(TProjectTeamStaff::getRoleType, 3)
+                .list();
+        for (TProjectTeamStaff engineer : engineers) {
+            TNotice notice = new TNotice();
+            notice.setUserId(engineer.getUserId());
+            notice.setCommitId(tokenService.getLoginUser().getUserId() + "");
+            notice.setStatus(1);
+            notice.setNoticeContent("您有【1】条【菌种选育保藏记录】等待签字入库确认;");
+            notice.setDataId(dataId);
+            notice.setNoticeType(noticeType);
+            noticeService.save(notice);
+        }
+    }
+
     @Log(title = "接种斜面记录确认入库", businessType = BusinessType.UPDATE)
     @ApiOperation(value = "接种斜面记录确认入库",response = TConfirmBreedingAndPreservationDTO.class)
     @PostMapping(value = "/api/t-breeding-and-preservation/vaccinationSlopesConfirm")
     public R<Boolean> vaccinationSlopesConfirm(@RequestBody String param) {
+        if (tokenService.getLoginUser() == null) {
+            return R.fail(401, "登陆失效");
+        }
         Long userId = tokenService.getLoginUser().getUserId();
 
         TConfirmBreedingAndPreservationDTO dto = JSON.parseObject(param,TConfirmBreedingAndPreservationDTO.class);
         TVaccinationSlope vaccinationSlope = vaccinationSlopeService.getById(dto.getId());
+        if (vaccinationSlope == null) {
+            return R.fail("接种斜面记录不存在");
+        }
+        R<Boolean> validation = validatePreservationConfirmation(vaccinationSlope.getBreedingPreserveId(), userId,
+                vaccinationSlope.getPreserveSignature());
+        if (validation != null) {
+            return validation;
+        }
         vaccinationSlope.setPreserveId(userId+"");
         vaccinationSlope.setPreserveTime(LocalDateTime.now());
         vaccinationSlope.setPreserveSignature(dto.getPreserveSignature());
@@ -289,9 +295,20 @@
     @ApiOperation(value = "菌种保藏记录确认入库",response = TConfirmBreedingAndPreservationDTO.class)
     @PostMapping(value = "/api/t-breeding-and-preservation/culturePreservationsConfirm")
     public R<Boolean> culturePreservationsConfirm(@RequestBody String param) {
+        if (tokenService.getLoginUser() == null) {
+            return R.fail(401, "登陆失效");
+        }
         Long userId = tokenService.getLoginUser().getUserId();
         TConfirmBreedingAndPreservationDTO dto = JSON.parseObject(param,TConfirmBreedingAndPreservationDTO.class);
         TCulturePreservation culturePreservation = culturePreservationService.getById(dto.getId());
+        if (culturePreservation == null) {
+            return R.fail("菌种保藏记录不存在");
+        }
+        R<Boolean> validation = validatePreservationConfirmation(culturePreservation.getBreedingPreserveId(), userId,
+                culturePreservation.getPreserveSignature());
+        if (validation != null) {
+            return validation;
+        }
         culturePreservation.setPreserveId(userId+"");
         culturePreservation.setPreserveTime(LocalDateTime.now());
         culturePreservation.setPreserveSignature(dto.getPreserveSignature());
@@ -302,28 +319,56 @@
     @Resource
     private TProjectTeamMapper tProjectTeamMapper;
 
+    private R<Boolean> validatePreservationConfirmation(String breedingPreserveId, Long userId,
+                                                        String existingSignature) {
+        if (StringUtils.hasLength(existingSignature)) {
+            return R.fail("该记录已经确认,不能重复签字");
+        }
+        TBreedingAndPreservation record = breedingAndPreservationService.getById(breedingPreserveId);
+        if (record == null || record.getStatus() == null || record.getStatus() != 2) {
+            return R.fail("仅已同步且未提交的记录可以确认入库");
+        }
+        boolean isProjectEngineer = projectTeamStaffService.lambdaQuery()
+                .eq(TProjectTeamStaff::getTeamId, record.getProjectId())
+                .eq(TProjectTeamStaff::getUserId, userId)
+                .count() > 0;
+
+        SysUser sysUser = sysUserService.selectUserById(userId);
+
+        if (isProjectEngineer) {
+            if (!sysUser.getRoleType().equals("3")) {
+                return R.fail("仅当前项目的菌种工程师可以确认入库");
+            }
+        }
+        return null;
+    }
+
     //@PreAuthorize("@ss.hasPermi('system:breedingAndPreservation:detail')")
     @ApiOperation(value = "选育保藏记录详情")
     @GetMapping(value = "/open/t-breeding-and-preservation/getDetailById")
     public R<TBreedingAndPreservationDetailVO> getDetailById(@RequestParam String id) {
+        if (!StringUtils.hasText(id)) {
+            return R.fail("记录ID不能为空");
+        }
+        TBreedingAndPreservation breedingAndPreservation = breedingAndPreservationService.getById(id);
+        if (breedingAndPreservation == null) {
+            return R.fail("菌种选育保藏记录不存在或已删除");
+        }
         List<SysUser> sysUsers = sysUserService.selectAllList();
         TBreedingAndPreservationDetailVO res = new TBreedingAndPreservationDetailVO();
-        TBreedingAndPreservation breedingAndPreservation = breedingAndPreservationService.getById(id);
         BeanUtils.copyProperties(breedingAndPreservation, res);
         List<TSeparationOfCultureDishes> separationOfCultureDishesList = separationOfCultureDishesService.lambdaQuery().eq(TSeparationOfCultureDishes::getBreedingPreserveId, id).list();
         List<TObservationOfPetriDishes> observationOfPetriDishes = observationOfPetriDishesService.lambdaQuery().eq(TObservationOfPetriDishes::getBreedingPreserveId, id).list();
         List<TVaccinationSlope> vaccinationSlopes = vaccinationSlopeService.lambdaQuery().eq(TVaccinationSlope::getBreedingPreserveId, id).list();
         List<TCulturePreservation> culturePreservations = culturePreservationService.lambdaQuery().eq(TCulturePreservation::getBreedingPreserveId, id).list();
         for (TCulturePreservation culturePreservation : culturePreservations) {
-            SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(culturePreservation.getHandleId()))).findFirst()
-                    .orElse(null);
+            SysUser sysUser = findUserById(sysUsers, culturePreservation.getHandleId());
             if (sysUser!=null){
                 culturePreservation.setHandleName(sysUser.getNickName());
             }
         }
         for (TVaccinationSlope vaccinationSlope : vaccinationSlopes) {
-            SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(vaccinationSlope.getHandleId()))).findFirst()
-                    .orElse(null);
+            SysUser sysUser = findUserById(sysUsers, vaccinationSlope.getHandleId());
             if (sysUser!=null){
                 vaccinationSlope.setHandleName(sysUser.getNickName());
             }
@@ -355,6 +400,21 @@
         res.setVaccinationSlopes(vaccinationSlopes);
         res.setCulturePreservations(culturePreservations);
         return R.ok(res);
+    }
+
+    private SysUser findUserById(List<SysUser> sysUsers, String userId) {
+        if (!StringUtils.hasText(userId)) {
+            return null;
+        }
+        try {
+            Long parsedUserId = Long.valueOf(userId);
+            return sysUsers.stream()
+                    .filter(user -> user.getUserId() != null && user.getUserId().equals(parsedUserId))
+                    .findFirst()
+                    .orElse(null);
+        } catch (NumberFormatException exception) {
+            return null;
+        }
     }
 //
 //    @Log(title = "培养皿分离记录删除", businessType = BusinessType.DELETE)
@@ -394,6 +454,13 @@
     @ApiOperation(value = "菌种保藏记录删除")
     @DeleteMapping(value = "/open/t_project_team/deleteBreedingAndPreservation")
     public R<Boolean> deleteCulturePreservation(@RequestParam String id) {
+        TBreedingAndPreservation record = breedingAndPreservationService.getById(id);
+        if (record == null) {
+            return R.fail("记录不存在");
+        }
+        if (record.getStatus() != null && record.getStatus() == 1) {
+            return R.fail("该记录已提交,不可删除");
+        }
         return R.ok(breedingAndPreservationService.removeById(id));
     }
 }

--
Gitblit v1.7.1