8 小时以前 7bf754a7835d06f26240c4ca15bc5f83650de377
src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -31,15 +31,15 @@
        spd.totalQuantity,
        sor.outboundBatches,
        'shipping' as source,
        NULL as stockOutRecordId,
        NULL as outCategory,
        NULL as tankNo,
        NULL as oilProduct,
        NULL as oilDepotName,
        NULL as driverName,
        NULL as contactPerson,
        NULL as contactPhone,
        NULL as outBatchNo
        oor.id as stockOutRecordId,
        oor.out_category as outCategory,
        oor.tank_no as tankNo,
        oor.oil_product as oilProduct,
        oor.oil_depot_name as oilDepotName,
        oor.driver_name as driverName,
        oor.contact_person as contactPerson,
        oor.contact_phone as contactPhone,
        oor.batch_no as outBatchNo
        FROM shipping_info s
        LEFT JOIN (select shipping_info_id,sum(quantity) totalQuantity from shipping_product_detail GROUP BY shipping_info_id) spd ON spd.shipping_info_id = s.id
        LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
@@ -50,6 +50,12 @@
                   from stock_out_record
                   where record_type='13'and approval_status=1
                   group by record_id)sor on sor.record_id= s.id
        <!-- 由油品出库审批通过时生成的发货单:一条出库对应一条自己的 shipping_info,
             故至多命中一行,不会放大行数。手建的发货单没有配对油品出库,这些列为空 -->
        left join stock_out_record oor
            on oor.record_id = s.id
           and TRIM(IFNULL(oor.record_type,'')) = '13'
           and (oor.type IS NULL or oor.type = '')
        WHERE 1=1
        <if test="req.salesContractNo != null and req.salesContractNo != ''">
            AND sl.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%')
@@ -79,7 +85,13 @@
        o.create_user,
        o.update_user,
        NULL as tenant_id,
        sl2.sales_contract_no,
        <!-- 油品出库可绑多个销售台账(多客户),o.sales_ledger_id 只存首项,故从绑定表汇总全部合同号 -->
        IFNULL(
            (select group_concat(distinct slb.sales_contract_no separator ',')
             from stock_out_record_sales_ledger b
                      join sales_ledger slb on slb.id = b.sales_ledger_id
             where b.stock_out_record_id = o.id),
            sl2.sales_contract_no) as sales_contract_no,
        pm2.model as specification_model,
        pm2.unit,
        p2.product_name,
@@ -101,9 +113,19 @@
        left join product p2 on p2.id = pm2.product_id
        <!-- 绑定了销售台账的油品出库带出合同号;没绑的行该列仍为空 -->
        left join sales_ledger sl2 on sl2.id = o.sales_ledger_id
        WHERE o.out_category = '销售' AND o.approval_status = 1
        <!-- 只取油品出库(type 为空,全部出库类别);type=0/1 的合格、不合格出库不进发货台账 -->
        WHERE (o.type IS NULL OR o.type = '') AND o.approval_status = 1
        <!-- 已改造成「销售-发货出库」的油品行由分支 A 的 shipping_info 展示,此处排除避免同一批货两行。
             IFNULL 必须加:record_type 为 NULL 时三值逻辑会把整行滤掉 -->
        AND NOT (TRIM(IFNULL(o.record_type,'')) = '13' AND IFNULL(o.record_id,0) > 0)
        <if test="req.salesContractNo != null and req.salesContractNo != ''">
            AND sl2.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%')
            <!-- 多台账出库要按「任一绑定台账的合同号」都能筛到,不能只看首项 -->
            AND (sl2.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%')
                 OR EXISTS (select 1
                            from stock_out_record_sales_ledger b
                                     join sales_ledger slb on slb.id = b.sales_ledger_id
                            where b.stock_out_record_id = o.id
                              and slb.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%')))
        </if>
        <!-- 油品出库没有快递单,按快递单号筛选时不应返回任何油品行 -->
        <if test="req.expressNumber != null and req.expressNumber != ''">