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.utils.bean.BeanUtils; import com.ruoyi.system.mapper.TProjectTeamMapper; import com.ruoyi.system.mapper.TQaTestItemMapper; import com.ruoyi.system.mapper.TQaTestItemReportMapper; import com.ruoyi.system.model.TProjectTeam; import com.ruoyi.system.model.TQaTestItem; import com.ruoyi.system.model.TQaTestItemReport; import com.ruoyi.system.query.TQaTestItemQuery; import com.ruoyi.system.service.TQaTestItemService; import com.ruoyi.system.vo.TQaTestItemVO; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** *

* QA检测项 服务实现类 *

* * @author xiaochen * @since 2025-04-08 */ @Service public class TQaTestItemServiceImpl extends ServiceImpl implements TQaTestItemService { @Resource private TQaTestItemReportMapper tQaTestItemReportMapper; @Resource private TProjectTeamMapper tProjectTeamMapper; @Override public PageInfo pageList(TQaTestItemQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); // 1. 先查所有数据(不分页) List allList = new ArrayList<>(); List list = this.baseMapper.pageList(query,null);//先不分页 if (list != null) { allList.addAll(list); } if (query.getStatus() != null && query.getStatus() == -1) { //增加 在草稿箱的子元素 LambdaQueryWrapper tQaTestItemReportLambdaQueryWrapper = new LambdaQueryWrapper<>(); tQaTestItemReportLambdaQueryWrapper.eq(TQaTestItemReport :: getStatus, -1); tQaTestItemReportLambdaQueryWrapper.in(TQaTestItemReport :: getDisabled, false); List teamIds = query.getTeamIds(); if (teamIds != null && !teamIds.isEmpty()) { // 使用 inSql 嵌套查询 String teamIdsStr = teamIds.stream() .map(String::valueOf) .collect(Collectors.joining(",")); tQaTestItemReportLambdaQueryWrapper.inSql(TQaTestItemReport::getItemId, "SELECT id FROM t_qa_test_item WHERE team_id IN (" + teamIdsStr + ")"); } List tQaTestItemReports = tQaTestItemReportMapper.selectList(tQaTestItemReportLambdaQueryWrapper); if (tQaTestItemReports != null && !tQaTestItemReports.isEmpty()) { // 提取 itemId 并去重 List distinctItemIds = tQaTestItemReports.stream() .map(TQaTestItemReport::getItemId) // 假设子表中有 itemId 字段 .filter(Objects::nonNull) // 过滤掉 null .distinct() // 去重 .collect(Collectors.toList()); // 用去重后的 itemId 查询主表数据 if (!distinctItemIds.isEmpty()) { LambdaQueryWrapper mainWrapper = new LambdaQueryWrapper<>(); mainWrapper.in(TQaTestItem::getId, distinctItemIds); // 如果还需要 teamId 过滤,可以再加 if (teamIds != null && !teamIds.isEmpty()) { mainWrapper.in(TQaTestItem::getTeamId, teamIds); } mainWrapper.ne(TQaTestItem::getStatus, -1) .isNotNull(TQaTestItem::getStatus); // 排除 null 值 List mainDataList = this.baseMapper.selectList(mainWrapper); // TODO: 将 mainDataList 转换为 TQaTestItemVO 并添加到 list 中 List tQaTestItemVOList = new ArrayList<>(); for (TQaTestItem tQaTestItem : mainDataList) { TQaTestItemVO tQaTestItemVO = new TQaTestItemVO(); BeanUtils.copyProperties(tQaTestItem, tQaTestItemVO); TProjectTeam tProjectTeam = tProjectTeamMapper.selectById(tQaTestItem.getTeamId()); if (tProjectTeam != null) { tQaTestItemVO.setTeamName(tProjectTeam.getTeamName()); } tQaTestItemVOList.add(tQaTestItemVO); } allList.addAll(tQaTestItemVOList); //去重 allList = allList.stream() .collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TQaTestItemVO::getId))), ArrayList::new )); } } } //统一排序 allList.sort(Comparator.comparing(TQaTestItemVO::getCreateTime, Comparator.nullsLast(Comparator.reverseOrder()))); // 手动分页 int total = allList.size(); int start = (query.getPageNum() - 1) * query.getPageSize(); int end = Math.min(start + query.getPageSize(), total); List pageRecords = new ArrayList<>(); if (start < total) { pageRecords = allList.subList(start, end); } pageInfo.setTotal(total); pageInfo.setRecords(pageRecords); return pageInfo; } @Override public PageInfo evaluateList(TQaTestItemQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); if(CollectionUtils.isEmpty(query.getTeamIds())){ return pageInfo; } List list = this.baseMapper.evaluateList(query,pageInfo); pageInfo.setRecords(list); return pageInfo; } }