puzhibing
2026-05-22 6912e074af61b73307d2fc31b1b8f4974f5eb4f3
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<?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.ruoyi.order.mapper.TChargingOrderMapper">
@@ -23,11 +23,22 @@
        <result column="recharge_amount" property="rechargeAmount"/>
        <result column="recharge_payment_type" property="rechargePaymentType"/>
        <result column="recharge_payment_status" property="rechargePaymentStatus"/>
        <result column="pay_method" property="payMethod"/>
        <result column="balance_pay_amount" property="balancePayAmount"/>
        <result column="third_pay_amount" property="thirdPayAmount"/>
        <result column="balance_refund_amount" property="balanceRefundAmount"/>
        <result column="third_refund_amount" property="thirdRefundAmount"/>
        <result column="recharge_serial_number" property="rechargeSerialNumber"/>
        <result column="residual_amount" property="residualAmount"/>
        <result column="order_amount" property="orderAmount"/>
        <result column="app_coupon_id" property="appCouponId"/>
        <result column="coupon_discount_amount" property="couponDiscountAmount"/>
        <result column="is_whitelist" property="isWhitelist"/>
        <result column="whitelist_id" property="whitelistId"/>
        <result column="whitelist_benefit_type" property="whitelistBenefitType"/>
        <result column="whitelist_discount_amount" property="whitelistDiscountAmount"/>
        <result column="whitelist_electric_refund_amount" property="whitelistElectricRefundAmount"/>
        <result column="whitelist_service_refund_amount" property="whitelistServiceRefundAmount"/>
        <result column="vip_discount" property="vipDiscount"/>
        <result column="vip_discount_amount" property="vipDiscountAmount"/>
        <result column="payment_amount" property="paymentAmount"/>
@@ -46,9 +57,9 @@
    <sql id="Base_Column_List">
        id, code, order_type, order_classification, app_user_id, app_user_car_id,site_id, parking_lot_id,
        charging_pile_id, charging_gun_id,
        start_time, end_time, status, recharge_amount, recharge_payment_type, recharge_payment_status,
        start_time, end_time, status, recharge_amount, recharge_payment_type, recharge_payment_status, pay_method, balance_pay_amount, third_pay_amount, balance_refund_amount, third_refund_amount,
        recharge_serial_number,
        order_amount, app_coupon_id, coupon_discount_amount, vip_discount, vip_discount_amount, payment_amount,
        order_amount, app_coupon_id, coupon_discount_amount, is_whitelist, whitelist_id, whitelist_benefit_type, whitelist_discount_amount, whitelist_electric_refund_amount, whitelist_service_refund_amount, vip_discount, vip_discount_amount, payment_amount,
        refund_code,
        refund_amount, refund_status, refund_serial_number, refund_time, create_time,
        del_flag,need_elec,total_electricity
@@ -80,7 +91,8 @@
    </select>
    <select id="chargingOrder" resultType="com.ruoyi.order.api.vo.ChargingOrderVO">
        select t1.*
        select t1.*,
        IFNULL(t1.whitelist_electric_refund_amount, 0) + IFNULL(t1.whitelist_service_refund_amount, 0) as whitelistRefundAmount
        from t_charging_order t1
        where t1.del_flag = 0
        <if test="null != req.code and req.code!=''">
@@ -112,6 +124,18 @@
        </if>
        <if test="req.orderSource != null and req.orderSource == 3 ">
            and t1.tripartite_platform_name = 'XinDianTu'
        </if>
        <if test="req.isWhitelist != null">
            and t1.is_whitelist = #{req.isWhitelist}
        </if>
        <if test="req.paymentType != null and req.paymentType == 1 ">
            and t1.recharge_payment_type = 1
        </if>
        <if test="req.paymentType != null and req.paymentType == 2 ">
            and t1.recharge_payment_type in (2, 3)
        </if>
        <if test="req.paymentType != null and req.paymentType == 3 ">
            and t1.pay_method in (1, 2)
        </if>
        <if test="req.siteId != null ">
            and t1.site_id = #{req.siteId}
@@ -261,6 +285,8 @@
        re.refund_title,
        re.refund_reason,
        re.refund_amount,
        re.balance_refund_amount,
        re.third_refund_amount,
        re.refund_total_amount,
        re.refund_time,
        re.pay_type,
@@ -271,6 +297,7 @@
        co.create_time as pay_time,
        co.id as order_id,
        co.app_user_id as user_id,
        co.pay_method as pay_method,
        1 as type
        FROM t_charging_order_refund re
        LEFT JOIN t_charging_order co ON re.charging_order_id = co.id
