SELECT
CASE WHEN GROUPING(t1.orderNo) = 1 THEN NULL ELSE MAX(t1.orderSource) END AS orderSource,
CASE WHEN GROUPING(t1.orderNo) = 1 THEN NULL ELSE MAX(t1.channelType) END AS channelType,
CASE WHEN GROUPING(t1.orderNo) = 1 THEN NULL ELSE MAX(t1.channelId) END AS channelId,
CASE WHEN GROUPING(t1.orderNo) = 1 THEN '小计' ELSE MAX(t1.channelName) END AS channelName,
CASE WHEN GROUPING(t1.orderNo) = 1 THEN NULL ELSE t1.orderNo END AS orderNo,
SUM(t1.normalVerifyNum + t1.forceVerifyNum + t1.overVerifyNum) AS totalVerifyNum,
FORMAT(ROUND(SUM(t1.normalVerifyPrice + t1.forceVerifyPrice + t1.overVerifyPrice), 2), 2) AS totalVerifyPrice,
GROUPING(t1.channelId) AS isChannelRollup,
GROUPING(t1.orderNo) AS isOrderRollup
FROM (
SELECT
o.order_source AS orderSource,
o.order_channel AS channelType,
oi.id channelId,
oi.org_name channelName,
o.order_no orderNo,
o.third_order_no AS thirdOrderNo,
o.product_type AS productType,
p.product_name AS productName,
pp.name AS policyName,
CASE WHEN ot.verify_status = 'true' AND ot.offline_verify_sync_status IS NULL THEN 1 ELSE 0 END AS normalVerifyNum,
CASE WHEN ot.verify_status = 'true' AND ot.offline_verify_sync_status IS NULL THEN ROUND(IFNULL(ot.act_price, opi.price), 2) ELSE '0.00' END AS normalVerifyPrice,
CASE WHEN ot.verify_status = 'true' AND ot.offline_verify_sync_status IS NOT NULL THEN 1 ELSE 0 END AS forceVerifyNum,
CASE WHEN ot.verify_status = 'true' AND ot.offline_verify_sync_status IS NOT NULL THEN ROUND(IFNULL(ot.act_price, opi.price), 2) ELSE '0.00' END AS forceVerifyPrice,
CASE WHEN ot.verify_status = 'overdue' THEN 1 ELSE 0 END AS overVerifyNum,
CASE WHEN ot.verify_status = 'overdue' THEN ROUND(IFNULL(ot.act_price, opi.price), 2) ELSE '0.00' END AS overVerifyPrice,
DATE_FORMAT(ot.visit_date, '%Y-%m-%d') playDate,
DATE_FORMAT(ot.verify_time, '%Y-%m-%d') verifyDate,
ovp.serial_no serialNo,
ov.visitor_name AS visitorName,
ov.phone_number AS phoneNumber,
ov.document_type AS documentType,
ov.document_code AS documentCode,
ov.email,
o.order_type AS orderType,
o.payment_type AS paymentType,
c.org_name companyName,
a.nick_name AS nickName,
DATE_FORMAT(ot.verify_time, '%Y-%m-%d %H:%i:%s') AS verifyTime,
DATE_FORMAT(o.created_time, '%Y-%m-%d %H:%i:%s') AS place_order_time,
opi.price AS price
FROM order_tickets ot
LEFT JOIN order_info o ON ot.order_id = o.id
LEFT JOIN org_info oi ON o.channel_id = oi.id
LEFT JOIN order_visitor_product ovp ON ovp.id = ot.visitor_product_id
LEFT JOIN product p ON p.id = ot.product_id
LEFT JOIN order_product_info opi ON opi.id = ot.order_product_id
LEFT JOIN product_policy pp ON pp.id = opi.policy_id
LEFT JOIN order_visitor ov ON ov.id = ot.visitor_id
LEFT JOIN org_info c ON c.id = o.org_sale_id
LEFT JOIN account a ON a.id = o.salesman
WHERE 1=1
AND ot.org_sale_id = 1898978223795081217
AND ot.verify_status IN ('overdue', 'true')
AND ot.verify_time >= DATE_FORMAT('2025-10-01 00:00:00', '%Y-%m-%d %H:%i:%s')
AND ot.verify_time <= DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')
AND o.payment_status = 'true'
AND o.is_deleted = 'false'
AND o.order_status != 'closed'
AND o.audit_status = 'success'
AND o.parent_pck_id IS NULL
AND o.parent_product_type IS NULL
) t1
GROUP BY t1.channelId, t1.orderNo WITH ROLLUP
HAVING GROUPING(t1.channelId) = 0
ORDER BY t1.channelId, isOrderRollup, MAX(t1.verifyTime) DESC;