From 053f6187b5f6cda1725ed63df8a8766b5976fb53 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期三, 06 八月 2025 09:01:35 +0800
Subject: [PATCH] 菌种库所有代码

---
 ruoyi-admin/src/main/resources/application-test.yml                                            |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TVaccinationSlope.java                       |    3 
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                                |    9 
 .idea/encodings.xml                                                                            |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java                   |    1 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TStrainValidationDataQuery.java              |    4 
 ruoyi-system/src/main/resources/mapper/system/TPedigreeChartMapper.xml                         |    1 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChart.java                          |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TPedigreeChartController.java           |   64 +++-
 ruoyi-system/src/main/java/com/ruoyi/system/dto/ChoiceStrainDTO.java                           |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TTrainLibraryQuery.java                      |    4 
 ruoyi-system/target/classes/mapper/system/TProjectTeamMapper.xml                               |   11 
 ruoyi-system/target/classes/mapper/system/SysUserMapper.xml                                    |   18 +
 ruoyi-system/target/classes/mapper/system/TPedigreeChartMapper.xml                             |    7 
 ruoyi-system/target/classes/mapper/system/TStrainReportMapper.xml                              |   16 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java                       |    2 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java                    |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TObservationOfPetriDishes.java               |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java                          |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStrainReportServiceImpl.java         |   23 +
 ruoyi-system/target/classes/mapper/system/TStrainValidationDataMapper.xml                      |    6 
 ruoyi-system/src/main/resources/mapper/system/TStrainValidationDataMapper.xml                  |    6 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectGroupController.java            |   16 +
 ruoyi-admin/target/classes/application-prod.yml                                                |    2 
 ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml                           |    7 
 ruoyi-system/target/classes/mapper/system/TBreedingAndPreservationMapper.xml                   |    6 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainReportController.java            |  188 +++++++++------
 ruoyi-system/target/classes/mapper/system/TTrainLibraryMapper.xml                              |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectTeamQuery.java                       |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java          |   24 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainValidationDataController.java    |   35 ++
 ruoyi-admin/target/classes/application-test.yml                                                |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java               |    5 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java            |  117 +++++++-
 ruoyi-admin/src/main/resources/application-prod.yml                                            |    2 
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java                |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java                  |   17 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java |   63 +++-
 ruoyi-system/src/main/resources/mapper/system/TTrainLibraryMapper.xml                          |    6 
 ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java                |   13 
 40 files changed, 536 insertions(+), 175 deletions(-)

diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index 4b6378c..42dcb4d 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/generator/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/generator/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/ruoyi-applet/src/main/java" charset="UTF-8" />
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 0233b2d..11b071c 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
@@ -30,6 +30,7 @@
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -78,23 +79,28 @@
             List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                     .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
             if (!allProjectIds.isEmpty()){                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
-                        .list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
+                    .list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
 
                 if (projectIds.isEmpty()){
                     return R.ok(new PageInfo<>());
                 }
                 query.setProjectIds(projectIds);
+            }else {
+                return R.ok(new PageInfo<>());
             }
         }else if (!sysUser.getRoleType().equals("1")){
             List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                     .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
-            if (!allProjectIds.isEmpty()){                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
+            if (!allProjectIds.isEmpty()){
+                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
                         .eq(TProjectTeam::getStatus, 1).list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
 
                 if (projectIds.isEmpty()){
                     return R.ok(new PageInfo<>());
                 }
                 query.setProjectIds(projectIds);
+            }else {
+                return R.ok(new PageInfo<>());
             }
         }
 
@@ -115,6 +121,7 @@
         if (dto.getStatus()==1){
             return R.fail("有菌种待确认,无法提交");
         }
+
         if (dto.getStatus()==3){
             dto.setIsDraft(1);
         }
@@ -155,7 +162,8 @@
         if (dto.getStatus()!=null&&dto.getStatus()==2){
             // 新增消息
             TNotice tNotice = new TNotice();
-            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
+            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()){
@@ -196,6 +204,10 @@
         }else{
             dto.setIsDraft(0);
         }
+        TBreedingAndPreservation breedingAndPreservationServiceById = breedingAndPreservationService.getById(dto.getId());
+        if (breedingAndPreservationServiceById.getStatus()==1){
+            return R.fail("该记录已提交,不可编辑!");
+        }
         breedingAndPreservationService.updateById(dto);
         List<TSeparationOfCultureDishes> separationOfCultureDishesList = dto.getSeparationOfCultureDishesList();
         for (TSeparationOfCultureDishes tSeparationOfCultureDishes : separationOfCultureDishesList) {
@@ -211,35 +223,47 @@
         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, 2)
+                    .eq(TProjectTeamStaff::getRoleType, 3)
                     .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
-            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());
+            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);
+                tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
+                tNotice.setStatus(1);
+                tNotice.setNoticeContent("您有【1】条【菌种选育保藏记录】等待签字入库确认;");
+                tNotice.setDataId(dto.getId());
+                tNotice.setNoticeType(6);
+                noticeService.save(tNotice);
+            }
         }
         return R.ok();
     }
@@ -289,6 +313,13 @@
                 culturePreservation.setHandleName(sysUser.getNickName());
             }
         }
+        for (TVaccinationSlope vaccinationSlope : vaccinationSlopes) {
+            SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(vaccinationSlope.getHandleId()))).findFirst()
+                    .orElse(null);
+            if (sysUser!=null){
+                vaccinationSlope.setHandleName(sysUser.getNickName());
+            }
+        }
         res.setSeparationOfCultureDishesList(separationOfCultureDishesList);
         res.setObservationOfPetriDishes(observationOfPetriDishes);
         res.setVaccinationSlopes(vaccinationSlopes);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java
index f432d09..d5db4f4 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java
@@ -53,10 +53,11 @@
      * 获取项目组管理列表
      */
     @ApiOperation(value = "中台消息列表")
