update platform_bill a join platform_bill b on a.type =b.type and TO_DAYS(a.day_id)-TO_DAYS(b.day_id)= 1
set a.start_money=b.end_money
where a.day_id =#{dayId} and a.type = 0
update platform_bill a join platform_bill b on a.user_id =b.user_id and a.type =b.type and TO_DAYS(a.day_id)-TO_DAYS(b.day_id)= 1
set a.start_money=b.end_money
where a.day_id =#{dayId} and a.type in(1,2)
INSERT INTO `tcwm2.5`.platform_bill (
day_id, user_id, shop_name, `type`, start_money, revenue, revenue_count,
shop_payouts, shop_payouts_rates, shop_payouts_count, rider_payouts, rider_payouts_rates,
rider_payouts_count, refund_money, refund_count, end_money, sys_gift_amount, platform_rates,
total_income, pay_money, create_time, update_time, shop_balance
)
-- 第一部分:骑手数据(type=2)
SELECT
#{dayId},
tu.user_id,
NULL,
2,
0,
IFNULL(SUM(ti.rider_money), 0), -- 骑手总收入(revenue)
COUNT(ti.rider_money), -- 收入订单数(revenue_count)
NULL, NULL, NULL, -- 商户提现字段(未使用)
IFNULL(SUM(co.money), 0), -- 骑手提现金额(rider_payouts)
IFNULL(SUM(co.rate), 0), -- 骑手提现手续费(rider_payouts_rates)
COUNT(co.id), -- 骑手提现次数(rider_payouts_count)
NULL, NULL, -- 退款字段(未使用)
IFNULL(MAX(tu.balance), 0), -- 期末余额(end_money)
-- 系统赠送金额 - 系统扣除金额(sys_gift_amount):
IFNULL(
(
SELECT
SUM(money)
FROM
user_money_details ud1
WHERE
ud1.user_id = tu.user_id
AND ud1.title LIKE '系统赠送%'
AND ud1.create_time > #{startTime}
AND ud1.create_time #{endTime}
)
-
(
SELECT
SUM(money)
FROM
user_money_details ud2
WHERE
ud2.user_id = tu.user_id
AND ud2.title LIKE '系统扣除%'
AND ud2.create_time > #{startTime}
AND ud2.create_time #{endTime}
)
, 0
) AS gift_amount,
NULL, -- 平台抽成(未使用)
IFNULL(SUM(ti.rider_money), 0), -- 总收益(total_income)
NULL, -- 用户支付金额(未使用)
#{now}, #{now}, -- 创建和更新时间
0 -- 商户余额(shop_balance)
FROM
tb_user tu USE INDEX (tb_user_rider_open_id_IDX)
LEFT JOIN tb_indent ti USE INDEX (tb_indent_finish_time_IDX) ON ti.finish_time > #{startTime} AND ti.finish_time #{endTime} AND ti.rider_user_id = tu.user_id AND ti.indent_state = '6' -- 订单状态:已完成
LEFT JOIN cash_out co ON co.user_id = tu.user_id AND co.type = 1 AND co.state = 1 AND co.out_at > #{startTime} AND co.out_at #{endTime}
WHERE
tu.rider_open_id IS NOT NULL -- 筛选骑手用户
GROUP BY
tu.user_id
UNION ALL
-- 第二部分:商家数据(type=1)
SELECT
#{dayId},
tu.user_id,
NULL,
1,
0,
IFNULL(SUM(tor.shop_income_money), 0), -- 商家总收入(revenue)
COUNT(tor.shop_income_money), -- 收入订单数(revenue_count)
IFNULL(SUM(co.money), 0), -- 商家提现金额(shop_payouts)
IFNULL(SUM(co.rate), 0), -- 商家提现手续费(shop_payouts_rates)
COUNT(co.id), -- 商家提现次数(shop_payouts_count)
NULL, NULL, NULL, -- 骑手提现字段(未使用)
IFNULL(SUM(to1.pay_money), 0), -- 退款金额(refund_money)
COUNT(to1.pay_money), -- 退款次数(refund_count)
-- 未结算订单金额(end_money):
IFNULL(
(
SELECT
SUM(to2.shop_income_money)
FROM
tb_order to2
WHERE
to2.status = 4
AND to2.shop_id = gs.shop_id
)
, 0),
-- 系统赠送金额 - 系统扣除金额(sys_gift_amount):
IFNULL(
(
SELECT
SUM(money)
FROM
user_money_details ud1
WHERE
ud1.user_id = tu.user_id
AND ud1.title LIKE '系统赠送%'
AND ud1.create_time > #{startTime}
AND ud1.create_time #{endTime}
)
-
(
SELECT
SUM(money)
FROM
user_money_details ud2
WHERE
ud2.user_id = tu.user_id
AND ud2.title LIKE '系统扣除%'
AND ud2.create_time > #{startTime}
AND ud2.create_time #{endTime}
)
, 0) AS gift_amount,
-- 平台抽成金额(platform_rates):
IFNULL(ROUND(SUM(tor.shop_income_money * (1 - IFNULL(gs.shop_rate, 1)) / IFNULL(gs.shop_rate, 1)), 2), 0),
IFNULL(SUM(tor.shop_income_money), 0), -- 总收益(total_income)
IFNULL(SUM(tor.pay_money), 0), -- 用户支付金额(pay_money)
#{now},
#{now}, -- 创建和更新时间
IFNULL(MAX(um.money), 0) -- 商户余额(shop_balance)
FROM
tb_user tu
LEFT JOIN
goods_shop gs ON tu.user_id = gs.user_id -- 关联商家店铺
LEFT JOIN
tb_order tor USE INDEX (tb_order_update_time_IDX) ON gs.shop_id = tor.shop_id AND tor.update_time > #{startTime} AND tor.update_time #{endTime} AND tor.status = 4 -- 订单状态:已完成
LEFT JOIN
tb_order to1 USE INDEX (tb_order_update_time_IDX) ON gs.shop_id = to1.shop_id AND to1.update_time > #{startTime} AND to1.update_time #{endTime} AND to1.status IN (5, 8) -- 订单状态:退款/异常
LEFT JOIN
cash_out co ON co.user_id = tu.user_id AND co.type = 2 AND co.state = 1 AND co.out_at > #{startTime} AND co.out_at #{endTime}
LEFT JOIN
user_money um ON um.user_id = tu.user_id -- 用户余额表
WHERE
tu.admin_user_id IS NOT NULL -- 筛选商家用户
GROUP BY
tu.user_id;
INSERT INTO `tcwm2.5`.platform_bill
(day_id, user_id, shop_name, `type`, start_money, revenue, revenue_count,
shop_payouts, shop_payouts_rates, shop_payouts_count, rider_payouts, rider_payouts_rates,
rider_payouts_count, refund_money, refund_count, end_money,sys_gift_amount, platform_rates,total_income,pay_money,create_time,update_time)
select
day_id,null,null,0,0,sum(if(type=1, revenue,0)),sum(if(type=1, revenue_count,0)),
sum(if(type=1, shop_payouts ,0)),sum(if(type=1, shop_payouts_rates ,0)),sum(if(type=1, shop_payouts_count ,0)),
sum(if(type=2, rider_payouts ,0)),sum(if(type=2, rider_payouts_rates ,0)),sum(if(type=2, rider_payouts_count ,0)),
sum(if(type=1, refund_money ,0)),sum(if(type=1, refund_count ,0)),(select ifnull(sum(pay_money), 0) from tb_order where status in (3,4,6,7)),null,
sum(if(type=1, platform_rates ,0)),null,null,max(create_time) ,max(update_time)
from platform_bill pb where day_id =#{dayId}