package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.StringUtils;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.TPedigreeChartDetailMapper;
import com.ruoyi.system.mapper.TPedigreeChartMapper;
import com.ruoyi.system.mapper.TProjectTeamMapper;
import com.ruoyi.system.model.TPedigreeChart;
import com.ruoyi.system.model.TPedigreeChartDetail;
import com.ruoyi.system.model.TProjectTeam;
import com.ruoyi.system.model.TProjectTeamStaff;
import com.ruoyi.system.query.TPedigreeChartConfirmQuery;
import com.ruoyi.system.query.TPedigreeChartDetailQuery;
import com.ruoyi.system.query.TPedigreeChartQuery;
import com.ruoyi.system.service.TPedigreeChartService;
import com.ruoyi.system.vo.TPedigreeChartConfirmVO;
import com.ruoyi.system.vo.TPedigreeChartDetailVO;
import com.ruoyi.system.vo.TPedigreeChartVO;
import com.ruoyi.system.vo.TProjectTeamVO;
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.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 谱系图 服务实现类
*
*
* @author 无关风月
* @since 2025-04-12
*/
@Service
public class TPedigreeChartServiceImpl extends ServiceImpl implements TPedigreeChartService {
@Resource
private TProjectTeamMapper tProjectTeamMapper;
@Autowired
private SysUserMapper sysUserMapper;
@Autowired
private TPedigreeChartDetailMapper pedigreeChartDetailMapper;
@Override
public PageInfo pageList(TPedigreeChartQuery query) {
PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
List list = this.baseMapper.pageList(query,pageInfo);
for (TPedigreeChartVO tPedigreeChartVO : list) {
if (StringUtils.isNotEmpty(tPedigreeChartVO.getProjectId())) {
TProjectTeam tProjectTeam = tProjectTeamMapper.selectById(tPedigreeChartVO.getProjectId());
if (tProjectTeam != null) {
tPedigreeChartVO.setProjectName(tProjectTeam.getTeamName());
}
}
}
pageInfo.setRecords(list);
return pageInfo;
}
@Override
public PageInfo listConfirm(TPedigreeChartConfirmQuery query) {
PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
List list = this.baseMapper.listConfirm(query,pageInfo);
pageInfo.setRecords(list);
return pageInfo;
}
@Override
public PageInfo pageListDetail(TPedigreeChartDetailQuery query) {
PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
List list = distinctById(this.baseMapper.pageListDetail(query,pageInfo));
List sysUsers = sysUserMapper.selectAllList();
for (TPedigreeChartDetailVO tPedigreeChartDetailVO : list) {
SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(tPedigreeChartDetailVO.getVaccinateId())))
.findFirst().orElse(null);
if (sysUser!=null){
tPedigreeChartDetailVO.setExperimenter(sysUser.getNickName());
}
SysUser sysUser1 = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(tPedigreeChartDetailVO.getVaccinateId())))
.findFirst().orElse(null);
if (sysUser1!=null){
tPedigreeChartDetailVO.setVaccinateName(sysUser.getNickName());
}
}
pageInfo.setRecords(list);
return pageInfo;
}
@Override
public PageInfo pageListCountDetail(TPedigreeChartDetailQuery query) {
TPedigreeChart tPedigreeChart = this.baseMapper.selectById(query.getId());
PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
List list = distinctById(this.baseMapper.pageListCountDetail(query,pageInfo));
List sysUsers = sysUserMapper.selectAllList();
for (TPedigreeChartDetailVO tPedigreeChartDetailVO : list) {
SysUser sysUser = StringUtils.isEmpty(tPedigreeChartDetailVO.getVaccinateId()) ? null : sysUsers.stream()
.filter(e -> e.getUserId().equals(Long.valueOf(tPedigreeChartDetailVO.getVaccinateId())))
.findFirst().orElse(null);
if (sysUser!=null){
tPedigreeChartDetailVO.setExperimenter(sysUser.getNickName());
tPedigreeChartDetailVO.setVaccinateName(sysUser.getNickName());
}
TPedigreeChartDetail parent = pedigreeChartDetailMapper.selectList(
Wrappers.lambdaQuery()
.eq(TPedigreeChartDetail::getId, tPedigreeChartDetailVO.getParentId())
.eq(TPedigreeChartDetail::getPedigreeChartId, query.getId())
.eq(TPedigreeChartDetail::getType, 1)
.orderByDesc(TPedigreeChartDetail::getUpdateTime)
.orderByDesc(TPedigreeChartDetail::getCreateTime)
.last("limit 1")
).stream().findFirst().orElse(null);
if (parent != null) {
tPedigreeChartDetailVO.setStrainType(parent.getStrainType());
tPedigreeChartDetailVO.setSource(parent.getSource());
tPedigreeChartDetailVO.setColonyNumber(parent.getColonyNumber());
tPedigreeChartDetailVO.setStrainCode(StringUtils.isNotEmpty(parent.getStrainCode())
? parent.getStrainCode() : tPedigreeChart.getStrainCode());
tPedigreeChartDetailVO.setStrainName(StringUtils.isNotEmpty(parent.getStrainName())
? parent.getStrainName() : tPedigreeChart.getStrainName());
tPedigreeChartDetailVO.setConfirmTime(parent.getConfirmTime() != null
? parent.getConfirmTime() : parent.getStorageTime());
} else {
tPedigreeChartDetailVO.setStrainCode(tPedigreeChart.getStrainCode());
tPedigreeChartDetailVO.setStrainName(tPedigreeChart.getStrainName());
tPedigreeChartDetailVO.setConfirmTime(tPedigreeChart.getCreateTime());
}
}
pageInfo.setRecords(list);
return pageInfo;
}
private List distinctById(List list) {
Map uniqueRecords = new LinkedHashMap<>();
for (TPedigreeChartDetailVO detail : list) {
uniqueRecords.putIfAbsent(detail.getId(), detail);
}
return new ArrayList<>(uniqueRecords.values());
}
}