This commit is contained in:
lizhenhua 2025-12-05 13:26:45 +08:00
parent 0b03d17ae2
commit 1a942d9370
1 changed files with 193 additions and 205 deletions

View File

@ -162,220 +162,208 @@
</select>
<select id="getlistByArealist" resultType="com.bonus.canteen.core.reportforms.beans.OrgConsume">
SELECT
co.org_full_name AS orgFullName,
t.remark,
u.cust_name,
u.cust_name_like,
t.canteen_name,
t.area_name,
t.consume_source,
t.flow_id,
t.flow_type,
CASE
WHEN t.flow_type = 110 THEN '消费'
WHEN t.flow_type = 130 THEN '退款'
ELSE '其他'
END AS flow_type_name,
t.flow_real_amount / 100 AS amount,
t.ord_time,
t.pay_time,
CASE
WHEN LENGTH(t.wallets) - LENGTH(REPLACE(t.wallets, ',', '')) > 0 THEN 3
ELSE t.wallets
END AS walletId
co.org_full_name AS orgFullName,
t.remark,
u.cust_name,
u.cust_name_like,
t.canteen_name,
t.area_name,
t.consume_source,
t.flow_id,
t.flow_type,
CASE
WHEN t.flow_type = 110 THEN '消费'
WHEN t.flow_type = 130 THEN '退款'
ELSE '其他'
END AS flow_type_name,
t.flow_real_amount / 100 AS amount,
t.ord_time,
t.pay_time,
CASE
WHEN LENGTH(t.wallets) - LENGTH(REPLACE(t.wallets, ',', '')) > 0 THEN 3
ELSE t.wallets
END AS walletId
FROM (
-- 消费逻辑
SELECT
aa.canteen_name,
aac.area_name,
CASE
WHEN f.source_type = 7 THEN 'H5'
WHEN f.source_type = 53 THEN 'super'
ELSE 'canteen'
END AS consume_source,
f.flow_id,
d.flow_type,
f.flow_real_amount,
f.ord_time,
d.pay_time,
f.cust_id,
f.remark,
GROUP_CONCAT(DISTINCT atwd.wallet_id) AS wallets
FROM report_account_flow f
INNER JOIN report_account_flow_detail d ON f.flow_id = d.flow_id
INNER JOIN device_info di ON f.mch_sn = di.device_sn
INNER JOIN device_bind bd ON di.device_id = bd.device_id
INNER JOIN alloc_canteen aa ON aa.canteen_id = bd.canteen_id
INNER JOIN alloc_area aac ON aac.area_id = aa.area_id
LEFT JOIN acc_trade_wallet_detail atwd ON atwd.trade_id = f.flow_id
WHERE d.pay_time >= #{startPayTime}
AND d.pay_time &lt; #{endPayTime}
AND d.flow_type = 110
AND f.source_type IS NOT NULL
AND f.source_type NOT IN (7,53)
GROUP BY f.flow_id
-- ========= 消费逻辑 =========
SELECT
aa.canteen_name,
aac.area_name,
CASE
WHEN f.source_type = 7 THEN 'H5'
WHEN f.source_type = 53 THEN 'super'
WHEN di.device_name LIKE '%茶歇%' THEN 'teabreak'
WHEN (f.source_type IS NULL OR f.source_type = 0 OR f.source_type = '')
AND f.remark LIKE '%支付%' THEN 'station'
ELSE 'canteen'
END AS consume_source,
f.flow_id,
f.flow_type,
f.flow_real_amount,
f.ord_time,
f.pay_time,
f.cust_id,
f.remark,
GROUP_CONCAT(DISTINCT atwd.wallet_id) AS wallets
FROM report_account_flow f
LEFT JOIN device_info di ON f.mch_sn = di.device_sn
LEFT JOIN device_bind bd ON di.device_id = bd.device_id
LEFT JOIN alloc_canteen aa ON aa.canteen_id = bd.canteen_id
LEFT JOIN alloc_area aac ON aac.area_id = aa.area_id
LEFT JOIN acc_trade_wallet_detail atwd ON atwd.trade_id = f.flow_id
WHERE f.pay_time >= #{startPayTime}
AND f.pay_time &lt;#{endPayTime}
AND f.flow_type = 110
AND f.status = 1
AND f.source_type NOT IN (7, 53) -- 排除H5和super
AND (di.device_name NOT LIKE '%茶歇%' OR di.device_name IS NULL) -- 排除茶歇
AND NOT ((f.source_type IS NULL OR f.source_type = 0 OR f.source_type = '')
AND f.remark LIKE '%支付%') -- 排除station
GROUP BY f.flow_id
UNION ALL
UNION ALL
-- 退款逻辑
SELECT
aa.canteen_name,
aac.area_name,
'canteen' AS consume_source,
f.flow_id AS flow_id,
130 AS flow_type,
AT.actual_amount AS flow_real_amount,
f.ord_time,
AT.trade_time AS pay_time,
AT.cust_id,
f.remark,
GROUP_CONCAT(DISTINCT atwd.wallet_id) AS wallets
FROM report_account_flow f
INNER JOIN acc_trade AT
ON AT.origin_trade_id = f.flow_id
AND f.flow_type = 110
AND AT.actual_amount = f.flow_real_amount
LEFT JOIN device_info di ON f.mch_sn = di.device_sn
LEFT JOIN device_bind bd ON di.device_id = bd.device_id
LEFT JOIN alloc_canteen aa ON aa.canteen_id = bd.canteen_id
LEFT JOIN alloc_area aac ON aac.area_id = aa.area_id
LEFT JOIN acc_trade_wallet_detail atwd ON atwd.trade_id = f.flow_id
WHERE AT.trade_type = 130
AND AT.trade_state = 2
AND f.source_type IS NOT NULL
AND (AT.machine_sn IS NULL OR AT.machine_sn = '')
AND AT.trade_time >= #{startPayTime}
AND AT.trade_time &lt;#{endPayTime}
GROUP BY f.flow_id
) t
LEFT JOIN cust_info u ON t.cust_id = u.cust_id
LEFT JOIN cust_org co ON u.org_id = co.org_id
-- ========= 退款逻辑 =========
SELECT
aa.canteen_name,
aac.area_name,
CASE
WHEN f.source_type = 7 THEN 'H5'
WHEN f.source_type = 53 THEN 'super'
WHEN di.device_name LIKE '%茶歇%' THEN 'teabreak'
WHEN (f.source_type IS NULL OR f.source_type = 0 OR f.source_type = '')
AND f.remark LIKE '%支付%' THEN 'station'
ELSE 'canteen'
END AS consume_source,
f.flow_id,
130 AS flow_type,
AT.actual_amount AS flow_real_amount,
f.ord_time,
AT.trade_time AS pay_time,
AT.cust_id,
f.remark,
GROUP_CONCAT(DISTINCT atwd.wallet_id) AS wallets
FROM acc_trade AT
INNER JOIN report_account_flow f ON AT.origin_trade_id = f.flow_id
AND f.flow_type = 110
AND f.status = 1
LEFT JOIN device_info di ON f.mch_sn = di.device_sn
LEFT JOIN device_bind bd ON di.device_id = bd.device_id
LEFT JOIN alloc_canteen aa ON aa.canteen_id = bd.canteen_id
LEFT JOIN alloc_area aac ON aac.area_id = aa.area_id
LEFT JOIN acc_trade_wallet_detail atwd ON atwd.trade_id = f.flow_id
WHERE AT.trade_time >= #{startPayTime}
AND AT.trade_time &lt;#{endPayTime}
AND AT.trade_type = 130
AND AT.trade_state = 2
AND (AT.machine_sn IS NULL OR AT.machine_sn = '')
AND f.source_type NOT IN (7, 53) -- 排除H5和super
AND (di.device_name NOT LIKE '%茶歇%' OR di.device_name IS NULL) -- 排除茶歇
AND NOT ((f.source_type IS NULL OR f.source_type = 0 OR f.source_type = '')
AND f.remark LIKE '%支付%') -- 排除station
GROUP BY f.flow_id
) t
LEFT JOIN cust_info u ON t.cust_id = u.cust_id
LEFT JOIN cust_org co ON u.org_id = co.org_id
WHERE t.area_name LIKE CONCAT('%', #{orgName}, '%')
AND t.consume_source = 'canteen'
ORDER BY t.pay_time DESC
</select>
<select id="getlistBySuperlist" resultType="com.bonus.canteen.core.reportforms.beans.OrgConsume">
SELECT DISTINCT
co.org_full_name AS orgFullName,
u.cust_name,
u.cust_name_like,
t.canteen_name,
t.area_name,
t.consume_source,
t.flow_id,
t.flow_type,
CASE
WHEN t.flow_type = 110 THEN '消费'
WHEN t.flow_type = 130 THEN '退款'
ELSE '其他'
END AS flow_type_name,
t.flow_real_amount / 100 AS amount,
t.ord_time,
CASE
WHEN LENGTH(t.wallets) - LENGTH(REPLACE(t.wallets, ',', '')) > 0 THEN 3
ELSE t.wallets
END AS walletId,
t.pay_time
SELECT
co.org_full_name AS orgFullName,
t.remark,
u.cust_name,
u.cust_name_like,
t.canteen_name,
t.area_name,
t.consume_source,
t.flow_id,
t.flow_type,
CASE
WHEN t.flow_type = 110 THEN '消费'
WHEN t.flow_type = 130 THEN '退款'
ELSE '其他'
END AS flow_type_name,
t.flow_real_amount / 100 AS amount,
t.ord_time,
t.pay_time,
CASE
WHEN LENGTH(t.wallets) - LENGTH(REPLACE(t.wallets, ',', '')) > 0 THEN 3
ELSE t.wallets
END AS walletId
FROM (
-- 消费逻辑
SELECT
aa.canteen_name,
aac.area_name,
'super' AS consume_source,
f.flow_id,
d.flow_type,
f.flow_real_amount,
f.ord_time,
GROUP_CONCAT(DISTINCT atwd.wallet_id) AS wallets,
d.pay_time,
f.cust_id
FROM report_account_flow f
INNER JOIN report_account_flow_detail d ON f.flow_id = d.flow_id
INNER JOIN device_info di ON f.mch_sn = di.device_sn
INNER JOIN device_bind bd ON di.device_id = bd.device_id
INNER JOIN alloc_canteen aa ON aa.canteen_id = bd.canteen_id
INNER JOIN alloc_area aac ON aac.area_id = aa.area_id
LEFT JOIN acc_trade_wallet_detail atwd ON atwd.trade_id = f.flow_id
WHERE d.pay_time <![CDATA[>=]]> #{startPayTime}
AND d.pay_time <![CDATA[<]]> #{endPayTime}
AND d.flow_type = 110
AND f.source_type = 53
GROUP BY f.flow_id
UNION ALL
-- 补充消费逻辑
SELECT
bo.canteen_name,
bo.area_name,
bo.consume_source,
f.flow_id,
d.flow_type,
f.flow_real_amount,
f.ord_time,
GROUP_CONCAT(DISTINCT atwd.wallet_id) AS wallets,
d.pay_time,
f.cust_id
FROM report_account_flow f
INNER JOIN report_account_flow_detail d ON f.flow_id = d.flow_id
INNER JOIN (
SELECT
aa.canteen_name,
aac.area_name,
'super' AS consume_source,
f.ord_time
FROM report_account_flow f
INNER JOIN report_account_flow_detail d ON f.flow_id = d.flow_id
INNER JOIN device_info di ON f.mch_sn = di.device_sn
INNER JOIN device_bind bd ON di.device_id = bd.device_id
INNER JOIN alloc_canteen aa ON aa.canteen_id = bd.canteen_id
INNER JOIN alloc_area aac ON aac.area_id = aa.area_id
WHERE d.pay_time <![CDATA[>=]]> #{startPayTime}
AND d.pay_time <![CDATA[<]]> #{endPayTime}
AND d.flow_type = 110
AND f.source_type = 53
) bo ON f.ord_time = bo.ord_time
LEFT JOIN acc_trade_wallet_detail atwd ON atwd.trade_id = f.flow_id
WHERE d.pay_time <![CDATA[>=]]> #{startPayTime}
AND d.pay_time <![CDATA[<]]> #{endPayTime}
AND d.flow_type = 130
AND (f.mch_sn IS NULL OR f.mch_sn = '')
GROUP BY f.flow_id
UNION ALL
-- 退款逻辑(严格金额匹配 + 时间过滤)
SELECT
aa.canteen_name,
aac.area_name,
'super' AS consume_source,
f.flow_id,
130 AS flow_type,
AT.actual_amount AS flow_real_amount,
f.ord_time,
GROUP_CONCAT(DISTINCT atwd.wallet_id) AS wallets,
AT.trade_time AS pay_time,
f.cust_id
FROM report_account_flow f
INNER JOIN acc_trade AT
ON AT.origin_trade_id = f.flow_id
AND f.flow_type = 110
LEFT JOIN device_info di ON f.mch_sn = di.device_sn
LEFT JOIN device_bind bd ON di.device_id = bd.device_id
LEFT JOIN alloc_canteen aa ON aa.canteen_id = bd.canteen_id
LEFT JOIN alloc_area aac ON aac.area_id = aa.area_id
LEFT JOIN acc_trade_wallet_detail atwd ON atwd.trade_id = f.flow_id
WHERE AT.trade_type = 130
AND AT.trade_state = 2
AND f.source_type = 53
AND AT.trade_time <![CDATA[>=]]> #{startPayTime}
AND AT.trade_time <![CDATA[<]]> #{endPayTime}
GROUP BY f.flow_id
) t
LEFT JOIN cust_info u ON t.cust_id = u.cust_id
LEFT JOIN cust_org co ON u.org_id = co.org_id
WHERE t.area_name = #{orgName}
SELECT
aa.canteen_name,
aac.area_name,
CASE
WHEN f.source_type = 7 THEN 'H5'
WHEN f.source_type = 53 THEN 'super'
WHEN di.device_name LIKE '%茶歇%' THEN 'teabreak'
WHEN (f.source_type IS NULL OR f.source_type = 0 OR f.source_type = '')
AND f.remark LIKE '%支付%' THEN 'station'
ELSE 'canteen'
END AS consume_source,
f.flow_id,
f.flow_type,
f.flow_real_amount,
f.ord_time,
f.pay_time,
f.cust_id,
f.remark,
GROUP_CONCAT(DISTINCT atwd.wallet_id) AS wallets
FROM report_account_flow f
LEFT JOIN device_info di ON f.mch_sn = di.device_sn
LEFT JOIN device_bind bd ON di.device_id = bd.device_id
LEFT JOIN alloc_canteen aa ON aa.canteen_id = bd.canteen_id
LEFT JOIN alloc_area aac ON aac.area_id = aa.area_id
LEFT JOIN acc_trade_wallet_detail atwd ON atwd.trade_id = f.flow_id
WHERE f.pay_time >= #{startPayTime}
AND f.pay_time &lt; #{endPayTime}
AND f.flow_type = 110
AND f.status = 1
AND f.source_type = 53 -- 只查询super类型的
GROUP BY f.flow_id
UNION ALL
SELECT
aa.canteen_name,
aac.area_name,
CASE
WHEN f.source_type = 7 THEN 'H5'
WHEN f.source_type = 53 THEN 'super'
WHEN di.device_name LIKE '%茶歇%' THEN 'teabreak'
WHEN (f.source_type IS NULL OR f.source_type = 0 OR f.source_type = '')
AND f.remark LIKE '%支付%' THEN 'station'
ELSE 'canteen'
END AS consume_source,
f.flow_id,
130 AS flow_type,
AT.actual_amount AS flow_real_amount,
f.ord_time,
AT.trade_time AS pay_time,
AT.cust_id,
f.remark,
GROUP_CONCAT(DISTINCT atwd.wallet_id) AS wallets
FROM acc_trade AT
INNER JOIN report_account_flow f ON AT.origin_trade_id = f.flow_id
AND f.flow_type = 110
AND f.status = 1
LEFT JOIN device_info di ON f.mch_sn = di.device_sn
LEFT JOIN device_bind bd ON di.device_id = bd.device_id
LEFT JOIN alloc_canteen aa ON aa.canteen_id = bd.canteen_id
LEFT JOIN alloc_area aac ON aac.area_id = aa.area_id
LEFT JOIN acc_trade_wallet_detail atwd ON atwd.trade_id = f.flow_id
WHERE AT.trade_time >= #{startPayTime}
AND AT.trade_time &lt; #{endPayTime}
AND AT.trade_type = 130
AND AT.trade_state = 2
AND (AT.machine_sn IS NULL OR AT.machine_sn = '')
AND f.source_type = 53 -- 只查询super类型的
GROUP BY f.flow_id
) t
LEFT JOIN cust_info u ON t.cust_id = u.cust_id
LEFT JOIN cust_org co ON u.org_id = co.org_id
WHERE t.area_name LIKE CONCAT('%', #{orgName}, '%')
ORDER BY t.pay_time DESC
</select>