-    @PostMapping(value = "/notice/list")
+    @GetMapping(value = "/notice/list")
     public R<List<TNotice>> list() {
         Long userId = tokenService.getLoginUser().getUserId();
-        List<TNotice> list = noticeService.lambdaQuery().eq(TNotice::getUserId, userId + "").list();
+        List<TNotice> list = noticeService.lambdaQuery()
+                .eq(TNotice::getStatus, 1).orderByDesc(TNotice::getCreateTime).eq(TNotice::getUserId, userId + "").list();
         for (TNotice tNotice : list) {
             SysUser sysUser = sysUserService.selectUserById(Long.valueOf(tNotice.getCommitId()));
             if (sysUser!=null){
@@ -65,6 +66,18 @@
         }
         return R.ok(list);
     }
+    /**
+     * 获取项目组管理列表
+     */
+    @ApiOperation(value = "点击跳转后")
+    @GetMapping(value = "/open/notice/editStatus")
+    public R editStatus(@RequestParam String id) {
+        TNotice notice = noticeService.getById(id);
+        notice.setStatus(2);
+        noticeService.updateById(notice);
+
+        return R.ok();
+    }
 
 
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TPedigreeChartController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TPedigreeChartController.java
index 364aad8..b1e5f66 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TPedigreeChartController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TPedigreeChartController.java
@@ -11,6 +11,7 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.exception.GlobalException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.framework.web.service.TokenService;
@@ -32,6 +33,7 @@
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.concurrent.locks.ReentrantLock;
 import java.util.stream.Collectors;
 
 /**
@@ -48,6 +50,7 @@
 public class TPedigreeChartController {
     @Resource
     private TPedigreeChartDetailService pedigreeChartDetailService;
+
     @Resource
     private TPedigreeChartService pedigreeChartService;
     @Resource
@@ -65,6 +68,7 @@
     @ApiOperation(value = "谱系图-获取谱系图分页列表",response = TPedigreeChartQuery.class)
     @PostMapping(value = "/api/t-pedigree-chart/pageList")
     public R<PageInfo<TPedigreeChartVO>> pageList(@RequestBody String param) {
+
         TPedigreeChartQuery query = JSON.parseObject(param, TPedigreeChartQuery.class);
         SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
         if (sysUser.getRoleType().equals("2")){
@@ -77,6 +81,9 @@
                     return R.ok(new PageInfo<>());
                 }
                 query.setProjectIds(projectIds);
+            }else{
+                return R.ok(new PageInfo<>());
+
             }
         }else if (!sysUser.getRoleType().equals("1")){
             List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
@@ -88,6 +95,9 @@
                     return R.ok(new PageInfo<>());
                 }
                 query.setProjectIds(projectIds);
+            }else{
+                return R.ok(new PageInfo<>());
+
             }
         }
         return R.ok(pedigreeChartService.pageList(query));
@@ -158,7 +168,6 @@
                         tPedigreeChartParentTwoDTO.setVaccinateTime(LocalDateTime.now());
                         tPedigreeChartParentTwoDTO.setStorageTime(LocalDateTime.now());
                         tPedigreeChartParentTwoDTO.setParentId(count.getId());
-                        tPedigreeChartParentTwoDTO.setPedigreeChartId(parent.getId());
                         tPedigreeChartParentTwoDTO.setId(null);
 
                         pedigreeChartDetailService.save(tPedigreeChartParentTwoDTO);
@@ -177,6 +186,7 @@
                                     tPedigreeChartParentThreeDTO.setParentId(childCount.getId());
                                     tPedigreeChartParentThreeDTO.setPedigreeChartId(parent.getId());
                                     tPedigreeChartParentThreeDTO.setType(1);
+                                    tPedigreeChartParentThreeDTO.setVaccinateId(loginUser.getUserId()+"");
                                     if (tPedigreeChartParentThreeDTO.getStatus()==null){
                                         tPedigreeChartParentThreeDTO.setStatus(1);
                                     }
@@ -196,26 +206,28 @@
             String child = JSON.toJSONString(oneLevel);
             parent.setJson(child);
             pedigreeChartService.updateById(parent);
-            // 新增消息
-            TNotice tNotice = new TNotice();
-            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
-                    .eq(TProjectTeamStaff::getRoleType, 2)
-                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
-            if (!allProjectIds.isEmpty()){
-                TProjectTeam team = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
-                        .eq(TProjectTeam::getStatus, 1)
-                        .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
-                TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery()
-                        .eq(TProjectTeamStaff::getTeamId, team.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
-                tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
-                tNotice.setUserId(projectTeamStaff.getUserId());
-                tNotice.setStatus(1);
-                tNotice.setNoticeContent("菌种实验员新增【1】条【菌种传代生产谱系图】操作,等待您签字确认;");
-                tNotice.setDataId(parent.getId());
-                tNotice.setNoticeType(4);
-                noticeService.save(tNotice);
-            }
 
+
+        }
+
+        // 新增消息
+        TNotice tNotice = new TNotice();
+        List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId,parent.getProjectId() )
+                .eq(TProjectTeamStaff::getRoleType, 2)
+                .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
+        if (!allProjectIds.isEmpty()){
+            TProjectTeam team = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
+                    .eq(TProjectTeam::getStatus, 1)
+                    .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
+            TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery()
+                    .eq(TProjectTeamStaff::getTeamId, team.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
+            tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
+            tNotice.setUserId(projectTeamStaff.getUserId());
+            tNotice.setStatus(1);
+            tNotice.setNoticeContent("菌种实验员新增【1】条【菌种传代生产谱系图】操作,等待您签字确认;");
+            tNotice.setDataId(parent.getId());
+            tNotice.setNoticeType(4);
+            noticeService.save(tNotice);
         }
         return R.ok();
     }
@@ -242,6 +254,16 @@
             parent.setJson(child);
         }
         pedigreeChartService.updateById(parent);
+        if (parent.getGenerationType()==1){
+            TPedigreeChartDetail one = pedigreeChartDetailService.getOne(new LambdaQueryWrapper<TPedigreeChartDetail>()
+                    .eq(TPedigreeChartDetail::getPedigreeChartId, "0"));
+            if (one!=null){
+                one.setStrainName(parent.getStrainName());
+                one.setStrainCode(parent.getStrainCode());
+                pedigreeChartDetailService.updateById( one);
+            }
+        }
+
 //        pedigreeChartDetailService.remove(new LambdaQueryWrapper<TPedigreeChartDetail>()
 //                .eq(TPedigreeChartDetail::getPedigreeChartId,  dto.getParent().getId()));
 //        if (!dto.getOne().isEmpty()){
@@ -335,7 +357,7 @@
         }
         TPedigreeChartDetailDTO dto = JSON.parseObject(param, TPedigreeChartDetailDTO.class);
         if (dto.getParentId().equals("0")){
-            // 新增祖代
+            // 新增祖/母代
             dto.setParentId("0");
             pedigreeChartDetailService.save(dto);
         }else{
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectGroupController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectGroupController.java
index 1051b0a..063a2fa 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectGroupController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectGroupController.java
@@ -10,6 +10,7 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.framework.web.domain.server.Sys;
+import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.ChoiceDTO;
 import com.ruoyi.system.dto.SysUserDTO;
 import com.ruoyi.system.dto.TProjectTeamDTO;
@@ -31,6 +32,7 @@
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -50,6 +52,8 @@
     private TProjectTeamStaffService projectTeamStaffService;
     @Resource
     private ISysUserService sysUserService;
+    @Resource
+    private TokenService tokenService;
     /**
      * 获取项目组管理列表
      */
@@ -64,7 +68,17 @@
     @PostMapping(value = "/api/t_project_team/pageList1")
     public R<PageInfo<TProjectTeamVO>> pageList1(@RequestBody String param) {
         TProjectTeamQuery query = JSON.parseObject(param, TProjectTeamQuery.class);
-        return R.ok(projectTeamService.pageList(query));
+        Long userId = tokenService.getLoginUser().getUserId();
+        SysUser sysUser = sysUserService.selectUserById(userId);
+        if (!sysUser.getRoleType().equals("1")){
+            List<String> projetIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, userId).list()
+                    .stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
+            if (projetIds.isEmpty()){
+                return R.ok(new PageInfo<>());
+            }
+            query.setProjectIds(projetIds);
+        }
+        return R.ok(projectTeamService.pageList1(query));
     }
 
     /**
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainReportController.java
index 0042752..77ea143 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainReportController.java
@@ -61,24 +61,43 @@
     @ApiOperation(value = "菌种报告库分页列表查询",tags = "菌种报告库",response = TStrainReportQuery.class)
     @PostMapping(value = "/api/t-strain-report/pageListAll")
     public R<PageInfo<TStrainReportVO>> pageListAll(@RequestBody String param) {
+        TStrainReportQuery query = JSON.parseObject(param, TStrainReportQuery.class);
+
         LoginUser loginUser = tokenService.getLoginUser();
         SysUser sysUser = sysUserService.selectUserById(loginUser.getUserId());
-        List<String> projectIds = new ArrayList<>();
-        if (!sysUser.getRoleType().equals("1")){
-            // 查询和自己相关的项目组id
-            List<String> collect = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, sysUser.getUserId()).list()
-                    .stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
-            if (collect.isEmpty()){
-                collect.add("0");
+        if (sysUser.getRoleType().equals("2")){
+            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
+                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
+            if (!allProjectIds.isEmpty()){
+                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
+                    .list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
+
+                if (projectIds.isEmpty()){
+                    return R.ok(new PageInfo<>());
+                }
+                query.setProjectIds(projectIds);
+            }else{
+                return R.ok(new PageInfo<>());
             }
-            projectIds = collect;
+        }else if (!sysUser.getRoleType().equals("1")){
+            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
+                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
+            if (!allProjectIds.isEmpty()){
+                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
+                    .eq(TProjectTeam::getStatus, 1).list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
+
+                if (projectIds.isEmpty()){
+                    return R.ok(new PageInfo<>());
+                }
+                query.setProjectIds(projectIds);
+            }else{
+                return R.ok(new PageInfo<>());
+            }
         }
-        TStrainReportQuery query = JSON.parseObject(param, TStrainReportQuery.class);
         if (StringUtils.hasLength(query.getTime())){
             query.setStartTime(query.getTime().split(" - ")[0]);
             query.setEndTime(query.getTime().split(" - ")[1]);
         }
-        query.setProjectIds(projectIds);
         return R.ok(strainReportService.pageListAll(query));
     }
     @ApiOperation(value = "获取菌种报告库操作评定分页列表",tags = "菌种报告库操作评定-菌种实验员",response = TStrainReportQuery.class)
@@ -152,17 +171,22 @@
                     return R.ok(new PageInfo<>());
                 }
                 query.setProjectIds(projectIds);
+            }else {
+                return R.ok(new PageInfo<>());
             }
         }else if (!sysUser.getRoleType().equals("1")){
             List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                     .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
-            if (!allProjectIds.isEmpty()){                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
+            if (!allProjectIds.isEmpty()){
+                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
                         .eq(TProjectTeam::getStatus, 1).list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
 
                 if (projectIds.isEmpty()){
                     return R.ok(new PageInfo<>());
                 }
                 query.setProjectIds(projectIds);
+            }else {
+                return R.ok(new PageInfo<>());
             }
         }
         return R.ok(strainReportService.pageListProject(query));
@@ -172,7 +196,7 @@
     @ApiOperation(value = "菌种项目组评定详情",tags = "菌种项目组评定表")
     @GetMapping(value = "/open/t-strain-report/getDetailByIdProject")
     public R<TStrainReportDetailProjectVO> getDetailByIdProject(@RequestParam String id) {
-        TProjectTeam byId = projectTeamService.getById(id);
+        TProjectTeam project = projectTeamService.getById(id);
 
         TStrainReportDetailProjectVO tStrainReportDetailVO = new TStrainReportDetailProjectVO();
         LoginUser loginUser = tokenService.getLoginUser();
@@ -183,6 +207,7 @@
         if (strainReportIds.isEmpty())strainReportIds.add("0");
         List<TStrainReportDetail> tStrainReportDetails = strainReportDetailService
                 .list(new LambdaQueryWrapper<TStrainReportDetail>().in(TStrainReportDetail::getReportId,strainReportIds)
+                        .isNotNull(TStrainReportDetail::getExperimentId)
                         .orderByDesc(TStrainReportDetail::getCreateTime));
         BigDecimal sum = new BigDecimal("0");
         BigDecimal sum1 = new BigDecimal("0");
@@ -197,47 +222,51 @@
                     .filter(e -> e.getReportId().equals(tStrainReport.getId())&&
                             e.getEvaluateHumanType()==2).collect(Collectors.toList());
             // 菌种工程积分
-            sum1 = tStrainReportDetails2.stream()
-                    .filter(e -> e.getEvaluateHumanType().equals(1))
-                    .map(TStrainReportDetail::getEvaluateTotal)
-                    .reduce(BigDecimal::add)
-                    .orElse(BigDecimal.ZERO);
-            // 菌种实验员积分
-            sum2 = tStrainReportDetails1.stream()
+            sum1 = sum1.add(tStrainReportDetails2.stream()
                     .filter(e -> e.getEvaluateHumanType().equals(2))
                     .map(TStrainReportDetail::getEvaluateTotal)
                     .reduce(BigDecimal::add)
-                    .orElse(BigDecimal.ZERO);
-            List<TStrainReportDetail> tStrainReportDetails3 = tStrainReportDetails.stream().filter(e -> e.getReportType() == 1).collect(Collectors.toList());
+                    .orElse(BigDecimal.ZERO));
+            // 菌种实验员积分
+            sum2 = sum2.add(tStrainReportDetails1.stream()
+                    .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getReportType()==1)
+                    .map(TStrainReportDetail::getEvaluateTotal)
+                    .reduce(BigDecimal::add)
+                    .orElse(BigDecimal.ZERO));
+            List<TStrainReportDetail> tStrainReportDetails3 = tStrainReportDetails.stream().filter(e -> e.getReportId().equals(tStrainReport.getId())
+                    &&
+                    e.getReportType() == 1).collect(Collectors.toList());
             for (TStrainReportDetail tStrainReportDetail : tStrainReportDetails3) {
                 // 根据评定等级统计失败次数
                 if (StringUtils.hasLength(tStrainReportDetail.getEvaluate())&&  tStrainReportDetail.getEvaluate().split(",").length>=5){
-                    if (tStrainReportDetail.getEvaluate().split(",")[4].equals("2")){
+                    if (tStrainReportDetail.getEvaluate().split(",")[4].equals("-3")){
                         temp++;
+                        break;
                     }
                 }
             }
         }
-        tStrainReportDetailVO.setTeamIntegral(sum);
+        tStrainReportDetailVO.setTeamIntegral(sum1.add(sum2));
         tStrainReportDetailVO.setEngineerIntegral(sum1);
         tStrainReportDetailVO.setExperimenterIntegral(sum2);
 
 
         tStrainReportDetailVO.setFailCount(temp);
-        List<TStrainReport> strainReportIdsByProjectId = tStrainReports.stream().filter(e -> e.getProjectId().equals(byId.getId())).collect(Collectors.toList());
+        List<TStrainReport> strainReportIdsByProjectId = tStrainReports.stream().filter(e -> e.getProjectId().equals(project.getId())).collect(Collectors.toList());
         if (!strainReportIdsByProjectId.isEmpty()){
             tStrainReportDetailVO.setEndTime(strainReportIdsByProjectId.get(0).getEvaluateTime());
         }
-        tStrainReportDetailVO.setStartTime(byId.getCreateTime());
-        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, byId.getId())
+        tStrainReportDetailVO.setStartTime(project.getCreateTime());
+        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, project.getId())
                 .eq(TProjectTeamStaff::getRoleType, 2).one();
         List<TStrainReportDetailExperimentVO> tStrainReportDetailExperimentVOS = new ArrayList<>();
         if (sysUser.getRoleType().equals("4")){
             TStrainReportDetailExperimentVO tStrainReportDetailExperimentVO = new TStrainReportDetailExperimentVO();
             tStrainReportDetailExperimentVO.setUserName(sysUser.getNickName());
-            tStrainReportDetailExperimentVO.setHandleCount((int) tStrainReportDetails.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId() + "")).count());
+            tStrainReportDetailExperimentVO.setHandleCount((int) tStrainReportDetails.stream().filter(e -> e.getExperimentId()!=null&&e.getExperimentId().equals(sysUser.getUserId() + "")).count());
             BigDecimal handleIntegral = tStrainReportDetails.stream()
-                    .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+""))
+                    .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+"")
+                            &&e.getReportType()==1)
                     .map(TStrainReportDetail::getEvaluateTotal)
                     .reduce(BigDecimal::add)
                     .orElse(BigDecimal.ZERO);
@@ -245,8 +274,9 @@
 
             List<TStrainReportDetail> strainReportDetails = tStrainReportDetails.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId() + "")).collect(Collectors.toList());
             if (!strainReportDetails.isEmpty()){
-                tStrainReportDetailExperimentVO.setHandleStartTime(strainReportDetails.get(0).getCreateTime());
+                tStrainReportDetailExperimentVO.setHandleEndTime(strainReportDetails.get(strainReportDetails.size()-1).getCreateTime());
             }
+            tStrainReportDetailExperimentVO.setHandleStartTime(project.getCreateTime());
             tStrainReportDetailExperimentVOS.add(tStrainReportDetailExperimentVO);
             tStrainReportDetailVO.setDetailExperimentVOS(tStrainReportDetailExperimentVOS);
         }else{
@@ -264,7 +294,8 @@
                 tStrainReportDetailVO.setDetailEngineerVO(tStrainReportDetailEngineerVO);
                 List<String> userIds = new ArrayList<>();
                 List<TStrainReportDetailExperimentVO> tStrainReportDetailExperimentVOS1 = new ArrayList<>();
-                List<TStrainReportDetail> collect = tStrainReportDetails.stream().filter(e -> e.getEvaluateHumanType().equals(1)).collect(Collectors.toList());
+                List<TStrainReportDetail> collect = tStrainReportDetails.stream().filter(e -> e.getEvaluateHumanType().equals(1)
+                        &&e.getReportType()==1).collect(Collectors.toList());
                 for (TStrainReportDetail tStrainReportDetail : collect) {
                     if (userIds.contains(tStrainReportDetail.getExperimentId())){
                         continue;
@@ -274,20 +305,20 @@
                     tStrainReportDetailExperimentVO.setUserName(sysUserService.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId())).getNickName());
                     tStrainReportDetailExperimentVO.setHandleCount((int) collect.stream().filter(e -> e.getExperimentId().equals(tStrainReportDetail.getExperimentId())).count());
                     BigDecimal handleIntegral = collect.stream()
-                            .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+""))
+                            .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+"")
+                                    &&e.getReportType()==1)
                             .map(TStrainReportDetail::getEvaluateTotal)
                             .reduce(BigDecimal::add)
                             .orElse(BigDecimal.ZERO);
                     tStrainReportDetailExperimentVO.setHandleIntegral(handleIntegral);
-                    List<TStrainReportDetail> collect9 = collect.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId()+"")).collect(Collectors.toList());
-                    if (!collect9.isEmpty()){
-                        tStrainReportDetailExperimentVO.setHandleEndTime(collect9.get(collect9.size()-1).getCreateTime());
+                    List<TStrainReportDetail> reportDetails = collect.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId()+"")).collect(Collectors.toList());
+                    if (!reportDetails.isEmpty()){
+                        tStrainReportDetailExperimentVO.setHandleEndTime(reportDetails.get(reportDetails.size()-1).getCreateTime());
                     }
-                    tStrainReportDetailExperimentVO.setHandleStartTime(byId.getCreateTime());
+                    tStrainReportDetailExperimentVO.setHandleStartTime(project.getCreateTime());
                     tStrainReportDetailExperimentVOS1.add(tStrainReportDetailExperimentVO);
                 }
                 tStrainReportDetailVO.setDetailExperimentVOS(tStrainReportDetailExperimentVOS1);
-
             }else{
                 List<TStrainReportDetail> reportDetails = strainReportDetails.stream()
                         .filter(e -> e.getEvaluateHumanType().equals(2) && e.getExperimentId().equals(projectTeamStaff.getUserId())).collect(Collectors.toList());
@@ -295,51 +326,56 @@
                 TStrainReportDetailEngineerVO tStrainReportDetailEngineerVO = new TStrainReportDetailEngineerVO();
                 tStrainReportDetailEngineerVO.setInnovateCount((int)reportDetails.stream().filter(e->e.getEvaluateType()!=null&&e.getEvaluateType().equals(1)).count());
                 tStrainReportDetailEngineerVO.setInnovateIntegral(reportDetails.stream().filter(e->e.getEvaluateType()!=null&&e.getEvaluateType().equals(1)).map(TStrainReportDetail::getEvaluateTotal).reduce(BigDecimal::add).orElse(BigDecimal.ZERO));
-                List<TStrainReportDetail> collect3 = reportDetails.stream().filter(e ->e.getEvaluateType()!=null&& e.getEvaluateType().equals(1)).collect(Collectors.toList());
-                if (!collect3.isEmpty()){
-                    tStrainReportDetailEngineerVO.setInnovateStartTime(collect3.get(collect3.size()-1).getCreateTime());
+                List<TStrainReportDetail> tStrainReportDetails1 = reportDetails.stream().filter(e ->e.getEvaluateType()!=null&& e.getEvaluateType().equals(1)).collect(Collectors.toList());
+                if (!tStrainReportDetails1.isEmpty()){
+                    tStrainReportDetailEngineerVO.setInnovateEndTime(tStrainReportDetails1.get(tStrainReportDetails1.size()-1).getCreateTime());
                 }
-                tStrainReportDetailEngineerVO.setInnovateEndTime(byId.getCreateTime());
+                tStrainReportDetailEngineerVO.setInnovateStartTime(project.getCreateTime());
 
                 tStrainReportDetailEngineerVO.setRegulationCount((int)reportDetails.stream().filter(e->e.getEvaluateType()!=null&&e.getEvaluateType().equals(2)).count());
                 tStrainReportDetailEngineerVO.setRegulationIntegral(reportDetails.stream().filter(e->e.getEvaluateType()!=null&&e.getEvaluateType().equals(2)).map(TStrainReportDetail::getEvaluateTotal).reduce(BigDecimal::add).orElse(BigDecimal.ZERO));
                 List<TStrainReportDetail> collect4 = reportDetails.stream().filter(e -> e.getEvaluateType()!=null&&e.getEvaluateType().equals(2)).collect(Collectors.toList());
                 if (!collect4.isEmpty()){
-                    tStrainReportDetailEngineerVO.setRegulationStartTime(collect4.get(collect4.size()-1).getCreateTime());
+                    tStrainReportDetailEngineerVO.setRegulationEndTime(collect4.get(collect4.size()-1).getCreateTime());
                 }
-                tStrainReportDetailEngineerVO.setRegulationEndTime(byId.getCreateTime());
+                tStrainReportDetailEngineerVO.setRegulationStartTime(project.getCreateTime());
 
                 tStrainReportDetailEngineerVO.setHandleCount((int)reportDetails.stream().filter(e->e.getReportType().equals(1)).count());
                 tStrainReportDetailEngineerVO.setHandleIntegral(reportDetails.stream().filter(e->e.getReportType().equals(1)).map(TStrainReportDetail::getEvaluateTotal).reduce(BigDecimal::add).orElse(BigDecimal.ZERO));
                 List<TStrainReportDetail> reportDetailList = reportDetails.stream().filter(e->e.getReportType().equals(1)).collect(Collectors.toList());
                 if (!reportDetailList.isEmpty()){
-                    tStrainReportDetailEngineerVO.setHandleStartTime(reportDetailList.get(reportDetailList.size()-1).getCreateTime());
+                    tStrainReportDetailEngineerVO.setHandleEndTime(reportDetailList.get(reportDetailList.size()-1).getCreateTime());
                 }
-                tStrainReportDetailEngineerVO.setHandleEndTime(byId.getCreateTime());
+                tStrainReportDetailEngineerVO.setHandleStartTime(project.getCreateTime());
 
                 tStrainReportDetailVO.setDetailEngineerVO(tStrainReportDetailEngineerVO);
                 List<String> userIds = new ArrayList<>();
                 List<TStrainReportDetailExperimentVO> tStrainReportDetailExperimentVOS1 = new ArrayList<>();
-                List<TStrainReportDetail> collect = tStrainReportDetails.stream().filter(e -> e.getEvaluateHumanType().equals(1)).collect(Collectors.toList());
-                for (TStrainReportDetail tStrainReportDetail : collect) {
-                    if (userIds.contains(tStrainReportDetail.getExperimentId())){
-                        continue;
-                    }
-                    userIds.add(tStrainReportDetail.getExperimentId());
+                List<String> experimentIds = tStrainReportDetails.stream().filter(e ->
+                                e.getEvaluateHumanType().equals(1)
+                                        &&e.getReportType()==1)
+                        .map(TStrainReportDetail::getExperimentId)
+                        .distinct()
+                        .collect(Collectors.toList());
+                List<TStrainReportDetail> tStrainReportDetails2 = tStrainReportDetails.stream().filter(e -> e.getEvaluateHumanType().equals(1)).collect(Collectors.toList());
+                for (String experimentId : experimentIds) {
+                    List<TStrainReportDetail> details = tStrainReportDetails2.stream().filter(e -> e.getExperimentId().equals(experimentId)).collect(Collectors.toList());
+
                     TStrainReportDetailExperimentVO tStrainReportDetailExperimentVO = new TStrainReportDetailExperimentVO();
-                    tStrainReportDetailExperimentVO.setUserName(sysUserService.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId())).getNickName());
-                    tStrainReportDetailExperimentVO.setHandleCount((int) collect.stream().filter(e -> e.getExperimentId().equals(tStrainReportDetail.getExperimentId())).count());
-                    BigDecimal handleIntegral = collect.stream()
-                            .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+""))
+                    SysUser sysUser1 = sysUserService.selectUserById(Long.valueOf(experimentId));
+                    tStrainReportDetailExperimentVO.setUserName(sysUser1.getNickName());
+                    tStrainReportDetailExperimentVO.setHandleCount(details.size());
+                    BigDecimal handleIntegral = details.stream()
+                            .filter(e -> e.getEvaluateHumanType().equals(1)
+                                    &&e.getReportType()==1)
                             .map(TStrainReportDetail::getEvaluateTotal)
                             .reduce(BigDecimal::add)
                             .orElse(BigDecimal.ZERO);
                     tStrainReportDetailExperimentVO.setHandleIntegral(handleIntegral);
-                    List<TStrainReportDetail> collect9 = collect.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId()+"")).collect(Collectors.toList());
-                    if (!collect9.isEmpty()){
-                        tStrainReportDetailExperimentVO.setHandleEndTime(collect9.get(collect9.size()-1).getCreateTime());
+                    if (!tStrainReportDetails2.isEmpty()){
+                        tStrainReportDetailExperimentVO.setHandleEndTime(details.get(details.size()-1).getCreateTime());
                     }
-                    tStrainReportDetailExperimentVO.setHandleStartTime(byId.getCreateTime());
+                    tStrainReportDetailExperimentVO.setHandleStartTime(project.getCreateTime());
                     tStrainReportDetailExperimentVOS1.add(tStrainReportDetailExperimentVO);
                 }
                 tStrainReportDetailVO.setDetailExperimentVOS(tStrainReportDetailExperimentVOS1);
@@ -376,7 +412,7 @@
         tStrainReportDetail.setEvaluateType(dto.getEvaluateType());
         strainReportDetailService.save(tStrainReportDetail);
         if (dto.getIsDraft()==0){
-            // 新增消息
+            // 新增审批消息
             TNotice tNotice = new TNotice();
             TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, dto.getProjectId())
                     .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
@@ -389,11 +425,8 @@
             noticeService.save(tNotice);
             // 新增消息
             TNotice tNotice1 = new TNotice();
-            TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, dto.getProjectId())
-                    .eq(TProjectTeamStaff::getRoleType, 3).last("limit 1").one();
-
             tNotice1.setCommitId(tokenService.getLoginUser().getUserId()+"");
-            tNotice1.setUserId(tProjectTeamStaff.getUserId());
+            tNotice1.setUserId(dto.getExperimentId());
             tNotice1.setStatus(1);
             tNotice1.setNoticeContent("您有【1】条菌种库操作菌种工程师已评定;");
             tNotice1.setDataId(dto.getId());
@@ -481,19 +514,19 @@
         tNotice.setNoticeType(2);
         noticeService.save(tNotice);
 
-            // 新增消息
-            TNotice notice = new TNotice();
-            TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
-                    .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
+         // 新增消息
+        TNotice notice = new TNotice();
+        TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
+                .eq(TProjectTeamStaff::getRoleType, 2).last("limit 1").one();
 
-            notice.setCommitId(tokenService.getLoginUser().getUserId()+"");
-            notice.setUserId(tProjectTeamStaff.getUserId());
-            notice.setStatus(1);
-            String temp=dto.getStatus()==2?"通过":"驳回";
-            notice.setNoticeContent("您有【1】条【菌种报告】【报告库"+strainReport.getReportType()+"】菌种审批人已操作【" +temp+"】");
-            notice.setDataId(dto.getId());
-            notice.setNoticeType(7);
-            noticeService.save(notice);
+        notice.setCommitId(tokenService.getLoginUser().getUserId()+"");
+        notice.setUserId(tProjectTeamStaff.getUserId());
+        notice.setStatus(1);
+        String temp=dto.getStatus()==2?"通过":"驳回";
+        notice.setNoticeContent("您有【1】条【菌种报告】【报告库"+strainReport.getReportType()+"】菌种审批人已操作【" +temp+"】");
+        notice.setDataId(dto.getId());
+        notice.setNoticeType(7);
+        noticeService.save(notice);
         return R.ok();
     }
     /**
@@ -527,8 +560,9 @@
         strainReportDetailService.save(tStrainReportDetail);
         // 新增消息
         TNotice notice = new TNotice();
-        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
-                .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
+        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery()
+                .eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
+                .eq(TProjectTeamStaff::getRoleType, 2).last("limit 1").one();
         notice.setCommitId(tokenService.getLoginUser().getUserId()+"");
         notice.setUserId(projectTeamStaff.getUserId());
         notice.setStatus(1);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainValidationDataController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainValidationDataController.java
index 3b8bac4..27b04b5 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainValidationDataController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainValidationDataController.java
@@ -49,15 +49,46 @@
     private TStrainValidationDataService strainValidationDataService;
     @Resource
     private TStrainValidationDataDetailService strainValidationDataDetailService;
-
+    @Resource
+    private ISysUserService sysUserService;
     /**
      * 菌种验证数据资料分页列表
      */
