liyong
2026-04-16 436c0a68d698955d0d4eda827d398257b9e4dafc
fix(mapper): 修复销售台账和生产工单查询逻辑

- 修改产品工单查询条件,使用NPS编号模糊匹配替代订单ID精确匹配
- 优化销售台账查询中的别名语法,统一使用AS关键字
- 简化发货状态判断逻辑,使用IFNULL函数替代复杂CASE语句
- 重构生产记录存在性检查,使用JOIN子查询替代EXISTS子查询
- 优化发货状态统计查询逻辑,直接返回是否全部发货的状态字段
已修改2个文件
38 ■■■■■ 文件已修改
src/main/resources/mapper/production/ProductWorkOrderMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesLedgerMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -45,8 +45,8 @@
            <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 test="c.productOrderNpsNo != null and c.productOrderNpsNo != ''">
               and po.nps_no like concat('%',#{c.productOrderNpsNo},'%')
            </if>
    </select>
    <select id="getProductWorkOrderFlowCard" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -56,38 +56,32 @@
        T1.attachment_materials,
        T1.tenant_id,
        T1.contract_amount,
        T1.contract_amount as noInvoiceAmountTotal,
        T1.contract_amount AS noInvoiceAmountTotal,
        T1.execution_date,
        T2.nick_name AS entry_person_name,
        T1.payment_method,
        T1.delivery_date,
        DATEDIFF(T1.delivery_date, CURDATE()) AS delivery_days_diff,
        CASE
        WHEN shipping_status_counts.total_count = 0 THEN false
        WHEN shipping_status_counts.unshipped_count = 0 THEN true
        ELSE false
        END AS is_fh,
        CASE
        WHEN EXISTS (
        SELECT 1
        FROM product_order po2
        INNER JOIN product_work_order wo2 ON wo2.product_order_id = po2.id
        INNER JOIN production_product_main pm2 ON pm2.work_order_id = wo2.id
        WHERE po2.sales_ledger_id = T1.id
        LIMIT 1
        ) THEN true
        ELSE false
        END AS has_production_record
        IFNULL(shipping_status_counts.is_all_shipped, FALSE) AS is_fh,
        IFNULL(production_exists.has_production, FALSE) AS has_production_record
        FROM sales_ledger T1
        LEFT JOIN sys_user T2 ON T1.entry_person = T2.user_id
        LEFT JOIN (
        SELECT sales_ledger_id,
        COUNT(*) as total_count,
        SUM(CASE WHEN status != '已发货' THEN 1 ELSE 0 END) as unshipped_count
        CASE
        WHEN SUM(CASE WHEN status != '已发货' THEN 1 ELSE 0 END) = 0 THEN TRUE
        ELSE FALSE
        END AS is_all_shipped
        FROM shipping_info
        GROUP BY sales_ledger_id
        ) shipping_status_counts ON T1.id = shipping_status_counts.sales_ledger_id
        LEFT JOIN (
        SELECT DISTINCT po.sales_ledger_id,
        TRUE AS has_production
        FROM product_order po
        INNER JOIN product_work_order wo ON wo.product_order_id = po.id
        INNER JOIN production_product_main pm ON pm.work_order_id = wo.id
        ) production_exists ON T1.id = production_exists.sales_ledger_id
        <where>
            <if test="salesLedgerDto.customerName != null and salesLedgerDto.customerName != '' ">
                AND T1.customer_name LIKE CONCAT('%',#{salesLedgerDto.customerName},'%')