package com.ruoyi.web.controller.api;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.BaseModel;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.TQaTestItemReportQuery;
import com.ruoyi.system.query.TResultWorkEvaluateQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
*
* 实验员工作评定 前端控制器
*
*
* @author xiaochen
* @since 2025-04-08
*/
@Api(tags = "实验员工作评定管理")
@RestController
@RequestMapping("/t-result-work-evaluate")
public class TResultWorkEvaluateController {
@Resource
private TResultWorkEvaluateService tResultWorkEvaluateService;
@Resource
private TokenService tokenService;
@Resource
private TFeasibilityStudyReportService feasibilityStudyReportService;
@Resource
private TExperimentResultReportService experimentResultReportService;
@Resource
private TProjectApprovalReportService projectApprovalReportService;
@Resource
private TExperimentDispatchService experimentDispatchService;
@Resource
private TClinicalTrialPointsService clinicalTrialPointsService;
@Resource
private TProjectProposalService projectProposalService;
private final TProjectTeamService projectTeamService;
private final TProjectTeamStaffService projectTeamStaffService;
private final ISysUserService sysUserService;
@Autowired
public TResultWorkEvaluateController(TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, ISysUserService sysUserService) {
this.projectTeamService = projectTeamService;
this.projectTeamStaffService = projectTeamStaffService;
this.sysUserService = sysUserService;
}
@ApiOperation(value = "实验员工作评定管理分页列表", response = TQaTestItemReportQuery.class)
@PostMapping(value = "/api/t-result-work-evaluate/pageList")
public R> pageList(@RequestBody String param) {
LoginUser loginUser = tokenService.getLoginUser();
TResultWorkEvaluateQuery query = JSON.parseObject(param, TResultWorkEvaluateQuery.class);
SysUser sysUser = sysUserService.selectUserById(loginUser.getUser().getUserId());
if (sysUser.getRoleType()!=1){
List collect = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, loginUser.getUser().getUserId()).list()
.stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
if (collect.isEmpty()){
return R.ok(new PageInfo<>());
}
}
return R.ok(tResultWorkEvaluateService.pageList(query));
}
/**
* 查看取样记录详情
*/
//@PreAuthorize("@ss.hasPermi('system:samplingRecord:detail')")
@ApiOperation(value = "查看详情")
@GetMapping(value = "/open/t-result-work-evaluate/getDetailById")
public R getDetailById(@RequestParam String id) {
TResultWorkEvaluateDetailVO tResultWorkEvaluateDetailVO = new TResultWorkEvaluateDetailVO();
TResultWorkEvaluate resultWorkEvaluate = tResultWorkEvaluateService.getById(id);
TProjectTeam projectTeam = projectTeamService.getById(resultWorkEvaluate.getTeamId());
tResultWorkEvaluateDetailVO.setStartTime(projectTeam.getCreateTime());
TProjectTeamStaff one = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getRoleType, 3).last("limit 1").one();
Long userId = one.getUserId();
List 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;
temp5++;
if (tResultWorkEvaluate.getEvaluateType()==1){
temp2-=3;
}
if (tResultWorkEvaluate.getEvaluateType()==2){
temp3-=3;
}
if (tResultWorkEvaluate.getEvaluateType()==3){
temp4-=3;
}
break;
}
}
tResultWorkEvaluateDetailVO.setTeamIntegral(temp1);
tResultWorkEvaluateDetailVO.setEngineerIntegral(temp2);
tResultWorkEvaluateDetailVO.setChemistIntegral(temp3);
tResultWorkEvaluateDetailVO.setTesterIntegral(temp4);
tResultWorkEvaluateDetailVO.setTermination(temp5);
if (!list.isEmpty()){
tResultWorkEvaluateDetailVO.setEndTime(list.get(0).getEvaluateTime());
}
List total = feasibilityStudyReportService.lambdaQuery()
.eq(TFeasibilityStudyReport::getStatus,3)
.eq(TFeasibilityStudyReport::getEvaluatePersonId, userId).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.setEndTime(collect1.get(collect1.size()-1).getEvaluateTime());
}
tResultWorkEvaluateDetailEngineerVO1.setStartTime(projectTeam.getCreateTime());
tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO1);
// 开发阶段
TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO2 = new TResultWorkEvaluateDetailEngineerVO();
List status = new ArrayList<>();
status.add(-1);
status.add(1);
status.add(3);
status.add(4);
status.add(5);
List list2 = projectProposalService.lambdaQuery().eq(TProjectProposal::getCommitUserId, userId)
.notIn(TProjectProposal::getAuditStatus, status).list();
List collect5 = list2.stream().filter(e -> e.getProjectStage().equals(1)).map(TProjectProposal::getId).collect(Collectors.toList());
if (collect5.isEmpty()){
collect5.add("0");
}
List collect6 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect5)
.ne(TExperimentDispatch::getStatus, -1)
.ne(TExperimentDispatch::getStatus, 1).list().stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
if (collect6.isEmpty()){
collect6.add("0");
}
List status1 = new ArrayList<>();
status1.add(-1);
status1.add(1);
status1.add(2);
status1.add(4);
List list1 = tResultWorkEvaluateService.lambdaQuery().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.setEndTime(list1.get(list1.size()-1).getEvaluateTime());
}
tResultWorkEvaluateDetailEngineerVO2.setStartTime(projectTeam.getCreateTime());
tResultWorkEvaluateDetailEngineerVO2.setCount(list1.size());
tResultWorkEvaluateDetailEngineerVO2.setIntegral(tempDetail2);
tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO2);
// 中试试验阶段
TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO3 = new TResultWorkEvaluateDetailEngineerVO();
List collect7 = list2.stream().filter(e -> e.getProjectStage().equals(2)).map(TProjectProposal::getId).collect(Collectors.toList());
if (collect7.isEmpty()){
collect7.add("0");
}
List collect8 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect7)
.ne(TExperimentDispatch::getStatus, -1)
.ne(TExperimentDispatch::getStatus, 1).list().stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
if (collect8.isEmpty()){
collect8.add("0");
}
List status2 = new ArrayList<>();
status2.add(-1);
status2.add(1);
status2.add(2);
status2.add(4);
List list3 = tResultWorkEvaluateService.lambdaQuery().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(list3.size());
tResultWorkEvaluateDetailEngineerVO3.setIntegral(tempDetail3);
tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO3);
// 验证试验阶段
TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO4 = new TResultWorkEvaluateDetailEngineerVO();
List collect10 = list2.stream().filter(e -> e.getProjectStage().equals(2)).map(TProjectProposal::getId).collect(Collectors.toList());
if (collect10.isEmpty()){
collect10.add("0");
}
List collect11 = experimentDispatchService.lambdaQuery().in(TExperimentDispatch::getProposalId, collect10)
.ne(TExperimentDispatch::getStatus, -1)
.ne(TExperimentDispatch::getStatus, 1).list().stream().map(TExperimentDispatch::getId).collect(Collectors.toList());
if (collect11.isEmpty()){
collect11.add("0");
}
List list4 = tResultWorkEvaluateService.lambdaQuery().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(list4.size());
tResultWorkEvaluateDetailEngineerVO4.setIntegral(tempDetail4);
tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO4);
// 工艺开发工具
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(3)).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.setEndTime(list5.get(list5.size()-1).getAuditTime());
}
tResultWorkEvaluateDetailEngineerVO7.setStartTime(projectTeam.getCreateTime());
tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO7);
// todo 临床试验积分
List list6 = clinicalTrialPointsService.lambdaQuery().eq(TClinicalTrialPoints::getTeamId, projectTeam.getId()).list();
TResultWorkEvaluateDetailEngineerVO tResultWorkEvaluateDetailEngineerVO8 = new TResultWorkEvaluateDetailEngineerVO();
tResultWorkEvaluateDetailEngineerVO8.setCount(list6.size());
if (!list6.isEmpty()){
tResultWorkEvaluateDetailEngineerVO8.setEndTime(list6.get(list6.size()-1).getCreateTime());
}
tResultWorkEvaluateDetailEngineerVO8.setStartTime(projectTeam.getCreateTime());
tResultWorkEvaluateDetailEngineerVOS.add(tResultWorkEvaluateDetailEngineerVO8);
tResultWorkEvaluateDetailVO.setEngineerList(tResultWorkEvaluateDetailEngineerVOS);
return R.ok(tResultWorkEvaluateDetailVO);
}
}