| | |
| | | ArrayIndexOutOfBoundsException:17 / "is not being grouped" 规划崩溃; |
| | | 2) 聚合表达式内禁用 LEAST(),LEAST(ROUND(...)) 会触发 NPE,用嵌套 CASE 等价封顶替代。 --> |
| | | |
| | | <!-- 按 end_time 日聚合: 订单数/金额/服务费/电费/电量/功率/需求满足率/利用率 --> |
| | | <!-- 按 end_time 日聚合: 关键数据收入/服务费/总充电电量与管理后台 chargingOrderBaseSummary 保持一致 --> |
| | | <select id="franchiseeDayStats" resultType="com.ruoyi.order.dto.FranchiseeDayStat"> |
| | | SELECT DATE(end_time) AS statDay, |
| | | COUNT(*) AS orderCount, |
| | | SUM(IFNULL(order_amount, 0)) AS orderAmount, |
| | | SUM(COALESCE(order_amount, payment_amount)) AS orderAmountEffective, |
| | | SUM(IFNULL(payment_amount, 0)) AS paymentAmount, |
| | | SUM(IFNULL(service_charge, 0)) AS serviceFee, |
| | | SUM(IFNULL(electrovalence, 0)) AS electrovalence, |
| | | SUM(IFNULL(electrovalence, 0) + CASE |
| | | WHEN order_source = 1 THEN IFNULL(service_charge, 0) |
| | | ELSE IFNULL(service_charge, 0) * 0.8 |
| | | END + CASE |
| | | WHEN is_whitelist = 1 THEN IFNULL(whitelist_electric_refund_amount, 0) |
| | | + IFNULL(whitelist_service_refund_amount, 0) |
| | | ELSE 0 |
| | | END) AS chargingIncome, |
| | | SUM(IFNULL(charging_capacity, 0)) AS capacity, |
| | | SUM(IFNULL(charging_power, power)) AS totalPower, |
| | | COUNT(IFNULL(charging_power, power)) AS powerCount, |
| | | MAX(IFNULL(IFNULL(charging_power, power), 0)) AS maxPower, |
| | | SUM(CASE WHEN `current` IS NOT NULL AND need_elec IS NOT NULL AND need_elec > 0 |
| | | THEN CASE WHEN ROUND(`current` * 100 / need_elec, 4) > 100 THEN 100 |
| | | ELSE ROUND(`current` * 100 / need_elec, 4) END ELSE 0 END) AS elecSatSum, |
| | | SUM(CASE WHEN `current` IS NOT NULL AND need_elec IS NOT NULL AND need_elec > 0 |
| | | THEN 1 ELSE 0 END) AS elecSatCount, |
| | | SUM(CASE WHEN IFNULL(IFNULL(charging_power, power), 0) > 0 |
| | | THEN IFNULL(IFNULL(charging_power, power), 0) ELSE 0 END) AS utilPowerSum, |
| | | SUM(CASE WHEN IFNULL(IFNULL(charging_power, power), 0) > 0 |
| | | THEN 1 ELSE 0 END) AS utilPowerCount |
| | | FROM t_charging_order |
| | | WHERE del_flag = 0 |
| | | AND recharge_payment_status = 2 |
| | | SELECT DATE(b.end_time) AS statDay, |
| | | COUNT(*) AS orderCount, |
| | | SUM(IFNULL(b.order_amount, 0)) AS orderAmount, |
| | | SUM(COALESCE(b.order_amount, b.payment_amount)) AS orderAmountEffective, |
| | | SUM(IFNULL(b.payment_amount, 0)) AS paymentAmount, |
| | | SUM(COALESCE(summary.service_price, CASE |
| | | WHEN b.order_source = 1 THEN IFNULL(b.service_charge, 0) |
| | | ELSE IFNULL(b.service_charge, 0) * 0.8 |
| | | END)) AS serviceFee, |
| | | SUM(COALESCE(summary.electric_price, IFNULL(b.electrovalence, 0))) AS electrovalence, |
| | | SUM(COALESCE(summary.income, IFNULL(b.electrovalence, 0) + CASE |
| | | WHEN b.order_source = 1 THEN IFNULL(b.service_charge, 0) |
| | | ELSE IFNULL(b.service_charge, 0) * 0.8 |
| | | END)) AS chargingIncome, |
| | | SUM(COALESCE(summary.charging_capacity, IFNULL(b.charging_capacity, 0))) AS capacity, |
| | | SUM(IFNULL(b.charging_power, b.power)) AS totalPower, |
| | | COUNT(IFNULL(b.charging_power, b.power)) AS powerCount, |
| | | MAX(IFNULL(IFNULL(b.charging_power, b.power), 0)) AS maxPower, |
| | | SUM(CASE WHEN b.`current` IS NOT NULL AND b.need_elec IS NOT NULL AND b.need_elec > 0 |
| | | THEN CASE WHEN ROUND(b.`current` * 100 / b.need_elec, 4) > 100 THEN 100 |
| | | ELSE ROUND(b.`current` * 100 / b.need_elec, 4) END ELSE 0 END) AS elecSatSum, |
| | | SUM(CASE WHEN b.`current` IS NOT NULL AND b.need_elec IS NOT NULL AND b.need_elec > 0 |
| | | THEN 1 ELSE 0 END) AS elecSatCount, |
| | | SUM(CASE WHEN IFNULL(IFNULL(b.charging_power, b.power), 0) > 0 |
| | | THEN IFNULL(IFNULL(b.charging_power, b.power), 0) ELSE 0 END) AS utilPowerSum, |
| | | SUM(CASE WHEN IFNULL(IFNULL(b.charging_power, b.power), 0) > 0 |
| | | THEN 1 ELSE 0 END) AS utilPowerCount |
| | | FROM `charging_pile_order`.t_charging_order b |
| | | LEFT JOIN `charging_pile_order`.t_charging_order_summary_data summary |
| | | ON summary.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="siteIds != null and siteIds.size() > 0"> |
| | | AND site_id IN |
| | | AND b.site_id IN |
| | | <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> |
| | | #{siteId} |
| | | </foreach> |
| | | </if> |
| | | AND end_time >= #{start} |
| | | AND end_time < #{end} |
| | | AND b.end_time >= #{start} |
| | | AND b.end_time < #{end} |
| | | GROUP BY 1 |
| | | </select> |
| | | |