@@ -282,6 +309,8 @@
        re.refund_title,
        re.refund_reason,
        re.refund_amount,
        0 as balance_refund_amount,
        re.refund_amount as third_refund_amount,
        re.refund_total_amount,
        re.refund_time,
        re.pay_type,
@@ -292,6 +321,7 @@
        so.create_time as pay_time,
        so.id as order_id,
        so.app_user_id as user_id,
        3 as pay_method,
        2 as type
        FROM t_shopping_order_refund re
        LEFT JOIN t_shopping_order so on re.shopping_order_id = so.id
@@ -303,6 +333,8 @@
        vr.refund_title,
        vr.refund_reason,
        vr.refund_amount,
        0 as balance_refund_amount,
        vr.refund_amount as third_refund_amount,
        vr.refund_total_amount,
        vr.refund_time,
        vr.pay_type,
@@ -313,6 +345,7 @@
        vo.create_time as pay_time,
        vo.id as order_id,
        vo.app_user_id as user_id,
        3 as pay_method,
        3 as type
        FROM t_vip_order_refund vr
        LEFT JOIN t_vip_order vo on vr.vip_order_id = vo.id
@@ -355,28 +388,18 @@
    </select>
    <select id="charge" resultType="com.ruoyi.order.dto.SixChargingDto">
        SELECT
        DATE_FORMAT( subquery.create_time, '%m' ) AS MONTH,
        SUM(electrovalence) AS electrovalence,
        DATE_FORMAT(a.create_time, '%m') AS MONTH,
        SUM(IFNULL(b.period_electric_price, 0)) AS electrovalence,
        SUM(
        CASE
        WHEN subquery.order_source = 0 THEN subquery.service_charge
        WHEN subquery.order_source = 1 THEN subquery.service_charge
        ELSE subquery.service_charge * 0.8
        END
            CASE
            WHEN a.order_source = 0 THEN IFNULL(b.period_service_price, 0)
            WHEN a.order_source = 1 THEN IFNULL(b.period_service_price, 0)
            ELSE IFNULL(b.period_service_price, 0) * 0.8
            END
        ) AS service_charge
        FROM
        (
        SELECT
        a.create_time,
        b.period_electric_price as electrovalence,
        b.period_service_price as service_charge,
        a.order_source
        FROM
        t_charging_order a
        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
        sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money
        from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
        LEFT JOIN t_charging_order_accounting_strategy b ON a.id = b.charging_order_id
        <where>
            a.del_flag = 0 and a.recharge_payment_status = 2 and a.status = 5
            <if test="sixBefore != null">
@@ -389,25 +412,22 @@
                </foreach>
            </if>
        </where>
        ) AS subquery
        GROUP BY
        DATE_FORMAT( subquery.create_time, '%m' )
        DATE_FORMAT(a.create_time, '%m')
    </select>
    <select id="circle" resultType="com.ruoyi.order.dto.SixCircleDto">
        SELECT
        site_id as siteId,
        a.site_id as siteId,
        ROUND(SUM(CASE
        WHEN a.order_source = 0 THEN b.money
        WHEN a.order_source = 1 THEN b.money
        ELSE (b.period_electric_price + b.period_service_price * 0.8)
        WHEN a.order_source = 0 THEN IFNULL(b.period_electric_price, 0) + IFNULL(b.period_service_price, 0)
        WHEN a.order_source = 1 THEN IFNULL(b.period_electric_price, 0) + IFNULL(b.period_service_price, 0)
        ELSE (IFNULL(b.period_electric_price, 0) + IFNULL(b.period_service_price, 0) * 0.8)
        END), 2) AS paymentAmount
        FROM
        t_charging_order a
        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
        sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money
        from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
        LEFT JOIN t_charging_order_accounting_strategy b ON a.id = b.charging_order_id
        <where>
            a.del_flag = 0 and a.recharge_payment_status = 2 and a.status = 5
            <if test="siteIds != null and siteIds.size() > 0">
@@ -417,7 +437,7 @@
                </foreach>
            </if>
            <if test="sixBefore != null">
                AND create_time &gt;= #{sixBefore}
                AND a.create_time &gt;= #{sixBefore}
            </if>
        </where>
        GROUP BY a.site_id
