MerchantFundMapper.xml 6.49 KB
<?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="com.diligrp.rider.mapper.MerchantFundMapper">

    <sql id="merchantBillFilter">
        WHERE o.is_del = 0
          AND o.status IN (2, 3, 4, 6, 7, 8, 9)
          AND o.pay_time &gt;= #{startTime}
          AND o.pay_time &lt; #{endTime}
        <if test="cityId != null">
          AND o.city_id = #{cityId}
        </if>
        <if test="keyword != null and keyword != ''">
          AND ms.name LIKE CONCAT('%', #{keyword}, '%')
        </if>
    </sql>

    <sql id="merchantBillDetailFilter">
        WHERE o.is_del = 0
          AND o.status IN (2, 3, 4, 6, 7, 8, 9)
          AND o.pay_time &gt;= #{startTime}
          AND o.pay_time &lt; #{endTime}
          AND CAST(o.store_oid AS CHAR) = #{outStoreId}
        <if test="cityId != null">
          AND o.city_id = #{cityId}
        </if>
    </sql>

    <sql id="riderBillFilter">
        WHERE o.is_del = 0
          AND o.rider_id &gt; 0
          AND o.status IN (6, 7, 8, 9)
          AND o.complete_time &gt;= #{startTime}
          AND o.complete_time &lt; #{endTime}
        <if test="cityId != null">
          AND o.city_id = #{cityId}
        </if>
        <if test="keyword != null and keyword != ''">
          AND (r.user_nickname LIKE CONCAT('%', #{keyword}, '%') OR r.mobile LIKE CONCAT('%', #{keyword}, '%'))
        </if>
    </sql>

    <sql id="riderBillDetailFilter">
        WHERE o.is_del = 0
          AND o.rider_id = #{riderId}
          AND o.status IN (6, 7, 8, 9)
          AND o.complete_time &gt;= #{startTime}
          AND o.complete_time &lt; #{endTime}
        <if test="cityId != null">
          AND o.city_id = #{cityId}
        </if>
    </sql>

    <select id="countMerchantBills" resultType="long">
        SELECT COUNT(1)
        FROM (
            SELECT ms.out_store_id
            FROM orders o
            INNER JOIN merchant_store ms ON ms.out_store_id = CAST(o.store_oid AS CHAR)
                AND ms.city_id = o.city_id
                AND ms.is_del = 0
            <include refid="merchantBillFilter"/>
            GROUP BY ms.out_store_id
        ) t
    </select>

    <select id="selectMerchantBills" resultType="com.diligrp.rider.vo.MerchantBillItemVO">
        SELECT
            MAX(ms.id) AS storeId,
            ms.out_store_id AS outStoreId,
            MAX(ms.name) AS storeName,
            MAX(ms.city_id) AS cityId,
            COUNT(o.id) AS orderCount,
            COALESCE(SUM(o.money), 0) AS orderAmount,
            COALESCE(SUM(o.money_delivery), 0) AS deliveryAmount,
            COALESCE(SUM(rr.refund_amount), 0) AS refundAmount,
            COALESCE(SUM(o.money), 0) - COALESCE(SUM(rr.refund_amount), 0) AS merchantReceivableAmount
        FROM orders o
        INNER JOIN merchant_store ms ON ms.out_store_id = CAST(o.store_oid AS CHAR)
            AND ms.city_id = o.city_id
            AND ms.is_del = 0
        LEFT JOIN (
            SELECT oid, SUM(money) AS refund_amount
            FROM orders_refund_record
            WHERE status = 1
            GROUP BY oid
        ) rr ON rr.oid = o.id
        <include refid="merchantBillFilter"/>
        GROUP BY ms.out_store_id
        ORDER BY MAX(o.pay_time) DESC
        LIMIT #{offset}, #{pageSize}
    </select>

    <select id="countMerchantBillDetails" resultType="long">
        SELECT COUNT(1)
        FROM orders o
        <include refid="merchantBillDetailFilter"/>
    </select>

    <select id="selectMerchantBillDetails" resultType="com.diligrp.rider.vo.MerchantBillDetailItemVO">
        SELECT
            o.id AS orderId,
            o.order_no AS orderNo,
            o.pay_time AS payTime,
            o.complete_time AS completeTime,
            o.status AS status,
            o.money AS orderAmount,
            o.money_delivery AS deliveryAmount,
            COALESCE(rr.refund_amount, 0) AS refundAmount
        FROM orders o
        LEFT JOIN (
            SELECT oid, SUM(money) AS refund_amount
            FROM orders_refund_record
            WHERE status = 1
            GROUP BY oid
        ) rr ON rr.oid = o.id
        <include refid="merchantBillDetailFilter"/>
        ORDER BY o.pay_time DESC, o.id DESC
        LIMIT #{offset}, #{pageSize}
    </select>

    <select id="countRiderBills" resultType="long">
        SELECT COUNT(1)
        FROM (
            SELECT o.rider_id
            FROM orders o
            INNER JOIN rider r ON r.id = o.rider_id AND r.is_del = 0
            <include refid="riderBillFilter"/>
            GROUP BY o.rider_id
        ) t
    </select>

    <select id="selectRiderBills" resultType="com.diligrp.rider.vo.RiderBillItemVO">
        SELECT
            o.rider_id AS riderId,
            MAX(r.user_nickname) AS riderName,
            MAX(r.mobile) AS mobile,
            COUNT(o.id) AS orderCount,
            COALESCE(SUM(o.money_delivery), 0) AS deliveryAmount,
            COALESCE(SUM(o.rider_income), 0) AS riderIncomeAmount,
            COALESCE(SUM(rr.refund_amount), 0) AS refundAdjustAmount,
            COALESCE(SUM(o.rider_income), 0) AS settleableAmount
        FROM orders o
        INNER JOIN rider r ON r.id = o.rider_id AND r.is_del = 0
        LEFT JOIN (
            SELECT oid, SUM(money) AS refund_amount
            FROM orders_refund_record
            WHERE status = 1
            GROUP BY oid
        ) rr ON rr.oid = o.id
        <include refid="riderBillFilter"/>
        GROUP BY o.rider_id
        ORDER BY MAX(o.complete_time) DESC
        LIMIT #{offset}, #{pageSize}
    </select>

    <select id="countRiderBillDetails" resultType="long">
        SELECT COUNT(1)
        FROM orders o
        <include refid="riderBillDetailFilter"/>
    </select>

    <select id="selectRiderBillDetails" resultType="com.diligrp.rider.vo.RiderBillDetailItemVO">
        SELECT
            o.id AS orderId,
            o.order_no AS orderNo,
            o.complete_time AS completeTime,
            o.status AS status,
            o.money_delivery AS deliveryAmount,
            o.rider_income AS riderIncomeAmount,
            COALESCE(rr.refund_amount, 0) AS refundAmount,
            o.rider_income AS settleableAmount
        FROM orders o
        LEFT JOIN (
            SELECT oid, SUM(money) AS refund_amount
            FROM orders_refund_record
            WHERE status = 1
            GROUP BY oid
        ) rr ON rr.oid = o.id
        <include refid="riderBillDetailFilter"/>
        ORDER BY o.complete_time DESC, o.id DESC
        LIMIT #{offset}, #{pageSize}
    </select>

</mapper>