-    //@PreAuthorize("@ss.hasPermi('system:strainValidationData:list')")
     @ApiOperation(value = "菌种验证数据资料-获取菌种验证数据资料分页列表",response = TStrainValidationDataQuery.class)
     @PostMapping(value = "/api/t-strain-validation-data/pageList")
     public R<PageInfo<TStrainValidationDataVO>> pageList(@RequestBody String param) {
+
         TStrainValidationDataQuery query = JSON.parseObject(param, TStrainValidationDataQuery.class);
+        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+
+        if (sysUser.getRoleType().equals("2")){
+            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
+                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
+            if (!allProjectIds.isEmpty()){                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
+                    .list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
+
+                if (projectIds.isEmpty()){
+                    return R.ok(new PageInfo<>());
+                }
+                query.setProjectIds(projectIds);
+            }else {
+                return R.ok(new PageInfo<>());
+            }
+        }else if (!sysUser.getRoleType().equals("1")){
+            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
+                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
+            if (!allProjectIds.isEmpty()){
+                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
+                        .eq(TProjectTeam::getStatus, 1).list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
+
+                if (projectIds.isEmpty()){
+                    return R.ok(new PageInfo<>());
+                }
+                query.setProjectIds(projectIds);
+            }else {
+                return R.ok(new PageInfo<>());
+            }
+        }
         return R.ok(strainValidationDataService.pageList(query));
     }
     /**
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java
index 185522e..3cf162b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java
@@ -29,6 +29,7 @@
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -54,6 +55,16 @@
     private TProjectTeamService projectTeamService;
     @Resource
     private TProjectTeamStaffService projectTeamStaffService;
+    @ApiOperation(value = "修改用户签名")
+    @Log(title = "用户信息-修改用户签名", businessType = BusinessType.UPDATE)
+    @PostMapping("/api/system/user/editSignPicture")
+    public R editSignPicture(@RequestBody String param)
+    {
+        Long userId = tokenService.getLoginUser().getUserId();
+        SysUser user = JSON.parseObject(param,SysUser.class);
+        user.setUserId(userId);
+        return R.ok(sysUserService.editSignPicture(user));
+    }
     /**
      * 选择人员
      */
