wenminjie
2026-07-13 0220811fbcffd4bd4df334502a2af272ae29f1e3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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;
 
/**
 * <p>
 * QA检测项 服务实现类
 * </p>
 *
 * @author xiaochen
 * @since 2025-04-08
 */
@Service
public class TQaTestItemServiceImpl extends ServiceImpl<TQaTestItemMapper, TQaTestItem> implements TQaTestItemService {
 
    @Resource
    private TQaTestItemReportMapper tQaTestItemReportMapper;
    @Resource
    private TProjectTeamMapper tProjectTeamMapper;
 
    @Override
    public PageInfo<TQaTestItemVO> pageList(TQaTestItemQuery query) {
        PageInfo<TQaTestItemVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
 
        // 1. 先查所有数据(不分页)
        List<TQaTestItemVO> allList = new ArrayList<>();
 
        List<TQaTestItemVO> list = this.baseMapper.pageList(query,null);//先不分页
        if (list != null) {
            allList.addAll(list);
        }
 
        if (query.getStatus() != null && query.getStatus() == -1) {
            //增加 在草稿箱的子元素
            LambdaQueryWrapper<TQaTestItemReport> tQaTestItemReportLambdaQueryWrapper = new LambdaQueryWrapper<>();
            tQaTestItemReportLambdaQueryWrapper.eq(TQaTestItemReport :: getStatus, -1);
            tQaTestItemReportLambdaQueryWrapper.in(TQaTestItemReport :: getDisabled, false);
 
            List<String> 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<TQaTestItemReport> tQaTestItemReports = tQaTestItemReportMapper.selectList(tQaTestItemReportLambdaQueryWrapper);
            if (tQaTestItemReports != null && !tQaTestItemReports.isEmpty()) {
                // 提取 itemId 并去重
                List<String> distinctItemIds = tQaTestItemReports.stream()
                        .map(TQaTestItemReport::getItemId)  // 假设子表中有 itemId 字段
                        .filter(Objects::nonNull)            // 过滤掉 null
                        .distinct()                          // 去重
                        .collect(Collectors.toList());
 
                // 用去重后的 itemId 查询主表数据
                if (!distinctItemIds.isEmpty()) {
                    LambdaQueryWrapper<TQaTestItem> 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<TQaTestItem> mainDataList = this.baseMapper.selectList(mainWrapper);
 
                    // TODO: 将 mainDataList 转换为 TQaTestItemVO 并添加到 list 中
                    List<TQaTestItemVO> 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<TQaTestItemVO> pageRecords = new ArrayList<>();
        if (start < total) {
            pageRecords = allList.subList(start, end);
        }
 
        pageInfo.setTotal(total);
        pageInfo.setRecords(pageRecords);
        return pageInfo;
    }
 
    @Override
    public PageInfo<TQaTestItemVO> evaluateList(TQaTestItemQuery query) {
        PageInfo<TQaTestItemVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        if(CollectionUtils.isEmpty(query.getTeamIds())){
            return pageInfo;
        }
        List<TQaTestItemVO> list = this.baseMapper.evaluateList(query,pageInfo);
        pageInfo.setRecords(list);
        return pageInfo;
    }
 
}