From cb5a42c97fe9ae23b891bdc3231dc8eb100de218 Mon Sep 17 00:00:00 2001
From: shinnosuke <tantao@1hoper.com>
Date: 星期一, 31 八月 2026 16:49:41 +0800
Subject: [PATCH] fix: route hotel free voucher scans to dedicated verification page

---
 talent-card-server/src/main/java/com/talentcard/server/mapper/MerchantSettlementStatisticsMapper.java |   60 +++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 39 insertions(+), 21 deletions(-)

diff --git a/talent-card-server/src/main/java/com/talentcard/server/mapper/MerchantSettlementStatisticsMapper.java b/talent-card-server/src/main/java/com/talentcard/server/mapper/MerchantSettlementStatisticsMapper.java
index 3fb5366..f172ec0 100644
--- a/talent-card-server/src/main/java/com/talentcard/server/mapper/MerchantSettlementStatisticsMapper.java
+++ b/talent-card-server/src/main/java/com/talentcard/server/mapper/MerchantSettlementStatisticsMapper.java
@@ -27,27 +27,45 @@
             <script>
             select count(*)
             from (
-                select case
-                           when #{periodType} = 'MONTH' then date_format(coalesce(v.verify_time, o.updated_at, o.created_at), '%Y-%m')
-                           else date_format(coalesce(v.verify_time, o.updated_at, o.created_at), '%Y-%m-%d')
-                       end as period_key,
-                       o.merchant_id
-                from benefit_order o
-                join merchant m on m.id = o.merchant_id and m.deleted = 0
-                left join (
-                    select order_id, max(verify_time) as verify_time
-                    from verify_record
-                    where status = 1
-                    group by order_id
-                ) v on v.order_id = o.id
-                where o.deleted = 0
-                  and o.order_status = 1
-                  and o.verify_status = 1
-                  <if test="merchantId != null">and o.merchant_id = #{merchantId}</if>
-                  <if test="merchantType != null and merchantType != ''">and m.merchant_type_code = #{merchantType}</if>
-                  <if test="startTime != null">and coalesce(v.verify_time, o.updated_at, o.created_at) &gt;= #{startTime}</if>
-                  <if test="endTime != null">and coalesce(v.verify_time, o.updated_at, o.created_at) &lt; #{endTime}</if>
-                group by period_key, o.merchant_id
+                select base.period_key, base.merchant_id
+                from (
+                    select case
+                               when #{periodType} = 'MONTH' then date_format(coalesce(v.verify_time, o.updated_at, o.created_at), '%Y-%m')
+                               else date_format(coalesce(v.verify_time, o.updated_at, o.created_at), '%Y-%m-%d')
+                           end as period_key,
+                           o.merchant_id
+                    from benefit_order o
+                    join merchant m on m.id = o.merchant_id and m.deleted = 0
+                    left join (
+                        select order_id, max(verify_time) as verify_time
+                        from verify_record
+                        where status = 1
+                        group by order_id
+                    ) v on v.order_id = o.id
+                    where o.deleted = 0
+                      and o.order_status = 1
+                      and o.verify_status = 1
+                      <if test="merchantId != null">and o.merchant_id = #{merchantId}</if>
+                      <if test="merchantType != null and merchantType != ''">and m.merchant_type_code = #{merchantType}</if>
+                      <if test="startTime != null">and coalesce(v.verify_time, o.updated_at, o.created_at) &gt;= #{startTime}</if>
+                      <if test="endTime != null">and coalesce(v.verify_time, o.updated_at, o.created_at) &lt; #{endTime}</if>
+                    union all
+                    select case
+                               when #{periodType} = 'MONTH' then date_format(r.verify_time, '%Y-%m')
+                               else date_format(r.verify_time, '%Y-%m-%d')
+                           end as period_key,
+                           r.merchant_id
+                    from verify_record r
+                    join merchant m on m.id = r.merchant_id and m.deleted = 0
+                    where r.status = 1
+                      and r.order_id is null
+                      and upper(r.verify_type) = 'HOTEL_FREE'
+                      <if test="merchantId != null">and r.merchant_id = #{merchantId}</if>
+                      <if test="merchantType != null and merchantType != ''">and m.merchant_type_code = #{merchantType}</if>
+                      <if test="startTime != null">and r.verify_time &gt;= #{startTime}</if>
+                      <if test="endTime != null">and r.verify_time &lt; #{endTime}</if>
+                ) base
+                group by base.period_key, base.merchant_id
             ) grouped
             </script>
             """)

--
Gitblit v1.7.1