@@ -99,7 +110,37 @@
     @ApiOperation(value = "获取菌种库分页列表",tags = "菌种库管理",response = TTrainLibraryQuery.class)
     @PostMapping(value = "/api/t-train-library/pageList")
     public R<PageInfo<TTrainLibraryVO>> pageList(@RequestBody String param) {
+        Long userId = tokenService.getLoginUser().getUserId();
+        SysUser sysUser = sysUserService.selectUserById(userId);
         TTrainLibraryQuery query = JSON.parseObject(param, TTrainLibraryQuery.class);
+        if (sysUser.getRoleType().equals("2")){
+            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
+                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
+            if (!allProjectIds.isEmpty()){                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
+                    .list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
+
+                if (projectIds.isEmpty()){
+                    return R.ok(new PageInfo<>());
+                }
+                query.setProjectIds(projectIds);
+            }else {
+                return R.ok(new PageInfo<>());
+            }
+        }else if (!sysUser.getRoleType().equals("1")){
+            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
+                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
+            if (!allProjectIds.isEmpty()){
+                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
+                        .eq(TProjectTeam::getStatus, 1).list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
+
+                if (projectIds.isEmpty()){
+                    return R.ok(new PageInfo<>());
+                }
+                query.setProjectIds(projectIds);
+            }else {
+                return R.ok(new PageInfo<>());
+            }
+        }
         return R.ok(tTrainLibraryService.pageList(query));
     }
     /**
@@ -207,10 +248,17 @@
             TTrainLibrary tTrainLibrary = new TTrainLibrary();
             BeanUtils.copyProperties(dto,tTrainLibrary);
             if (i==0){
+
                 List<String> projectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
-                        .eq(TProjectTeamStaff::getRoleType, 3)
                         .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
-                if (projectIds.isEmpty()){
+                if (!projectIds.isEmpty()){
+                    TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, projectIds)
+                            .eq(TProjectTeam::getStatus, 1)
+                            .orderByDesc(BaseModel::getCreateTime)
+                            .last("limit 1").one();
+                    tTrainLibrary.setProjectId(projectTeam.getId());
+                    dto.setProjectId(projectTeam.getId());
+                }else{
                     return R.fail("请先加入项目组");
                 }
                 tTrainLibrary.setStatus(4);
@@ -408,37 +456,62 @@
         }
         AddTrainLibraryWarehousingDTO query = JSON.parseObject(param, AddTrainLibraryWarehousingDTO.class);
         TTrainLibrary tTrainLibrary = tTrainLibraryService.getById(query.getTrainLibraryId());
-        if (query.getType()==1){
-            if (tTrainLibrary.getStatus()==1||tTrainLibrary.getStatus()==2||tTrainLibrary.getStatus()==4){
-                if(tTrainLibrary.getStatus()==2){
-                    return R.fail("当前菌种为出库待确认状态,不可重复出库");
-
-                }else if (tTrainLibrary.getStatus()==1){
-                    return R.fail("当前菌种为已出库状态,不可重复出库");
-                }else{
-                    return R.fail("当前菌种为入库待确认状态,不可出库");
+        List<TTrainLibraryWarehousing> tTrainLibraryWarehousings = tTrainLibraryWarehousingService.lambdaQuery()
+                .isNull(TTrainLibraryWarehousing::getConfirmTime)
+                .eq(TTrainLibraryWarehousing::getTrainLibraryId, query.getTrainLibraryId()).list();
+        if (!tTrainLibraryWarehousings.isEmpty()){
+            for (TTrainLibraryWarehousing tTrainLibraryWarehousing : tTrainLibraryWarehousings) {
+                if (Objects.equals(tTrainLibraryWarehousing.getType(), query.getType())){
+                    if (query.getType()==1){
+                        return R.fail("当前已存在该类型待确认出库记录");
+                    }else{
+                        return R.fail("当前已存在该类型待确认入库记录");
+                    }
                 }
             }
+        }
+        if (query.getType()==1){
             tTrainLibrary.setStatus(2);
         }
         if (query.getType()==2){
-            if (tTrainLibrary.getStatus()==2||tTrainLibrary.getStatus()==3||tTrainLibrary.getStatus()==4){
-                if(tTrainLibrary.getStatus()==4){
-                    return R.fail("当前菌种为入库待确认状态,不可重复入库");
-
-                }else if (tTrainLibrary.getStatus()==3){
-                    return R.fail("当前菌种为已入库状态,不可重复入库");
-                }else{
-                    return R.fail("当前菌种为出库待确认状态,不可入库");
-
-                }
-            }
             tTrainLibrary.setStatus(4);
         }
         query.setHandleId(tokenService.getLoginUser().getUserId());
         query.setBoundTime(LocalDateTime.now());
         tTrainLibraryWarehousingService.save(query);
         tTrainLibraryService.updateById(tTrainLibrary);
+        // 新增消息
+        TNotice tNotice = new TNotice();
+
+        TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery()
+                .eq(TProjectTeamStaff::getTeamId, tTrainLibrary.getProjectId()).eq(TProjectTeamStaff::getRoleType, 2).one();
+        tNotice.setUserId(tProjectTeamStaff.getUserId());
+        tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
+        tNotice.setStatus(1);
+        StringBuilder content = new StringBuilder();
+        switch (tTrainLibrary.getType()){
+            case 1:
+                content.append("【原始细胞库】");
+                break;
+            case 2:
+                content.append("【主细胞库】");
+                break;
+            case 3:
+                content.append("【生产细胞库】");
+                break;
+        }
+        switch (query.getType()){
+            case 1:
+                tNotice.setNoticeContent("您有【1】条"+content+"出库记录等待签字确认;");
+                break;
+            case 2:
+                tNotice.setNoticeContent("您有【1】条"+content+"入库记录等待签字确认;");
+                break;
+
+        }
+        tNotice.setDataId(query.getId());
+        tNotice.setNoticeType(3);
+        noticeService.save(tNotice);
         return R.ok();
     }
     /**
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index b00292d..02bf461 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -197,7 +197,7 @@
     location: /file/
     qrLocation: /file/qrCode/
     accessPath: /file/
-    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
+    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.rar
   url:
     prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path}
 wx:
diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml
index 26ba2e9..adf7853 100644
--- a/ruoyi-admin/src/main/resources/application-test.yml
+++ b/ruoyi-admin/src/main/resources/application-test.yml
@@ -190,7 +190,7 @@
     location: /file/
     qrLocation: /file/qrCode/
     accessPath: /file/
-    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
+    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.rar
   url:
 #    prefix: http://localhost:${server.port}${server.servlet.context-path}
     prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path}
diff --git a/ruoyi-admin/target/classes/application-prod.yml b/ruoyi-admin/target/classes/application-prod.yml
index b00292d..02bf461 100644
--- a/ruoyi-admin/target/classes/application-prod.yml
+++ b/ruoyi-admin/target/classes/application-prod.yml
@@ -197,7 +197,7 @@
     location: /file/
     qrLocation: /file/qrCode/
     accessPath: /file/
-    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
+    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.rar
   url:
     prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path}
 wx:
diff --git a/ruoyi-admin/target/classes/application-test.yml b/ruoyi-admin/target/classes/application-test.yml
index 26ba2e9..adf7853 100644
--- a/ruoyi-admin/target/classes/application-test.yml
+++ b/ruoyi-admin/target/classes/application-test.yml
@@ -190,7 +190,7 @@
     location: /file/
     qrLocation: /file/qrCode/
     accessPath: /file/
-    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
+    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.rar
   url:
 #    prefix: http://localhost:${server.port}${server.servlet.context-path}
     prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
index b995100..4ac1e16 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
@@ -47,19 +47,26 @@
         }
         // 获取文件名称
         String filename = mf.getOriginalFilename();
+        // 生成随机5位英文字母
+        String rename = "";
+        for (int i = 0; i < 5; i++) {
+            rename += (char) (Math.random() * 26 + 'a');
+        }
+        long l = System.currentTimeMillis();
         // 获取文件后缀
-        String ext = filename.substring(filename.lastIndexOf("."), filename.length());
+        String temp = rename+l+filename;
+        String ext = temp.substring(temp.lastIndexOf("."), temp.length());
         // 检查文件类型
         if (!fileUploadConfig.getAllowExt().contains(ext)) {
             return AjaxResult.error("上传文件格式不正确,仅支持" + fileUploadConfig.getAllowExt());
         }
-        File targetFile = new File(realPath, filename);//目标文件
+        File targetFile = new File(realPath, temp);//目标文件
         //开始从源文件拷贝到目标文件
         //传图片一步到位
         mf.transferTo(targetFile);
         //拼接数据
 //        String imgstr = fileUploadConfig.getAccessPath() + TimeDir +"\\"+ filename;
-        String imgstr = TimeDir +"/"+ filename;
+        String imgstr = TimeDir +"/"+ temp;
         return AjaxResult.success(imgstr);
     }
 
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
index 45bcfa9..17f6099 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -56,6 +56,8 @@
     @ApiModelProperty(value = "用户邮箱")
     private String email;
 
+
+
     /** 手机号码 */
     //@Excel(name = "手机号码")
     @ApiModelProperty(value = "手机号码")
