puzhibing
2024-09-10 951cd384e7b81eb7686e303f77992340cc91e6d1
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -358,7 +358,8 @@
        SELECT
            DATE_FORMAT( create_time, '%Y-%m-%d %H' ) as time,
   SUM(service_charge) as servicecharge,
   SUM(electrovalence) as electrovalence
   SUM(electrovalence) as electrovalence,
    count(1) as orderCount
        FROM
            t_charging_order
        <where>
@@ -380,7 +381,8 @@
        SELECT
        DATE_FORMAT( create_time, '%Y-%m-%d' ) as time,
        SUM(service_charge) as servicecharge,
        SUM(electrovalence) as electrovalence
        SUM(electrovalence) as electrovalence,
        count(1) as orderCount
        FROM
        t_charging_order
        <where>
@@ -402,7 +404,8 @@
        SELECT
        DATE_FORMAT( create_time, '%Y-%m-%d' ) as time,
        SUM(service_charge) as servicecharge,
        SUM(electrovalence) as electrovalence
        SUM(electrovalence) as electrovalence,
        count(1) as orderCount
        FROM
        t_charging_order
        <where>
@@ -424,7 +427,8 @@
        SELECT
        DATE_FORMAT( create_time, '%Y-%m-%d' ) as time,
        SUM(service_charge) as servicecharge,
        SUM(electrovalence) as electrovalence
        SUM(electrovalence) as electrovalence,
        count(1) as orderCount
        FROM
        t_charging_order
        <where>
