From 0220811fbcffd4bd4df334502a2af272ae29f1e3 Mon Sep 17 00:00:00 2001
From: wenminjie <1036699586@qq.com>
Date: 星期一, 13 七月 2026 10:14:30 +0800
Subject: [PATCH] 修复了已知BUG

---
 ruoyi-system/src/main/resources/mapper/system/TExperimentDispatchMapper.xml                           |   10 
 ruoyi-system/src/main/resources/mapper/system/TSamplingRecordMapper.xml                               |    5 
 ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetOriginalMapper.xml               |    7 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TResultWorkEvaluateController.java             | 1187 ++-----------------------
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TInspectionReportVO.java                               |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TClinicalTrialPointsServiceImpl.java         |   17 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaProduceReportController.java                |   42 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TInspectionReportQuery.java                         |    3 
 ruoyi-system/src/main/resources/mapper/system/TExperimentResultReportMapper.xml                       |    7 
 ruoyi-system/src/main/resources/mapper/system/TExperimentSchemeMapper.xml                             |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WorkEvaluateService.java                     |  583 ++++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TResultWorkEvaluateDetailUserVO.java                   |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TTestMethodConfirmSheetQuery.java                   |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetController.java         |   14 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentDispatchController.java             |    9 
 ruoyi-system/src/main/java/com/ruoyi/system/model/EvaluateResult.java                                 |   13 
 ruoyi-common/src/main/java/com/ruoyi/common/filter/SmCryptoFilter.java                                |   28 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TExperimentSchemeServiceImpl.java            |   12 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSamplingRecordController.java                 |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TClinicalTrialPointsVO.java                            |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TSamplingRecordVO.java                                 |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ResultEvaluateChemistTesterVO.java                     |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TQaTestItemServiceImpl.java                  |  105 ++
 ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java                        |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TQaTestItemReportService.java                     |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TTestMethodConfirmSheetOriginalQuery.java           |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectProposalController.java                |   29 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaTestItemReportController.java               |   19 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectionReportController.java               |   18 
 ruoyi-common/src/main/java/com/ruoyi/common/filter/CustomRequestWrapper.java                          |   93 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetOriginalController.java |    9 
 ruoyi-system/src/main/resources/mapper/system/TInspectionReportMapper.xml                             |    5 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTesterOtherTaskController.java                |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentResultReportQuery.java                   |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentDispatchQuery.java                       |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentSchemeQuery.java                         |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentResultReportController.java         |   30 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TExperimentSchemeVO.java                               |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TSamplingRecordQuery.java                           |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaTestItemController.java                     |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TTestMethodConfirmSheetVO.java                         |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentSchemeController.java               |   34 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectApprovalReportController.java          |   45 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TResultWorkEvaluateQuery.java                       |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTesterOtherTaskServiceImpl.java             |   14 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TTestMethodConfirmSheetOriginalVO.java                 |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TExperimentResultReportVO.java                         |    2 
 ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetMapper.xml                       |    5 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TFeasibilityStudyReportController.java         |   77 
 ruoyi-system/src/main/java/com/ruoyi/system/query/ResultEvaluateChemistTesterQuery.java               |    2 
 ruoyi-system/src/main/resources/mapper/system/TResultWorkEvaluateMapper.xml                           |   17 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TQaTestItemReportServiceImpl.java            |   19 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TResultWorkEvaluateVO.java                             |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTesterWorkEvaluateServiceImpl.java          |  261 +---
 ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java                       |    1 
 55 files changed, 1,346 insertions(+), 1,449 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentDispatchController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentDispatchController.java
index 0d7ccaa..1a075e6 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentDispatchController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentDispatchController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.ExperimentDispatchSignDTO;
 import com.ruoyi.system.dto.TExperimentDispatchDTO;
