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(); tResultWorkEvaluateDetailVO.setStartTime(projectTeam.getCreateTime()); Long userId = projectTeamStaff.getUserId(); List total = feasibilityStudyReportService.lambdaQuery() .eq(TFeasibilityStudyReport::getStatus, 3) .eq(TFeasibilityStudyReport::getTeamId, projectTeam.getId()) .orderByAsc(TFeasibilityStudyReport::getEvaluateTime) .list(); List tResultWorkEvaluateDetailEngineerVOS = new ArrayList<>(); // 工艺可研 TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO = new TResultWorkEvaluateDetailEngineerVO(); List 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 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 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 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 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 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 list6 = clinicalTrialPointsService.lambdaQuery() .eq(TClinicalTrialPoints::getProcessEngineerId, userId) .eq(TClinicalTrialPoints::getTeamId, projectTeam.getId()) .orderByAsc(TClinicalTrialPoints::getCreateTime) .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.stream() .map(TClinicalTrialPoints::getEvaluateScore) .filter(Objects::nonNull) .mapToInt(Integer::intValue) .sum()); } tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO8); tResultWorkEvaluateDetailVO.setEngineerList(tResultWorkEvaluateDetailEngineerVOS); return tResultWorkEvaluateDetailVO; } /** * 获取化验师工作内容评定详情 */ public TResultWorkEvaluateDetailVO getChemistEvaluateDetail(String id) { TResultWorkEvaluateDetailVO tResultWorkEvaluateDetailVO = new TResultWorkEvaluateDetailVO(); List tResultWorkEvaluateDetailUserVOS = new ArrayList<>(); TResultWorkEvaluate resultWorkEvaluate = tResultWorkEvaluateService.getById(id); TProjectTeam projectTeam = projectTeamService.getById(resultWorkEvaluate.getTeamId()); tResultWorkEvaluateDetailVO.setStartTime(projectTeam.getCreateTime()); List role5 = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getRoleType, 4).eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).list() .stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList()); List 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 total = feasibilityStudyReportService.lambdaQuery() // .eq(TFeasibilityStudyReport::getStatus, 3) // .eq(TFeasibilityStudyReport::getTeamId, resultWorkEvaluate.getTeamId()).list(); for (SysUser sysUser : user5) { List tResultWorkEvaluateDetailEngineerVOS = new ArrayList<>(); TResultWorkEvaluateDetailUserVO tResultWorkEvaluateDetailUserVO = new TResultWorkEvaluateDetailUserVO(); tResultWorkEvaluateDetailUserVO.setUserName(sysUser.getNickName()); // 开发阶段 //查询当前team的实验结果评定 集合 List tResultWorkEvaluateList = tResultWorkEvaluateService.lambdaQuery() .eq(TResultWorkEvaluate::getUserId, sysUser.getUserId()) .eq(TResultWorkEvaluate::getTeamId, projectTeam.getId()) .eq(TResultWorkEvaluate::getEvaluateType, 2)//化验师 .eq(TResultWorkEvaluate::getDisabled, 0)//未删除 .orderByAsc(TResultWorkEvaluate::getEvaluateTime) .list(); getThreeScope(tResultWorkEvaluateList, tResultWorkEvaluateDetailEngineerVOS); // 项目检测项评定 TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO9 = new TResultWorkEvaluateDetailEngineerVO(); List list5 = qaTestItemService.lambdaQuery() .eq(TQaTestItem::getStatus,3) .eq(TQaTestItem::getTeamId, projectTeam.getId()) .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 list = qaProduceReportService.lambdaQuery() .eq(TQaProduceReport::getStatus,3) .eq(TQaProduceReport::getTeamId, projectTeam.getId()) .eq(TQaProduceReport::getCommitPersonId, sysUser.getUserId()).list(); TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO5 = new TResultWorkEvaluateDetailEngineerVO(); List 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 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 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 tResultWorkEvaluateDetailUserVOS = new ArrayList<>(); TResultWorkEvaluate resultWorkEvaluate = tResultWorkEvaluateService.getById(id); TProjectTeam projectTeam = projectTeamService.getById(resultWorkEvaluate.getTeamId()); tResultWorkEvaluateDetailVO.setStartTime(projectTeam.getCreateTime()); List role5 = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getRoleType, 5).eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).list() .stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList()); List 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 tResultWorkEvaluateDetailEngineerVOS = new ArrayList<>(); TResultWorkEvaluateDetailUserVO tResultWorkEvaluateDetailUserVO = new TResultWorkEvaluateDetailUserVO(); tResultWorkEvaluateDetailUserVO.setUserName(sysUser.getNickName()); // 开发阶段 //查询当前team的实验结果评定 集合 List tResultWorkEvaluateList = tResultWorkEvaluateService.lambdaQuery() .eq(TResultWorkEvaluate::getUserId, sysUser.getUserId()) .eq(TResultWorkEvaluate::getTeamId, projectTeam.getId()) .eq(TResultWorkEvaluate::getEvaluateType, 3)//实验员 .eq(TResultWorkEvaluate::getDisabled, 0)//未删除 .orderByAsc(TResultWorkEvaluate::getEvaluateTime) .list(); getThreeScope(tResultWorkEvaluateList, tResultWorkEvaluateDetailEngineerVOS); // 其他任务 List list = tTesterOtherTaskService.lambdaQuery() .eq(TTesterOtherTask::getTesterId, sysUser.getUserId()) .eq(TTesterOtherTask::getTeamId, projectTeam.getId()) .orderByAsc(TTesterOtherTask::getCreateTime) .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) { if (tTesterOtherTask.getEvaluateScore() != null) { 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 tResultWorkEvaluateList, List tResultWorkEvaluateDetailEngineerVOS) { // for (TResultWorkEvaluate tResultWorkEvaluate : tResultWorkEvaluateList) { // String dispatchId = tResultWorkEvaluate.getDispatchId();//调度id // // String resultEvaluateJson = tResultWorkEvaluate.getResultEvaluateJson();//评定分数JSON // ObjectMapper objectMapper = new ObjectMapper(); // // int tempDetail2 = 0;//分数统计 // try { // List evaluateList = objectMapper.readValue( // resultEvaluateJson, // new TypeReference>() {} // ); // // 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 tResultWorkEvaluateList, List tResultWorkEvaluateDetailEngineerVOS) { if (tResultWorkEvaluateList == null || tResultWorkEvaluateList.isEmpty()) { return; } ObjectMapper objectMapper = new ObjectMapper(); // 使用Map按阶段分组 Map stageMap = new HashMap<>(); for (TResultWorkEvaluate tResultWorkEvaluate : tResultWorkEvaluateList) { String dispatchId = tResultWorkEvaluate.getDispatchId(); String resultEvaluateJson = tResultWorkEvaluate.getResultEvaluateJson(); // 解析分数 int tempDetail2 = 0; try { List evaluateList = objectMapper.readValue( resultEvaluateJson, new TypeReference>() {} ); 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; } }