@@ -425,13 +445,25 @@
    </select>
    <select id="countAll" resultType="java.util.Map">
        select sum(electrovalence) as electrovalence,sum(service_charge) as
        service_charge,ROUND(sum(electrovalence+service_charge) * 0.006, 2) as commission_amount,sum(sharing_amount) as
        sharing_amount
        from t_charging_order
        where del_flag = 0 and recharge_payment_status = 2 and status = 5
        SELECT
        ROUND(SUM(IFNULL(b.period_electric_price, 0)), 2) AS electrovalence,
        ROUND(SUM(CASE
        WHEN a.order_source = 2 THEN IFNULL(b.period_service_price, 0) * 0.8
        ELSE IFNULL(b.period_service_price, 0)
        END), 2) AS service_charge,
        ROUND(SUM(CASE
        WHEN a.order_source = 2 THEN 0
        ELSE IFNULL(b.period_electric_price, 0) + IFNULL(b.period_service_price, 0)
        END) * 0.006, 2) AS commission_amount,
        ROUND(SUM(CASE
        WHEN a.order_source = 2 THEN IFNULL(b.period_service_price, 0) * 0.2
        ELSE 0
        END), 2) AS sharing_amount
        FROM t_charging_order a
        LEFT JOIN t_charging_order_accounting_strategy b ON a.id = b.charging_order_id
        WHERE a.del_flag = 0 AND a.recharge_payment_status = 2 AND a.status = 5
        <if test="siteIds != null and siteIds.size() > 0">
            AND site_id IN
            AND a.site_id IN
            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
                #{siteId}
            </foreach>
@@ -987,6 +1019,7 @@
        b.`name` as siteName,
        a.`status`,
        a.recharge_payment_type as rechargePaymentType,
        a.pay_method as payMethod,
        a.recharge_payment_status as rechargePaymentStatus,
        a.site_id as siteId,
        a.charging_pile_id as chargingPileId,
@@ -1006,13 +1039,22 @@
        a.payment_amount as orderAmount,
        a.vip_discount_amount as vipDiscountAmount,
        e.refund_amount as refundAmount,
        a.is_whitelist as isWhitelist,
        IFNULL(a.whitelist_electric_refund_amount, 0) + IFNULL(a.whitelist_service_refund_amount, 0) as whitelistRefundAmount,
        IFNULL(a.whitelist_electric_refund_amount, 0) as whitelistElectricRefundAmount,
        IFNULL(a.whitelist_service_refund_amount, 0) as whitelistServiceRefundAmount,
        c.license_plate as licensePlate,
        f.phone,
        a.payment_amount as paymentAmount,
        a.third_pay_amount as thirdPayAmount,
        a.balance_pay_amount as balancePayAmount,
        e.refund_amount as residualAmount,
        h.electrovalence as electrovalence,
        CASE WHEN a.order_source = 1 THEN h.serviceCharge ELSE h.serviceCharge * 0.8 END as serviceCharge,
        CASE WHEN a.order_source = 2 THEN h.serviceCharge * 0.2 ELSE 0 END as sharingAmount,
        0 as commissionAmount,
        <!-- 引流平台分佣按三方订单原始服务费的20%计算,导出需展示在白名单字段前。 -->
        CASE WHEN a.order_source = 2 THEN IFNULL(h.serviceCharge, 0) * 0.2 ELSE 0 END as sharingAmount,
        a.tripartite_platform_name as tripartitePlatformName,
        a.create_time as createTime,
        a.start_time as startTime,
@@ -1061,6 +1103,9 @@
        <if test="req.status != null ">
            and a.status = #{req.status}
        </if>
        <if test="req.isWhitelist != null">
            and a.is_whitelist = #{req.isWhitelist}
        </if>
        <if test="req.siteId != null ">
            and a.site_id = #{req.siteId}
        </if>
@@ -1085,7 +1130,14 @@
        aa.electricity,
        aa.rechargeAmount,
        aa.rechargePaymentType,
        aa.payMethod,
        aa.isWhitelist,
        aa.whitelistRefundAmount,
        aa.whitelistElectricRefundAmount,
        aa.whitelistServiceRefundAmount,
        aa.paymentAmount,
        aa.thirdPayAmount,
        aa.balancePayAmount,
        aa.electrovalence,
        aa.serviceCharge,
        aa.orderSource,
