<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.wealth.dal.mysql.receivable.ReceivableMapper">

    <select id="getCostDetailPage" resultType="cn.iocoder.yudao.module.wealth.vo.receivable.CostDetailPageVO">
        SELECT
        o.order_no,
        o.transport_id,
        o.channel_id,
        o.status,
        de.departure_warehouse_id,
        ob.objective_warehouse_id,
        dew.title_zh departure_warehouse_zh,
        dew.title_en departure_warehouse_en,
        obw.title_zh objective_warehouse_zh,
        obw.title_en objective_warehouse_en,
        obw.guojia destination_country,
        obw.shi destination_city,
        usu.username AS updater,
        asu.username AS approver,
        ra.update_time AS approverTime,
        r.*
        FROM ecw_receivable r
        LEFT JOIN ecw_order o ON o.order_id = r.order_id
        LEFT JOIN ecw_order_departure de ON de.order_id = o.order_id
        LEFT JOIN ecw_order_objective ob ON ob.order_id = o.order_id
        LEFT JOIN ecw_warehouse dew ON de.departure_warehouse_id = dew.id
        LEFT JOIN ecw_warehouse obw ON ob.objective_warehouse_id = obw.id
        LEFT JOIN ecw_receipt_approval ra ON ra.receipt_id = r.receipt_id
        LEFT JOIN system_user usu ON usu.id = r.updater
        LEFT JOIN system_user asu ON asu.id = ra.updater
        WHERE
        r.deleted = 0
        <include refid="costDetailPageCondition"/>
        ORDER BY r.create_time
    </select>
    <select id="costDetailSearchAmount" resultType="cn.iocoder.yudao.module.wealth.vo.receivable.WealthMoneyAmountVO">
        SELECT
        r.currency_id,
        SUM(r.total_amount) AS total_amount,
        SUM(r.tax_amount) AS tax_amount,
        SUM(r.discount_total) AS discount_total,
        SUM(r.write_off_amount) AS write_off_amount
        FROM ecw_receivable r
        <if test="(query.transportId != null and query.transportId.size() != 0) or query.shipmentChannel != null or query.status != null">
            LEFT JOIN ecw_order o ON o.order_id = r.order_id
        </if>
        <if test="query.departureWareHouseId != null">
            LEFT JOIN ecw_order_departure de ON de.order_id = r.order_id
        </if>
        <if test="query.destCountry != null or query.destCity != null or query.objectiveWareHouseId != null">
            LEFT JOIN ecw_order_objective ob ON ob.order_id = r.order_id
        </if>
        WHERE
        r.deleted = 0
        <include refid="costDetailPageCondition"/>
        GROUP BY r.currency_id
    </select>

    <sql id="costDetailPageCondition">
        <if test="query.orderNo != null and query.orderNo != ''">
            AND r.order_no = #{query.orderNo}
        </if>
        <if test="query.transportId != null">
            <if test="query.transportId.size() == 1">
                AND o.transport_id = #{query.transportId[0]}
            </if>
            <if test="query.transportId.size() > 1">
                AND o.transport_id IN
                <foreach collection="query.transportId" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.shipmentChannel != null">
            <if test="query.shipmentChannel.size() == 1">
                AND o.channel_id = #{query.shipmentChannel[0]}
            </if>
            <if test="query.shipmentChannel.size() > 1">
                AND o.channel_id IN
                <foreach collection="query.shipmentChannel" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.departureWareHouseId != null">
            <if test="query.departureWareHouseId.size() == 1">
                AND de.departure_warehouse_id = #{query.departureWareHouseId[0]}
            </if>
            <if test="query.departureWareHouseId.size() > 1">
                AND de.departure_warehouse_id IN
                <foreach collection="query.departureWareHouseId" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.destCountry != null">
            <if test="query.destCountry.size() == 1">
                AND ob.objective_country_id = #{query.destCountry[0]}
            </if>
            <if test="query.destCountry.size() > 1">
                AND ob.objective_country_id IN
                <foreach collection="query.destCountry" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.destCity != null">
            <if test="query.destCity.size() == 1">
                AND ob.objective_id = #{query.destCity[0]}
            </if>
            <if test="query.destCity.size() > 1">
                AND ob.objective_id IN
                <foreach collection="query.destCity" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.objectiveWareHouseId != null">
            <if test="query.objectiveWareHouseId.size() == 1">
                AND ob.objective_warehouse_id = #{query.objectiveWareHouseId[0]}
            </if>
            <if test="query.objectiveWareHouseId.size() > 1">
                AND ob.objective_warehouse_id IN
                <foreach collection="query.objectiveWareHouseId" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.title != null and query.title != ''">
            AND (r.title_zh LIKE CONCAT('%', #{query.title}, '%') OR r.title_en LIKE CONCAT('%', #{query.title}, '%'))
        </if>
        <if test="query.feeSource != null">
            <if test="query.feeSource.size() == 1">
                AND r.fee_source = #{query.feeSource[0]}
            </if>
            <if test="query.feeSource.size() > 1">
                AND r.fee_source IN
                <foreach collection="query.feeSource" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.feeType != null">
            <if test="query.feeType.size() == 1">
                AND r.fee_type = #{query.feeType[0]}
            </if>
            <if test="query.feeType.size() > 1">
                AND r.fee_type IN
                <foreach collection="query.feeType" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.collectionType != null">
            <if test="query.collectionType.size() == 1">
                AND r.collection_type = #{query.collectionType[0]}
            </if>
            <if test="query.collectionType.size() > 1">
                AND r.collection_type IN
                <foreach collection="query.collectionType" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.status != null">
            AND o.status = #{query.status}
        </if>
    </sql>

    <select id="receivablePageAmount" resultType="cn.iocoder.yudao.module.wealth.vo.receivable.WealthMoneyAmountVO">
        SELECT r.currency_id,
        SUM(r.total_amount) AS total_amount
        FROM ecw_receivable r
        <!--<if test="query.status != null
                or query.customsType != null
                or query.transportId != null
                or query.isCargoControl != null
                or ( query.marks != null and query.marks != '' )
                or ( query.tidanNo != null and query.tidanNo != '' )
                or query.customerId != null
                or query.orderNo != null and query.orderNo != ''
                or ( query.containerNumber != null and query.containerNumber != '' )
                or query.departureId != null
                or query.objectiveId != null">-->
            LEFT JOIN ecw_order o ON o.order_id = r.order_id
        <!--</if>-->
        <if test="query.departureId != null or query.objectiveId != null">
            LEFT JOIN ecw_warehouse_line de ON o.line_id = de.id
        </if>
        <if test="query.consignorNameOrPhone != null and query.consignorNameOrPhone != '' ">
            LEFT JOIN ecw_order_consignor nor ON nor.order_id = r.order_id
        </if>
        <if test="query.consigneeNameOrPhone != null and query.consigneeNameOrPhone != '' ">
            LEFT JOIN ecw_order_consignee nee ON nee.order_id = r.order_id
        </if>
        WHERE r.deleted = 0 AND r.receipt_id IS NULL and o.order_id is not null
        <if test="query.status != null">
            AND o.`status` = #{query.status}
        </if>
        <if test="query.customsType != null">
            AND o.`customs_type` = #{query.customsType}
        </if>
        <if test="query.transportId != null">
            AND o.`transport_id` = #{query.transportId}
        </if>
        <if test="query.isCargoControl != null">
            AND o.`is_cargo_control` = #{query.isCargoControl}
        </if>
        <if test="query.marks != null and query.marks != ''">
            AND o.`marks` like concat("%",concat(#{query.marks},"%"))
        </if>
        <if test="query.departureId != null ">
            AND de.`start_warehouse_id` = #{query.departureId}
        </if>
        <if test="query.objectiveId != null ">
            AND de.`dest_warehouse_id` = #{query.objectiveId}
        </if>
        <if test="query.title != null and query.title != '' ">
            AND concat(r.`title_zh`, r.`title_en`) like concat("%",concat(#{query.title},"%"))
        </if>
        <if test="query.consignorNameOrPhone != null and query.consignorNameOrPhone != '' ">
            AND (nor.`name` like concat("%",#{query.consignorNameOrPhone},"%") or nor.`phone` like
            concat("%",#{query.consignorNameOrPhone},"%") or nor.`company` like
            concat("%",#{query.consignorNameOrPhone},"%"))
        </if>
        <if test="query.consigneeNameOrPhone != null and query.consigneeNameOrPhone != '' ">
            AND (nee.`name` like concat("%",#{query.consigneeNameOrPhone},"%") or nee.`phone` like
            concat("%",#{query.consigneeNameOrPhone},"%") or nee.`company` like
            concat("%",#{query.consigneeNameOrPhone},"%"))
        </if>
        <if test="query.orderNo != null and query.orderNo != '' ">
            AND r.`order_no` like concat("%",concat(#{query.orderNo},"%"))
        </if>
        <if test="query.tidanNo != null and query.tidanNo != '' ">
            AND o.`tidan_no` like concat("%",concat(#{query.tidanNo},"%"))
        </if>
        <if test="query.receiptNo != null and query.receiptNo != '' ">
            AND r.`receipt_no` like concat("%",concat(#{query.receiptNo},"%"))
        </if>
        <if test="query.state != null ">
            AND r.`state` = #{query.state}
        </if>
        <if test="query.beginCreateTime != null and query.endCreateTime != null ">
            AND r.`create_time` between #{query.beginCreateTime} and #{query.endCreateTime}
        </if>
        <if test="query.feeType != null">
            AND r.`fee_type` = #{query.feeType}
        </if>
        <if test="query.customerId != null">
            AND o.`customer_id` = #{query.customerId}
        </if>
        <if test="query.containerNumber != null and query.containerNumber != '' ">
            AND o.`container_number` = #{query.containerNumber}
        </if>
        GROUP BY r.currency_id
    </select>

    <select id="costDetailAmount" resultType="cn.iocoder.yudao.module.wealth.vo.receivable.WealthMoneyAmountVO">
        SELECT r.currency_id,
               SUM(r.total_amount)     AS total_amount,
               SUM(r.tax_amount)       AS tax_amount,
               SUM(r.discount_total)   AS discount_total,
               SUM(r.write_off_amount) AS write_off_amount
        FROM ecw_receivable r
        WHERE r.deleted = 0
        GROUP BY r.currency_id
    </select>
    <select id="batchGenReceiptPage" resultType="cn.iocoder.yudao.module.wealth.vo.receivable.BatchGenReceiptPageVO">
        SELECT
        r.order_id,
        r.order_no,
        e.tidan_no,
        e.transport_id,
        e.shipment_state AS selfNoStatus,
        de.departure_warehouse_id,
        ob.objective_warehouse_id,
        e.status AS order_status,
        e.drawee,
        nee.customer_id AS consignee_id,
        nor.customer_id AS consignor_id
        FROM ecw_receivable r
        LEFT JOIN ecw_order e ON r.order_id = e.order_id
        LEFT JOIN ecw_order_consignee nee ON nee.order_id = r.order_id
        LEFT JOIN ecw_order_consignor nor ON nor.order_id = r.order_id
        LEFT JOIN ecw_order_departure de ON de.order_id = r.order_id
        LEFT JOIN ecw_order_objective ob ON ob.order_id = r.order_id
        WHERE r.deleted = 0 AND r.receipt_id IS NULL
        <include refid="batchGenReceiptPageCondition"/>
        GROUP BY r.order_id
        ORDER BY r.order_id
        LIMIT #{start}, #{size}
    </select>
    <select id="countBatchGenReceiptPage" resultType="java.lang.Integer">
        SELECT COUNT(DISTINCT r.order_id)
        FROM ecw_receivable r
        LEFT JOIN ecw_order e ON r.order_id = e.order_id
        <if test="query.consignee != null and query.consignee != ''">
            LEFT JOIN ecw_order_consignee nee ON nee.order_id = r.order_id
        </if>
        <if test="query.consignor != null and query.consignor != ''">
            LEFT JOIN ecw_order_consignor nor ON nor.order_id = r.order_id
        </if>
        <if test="query.departureWareHouseId != null">
            LEFT JOIN ecw_order_departure de ON de.order_id = r.order_id
        </if>
        <if test="query.objectiveWareHouseId != null or query.destCity != null or query.destCountry != null">
            LEFT JOIN ecw_order_objective ob ON ob.order_id = r.order_id
        </if>
        WHERE r.deleted = 0 AND r.receipt_id IS NULL
        <include refid="batchGenReceiptPageCondition"/>
    </select>
    <select id="calculateReceivableAmountByOrderId"
            resultType="cn.iocoder.yudao.module.wealth.vo.receiptItem.CurrencyAmount">
        SELECT r.currency_id,
               SUM(r.total_amount) AS amount
        FROM ecw_receivable r
        WHERE r.deleted = 0
          AND r.order_id = #{orderId}
          AND r.receipt_id IS NULL
        GROUP BY r.currency_id
    </select>
    <select id="batchGenReceiptReceivablePage"
            resultType="cn.iocoder.yudao.module.wealth.vo.receivable.BatchGenReceiptReceivablePageVO">
        SELECT r.*
        FROM ecw_receivable r
        WHERE r.order_id = #{query.orderId} AND r.receipt_id IS NULL AND r.payment_user = #{query.paymentUser} AND
        r.deleted = 0
        <include refid="feeCondition"></include>
    </select>
    <select id="batchGenReceiptReceivablAmount"
            resultType="cn.iocoder.yudao.module.wealth.vo.receiptItem.CurrencyAmount">
        SELECT
        r.currency_id,
        SUM(r.total_amount) AS amount
        FROM ecw_receivable r
        WHERE r.order_id = #{query.orderId} AND r.receipt_id IS NULL AND r.payment_user = #{query.paymentUser} AND
        r.deleted = 0
        <include refid="feeCondition"></include>
        GROUP BY r.currency_id
    </select>
    <sql id="feeCondition">
        <if test="query.feeSource != null">
            <if test="query.feeSource.size() == 1">
                AND r.fee_source = #{query.feeSource[0]}
            </if>
            <if test="query.feeSource.size() > 1">
                AND r.fee_source IN
                <foreach collection="query.feeSource" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.feeType != null">
            <if test="query.feeType.size() == 1">
                AND r.fee_type = #{query.feeType[0]}
            </if>
            <if test="query.feeType.size() > 1">
                AND r.fee_type IN
                <foreach collection="query.feeType" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.collectionType != null">
            <if test="query.collectionType.size() == 1">
                AND r.collection_type = #{query.collectionType[0]}
            </if>
            <if test="query.collectionType.size() > 1">
                AND r.collection_type IN
                <foreach collection="query.collectionType" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
    </sql>
    <sql id="batchGenReceiptPageCondition">
        <if test="query.orderIds != null">
            <if test="query.orderIds.size() == 1">
                AND e.order_id = #{query.orderIds[0]}
            </if>
            <if test="query.orderIds.size() > 1">
                AND e.order_id IN
                <foreach collection="query.orderIds" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.orderNo != null and query.orderNo != ''">
            AND r.order_no = #{query.orderNo}
        </if>
        <if test="query.tidanNo != null and query.tidanNo!= ''">
            AND e.tidan_no = #{query.tidanNo}
        </if>
        <if test="query.transportId != null">
            AND e.transport_id = #{query.transportId}
        </if>
        <if test="query.departureWareHouseId != null">
            <if test="query.departureWareHouseId.size() == 1">
                AND de.departure_warehouse_id = #{query.departureWareHouseId[0]}
            </if>
            <if test="query.departureWareHouseId.size() > 1">
                AND de.departure_warehouse_id IN
                <foreach collection="query.departureWareHouseId" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.destCountry != null">
            <if test="query.destCountry.size() == 1">
                AND ob.objective_country_id = #{query.destCountry[0]}
            </if>
            <if test="query.destCountry.size() > 1">
                AND ob.objective_country_id IN
                <foreach collection="query.destCountry" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.destCity != null">
            <if test="query.destCity.size() == 1">
                AND ob.objective_id = #{query.destCity[0]}
            </if>
            <if test="query.destCity.size() > 1">
                AND ob.objective_id IN
                <foreach collection="query.destCity" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.objectiveWareHouseId != null">
            <if test="query.objectiveWareHouseId.size() == 1">
                AND ob.objective_warehouse_id = #{query.objectiveWareHouseId[0]}
            </if>
            <if test="query.objectiveWareHouseId.size() > 1">
                AND ob.objective_warehouse_id IN
                <foreach collection="query.objectiveWareHouseId" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </if>
        <if test="query.consignee != null and query.consignee != ''">
            AND nee.name = #{query.consignee}
        </if>
        <if test="query.consignor != null and query.consignor != ''">
            AND nor.name = #{query.consignor}
        </if>
    </sql>

    <select id="getReceivableBoxPage"
            resultType="cn.iocoder.yudao.module.wealth.vo.receivable.ReceivableBoxReportPageVO">
        SELECT
        eb.id,
        eb.self_no,
        eb.dg_date,
        eb.orderCount,
        eb.ladingCount,
        eb.dest_country_id,
        ebs.sl_settled_time,
        ebc.cl_clear_time qg_date,
        ebcu.ul_warehouse_time
        FROM (
        SELECT
        box.id id,
        box.self_no self_no,
        box.dg_date dg_date,
        box.dest_country_id dest_country_id,
        box.start_warehouse_id start_warehouse_id,
        box.dest_warehouse_id dest_warehouse_id,
        box.sl_status sl_status,
        box.shipment_status shipment_status,
        ifnull( preload.orderCount, 0 ) orderCount,
        ifnull( lading.ladingCount, 0 ) ladingCount
        FROM
        ecw_box box
        LEFT JOIN ( SELECT shipment_id, COUNT( DISTINCT order_id ) AS orderCount FROM ecw_box_preload_goods WHERE deleted = 0 AND is_remove = 0 GROUP BY shipment_id ) preload ON box.id = preload.shipment_id
        LEFT JOIN ( SELECT shipment_id, COUNT(*) AS ladingCount FROM ecw_make_bill_of_lading WHERE deleted = 0 AND STATUS = 2 GROUP BY shipment_id ) lading ON box.id = lading.shipment_id
        WHERE
        box.deleted = 0 AND box.pr_status &gt; 21 AND box.dest_country_id > 0
        <if test="query.beginDaogangTime != null and query.endDaogangTime != null">
            AND box.dg_date BETWEEN #{query.beginDaogangTime} AND #{query.endDaogangTime}
        </if>
        <if test="query.selfNo != null and query.selfNo != '' ">
            AND box.self_no LIKE concat('%',#{query.selfNo},'%')
        </if>
        <if test="query.selfNoList != null and query.selfNoList.size() > 0">
            AND box.self_no IN
            <foreach collection="query.selfNoList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="query.startWarehouseIdList != null and query.startWarehouseIdList.size() > 0">
            AND box.start_warehouse_id IN
            <foreach collection="query.startWarehouseIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="query.destCountryId != null and query.destCountryId.size() > 0">
            AND box.dest_country_id IN
            <foreach collection="query.destCountryId" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="query.destWarehouseIdList != null and query.destWarehouseIdList.size() > 0">
            AND box.dest_warehouse_id IN
            <foreach collection="query.destWarehouseIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="query.boxStatus != null and query.boxStatus.size() > 0">
            AND box.shipment_status IN
            <foreach collection="query.boxStatus" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="query.slStatus != null">
            AND box.sl_status = #{query.slStatus}
        </if>
        ) eb
        LEFT JOIN ecw_box_cabinet_unload ebcu ON eb.id = ebcu.shipment_id
        LEFT JOIN ecw_box_settlement ebs ON eb.id = ebs.shipment_id
        LEFT JOIN ecw_box_clearance ebc ON eb.id = ebc.shipment_id
        WHERE 1 = 1
        <if test="query.beginJsDate != null and query.endJsDate != null">
            AND ebs.sl_settled_time BETWEEN #{query.beginJsDate} AND #{query.endJsDate}
        </if>
        <if test="query.beginQingguanTime != null and query.endQingguanTime != null">
            AND ebc.cl_clear_time BETWEEN #{query.beginQingguanTime} AND #{query.endQingguanTime}
        </if>
        <if test="query.beginUlWarehouseTime != null and query.endUlWarehouseTime != null">
            AND ebcu.ul_warehouse_time BETWEEN #{query.beginUlWarehouseTime} AND #{query.endUlWarehouseTime}
        </if>
        <if test="query.ladingBillStatus != null">
            <if test="query.ladingBillStatus == 0">
                AND eb.ladingCount = 0
            </if>
            <if test="query.ladingBillStatus == 1">
                AND eb.ladingCount &gt; 0 AND eb.ladingCount != eb.orderCount
            </if>
            <if test="query.ladingBillStatus == 2">
                AND eb.ladingCount &gt; 0 AND eb.ladingCount = eb.orderCount
            </if>
        </if>
        GROUP BY eb.id
    </select>
    <select id="getReceivableBoxRelationOrders"
            resultType="cn.iocoder.yudao.module.wealth.vo.receivable.ReceivebleBoxRelationOrder">
        SELECT
        ebpg.shipment_id,
        ebpg.order_id,
        eb.dest_country_id
        FROM ecw_box_preload_goods ebpg
        LEFT JOIN ecw_box eb ON ebpg.shipment_id = eb.id
        WHERE ebpg.is_remove = 0
        AND eb.dest_country_id > 0
        AND ebpg.shipment_id IN
        <foreach collection="shipmentIdList" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
        GROUP BY ebpg.shipment_id,ebpg.order_id
    </select>
    <select id="selectBoxReceivablesByOrderIds"
            resultType="cn.iocoder.yudao.module.wealth.dal.dataobject.receivable.ReceivableDO">
        SELECT
        id,
        order_id,
        currency_id,
        tax_amount,
        total_amount,
        discount_total,
        fee_type,
        write_off_amount,
        dest_country_currency_id,
        dest_country_rate,
        dest_country_sub_rate
        FROM ecw_receivable
        WHERE order_id IN
        <foreach collection="orderIds" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
    <select id="getAllBoxId" resultType="java.lang.Long">
        SELECT id FROM ecw_box WHERE deleted = 0 AND pr_status &gt; 21 AND dest_country_id > 0
    </select>
    <select id="getDestWarehouseIdListByDestCity" resultType="java.lang.Long">
        SELECT id FROM ecw_warehouse WHERE deleted = 0
        AND shi IN
        <foreach collection="destCity" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
    <select id="receivablePage" resultType="cn.iocoder.yudao.module.wealth.vo.receivable.ReceivableBackVO">
        SELECT r.*,
        o.marks,
        o.`status`,
        o.abnormal_state,
        o.in_warehouse_state,
        o.shipment_state,
        o.pick_state,
        o.to_warehouse_state,
        o.tidan_no,
        o.container_number AS container_number,
        nor.name AS consignor_name,
        nor.phone AS consignor_phone,
        nor.customer_id AS consignor_id,
        nee.name AS consignee_name,
        nee.customer_id AS consignee_id,
        nee.phone AS consignee_phone
        FROM ecw_receivable r
        LEFT JOIN ecw_order o ON o.order_id = r.order_id
        LEFT JOIN ecw_warehouse_line de ON o.line_id = de.id
        LEFT JOIN ecw_order_consignor nor ON nor.order_id = o.order_id
        LEFT JOIN ecw_order_consignee nee ON nee.order_id = o.order_id
        WHERE r.deleted = 0
        AND r.receipt_id IS NULL
        <if test="query.status != null">
            AND o.`status` = #{query.status}
        </if>
        <if test="query.statusList != null and query.statusList.size() > 0">
            AND o.`status` IN
            <foreach collection="query.statusList" item="status" open="(" separator="," close=")">
                #{status}
            </foreach>
        </if>
        <if test="query.isCargoControl != null">
            AND (o.`is_cargo_control` = #{query.isCargoControl}
            OR o.`is_cargo_control` = #{query.isCargoControl})
        </if>
        <if test="query.customsType != null">
            AND o.`customs_type` = #{query.customsType}
        </if>
        <if test="query.customsTypeList != null and query.customsTypeList.size() > 0">
            AND o.`customs_type` IN
            <foreach collection="query.customsTypeList" item="status" open="(" separator="," close=")">
                #{status}
            </foreach>
        </if>
        <if test="query.transportId != null">
            AND o.`transport_id` = #{query.transportId}
        </if>
        <if test="query.transportIdList != null and query.transportIdList.size() > 0">
            AND o.`transport_id` IN
            <foreach collection="query.transportIdList" item="status" open="(" separator="," close=")">
                #{status}
            </foreach>
        </if>
        <if test="query.marks != null and query.marks != ''">
            AND o.`marks` LIKE CONCAT('%', #{query.marks}, '%')
        </if>
        <if test="query.departureId != null">
            AND de.`start_warehouse_id` = #{query.departureId}
        </if>
        <if test="query.departureIdList != null and query.departureIdList.size() > 0">
            AND de.`start_warehouse_id` IN
            <foreach collection="query.departureIdList" item="status" open="(" separator="," close=")">
                #{status}
            </foreach>
        </if>
        <if test="query.objectiveId != null">
            AND de.`dest_warehouse_id` = #{query.objectiveId}
        </if>
        <if test="query.objectiveIdList != null and query.objectiveIdList.size() > 0">
            AND de.`dest_warehouse_id` IN
            <foreach collection="query.objectiveIdList" item="status" open="(" separator="," close=")">
                #{status}
            </foreach>
        </if>
        <if test="query.title != null and query.title != ''">
            AND CONCAT(r.`title_zh`, r.`title_en`) LIKE CONCAT('%', #{query.title}, '%')
        </if>
        <if test="query.consignorNameOrPhone != null and query.consignorNameOrPhone != ''">
            AND CONCAT(nor.`name`, nor.`phone`, nor.`company`) LIKE CONCAT('%', #{query.consignorNameOrPhone}, '%')
        </if>
        <if test="query.consigneeNameOrPhone != null and query.consigneeNameOrPhone != ''">
            AND CONCAT(nee.`name`, nee.`phone`, nee.`company`) LIKE CONCAT('%', #{query.consigneeNameOrPhone}, '%')
        </if>
        <if test="query.orderNo != null and query.orderNo != ''">
            AND r.`order_no` LIKE CONCAT('%', #{query.orderNo}, '%')
        </if>
        <if test="query.tidanNo != null and query.tidanNo != ''">
            AND o.`tidan_no` LIKE CONCAT('%', #{query.tidanNo}, '%')
        </if>
        <if test="query.receiptNo != null and query.receiptNo != ''">
            AND r.`receipt_no` LIKE CONCAT('%', #{query.receiptNo}, '%')
        </if>
        <if test="query.state != null">
            AND r.`state` = #{query.state}
        </if>
        <if test="query.beginCreateTime != null and query.endCreateTime != null">
            AND r.`create_time` BETWEEN #{query.beginCreateTime} AND #{query.endCreateTime}
        </if>
        <if test="query.feeType != null">
            AND r.`fee_type` = #{query.feeType}
        </if>
        <if test="query.feeTypeList != null and query.feeTypeList.size() > 0">
            AND r.`fee_type` IN
            <foreach collection="query.feeTypeList" item="status" open="(" separator="," close=")">
                #{status}
            </foreach>
        </if>
        <if test="query.customerId != null">
            AND o.`customer_id` = #{query.customerId}
        </if>
        <if test="query.containerNumber != null">
            AND o.`container_number` = #{query.containerNumber}
        </if>
        GROUP BY r.id
    </select>
</mapper>