<?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>
|