@@ -188,7 +189,15 @@
     @PostMapping(value = "/api/t-experiment-dispatch/update")
     public R<Boolean> update(@RequestBody String param) {
         TExperimentDispatchDTO dto = JSON.parseObject(param,TExperimentDispatchDTO.class);
+
+        if (SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            dto.setStatus(null);
+            experimentDispatchService.updateById(dto);
+            return R.ok();
+        }
+
         experimentDispatchService.updateById(dto);
+
         // 添加实验分组
         experimentDispatchGroupService.remove(Wrappers.lambdaQuery(TExperimentDispatchGroup.class).eq(TExperimentDispatchGroup::getDispatchId, dto.getId()));
         List<TExperimentDispatchGroup> experimentDispatchGroups = dto.getExperimentDispatchGroups();
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentResultReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentResultReportController.java
index 95c2403..747c793 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentResultReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentResultReportController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.TExperimentResultReportDTO;
 import com.ruoyi.system.dto.TExperimentResultReportRejectDTO;
@@ -137,7 +138,7 @@
             // 查询项目组
             List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffService.list(Wrappers.lambdaQuery(TProjectTeamStaff.class)
                     .eq(TProjectTeamStaff::getUserId, userId)
-                    .eq(TProjectTeamStaff::getRoleType, 2));
+                    .in(TProjectTeamStaff::getRoleType, 2,3));
             if(!CollectionUtils.isEmpty(projectTeamStaffs)){
                 List<String> teamIds = projectTeamStaffs.stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
                 // 查询分组
@@ -217,10 +218,16 @@
     @PostMapping(value = "/api/t-experiment-result-report/update")
     public R<Boolean> update(@RequestBody String param) {
         TExperimentResultReportDTO dto = JSON.parseObject(param,TExperimentResultReportDTO.class);
+
+        if (SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            dto.setStatus(null);
+        }
+
         experimentResultReportService.updateById(dto);
         // 修改实验结果工作评价
         List<TResultWorkEvaluate> resultWorkEvaluates = dto.getResultWorkEvaluates();
         resultWorkEvaluateService.saveOrUpdateBatch(resultWorkEvaluates);
+
         // 获取当前用户的项目组id
         Long userId = tokenService.getLoginUser().getUserId();
         TProjectTeamStaff projectTeamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
@@ -235,15 +242,17 @@
         }
 
         // 查询项目组
-        TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
-        if(dto.getStatus() != -1){
-            // MESSAGE 添加消息
-            TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
-                    .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
-                    .eq(TProjectTeamStaff::getRoleType, 2)
-                    .last("LIMIT 1"));
-            if(Objects.nonNull(teamStaff)){
-                noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【实验结果汇报】等待评定", tokenService.getLoginUser().getUser().getNickName(),3);
+        if (projectTeamStaff != null) {
+            TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
+            if(dto.getStatus() != null || dto.getStatus() != -1){
+                // MESSAGE 添加消息
+                TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                        .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                        .eq(TProjectTeamStaff::getRoleType, 2)
+                        .last("LIMIT 1"));
+                if(Objects.nonNull(teamStaff)){
+                    noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【实验结果汇报】等待评定", tokenService.getLoginUser().getUser().getNickName(),3);
+                }
             }
         }
         return R.ok();
@@ -352,6 +361,7 @@
         // 查询项目课题
         TProjectProposal proposal = projectProposalService.getById(experimentDispatch.getProposalId());
         experimentDispatchVO.setProjectName(proposal.getProjectName());
+        experimentDispatchVO.setProjectCode(proposal.getProjectCode());
         // 查询参与人员
         List<TExperimentDispatchParticipants> tExperimentDispatchParticipants = experimentDispatchParticipantsService.list(Wrappers.lambdaQuery(TExperimentDispatchParticipants.class)
                 .eq(TExperimentDispatchParticipants::getDispatchId, experimentResultReport.getDispatchId()));
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentSchemeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentSchemeController.java
index 0912568..4a0d0d3 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentSchemeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentSchemeController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.ApplicationTerminationAuditDTO;
 import com.ruoyi.system.dto.ApplicationTerminationDTO;
@@ -223,14 +224,21 @@
     @PostMapping(value = "/api/t-experiment-scheme/update")
     public R<Boolean> update(@RequestBody String param) {
         TExperimentSchemeDTO dto = JSON.parseObject(param,TExperimentSchemeDTO.class);
+
+        if (SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            dto.setStatus(null);
+        }
+
         experimentSchemeService.updateById(dto);
         experimentSchemePersonService.remove(Wrappers.lambdaQuery(TExperimentSchemePerson.class).eq(TExperimentSchemePerson::getSchemeId,dto.getId()));
         List<TExperimentSchemePerson> experimentSchemePersons = dto.getExperimentSchemePersons();
-        experimentSchemePersons.forEach(experimentSchemePerson -> {
-            experimentSchemePerson.setSchemeId(dto.getId());
-            experimentSchemePerson.setCommitTime(LocalDateTime.now());
-        });
-        experimentSchemePersonService.saveBatch(experimentSchemePersons);
+        if (experimentSchemePersons != null) {
+            experimentSchemePersons.forEach(experimentSchemePerson -> {
+                experimentSchemePerson.setSchemeId(dto.getId());
+                experimentSchemePerson.setCommitTime(LocalDateTime.now());
+            });
+            experimentSchemePersonService.saveBatch(experimentSchemePersons);
+        }
         return R.ok();
     }
 
@@ -279,13 +287,17 @@
         List<TExperimentSchemePerson> experimentSchemePersons = experimentSchemePersonService.list(Wrappers.lambdaQuery(TExperimentSchemePerson.class)
                 .eq(TExperimentSchemePerson::getSchemeId, id));
         List<Long> userIds = experimentSchemePersons.stream().map(TExperimentSchemePerson::getUserId).collect(Collectors.toList());
-        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(userIds);
-        sysUsers.forEach(sysUser -> {
-            experimentSchemePersons.stream().filter(experimentSchemePerson -> experimentSchemePerson.getUserId().equals(sysUser.getUserId())).forEach(experimentSchemePerson -> {
-                experimentSchemePerson.setNickName(sysUser.getNickName());
-                experimentSchemePerson.setAvatar(sysUser.getAvatar());
+
+        if (!userIds.isEmpty()) {
+            List<SysUser> sysUsers = sysUserMapper.selectUserByIds(userIds);
+            sysUsers.forEach(sysUser -> {
+                experimentSchemePersons.stream().filter(experimentSchemePerson -> experimentSchemePerson.getUserId().equals(sysUser.getUserId())).forEach(experimentSchemePerson -> {
+                    experimentSchemePerson.setNickName(sysUser.getNickName());
+                    experimentSchemePerson.setAvatar(sysUser.getAvatar());
+                });
             });
-        });
+        }
+
         experimentSchemeVO.setExperimentSchemePersons(experimentSchemePersons);
         // 查询实验调度信息
         TExperimentDispatch experimentDispatch = experimentDispatchService.getById(experimentSchemeVO.getDispatchId());
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TFeasibilityStudyReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TFeasibilityStudyReportController.java
index 94f01e7..924d5f6 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TFeasibilityStudyReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TFeasibilityStudyReportController.java
@@ -11,6 +11,7 @@
 import com.ruoyi.common.enums.FeasibilityReportFileEnum;
 import com.ruoyi.common.enums.FeasibilityStudyReportStatusEnum;
 import com.ruoyi.common.enums.StudyReportTypeEnum;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.AuditStatusDTO;
 import com.ruoyi.system.dto.TFeasibilityStudyReportDTO;
@@ -245,6 +246,11 @@
     @PostMapping(value = "/api/t-feasibility-study-report/update")
     public R<Boolean> update(@RequestBody String param) {
         TFeasibilityStudyReportDTO dto = JSON.parseObject(param,TFeasibilityStudyReportDTO.class);
+
+        if (SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            dto.setStatus(null);
+        }
+
         feasibilityStudyReportService.updateById(dto);
         feasibilityReportFileService.remove(Wrappers.lambdaQuery(TFeasibilityReportFile.class)
                 .eq(TFeasibilityReportFile::getReportId, dto.getId()));
@@ -278,32 +284,35 @@
         TProjectTeamStaff projectTeamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
                 .eq(TProjectTeamStaff::getUserId, userId)
                 .last("LIMIT 1"));
-        // 查询项目组
-        TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
-        if(dto.getStatus() != -1){
-            // MESSAGE 添加消息
-            TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
-                    .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
-                    .eq(TProjectTeamStaff::getRoleType, 2)
-                    .last("LIMIT 1"));
-            if(Objects.nonNull(teamStaff)){
-                TFeasibilityStudyReport feasibilityStudyReport = feasibilityStudyReportService.getById(dto.getId());
-                Integer reportType = feasibilityStudyReport.getReportType();
-                switch (reportType) {
-                    case 1:
-                        noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【可研报告】等待评定", tokenService.getLoginUser().getUser().getNickName(),4);
-                        break;
-                    case 2:
-                        noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【可行报告】等待评定", tokenService.getLoginUser().getUser().getNickName(),4);
-                        break;
-                    case 3:
-                        noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【工艺开发工具】等待评定", tokenService.getLoginUser().getUser().getNickName(),4);
-                        break;
-                    case 4:
-                        noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【验证与发布】等待评定", tokenService.getLoginUser().getUser().getNickName(),4);
-                        break;
-                    default:
-                        break;
+
+        if (projectTeamStaff != null) {
+            // 查询项目组
+            TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
+            if(dto.getStatus() != null && dto.getStatus() != -1){
+                // MESSAGE 添加消息
+                TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                        .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                        .eq(TProjectTeamStaff::getRoleType, 2)
+                        .last("LIMIT 1"));
+                if(Objects.nonNull(teamStaff)){
+                    TFeasibilityStudyReport feasibilityStudyReport = feasibilityStudyReportService.getById(dto.getId());
+                    Integer reportType = feasibilityStudyReport.getReportType();
+                    switch (reportType) {
+                        case 1:
+                            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【可研报告】等待评定", tokenService.getLoginUser().getUser().getNickName(),4);
+                            break;
+                        case 2:
+                            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【可行报告】等待评定", tokenService.getLoginUser().getUser().getNickName(),4);
+                            break;
+                        case 3:
+                            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【工艺开发工具】等待评定", tokenService.getLoginUser().getUser().getNickName(),4);
+                            break;
+                        case 4:
+                            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【验证与发布】等待评定", tokenService.getLoginUser().getUser().getNickName(),4);
+                            break;
+                        default:
+                            break;
+                    }
                 }
             }
         }
@@ -326,13 +335,15 @@
         feasibilityStudyReportVO.setFeasibilityReportFiles(feasibilityReportFiles);
         // 查询项目组
         TProjectTeam projectTeam = projectTeamService.getById(feasibilityStudyReport.getTeamId());
-        // 查询项目组成员
-        List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffService.list(Wrappers.lambdaQuery(TProjectTeamStaff.class)
-                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()));
-        List<Long> userIds = projectTeamStaffs.stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
-        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(userIds);
-        feasibilityStudyReportVO.setStaffNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
-        feasibilityStudyReportVO.setProjectTeam(projectTeam);
+        if (projectTeam != null) {
+            // 查询项目组成员
+            List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffService.list(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                    .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()));
+            List<Long> userIds = projectTeamStaffs.stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
+            List<SysUser> sysUsers = sysUserMapper.selectUserByIds(userIds);
+            feasibilityStudyReportVO.setStaffNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
+            feasibilityStudyReportVO.setProjectTeam(projectTeam);
+        }
         SysUser sysUser = sysUserService.selectUserById(feasibilityStudyReport.getAuditPersonId());
         if(Objects.nonNull(sysUser)){
             feasibilityStudyReportVO.setAuditPersonName(sysUser.getNickName());
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectionReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectionReportController.java
index f6f4d10..cfbdb77 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectionReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectionReportController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.TInspectionReportDTO;
 import com.ruoyi.system.mapper.SysUserMapper;
@@ -147,8 +148,13 @@
     @PostMapping(value = "/api/t-inspection-report/update")
     public R<Boolean> update(@RequestBody String param) {
         TInspectionReportDTO dto = JSON.parseObject(param,TInspectionReportDTO.class);
+
+        if (SecurityUtils.isAdmin(SecurityUtils.getUserId())) {
+            dto.setStatus(null);
+        }
+
         inspectionReportService.updateById(dto);
-        if(dto.getStatus() != -1){
+        if(dto.getStatus() != null && dto.getStatus() != -1){
             // 通过当前用户查询项目组
             Long userId = tokenService.getLoginUser().getUserId();
             TProjectTeamStaff projectTeamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
@@ -180,9 +186,13 @@
         BeanUtils.copyProperties(inspectionReport, inspectionReportVO);
         // 查询实验调度
         TExperimentDispatch experimentDispatch = experimentDispatchService.getById(inspectionReportVO.getDispatchId());
-        // 查询项目课题
-        TProjectProposal projectProposal = projectProposalService.getById(experimentDispatch.getProposalId());
-        experimentDispatch.setProjectName(projectProposal.getProjectName());
+
+        if (experimentDispatch != null) {
+            // 查询项目课题
+            TProjectProposal projectProposal = projectProposalService.getById(experimentDispatch.getProposalId());
+            experimentDispatch.setProjectName(projectProposal.getProjectName());
+            experimentDispatch.setProjectCode(projectProposal.getProjectCode());
+        }
         // 查询实验调度人员
         List<TExperimentDispatchParticipants> experimentDispatchParticipants = experimentDispatchParticipantsService.list(Wrappers.lambdaQuery(TExperimentDispatchParticipants.class)
                 .eq(TExperimentDispatchParticipants::getDispatchId, inspectionReportVO.getDispatchId()));
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectApprovalReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectApprovalReportController.java
index 2da67ca..b5721f7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectApprovalReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectApprovalReportController.java
@@ -10,6 +10,7 @@
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.enums.FeasibilityReportFileEnum;
 import com.ruoyi.common.enums.ProjectApprovalReportStatusEnum;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.AuditStatusDTO;
 import com.ruoyi.system.dto.TProjectApprovalReportDTO;
@@ -153,6 +154,11 @@
     @PostMapping(value = "/api/t-project-approval-report/update")
     public R<Boolean> update(@RequestBody String param) {
         TProjectApprovalReportDTO dto = JSON.parseObject(param,TProjectApprovalReportDTO.class);
+
+        if (SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            dto.setStatus(null);
+        }
+
         projectApprovalReportService.updateById(dto);
         feasibilityReportFileService.remove(Wrappers.lambdaQuery(TFeasibilityReportFile.class)
                 .eq(TFeasibilityReportFile::getReportId, dto.getId()));
@@ -165,20 +171,23 @@
             }
             feasibilityReportFileService.saveBatch(feasibilityReportFiles);
         }
-        if(dto.getStatus() != -1){
+        if(dto.getStatus() != null && dto.getStatus() != -1){
             Long userId = tokenService.getLoginUser().getUserId();
             TProjectTeamStaff projectTeamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
                     .eq(TProjectTeamStaff::getUserId, userId)
                     .last("LIMIT 1"));
-            // 查询项目组
-            TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
-            // MESSAGE 添加消息
-            TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
-                    .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
-                    .eq(TProjectTeamStaff::getRoleType, 2)
-                    .last("LIMIT 1"));
-            if(Objects.nonNull(teamStaff)){
-                noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【立项报告库】等待审核", tokenService.getLoginUser().getUser().getNickName(),4);
+
+            if (projectTeamStaff != null) {
+                // 查询项目组
+                TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
+                // MESSAGE 添加消息
+                TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                        .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                        .eq(TProjectTeamStaff::getRoleType, 2)
+                        .last("LIMIT 1"));
+                if(Objects.nonNull(teamStaff)){
+                    noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【立项报告库】等待审核", tokenService.getLoginUser().getUser().getNickName(),4);
+                }
             }
         }
         return R.ok();
@@ -200,13 +209,15 @@
         projectApprovalReportVO.setFeasibilityReportFiles(feasibilityReportFiles);
         // 查询项目组
         TProjectTeam projectTeam = projectTeamService.getById(projectApprovalReport.getTeamId());
-        // 查询项目组成员
-        List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffService.list(Wrappers.lambdaQuery(TProjectTeamStaff.class)
-                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()));
-        List<Long> userIds = projectTeamStaffs.stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
-        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(userIds);
-        projectApprovalReportVO.setStaffNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
-        projectApprovalReportVO.setProjectTeam(projectTeam);
+        if (projectTeam != null) {
+            // 查询项目组成员
+            List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffService.list(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                    .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()));
+            List<Long> userIds = projectTeamStaffs.stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
+            List<SysUser> sysUsers = sysUserMapper.selectUserByIds(userIds);
+            projectApprovalReportVO.setStaffNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
+            projectApprovalReportVO.setProjectTeam(projectTeam);
+        }
         return R.ok(projectApprovalReportVO);
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectProposalController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectProposalController.java
index d3f8b74..ecba42a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectProposalController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectProposalController.java
@@ -9,6 +9,7 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.enums.ProjectStageEnum;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.AuditStatusDTO;
 import com.ruoyi.system.dto.TProjectProposalDTO;
@@ -176,22 +177,30 @@
     @PostMapping(value = "/api/t-project-proposal/update")
     public R<Boolean> update(@RequestBody String param) {
         TProjectProposalDTO dto = JSON.parseObject(param,TProjectProposalDTO.class);
+
+        if (SecurityUtils.isAdmin(SecurityUtils.getUserId())) {
+            dto.setAuditStatus(null);
+        }
+
         projectProposalService.updateById(dto);
-        if(dto.getAuditStatus() != -1){
+        if(dto.getAuditStatus() != null && dto.getAuditStatus() != -1){
             // 通过当前用户查询项目组
             Long userId = tokenService.getLoginUser().getUserId();
             TProjectTeamStaff projectTeamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
                     .eq(TProjectTeamStaff::getUserId, userId)
                     .last("LIMIT 1"));
-            // 查询项目组
-            TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
-            // MESSAGE 添加消息
-            TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
-                    .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
-                    .eq(TProjectTeamStaff::getRoleType, 2)
-                    .last("LIMIT 1"));
-            if(Objects.nonNull(teamStaff)){
-                noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【项目课题方案】等待审批", tokenService.getLoginUser().getUser().getNickName(),1);
+
+            if (projectTeamStaff != null && !com.ruoyi.common.utils.StringUtils.isEmpty(projectTeamStaff.getTeamId())) {
+                // 查询项目组
+                TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
+                // MESSAGE 添加消息
+                TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                        .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                        .eq(TProjectTeamStaff::getRoleType, 2)
+                        .last("LIMIT 1"));
+                if(Objects.nonNull(teamStaff)){
+                    noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【项目课题方案】等待审批", tokenService.getLoginUser().getUser().getNickName(),1);
+                }
             }
         }
         return R.ok();
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaProduceReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaProduceReportController.java
index a6968b5..b47a4d4 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaProduceReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaProduceReportController.java
@@ -11,6 +11,7 @@
 import com.ruoyi.common.enums.QAProduceReportStatusEnum;
 import com.ruoyi.common.enums.QaReportFileEnum;
 import com.ruoyi.common.enums.QaReportTypeEnum;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.AuditStatusDTO;
 import com.ruoyi.system.dto.TQaProduceReportDTO;
@@ -245,32 +246,39 @@
     @PostMapping(value = "/api/t-qa-produce-report/update")
     public R<Boolean> update(@RequestBody String param) {
         TQaProduceReportDTO dto = JSON.parseObject(param,TQaProduceReportDTO.class);
+
+        if (SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            dto.setStatus(null);
+        }
+
         qaProduceReportService.updateById(dto);
         qaReportFileService.remove(Wrappers.lambdaQuery(TQaReportFile.class)
                 .eq(TQaReportFile::getReportId, dto.getId()));
         // 添加检测报告文件
         List<TQaReportFile> qaReportFiles = dto.getQaReportFiles();
-        for (TQaReportFile qaReportFile : qaReportFiles) {
-            qaReportFile.setReportId(dto.getId());
-            switch (QaReportFileEnum.fromCode(qaReportFile.getReportType())) {
-                case TEST_REPORT:
-                    qaReportFile.setReportType(QaReportFileEnum.TEST_REPORT.getCode());
-                    break;
-                case PILOT_PRODUCTION_VALIDATION:
-                    qaReportFile.setReportType(QaReportFileEnum.PILOT_PRODUCTION_VALIDATION.getCode());
-                    break;
-                case RAW_MATERIAL_REPORT:
-                    qaReportFile.setReportType(QaReportFileEnum.RAW_MATERIAL_REPORT.getCode());
-                    break;
-                case PRODUCT_APPROVAL_REPORT:
-                    qaReportFile.setReportType(QaReportFileEnum.PRODUCT_APPROVAL_REPORT.getCode());
-                    break;
+        if (qaReportFiles != null) {
+            for (TQaReportFile qaReportFile : qaReportFiles) {
+                qaReportFile.setReportId(dto.getId());
+                switch (QaReportFileEnum.fromCode(qaReportFile.getReportType())) {
+                    case TEST_REPORT:
+                        qaReportFile.setReportType(QaReportFileEnum.TEST_REPORT.getCode());
+                        break;
+                    case PILOT_PRODUCTION_VALIDATION:
+                        qaReportFile.setReportType(QaReportFileEnum.PILOT_PRODUCTION_VALIDATION.getCode());
+                        break;
+                    case RAW_MATERIAL_REPORT:
+                        qaReportFile.setReportType(QaReportFileEnum.RAW_MATERIAL_REPORT.getCode());
+                        break;
+                    case PRODUCT_APPROVAL_REPORT:
+                        qaReportFile.setReportType(QaReportFileEnum.PRODUCT_APPROVAL_REPORT.getCode());
+                        break;
+                }
             }
+            qaReportFileService.saveBatch(qaReportFiles);
         }
-        qaReportFileService.saveBatch(qaReportFiles);
 
 
-        if(dto.getStatus() != -1){
+        if(dto.getStatus() != null && dto.getStatus() != -1){
             // 查询项目组
             TProjectTeam projectTeam = projectTeamService.getById(dto.getTeamId());
             // MESSAGE 添加消息 20251208 将qa报告审核转到审批人
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaTestItemController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaTestItemController.java
index c7728da..0341403 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaTestItemController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaTestItemController.java
@@ -9,6 +9,7 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.enums.QATestItemStatusEnum;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.TQaTestItemDTO;
 import com.ruoyi.system.dto.TQaTestItemEvaluateDTO;
@@ -85,6 +86,7 @@
                 query.setTeamIds(teamIds);
             }
         }
+
         return R.ok(qaTestItemService.pageList(query));
     }
 
@@ -184,6 +186,11 @@
         testItemVO.setQaTestItemReportList(qaTestItemReportVOS);
         // 查询项目组名称
         TProjectTeam projectTeam = projectTeamService.getById(testItemVO.getTeamId());
+
+        if (projectTeam == null) {
+            throw new ServiceException("当前数据项目组不存在");
+        }
+
         TProjectTeamVO projectTeamVO = new TProjectTeamVO();
         BeanUtils.copyProperties(projectTeam, projectTeamVO);
         // 查询项目组成员
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaTestItemReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaTestItemReportController.java
index 5763010..d1cb064 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaTestItemReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaTestItemReportController.java
@@ -107,6 +107,25 @@
     }
 
     /**
+     * 获取QA检测项报告管理列表    草稿箱里面的
+     */
+    @ApiOperation(value = "获取QA检测项报告管理下拉列表-化验师使用、评定使用 草稿箱里面的")
+    @GetMapping(value = "/open/t-qa-test-item-report-draft/getListByItemId")
+    public R<List<TQaTestItemReportVO>> getListByItemIdDraft(@RequestParam String itemId) {
+        List<TQaTestItemReportVO> list = qaTestItemReportService.getListByItemIdDraft(itemId);
+        if(!CollectionUtils.isEmpty(list)){
+            List<SysUser> sysUsers = sysUserService.selectList();
+            list.forEach(itemReport -> {
+                SysUser sysUser = sysUsers.stream().filter(user -> user.getUserId().equals(itemReport.getAuditPersonId())).findFirst().orElse(null);
+                if(Objects.nonNull(sysUser)){
+                    itemReport.setAuditPersonName(sysUser.getNickName());
+                }
+            });
+        }
+        return R.ok(list);
+    }
+
+    /**
      * 添加QA检测项报告管理管理
      */
     //@PreAuthorize("@ss.hasPermi('system:qaTestItemReport:add')")
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TResultWorkEvaluateController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TResultWorkEvaluateController.java
index a5a1d7c..dff9950 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TResultWorkEvaluateController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TResultWorkEvaluateController.java
@@ -10,6 +10,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.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.TResultWorkEvaluateDTO;
 import com.ruoyi.system.mapper.SysUserMapper;
@@ -18,6 +19,7 @@
 import com.ruoyi.system.query.TProjectApprovalReportQuery;
 import com.ruoyi.system.query.TResultWorkEvaluateQuery;
 import com.ruoyi.system.service.*;
+import com.ruoyi.system.service.impl.WorkEvaluateService;
 import com.ruoyi.system.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -28,9 +30,7 @@
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -80,6 +80,14 @@
     private SysUserMapper sysUserMapper;
     @Autowired
     private TExperimentDispatchParticipantsService experimentDispatchParticipantsService;
+    @Autowired
+    private TExperimentResultReportService tExperimentResultReportService;
+    @Autowired
+    private TExperimentDispatchService tExperimentDispatchService;
+    @Autowired
+    private TProjectProposalService tProjectProposalService;
+    @Autowired
+    private WorkEvaluateService workEvaluateCalculateService;
 
     /**
      * 获取化验师工作评定分页列表
@@ -308,6 +316,11 @@
         LoginUser loginUser = tokenService.getLoginUser();
 
         TResultWorkEvaluateQuery query = JSON.parseObject(param, TResultWorkEvaluateQuery.class);
+
+        if (SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            query.setUserId(null);
+        }
+
         SysUser sysUser = sysUserService.selectUserById(loginUser.getUser().getUserId());
         if (sysUser.getRoleType() != 1) {
             List<String> teamIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, loginUser.getUser().getUserId()).list()
@@ -316,9 +329,22 @@
                 return R.ok(new PageInfo<>());
             }
             query.setTeamIds(teamIds);
+        }else {
+            List<String> teamIds = projectTeamStaffService.lambdaQuery()
+                    .list()
+                    .stream()
+                    .map(TProjectTeamStaff::getTeamId)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+            if (teamIds.isEmpty()) {
+                return R.ok(new PageInfo<>());
+            }
+            query.setTeamIds(teamIds);
         }
         return R.ok(tResultWorkEvaluateService.pageList(query));
     }
+
 
     /**
      * 查看取样记录详情
@@ -338,8 +364,10 @@
         List<Long> role5 = projectTeamStaffService.lambdaQuery()
                 .eq(TProjectTeamStaff::getRoleType, 5).eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).list()
                 .stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
+
         List<SysUser> user4 = new ArrayList<>();
         List<SysUser> user5 = new ArrayList<>();
+
         for (Long l : role4) {
             SysUser sysUser = sysUserService.selectUserById(l);
             if (sysUser != null) {
@@ -352,173 +380,56 @@
                 user5.add(sysUser);
             }
         }
-        List<TResultWorkEvaluate> list = tResultWorkEvaluateService.lambdaQuery().eq(TResultWorkEvaluate::getTeamId, resultWorkEvaluate.getTeamId())
-                .eq(TResultWorkEvaluate::getStatus, 1).orderByDesc(TResultWorkEvaluate::getEvaluateTime).list();
-        int temp1 = 0;
-        int temp2 = 0;
-        int temp3 = 0;
-        int temp4 = 0;
-        int temp5 = 0;
-        for (TResultWorkEvaluate tResultWorkEvaluate : list) {
-            Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-            switch (evaluateOne) {
-                case 1:
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 += 2;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 += 2;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 += 2;
-                    }
-                    temp1 += 2;
-                    break;
-                case 2:
-                    temp1 += 1;
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 += 1;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 += 1;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 += 1;
-                    }
-                    break;
 
-            }
-            Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-            switch (evaluateTwo) {
-                case 1:
-                    temp1 += 2;
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 += 2;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 += 2;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 += 2;
-                    }
-                    break;
-                case 2:
-                    temp1 += 1;
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 += 1;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 += 1;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 += 1;
-                    }
-                    break;
-            }
-            Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-            switch (evaluateThree) {
-                case 1:
-                    temp1 += 2;
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 += 2;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 += 2;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 += 2;
-                    }
-                    break;
-                case 2:
-                    temp1 += 1;
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 += 1;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 += 1;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 += 1;
-                    }
-                    break;
-            }
-            Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-            switch (evaluateFour) {
-                case 1:
-                    temp1 += 2;
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 += 2;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 += 2;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 += 2;
-                    }
-                    break;
-                case 2:
-                    temp1 += 1;
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 += 1;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 += 1;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 += 1;
-                    }
-                    break;
-            }
-            Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-            switch (evaluateFive) {
-                case 1:
-                    temp1 += 2;
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 += 2;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 += 2;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 += 2;
-                    }
-                    break;
-                case 2:
-                    temp1 += 1;
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 += 1;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 += 1;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 += 1;
-                    }
-                    break;
-            }
-            Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-            switch (evaluateSix) {
-                case 1:
-                    temp1 -= 3;
-                    if (tResultWorkEvaluate.getEvaluateType() == 1) {
-                        temp2 -= 3;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 2) {
-                        temp3 -= 3;
-                    }
-                    if (tResultWorkEvaluate.getEvaluateType() == 3) {
-                        temp4 -= 3;
-                    }
-                    break;
-            }
+        int engineerIntegral = 0;  // 工艺工程师总积分
+        int chemistIntegral = 0;   // 化验师总积分
+        int testerIntegral = 0;    // 实验员总积分
+
+        // 单独获取各角色积分
+        TResultWorkEvaluateDetailVO engineerEvaluateDetail = workEvaluateCalculateService.getProcessEngineerEvaluateDetail(id);//工艺工程师
+        if (engineerEvaluateDetail != null && engineerEvaluateDetail.getEngineerList() != null) {
+            engineerIntegral = engineerEvaluateDetail.getEngineerList().stream()
+                    .mapToInt(vo -> Optional.ofNullable(vo.getIntegral()).orElse(0))
+                    .sum();
         }
-        tResultWorkEvaluateDetailVO.setTeamIntegral(temp1);
-        tResultWorkEvaluateDetailVO.setEngineerIntegral(temp2);
-        tResultWorkEvaluateDetailVO.setChemistIntegral(temp3);
-        tResultWorkEvaluateDetailVO.setTesterIntegral(temp4);
-        if (!list.isEmpty()) {
-            tResultWorkEvaluateDetailVO.setEndTime(list.get(0).getEvaluateTime());
+
+        TResultWorkEvaluateDetailVO chemistEvaluateDetail = workEvaluateCalculateService.getChemistEvaluateDetail(id);//4 化验师
+        if (chemistEvaluateDetail != null && chemistEvaluateDetail.getChemistList() != null) {
+            chemistIntegral = chemistEvaluateDetail.getChemistList().stream()
+                    .filter(user -> user.getList() != null)
+                    .flatMap(user -> user.getList().stream())
+                    .mapToInt(vo -> Optional.ofNullable(vo.getIntegral()).orElse(0))
+                    .sum();
         }
+
+        TResultWorkEvaluateDetailVO testerEvaluateDetail = workEvaluateCalculateService.getTesterEvaluateDetail(id);// 5 实验员
+        if (testerEvaluateDetail != null && testerEvaluateDetail.getTesterList() != null) {
+            testerIntegral = testerEvaluateDetail.getTesterList().stream()
+                    .filter(user -> user.getList() != null)
+                    .flatMap(user -> user.getList().stream())
+                    .mapToInt(vo -> Optional.ofNullable(vo.getIntegral()).orElse(0))
+                    .sum();
+        }
+
+        // 计算项目组总积分
+        int teamIntegral = engineerIntegral + chemistIntegral + testerIntegral;
+
+        tResultWorkEvaluateDetailVO.setTeamIntegral(teamIntegral);
+        tResultWorkEvaluateDetailVO.setEngineerIntegral(engineerIntegral);
+        tResultWorkEvaluateDetailVO.setChemistIntegral(chemistIntegral);
+        tResultWorkEvaluateDetailVO.setTesterIntegral(testerIntegral);
+
+        //查询最后一条数据的时间
+        TResultWorkEvaluate tResultWorkEvaluate = tResultWorkEvaluateService.lambdaQuery()
+                .eq(TResultWorkEvaluate::getTeamId, projectTeam.getId())
+                .eq(TResultWorkEvaluate::getDisabled, 0)//未删除
+                .orderByDesc(TResultWorkEvaluate::getEvaluateTime)// 按评定时间倒序排序
+                .last("limit 1")// 取第一条
+                .one();
+        if (tResultWorkEvaluate != null) {
+            tResultWorkEvaluateDetailVO.setEndTime(tResultWorkEvaluate.getEvaluateTime());
+        }
+
         // 查询项目组总的失败次数
         String teamId = resultWorkEvaluate.getTeamId();
         List<String> projectProposalIds = projectProposalService.lambdaQuery().eq(TProjectProposal::getTeamId, teamId).list()
@@ -544,379 +455,9 @@
     @ApiOperation(value = "查看详情-左侧数据-工艺工程师工作内容评定")
     @GetMapping(value = "/open/t-result-work-evaluate/getDetailByIdLeftOne")
     public R<TResultWorkEvaluateDetailVO> getDetailByIdLeftOne(@RequestParam String id) {
-        TResultWorkEvaluateDetailVO tResultWorkEvaluateDetailVO = new TResultWorkEvaluateDetailVO();
+        TResultWorkEvaluateDetailVO engineerEvaluateDetail = workEvaluateCalculateService.getProcessEngineerEvaluateDetail(id);
 
-        TResultWorkEvaluate resultWorkEvaluate = tResultWorkEvaluateService.getById(id);
-        TProjectTeam projectTeam = projectTeamService.getById(resultWorkEvaluate.getTeamId());
-        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).eq(TProjectTeamStaff::getRoleType, 3).last("limit 1")
-                .one();
-        TProjectTeamStaff projectTeamStaff1 = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).eq(TProjectTeamStaff::getRoleType, 2).last("limit 1")
-                .one();
-        tResultWorkEvaluateDetailVO.setStartTime(projectTeam.getCreateTime());
-        Long userId = projectTeamStaff.getUserId();
-        Long auditUserId = projectTeamStaff1.getUserId();
-        List<TFeasibilityStudyReport> total = feasibilityStudyReportService.lambdaQuery()
-                .eq(TFeasibilityStudyReport::getStatus, 3)
-                .eq(TFeasibilityStudyReport::getEvaluatePersonId, auditUserId).list();
-        List<TResultWorkEvaluateDetailEngineerVO> tResultWorkEvaluateDetailEngineerVOS = new ArrayList<>();
-        // 工艺可研
-        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO = new TResultWorkEvaluateDetailEngineerVO();
-        List<TFeasibilityStudyReport> collect = total.stream().filter(e -> e.getReportType().equals(1)).collect(Collectors.toList());
-        int tempDetail = 0;
-        for (TFeasibilityStudyReport tFeasibilityStudyReport : collect) {
-            if (StringUtils.hasLength(tFeasibilityStudyReport.getEvaluateScore())) {
-                for (String s : tFeasibilityStudyReport.getEvaluateScore().split(",")) {
-                    tempDetail += Integer.parseInt(s);
-                }
-            }
-        }
-        tResultWorkEvaluateDetailEngineerVO.setCount(collect.size());
-        tResultWorkEvaluateDetailEngineerVO.setIntegral(tempDetail);
-        if (!collect.isEmpty()) {
-            tResultWorkEvaluateDetailEngineerVO.setEndTime(collect.get(collect.size() - 1).getEvaluateTime());
-            tResultWorkEvaluateDetailEngineerVO.setStartTime(projectTeam.getCreateTime());
-        }
-
-        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO);
-        // 工艺可行
-        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO1 = new TResultWorkEvaluateDetailEngineerVO();
-        List<TFeasibilityStudyReport> collect1 = total.stream().filter(e -> e.getReportType().equals(2)).collect(Collectors.toList());
-        int tempDetail1 = 0;
-        for (TFeasibilityStudyReport tFeasibilityStudyReport : collect1) {
-            if (StringUtils.hasLength(tFeasibilityStudyReport.getEvaluateScore())) {
-                for (String s : tFeasibilityStudyReport.getEvaluateScore().split(",")) {
-                    tempDetail1 += Integer.parseInt(s);
-                }
-            }
-        }
-        tResultWorkEvaluateDetailEngineerVO1.setCount(collect1.size());
-        tResultWorkEvaluateDetailEngineerVO1.setIntegral(tempDetail1);
-        if (!collect1.isEmpty()) {
-            tResultWorkEvaluateDetailEngineerVO1.setStartTime(collect1.get(0).getEvaluateTime());
-
-            tResultWorkEvaluateDetailEngineerVO1.setEndTime(collect1.get(collect1.size() - 1).getEvaluateTime());
-        }
-
-        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO1);
-
-        // 开发阶段
-        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO2 = new TResultWorkEvaluateDetailEngineerVO();
-        List<Integer> status = new ArrayList<>();
-        status.add(-1);
-        status.add(1);
-        status.add(3);
-        status.add(4);
-        status.add(5);
-        List<TProjectProposal> list2 = projectProposalService.lambdaQuery().eq(TProjectProposal::getCommitUserId, userId)
-                .notIn(TProjectProposal::getAuditStatus, status).list();
-        List<String> collect5 = list2.stream().filter(e -> e.getProjectStage().equals(1)).map(TProjectProposal::getId).collect(Collectors.toList());
-        if (collect5.isEmpty()) {
-            collect5.add("0");
-        }
-        List<TExperimentDispatch> experimentDispatches1 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect5)
-                .notIn(TExperimentDispatch::getStatus, -1,1,3).list();
-        List<String> collect6 = experimentDispatches1.stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
-        if (collect6.isEmpty()) {
-            collect6.add("0");
-        }
-        List<TResultWorkEvaluate> list1 = tResultWorkEvaluateService.lambdaQuery()
-                .eq(TResultWorkEvaluate::getStatus, 1)
-                .eq(TResultWorkEvaluate::getEvaluateType, 1)
-                .in(TResultWorkEvaluate::getDispatchId, collect6).list();
-        int tempDetail2 = 0;
-        for (TResultWorkEvaluate tResultWorkEvaluate : list1) {
-            Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-            switch (evaluateOne) {
-                case 1:
-                    tempDetail2 += 2;
-                    break;
-                case 2:
-                    tempDetail2 += 1;
-                    break;
-            }
-            Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-            switch (evaluateTwo) {
-                case 1:
-                    tempDetail2 += 2;
-                    break;
-                case 2:
-                    tempDetail2 += 1;
-                    break;
-            }
-            Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-            switch (evaluateThree) {
-                case 1:
-                    tempDetail2 += 2;
-                    break;
-                case 2:
-                    tempDetail2 += 1;
-                    break;
-            }
-            Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-            switch (evaluateFour) {
-                case 1:
-                    tempDetail2 += 2;
-                    break;
-                case 2:
-                    tempDetail2 += 1;
-                    break;
-            }
-            Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-            switch (evaluateFive) {
-                case 1:
-                    tempDetail2 += 2;
-                    break;
-                case 2:
-                    tempDetail2 += 1;
-                    break;
-            }
-            Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-            switch (evaluateSix) {
-                case 1:
-                    tempDetail2 -= 3;
-                    break;
-            }
-        }
-        if (!list1.isEmpty()) {
-            tResultWorkEvaluateDetailEngineerVO2.setStartTime(list1.get(0).getEvaluateTime());
-
-            tResultWorkEvaluateDetailEngineerVO2.setEndTime(list1.get(list1.size() - 1).getEvaluateTime());
-        }
-
-        tResultWorkEvaluateDetailEngineerVO2.setCount(experimentDispatches1.size());
-        tResultWorkEvaluateDetailEngineerVO2.setIntegral(tempDetail2);
-        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO2);
-
-        // 中试试验阶段
-        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO3 = new TResultWorkEvaluateDetailEngineerVO();
-
-        List<String> collect7 = list2.stream().filter(e -> e.getProjectStage().equals(2)).map(TProjectProposal::getId).collect(Collectors.toList());
-        if (collect7.isEmpty()) {
-            collect7.add("0");
-        }
-        List<TExperimentDispatch> experimentDispatches2 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect7)
-                .notIn(TExperimentDispatch::getStatus, -1,1,3).list();
-        List<String> collect8 = experimentDispatches2.stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
-        if (collect8.isEmpty()) {
-            collect8.add("0");
-        }
-
-        List<TResultWorkEvaluate> list3 = tResultWorkEvaluateService.lambdaQuery()
-                .eq(TResultWorkEvaluate::getStatus, 1)
-                .eq(TResultWorkEvaluate::getEvaluateType, 1)
-                .in(TResultWorkEvaluate::getDispatchId, collect8).list();
-        int tempDetail3 = 0;
-        for (TResultWorkEvaluate tResultWorkEvaluate : list3) {
-            Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-            switch (evaluateOne) {
-                case 1:
-
-                    tempDetail3 += 2;
-                    break;
-                case 2:
-                    tempDetail3 += 1;
-
-                    break;
-
-            }
-            Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-            switch (evaluateTwo) {
-                case 1:
-                    tempDetail3 += 2;
-                    break;
-                case 2:
-                    tempDetail3 += 1;
-
-                    break;
-            }
-            Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-            switch (evaluateThree) {
-                case 1:
-                    tempDetail3 += 2;
-
-                    break;
-                case 2:
-                    tempDetail3 += 1;
-                    break;
-            }
-            Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-            switch (evaluateFour) {
-                case 1:
-                    tempDetail3 += 2;
-
-                    break;
-                case 2:
-                    tempDetail3 += 1;
-                    break;
-            }
-            Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-            switch (evaluateFive) {
-                case 1:
-                    tempDetail3 += 2;
-
-                    break;
-                case 2:
-                    tempDetail3 += 1;
-                    break;
-            }
-            Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-            switch (evaluateSix) {
-                case 1:
-                    tempDetail3 -= 3;
-                    break;
-            }
-        }
-        if (!list3.isEmpty()) {
-            tResultWorkEvaluateDetailEngineerVO3.setStartTime(list3.get(0).getEvaluateTime());
-            tResultWorkEvaluateDetailEngineerVO3.setEndTime(list3.get(list3.size() - 1).getEvaluateTime());
-        }
-        tResultWorkEvaluateDetailEngineerVO3.setCount(experimentDispatches2.size());
-        tResultWorkEvaluateDetailEngineerVO3.setIntegral(tempDetail3);
-        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO3);
-        // 验证试验阶段
-        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO4 = new TResultWorkEvaluateDetailEngineerVO();
-
-        List<String> collect10 = list2.stream().filter(e -> e.getProjectStage().equals(3)).map(TProjectProposal::getId).collect(Collectors.toList());
-        if (collect10.isEmpty()) {
-            collect10.add("0");
-        }
-        List<TExperimentDispatch> experimentDispatches3 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect10)
-                .notIn(TExperimentDispatch::getStatus, -1,1,3).list();
-        List<String> collect11 = experimentDispatches3.stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
-        if (collect11.isEmpty()) {
-            collect11.add("0");
-        }
-        List<TResultWorkEvaluate> list4 = tResultWorkEvaluateService.lambdaQuery()
-                .eq(TResultWorkEvaluate::getStatus, 1)
-                .eq(TResultWorkEvaluate::getEvaluateType, 1)
-                .in(TResultWorkEvaluate::getDispatchId, collect11).list();
-        int tempDetail4 = 0;
-        for (TResultWorkEvaluate tResultWorkEvaluate : list4) {
-            Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-            switch (evaluateOne) {
-                case 1:
-
-                    tempDetail4 += 2;
-                    break;
-                case 2:
-                    tempDetail4 += 1;
-
-                    break;
-
-            }
-            Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-            switch (evaluateTwo) {
-                case 1:
-                    tempDetail4 += 2;
-                    break;
-                case 2:
-                    tempDetail4 += 1;
-
-                    break;
-            }
-            Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-            switch (evaluateThree) {
-                case 1:
-                    tempDetail4 += 2;
-
-                    break;
-                case 2:
-                    tempDetail4 += 1;
-                    break;
-            }
-            Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-            switch (evaluateFour) {
-                case 1:
-                    tempDetail4 += 2;
-
-                    break;
-                case 2:
-                    tempDetail4 += 1;
-                    break;
-            }
-            Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-            switch (evaluateFive) {
-                case 1:
-                    tempDetail4 += 2;
-
-                    break;
-                case 2:
-                    tempDetail4 += 1;
-                    break;
-            }
-            Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-            switch (evaluateSix) {
-                case 1:
-                    tempDetail4 -= 3;
-                    break;
-            }
-        }
-        if (!list4.isEmpty()) {
-            tResultWorkEvaluateDetailEngineerVO4.setStartTime(list4.get(0).getEvaluateTime());
-            tResultWorkEvaluateDetailEngineerVO4.setEndTime(list4.get(list4.size() - 1).getEvaluateTime());
-        }
-        tResultWorkEvaluateDetailEngineerVO4.setCount(experimentDispatches3.size());
-        tResultWorkEvaluateDetailEngineerVO4.setIntegral(tempDetail4);
-        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO4);
-        // 工艺开发工具
-        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO5 = new TResultWorkEvaluateDetailEngineerVO();
-        List<TFeasibilityStudyReport> collect12 = total.stream().filter(e -> e.getReportType().equals(3)).collect(Collectors.toList());
-        int tempDetail15 = 0;
-        for (TFeasibilityStudyReport tFeasibilityStudyReport : collect12) {
-            if (StringUtils.hasLength(tFeasibilityStudyReport.getEvaluateScore())) {
-                for (String s : tFeasibilityStudyReport.getEvaluateScore().split(",")) {
-                    tempDetail15 += Integer.parseInt(s);
-                }
-            }
-        }
-        tResultWorkEvaluateDetailEngineerVO5.setCount(collect12.size());
-        tResultWorkEvaluateDetailEngineerVO5.setIntegral(tempDetail15);
-        if (!collect12.isEmpty()) {
-            tResultWorkEvaluateDetailEngineerVO5.setStartTime(collect12.get(0).getEvaluateTime());
-            tResultWorkEvaluateDetailEngineerVO5.setEndTime(collect12.get(collect12.size() - 1).getEvaluateTime());
-        }
-        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO5);
-        // 验证与发布
-        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO6 = new TResultWorkEvaluateDetailEngineerVO();
-        List<TFeasibilityStudyReport> collect13 = total.stream().filter(e -> e.getReportType().equals(4)).collect(Collectors.toList());
-        int tempDetail16 = 0;
-        for (TFeasibilityStudyReport tFeasibilityStudyReport : collect13) {
-            if (StringUtils.hasLength(tFeasibilityStudyReport.getEvaluateScore())) {
-                for (String s : tFeasibilityStudyReport.getEvaluateScore().split(",")) {
-                    tempDetail16 += Integer.parseInt(s);
-                }
-            }
-        }
-        tResultWorkEvaluateDetailEngineerVO6.setCount(collect13.size());
-        tResultWorkEvaluateDetailEngineerVO6.setIntegral(tempDetail16);
-        if (!collect13.isEmpty()) {
-            tResultWorkEvaluateDetailEngineerVO6.setStartTime(collect13.get(0).getEvaluateTime());
-            tResultWorkEvaluateDetailEngineerVO6.setEndTime(collect13.get(collect13.size() - 1).getEvaluateTime());
-        }
-        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO6);
-        // 立项报告
-        List<TProjectApprovalReport> list5 = projectApprovalReportService.lambdaQuery().orderByDesc(BaseModel::getCreateTime).eq(TProjectApprovalReport::getTeamId, projectTeam.getId()).eq(TProjectApprovalReport::getStatus, 2).list();
-        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO7 = new TResultWorkEvaluateDetailEngineerVO();
-        tResultWorkEvaluateDetailEngineerVO7.setCount(list5.size());
-        if (!list5.isEmpty()) {
-            tResultWorkEvaluateDetailEngineerVO7.setStartTime(list5.get(0).getAuditTime());
-            tResultWorkEvaluateDetailEngineerVO7.setEndTime(list5.get(list5.size() - 1).getAuditTime());
-        }
-        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO7);
-        // 临床试验积分
-        List<TClinicalTrialPoints> list6 = clinicalTrialPointsService.lambdaQuery()
-                .eq(TClinicalTrialPoints::getProcessEngineerId, userId)
-                .eq(TClinicalTrialPoints::getTeamId, projectTeam.getId()).list();
-        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO8 = new TResultWorkEvaluateDetailEngineerVO();
-        tResultWorkEvaluateDetailEngineerVO8.setCount(list6.size());
-        if (!list6.isEmpty()) {
-            tResultWorkEvaluateDetailEngineerVO8.setStartTime(list6.get(0).getCreateTime());
-            tResultWorkEvaluateDetailEngineerVO8.setEndTime(list6.get(list6.size() - 1).getCreateTime());
-            tResultWorkEvaluateDetailEngineerVO8.setIntegral(list6.get(0).getEvaluateScore());
-        }
-        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO8);
-        tResultWorkEvaluateDetailVO.setEngineerList(tResultWorkEvaluateDetailEngineerVOS);
-        return R.ok(tResultWorkEvaluateDetailVO);
+        return R.ok(engineerEvaluateDetail);
     }
 
     @ApiOperation(value = "查看详情-左侧数据-化验师工作内容评定")
@@ -944,7 +485,6 @@
             }
         }
 
-
 //        List<TFeasibilityStudyReport> total = feasibilityStudyReportService.lambdaQuery()
 //                .eq(TFeasibilityStudyReport::getStatus, 3)
 //                .eq(TFeasibilityStudyReport::getTeamId, resultWorkEvaluate.getTeamId()).list();
@@ -952,286 +492,19 @@
             List<TResultWorkEvaluateDetailEngineerVO> tResultWorkEvaluateDetailEngineerVOS = new ArrayList<>();
             TResultWorkEvaluateDetailUserVO tResultWorkEvaluateDetailUserVO = new TResultWorkEvaluateDetailUserVO();
             tResultWorkEvaluateDetailUserVO.setUserName(sysUser.getNickName());
+
             // 开发阶段
-            List<TResultWorkEvaluate> list1 = tResultWorkEvaluateService.lambdaQuery()
-                    .eq(TResultWorkEvaluate::getEvaluateType, 2)
-                    .eq(TResultWorkEvaluate::getStatus, 1)
+            //查询当前team的实验结果评定 集合
+            List<TResultWorkEvaluate> tResultWorkEvaluateList = tResultWorkEvaluateService.lambdaQuery()
                     .eq(TResultWorkEvaluate::getUserId, sysUser.getUserId())
-                    .eq(TResultWorkEvaluate::getTeamId, resultWorkEvaluate.getTeamId()).list();
-            // 调度ids
-            List<String> collect = list1.stream().map(TResultWorkEvaluate::getDispatchId).distinct().collect(Collectors.toList());
-            if (collect.isEmpty()) {
-                collect.add("0");
-            }
-            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO2 = new TResultWorkEvaluateDetailEngineerVO();
-            List<Integer> status = new ArrayList<>();
-            status.add(-1);
-            status.add(1);
-            status.add(3);
-            status.add(4);
-            status.add(5);
-            // 课题方案ids
-            List<TExperimentDispatch> experimentDispatches1 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getId, collect)
-                    .notIn(TExperimentDispatch::getStatus, -1,1,3).list();
-            List<String> collect6 = experimentDispatches1.stream().map(TExperimentDispatch::getProposalId).distinct().collect(Collectors.toList());
-            if (collect6.isEmpty()) {
-                collect6.add("0");
-            }
-            List<TProjectProposal> list2 = projectProposalService.lambdaQuery().in(TProjectProposal::getId, collect6)
-                    .notIn(TProjectProposal::getAuditStatus, status)
+                    .eq(TResultWorkEvaluate::getTeamId, projectTeam.getId())
+                    .eq(TResultWorkEvaluate::getEvaluateType, 1)//工艺工程师
+                    .eq(TResultWorkEvaluate::getDisabled, 0)//未删除
+                    .orderByAsc(TResultWorkEvaluate::getEvaluateTime)
                     .list();
-            List<String> collect5 = list2.stream().filter(e -> e.getProjectStage().equals(1)).map(TProjectProposal::getId).distinct().collect(Collectors.toList());
-            if (collect5.isEmpty()) {
-                collect5.add("0");
-            }
-            // 开发阶段调度ids
-            List<String> collect1 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect5)
-                    .list().stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
-            if (collect1.isEmpty()) {
-                collect1.add("0");
-            }
-            List<TResultWorkEvaluate> collect2 = list1.stream().filter(e -> collect1.contains(e.getDispatchId())).collect(Collectors.toList());
-            int tempDetail2 = 0;
-            for (TResultWorkEvaluate tResultWorkEvaluate : collect2) {
-                Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-                switch (evaluateOne) {
-                    case 1:
 
-                        tempDetail2 += 2;
-                        break;
-                    case 2:
-                        tempDetail2 += 1;
+            workEvaluateCalculateService.getThreeScope(tResultWorkEvaluateList, tResultWorkEvaluateDetailEngineerVOS);
 
-                        break;
-
-                }
-                Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-                switch (evaluateTwo) {
-                    case 1:
-                        tempDetail2 += 2;
-                        break;
-                    case 2:
-                        tempDetail2 += 1;
-
-                        break;
-                }
-                Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-                switch (evaluateThree) {
-                    case 1:
-                        tempDetail2 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail2 += 1;
-                        break;
-                }
-                Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-                switch (evaluateFour) {
-                    case 1:
-                        tempDetail2 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail2 += 1;
-                        break;
-                }
-                Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-                switch (evaluateFive) {
-                    case 1:
-                        tempDetail2 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail2 += 1;
-                        break;
-                }
-                Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-                switch (evaluateSix) {
-                    case 1:
-                        tempDetail2 -= 3;
-                        break;
-                }
-            }
-            if (!collect2.isEmpty()) {
-                tResultWorkEvaluateDetailEngineerVO2.setEndTime(collect2.get(collect2.size() - 1).getEvaluateTime());
-                tResultWorkEvaluateDetailEngineerVO2.setStartTime(collect2.get(0).getEvaluateTime());
-
-            }
-            tResultWorkEvaluateDetailEngineerVO2.setCount(experimentDispatches1.size());
-            tResultWorkEvaluateDetailEngineerVO2.setIntegral(tempDetail2);
-            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO2);
-
-            // 中试试验阶段
-            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO3 = new TResultWorkEvaluateDetailEngineerVO();
-            List<String> collect7 = list2.stream().filter(e -> e.getProjectStage().equals(2)).map(TProjectProposal::getId).collect(Collectors.toList());
-            if (collect7.isEmpty()) {
-                collect7.add("0");
-            }
-            List<TExperimentDispatch> experimentDispatches2 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect7)
-                    .notIn(TExperimentDispatch::getStatus, -1,1,3).list();
-            List<String> collect8 = experimentDispatches2.stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
-            if (collect8.isEmpty()) {
-                collect8.add("0");
-            }
-            List<TResultWorkEvaluate> list3 = tResultWorkEvaluateService.lambdaQuery()
-                    .eq(TResultWorkEvaluate::getStatus, 1)
-                    .eq(TResultWorkEvaluate::getEvaluateType, 2)
-                    .eq(TResultWorkEvaluate::getUserId, sysUser.getUserId())
-                    .in(TResultWorkEvaluate::getDispatchId, collect8).list();
-            int tempDetail3 = 0;
-            for (TResultWorkEvaluate tResultWorkEvaluate : list3) {
-                Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-                switch (evaluateOne) {
-                    case 1:
-
-                        tempDetail3 += 2;
-                        break;
-                    case 2:
-                        tempDetail3 += 1;
-
-                        break;
-
-                }
-                Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-                switch (evaluateTwo) {
-                    case 1:
-                        tempDetail3 += 2;
-                        break;
-                    case 2:
-                        tempDetail3 += 1;
-
-                        break;
-                }
-                Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-                switch (evaluateThree) {
-                    case 1:
-                        tempDetail3 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail3 += 1;
-                        break;
-                }
-                Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-                switch (evaluateFour) {
-                    case 1:
-                        tempDetail3 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail3 += 1;
-                        break;
-                }
-                Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-                switch (evaluateFive) {
-                    case 1:
-                        tempDetail3 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail3 += 1;
-                        break;
-                }
-                Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-                switch (evaluateSix) {
-                    case 1:
-                        tempDetail3 -= 3;
-                        break;
-                }
-            }
-            if (!list3.isEmpty()) {
-                tResultWorkEvaluateDetailEngineerVO3.setStartTime(list3.get(0).getEvaluateTime());
-                tResultWorkEvaluateDetailEngineerVO3.setEndTime(list3.get(list3.size() - 1).getEvaluateTime());
-            }
-            tResultWorkEvaluateDetailEngineerVO3.setCount(experimentDispatches2.size());
-            tResultWorkEvaluateDetailEngineerVO3.setIntegral(tempDetail3);
-            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO3);
-            // 验证试验阶段
-            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO4 = new TResultWorkEvaluateDetailEngineerVO();
-
-            List<String> collect10 = list2.stream().filter(e -> e.getProjectStage().equals(3)).map(TProjectProposal::getId).collect(Collectors.toList());
-            if (collect10.isEmpty()) {
-                collect10.add("0");
-            }
-            List<TExperimentDispatch> experimentDispatches3 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect10)
-                    .notIn(TExperimentDispatch::getStatus, -1,1,3).list();
-            List<String> collect11 = experimentDispatches3.stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
-            if (collect11.isEmpty()) {
-                collect11.add("0");
-            }
-            List<TResultWorkEvaluate> list4 = tResultWorkEvaluateService.lambdaQuery()
-                    .eq(TResultWorkEvaluate::getStatus, 1)
-                    .eq(TResultWorkEvaluate::getEvaluateType, 2)
-                    .eq(TResultWorkEvaluate::getUserId, sysUser.getUserId())
-                    .in(TResultWorkEvaluate::getDispatchId, collect11).list();
-            int tempDetail4 = 0;
-            for (TResultWorkEvaluate tResultWorkEvaluate : list4) {
-                Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-                switch (evaluateOne) {
-                    case 1:
-
-                        tempDetail4 += 2;
-                        break;
-                    case 2:
-                        tempDetail4 += 1;
-
-                        break;
-
-                }
-                Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-                switch (evaluateTwo) {
-                    case 1:
-                        tempDetail4 += 2;
-                        break;
-                    case 2:
-                        tempDetail4 += 1;
-
-                        break;
-                }
-                Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-                switch (evaluateThree) {
-                    case 1:
-                        tempDetail4 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail4 += 1;
-                        break;
-                }
-                Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-                switch (evaluateFour) {
-                    case 1:
-                        tempDetail4 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail4 += 1;
-                        break;
-                }
-                Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-                switch (evaluateFive) {
-                    case 1:
-                        tempDetail4 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail4 += 1;
-                        break;
-                }
-                Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-                switch (evaluateSix) {
-                    case 1:
-                        tempDetail4 -= 3;
-                        break;
-                }
-            }
-            if (!list4.isEmpty()) {
-                tResultWorkEvaluateDetailEngineerVO4.setStartTime(list4.get(0).getEvaluateTime());
-                tResultWorkEvaluateDetailEngineerVO4.setEndTime(list4.get(list4.size() - 1).getEvaluateTime());
-            }
-            tResultWorkEvaluateDetailEngineerVO4.setCount(experimentDispatches3.size());
-            tResultWorkEvaluateDetailEngineerVO4.setIntegral(tempDetail4);
-            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO4);
             // 项目检测项评定
             TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO9 = new TResultWorkEvaluateDetailEngineerVO();
             List<TQaTestItem> list5 = qaTestItemService.lambdaQuery()
@@ -1345,283 +618,18 @@
             TResultWorkEvaluateDetailUserVO tResultWorkEvaluateDetailUserVO = new TResultWorkEvaluateDetailUserVO();
             tResultWorkEvaluateDetailUserVO.setUserName(sysUser.getNickName());
             // 开发阶段
-            List<TResultWorkEvaluate> list1 = tResultWorkEvaluateService.lambdaQuery()
-                    .eq(TResultWorkEvaluate::getEvaluateType, 3)
-                    .eq(TResultWorkEvaluate::getStatus, 1)
+
+            //查询当前team的实验结果评定 集合
+            List<TResultWorkEvaluate> tResultWorkEvaluateList = tResultWorkEvaluateService.lambdaQuery()
                     .eq(TResultWorkEvaluate::getUserId, sysUser.getUserId())
-                    .eq(TResultWorkEvaluate::getTeamId, resultWorkEvaluate.getTeamId()).list();
-            // 调度ids
-            List<String> collect = list1.stream().map(TResultWorkEvaluate::getDispatchId).collect(Collectors.toList());
-            if (collect.isEmpty()) {
-                collect.add("0");
-            }
-            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO2 = new TResultWorkEvaluateDetailEngineerVO();
-            List<Integer> status = new ArrayList<>();
-            status.add(-1);
-            status.add(1);
-            status.add(3);
-            status.add(4);
-            status.add(5);
-            // 课题方案ids
-            List<TExperimentDispatch> experimentDispatches1 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getId, collect)
-                    .notIn(TExperimentDispatch::getStatus, -1,1,3).list();
-            List<String> collect6 = experimentDispatches1.stream().map(TExperimentDispatch::getProposalId).collect(Collectors.toList());
-            if (collect6.isEmpty()) {
-                collect6.add("0");
-            }
-            List<TProjectProposal> list2 = projectProposalService.lambdaQuery().in(TProjectProposal::getId, collect6)
-                    .notIn(TProjectProposal::getAuditStatus, status).list();
-            List<String> collect5 = list2.stream().filter(e -> e.getProjectStage().equals(1)).map(TProjectProposal::getId).collect(Collectors.toList());
-            if (collect5.isEmpty()) {
-                collect5.add("0");
-            }
-            // 开发阶段调度ids
-            List<String> collect1 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect5).list().stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
-            if (collect1.isEmpty()) {
-                collect1.add("0");
-            }
-            List<TResultWorkEvaluate> collect2 = list1.stream().filter(e -> collect1.contains(e.getDispatchId())).collect(Collectors.toList());
-            int tempDetail2 = 0;
-            for (TResultWorkEvaluate tResultWorkEvaluate : collect2) {
-                Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-                switch (evaluateOne) {
-                    case 1:
+                    .eq(TResultWorkEvaluate::getTeamId, projectTeam.getId())
+                    .eq(TResultWorkEvaluate::getEvaluateType, 1)//工艺工程师
+                    .eq(TResultWorkEvaluate::getDisabled, 0)//未删除
+                    .orderByAsc(TResultWorkEvaluate::getEvaluateTime)
+                    .list();
 
-                        tempDetail2 += 2;
-                        break;
-                    case 2:
-                        tempDetail2 += 1;
+            workEvaluateCalculateService.getThreeScope(tResultWorkEvaluateList, tResultWorkEvaluateDetailEngineerVOS);
 
-                        break;
-
-                }
-                Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-                switch (evaluateTwo) {
-                    case 1:
-                        tempDetail2 += 2;
-                        break;
-                    case 2:
-                        tempDetail2 += 1;
-
-                        break;
-                }
-                Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-                switch (evaluateThree) {
-                    case 1:
-                        tempDetail2 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail2 += 1;
-                        break;
-                }
-                Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-                switch (evaluateFour) {
-                    case 1:
-                        tempDetail2 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail2 += 1;
-                        break;
-                }
-                Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-                switch (evaluateFive) {
-                    case 1:
-                        tempDetail2 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail2 += 1;
-                        break;
-                }
-                Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-                switch (evaluateSix) {
-                    case 1:
-
-                        tempDetail2 -= 3;
-                        break;
-                }
-            }
-            if (!list1.isEmpty()) {
-                tResultWorkEvaluateDetailEngineerVO2.setEndTime(list1.get(list1.size() - 1).getEvaluateTime());
-            }
-            tResultWorkEvaluateDetailEngineerVO2.setStartTime(projectTeam.getCreateTime());
-            tResultWorkEvaluateDetailEngineerVO2.setCount(experimentDispatches1.size());
-            tResultWorkEvaluateDetailEngineerVO2.setIntegral(tempDetail2);
-            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO2);
-
-            // 中试试验阶段
-            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO3 = new TResultWorkEvaluateDetailEngineerVO();
-            List<String> collect7 = list2.stream().filter(e -> e.getProjectStage().equals(2)).map(TProjectProposal::getId).collect(Collectors.toList());
-            if (collect7.isEmpty()) {
-                collect7.add("0");
-            }
-            List<TExperimentDispatch> experimentDispatches2 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect7)
-                    .notIn(TExperimentDispatch::getStatus, -1,2,3).list();
-            List<String> collect8 = experimentDispatches2.stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
-            if (collect8.isEmpty()) {
-                collect8.add("0");
-            }
-            List<TResultWorkEvaluate> list3 = tResultWorkEvaluateService.lambdaQuery()
-                    .eq(TResultWorkEvaluate::getStatus, 1)
-                    .eq(TResultWorkEvaluate::getEvaluateType, 3)
-                    .eq(TResultWorkEvaluate::getUserId, sysUser.getUserId())
-                    .in(TResultWorkEvaluate::getDispatchId, collect8).list();
-            int tempDetail3 = 0;
-            for (TResultWorkEvaluate tResultWorkEvaluate : list3) {
-                Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-                switch (evaluateOne) {
-                    case 1:
-
-                        tempDetail3 += 2;
-                        break;
-                    case 2:
-                        tempDetail3 += 1;
-
-                        break;
-
-                }
-                Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-                switch (evaluateTwo) {
-                    case 1:
-                        tempDetail3 += 2;
-                        break;
-                    case 2:
-                        tempDetail3 += 1;
-
-                        break;
-                }
-                Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-                switch (evaluateThree) {
-                    case 1:
-                        tempDetail3 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail3 += 1;
-                        break;
-                }
-                Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-                switch (evaluateFour) {
-                    case 1:
-                        tempDetail3 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail3 += 1;
-                        break;
-                }
-                Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-                switch (evaluateFive) {
-                    case 1:
-                        tempDetail3 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail3 += 1;
-                        break;
-                }
-                Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-                switch (evaluateSix) {
-                    case 1:
-                        tempDetail3 -= 3;
-                        break;
-                }
-            }
-            if (!list3.isEmpty()) {
-                tResultWorkEvaluateDetailEngineerVO3.setStartTime(list3.get(0).getEvaluateTime());
-                tResultWorkEvaluateDetailEngineerVO3.setEndTime(list3.get(list3.size() - 1).getEvaluateTime());
-            }
-            tResultWorkEvaluateDetailEngineerVO3.setCount(experimentDispatches2.size());
-            tResultWorkEvaluateDetailEngineerVO3.setIntegral(tempDetail3);
-            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO3);
-            // 验证试验阶段
-            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO4 = new TResultWorkEvaluateDetailEngineerVO();
-
-            List<String> collect10 = list2.stream().filter(e -> e.getProjectStage().equals(2)).map(TProjectProposal::getId).collect(Collectors.toList());
-            if (collect10.isEmpty()) {
-                collect10.add("0");
-            }
-            List<TExperimentDispatch> experimentDispatches3 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect10)
-                    .notIn(TExperimentDispatch::getStatus, -1,1,3).list();
-            List<String> collect11 = experimentDispatches3.stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
-            if (collect11.isEmpty()) {
-                collect11.add("0");
-            }
-            List<TResultWorkEvaluate> list4 = tResultWorkEvaluateService.lambdaQuery()
-                    .eq(TResultWorkEvaluate::getStatus, 1)
-                    .eq(TResultWorkEvaluate::getEvaluateType, 3)
-                    .eq(TResultWorkEvaluate::getUserId, sysUser.getUserId())
-                    .in(TResultWorkEvaluate::getDispatchId, collect11).list();
-            int tempDetail4 = 0;
-            for (TResultWorkEvaluate tResultWorkEvaluate : list4) {
-                Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-                switch (evaluateOne) {
-                    case 1:
-
-                        tempDetail4 += 2;
-                        break;
-                    case 2:
-                        tempDetail4 += 1;
-
-                        break;
-
-                }
-                Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-                switch (evaluateTwo) {
-                    case 1:
-                        tempDetail4 += 2;
-                        break;
-                    case 2:
-                        tempDetail4 += 1;
-
-                        break;
-                }
-                Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-                switch (evaluateThree) {
-                    case 1:
-                        tempDetail4 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail4 += 1;
-                        break;
-                }
-                Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-                switch (evaluateFour) {
-                    case 1:
-                        tempDetail4 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail4 += 1;
-                        break;
-                }
-                Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-                switch (evaluateFive) {
-                    case 1:
-                        tempDetail4 += 2;
-
-                        break;
-                    case 2:
-                        tempDetail4 += 1;
-                        break;
-                }
-                Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-                switch (evaluateSix) {
-                    case 1:
-                        tempDetail4 -= 3;
-                        break;
-                }
-            }
-            if (!list4.isEmpty()) {
-                tResultWorkEvaluateDetailEngineerVO4.setStartTime(list4.get(0).getEvaluateTime());
-                tResultWorkEvaluateDetailEngineerVO4.setEndTime(list4.get(list4.size() - 1).getEvaluateTime());
-            }
-            tResultWorkEvaluateDetailEngineerVO4.setCount(experimentDispatches3.size());
-            tResultWorkEvaluateDetailEngineerVO4.setIntegral(tempDetail4);
-            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO4);
             // 其他任务
             List<TTesterOtherTask> list = tTesterOtherTaskService.lambdaQuery().eq(TTesterOtherTask::getTesterId, sysUser.getUserId()).list();
             TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO5 = new TResultWorkEvaluateDetailEngineerVO();
@@ -1643,5 +651,6 @@
         tResultWorkEvaluateDetailVO.setTesterList(tResultWorkEvaluateDetailUserVOS);
         return R.ok(tResultWorkEvaluateDetailVO);
     }
+
 }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSamplingRecordController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSamplingRecordController.java
index ad1ee7e..3afd72c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSamplingRecordController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSamplingRecordController.java
@@ -335,6 +335,7 @@
             TProjectProposal projectProposal = projectProposalService.getById(experimentDispatch.getProposalId());
             if(Objects.nonNull(projectProposal)){
                 experimentDispatch.setProjectName(projectProposal.getProjectName());
+                experimentDispatch.setProjectCode(projectProposal.getProjectCode());
             }
         }
         samplingRecordVO.setExperimentDispatch(experimentDispatch);
@@ -350,8 +351,8 @@
     @DeleteMapping(value = "/open/t-sampling-record/deleteById")
     public R<Boolean> deleteById(@RequestParam String id) {
         // 删除取样操作记录
-        samplingRecordOperationService.remove(Wrappers.lambdaQuery(TSamplingRecordOperation.class).eq(TSamplingRecordOperation::getSamplingId, id));
-        return R.ok(samplingRecordService.removeById(id));
+        samplingRecordOperationService.removeById(id);
+        return R.ok();
     }
 
     /**
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetController.java
index 6e2519c..a8a1e74 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetController.java
@@ -9,6 +9,7 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.enums.QATestItemReportStatusEnum;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.TTestMethodConfirmSheetDTO;
 import com.ruoyi.system.dto.TestMethodConfirmSheetSignDTO;
@@ -207,7 +208,12 @@
     @ApiOperation(value = "修改检验方法确认单")
     @PostMapping(value = "/api/t-test-method-confirm-sheet/update")
     public R<Boolean> update(@RequestBody String param) {
-        TTestMethodConfirmSheetDTO dto = JSON.parseObject(param,TTestMethodConfirmSheetDTO.class);
+        TTestMethodConfirmSheetDTO dto = JSON.parseObject(param, TTestMethodConfirmSheetDTO.class);
+
+        if (SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            dto.setAuditStatus(null);
+        }
+
         testMethodConfirmSheetService.updateById(dto);
         List<TTestMethodConfirmSheetTerm> list = testMethodConfirmSheetTermService.list(Wrappers.lambdaQuery(TTestMethodConfirmSheetTerm.class)
                 .eq(TTestMethodConfirmSheetTerm::getTestId, dto.getId()));
@@ -221,7 +227,9 @@
         List<TTestMethodConfirmSheetTerm> testMethodConfirmSheetTerms = dto.getTestMethodConfirmSheetTerms();
         testMethodConfirmSheetTerms.forEach(testMethodConfirmSheetTerm -> {
             testMethodConfirmSheetTerm.setTestId(dto.getId());
-            testMethodConfirmSheetTerm.setStatus(1);
+            if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) {
+                testMethodConfirmSheetTerm.setStatus(1);
+            }
         });
         testMethodConfirmSheetTermService.saveBatch(testMethodConfirmSheetTerms);
         // 查询调度的参与人员
@@ -255,7 +263,7 @@
 //            testMethodConfirmSheetOriginalService.save(testMethodConfirmSheetOriginal);
 //        }
 
-        if (dto.getAuditStatus() != -1){
+        if (dto.getAuditStatus() != null && dto.getAuditStatus() != -1){
             // MESSAGE 添加消息
             TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
                     .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetOriginalController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetOriginalController.java
index 1adeb47..b0b30c4 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetOriginalController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetOriginalController.java
@@ -172,6 +172,15 @@
         return R.ok();
     }
 
+    @Log(title = "检验方法确认单信息-删除检验方法确认单", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "删除检验方法确认单")
+    @PostMapping(value = "/api/t-test-method-confirm-sheet-original/delete")
+    public R<Boolean> delete(@RequestParam String id) {
+        testMethodConfirmSheetOriginalService.removeById(id);
+        testMethodConfirmSheetOriginalDataService.remove(Wrappers.lambdaQuery(TTestMethodConfirmSheetOriginalData.class).eq(TTestMethodConfirmSheetOriginalData::getOriginalId, id));
+        return R.ok();
+    }
+
     /**
      * 查看检验方法确认单详情
      */
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTesterOtherTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTesterOtherTaskController.java
index 73288d2..44538c1 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTesterOtherTaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTesterOtherTaskController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.TTesterOtherTaskDTO;
 import com.ruoyi.system.mapper.SysUserMapper;
@@ -135,6 +136,11 @@
         BeanUtils.copyProperties(testerOtherTask, testerOtherTaskVO);
         // 查询项目组信息
         TProjectTeam projectTeam = projectTeamService.getById(testerOtherTask.getTeamId());
+
+        if (projectTeam == null) {
+            throw new ServiceException("当前实验任务的项目组不存在");
+        }
+
         TProjectTeamVO projectTeamVO = new TProjectTeamVO();
         BeanUtils.copyProperties(projectTeam, projectTeamVO);
         // 查询项目组成员
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 c0c65ce..08ea3ab 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
@@ -38,6 +38,7 @@
         }
         String TimeDir =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
 //        String realPath = fileUploadConfig.getLocation() + TimeDir;
+//        String realPath = "C:\\file\\laboratory\\" + TimeDir;
         String realPath = "F:\\file\\laboratory\\" + TimeDir;
         File file = new File(realPath);
         // 没有目录就创建
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/CustomRequestWrapper.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/CustomRequestWrapper.java
index 3989a61..8256179 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/filter/CustomRequestWrapper.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/CustomRequestWrapper.java
@@ -1,75 +1,78 @@
 package com.ruoyi.common.filter;
 
-
 import javax.servlet.ReadListener;
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
+import java.io.*;
+import java.nio.charset.StandardCharsets;
 
+/**
+ *  解决服务器字符集问题
+ *
+ * @author 文敏杰
+ * @date 2026/06/25
+ */
 public class CustomRequestWrapper extends HttpServletRequestWrapper {
-    private final String body;
 
-    /**
-     * 构造函数,用于创建自定义请求包装器。
-     *
-     * @param request 原始 HTTP 请求对象
-     * @param body    新的请求体内容
-     * @throws IOException 如果读取或处理请求体时发生错误
-     */
-    public CustomRequestWrapper(HttpServletRequest request, String body) throws IOException {
+    private final byte[] body;
+
+    public CustomRequestWrapper(HttpServletRequest request, String body) {
         super(request);
-        this.body = body;
+        this.body = body.getBytes(StandardCharsets.UTF_8);
     }
 
-    /**
-     * 重写 getInputStream 方法,返回一个新的 ServletInputStream,
-     * 其中包含修改后的请求体内容。
-     *
-     * @return 包含修改后请求体内容的 ServletInputStream
-     * @throws IOException 如果读取输入流时发生错误
-     */
     @Override
-    public ServletInputStream getInputStream() throws IOException {
-        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
+    public ServletInputStream getInputStream() {
+
+        ByteArrayInputStream bis =
+                new ByteArrayInputStream(body);
+
         return new ServletInputStream() {
+
+            @Override
+            public int read() {
+                return bis.read();
+            }
+
             @Override
             public boolean isFinished() {
-                // 返回是否已经完成读取
-                return false;
+                return bis.available() == 0;
             }
 
             @Override
             public boolean isReady() {
-                // 返回是否准备好读取数据
-                return false;
+                return true;
             }
 
             @Override
             public void setReadListener(ReadListener readListener) {
-                // 设置读监听器,这里不需要实现
-            }
-
-            @Override
-            public int read() throws IOException {
-                // 从字节数组输入流中读取下一个字节
-                return byteArrayInputStream.read();
             }
         };
     }
 
-    /**
-     * 重写 getReader 方法,返回一个新的 BufferedReader,
-     * 其中包含修改后的请求体内容。
-     *
-     * @return 包含修改后请求体内容的 BufferedReader
-     * @throws IOException 如果读取输入流时发生错误
-     */
     @Override
-    public BufferedReader getReader() throws IOException {
-        return new BufferedReader(new InputStreamReader(this.getInputStream()));
+    public BufferedReader getReader() {
+        return new BufferedReader(
+                new InputStreamReader(
+                        getInputStream(),
+                        StandardCharsets.UTF_8
+                )
+        );
     }
-}
+
+    @Override
+    public String getCharacterEncoding() {
+        return StandardCharsets.UTF_8.name();
+    }
+
+    @Override
+    public int getContentLength() {
+        return body.length;
+    }
+
+    @Override
+    public long getContentLengthLong() {
+        return body.length;
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/SmCryptoFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/SmCryptoFilter.java
index fc9814b..4cc25e7 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/filter/SmCryptoFilter.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/SmCryptoFilter.java
@@ -12,6 +12,7 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.BufferedReader;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.rmi.ServerException;
 
 public class SmCryptoFilter implements Filter {
@@ -24,8 +25,14 @@
         HttpServletResponse httpResponse = (HttpServletResponse) response;
 
         try {
+            // 设置请求和响应的编码为 UTF-8
+            request.setCharacterEncoding("UTF-8");
+            response.setCharacterEncoding("UTF-8");
+            response.setContentType("application/json;charset=UTF-8");
+
             // 对请求进行解密
             String decryptedRequestBody = decryptRequest(httpRequest);
+            logger.info("解密后数据={}", decryptedRequestBody);
             // 处理解密后的请求体  CustomRequestWrapper为自定义请求包装器,请看下面实现
             CustomRequestWrapper customRequestWrapper = new CustomRequestWrapper(httpRequest, decryptedRequestBody);
 
@@ -35,7 +42,7 @@
 
             // 获取并加密响应内容
             byte[] content = responseWrapper.getContentAsByteArray();
-            String originalResponseBody = new String(content);
+            String originalResponseBody = new String(content, StandardCharsets.UTF_8);  // 关键修改
             String encryptedResponseBody = encryptResponse(originalResponseBody);
 
             responseWrapper.setContentType("application/json");
@@ -67,16 +74,25 @@
      * @throws IOException 如果读取或解密过程中发生错误
      */
     private String decryptRequest(HttpServletRequest request) throws IOException {
+        // 先设置编码
+        request.setCharacterEncoding("UTF-8");
+
+        // 使用Reader读取,但确保使用了正确的编码
         StringBuilder jb = new StringBuilder();
         String line;
-        BufferedReader reader = request.getReader();
-        while ((line = reader.readLine()) != null) {
-            jb.append(line);
+        // 直接使用getReader(),此时应该使用UTF-8
+        try (BufferedReader reader = request.getReader()) {
+            while ((line = reader.readLine()) != null) {
+                jb.append(line);
+            }
         }
+
+        String requestBody = jb.toString();
         try {
-            return Sm4Utils.sm4DecryptUtil(jb.toString());
+            return Sm4Utils.sm4DecryptUtil(requestBody);
         } catch (Exception e) {
-            throw new ServerException("参数解密失败:{}", e);
+            logger.error("参数解密失败,原始数据:{}", requestBody);
+            throw new ServerException("参数解密失败", e);
         }
     }
 
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java
index 4c189fd..04f21bd 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java
@@ -1,8 +1,6 @@
 package com.ruoyi.common.utils.poi;
 
 
-import javafx.scene.control.Cell;
-
 /**
  * Excel数据格式处理适配器
  * 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/EvaluateResult.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/EvaluateResult.java
new file mode 100644
index 0000000..aa63dfe
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/EvaluateResult.java
@@ -0,0 +1,13 @@
+package com.ruoyi.system.model;
+
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@Data
+public class EvaluateResult {
+    @JsonProperty("num")
+    private Integer num;
+
+    @JsonProperty("score")
+    private Integer score;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/ResultEvaluateChemistTesterQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/ResultEvaluateChemistTesterQuery.java
index 6eddedb..8c77407 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/ResultEvaluateChemistTesterQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/ResultEvaluateChemistTesterQuery.java
@@ -9,6 +9,8 @@
 @ApiModel(value = "实验员和化验师评定结果查询参数query")
 public class ResultEvaluateChemistTesterQuery extends TimeRangeQueryBody {
 
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案名称")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentDispatchQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentDispatchQuery.java
index 70cb99e..5e6311c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentDispatchQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentDispatchQuery.java
@@ -11,6 +11,8 @@
 @ApiModel(value = "实验调度query")
 public class TExperimentDispatchQuery extends TimeRangeQueryBody {
 
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案名称")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentResultReportQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentResultReportQuery.java
index 0610718..678c907 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentResultReportQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentResultReportQuery.java
@@ -11,6 +11,8 @@
 @ApiModel(value = "实验结果汇报查询条件query")
 public class TExperimentResultReportQuery extends TimeRangeQueryBody {
 
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentSchemeQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentSchemeQuery.java
index 1fd173d..9d58ec0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentSchemeQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TExperimentSchemeQuery.java
@@ -10,7 +10,8 @@
 @Data
 @ApiModel(value = "实验方案管理query")
 public class TExperimentSchemeQuery extends TimeRangeQueryBody {
-
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TInspectionReportQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TInspectionReportQuery.java
index 18d5340..2d9217c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TInspectionReportQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TInspectionReportQuery.java
@@ -10,7 +10,8 @@
 @Data
 @ApiModel(value = "检验报告查询参数query")
 public class TInspectionReportQuery extends TimeRangeQueryBody {
-
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TResultWorkEvaluateQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TResultWorkEvaluateQuery.java
index 7bd4646..f264961 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TResultWorkEvaluateQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TResultWorkEvaluateQuery.java
@@ -13,6 +13,8 @@
 
     @ApiModelProperty(value = "项目组名称")
     private String teamName;
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "所属项目课题")
     private String projectName;
     @ApiModelProperty(value = "实验编号")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TSamplingRecordQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TSamplingRecordQuery.java
index 208f1bc..c76c85a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TSamplingRecordQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TSamplingRecordQuery.java
@@ -11,7 +11,8 @@
 @Data
 @ApiModel(value = "取样记录查询query")
 public class TSamplingRecordQuery extends TimeRangeQueryBody {
-
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案名称")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TTestMethodConfirmSheetOriginalQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TTestMethodConfirmSheetOriginalQuery.java
index 36bdf0c..bd9d468 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TTestMethodConfirmSheetOriginalQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TTestMethodConfirmSheetOriginalQuery.java
@@ -11,7 +11,8 @@
 @Data
 @ApiModel(value = "原始检测项查询对象query")
 public class TTestMethodConfirmSheetOriginalQuery extends TimeRangeQueryBody {
-
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TTestMethodConfirmSheetQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TTestMethodConfirmSheetQuery.java
index cb75f25..42595cd 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TTestMethodConfirmSheetQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TTestMethodConfirmSheetQuery.java
@@ -10,7 +10,8 @@
 @Data
 @ApiModel(value = "检验方法确认单查询query")
 public class TTestMethodConfirmSheetQuery extends TimeRangeQueryBody {
-
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TQaTestItemReportService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TQaTestItemReportService.java
index 662773b..a5f70bc 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TQaTestItemReportService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TQaTestItemReportService.java
@@ -38,4 +38,6 @@
      * @return
      */
     List<TQaTestItemReportVO> getListByItemId(String itemId);
+
+    List<TQaTestItemReportVO> getListByItemIdDraft(String itemId);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TClinicalTrialPointsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TClinicalTrialPointsServiceImpl.java
index fc00ed6..5cb19ef 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TClinicalTrialPointsServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TClinicalTrialPointsServiceImpl.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.system.mapper.SysUserMapper;
 import com.ruoyi.system.mapper.TClinicalTrialPointsMapper;
 import com.ruoyi.system.model.TClinicalTrialPoints;
 import com.ruoyi.system.query.TClinicalTrialPointsQuery;
@@ -11,7 +13,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -25,16 +29,21 @@
 @Service
 public class TClinicalTrialPointsServiceImpl extends ServiceImpl<TClinicalTrialPointsMapper, TClinicalTrialPoints> implements TClinicalTrialPointsService {
 
+    @Resource
+    private SysUserMapper sysUserMapper;
+
     @Override
     public PageInfo<TClinicalTrialPointsVO> pageList(TClinicalTrialPointsQuery query) {
         PageInfo<TClinicalTrialPointsVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         if(CollectionUtils.isEmpty(query.getTeamIds())  && query.getRoleType() != 1){
             return pageInfo;
         }
+
         List<TClinicalTrialPointsVO> list = this.baseMapper.pageList(query,pageInfo);
         if(CollectionUtils.isEmpty(list)){
             return pageInfo;
         }
+
         // 统计当前项目组累计分数
         List<String> teamIds = list.stream().map(TClinicalTrialPointsVO::getTeamId).distinct().collect(Collectors.toList());
         List<TClinicalTrialPoints> teamList = this.list(Wrappers.lambdaQuery(TClinicalTrialPoints.class)
@@ -46,6 +55,14 @@
             }else {
                 clinicalTrialPointsVO.setTotalScore(clinicalTrialPoints.stream().mapToDouble(TClinicalTrialPoints::getEvaluateScore).sum());
             }
+
+            // 工艺工程师名字
+            if (clinicalTrialPointsVO.getProcessEngineerId() != null) {
+                SysUser sysUser = sysUserMapper.selectUserById(clinicalTrialPointsVO.getProcessEngineerId());
+                if(Objects.nonNull(sysUser)){
+                    clinicalTrialPointsVO.setProcessEngineerName(sysUser.getNickName());
+                }
+            }
         }
         pageInfo.setRecords(list);
         return pageInfo;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TExperimentSchemeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TExperimentSchemeServiceImpl.java
index e0f2054..621c825 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TExperimentSchemeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TExperimentSchemeServiceImpl.java
@@ -53,7 +53,7 @@
         sysUsers.forEach(sysUser -> {
             experimentSchemePersonList.stream().filter(experimentSchemePerson -> experimentSchemePerson.getUserId().equals(sysUser.getUserId())).forEach(experimentSchemePerson -> experimentSchemePerson.setNickName(sysUser.getNickName()));
         });
-        for (TExperimentSchemeVO experimentSchemeVO : list) {
+        for (com.ruoyi.system.vo.TExperimentSchemeVO experimentSchemeVO : list) {
             List<TExperimentSchemePerson> personList = experimentSchemePersonList.stream().filter(experimentSchemePerson -> experimentSchemePerson.getSchemeId().equals(experimentSchemeVO.getId())).collect(Collectors.toList());
             experimentSchemeVO.setExperimentSchemePersons(personList);
             // 写入名称
@@ -76,10 +76,12 @@
         }
         List<TExperimentSchemePerson> experimentSchemePersonList = experimentSchemePersonMapper.selectList(Wrappers.lambdaQuery(TExperimentSchemePerson.class).in(TExperimentSchemePerson::getSchemeId, schemeIds));
         List<Long> userIds = experimentSchemePersonList.stream().map(TExperimentSchemePerson::getUserId).collect(Collectors.toList());
-        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(userIds);
-        sysUsers.forEach(sysUser -> {
-            experimentSchemePersonList.stream().filter(experimentSchemePerson -> experimentSchemePerson.getUserId().equals(sysUser.getUserId())).forEach(experimentSchemePerson -> experimentSchemePerson.setNickName(sysUser.getNickName()));
-        });
+        if (!userIds.isEmpty()) {
+            List<SysUser> sysUsers = sysUserMapper.selectUserByIds(userIds);
+            sysUsers.forEach(sysUser -> {
+                experimentSchemePersonList.stream().filter(experimentSchemePerson -> experimentSchemePerson.getUserId().equals(sysUser.getUserId())).forEach(experimentSchemePerson -> experimentSchemePerson.setNickName(sysUser.getNickName()));
+            });
+        }
         for (TExperimentSchemeVO experimentSchemeVO : list) {
             List<TExperimentSchemePerson> personList = experimentSchemePersonList.stream().filter(experimentSchemePerson -> experimentSchemePerson.getSchemeId().equals(experimentSchemeVO.getId())).collect(Collectors.toList());
             experimentSchemeVO.setExperimentSchemePersons(personList);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TQaTestItemReportServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TQaTestItemReportServiceImpl.java
index c9bcc4e..9755ed2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TQaTestItemReportServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TQaTestItemReportServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
@@ -11,10 +12,12 @@
 import com.ruoyi.system.query.TQaTestItemReportQuery;
 import com.ruoyi.system.service.TQaTestItemReportService;
 import com.ruoyi.system.vo.TQaTestItemReportVO;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -64,4 +67,20 @@
     public List<TQaTestItemReportVO> getListByItemId(String itemId) {
         return this.baseMapper.getListByItemId(itemId);
     }
+
+    @Override
+    public List<TQaTestItemReportVO> getListByItemIdDraft(String itemId) {
+        LambdaQueryWrapper<TQaTestItemReport> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(TQaTestItemReport::getItemId, itemId);
+        lambdaQueryWrapper.eq(TQaTestItemReport::getStatus, -1);
+        List<TQaTestItemReport> tQaTestItemReports = this.baseMapper.selectList(lambdaQueryWrapper);
+
+        List<TQaTestItemReportVO> tQaTestItemReportVOSList = new ArrayList<>();
+        for (TQaTestItemReport tQaTestItemReport : tQaTestItemReports) {
+            TQaTestItemReportVO tQaTestItemReportVO = new TQaTestItemReportVO();
+            BeanUtils.copyProperties(tQaTestItemReport, tQaTestItemReportVO);
+            tQaTestItemReportVOSList.add(tQaTestItemReportVO);
+        }
+        return tQaTestItemReportVOSList;
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TQaTestItemServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TQaTestItemServiceImpl.java
index c6c2041..61a45ce 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TQaTestItemServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TQaTestItemServiceImpl.java
@@ -1,16 +1,24 @@
 package com.ruoyi.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.system.mapper.TProjectTeamMapper;
 import com.ruoyi.system.mapper.TQaTestItemMapper;
+import com.ruoyi.system.mapper.TQaTestItemReportMapper;
+import com.ruoyi.system.model.TProjectTeam;
 import com.ruoyi.system.model.TQaTestItem;
+import com.ruoyi.system.model.TQaTestItemReport;
 import com.ruoyi.system.query.TQaTestItemQuery;
 import com.ruoyi.system.service.TQaTestItemService;
 import com.ruoyi.system.vo.TQaTestItemVO;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.List;
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -23,11 +31,102 @@
 @Service
 public class TQaTestItemServiceImpl extends ServiceImpl<TQaTestItemMapper, TQaTestItem> implements TQaTestItemService {
 
+    @Resource
+    private TQaTestItemReportMapper tQaTestItemReportMapper;
+    @Resource
+    private TProjectTeamMapper tProjectTeamMapper;
+
     @Override
     public PageInfo<TQaTestItemVO> pageList(TQaTestItemQuery query) {
         PageInfo<TQaTestItemVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
-        List<TQaTestItemVO> list = this.baseMapper.pageList(query,pageInfo);
-        pageInfo.setRecords(list);
+
+        // 1. 先查所有数据(不分页)
+        List<TQaTestItemVO> allList = new ArrayList<>();
+
+        List<TQaTestItemVO> list = this.baseMapper.pageList(query,null);//先不分页
+        if (list != null) {
+            allList.addAll(list);
+        }
+
+        if (query.getStatus() != null && query.getStatus() == -1) {
+            //增加 在草稿箱的子元素
+            LambdaQueryWrapper<TQaTestItemReport> tQaTestItemReportLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            tQaTestItemReportLambdaQueryWrapper.eq(TQaTestItemReport :: getStatus, -1);
+            tQaTestItemReportLambdaQueryWrapper.in(TQaTestItemReport :: getDisabled, false);
+
+            List<String> teamIds = query.getTeamIds();
+            if (teamIds != null && !teamIds.isEmpty()) {
+                // 使用 inSql 嵌套查询
+                String teamIdsStr = teamIds.stream()
+                        .map(String::valueOf)
+                        .collect(Collectors.joining(","));
+
+                tQaTestItemReportLambdaQueryWrapper.inSql(TQaTestItemReport::getItemId,
+                        "SELECT id FROM t_qa_test_item WHERE team_id IN (" + teamIdsStr + ")");
+            }
+
+            List<TQaTestItemReport> tQaTestItemReports = tQaTestItemReportMapper.selectList(tQaTestItemReportLambdaQueryWrapper);
+            if (tQaTestItemReports != null && !tQaTestItemReports.isEmpty()) {
+                // 提取 itemId 并去重
+                List<String> distinctItemIds = tQaTestItemReports.stream()
+                        .map(TQaTestItemReport::getItemId)  // 假设子表中有 itemId 字段
+                        .filter(Objects::nonNull)            // 过滤掉 null
+                        .distinct()                          // 去重
+                        .collect(Collectors.toList());
+
+                // 用去重后的 itemId 查询主表数据
+                if (!distinctItemIds.isEmpty()) {
+                    LambdaQueryWrapper<TQaTestItem> mainWrapper = new LambdaQueryWrapper<>();
+                    mainWrapper.in(TQaTestItem::getId, distinctItemIds);
+                    // 如果还需要 teamId 过滤,可以再加
+                    if (teamIds != null && !teamIds.isEmpty()) {
+                        mainWrapper.in(TQaTestItem::getTeamId, teamIds);
+                    }
+                    mainWrapper.ne(TQaTestItem::getStatus, -1)
+                            .isNotNull(TQaTestItem::getStatus);  // 排除 null 值
+                    List<TQaTestItem> mainDataList = this.baseMapper.selectList(mainWrapper);
+
+                    // TODO: 将 mainDataList 转换为 TQaTestItemVO 并添加到 list 中
+                    List<TQaTestItemVO> tQaTestItemVOList = new ArrayList<>();
+                    for (TQaTestItem tQaTestItem : mainDataList) {
+                        TQaTestItemVO tQaTestItemVO = new TQaTestItemVO();
+
+                        BeanUtils.copyProperties(tQaTestItem, tQaTestItemVO);
+
+                        TProjectTeam tProjectTeam = tProjectTeamMapper.selectById(tQaTestItem.getTeamId());
+                        if (tProjectTeam != null) {
+                            tQaTestItemVO.setTeamName(tProjectTeam.getTeamName());
+                        }
+                        tQaTestItemVOList.add(tQaTestItemVO);
+                    }
+
+                    allList.addAll(tQaTestItemVOList);
+
+                    //去重
+                    allList = allList.stream()
+                            .collect(Collectors.collectingAndThen(
+                                    Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TQaTestItemVO::getId))),
+                                    ArrayList::new
+                            ));
+                }
+            }
+        }
+
+        //统一排序
+        allList.sort(Comparator.comparing(TQaTestItemVO::getCreateTime, Comparator.nullsLast(Comparator.reverseOrder())));
+
+        // 手动分页
+        int total = allList.size();
+        int start = (query.getPageNum() - 1) * query.getPageSize();
+        int end = Math.min(start + query.getPageSize(), total);
+
+        List<TQaTestItemVO> pageRecords = new ArrayList<>();
+        if (start < total) {
+            pageRecords = allList.subList(start, end);
+        }
+
+        pageInfo.setTotal(total);
+        pageInfo.setRecords(pageRecords);
         return pageInfo;
     }
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTesterOtherTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTesterOtherTaskServiceImpl.java
index 36a3c17..359775d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTesterOtherTaskServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTesterOtherTaskServiceImpl.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.system.mapper.SysUserMapper;
 import com.ruoyi.system.mapper.TTesterOtherTaskMapper;
 import com.ruoyi.system.model.TTesterOtherTask;
 import com.ruoyi.system.query.TTesterOtherTaskQuery;
@@ -10,7 +12,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -23,6 +27,9 @@
  */
 @Service
 public class TTesterOtherTaskServiceImpl extends ServiceImpl<TTesterOtherTaskMapper, TTesterOtherTask> implements TTesterOtherTaskService {
+
+    @Resource
+    private SysUserMapper sysUserMapper;
 
     @Override
     public PageInfo<TTesterOtherTaskVO> pageList(TTesterOtherTaskQuery query) {
@@ -41,6 +48,13 @@
             if(CollectionUtils.isEmpty(taskList)){
                 tTesterOtherTaskVO.setTotalScore(0);
             }
+
+            // 查询是演员信息
+            SysUser sysUser = sysUserMapper.selectUserById(tTesterOtherTaskVO.getTesterId());
+            if(Objects.nonNull(sysUser)){
+                tTesterOtherTaskVO.setTesterName(sysUser.getNickName());
+            }
+
             tTesterOtherTaskVO.setTotalScore(taskList.stream().mapToInt(TTesterOtherTask::getEvaluateScore).sum());
         }
         pageInfo.setRecords(list);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTesterWorkEvaluateServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTesterWorkEvaluateServiceImpl.java
index 59466e8..bce0bc2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTesterWorkEvaluateServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTesterWorkEvaluateServiceImpl.java
@@ -8,18 +8,27 @@
 import com.ruoyi.system.mapper.TExperimentDispatchParticipantsMapper;
 import com.ruoyi.system.mapper.TResultWorkEvaluateMapper;
 import com.ruoyi.system.model.TExperimentDispatchParticipants;
+import com.ruoyi.system.model.TProjectTeam;
+import com.ruoyi.system.model.TProjectTeamStaff;
 import com.ruoyi.system.model.TResultWorkEvaluate;
 import com.ruoyi.system.query.ResultEvaluateChemistTesterQuery;
 import com.ruoyi.system.query.TResultWorkEvaluateQuery;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.TProjectTeamService;
+import com.ruoyi.system.service.TProjectTeamStaffService;
 import com.ruoyi.system.service.TResultWorkEvaluateService;
 import com.ruoyi.system.vo.ResultEvaluateChemistTesterVO;
+import com.ruoyi.system.vo.TResultWorkEvaluateDetailVO;
 import com.ruoyi.system.vo.TResultWorkEvaluateVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -37,6 +46,16 @@
     private SysUserMapper sysUserMapper;
     @Autowired
     private TExperimentDispatchParticipantsMapper experimentDispatchParticipantsMapper;
+    @Resource
+    private TResultWorkEvaluateService tResultWorkEvaluateService;
+    @Autowired
+    private TProjectTeamService projectTeamService;
+    @Autowired
+    private TProjectTeamStaffService projectTeamStaffService;
+    @Autowired
+    private ISysUserService sysUserService;
+    @Autowired
+    private WorkEvaluateService workEvaluateCalculateService;
 
     @Override
     public PageInfo<TResultWorkEvaluateVO> pageList(TResultWorkEvaluateQuery query) {
@@ -49,180 +68,82 @@
                 .orderByDesc(TResultWorkEvaluate::getEvaluateTime)
                 .isNotNull(TResultWorkEvaluate::getTeamId));
         for (TResultWorkEvaluateVO tResultWorkEvaluateVO : list) {
-            List<TResultWorkEvaluate> collect = tResultWorkEvaluates.stream().filter(e ->
-//                            e.getEvaluateOne()!=null&&
-//                            e.getEvaluateTwo()!=null&&
-//                            e.getEvaluateThree()!=null&&
-//                            e.getEvaluateFour()!=null&&
-//                            e.getEvaluateFive()!=null&&
-//                            e.getEvaluateSix()!=null&&
-                                    e.getStatus()==1&&
-                    e.getTeamId().equals(tResultWorkEvaluateVO.getTeamId())).collect(Collectors.toList());
-            if (!collect.isEmpty()){
-                tResultWorkEvaluateVO.setEndTime(collect.get(0).getEvaluateTime());
-            }
-            int temp1=0;
-            int temp2=0;
-            int temp3=0;
-            int temp4=0;
+            String id = tResultWorkEvaluateVO.getId();
 
-            for (TResultWorkEvaluate tResultWorkEvaluate : collect) {
-                Integer evaluateOne = tResultWorkEvaluate.getEvaluateOne();
-                switch (evaluateOne){
-                    case 1:
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2+=2;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3+=2;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4+=2;
-                        }
-                        temp1+=2;
-                        break;
-                    case 2:
-                        temp1+=1;
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2+=1;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3+=1;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4+=1;
-                        }
-                        break;
+            TResultWorkEvaluate resultWorkEvaluate = tResultWorkEvaluateService.getById(id);
+            TProjectTeam projectTeam = projectTeamService.getById(resultWorkEvaluate.getTeamId());
+            tResultWorkEvaluateVO.setStartTime(projectTeam.getCreateTime());
+            List<Long> role4 = projectTeamStaffService.lambdaQuery()
+                    .eq(TProjectTeamStaff::getRoleType, 4).eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).list()
+                    .stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
+            List<Long> role5 = projectTeamStaffService.lambdaQuery()
+                    .eq(TProjectTeamStaff::getRoleType, 5).eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).list()
+                    .stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
 
-                }
-                Integer evaluateTwo = tResultWorkEvaluate.getEvaluateTwo();
-                switch (evaluateTwo){
-                    case 1:
-                        temp1+=2;
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2+=2;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3+=2;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4+=2;
-                        }
-                        break;
-                    case 2:
-                        temp1+=1;
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2+=1;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3+=1;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4+=1;
-                        }
-                        break;
-                }
-                Integer evaluateThree = tResultWorkEvaluate.getEvaluateThree();
-                switch (evaluateThree){
-                    case 1:
-                        temp1+=2;
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2+=2;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3+=2;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4+=2;
-                        }
-                        break;
-                    case 2:
-                        temp1+=1;
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2+=1;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3+=1;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4+=1;
-                        }
-                        break;
-                }
-                Integer evaluateFour = tResultWorkEvaluate.getEvaluateFour();
-                switch (evaluateFour){
-                    case 1:
-                        temp1+=2;
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2+=2;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3+=2;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4+=2;
-                        }
-                        break;
-                    case 2:
-                        temp1+=1;
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2+=1;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3+=1;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4+=1;
-                        }
-                        break;
-                }
-                Integer evaluateFive = tResultWorkEvaluate.getEvaluateFive();
-                switch (evaluateFive){
-                    case 1:
-                        temp1+=2;
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2+=2;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3+=2;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4+=2;
-                        }
-                        break;
-                    case 2:
-                        temp1+=1;
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2+=1;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3+=1;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4+=1;
-                        }
-                        break;
-                }
-                Integer evaluateSix = tResultWorkEvaluate.getEvaluateSix();
-                switch (evaluateSix){
-                    case 1:
-                        temp1+=2;
-                        if (tResultWorkEvaluate.getEvaluateType()==1){
-                            temp2-=3;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==2){
-                            temp3-=3;
-                        }
-                        if (tResultWorkEvaluate.getEvaluateType()==3){
-                            temp4-=3;
-                        }
-                        break;
+            List<SysUser> user4 = new ArrayList<>();
+            List<SysUser> user5 = new ArrayList<>();
+
+            for (Long l : role4) {
+                SysUser sysUser = sysUserService.selectUserById(l);
+                if (sysUser != null) {
+                    user4.add(sysUser);
                 }
             }
-            tResultWorkEvaluateVO.setTeamIntegral(temp1);
-            tResultWorkEvaluateVO.setEngineerIntegral(temp2);
-            tResultWorkEvaluateVO.setChemistIntegral(temp3);
-            tResultWorkEvaluateVO.setTesterIntegral(temp4);
+            for (Long l : role5) {
+                SysUser sysUser = sysUserService.selectUserById(l);
+                if (sysUser != null) {
+                    user5.add(sysUser);
+                }
+            }
+
+            int engineerIntegral = 0;  // 工艺工程师总积分
+            int chemistIntegral = 0;   // 化验师总积分
+            int testerIntegral = 0;    // 实验员总积分
+
+            // 单独获取各角色积分
+            TResultWorkEvaluateDetailVO engineerEvaluateDetail = workEvaluateCalculateService.getProcessEngineerEvaluateDetail(id);//工艺工程师
+            if (engineerEvaluateDetail != null && engineerEvaluateDetail.getEngineerList() != null) {
+                engineerIntegral = engineerEvaluateDetail.getEngineerList().stream()
+                        .mapToInt(vo -> Optional.ofNullable(vo.getIntegral()).orElse(0))
+                        .sum();
+            }
+
+            TResultWorkEvaluateDetailVO chemistEvaluateDetail = workEvaluateCalculateService.getChemistEvaluateDetail(id);//4 化验师
+            if (chemistEvaluateDetail != null && chemistEvaluateDetail.getChemistList() != null) {
+                chemistIntegral = chemistEvaluateDetail.getChemistList().stream()
+                        .filter(user -> user.getList() != null)
+                        .flatMap(user -> user.getList().stream())
+                        .mapToInt(vo -> Optional.ofNullable(vo.getIntegral()).orElse(0))
+                        .sum();
+            }
+
+            TResultWorkEvaluateDetailVO testerEvaluateDetail = workEvaluateCalculateService.getTesterEvaluateDetail(id);// 5 实验员
+            if (testerEvaluateDetail != null && testerEvaluateDetail.getTesterList() != null) {
+                testerIntegral = testerEvaluateDetail.getTesterList().stream()
+                        .filter(user -> user.getList() != null)
+                        .flatMap(user -> user.getList().stream())
+                        .mapToInt(vo -> Optional.ofNullable(vo.getIntegral()).orElse(0))
+                        .sum();
+            }
+
+            // 计算项目组总积分
+            int teamIntegral = engineerIntegral + chemistIntegral + testerIntegral;
+
+            //查询最后一条数据的时间
+            TResultWorkEvaluate tResultWorkEvaluate = tResultWorkEvaluateService.lambdaQuery()
+                    .eq(TResultWorkEvaluate::getTeamId, projectTeam.getId())
+                    .eq(TResultWorkEvaluate::getDisabled, 0)//未删除
+                    .orderByDesc(TResultWorkEvaluate::getEvaluateTime)// 按评定时间倒序排序
+                    .last("limit 1")// 取第一条
+                    .one();
+            if (tResultWorkEvaluate != null) {
+                tResultWorkEvaluateVO.setEndTime(tResultWorkEvaluate.getEvaluateTime());
+            }
+
+            tResultWorkEvaluateVO.setTeamIntegral(teamIntegral);
+            tResultWorkEvaluateVO.setEngineerIntegral(engineerIntegral);
+            tResultWorkEvaluateVO.setChemistIntegral(chemistIntegral);
+            tResultWorkEvaluateVO.setTesterIntegral(testerIntegral);
         }
         pageInfo.setRecords(list);
         return pageInfo;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WorkEvaluateService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WorkEvaluateService.java
new file mode 100644
index 0000000..3206554
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WorkEvaluateService.java
@@ -0,0 +1,583 @@
+package com.ruoyi.system.service.impl;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.common.core.domain.BaseModel;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.model.*;
+import com.ruoyi.system.service.*;
+import com.ruoyi.system.vo.TResultWorkEvaluateDetailEngineerVO;
+import com.ruoyi.system.vo.TResultWorkEvaluateDetailUserVO;
+import com.ruoyi.system.vo.TResultWorkEvaluateDetailVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 工作评定计算服务
+ * 用于封装工艺工程师、化验师、实验员的工作内容评定计算逻辑
+ *
+ * @author xiaochen
+ * @since 2026-06-18
+ */
+@Service
+@Slf4j
+public class WorkEvaluateService {
+
+    @Autowired
+    private TResultWorkEvaluateService tResultWorkEvaluateService;
+
+    @Autowired
+    private TProjectTeamService projectTeamService;
+
+    @Autowired
+    private TProjectTeamStaffService projectTeamStaffService;
+
+    @Autowired
+    private TFeasibilityStudyReportService feasibilityStudyReportService;
+
+    @Autowired
+    private TProjectApprovalReportService projectApprovalReportService;
+
+    @Autowired
+    private TClinicalTrialPointsService clinicalTrialPointsService;
+
+    @Autowired
+    private TQaTestItemService qaTestItemService;
+
+    @Autowired
+    private TQaProduceReportService qaProduceReportService;
+    @Autowired
+    private TTesterOtherTaskService tTesterOtherTaskService;
+
+    @Autowired
+    private TExperimentDispatchService tExperimentDispatchService;
+
+    @Autowired
+    private TProjectProposalService tProjectProposalService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    /**
+     * 获取工艺工程师工作内容评定详情
+     */
+    public TResultWorkEvaluateDetailVO getProcessEngineerEvaluateDetail(String id) {
+        TResultWorkEvaluateDetailVO tResultWorkEvaluateDetailVO = new TResultWorkEvaluateDetailVO();
+
+        TResultWorkEvaluate resultWorkEvaluate = tResultWorkEvaluateService.getById(id);
+        TProjectTeam projectTeam = projectTeamService.getById(resultWorkEvaluate.getTeamId());
+        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).eq(TProjectTeamStaff::getRoleType, 3).last("limit 1")
+                .one();
+        TProjectTeamStaff projectTeamStaff1 = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).eq(TProjectTeamStaff::getRoleType, 2).last("limit 1")
+                .one();
+        tResultWorkEvaluateDetailVO.setStartTime(projectTeam.getCreateTime());
+        Long userId = projectTeamStaff.getUserId();
+        Long auditUserId = projectTeamStaff1.getUserId();
+        List<TFeasibilityStudyReport> total = feasibilityStudyReportService.lambdaQuery()
+                .eq(TFeasibilityStudyReport::getStatus, 3)
+                .eq(TFeasibilityStudyReport::getEvaluatePersonId, auditUserId).list();
+        List<TResultWorkEvaluateDetailEngineerVO> tResultWorkEvaluateDetailEngineerVOS = new ArrayList<>();
+        // 工艺可研
+        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO = new TResultWorkEvaluateDetailEngineerVO();
+        List<TFeasibilityStudyReport> collect = total.stream().filter(e -> e.getReportType().equals(1)).collect(Collectors.toList());
+        int tempDetail = 0;
+        for (TFeasibilityStudyReport tFeasibilityStudyReport : collect) {
+            if (StringUtils.hasLength(tFeasibilityStudyReport.getEvaluateScore())) {
+                for (String s : tFeasibilityStudyReport.getEvaluateScore().split(",")) {
+                    tempDetail += Integer.parseInt(s);
+                }
+            }
+        }
+        tResultWorkEvaluateDetailEngineerVO.setCount(collect.size());
+        tResultWorkEvaluateDetailEngineerVO.setIntegral(tempDetail);
+        if (!collect.isEmpty()) {
+            tResultWorkEvaluateDetailEngineerVO.setEndTime(collect.get(collect.size() - 1).getEvaluateTime());
+            tResultWorkEvaluateDetailEngineerVO.setStartTime(projectTeam.getCreateTime());
+        }
+
+        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO);
+        // 工艺可行
+        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO1 = new TResultWorkEvaluateDetailEngineerVO();
+        List<TFeasibilityStudyReport> collect1 = total.stream().filter(e -> e.getReportType().equals(2)).collect(Collectors.toList());
+        int tempDetail1 = 0;
+        for (TFeasibilityStudyReport tFeasibilityStudyReport : collect1) {
+            if (StringUtils.hasLength(tFeasibilityStudyReport.getEvaluateScore())) {
+                for (String s : tFeasibilityStudyReport.getEvaluateScore().split(",")) {
+                    tempDetail1 += Integer.parseInt(s);
+                }
+            }
+        }
+        tResultWorkEvaluateDetailEngineerVO1.setCount(collect1.size());
+        tResultWorkEvaluateDetailEngineerVO1.setIntegral(tempDetail1);
+        if (!collect1.isEmpty()) {
+            tResultWorkEvaluateDetailEngineerVO1.setStartTime(collect1.get(0).getEvaluateTime());
+
+            tResultWorkEvaluateDetailEngineerVO1.setEndTime(collect1.get(collect1.size() - 1).getEvaluateTime());
+        }
+
+        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO1);
+
+        //查询当前team的实验结果评定 集合
+        List<TResultWorkEvaluate> tResultWorkEvaluateList = tResultWorkEvaluateService.lambdaQuery()
+                .eq(TResultWorkEvaluate::getTeamId, projectTeam.getId())
+                .eq(TResultWorkEvaluate::getEvaluateType, 1)//工艺工程师
+                .eq(TResultWorkEvaluate::getDisabled, 0)//未删除
+                .eq(TResultWorkEvaluate::getStatus, 1)//已提交
+                .orderByAsc(TResultWorkEvaluate::getEvaluateTime)
+                .list();
+
+        getThreeScope(tResultWorkEvaluateList, tResultWorkEvaluateDetailEngineerVOS);
+
+        // 工艺开发工具
+        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO5 = new TResultWorkEvaluateDetailEngineerVO();
+        List<TFeasibilityStudyReport> collect12 = total.stream().filter(e -> e.getReportType().equals(3)).collect(Collectors.toList());
+        int tempDetail15 = 0;
+        for (TFeasibilityStudyReport tFeasibilityStudyReport : collect12) {
+            if (StringUtils.hasLength(tFeasibilityStudyReport.getEvaluateScore())) {
+                for (String s : tFeasibilityStudyReport.getEvaluateScore().split(",")) {
+                    tempDetail15 += Integer.parseInt(s);
+                }
+            }
+        }
+        tResultWorkEvaluateDetailEngineerVO5.setCount(collect12.size());
+        tResultWorkEvaluateDetailEngineerVO5.setIntegral(tempDetail15);
+        if (!collect12.isEmpty()) {
+            tResultWorkEvaluateDetailEngineerVO5.setStartTime(collect12.get(0).getEvaluateTime());
+            tResultWorkEvaluateDetailEngineerVO5.setEndTime(collect12.get(collect12.size() - 1).getEvaluateTime());
+        }
+        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO5);
+        // 验证与发布
+        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO6 = new TResultWorkEvaluateDetailEngineerVO();
+        List<TFeasibilityStudyReport> collect13 = total.stream().filter(e -> e.getReportType().equals(4)).collect(Collectors.toList());
+        int tempDetail16 = 0;
+        for (TFeasibilityStudyReport tFeasibilityStudyReport : collect13) {
+            if (StringUtils.hasLength(tFeasibilityStudyReport.getEvaluateScore())) {
+                for (String s : tFeasibilityStudyReport.getEvaluateScore().split(",")) {
+                    tempDetail16 += Integer.parseInt(s);
+                }
+            }
+        }
+        tResultWorkEvaluateDetailEngineerVO6.setCount(collect13.size());
+        tResultWorkEvaluateDetailEngineerVO6.setIntegral(tempDetail16);
+        if (!collect13.isEmpty()) {
+            tResultWorkEvaluateDetailEngineerVO6.setStartTime(collect13.get(0).getEvaluateTime());
+            tResultWorkEvaluateDetailEngineerVO6.setEndTime(collect13.get(collect13.size() - 1).getEvaluateTime());
+        }
+        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO6);
+        // 立项报告
+        List<TProjectApprovalReport> list5 = projectApprovalReportService.lambdaQuery().orderByDesc(BaseModel::getCreateTime).eq(TProjectApprovalReport::getTeamId, projectTeam.getId()).eq(TProjectApprovalReport::getStatus, 2).list();
+        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO7 = new TResultWorkEvaluateDetailEngineerVO();
+        tResultWorkEvaluateDetailEngineerVO7.setCount(list5.size());
+        if (!list5.isEmpty()) {
+            tResultWorkEvaluateDetailEngineerVO7.setStartTime(list5.get(0).getAuditTime());
+            tResultWorkEvaluateDetailEngineerVO7.setEndTime(list5.get(list5.size() - 1).getAuditTime());
+        }
+        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO7);
+        // 临床试验积分
+        List<TClinicalTrialPoints> list6 = clinicalTrialPointsService.lambdaQuery()
+                .eq(TClinicalTrialPoints::getProcessEngineerId, userId)
+                .eq(TClinicalTrialPoints::getTeamId, projectTeam.getId()).list();
+        TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO8 = new TResultWorkEvaluateDetailEngineerVO();
+        tResultWorkEvaluateDetailEngineerVO8.setCount(list6.size());
+        if (!list6.isEmpty()) {
+            tResultWorkEvaluateDetailEngineerVO8.setStartTime(list6.get(0).getCreateTime());
+            tResultWorkEvaluateDetailEngineerVO8.setEndTime(list6.get(list6.size() - 1).getCreateTime());
+            tResultWorkEvaluateDetailEngineerVO8.setIntegral(list6.get(0).getEvaluateScore());
+        }
+        tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO8);
+        tResultWorkEvaluateDetailVO.setEngineerList(tResultWorkEvaluateDetailEngineerVOS);
+
+        return tResultWorkEvaluateDetailVO;
+    }
+
+    /**
+     * 获取化验师工作内容评定详情
+     */
+    public TResultWorkEvaluateDetailVO getChemistEvaluateDetail(String id) {
+        TResultWorkEvaluateDetailVO tResultWorkEvaluateDetailVO = new TResultWorkEvaluateDetailVO();
+        List<TResultWorkEvaluateDetailUserVO> tResultWorkEvaluateDetailUserVOS = new ArrayList<>();
+        TResultWorkEvaluate resultWorkEvaluate = tResultWorkEvaluateService.getById(id);
+        TProjectTeam projectTeam = projectTeamService.getById(resultWorkEvaluate.getTeamId());
+        tResultWorkEvaluateDetailVO.setStartTime(projectTeam.getCreateTime());
+        List<Long> role5 = projectTeamStaffService.lambdaQuery()
+                .eq(TProjectTeamStaff::getRoleType, 4).eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).list()
+                .stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
+        List<SysUser> user5 = new ArrayList<>();
+        SysUser sysUser1 = sysUserService.selectUserById(SecurityUtils.getUserId());
+        if (sysUser1.getRoleType() == 4 || sysUser1.getRoleType() == 5) {
+            //只能查看自己的
+            user5.add(sysUser1);
+        } else {
+            for (Long l : role5) {
+                SysUser sysUser = sysUserService.selectUserById(l);
+                if (sysUser != null) {
+                    user5.add(sysUser);
+                }
+            }
+        }
+
+//        List<TFeasibilityStudyReport> total = feasibilityStudyReportService.lambdaQuery()
+//                .eq(TFeasibilityStudyReport::getStatus, 3)
+//                .eq(TFeasibilityStudyReport::getTeamId, resultWorkEvaluate.getTeamId()).list();
+        for (SysUser sysUser : user5) {
+            List<TResultWorkEvaluateDetailEngineerVO> tResultWorkEvaluateDetailEngineerVOS = new ArrayList<>();
+            TResultWorkEvaluateDetailUserVO tResultWorkEvaluateDetailUserVO = new TResultWorkEvaluateDetailUserVO();
+            tResultWorkEvaluateDetailUserVO.setUserName(sysUser.getNickName());
+
+            // 开发阶段
+            //查询当前team的实验结果评定 集合
+            List<TResultWorkEvaluate> tResultWorkEvaluateList = tResultWorkEvaluateService.lambdaQuery()
+                    .eq(TResultWorkEvaluate::getUserId, sysUser.getUserId())
+                    .eq(TResultWorkEvaluate::getTeamId, projectTeam.getId())
+                    .eq(TResultWorkEvaluate::getEvaluateType, 1)//工艺工程师
+                    .eq(TResultWorkEvaluate::getDisabled, 0)//未删除
+                    .orderByAsc(TResultWorkEvaluate::getEvaluateTime)
+                    .list();
+
+            getThreeScope(tResultWorkEvaluateList, tResultWorkEvaluateDetailEngineerVOS);
+
+            // 项目检测项评定
+            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO9 = new TResultWorkEvaluateDetailEngineerVO();
+            List<TQaTestItem> list5 = qaTestItemService.lambdaQuery()
+                    .eq(TQaTestItem::getStatus,3).eq(TQaTestItem::getCommitPersonId, sysUser.getUserId()).list();
+            if (!list5.isEmpty()){
+                tResultWorkEvaluateDetailEngineerVO9.setStartTime(list5.get(0).getEvaluateTime());
+                tResultWorkEvaluateDetailEngineerVO9.setEndTime(list5.get(list5.size() - 1).getCreateTime());
+            }
+            int tempDetail9 = 0;
+            for (TQaTestItem tQaTestItem : list5) {
+                if (StringUtils.hasLength(tQaTestItem.getEvaluateScore())){
+                    for (String s : tQaTestItem.getEvaluateScore().split(",")){
+                        tempDetail9 += Integer.parseInt(s);
+                    }
+                }
+            }
+            tResultWorkEvaluateDetailEngineerVO9.setCount(list5.size());
+            tResultWorkEvaluateDetailEngineerVO9.setIntegral(tempDetail9);
+            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO9);
+            // 中试、生产验证试验检验分析报告评定
+            List<TQaProduceReport> list = qaProduceReportService.lambdaQuery()
+                    .eq(TQaProduceReport::getStatus,3).eq(TQaProduceReport::getCommitPersonId, sysUser.getUserId()).list();
+            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO5 = new TResultWorkEvaluateDetailEngineerVO();
+            List<TQaProduceReport> collect3 = list.stream().filter(e -> e.getReportType() == 1).collect(Collectors.toList());
+            if (!collect3.isEmpty()) {
+                tResultWorkEvaluateDetailEngineerVO5.setStartTime(collect3.get(0).getEvaluateTime());
+                tResultWorkEvaluateDetailEngineerVO5.setEndTime(collect3.get(collect3.size() - 1).getEvaluateTime());
+            }
+            int tempDetail5 = 0;
+            for (TQaProduceReport tQaProduceReport : collect3) {
+                if (StringUtils.hasLength(tQaProduceReport.getEvaluateScore())){
+                    for (String s : tQaProduceReport.getEvaluateScore().split(",")) {
+                        tempDetail5+=Integer.parseInt(s);
+                    }
+                }
+            }
+            tResultWorkEvaluateDetailEngineerVO5.setCount(collect3.size());
+            tResultWorkEvaluateDetailEngineerVO5.setIntegral(tempDetail5);
+            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO5);
+            // 辅料
+            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO6 = new TResultWorkEvaluateDetailEngineerVO();
+            List<TQaProduceReport> collect4 = list.stream().filter(e -> e.getReportType() == 2).collect(Collectors.toList());
+            if (!collect4.isEmpty()) {
+                tResultWorkEvaluateDetailEngineerVO6.setStartTime(collect4.get(0).getEvaluateTime());
+                tResultWorkEvaluateDetailEngineerVO6.setEndTime(collect4.get(collect4.size() - 1).getEvaluateTime());
+            }
+            int tempDetail6 = 0;
+            for (TQaProduceReport tQaProduceReport : collect4) {
+                if (StringUtils.hasLength(tQaProduceReport.getEvaluateScore())){
+                    for (String s : tQaProduceReport.getEvaluateScore().split(",")) {
+                        tempDetail6+=Integer.parseInt(s);
+                    }
+                }
+            }
+            tResultWorkEvaluateDetailEngineerVO6.setCount(collect4.size());
+            tResultWorkEvaluateDetailEngineerVO6.setIntegral(tempDetail6);
+            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO6);
+            // 产品
+            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO7 = new TResultWorkEvaluateDetailEngineerVO();
+            List<TQaProduceReport> collect9 = list.stream().filter(e -> e.getReportType() == 3).collect(Collectors.toList());
+            if (!collect9.isEmpty()) {
+                tResultWorkEvaluateDetailEngineerVO7.setStartTime(collect9.get(0).getEvaluateTime());
+                tResultWorkEvaluateDetailEngineerVO7.setEndTime(collect9.get(collect9.size() - 1).getEvaluateTime());
+            }
+            int tempDetail7 = 0;
+            for (TQaProduceReport tQaProduceReport : collect9) {
+                if (StringUtils.hasLength(tQaProduceReport.getEvaluateScore())){
+                    for (String s : tQaProduceReport.getEvaluateScore().split(",")) {
+                        tempDetail7+=Integer.parseInt(s);
+                    }
+                }
+            }
+            tResultWorkEvaluateDetailEngineerVO7.setCount(collect9.size());
+            tResultWorkEvaluateDetailEngineerVO7.setIntegral(tempDetail7);
+            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO7);
+
+            tResultWorkEvaluateDetailUserVO.setList(tResultWorkEvaluateDetailEngineerVOS);
+            tResultWorkEvaluateDetailUserVOS.add(tResultWorkEvaluateDetailUserVO);
+        }
+        tResultWorkEvaluateDetailVO.setChemistList(tResultWorkEvaluateDetailUserVOS);
+
+        return tResultWorkEvaluateDetailVO;
+    }
+
+    /**
+     * 获取实验员工作内容评定详情
+     */
+    public TResultWorkEvaluateDetailVO getTesterEvaluateDetail(String id) {
+        TResultWorkEvaluateDetailVO tResultWorkEvaluateDetailVO = new TResultWorkEvaluateDetailVO();
+        List<TResultWorkEvaluateDetailUserVO> tResultWorkEvaluateDetailUserVOS = new ArrayList<>();
+        TResultWorkEvaluate resultWorkEvaluate = tResultWorkEvaluateService.getById(id);
+        TProjectTeam projectTeam = projectTeamService.getById(resultWorkEvaluate.getTeamId());
+        tResultWorkEvaluateDetailVO.setStartTime(projectTeam.getCreateTime());
+        List<Long> role5 = projectTeamStaffService.lambdaQuery()
+                .eq(TProjectTeamStaff::getRoleType, 5).eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).list()
+                .stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
+        List<SysUser> user5 = new ArrayList<>();
+        SysUser sysUser1 = sysUserService.selectUserById(SecurityUtils.getLoginUser().getUserId());
+        if (sysUser1.getRoleType() == 4 || sysUser1.getRoleType() == 5) {
+            //只能查看自己的
+            user5.add(sysUser1);
+        } else {
+            for (Long l : role5) {
+                SysUser sysUser = sysUserService.selectUserById(l);
+                if (sysUser != null) {
+                    user5.add(sysUser);
+                }
+            }
+        }
+
+        for (SysUser sysUser : user5) {
+            List<TResultWorkEvaluateDetailEngineerVO> tResultWorkEvaluateDetailEngineerVOS = new ArrayList<>();
+            TResultWorkEvaluateDetailUserVO tResultWorkEvaluateDetailUserVO = new TResultWorkEvaluateDetailUserVO();
+            tResultWorkEvaluateDetailUserVO.setUserName(sysUser.getNickName());
+            // 开发阶段
+
+            //查询当前team的实验结果评定 集合
+            List<TResultWorkEvaluate> tResultWorkEvaluateList = tResultWorkEvaluateService.lambdaQuery()
+                    .eq(TResultWorkEvaluate::getUserId, sysUser.getUserId())
+                    .eq(TResultWorkEvaluate::getTeamId, projectTeam.getId())
+                    .eq(TResultWorkEvaluate::getEvaluateType, 1)//工艺工程师
+                    .eq(TResultWorkEvaluate::getDisabled, 0)//未删除
+                    .orderByAsc(TResultWorkEvaluate::getEvaluateTime)
+                    .list();
+
+            getThreeScope(tResultWorkEvaluateList, tResultWorkEvaluateDetailEngineerVOS);
+
+            // 其他任务
+            List<TTesterOtherTask> list = tTesterOtherTaskService.lambdaQuery().eq(TTesterOtherTask::getTesterId, sysUser.getUserId()).list();
+            TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO5 = new TResultWorkEvaluateDetailEngineerVO();
+            tResultWorkEvaluateDetailEngineerVO5.setCount(list.size());
+            if (!list.isEmpty()) {
+                tResultWorkEvaluateDetailEngineerVO5.setStartTime(list.get(0).getCreateTime());
+                tResultWorkEvaluateDetailEngineerVO5.setEndTime(list.get(list.size() - 1).getCreateTime());
+
+            }
+            int temp = 0;
+            for (TTesterOtherTask tTesterOtherTask : list) {
+                temp += tTesterOtherTask.getEvaluateScore();
+            }
+            tResultWorkEvaluateDetailEngineerVO5.setIntegral(temp);
+            tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO5);
+            tResultWorkEvaluateDetailUserVO.setList(tResultWorkEvaluateDetailEngineerVOS);
+            tResultWorkEvaluateDetailUserVOS.add(tResultWorkEvaluateDetailUserVO);
+        }
+        tResultWorkEvaluateDetailVO.setTesterList(tResultWorkEvaluateDetailUserVOS);
+
+        return tResultWorkEvaluateDetailVO;
+    }
+
+    /**
+     *  项目实验室开发阶段、项目中试试验阶段、项目生产验证试验阶段
+     *
+     * @param tResultWorkEvaluateList
+     * @param tResultWorkEvaluateDetailEngineerVOS
+     */
+//    public void getThreeScope(List<TResultWorkEvaluate> tResultWorkEvaluateList, List<TResultWorkEvaluateDetailEngineerVO> tResultWorkEvaluateDetailEngineerVOS) {
+//        for (TResultWorkEvaluate tResultWorkEvaluate : tResultWorkEvaluateList) {
+//            String dispatchId = tResultWorkEvaluate.getDispatchId();//调度id
+//
+//            String resultEvaluateJson = tResultWorkEvaluate.getResultEvaluateJson();//评定分数JSON
+//            ObjectMapper objectMapper = new ObjectMapper();
+//
+//            int tempDetail2 = 0;//分数统计
+//            try {
+//                List<EvaluateResult> evaluateList = objectMapper.readValue(
+//                        resultEvaluateJson,
+//                        new TypeReference<List<EvaluateResult>>() {}
+//                );
+//
+//                tempDetail2 = Optional.ofNullable(evaluateList)
+//                        .orElse(Collections.emptyList())
+//                        .stream()
+//                        .mapToInt(EvaluateResult::getScore)
+//                        .sum();
+//
+//            } catch (Exception e) {
+//                throw new ServiceException("分数解析失败");
+//            }
+//
+//            TExperimentDispatch tExperimentDispatch = tExperimentDispatchService.getById(dispatchId);//实验调度
+//            if (tExperimentDispatch == null) {
+//                continue;
+//            }
+//
+//            TProjectProposal tProjectProposal = tProjectProposalService.getById(tExperimentDispatch.getProposalId());//项目课题方案
+//            switch (tProjectProposal.getProjectStage()){
+//                case 1://实验室开发阶段
+//                    // 开发阶段
+//                    TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO2 = new TResultWorkEvaluateDetailEngineerVO();
+//
+//                    if (!tResultWorkEvaluateList.isEmpty()) {
+//                        tResultWorkEvaluateDetailEngineerVO2.setStartTime(tResultWorkEvaluateList.get(0).getEvaluateTime());
+//                        tResultWorkEvaluateDetailEngineerVO2.setEndTime(tResultWorkEvaluateList.get(tResultWorkEvaluateList.size()-1).getEvaluateTime());
+//                    }
+//
+//                    tResultWorkEvaluateDetailEngineerVO2.setCount(tResultWorkEvaluateList.size());
+//                    tResultWorkEvaluateDetailEngineerVO2.setIntegral(tempDetail2);//分数
+//                    tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO2);
+//                    break;
+//                case 2://中式试验阶段
+//                    TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO3 = new TResultWorkEvaluateDetailEngineerVO();
+//
+//                    if (!tResultWorkEvaluateList.isEmpty()) {
+//                        tResultWorkEvaluateDetailEngineerVO3.setStartTime(tResultWorkEvaluateList.get(0).getEvaluateTime());
+//                        tResultWorkEvaluateDetailEngineerVO3.setEndTime(tResultWorkEvaluateList.get(tResultWorkEvaluateList.size()-1).getEvaluateTime());
+//                    }
+//                    tResultWorkEvaluateDetailEngineerVO3.setCount(tResultWorkEvaluateList.size());
+//                    tResultWorkEvaluateDetailEngineerVO3.setIntegral(tempDetail2);
+//                    tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO3);
+//                    break;
+//                case 3://生产验证试验阶段
+//                    TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO4 = new TResultWorkEvaluateDetailEngineerVO();
+//
+//                    if (!tResultWorkEvaluateList.isEmpty()) {
+//                        tResultWorkEvaluateDetailEngineerVO4.setStartTime(tResultWorkEvaluateList.get(0).getEvaluateTime());
+//                        tResultWorkEvaluateDetailEngineerVO4.setEndTime(tResultWorkEvaluateList.get(tResultWorkEvaluateList.size() - 1).getEvaluateTime());
+//                    }
+//                    tResultWorkEvaluateDetailEngineerVO4.setCount(tResultWorkEvaluateList.size());
+//                    tResultWorkEvaluateDetailEngineerVO4.setIntegral(tempDetail2);
+//                    tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO4);
+//                    break;
+//                default:
+//                    break;
+//            }
+//        }
+//    }
+    public void getThreeScope(List<TResultWorkEvaluate> tResultWorkEvaluateList,
+                              List<TResultWorkEvaluateDetailEngineerVO> tResultWorkEvaluateDetailEngineerVOS) {
+        if (tResultWorkEvaluateList == null || tResultWorkEvaluateList.isEmpty()) {
+            return;
+        }
+
+        ObjectMapper objectMapper = new ObjectMapper();
+
+        // 使用Map按阶段分组
+        Map<Integer, StageAggregation> stageMap = new HashMap<>();
+
+        for (TResultWorkEvaluate tResultWorkEvaluate : tResultWorkEvaluateList) {
+            String dispatchId = tResultWorkEvaluate.getDispatchId();
+            String resultEvaluateJson = tResultWorkEvaluate.getResultEvaluateJson();
+
+            // 解析分数
+            int tempDetail2 = 0;
+            try {
+                List<EvaluateResult> evaluateList = objectMapper.readValue(
+                        resultEvaluateJson,
+                        new TypeReference<List<EvaluateResult>>() {}
+                );
+                tempDetail2 = Optional.ofNullable(evaluateList)
+                        .orElse(Collections.emptyList())
+                        .stream()
+                        .mapToInt(EvaluateResult::getScore)
+                        .sum();
+            } catch (Exception e) {
+                throw new ServiceException("分数解析失败");
+            }
+
+            // 获取阶段
+            TExperimentDispatch tExperimentDispatch = tExperimentDispatchService.getById(dispatchId);
+            if (tExperimentDispatch == null || tExperimentDispatch.getStatus() != 2 || tExperimentDispatch.getDisabled()) {
+                //未确认   删除
+                continue;
+            }
+            TProjectProposal tProjectProposal = tProjectProposalService.getById(tExperimentDispatch.getProposalId());
+            if (tProjectProposal == null || tProjectProposal.getDisabled() || tProjectProposal.getAuditStatus() != 2) {
+                continue;
+            }
+
+            Integer stage = tProjectProposal.getProjectStage();
+            if (stage == null || (stage < 1 || stage > 3)) {
+                continue;
+            }
+
+            // 累加积分
+            StageAggregation aggregation = stageMap.get(stage);
+            if (aggregation == null) {
+                aggregation = new StageAggregation();
+                aggregation.stage = stage;
+                aggregation.totalScore = tempDetail2;
+                aggregation.count = 1;
+                aggregation.firstEvaluateTime = tResultWorkEvaluate.getEvaluateTime();
+                aggregation.lastEvaluateTime = tResultWorkEvaluate.getEvaluateTime();
+                stageMap.put(stage, aggregation);
+            } else {
+                aggregation.totalScore += tempDetail2;
+                aggregation.count++;
+                // 更新时间范围
+                if (tResultWorkEvaluate.getEvaluateTime() != null) {
+                    if (aggregation.firstEvaluateTime == null ||
+                            tResultWorkEvaluate.getEvaluateTime().isBefore(aggregation.firstEvaluateTime)) {
+                        aggregation.firstEvaluateTime = tResultWorkEvaluate.getEvaluateTime();
+                    }
+                    if (aggregation.lastEvaluateTime == null ||
+                            tResultWorkEvaluate.getEvaluateTime().isAfter(aggregation.lastEvaluateTime)) {
+                        aggregation.lastEvaluateTime = tResultWorkEvaluate.getEvaluateTime();
+                    }
+                }
+            }
+        }
+
+        // 清空原有的 EngineerList 中关于三阶段的数据(保留前6项,因为前6项是固定报告类型)
+        // 注意:这里假设前6项是:工艺可研、工艺可行、工艺开发工具、验证与发布、立项报告、临床试验积分
+        // 如果原来的列表中有三阶段的数据,需要先移除
+        if (tResultWorkEvaluateDetailEngineerVOS.size() > 6) {
+            // 移除索引6及之后的所有元素(即三阶段的数据)
+            tResultWorkEvaluateDetailEngineerVOS.subList(6, tResultWorkEvaluateDetailEngineerVOS.size()).clear();
+        }
+
+        // 按阶段顺序添加:1-实验室开发阶段,2-中式试验阶段,3-生产验证试验阶段
+        for (int stage = 1; stage <= 3; stage++) {
+            StageAggregation aggregation = stageMap.get(stage);
+            TResultWorkEvaluateDetailEngineerVO vo = new TResultWorkEvaluateDetailEngineerVO();
+
+            if (aggregation != null) {
+                vo.setCount(aggregation.count);
+                vo.setIntegral(aggregation.totalScore);
+                vo.setStartTime(aggregation.firstEvaluateTime);
+                vo.setEndTime(aggregation.lastEvaluateTime);
+            } else {
+                // 没有数据时设置默认值
+                vo.setCount(0);
+                vo.setIntegral(0);
+            }
+            tResultWorkEvaluateDetailEngineerVOS.add(vo);
+        }
+    }
+
+    // 内部类用于聚合
+    private static class StageAggregation {
+        Integer stage;
+        int totalScore;
+        int count;
+        LocalDateTime firstEvaluateTime;
+        LocalDateTime lastEvaluateTime;
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ResultEvaluateChemistTesterVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ResultEvaluateChemistTesterVO.java
index bacf06c..ab8ee70 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ResultEvaluateChemistTesterVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ResultEvaluateChemistTesterVO.java
@@ -21,7 +21,8 @@
 
     @ApiModelProperty(value = "实验id")
     private String dispatchId;
-
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案名称")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TClinicalTrialPointsVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TClinicalTrialPointsVO.java
index 64d7410..1e0e2f4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TClinicalTrialPointsVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TClinicalTrialPointsVO.java
@@ -20,4 +20,7 @@
     private Double totalScore;
     @ApiModelProperty(value = "项目组名称")
     private String teamName;
+
+    @ApiModelProperty(value = "被评工艺工程师")
+    private String processEngineerName;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TExperimentResultReportVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TExperimentResultReportVO.java
index 237ec3f..41006e0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TExperimentResultReportVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TExperimentResultReportVO.java
@@ -21,6 +21,8 @@
     private List<TExperimentDispatchParticipants> experimentDispatchParticipants;
     @ApiModelProperty(value = "实验调度")
     private TExperimentDispatchVO experimentDispatchVO;
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TExperimentSchemeVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TExperimentSchemeVO.java
index cb9e465..63e2a5f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TExperimentSchemeVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TExperimentSchemeVO.java
@@ -13,6 +13,8 @@
 @Data
 @ApiModel(value = "实验方案管理VO", description = "实验方案管理VO")
 public class TExperimentSchemeVO extends TExperimentScheme {
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TInspectionReportVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TInspectionReportVO.java
index ca24d33..d8b6bf6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TInspectionReportVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TInspectionReportVO.java
@@ -9,6 +9,8 @@
 @Data
 @ApiModel(value = "检验报告VO")
 public class TInspectionReportVO extends TInspectionReport {
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
     @ApiModelProperty(value = "实验编号")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TResultWorkEvaluateDetailUserVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TResultWorkEvaluateDetailUserVO.java
index 547b4cf..31a6861 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TResultWorkEvaluateDetailUserVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TResultWorkEvaluateDetailUserVO.java
@@ -18,4 +18,6 @@
     @ApiModelProperty(value = "内容评定列表")
     private List<TResultWorkEvaluateDetailEngineerVO> list;
 
+    private Integer teamIntegral;
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TResultWorkEvaluateVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TResultWorkEvaluateVO.java
index 99bf70f..c8ef77e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TResultWorkEvaluateVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TResultWorkEvaluateVO.java
@@ -40,6 +40,8 @@
     private String testerName;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "实验调度对象")
     private TExperimentDispatch experimentDispatch;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSamplingRecordVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSamplingRecordVO.java
index cc0ea56..86a7ad4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSamplingRecordVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSamplingRecordVO.java
@@ -12,6 +12,8 @@
 @Data
 @ApiModel(value = "取样记录VO")
 public class TSamplingRecordVO extends TSamplingRecord {
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TTestMethodConfirmSheetOriginalVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TTestMethodConfirmSheetOriginalVO.java
index 9eb69f2..74fdd59 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TTestMethodConfirmSheetOriginalVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TTestMethodConfirmSheetOriginalVO.java
@@ -13,6 +13,8 @@
 @ApiModel(value = "原始检验记录返回VO", description = "原始检验记录")
 public class TTestMethodConfirmSheetOriginalVO extends TTestMethodConfirmSheetOriginal {
 
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TTestMethodConfirmSheetVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TTestMethodConfirmSheetVO.java
index 41ddc6d..660a2dc 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TTestMethodConfirmSheetVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TTestMethodConfirmSheetVO.java
@@ -20,6 +20,9 @@
     @ApiModelProperty(value = "项目课题方案")
     private String projectName;
 
+    @ApiModelProperty(value = "项目课题方案编号")
+    private String projectCode;
+
     @ApiModelProperty(value = "实验名称")
     private String experimentName;
 
diff --git a/ruoyi-system/src/main/resources/mapper/system/TExperimentDispatchMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TExperimentDispatchMapper.xml
index 7aa9ba6..7bcb007 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TExperimentDispatchMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TExperimentDispatchMapper.xml
@@ -28,12 +28,15 @@
         SELECT
         ted.id, ted.proposal_id, ted.experiment_date, ted.experiment_name, ted.experiment_code, ted.experiment_start_time,
         ted.experiment_end_time, ted.key_nodes, ted.status, ted.create_time, ted.update_time, ted.create_by, ted.update_by,
-        ted.disabled,tpp.project_name as projectName
+        ted.disabled,tpp.project_name as projectName,tpp.project_code as projectCode
         from t_experiment_dispatch ted
         left join t_project_proposal tpp on ted.proposal_id = tpp.id
         <where>
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%',#{query.projectName},'%')
+            </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
             </if>
             <if test="query.experimentCode != null and query.experimentCode != ''">
                 and ted.experiment_code like concat('%',#{query.experimentCode},'%')
@@ -67,13 +70,16 @@
         SELECT
         ted.id, ted.proposal_id, ted.experiment_date, ted.experiment_name, ted.experiment_code, ted.experiment_start_time,
         ted.experiment_end_time, ted.key_nodes, ted.status, ted.create_time, ted.update_time, ted.create_by, ted.update_by,
-        ted.disabled,tpp.project_name as projectName
+        ted.disabled,tpp.project_name as projectName,tpp.project_code AS projectCode
         from t_experiment_dispatch ted
         left join t_project_proposal tpp on ted.proposal_id = tpp.id
         <where>
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%',#{query.projectName},'%')
             </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
+            </if>
             <if test="query.experimentCode != null and query.experimentCode != ''">
                 and ted.experiment_code like concat('%',#{query.experimentCode},'%')
             </if>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TExperimentResultReportMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TExperimentResultReportMapper.xml
index 2734046..2cad2ee 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TExperimentResultReportMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TExperimentResultReportMapper.xml
@@ -33,7 +33,7 @@
         select terr.id, terr.dispatch_id, terr.experiment_result, terr.status, terr.evaluate_one, terr.evaluate_two, terr.evaluate_three,
                terr.evaluate_four, terr.evaluate_five, terr.evaluate_six, terr.evaluate_person_id, terr.evaluate_time, terr.old_status,
                terr.reject_remark,terr.create_time,
-               terr.update_time, terr.create_by, terr.update_by, terr.disabled, tpp.project_name AS projectName,
+               terr.update_time, terr.create_by, terr.update_by, terr.disabled, tpp.project_name AS projectName,tpp.project_code AS projectCode,
                ted.experiment_code AS experimentCode, ted.experiment_name AS experimentName
         from t_experiment_result_report terr
         left join t_experiment_dispatch ted on terr.dispatch_id = ted.id
@@ -41,6 +41,9 @@
         <where>
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%', #{query.projectName}, '%')
+            </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
             </if>
             <if test="query.experimentCode != null and query.experimentCode != ''">
                 and ted.experiment_code like concat('%', #{query.experimentCode}, '%')
@@ -74,7 +77,7 @@
         select terr.id, terr.dispatch_id, terr.experiment_result, terr.status, terr.evaluate_one, terr.evaluate_two, terr.evaluate_three,
         terr.evaluate_four, terr.evaluate_five, terr.evaluate_six, terr.evaluate_person_id, terr.evaluate_time, terr.old_status,
         terr.reject_remark,terr.create_time,
-        terr.update_time, terr.create_by, terr.update_by, terr.disabled, tpp.project_name AS projectName,
+        terr.update_time, terr.create_by, terr.update_by, terr.disabled, tpp.project_name AS projectName,tpp.project_code AS projectCode,
         ted.experiment_code AS experimentCode, ted.experiment_name AS experimentName
         from t_experiment_result_report terr
         left join t_experiment_dispatch ted on terr.dispatch_id = ted.id
diff --git a/ruoyi-system/src/main/resources/mapper/system/TExperimentSchemeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TExperimentSchemeMapper.xml
index 46085cc..6d1da00 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TExperimentSchemeMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TExperimentSchemeMapper.xml
@@ -41,7 +41,7 @@
         tes.experiment_material, tes.experiment_device, tes.experiment_step_record, tes.stop_reason, tes.stop_file,tes.stop_file_name,
         tes.commit_sign, tes.status, tes.audit_person_id, tes.audit_time, tes.audit_remark, tes.create_time, tes.update_time,
         tes.create_by, tes.update_by, tes.disabled,tes.new_experiment_material,tes.new_experiment_device,tes.new_experiment_step_record,
-        tpp.project_name as projectName,ted.experiment_code as experimentCode,
+        tpp.project_name as projectName,tpp.project_code as projectCode,ted.experiment_code as experimentCode,
         ted.experiment_name as experimentName
         from t_experiment_scheme tes
         left join t_experiment_dispatch ted on tes.dispatch_id = ted.id
@@ -52,6 +52,9 @@
             </if>
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%', #{query.projectName}, '%')
+            </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
             </if>
             <if test="query.experimentCode != null and query.experimentCode != ''">
                 and ted.experiment_code like concat('%', #{query.experimentCode}, '%')
@@ -86,7 +89,7 @@
         tes.experiment_material, tes.experiment_device, tes.experiment_step_record, tes.stop_reason, tes.stop_file,tes.stop_file_name,
         tes.commit_sign, tes.status, tes.audit_person_id, tes.audit_time, tes.audit_remark, tes.create_time, tes.update_time,
         tes.create_by, tes.update_by, tes.disabled,tes.new_experiment_material,tes.new_experiment_device,tes.new_experiment_step_record,
-        tpp.project_name as projectName,ted.experiment_code as experimentCode,
+        tpp.project_name as projectName,tpp.project_code as projectCode,ted.experiment_code as experimentCode,
         ted.experiment_name as experimentName
         from t_experiment_scheme tes
         left join t_experiment_dispatch ted on tes.dispatch_id = ted.id
@@ -97,6 +100,9 @@
             </if>
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%', #{query.projectName}, '%')
+            </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
             </if>
             <if test="query.experimentCode != null and query.experimentCode != ''">
                 and ted.experiment_code like concat('%', #{query.experimentCode}, '%')
@@ -120,7 +126,7 @@
                tes.experiment_material, tes.experiment_device, tes.experiment_step_record, tes.stop_reason, tes.stop_file,tes.stop_file_name,
                tes.commit_sign, tes.status, tes.audit_person_id, tes.audit_time, tes.audit_remark, tes.create_time, tes.update_time,
                tes.create_by, tes.update_by, tes.disabled,tes.new_experiment_material,tes.new_experiment_device,tes.new_experiment_step_record,
-               tpp.project_name as projectName,ted.experiment_code as experimentCode,
+               tpp.project_name as projectName,tpp.project_code AS projectCode,ted.experiment_code as experimentCode,
                ted.experiment_name as experimentName
         from t_experiment_scheme tes
                  left join t_experiment_dispatch ted on tes.dispatch_id = ted.id
diff --git a/ruoyi-system/src/main/resources/mapper/system/TInspectionReportMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TInspectionReportMapper.xml
index cc080ee..42dde71 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TInspectionReportMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TInspectionReportMapper.xml
@@ -25,7 +25,7 @@
         select tir.id, tir.dispatch_id, tir.test_result, tir.test_reason, tir.status, tir.create_time,
         tir.update_time, tir.create_by, tir.update_by, tir.disabled, tir.commit_user_id,
         ted.experiment_name, ted.experiment_code,
-        tpp.project_name
+        tpp.project_name,tpp.project_code
         from t_inspection_report tir
         left join t_experiment_dispatch ted on ted.id = tir.dispatch_id
         left join t_project_proposal tpp on ted.proposal_id = tpp.id
@@ -33,6 +33,9 @@
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%', #{query.projectName}, '%')
             </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
+            </if>
             <if test="query.experimentName != null and query.experimentName != ''">
                 and ted.experiment_name like concat('%', #{query.experimentName}, '%')
             </if>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TResultWorkEvaluateMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TResultWorkEvaluateMapper.xml
index 9d3ebd0..7b19c97 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TResultWorkEvaluateMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TResultWorkEvaluateMapper.xml
@@ -60,7 +60,7 @@
         select trwe.id, trwe.dispatch_id, trwe.user_id, trwe.result_report_id,trwe.evaluate_type, trwe.evaluate_one,
                trwe.evaluate_two, trwe.evaluate_three, trwe.evaluate_four, trwe.evaluate_five, trwe.evaluate_six,
                trwe.status, trwe.evaluate_person_id, trwe.evaluate_time,trwe.result_evaluate_json,trwe.team_id, trwe.create_time,
-               trwe.update_time, trwe.create_by, trwe.update_by, trwe.disabled, tpp.project_name as projectName,
+               trwe.update_time, trwe.create_by, trwe.update_by, trwe.disabled, tpp.project_name as projectName,tpp.project_code AS projectCode,
                ted.experiment_code as experimentCode,ted.experiment_name as experimentName
         from t_result_work_evaluate trwe
         left join t_experiment_dispatch ted on trwe.dispatch_id = ted.id
@@ -71,6 +71,9 @@
             </if>
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%',#{query.projectName},'%')
+            </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
             </if>
             <if test="query.experimentCode != null and query.experimentCode != ''">
                 and ted.experiment_code like concat('%',#{query.experimentCode},'%')
@@ -102,7 +105,7 @@
         select trwe.id, trwe.dispatch_id, trwe.user_id, trwe.result_report_id,trwe.evaluate_type, trwe.evaluate_one,
                trwe.evaluate_two, trwe.evaluate_three, trwe.evaluate_four, trwe.evaluate_five, trwe.evaluate_six,
                trwe.status, trwe.evaluate_person_id, trwe.evaluate_time,trwe.result_evaluate_json,trwe.team_id, trwe.create_time,
-               trwe.update_time, trwe.create_by, trwe.update_by, trwe.disabled, tpp.project_name as projectName,
+               trwe.update_time, trwe.create_by, trwe.update_by, trwe.disabled, tpp.project_name as projectName,tpp.project_code AS projectCode,
                ted.experiment_code as experimentCode,ted.experiment_name as experimentName
         from t_result_work_evaluate trwe
         left join t_experiment_dispatch ted on trwe.dispatch_id = ted.id
@@ -139,7 +142,7 @@
     </select>
     <select id="getEvaluateChemistPageList" resultType="com.ruoyi.system.vo.ResultEvaluateChemistTesterVO">
         select trwe.evaluate_time,CASE WHEN trwe.id IS NOT NULL THEN 1 ELSE 0 END AS isEvaluate,trwe.id,
-        tedp.id AS participantsId,tpp.project_name AS projectName,tpp.project_stage AS projectStage,
+        tedp.id AS participantsId,tpp.project_name AS projectName,tpp.project_code AS projectCode,tpp.project_stage AS projectStage,
         ted.experiment_code AS experimentCode,ted.experiment_name AS experimentName,su.nick_name AS laboratoryChemistName,
         tedp.dispatch_id AS dispatchId,trwe.result_evaluate_json AS resultEvaluateJson
         from t_experiment_dispatch_participants tedp
@@ -156,6 +159,9 @@
             </if>
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%',#{query.projectName},'%')
+            </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
             </if>
             <if test="query.userId != null">
                 and tedp.user_id = #{query.userId}
@@ -175,7 +181,7 @@
     </select>
     <select id="getEvaluateTesterPageList" resultType="com.ruoyi.system.vo.ResultEvaluateChemistTesterVO">
         select trwe.evaluate_time,CASE WHEN trwe.id IS NOT NULL THEN 1 ELSE 0 END AS isEvaluate,trwe.id,
-        tedp.id AS participantsId,tpp.project_name AS projectName,tpp.project_stage AS projectStage,
+        tedp.id AS participantsId,tpp.project_name AS projectName,tpp.project_code AS projectCode,tpp.project_stage AS projectStage,
         ted.experiment_code AS experimentCode,ted.experiment_name AS experimentName,su.nick_name AS laboratoryTesterName,
         tedp.dispatch_id AS dispatchId,trwe.result_evaluate_json AS resultEvaluateJson
         from t_experiment_dispatch_participants tedp
@@ -193,6 +199,9 @@
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%',#{query.projectName},'%')
             </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
+            </if>
             <if test="query.userId != null">
                 and tedp.user_id = #{query.userId}
             </if>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TSamplingRecordMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSamplingRecordMapper.xml
index 8dc635f..19dc42e 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TSamplingRecordMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TSamplingRecordMapper.xml
@@ -24,7 +24,7 @@
         select
             tsr.id, tsr.dispatch_id, tsr.sampling_code, tsr.remark, tsr.status, tsr.create_time, tsr.update_time,
             tsr.create_by, tsr.update_by, tsr.disabled, ted.experiment_code AS experimentCode,ted.experiment_name AS experimentName,
-            tpp.project_name AS projectName
+            tpp.project_name AS projectName,tpp.project_code as projectCode
         from t_sampling_record tsr
         left join t_experiment_dispatch ted on ted.id = tsr.dispatch_id
         left join t_project_proposal tpp on ted.proposal_id = tpp.id
@@ -32,6 +32,9 @@
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%', #{query.projectName}, '%')
             </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
+            </if>
             <if test="query.experimentName != null and query.experimentName != ''">
                 and ted.experiment_name like concat('%', #{query.experimentName}, '%')
             </if>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetMapper.xml
index 66b7445..0be8185 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetMapper.xml
@@ -27,7 +27,7 @@
     <select id="pageList" resultType="com.ruoyi.system.vo.TTestMethodConfirmSheetVO">
         select tmcs.id, tmcs.dispatch_id,tmcs.commit_user_id, tmcs.confirm_sign, tmcs.sign_time, tmcs.audit_status, tmcs.audit_person_id,
                tmcs.audit_sign, tmcs.audit_time, tmcs.create_time, tmcs.update_time, tmcs.create_by, tmcs.update_by, tmcs.disabled,
-               tpp.project_name AS projectName, ted.experiment_name AS experimentName, ted.experiment_code AS experimentCode
+               tpp.project_name AS projectName,tpp.project_code AS projectCode, ted.experiment_name AS experimentName, ted.experiment_code AS experimentCode
         from t_test_method_confirm_sheet tmcs
         left join t_experiment_dispatch ted on tmcs.dispatch_id = ted.id
         left join t_project_proposal tpp on ted.proposal_id = tpp.id
@@ -35,6 +35,9 @@
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%', #{query.projectName}, '%')
             </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
+            </if>
             <if test="query.experimentName != null and query.experimentName != ''">
                 and ted.experiment_name like concat('%', #{query.experimentName}, '%')
             </if>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetOriginalMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetOriginalMapper.xml
index f0da533..2623e24 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetOriginalMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetOriginalMapper.xml
@@ -30,7 +30,7 @@
         select ttmcso.id, ttmcso.term_id, ttmcso.original_code, ttmcso.term_standard, ttmcso.term_instrument, ttmcso.term_reagent,
                ttmcso.term_step, ttmcso.term_result, ttmcso.status, ttmcso.create_time, ttmcso.update_time, ttmcso.create_by,
                ttmcso.update_by, ttmcso.disabled,ttmcso.commit_user_id,
-               tpp.project_name AS projectName,ted.experiment_code AS experimentCode,
+               tpp.project_name AS projectName,tpp.project_code AS projectCode,ted.experiment_code AS experimentCode,
                ted.experiment_name AS experimentName,ttmcst.term_name AS termName,ttmcst.term_code AS termCode
         from t_test_method_confirm_sheet_original ttmcso
         left join t_test_method_confirm_sheet_term ttmcst on ttmcso.term_id = ttmcst.id
@@ -40,6 +40,9 @@
         <where>
             <if test="query.projectName != null and query.projectName != ''">
                 and tpp.project_name like concat('%', #{query.projectName}, '%')
+            </if>
+            <if test="query.projectCode != null and query.projectCode != ''">
+                and tpp.project_code like concat('%',#{query.projectCode},'%')
             </if>
             <if test="query.experimentCode != null and query.experimentCode != ''">
                 and ted.experiment_code like concat('%', #{query.experimentCode}, '%')
@@ -74,7 +77,7 @@
         select ttmcso.id, ttmcso.term_id, ttmcso.original_code, ttmcso.term_standard, ttmcso.term_instrument, ttmcso.term_reagent,
         ttmcso.term_step, ttmcso.term_result, ttmcso.status, ttmcso.create_time, ttmcso.update_time, ttmcso.create_by,
         ttmcso.update_by, ttmcso.disabled,ttmcso.commit_user_id,
-        tpp.project_name AS projectName,ted.experiment_code AS experimentCode,
+        tpp.project_name AS projectName,tpp.project_code AS projectCode,ted.experiment_code AS experimentCode,
         ted.experiment_name AS experimentName,ttmcst.term_name AS termName,ttmcst.term_code AS termCode
         from t_test_method_confirm_sheet_original ttmcso
         left join t_test_method_confirm_sheet_term ttmcst on ttmcso.term_id = ttmcst.id

--
Gitblit v1.7.1