@@ -130,7 +132,9 @@
     @ApiModelProperty(value = "部门id集合")
     @TableField(exist = false)
     private List<String> deptIds;
-
+    @ApiModelProperty(value = "用户签名")
+    @TableField("sign_picture")
+    private String signPicture;
 
 
     public String getRoleName() {
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
index a047082..0f5a48a 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
@@ -7,6 +7,7 @@
 
 import com.ruoyi.common.core.domain.model.LoginUserApplet;
 import com.ruoyi.common.exception.GlobalException;
+import com.ruoyi.common.exception.ServiceException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -68,7 +69,7 @@
     {
         LoginUser loginUser = getLoginUser(ServletUtils.getRequest());
         if (loginUser==null){
-             throw new GlobalException().setDetailMessage("登录失效",401);
+             throw new ServiceException("401");
         }
         return loginUser;
     }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/ChoiceStrainDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/ChoiceStrainDTO.java
index 0f03f9f..1ba398b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/ChoiceStrainDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/ChoiceStrainDTO.java
@@ -16,6 +16,8 @@
     private Integer roleType;
     @ApiModelProperty(value = "菌种报告库选择实验员项目组id")
     private String projectId;
+    @ApiModelProperty(value = "名称")
+    private String nickNameOrPhone;
     @ApiModelProperty(value = "前端忽略 人员ids")
     private List<String> userIds;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index aea2a65..506716e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -187,4 +187,6 @@
     List<ChoiceUserVO> choiceUserList(@Param("query")ChoiceStrainDTO query, @Param("pageInfo")PageInfo<ChoiceUserVO> pageInfo);
 
     List<SysUser> selectUserByUserNameLike(@Param("userName") String userName);
+
+    int editSignPicture(SysUser user);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TObservationOfPetriDishes.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TObservationOfPetriDishes.java
index bbd873b..9ac0666 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TObservationOfPetriDishes.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TObservationOfPetriDishes.java
@@ -53,7 +53,7 @@
 
     @ApiModelProperty(value = "形态强壮度排名")
     @TableField("strength")
-    private Integer strength;
+    private String strength;
 
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChart.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChart.java
index 888bfea..e29cb62 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChart.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChart.java
@@ -55,11 +55,11 @@
 
     @ApiModelProperty(value = "菌种源开始1母 2子 3孙 起传类型为母代存值")
     @TableField("strain_source_start")
-    private Integer strainSourceStart;
+    private String strainSourceStart;
 
     @ApiModelProperty(value = "菌种源结束1母 2子 3孙 起传类型为母代存值")
     @TableField("strain_source_end")
-    private Integer strainSourceEnd;
+    private String strainSourceEnd;
     @ApiModelProperty(value = "菌种传代生产谱系图 回显使用")
     @TableField(exist = false)
     private TPedigreeChartParentAllDetailDTO pedigreeChartParentAllDetailDTO;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TVaccinationSlope.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TVaccinationSlope.java
index 3789dcf..e45eefd 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TVaccinationSlope.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TVaccinationSlope.java
@@ -49,6 +49,9 @@
     @ApiModelProperty(value = "操作人id")
     @TableField("handle_id")
     private String handleId;
+    @ApiModelProperty(value = "操作人名称")
+    @TableField(exist = false)
+    private String handleName;
 
     @ApiModelProperty(value = "操作人签名")
     @TableField("handle_signature")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectTeamQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectTeamQuery.java
index 02866a8..72d2a93 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectTeamQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectTeamQuery.java
@@ -5,6 +5,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 @ApiModel(value = "项目组分页query")
 public class TProjectTeamQuery extends TimeRangeQueryBody {
@@ -18,5 +20,7 @@
     private String startTime1;
     @ApiModelProperty(value = "结束时间 前端忽略")
     private String endTime1;
+    @ApiModelProperty(value = "项目组ids")
+    private List<String> projectIds;
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TStrainValidationDataQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TStrainValidationDataQuery.java
index 4e08ffb..d059e0e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TStrainValidationDataQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TStrainValidationDataQuery.java
@@ -5,6 +5,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 @ApiModel(value = "菌种验证数据资料分页列表query")
 public class TStrainValidationDataQuery extends TimeRangeQueryBody {
@@ -21,6 +23,8 @@
     private Integer isDraft;
     @ApiModelProperty(value = "类型 1原始细胞库 2主细胞库")
     private Integer strainType;
+    @ApiModelProperty(value = "项目组ids")
+    private List<String> projectIds;
 
 
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TTrainLibraryQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TTrainLibraryQuery.java
index e688ea9..8ef0344 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TTrainLibraryQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TTrainLibraryQuery.java
@@ -5,6 +5,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 @ApiModel(value = "菌种库管理分页query")
 public class TTrainLibraryQuery extends TimeRangeQueryBody {
@@ -20,6 +22,8 @@
     private Integer type;
     @ApiModelProperty(value = "是否草稿 0否1是")
     private Integer isDraft;
+    @ApiModelProperty(value = "项目组ids")
+    private List<String> projectIds;
 
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index 046cf39..6bc8f40 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -271,4 +271,6 @@
     PageInfo<ChoiceUserVO> choiceUser(ChoiceDTO user);
 
     PageInfo<ChoiceUserVO> choiceUserList(ChoiceStrainDTO query);
+
+    Integer editSignPicture(SysUser user);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java
index b0605ca..21b506d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java
@@ -18,6 +18,7 @@
 public interface TProjectTeamService extends IService<TProjectTeam> {
 
     PageInfo<TProjectTeamVO> pageList(TProjectTeamQuery query);
+    PageInfo<TProjectTeamVO> pageList1(TProjectTeamQuery query);
 
     PageInfo<TProjectTeamVO> choiceProjectList(ChoiceProjectDTO query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 72f5f56..c935bbf 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -715,6 +715,11 @@
         return pageInfo;
     }
 
+    @Override
+    public Integer editSignPicture(SysUser user) {
+        return userMapper.editSignPicture(user);
+    }
+
 //    @Override
 //    public UserInfoVo userInfo(Long userId) {
 //        return userMapper.userInfo(userId);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java
index 4f87d16..ef88719 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java
@@ -41,8 +41,30 @@
         List<String> teamIds = list.stream().map(TProjectTeamVO::getId).collect(Collectors.toList());
         List<SysUser> sysUsers = sysUserMapper.selectList();
         if(!CollectionUtils.isEmpty(teamIds)){
+            List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffMapper.selectList(Wrappers.lambdaQuery(TProjectTeamStaff.class).in(TProjectTeamStaff::getTeamId, teamIds));
+            list.forEach(item->{
+                List<TProjectTeamStaff> projectTeamStaffList = projectTeamStaffs.stream().filter(staff -> staff.getTeamId().equals(item.getId())).collect(Collectors.toList());
+                if(!CollectionUtils.isEmpty(projectTeamStaffList)){
+                    List<String> staffIds = projectTeamStaffList.stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
+                    List<SysUser> staffs = sysUsers.stream().filter(sysUser -> staffIds.contains(sysUser.getUserId()+"")).collect(Collectors.toList());
+                    item.setStaffName(staffs.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
+                }
+                item.setStaffs(projectTeamStaffList);
+            });
+        }
+        pageInfo.setRecords(list);
+        return pageInfo;
+    }
+    @Override
+    public PageInfo<TProjectTeamVO> pageList1(TProjectTeamQuery query) {
+        PageInfo<TProjectTeamVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        List<TProjectTeamVO> list = this.baseMapper.pageList(query,pageInfo);
+        List<String> teamIds = list.stream().map(TProjectTeamVO::getId).collect(Collectors.toList());
+        List<SysUser> sysUsers = sysUserMapper.selectList();
+        if(!CollectionUtils.isEmpty(teamIds)){
             List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffMapper.selectList(Wrappers.lambdaQuery(TProjectTeamStaff.class)
-                    .eq(TProjectTeamStaff::getRoleType,3).in(TProjectTeamStaff::getTeamId, teamIds));
+                            .eq(TProjectTeamStaff::getRoleType,3)
+                    .in(TProjectTeamStaff::getTeamId, teamIds));
             list.forEach(item->{
                 List<TProjectTeamStaff> projectTeamStaffList = projectTeamStaffs.stream().filter(staff -> staff.getTeamId().equals(item.getId())).collect(Collectors.toList());
                 if(!CollectionUtils.isEmpty(projectTeamStaffList)){
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStrainReportServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStrainReportServiceImpl.java
index 8c69508..bc95c9f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStrainReportServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStrainReportServiceImpl.java
@@ -77,23 +77,28 @@
                         .filter(e -> e.getReportId().equals(tStrainReport.getId())&&
                                 e.getEvaluateHumanType()==2).collect(Collectors.toList());
                 // 菌种工程积分
-                sum1 = tStrainReportDetails2.stream()
+                sum1 = sum1.add(tStrainReportDetails2.stream()
                         .filter(e -> e.getEvaluateHumanType().equals(2))
                         .map(TStrainReportDetail::getEvaluateTotal)
                         .reduce(BigDecimal::add)
-                        .orElse(BigDecimal.ZERO);
+                        .orElse(BigDecimal.ZERO));
                 // 菌种实验员积分
-                sum2 = tStrainReportDetails1.stream()
-                        .filter(e -> e.getEvaluateHumanType().equals(1))
+                sum2 = sum2.add(tStrainReportDetails1.stream()
+                        .filter(e -> e.getEvaluateHumanType().equals(1)
+                        &&e.getReportType()==1)
                         .map(TStrainReportDetail::getEvaluateTotal)
                         .reduce(BigDecimal::add)
-                        .orElse(BigDecimal.ZERO);
-                List<TStrainReportDetail> collect3 = tStrainReportDetails.stream().filter(e -> e.getReportType() == 1).collect(Collectors.toList());
-                for (TStrainReportDetail tStrainReportDetail : collect3) {
+                        .orElse(BigDecimal.ZERO));
+                List<TStrainReportDetail> tStrainReportDetails3 = tStrainReportDetails.stream().filter(e ->
+                        e.getReportId().equals(tStrainReport.getId())
+                        &&
+                        e.getReportType() == 1).collect(Collectors.toList());
+                for (TStrainReportDetail tStrainReportDetail : tStrainReportDetails3) {
                     // 根据评定等级统计失败次数
                     if (StringUtils.hasLength(tStrainReportDetail.getEvaluate())&&  tStrainReportDetail.getEvaluate().split(",").length>=5){
-                        if (tStrainReportDetail.getEvaluate().split(",")[4].equals("2")){
+                        if (tStrainReportDetail.getEvaluate().split(",")[4].equals("-3")){
                             temp++;
+                            break;
                         }
                     }
                 }
@@ -126,11 +131,13 @@
                     if (tStrainReportDetail.getExperimentId()!=null){
                         SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId()));
                         tStrainReportVO.setExperimentName(sysUser.getNickName());
+                        break;
                     }
                 }else if (tStrainReportDetail.getEvaluateHumanType()==2){
                     if (tStrainReportDetail.getExperimentId()!=null){
                         SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId()));
                         tStrainReportVO.setExperimentName(sysUser.getNickName());
+                        break;
                     }
                 }
             }
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index a780725..f844487 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -134,7 +134,7 @@
 		select u.user_id AS userId, u.dept_id AS deptId, u.user_name AS userName, u.nick_name AS nickName, u.email AS email, u.avatar AS avatar,
 			   u.phonenumber AS phonenumber, u.sex AS sex, u.status AS status, u.del_flag AS delFlag, u.login_ip AS loginIp,
 			   u.login_date AS loginDate, u.create_by AS createBy, u.create_time AS createTime, u.remark AS remark,u.ifBlack AS ifBlack,
-			   u.roleType,
+			   u.roleType,u.sign_picture as signPicture,
 			   ur.role_id AS roleId,sr.role_name AS roleName,u.deptName as deptName
 		from sys_user u
 		left join sys_user_role ur on u.user_id = ur.user_id
@@ -272,6 +272,10 @@
 				#{id}
 			</foreach>
 		</if>
+		<if test="query.nickNameOrPhone != null and query.nickNameOrPhone != ''">
+			and( nick_name LIKE concat('%', #{query.nickNameOrPhone}, '%') or phonenumber LIKE concat('%', #{query.nickNameOrPhone}, '%')
+			)
+		</if>
 	</select>
 	<select id="selectUserByUserNameLike" resultType="com.ruoyi.common.core.domain.entity.SysUser">
 		select * from sys_user
@@ -281,6 +285,9 @@
 				</if>
 
 	</select>
+	<update id="editSignPicture" parameterType="SysUser">
+		update sys_user set sign_picture = #{signPicture} where user_id = #{userId}
+	</update>
 
 
 	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
diff --git a/ruoyi-system/src/main/resources/mapper/system/TPedigreeChartMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TPedigreeChartMapper.xml
index 07a6c69..964e772 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TPedigreeChartMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TPedigreeChartMapper.xml
@@ -57,6 +57,7 @@
         where pedigree_chart_id = #{query.id}
           and status = 1
           and type = 1
+          and vaccinate_id is not null
           and preserve_id is null
         and  disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
     </select>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml
index dcc3f02..e080caa 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml
@@ -33,6 +33,13 @@
             <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
                 AND create_time BETWEEN #{query.startTime} AND #{query.endTime}
             </if>
+
+            <if test="query.projectIds != null and query.projectIds.size()>0">
+                AND id IN
+                <foreach collection="query.projectIds" close=")" open="(" item="id" separator=",">
+                    #{id}
+                </foreach>
+            </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
         ORDER BY create_time DESC
diff --git a/ruoyi-system/src/main/resources/mapper/system/TStrainValidationDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TStrainValidationDataMapper.xml
index b95cef4..d87be06 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TStrainValidationDataMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TStrainValidationDataMapper.xml
@@ -44,6 +44,12 @@
                  <if test="query.strainType != null">
                 and strain_type = #{query.strainType}
             </if>
+            <if test="query.projectIds != null and query.projectIds.size() > 0">
+                and project_id in
+                <foreach item="item" collection="query.projectIds" separator="," open="(" close=")" index="">
+                    #{item}
+                </foreach>
+            </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
         order by create_time desc
diff --git a/ruoyi-system/src/main/resources/mapper/system/TTrainLibraryMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TTrainLibraryMapper.xml
index 853c303..f804864 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TTrainLibraryMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TTrainLibraryMapper.xml
@@ -49,6 +49,12 @@
         <if test="query.isDraft != null">
                 and is_draft = #{query.isDraft}
             </if>
+            <if test="query.projectIds != null and query.projectIds.size() > 0">
+                and project_id in
+                <foreach item="item" collection="query.projectIds" separator="," open="(" close=")" index="">
+                    #{item}
+                </foreach>
+            </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
         order by create_time desc
diff --git a/ruoyi-system/target/classes/mapper/system/SysUserMapper.xml b/ruoyi-system/target/classes/mapper/system/SysUserMapper.xml
index 0c39855..f844487 100644
--- a/ruoyi-system/target/classes/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/target/classes/mapper/system/SysUserMapper.xml
@@ -134,7 +134,7 @@
 		select u.user_id AS userId, u.dept_id AS deptId, u.user_name AS userName, u.nick_name AS nickName, u.email AS email, u.avatar AS avatar,
 			   u.phonenumber AS phonenumber, u.sex AS sex, u.status AS status, u.del_flag AS delFlag, u.login_ip AS loginIp,
 			   u.login_date AS loginDate, u.create_by AS createBy, u.create_time AS createTime, u.remark AS remark,u.ifBlack AS ifBlack,
-			   u.roleType,
+			   u.roleType,u.sign_picture as signPicture,
 			   ur.role_id AS roleId,sr.role_name AS roleName,u.deptName as deptName
 		from sys_user u
 		left join sys_user_role ur on u.user_id = ur.user_id
@@ -265,23 +265,29 @@
 	<select id="choiceUserList" resultType="com.ruoyi.system.vo.ChoiceUserVO">
 		select * from sys_user
 
-		where status =  0 and del_flag = 0
-		  and roleType = #{query.roleType}
-		<if test="query.userIds != null and query.userIds()>0">
+		where status =  '0' and del_flag = '0'
+		<if test="query.userIds != null and query.userIds.size()>0">
 			AND user_id IN
 			<foreach collection="query.userIds" close=")" open="(" item="id" separator=",">
 				#{id}
 			</foreach>
+		</if>
+		<if test="query.nickNameOrPhone != null and query.nickNameOrPhone != ''">
+			and( nick_name LIKE concat('%', #{query.nickNameOrPhone}, '%') or phonenumber LIKE concat('%', #{query.nickNameOrPhone}, '%')
+			)
 		</if>
 	</select>
 	<select id="selectUserByUserNameLike" resultType="com.ruoyi.common.core.domain.entity.SysUser">
 		select * from sys_user
 		where 1=1
 				<if test="userName != null and userName != ''">
-					OR nick_name LIKE concat('%', #{userName}, '%')
+					and nick_name LIKE concat('%', #{userName}, '%')
 				</if>
 
 	</select>
+	<update id="editSignPicture" parameterType="SysUser">
+		update sys_user set sign_picture = #{signPicture} where user_id = #{userId}
+	</update>
 
 
 	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
@@ -375,7 +381,7 @@
 	</update>
 
     <delete id="deleteUserById" parameterType="Long">
- 		update sys_user set del_flag = '2' where user_id = #{userId}
+ 		delete sys_user  where user_id = #{userId}
  	</delete>
  	
  	<delete id="deleteUserByIds" parameterType="Long">
diff --git a/ruoyi-system/target/classes/mapper/system/TBreedingAndPreservationMapper.xml b/ruoyi-system/target/classes/mapper/system/TBreedingAndPreservationMapper.xml
index 2ab61a8..62d7e22 100644
--- a/ruoyi-system/target/classes/mapper/system/TBreedingAndPreservationMapper.xml
+++ b/ruoyi-system/target/classes/mapper/system/TBreedingAndPreservationMapper.xml
@@ -46,6 +46,12 @@
             <if test="query.isDraft != null and query.isDraft == 0">
                 and (status = 1 or status =2)
             </if>
+        <if test="query.projectIds != null and query.projectIds.size() > 0">
+            and project_id in
+            <foreach item="item" collection="query.projectIds" separator="," open="(" close=")" index="">
+                #{item}
+            </foreach>
+        </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
         ORDER BY create_time DESC
diff --git a/ruoyi-system/target/classes/mapper/system/TPedigreeChartMapper.xml b/ruoyi-system/target/classes/mapper/system/TPedigreeChartMapper.xml
index 88f3fa5..964e772 100644
--- a/ruoyi-system/target/classes/mapper/system/TPedigreeChartMapper.xml
+++ b/ruoyi-system/target/classes/mapper/system/TPedigreeChartMapper.xml
@@ -35,6 +35,12 @@
             <if test="query.generationType != null">
                 and generation_type = #{query.generationType}
             </if>
+        <if test="query.projectIds != null and query.projectIds.size() > 0">
+            and project_id in
+            <foreach item="item" collection="query.projectIds" separator="," open="(" close=")" index="">
+                #{item}
+            </foreach>
+        </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
         ORDER BY create_time DESC
@@ -51,6 +57,7 @@
         where pedigree_chart_id = #{query.id}
           and status = 1
           and type = 1
+          and vaccinate_id is not null
           and preserve_id is null
         and  disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
     </select>
diff --git a/ruoyi-system/target/classes/mapper/system/TProjectTeamMapper.xml b/ruoyi-system/target/classes/mapper/system/TProjectTeamMapper.xml
index 5ba2f16..e080caa 100644
--- a/ruoyi-system/target/classes/mapper/system/TProjectTeamMapper.xml
+++ b/ruoyi-system/target/classes/mapper/system/TProjectTeamMapper.xml
@@ -20,7 +20,6 @@
         id, team_name, person_charge, status, create_time, update_time, create_by, update_by, disabled
     </sql>
     <select id="pageList" resultType="com.ruoyi.system.vo.TProjectTeamVO">
-
         SELECT
         <include refid="Base_Column_List" />
         FROM t_project_team
@@ -32,8 +31,14 @@
                 AND person_charge LIKE CONCAT('%', #{query.personCharge}, '%')
             </if>
             <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
-                AND create_time &gt;= #{query.startTime}
-                AND create_time &lt;= #{query.endTime}
+                AND create_time BETWEEN #{query.startTime} AND #{query.endTime}
+            </if>
+
+            <if test="query.projectIds != null and query.projectIds.size()>0">
+                AND id IN
+                <foreach collection="query.projectIds" close=")" open="(" item="id" separator=",">
+                    #{id}
+                </foreach>
             </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
diff --git a/ruoyi-system/target/classes/mapper/system/TStrainReportMapper.xml b/ruoyi-system/target/classes/mapper/system/TStrainReportMapper.xml
index 781018e..4e25013 100644
--- a/ruoyi-system/target/classes/mapper/system/TStrainReportMapper.xml
+++ b/ruoyi-system/target/classes/mapper/system/TStrainReportMapper.xml
@@ -37,7 +37,10 @@
         id, project_id, report_code, report_name, report_content, create_time, update_time, create_by, update_by, disabled, enclosure_name, enclosure_size, enclosure_url, status, experiment_id, evaluate, evaluate_total, audit_remark, audit_time, audit_id, evaluate_time, evaluate_id, is_draft, report_type, evaluate_human_type, evaluate_type
     </sql>
     <select id="pageList" resultType="com.ruoyi.system.vo.TStrainReportVO">
-        select t1.*,t2.team_name as teamName,t3.nick_name as experimentName,t4.nick_name as evaluateName from t_strain_report t1
+        select t1.*,t2.team_name as teamName,t3.nick_name as experimentName,t4.nick_name as evaluateName,
+        t5.create_time as evaluateTime
+
+        from t_strain_report t1
             left join t_strain_report_detail t5  on t5.report_id = t1.id
         left join t_project_team t2 on t1.project_id = t2.id
         left join sys_user t3 on t3.user_id = t5.experiment_id
@@ -66,7 +69,7 @@
             </if>
 
             <if test="query.evaluateId != null and query.evaluateId.size()>0">
-                AND t1.evaluate_id IN
+                AND t5.evaluate_id IN
                 <foreach collection="query.evaluateId" close=")" open="(" item="id" separator=",">
                     #{id}
                 </foreach>
@@ -84,8 +87,15 @@
                 and t1.team_name like concat('%',#{query.teamName},'%')
             </if>
             <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
-                and t1.evaluate_time between #{query.startTime} and #{query.endTime}
+                and t1.create_time between #{query.startTime} and #{query.endTime}
             </if>
+            <if test="query.projectIds != null and query.projectIds.size() > 0">
+                and t1.id in
+                <foreach item="item" collection="query.projectIds" separator="," open="(" close=")" index="">
+                    #{item}
+                </foreach>
+            </if>
+
 
             AND t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
diff --git a/ruoyi-system/target/classes/mapper/system/TStrainValidationDataMapper.xml b/ruoyi-system/target/classes/mapper/system/TStrainValidationDataMapper.xml
index b95cef4..d87be06 100644
--- a/ruoyi-system/target/classes/mapper/system/TStrainValidationDataMapper.xml
+++ b/ruoyi-system/target/classes/mapper/system/TStrainValidationDataMapper.xml
@@ -44,6 +44,12 @@
                  <if test="query.strainType != null">
                 and strain_type = #{query.strainType}
             </if>
+            <if test="query.projectIds != null and query.projectIds.size() > 0">
+                and project_id in
+                <foreach item="item" collection="query.projectIds" separator="," open="(" close=")" index="">
+                    #{item}
+                </foreach>
+            </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
         order by create_time desc
diff --git a/ruoyi-system/target/classes/mapper/system/TTrainLibraryMapper.xml b/ruoyi-system/target/classes/mapper/system/TTrainLibraryMapper.xml
index 853c303..f804864 100644
--- a/ruoyi-system/target/classes/mapper/system/TTrainLibraryMapper.xml
+++ b/ruoyi-system/target/classes/mapper/system/TTrainLibraryMapper.xml
@@ -49,6 +49,12 @@
         <if test="query.isDraft != null">
                 and is_draft = #{query.isDraft}
             </if>
+            <if test="query.projectIds != null and query.projectIds.size() > 0">
+                and project_id in
+                <foreach item="item" collection="query.projectIds" separator="," open="(" close=")" index="">
+                    #{item}
+                </foreach>
+            </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
         order by create_time desc

--
Gitblit v1.7.1