IQC 来料检验申请列表 - 后端设计(MVP) 目标 - 聚焦“来料检验申请”列表接口,满足前端列表展示/筛选/分页 - 单据编号使用 FBILLNO,申请人用 system_users.username,状态返回中文 1) VO 定义(建议先定 VO) IqcApplyPageReqVO - keyword: String(模糊匹配 FBILLNO/FCOMMENT) - statusList: List(值:待检验/检验中/检验完成) - applicantIds: List - beginTime: LocalDateTime(申请时间起) - endTime: LocalDateTime(申请时间止) - pageNo: Integer - pageSize: Integer IqcApplyPageRespVO - id: String(FBILLNO) - applicantId: Long(FAPPLYUSER) - applicantName: String(system_users.username) - applyTime: LocalDateTime(FAPPLYTIME) - status: String(中文:待检验/检验中/检验完成) - materialCount: Integer(子表行数) - remark: String(FCOMMENT) 2) DO(最小字段集) qms_qcp_inspecapplyn(主表) - id: Long - FBILLNO: String - FAPPLYUSER: Long - FAPPLYTIME: LocalDateTime - FCOMMENT: String - FCREATETIME: LocalDateTime(排序可用) qms_qcp_insappnentry(子表) - id: Long - glid: Long(关联主表 id) - FINSPECTSTATUS: String(中文:待检验/检验中/检验完成) system_users(用户表) - id: Long - username: String 3) Mapper SQL 草案(分页列表) 要点 - 状态由子表汇总: - 任一行“检验中” => 检验中 - 全部“检验完成” => 检验完成 - 其他/无子表 => 待检验 - 申请人通过 system_users.id 关联 system_users.username 示意 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 示例(分页列表) 说明 - 先在子查询中计算 status,再在外层按 status 过滤,避免 HAVING 复杂度 - SQL 仅示意,按实际分页插件(MyBatis-Plus / PageHelper)调整 示例(XML 片段) ```xml ``` 5) Service / Controller 设计(建议) Controller - GET /admin-api/qms/iqc-apply/page - 入参:IqcApplyPageReqVO - 出参:PageResult Service - IqcApplyService#getIqcApplyPage(IqcApplyPageReqVO reqVO) - 负责参数校验、调用 Mapper、封装分页结果 6) 接口契约(示例) 请求示例 ```http GET /admin-api/qms/iqc-apply/page?keyword=IQC&statusList=待检验&applicantIds=1&pageNo=1&pageSize=20 ``` 响应示例 ```json { "code": 0, "data": { "list": [ { "id": "IQC20240115001", "applicantId": 1, "applicantName": "zhangsan", "applyTime": "2024-01-15 09:30:00", "status": "待检验", "materialCount": 5, "remark": "紧急物料,请优先处理" } ], "total": 1 } } ``` 7) 前端对接清单(最小改动) - 列表接口地址:/admin-api/qms/iqc-apply/page - 字段映射: - id -> 单据编号(FBILLNO) - applicantName -> 申请人 - applyTime -> 申请时间 - status -> 状态(中文) - materialCount -> 物料数 - remark -> 备注 - 状态显示:已在 StatusBadge 与筛选项里支持中文