@@ -1116,7 +1168,14 @@
            b.electricity,
            b.recharge_amount as rechargeAmount,
            b.recharge_payment_type as rechargePaymentType,
            b.pay_method as payMethod,
            b.is_whitelist as isWhitelist,
            IFNULL(b.whitelist_electric_refund_amount, 0) + IFNULL(b.whitelist_service_refund_amount, 0) as whitelistRefundAmount,
            IFNULL(b.whitelist_electric_refund_amount, 0) as whitelistElectricRefundAmount,
            IFNULL(b.whitelist_service_refund_amount, 0) as whitelistServiceRefundAmount,
            b.payment_amount as paymentAmount,
            b.third_pay_amount as thirdPayAmount,
            b.balance_pay_amount as balancePayAmount,
            b.electrovalence,
            b.service_charge as serviceCharge,
            b.order_source as orderSource,
@@ -1174,6 +1233,9 @@
            <if test="req.status != null ">
                and b.status = #{req.status}
            </if>
            <if test="req.isWhitelist != null">
                and b.is_whitelist = #{req.isWhitelist}
            </if>
            <if test="req.siteId != null ">
                and b.site_id = #{req.siteId}
            </if>
@@ -1184,8 +1246,9 @@
                and b.end_time between #{endTime1} and #{endTime2}
            </if>
            and b.start_time IS NOT NULL and b.end_time is not null
        ) as aa group by aa.id, aa.`code`, aa.siteId, aa.siteName, aa.orderType, aa.terminalName, aa.electricity, aa.rechargeAmount, aa.paymentAmount, aa.electrovalence, aa.serviceCharge, aa.tripartitePlatformName,
        aa.startTime, aa.endTime, aa.chargingSecond, aa.startSoc, aa.endSoc, aa.`status`, aa.endMode, aa.phone, aa.licensePlate, aa.orderSource, aa.rechargePaymentType order by aa.startTime desc
        ) as aa group by aa.id, aa.`code`, aa.siteId, aa.siteName, aa.orderType, aa.terminalName, aa.electricity, aa.rechargeAmount, aa.paymentAmount, aa.thirdPayAmount, aa.balancePayAmount, aa.electrovalence, aa.serviceCharge, aa.tripartitePlatformName,
        aa.startTime, aa.endTime, aa.chargingSecond, aa.startSoc, aa.endSoc, aa.`status`, aa.endMode, aa.phone, aa.licensePlate, aa.orderSource, aa.rechargePaymentType, aa.payMethod,
        aa.isWhitelist, aa.whitelistRefundAmount, aa.whitelistElectricRefundAmount, aa.whitelistServiceRefundAmount order by aa.startTime desc
    </select>
@@ -1245,6 +1308,9 @@
            <if test="req.status != null ">
                and co.status = #{req.status}
            </if>
            <if test="req.isWhitelist != null">
                and co.is_whitelist = #{req.isWhitelist}
            </if>
            <if test="req.siteId != null ">
                and co.site_id = #{req.siteId}
            </if>
@@ -1298,6 +1364,9 @@
        <if test="req.status != null ">
            and co.status = #{req.status}
        </if>
        <if test="req.isWhitelist != null">
            and co.is_whitelist = #{req.isWhitelist}
        </if>
        <if test="req.siteId != null ">
            and co.site_id = #{req.siteId}
        </if>
@@ -1340,6 +1409,9 @@
        </if>
        <if test="req.status != null ">
            and t1.status = #{req.status}
        </if>
        <if test="req.isWhitelist != null">
            and t1.is_whitelist = #{req.isWhitelist}
        </if>
        <if test="req.siteId != null ">
            and t1.site_id = #{req.siteId}
