liyong
2026-04-29 f053e8ba8c6d0b95daa378ef118b3a780f9f6cde
feat(production): 添加工单报工状态查询功能

- 在 ProductWorkOrderDto 中新增 hasUnreportedMachine 字段用于标识是否可以报工
- 修改数据库查询逻辑,在 productWorkOrder 表基础上增加生产机器记录表关联查询
- 实现通过 EXISTS 子查询判断工单是否存在未报工的机器记录
- 更新工单列表查询接口返回报工状态信息
- 优化 SQL 查询结构并调整字段映射关系
已修改2个文件
57 ■■■■ 文件已修改
src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductWorkOrderMapper.xml 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
@@ -50,4 +50,7 @@
    @ApiModelProperty(value = "工单处理用户ids")
    private String processUserIds;
    @ApiModelProperty(value = "是否可以报工")
    private Boolean hasUnreportedMachine;
}
src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -20,37 +20,33 @@
    <select id="pageProductWorkOrder" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
        SELECT
        pwo.*,
        pp.NAME as processName,
        pp.id as processId,
        pm.model,
        pm.unit,
        p.product_name AS productName,
        po.nps_no AS productOrderNpsNo,
        ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus,
        CASE
        WHEN pwo.work_order_no LIKE 'FG%' THEN '返工返修'
        ELSE '正常'
        END AS work_order_type,
        pp.device_name,
        pp.user_ids as process_user_ids
            pwo.*,
            pp.NAME as processName,
            pp.id as processId,
            pm.model,
            pm.unit,
            IF(EXISTS(
                SELECT 1 FROM production_machine_record pmr
                WHERE pmr.work_order_id = pwo.id
                  AND pmr.report_status = 0
            ), FALSE, true ) AS has_unreported_machine,
            p.product_name AS productName,
            po.nps_no AS productOrderNpsNo,
            ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus,
            CASE
                WHEN pwo.work_order_no LIKE 'FG%' THEN '返工返修'
                ELSE '正常'
                END AS work_order_type,
            pp.device_name,
            pp.user_ids as process_user_ids
        FROM
        product_work_order pwo
        LEFT JOIN product_process_route_item ppri ON ppri.id = pwo.product_process_route_item_id
        LEFT JOIN product_order po ON po.id = pwo.product_order_id
        LEFT JOIN product_process pp ON pp.id = ppri.process_id
        LEFT JOIN product_model pm ON pm.id = ppri.product_model_id
        LEFT JOIN product p ON p.id = pm.product_id
            product_work_order pwo
                LEFT JOIN product_process_route_item ppri ON ppri.id = pwo.product_process_route_item_id
                LEFT JOIN product_order po ON po.id = pwo.product_order_id
                LEFT JOIN product_process pp ON pp.id = ppri.process_id
                LEFT JOIN product_model pm ON pm.id = ppri.product_model_id
                LEFT JOIN product p ON p.id = pm.product_id
        where 1=1
            <if test="c.workOrderNo != null and c.workOrderNo != ''">
               and pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
            </if>
            <if test="c.planStartTime != null and c.planEndTime != null">
                and DATE(pwo.create_time) between #{c.planStartTime} and #{c.planEndTime}
            </if>
            <if test="c.productOrderId != null and c.productOrderId != ''">
               and pwo.product_order_id = #{c.productOrderId}
            </if>
        order by po.id desc,pwo.id asc
    </select>
    <select id="getProductWorkOrderFlowCard" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">