@@ -443,6 +447,337 @@
    </select>
    <select id="getByDate" resultType="java.util.Map">
        SELECT
        DATE_FORMAT( create_time, '%Y-%m-%d' ) as time,
        SUM(service_charge) as servicecharge,
        SUM(electrovalence) as electrovalence,
        count(1) as orderCount
        FROM
        t_charging_order
        <where>
            del_flag = 0 and recharge_payment_status = 2 and  ISNULL(refund_status)
            <if test="chargingOrderIds != null and chargingOrderIds.size() > 0">
                AND id IN
                <foreach collection="chargingOrderIds" item="chargingOrderId" open="(" separator="," close=")">
                    #{chargingOrderId}
                </foreach>
            </if>
        </where>
        GROUP BY
        time
        ORDER BY
        time
    </select>
    <select id="queryPower" resultType="java.util.Map">
        SELECT
            'today' AS data_type,
            DATE_FORMAT(create_time, '%Y-%m-%d %H') AS TIME,
    SUM(power) AS power
        FROM
            t_charging_order
        WHERE
            del_flag = 0
          AND recharge_payment_status = 2
          AND ISNULL(refund_status)
          AND DATE(create_time) = CURDATE()
        <if test="siteIds != null and siteIds.size() > 0">
            AND site_id IN
            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
                #{siteId}
            </foreach>
        </if>
        GROUP BY
            TIME
        UNION ALL
        SELECT
            'yesterday' AS data_type,
            DATE_FORMAT(create_time, '%Y-%m-%d %H') AS TIME,
    SUM(power) AS power
        FROM
            t_charging_order
        WHERE
            del_flag = 0
          AND recharge_payment_status = 2
          AND ISNULL(refund_status)
          AND DATE(create_time) = CURDATE() - INTERVAL 1 DAY
        <if test="siteIds != null and siteIds.size() > 0">
            AND site_id IN
            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
                #{siteId}
            </foreach>
        </if>
        GROUP BY
            TIME
        ORDER BY
            TIME;
    </select>
    <select id="queryPowerLevel" resultType="java.util.Map">
        SELECT
            count(CASE WHEN power BETWEEN 0 AND 30 THEN 1 ELSE 0 END) AS count_0_30,
            count(CASE WHEN power BETWEEN 31 AND 60 THEN 1 ELSE 0 END) AS count_31_60,
            count(CASE WHEN power BETWEEN 61 AND 120 THEN 1 ELSE 0 END) AS count_61_120,
            count(CASE WHEN power BETWEEN 121 AND 300 THEN 1 ELSE 0 END) AS count_121_300,
            count(CASE WHEN power > 300 THEN 1 ELSE 0 END) AS count_above_300
        FROM
            t_charging_order
        WHERE
            del_flag = 0
          AND recharge_payment_status = 2
          AND ISNULL(refund_status)
        <if test="siteIds != null and siteIds.size() > 0">
            AND site_id IN
            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
                #{siteId}
            </foreach>
        </if>
        <if test="statisticsQueryDto.dayType =1">
            AND DATE(create_time) = CURDATE()
        </if>
        <if test="statisticsQueryDto.dayType =2">
            AND WEEKOFYEAR(create_time) = WEEKOFYEAR(CURDATE())
        </if>
        <if test="statisticsQueryDto.dayType =3">
            AND MONTH(create_time) = MONTH(CURDATE())
        </if>
        <if test="statisticsQueryDto.dayType =4">
           AND YEAR(create_time) = YEAR(CURDATE())
        </if>
        <if test="statisticsQueryDto.dayType =5">
        <if test="statisticsQueryDto.startTime != null">
            AND create_time >= #{statisticsQueryDto.startTime}
        </if>
        <if test="statisticsQueryDto.endTime != null">
            AND create_time <= #{statisticsQueryDto.endTime}
        </if>
        </if>
    </select>
    <select id="usersDay" resultType="java.util.Map">
        SELECT
            'today' AS data_type,
            '1' as type,
            DATE_FORMAT( create_time, '%Y-%m-%d %H' ) AS TIME,
   count(DISTINCT  app_user_id) AS counts
        FROM
            t_charging_order
        WHERE
            del_flag = 0
          AND recharge_payment_status = 2
          AND ISNULL( refund_status )
          AND DATE ( create_time ) = CURDATE()
        GROUP BY
            TIME
        UNION all
        SELECT
            'today' AS data_type,
            '2' as type,
            DATE_FORMAT( create_time, '%Y-%m-%d %H' ) AS TIME,
   count(1) AS counts
        FROM
            charging_pile_account.t_app_user
        WHERE
            del_flag = 0
          AND DATE ( create_time ) = CURDATE()
        GROUP BY
            TIME
    </select>
    <select id="usersByQuery" resultType="java.util.Map">
        SELECT
            'today' AS data_type,
            '1' as type,
            DATE_FORMAT( create_time, '%Y-%m-%d' ) AS TIME,
   count(DISTINCT  app_user_id) AS counts
        FROM
            t_charging_order
        WHERE
            del_flag = 0
          AND recharge_payment_status = 2
          AND ISNULL( refund_status )
        <if test="statisticsQueryDto.dayType =1 ">
            AND DATE(create_time) = CURDATE()
        </if>
        <if test="statisticsQueryDto.dayType =2 ">
            AND WEEKOFYEAR(create_time) = WEEKOFYEAR(CURDATE())
        </if>
        <if test="statisticsQueryDto.dayType =3 ">
            AND MONTH(create_time) = MONTH(CURDATE())
        </if>
        <if test="statisticsQueryDto.dayType =4">
          AND YEAR(create_time) = YEAR(CURDATE())
        </if>
        <if test="statisticsQueryDto.dayType =5">
        <if test="statisticsQueryDto.startTime != null">
            AND create_time >= #{statisticsQueryDto.startTime}
        </if>
        <if test="statisticsQueryDto.endTime != null">
            AND create_time <= #{statisticsQueryDto.endTime}
        </if>
        </if>
        GROUP BY
            TIME
        UNION all
        SELECT
            'today' AS data_type,
            '2' as type,
            DATE_FORMAT( create_time, '%Y-%m-%d' ) AS TIME,
   count(1) AS counts
        FROM
            charging_pile_account.t_app_user
        WHERE
            del_flag = 0
        <if test="statisticsQueryDto.dayType =1 ">
            AND DATE(create_time) = CURDATE()
        </if>
        <if test="statisticsQueryDto.dayType =2 ">
            AND WEEKOFYEAR(create_time) = WEEKOFYEAR(CURDATE())
        </if>
        <if test="statisticsQueryDto.dayType =3 ">
            AND MONTH(create_time) = MONTH(CURDATE())
        </if>
        <if test="statisticsQueryDto.dayType =4">
            AND YEAR(create_time) = YEAR(CURDATE())
        </if>
        <if test="statisticsQueryDto.dayType =5">
            <if test="statisticsQueryDto.startTime != null">
                AND create_time >= #{statisticsQueryDto.startTime}
            </if>
            <if test="statisticsQueryDto.endTime != null">
                AND create_time <= #{statisticsQueryDto.endTime}
            </if>
        </if>
        GROUP BY
            TIME
    </select>
    <select id="getUserTagCount" resultType="java.util.Map">
        SELECT user_tag_id,COUNT(1) as count from (
            SELECT
            a.app_user_id,
            a.user_tag_id,
            a.create_time
            FROM
            charging_pile_account.t_app_user_tag a
            JOIN (
            SELECT
            app_user_id,
            MAX(create_time) AS max_create_time
            FROM
            charging_pile_account.t_app_user_tag
            GROUP BY
            app_user_id
            ) b ON a.app_user_id = b.app_user_id AND a.create_time = b.max_create_time
            ) o
        GROUP BY o.user_tag_id
    </select>
    <select id="getVipCount" resultType="java.util.Map">
        SELECT vip_id,count(1) as Counts
        FROM charging_pile_account.t_app_user
        WHERE del_flag = 0
        GROUP BY vip_id
    </select>
    <select id="unitConsumption" resultType="java.util.Map">
        SELECT
            au.company_id as companyId,
            SUM( co.charging_capacity )  as chargingCapacity
        FROM
            charging_pile_order.t_charging_order co
                LEFT JOIN charging_pile_account.t_app_user au ON co.app_user_id = au.id
        <where>
            co.del_flag = 0
            <if test="statisticsQueryDto.dayType == 1">
                AND DATE( co.create_time ) = CURDATE()
            </if>
            <if test="statisticsQueryDto.dayType == 2">
                AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
            </if>
            <if test="statisticsQueryDto.dayType == 3">
               AND MONTH( co.create_time ) = MONTH(CURDATE())
            </if>
            <if test="statisticsQueryDto.dayType == 4">
                AND YEAR( co.create_time ) = YEAR(CURDATE() )
            </if>
            <if test="statisticsQueryDto.dayType == 5">
                <if test="statisticsQueryDto.startTime != null">
                    AND co.create_time >= #{statisticsQueryDto.startTime}
                </if>
                <if test="statisticsQueryDto.endTime != null">
                    AND co.create_time <= #{statisticsQueryDto.endTime}
                </if>
            </if>
        </where>
        GROUP BY
            au.company_id
    </select>
    <select id="carUserMethod" resultType="java.util.Map">
        SELECT
            count(1) as counts,vehicle_use
        from charging_pile_account.t_app_user_car
        GROUP BY vehicle_use
    </select>
    <select id="carUserBrand" resultType="java.util.Map">
        SELECT
            count(1) as counts,vehicle_brand
        from charging_pile_account.t_app_user_car
        GROUP BY vehicle_brand
    </select>
    <select id="countLocalCar" resultType="java.util.Map">
        SELECT
            SUM(CASE WHEN license_plate LIKE '%川J%' THEN 1 ELSE 0 END) AS localCar,
            SUM(CASE WHEN license_plate NOT LIKE '%川J%' THEN 1 ELSE 0 END) AS  notLocalCar
        FROM
            `charging_pile_account`.`t_app_user_car`
        WHERE
            del_flag = 0
    </select>
    <select id="getAver" resultType="java.lang.Long">
        SELECT
            ROUND(AVG(te.mark), 2) AS average_mark
        FROM
            `t_order_evaluate` te
                LEFT JOIN t_charging_order  co on te.order_id = co.id
        WHERE
        <if test="siteIds != null and siteIds.size() > 0">
            AND co.site_id IN
            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
                #{siteId}
            </foreach>
        </if>
            te.del_flag = 0
    </select>
    <select id="getLevelEvaluate" resultType="java.util.Map">
        SELECT
            CASE
                WHEN te.mark BETWEEN 1 AND 2 THEN '1-2'
                WHEN te.mark = 3 THEN '3'
                WHEN te.mark BETWEEN 4 AND 5 THEN '4-5'
                ELSE 'Other'
                END AS score_range,
            COUNT(*) AS count
        FROM
            `t_order_evaluate` te
            LEFT JOIN t_charging_order  co on te.order_id = co.id
        WHERE
            te.del_flag = 0
        <if test="siteIds != null and siteIds.size() > 0">
            AND co.site_id IN
            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
                #{siteId}
            </foreach>
        </if>
        GROUP BY
            score_range
    </select>
    <select id="chargingList" resultType="com.ruoyi.order.api.vo.ChargingOrderListVO">
        select t1.* from t_charging_order t1
        where 1=1