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.common.utils.bean.BeanUtils;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.TProjectTeamMapper;
import com.ruoyi.system.mapper.TStrainReportDetailMapper;
import com.ruoyi.system.mapper.TStrainReportMapper;
import com.ruoyi.system.model.TProjectTeam;
import com.ruoyi.system.model.TStrainReport;
import com.ruoyi.system.model.TStrainReportDetail;
import com.ruoyi.system.model.TTrainLibrary;
import com.ruoyi.system.query.TProjectTeamQuery;
import com.ruoyi.system.query.TStrainReportProjectQuery;
import com.ruoyi.system.query.TStrainReportQuery;
import com.ruoyi.system.query.TTrainLibraryQuery;
import com.ruoyi.system.service.TStrainReportDetailService;
import com.ruoyi.system.service.TStrainReportService;
import com.ruoyi.system.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 菌种报告库 服务实现类
*
*
* @author 无关风月
* @since 2025-04-12
*/
@Service
public class TStrainReportServiceImpl extends ServiceImpl implements TStrainReportService {
@Resource
private TProjectTeamMapper projectTeamMapper;
@Resource
private TStrainReportDetailMapper strainReportDetailMapper;
@Resource
private SysUserMapper sysUserMapper;
@Override
public PageInfo pageList(TStrainReportQuery query) {
PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
List list = this.baseMapper.pageList(query,pageInfo);
pageInfo.setRecords(list);
return pageInfo;
}
@Override
public PageInfo pageListProject(TStrainReportProjectQuery query) {
PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
List list = this.baseMapper.pageListProject(query,pageInfo);
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().eq(TStrainReport::getStatus, 3);
List tStrainReports = this.baseMapper.selectList(
queryWrapper);
List tStrainReportDetails = strainReportDetailMapper.selectList(new LambdaQueryWrapper());
for (TStrainReportProjectVO tStrainReportProjectVO : list) {
List strainReports = tStrainReports.stream().filter(e -> e.getProjectId().equals(tStrainReportProjectVO.getProjectId())).collect(Collectors.toList());
BigDecimal sum = new BigDecimal("0");
BigDecimal sum1 = new BigDecimal("0");
BigDecimal sum2 = new BigDecimal("0");
Integer temp = 0;
for (TStrainReport tStrainReport : strainReports) {
List tStrainReportDetails1 = tStrainReportDetails.stream()
.filter(e -> e.getReportId().equals(tStrainReport.getId())&&
e.getEvaluateHumanType()==1).collect(Collectors.toList());
List tStrainReportDetails2 = tStrainReportDetails.stream()
.filter(e -> e.getReportId().equals(tStrainReport.getId())&&
e.getEvaluateHumanType()==2).collect(Collectors.toList());
// 菌种工程积分
sum1 = tStrainReportDetails2.stream()
.filter(e -> e.getEvaluateHumanType().equals(2))
.map(TStrainReportDetail::getEvaluateTotal)
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO);
// 菌种实验员积分
sum2 = tStrainReportDetails1.stream()
.filter(e -> e.getEvaluateHumanType().equals(1))
.map(TStrainReportDetail::getEvaluateTotal)
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO);
List collect3 = tStrainReportDetails.stream().filter(e -> e.getReportType() == 1).collect(Collectors.toList());
for (TStrainReportDetail tStrainReportDetail : collect3) {
// 根据评定等级统计失败次数
if (StringUtils.hasLength(tStrainReportDetail.getEvaluate())&& tStrainReportDetail.getEvaluate().split(",").length>=5){
if (tStrainReportDetail.getEvaluate().split(",")[4].equals("2")){
temp++;
}
}
}
}
tStrainReportProjectVO.setTeamIntegral(sum1.add(sum2));
tStrainReportProjectVO.setEngineerIntegral(sum1);
tStrainReportProjectVO.setExperimenterIntegral(sum2);
tStrainReportProjectVO.setFailCount(temp);
List collect1 = tStrainReports.stream().filter(e -> e.getProjectId().equals(tStrainReportProjectVO.getProjectId())).collect(Collectors.toList());
if (!collect1.isEmpty()){
tStrainReportProjectVO.setEndTime(collect1.get(0).getEvaluateTime());
}
TProjectTeam projectTeam = projectTeamMapper.selectById(tStrainReportProjectVO.getProjectId());
tStrainReportProjectVO.setStartTime(projectTeam.getCreateTime());
}
pageInfo.setRecords(list);
return pageInfo;
}
@Override
public PageInfo pageListAll(TStrainReportQuery query) {
PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
List list = this.baseMapper.pageListAll(query,pageInfo);
List tStrainReportDetails = strainReportDetailMapper.selectList(null);
for (TStrainReportVO tStrainReportVO : list) {
List collect = tStrainReportDetails.stream().filter(e -> e.getReportId().equals(tStrainReportVO.getId())).collect(Collectors.toList());
for (TStrainReportDetail tStrainReportDetail : collect) {
if (tStrainReportDetail.getEvaluateHumanType()==1){
if (tStrainReportDetail.getExperimentId()!=null){
SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId()));
tStrainReportVO.setExperimentName(sysUser.getNickName());
}
}else if (tStrainReportDetail.getEvaluateHumanType()==2){
if (tStrainReportDetail.getExperimentId()!=null){
SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId()));
tStrainReportVO.setExperimentName(sysUser.getNickName());
}
}
}
}
pageInfo.setRecords(list);
return pageInfo;
}
}