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;
|
}
|
}
|