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