IQC 来料检验申请列表 - 后端设计(MVP)
目标
1) VO 定义(建议先定 VO)
IqcApplyPageReqVO
IqcApplyPageRespVO
2) DO(最小字段集)
qms_qcp_inspecapplyn(主表)
qms_qcp_insappnentry(子表)
system_users(用户表)
3) Mapper SQL 草案(分页列表)
要点
示意 SQL(MyBatis 可按此改写) SELECT a.FBILLNO AS id, a.FAPPLYUSER AS applicantId, u.username AS applicantName, a.FAPPLYTIME AS applyTime, a.FCOMMENT AS remark, COUNT(b.id) AS materialCount, CASE
WHEN SUM(CASE WHEN b.FINSPECTSTATUS = '检验中' THEN 1 ELSE 0 END) > 0 THEN '检验中'
WHEN COUNT(b.id) > 0
AND SUM(CASE WHEN b.FINSPECTSTATUS = '检验完成' THEN 1 ELSE 0 END) = COUNT(b.id) THEN '检验完成'
ELSE '待检验'
END AS status FROM qms_qcp_inspecapplyn a LEFT JOIN system_users u ON u.id = a.FAPPLYUSER LEFT JOIN qms_qcp_insappnentry b ON b.glid = a.id WHERE 1 = 1 -- keyword:FBILLNO/FCOMMENT 模糊匹配 -- applicantIds:a.FAPPLYUSER IN (...) -- 时间:a.FAPPLYTIME BETWEEN beginTime AND endTime GROUP BY a.FBILLNO, a.FAPPLYUSER, u.username, a.FAPPLYTIME, a.FCOMMENT -- 若要按状态筛选,可在外层包一层并对 status 过滤 ORDER BY a.FCREATETIME DESC
4) Mapper XML 示例(分页列表)
说明
示例(XML 片段)
<select id="selectIqcApplyPage" resultType="cn.iocoder.yudao.module.qms.controller.admin.iqc.vo.IqcApplyPageRespVO">
SELECT *
FROM (
SELECT
a.FBILLNO AS id,
a.FAPPLYUSER AS applicantId,
u.username AS applicantName,
a.FAPPLYTIME AS applyTime,
a.FCOMMENT AS remark,
COUNT(b.id) AS materialCount,
CASE
WHEN SUM(CASE WHEN b.FINSPECTSTATUS = '检验中' THEN 1 ELSE 0 END) > 0 THEN '检验中'
WHEN COUNT(b.id) > 0
AND SUM(CASE WHEN b.FINSPECTSTATUS = '检验完成' THEN 1 ELSE 0 END) = COUNT(b.id) THEN '检验完成'
ELSE '待检验'
END AS status
FROM qms_qcp_inspecapplyn a
LEFT JOIN system_users u ON u.id = a.FAPPLYUSER
LEFT JOIN qms_qcp_insappnentry b ON b.glid = a.id
<where>
<if test="keyword != null and keyword != ''">
AND (a.FBILLNO LIKE CONCAT('%', #{keyword}, '%')
OR a.FCOMMENT LIKE CONCAT('%', #{keyword}, '%'))
</if>
<if test="applicantIds != null and applicantIds.size() > 0">
AND a.FAPPLYUSER IN
<foreach collection="applicantIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="beginTime != null and endTime != null">
AND a.FAPPLYTIME BETWEEN #{beginTime} AND #{endTime}
</if>
</where>
GROUP BY a.FBILLNO, a.FAPPLYUSER, u.username, a.FAPPLYTIME, a.FCOMMENT
) t
<where>
<if test="statusList != null and statusList.size() > 0">
AND t.status IN
<foreach collection="statusList" item="status" open="(" separator="," close=")">
#{status}
</foreach>
</if>
</where>
ORDER BY t.applyTime DESC
</select>
5) Service / Controller 设计(建议)
Controller
Service
6) 接口契约(示例)
请求示例
GET /admin-api/qms/iqc-apply/page?keyword=IQC&statusList=待检验&applicantIds=1&pageNo=1&pageSize=20
响应示例
{
"code": 0,
"data": {
"list": [
{
"id": "IQC20240115001",
"applicantId": 1,
"applicantName": "zhangsan",
"applyTime": "2024-01-15 09:30:00",
"status": "待检验",
"materialCount": 5,
"remark": "紧急物料,请优先处理"
}
],
"total": 1
}
}
7) 前端对接清单(最小改动)