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.core.domain.entity.SysUser; import com.ruoyi.system.mapper.SysUserMapper; 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; /** *

* 实验员工作评定 服务实现类 *

* * @author xiaochen * @since 2025-04-08 */ @Service public class TTesterWorkEvaluateServiceImpl extends ServiceImpl implements TResultWorkEvaluateService { @Autowired 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 pageList(TResultWorkEvaluateQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); if(CollectionUtils.isEmpty(query.getTeamIds())){ return pageInfo; } List list = this.baseMapper.pageList(query,pageInfo); List tResultWorkEvaluates = this.baseMapper.selectList(new LambdaQueryWrapper() .orderByDesc(TResultWorkEvaluate::getEvaluateTime) .isNotNull(TResultWorkEvaluate::getTeamId)); for (TResultWorkEvaluateVO tResultWorkEvaluateVO : list) { String id = tResultWorkEvaluateVO.getId(); TResultWorkEvaluate resultWorkEvaluate = tResultWorkEvaluateService.getById(id); TProjectTeam projectTeam = projectTeamService.getById(resultWorkEvaluate.getTeamId()); tResultWorkEvaluateVO.setStartTime(projectTeam.getCreateTime()); List role4 = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getRoleType, 4).eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).list() .stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList()); List role5 = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getRoleType, 5).eq(TProjectTeamStaff::getTeamId, resultWorkEvaluate.getTeamId()).list() .stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList()); List user4 = new ArrayList<>(); List user5 = new ArrayList<>(); for (Long l : role4) { SysUser sysUser = sysUserService.selectUserById(l); if (sysUser != null) { user4.add(sysUser); } } 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; } @Override public PageInfo chemistEvaluateList(TResultWorkEvaluateQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); if(CollectionUtils.isEmpty(query.getTeamIds())){ return pageInfo; } List list = this.baseMapper.chemistEvaluateList(query,pageInfo); if(CollectionUtils.isEmpty(list)){ return pageInfo; } List userIds = list.stream().map(TResultWorkEvaluateVO::getUserId).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(userIds)){ List sysUsers = sysUserMapper.selectUserByIds(userIds); list.forEach(tResultWorkEvaluateVO -> { SysUser sysUser = sysUsers.stream().filter(user -> user.getUserId().equals(tResultWorkEvaluateVO.getUserId())).findFirst().orElse(null); if(sysUser != null){ tResultWorkEvaluateVO.setChemistName(sysUser.getNickName()); } }); } pageInfo.setRecords(list); return pageInfo; } @Override public PageInfo testerEvaluateList(TResultWorkEvaluateQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); if(CollectionUtils.isEmpty(query.getTeamIds())){ return pageInfo; } List list = this.baseMapper.testerEvaluateList(query,pageInfo); if(CollectionUtils.isEmpty(list)){ return pageInfo; } List userIds = list.stream().map(TResultWorkEvaluateVO::getUserId).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(userIds)){ List sysUsers = sysUserMapper.selectUserByIds(userIds); list.forEach(tResultWorkEvaluateVO -> { SysUser sysUser = sysUsers.stream().filter(user -> user.getUserId().equals(tResultWorkEvaluateVO.getUserId())).findFirst().orElse(null); if(sysUser != null){ tResultWorkEvaluateVO.setTesterName(sysUser.getNickName()); } }); } pageInfo.setRecords(list); return pageInfo; } @Override public PageInfo getEvaluateChemistPageList(ResultEvaluateChemistTesterQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = this.baseMapper.getEvaluateChemistPageList(query,pageInfo); if(!CollectionUtils.isEmpty(list)){ // 查询工艺工程师的名称 List dispatchIds = list.stream().map(ResultEvaluateChemistTesterVO::getDispatchId).collect(Collectors.toList()); List experimentDispatchParticipants = experimentDispatchParticipantsMapper.selectList(new LambdaQueryWrapper() .in(TExperimentDispatchParticipants::getDispatchId, dispatchIds) .eq(TExperimentDispatchParticipants::getRoleType, 3)); List userIds = experimentDispatchParticipants.stream().map(TExperimentDispatchParticipants::getUserId).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(userIds)){ List sysUsers = sysUserMapper.selectUserByIds(userIds); for (ResultEvaluateChemistTesterVO resultEvaluateChemistTesterVO : list) { TExperimentDispatchParticipants dispatchParticipants = experimentDispatchParticipants.stream().filter(experimentDispatchParticipant -> experimentDispatchParticipant.getDispatchId().equals(resultEvaluateChemistTesterVO.getDispatchId())).findFirst().orElse(null); if(Objects.nonNull(dispatchParticipants)){ sysUsers.stream().filter(sysUser -> sysUser.getUserId().equals(dispatchParticipants.getUserId())).findFirst().ifPresent(sysUser -> { resultEvaluateChemistTesterVO.setProcessEngineerName(sysUser.getNickName()); }); } } } } pageInfo.setRecords(list); return pageInfo; } @Override public PageInfo getEvaluateTesterPageList(ResultEvaluateChemistTesterQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = this.baseMapper.getEvaluateTesterPageList(query,pageInfo); if(!CollectionUtils.isEmpty(list)){ // 查询工艺工程师的名称 List dispatchIds = list.stream().map(ResultEvaluateChemistTesterVO::getDispatchId).collect(Collectors.toList()); List experimentDispatchParticipants = experimentDispatchParticipantsMapper.selectList(new LambdaQueryWrapper() .in(TExperimentDispatchParticipants::getDispatchId, dispatchIds) .eq(TExperimentDispatchParticipants::getRoleType, 3)); List userIds = experimentDispatchParticipants.stream().map(TExperimentDispatchParticipants::getUserId).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(userIds)){ List sysUsers = sysUserMapper.selectUserByIds(userIds); for (ResultEvaluateChemistTesterVO resultEvaluateChemistTesterVO : list) { TExperimentDispatchParticipants dispatchParticipants = experimentDispatchParticipants.stream().filter(experimentDispatchParticipant -> experimentDispatchParticipant.getDispatchId().equals(resultEvaluateChemistTesterVO.getDispatchId())).findFirst().orElse(null); if(Objects.nonNull(dispatchParticipants)){ sysUsers.stream().filter(sysUser -> sysUser.getUserId().equals(dispatchParticipants.getUserId())).findFirst().ifPresent(sysUser -> { resultEvaluateChemistTesterVO.setProcessEngineerName(sysUser.getNickName()); }); } } } } pageInfo.setRecords(list); return pageInfo; } }