liyong
9 天以前 1ab2b329a40decba8ff7eefbeb158ff259aceb6d
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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.mes.dal.mysql.pd.archive.MesPdArchiveMapper">
 
    <!--
        按 project_id 分组分页查询:每组取最新一条归档记录
        同时关联项目表获取产品编码、产品名称
        子查询统计每个项目下的归档数量
        返回最新归档的 updater、update_time
        MyBatis-Plus 分页插件会自动拦截 IPage 参数并添加 LIMIT
    -->
    <select id="selectPageGroupByProjectId" resultType="cn.iocoder.yudao.module.mes.controller.admin.pd.archive.vo.MesPdArchiveGroupRespVO">
        SELECT a.*, p.product_code, p.product_name,p.task_code,p.task_name,su.nickname as archiver_nickname,
               (SELECT COUNT(*) FROM mes_pd_archive cnt WHERE cnt.project_id = a.project_id AND cnt.deleted = 0) AS archive_count
        FROM mes_pd_archive a
        INNER JOIN (
            SELECT MAX(sub.id) AS id
            FROM mes_pd_archive sub
            WHERE sub.deleted = 0
            <if test="req.archiveStatus != null">
                AND sub.archive_status = #{req.archiveStatus}
            </if>
            <if test="req.productCode != null and req.productCode != ''">
                AND EXISTS (
                    SELECT 1 FROM mes_pd_project pp
                    WHERE pp.id = sub.project_id AND pp.deleted = 0
                    AND pp.product_code LIKE CONCAT('%', #{req.productCode}, '%')
                )
            </if>
            <if test="req.productName != null and req.productName != ''">
                AND EXISTS (
                    SELECT 1 FROM mes_pd_project pp
                    WHERE pp.id = sub.project_id AND pp.deleted = 0
                    AND pp.product_name LIKE CONCAT('%', #{req.productName}, '%')
                )
            </if>
            GROUP BY sub.project_id
        ) g ON a.id = g.id
        LEFT JOIN mes_pd_project p ON a.project_id = p.id AND p.deleted = 0
        left join system_users su on su.id =  a.archiver
        <where>
            <if test="req.archiveCode != null and req.archiveCode != ''">
                AND a.archive_code LIKE CONCAT('%', #{req.archiveCode}, '%')
            </if>
        </where>
        ORDER BY a.update_time DESC
    </select>
 
</mapper>