@@ -2052,6 +2124,67 @@
    </select>
    <sql id="ChargingOrderSummaryWhere">
        where b.del_flag = 0 and b.recharge_payment_status = 2 and b.start_time IS NOT NULL and b.end_time is not null
        <if test="null != req.code and req.code!=''">
            and b.code LIKE CONCAT('%',#{req.code},'%')
        </if>
        <if test="null != req.userIds and req.userIds.size()>0">
            and b.app_user_id in
            <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="null != req.siteIds and req.siteIds.size()>0">
            and b.site_id in
            <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="req.orderType != null ">
            and b.order_type = #{req.orderType}
        </if>
        <if test="req.status != null ">
            and b.status = #{req.status}
        </if>
        <if test="req.orderSource != null and req.orderSource == 1 ">
            and (b.order_source = 0 or b.order_source = 1 )
        </if>
        <if test="req.orderSource != null and req.orderSource == 2 ">
            and b.tripartite_platform_name = 'KuaiDian'
        </if>
        <if test="req.orderSource != null and req.orderSource == 3 ">
            and b.tripartite_platform_name = 'XinDianTu'
        </if>
        <if test="req.isWhitelist != null">
            and b.is_whitelist = #{req.isWhitelist}
        </if>
        <if test="req.paymentType != null and req.paymentType == 1 ">
            and b.recharge_payment_type = 1
        </if>
        <if test="req.paymentType != null and req.paymentType == 2 ">
            and b.recharge_payment_type in (2, 3)
        </if>
        <if test="req.paymentType != null and req.paymentType == 3 ">
            and b.pay_method in (1, 2)
        </if>
        <if test="req.siteId != null ">
            and b.site_id = #{req.siteId}
        </if>
        <if test="req.pileId != null ">
            and b.charging_pile_id = #{req.pileId}
        </if>
        <if test="req.gunId != null ">
            and b.charging_gun_id = #{req.gunId}
        </if>
        <if test="startTime1 != null and startTime1!=''">
            and (b.pay_time between #{startTime1} and #{startTime2})
        </if>
        <if test="endTime1 != null and endTime1!=''">
            and (b.end_time between #{endTime1} and #{endTime2})
        </if>
    </sql>
    <select id="chargingOrderNolimit" resultType="map">
        select
        sum(aa.time) as `time`,
@@ -2064,62 +2197,96 @@
            b.id,
            (UNIX_TIMESTAMP(b.end_time) - UNIX_TIMESTAMP(b.start_time)) as time,
            sum(a.charging_capacity) as total,
            sum(a.period_electric_price) as  electronicMoney,
            sum(a.period_electric_price) as electronicMoney,
            sum(CASE WHEN b.order_source = 1 THEN a.period_service_price ELSE a.period_service_price * 0.8 END) as serviceMoney,
            sum(a.period_electric_price + (CASE WHEN b.order_source = 1 THEN a.period_service_price ELSE a.period_service_price * 0.8 END)) as income
            from `charging_pile_order`.t_charging_order_accounting_strategy a
            left join `charging_pile_order`.t_charging_order b on (a.charging_order_id = b.id)
            where b.del_flag = 0 and b.recharge_payment_status = 2 and b.start_time IS NOT NULL and b.end_time is not null
            <if test="null != req.code and req.code!=''">
                and b.code LIKE CONCAT('%',#{req.code},'%')
            </if>
            <if test="null != req.userIds and req.userIds.size()>0">
                and b.app_user_id in
                <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="null != req.siteIds and req.siteIds.size()>0">
                and b.site_id in
                <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="req.orderType != null ">
                and b.order_type = #{req.orderType}
            </if>
            <if test="req.status != null ">
                and b.status = #{req.status}
            </if>
            <if test="req.orderSource != null and req.orderSource == 1 ">
                and (b.order_source = 0 or b.order_source = 1 )
            </if>
            <if test="req.orderSource != null and req.orderSource == 2 ">
                and b.tripartite_platform_name = 'KuaiDian'
            </if>
            <if test="req.orderSource != null and req.orderSource == 3 ">
                and b.tripartite_platform_name = 'XinDianTu'
            </if>
            <if test="req.siteId != null ">
                and b.site_id = #{req.siteId}
            </if>
            <if test="req.pileId != null ">
                and b.charging_pile_id = #{req.pileId}
            </if>
            <if test="req.gunId != null ">
                and b.charging_gun_id = #{req.gunId}
            </if>
            <if test="startTime1 != null and startTime1!=''">
                and (b.start_time between #{startTime1} and #{startTime2})
            </if>
            <if test="endTime1 != null and endTime1!=''">
                and (b.end_time between #{endTime1} and #{endTime2})
            </if>
            <include refid="ChargingOrderSummaryWhere"/>
            group by b.id,time
        ) as aa
    </select>
    <select id="chargingOrderFundSummary" resultType="map">
        select
        sum(CASE WHEN aa.recharge_payment_type = 1 and aa.thirdNetAmount > 0 THEN aa.thirdNetAmount ELSE 0 END) as wechatIncome,
        sum(CASE WHEN aa.recharge_payment_type in (2, 3) and aa.thirdNetAmount > 0 THEN aa.thirdNetAmount ELSE 0 END) as alipayIncome,
        0 as balanceIncome,
        0 as platformIncomeTotal,
        0 as partnerIncomeTotal,
        sum(CASE WHEN aa.is_whitelist = 1 THEN IFNULL(aa.electrovalence, 0) + IFNULL(aa.serviceCharge, 0) ELSE 0 END) as whitelistChargingIncome,
        sum(CASE WHEN aa.is_whitelist = 1 THEN IFNULL(aa.whitelist_electric_refund_amount, 0) + IFNULL(aa.whitelist_service_refund_amount, 0) ELSE 0 END) as whitelistRefund
        from (
            select
            b.id,
            b.recharge_payment_type,
            b.is_whitelist,
            b.electrovalence,
            b.service_charge as serviceCharge,
            b.whitelist_electric_refund_amount,
            b.whitelist_service_refund_amount,
            IFNULL(b.third_pay_amount, CASE WHEN b.pay_method = 3 THEN IFNULL(b.payment_amount, IFNULL(b.recharge_amount, 0)) ELSE 0 END) - IFNULL(b.third_refund_amount, CASE WHEN b.pay_method = 3 THEN IFNULL(b.refund_amount, 0) ELSE 0 END) as thirdNetAmount
            from `charging_pile_order`.t_charging_order b
            <include refid="ChargingOrderSummaryWhere"/>
        ) as aa
    </select>
    <select id="chargingOrderSummaryOrderIds" resultType="java.lang.Long">
        select b.id
        from `charging_pile_order`.t_charging_order b
        <include refid="ChargingOrderSummaryWhere"/>
    </select>
    <select id="exchangeCodeBalanceSummary" resultType="map">
        select
        sum(CASE WHEN change_type = 2 THEN IFNULL(used_amount, 0) - IFNULL(gift_used_amount, 0) WHEN change_type = 3 THEN -(IFNULL(used_amount, 0) - IFNULL(gift_used_amount, 0)) ELSE 0 END) as balanceIncome,
        sum(CASE WHEN change_type = 2 THEN IFNULL(gift_used_amount, 0) WHEN change_type = 3 THEN -IFNULL(gift_used_amount, 0) ELSE 0 END) as balanceGiftIncome
        from `charging_pile_other`.t_exchange_code_use_record
        where del_flag = 0 and change_type in (2, 3)
        <if test="orderIds != null and orderIds.size()>0">
            and order_id in
            <foreach collection="orderIds" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
    </select>
    <select id="exchangeCodeBalanceIncomeByOrderIds" resultType="map">
        select
        order_id as orderId,
        sum(CASE WHEN change_type = 2 THEN IFNULL(used_amount, 0) - IFNULL(gift_used_amount, 0) WHEN change_type = 3 THEN -(IFNULL(used_amount, 0) - IFNULL(gift_used_amount, 0)) ELSE 0 END) as balanceIncome,
        sum(CASE WHEN change_type = 2 THEN IFNULL(gift_used_amount, 0) WHEN change_type = 3 THEN -IFNULL(gift_used_amount, 0) ELSE 0 END) as balanceGiftIncome
        from `charging_pile_other`.t_exchange_code_use_record
        where del_flag = 0 and order_id is not null and order_id != 0 and change_type in (2, 3)
        <if test="orderIds != null and orderIds.size()>0">
            and order_id in
            <foreach collection="orderIds" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        group by order_id
    </select>
    <select id="exchangeCodeBalanceIncomeDetail" resultType="com.ruoyi.order.api.vo.ChargingOrderBalanceIncomeDetailVO">
        select
        p.id as packageId,
        p.package_name as packageName,
        sum(CASE WHEN r.change_type = 2 THEN IFNULL(r.used_amount, 0) - IFNULL(r.gift_used_amount, 0) WHEN r.change_type = 3 THEN -(IFNULL(r.used_amount, 0) - IFNULL(r.gift_used_amount, 0)) ELSE 0 END) as balanceIncome,
        sum(CASE WHEN r.change_type = 2 THEN IFNULL(r.gift_used_amount, 0) WHEN r.change_type = 3 THEN -IFNULL(r.gift_used_amount, 0) ELSE 0 END) as giftIncome
        from `charging_pile_other`.t_exchange_code_use_record r
        left join `charging_pile_other`.t_exchange_code_detail d on r.detail_id = d.id
        left join `charging_pile_other`.t_exchange_code_package p on d.package_id = p.id
        where r.del_flag = 0 and r.change_type in (2, 3)
        <if test="orderIds != null and orderIds.size()>0">
            and r.order_id in
            <foreach collection="orderIds" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        group by p.id, p.package_name
        having balanceIncome != 0 or giftIncome != 0
        order by p.id desc
    </select>
    <select id="countOrdersByDate" resultType="com.ruoyi.order.vo.OrderCountByDate">