Halo商业/付费版,如何删除商品订单?
#9902
|
截至halo版本2.24.0 |
Answered by
XJY00
Apr 18, 2026
Replies: 1 comment
|
本贴子给社区用户作为参考提供帮助,执行脚本操作造成的后果自行承担 -- ============================================
-- Halo商城按订单编号清理脚本(PostgreSQL版本)
-- 执行顺序:从子表到主表(外键约束)
-- ============================================
DO $$
DECLARE
target_order_code VARCHAR := 'ab9e097afb7a5546d4140f85555bffe8'; -- 替换为要清理的订单编号
target_order_id INTEGER;
rec RECORD; -- 声明循环变量
BEGIN
-- 1. 查找订单ID
SELECT id INTO target_order_id
FROM orders
WHERE order_code = target_order_code;
IF target_order_id IS NULL THEN
RAISE EXCEPTION '未找到订单编号为 % 的订单', target_order_code;
END IF;
-- 2. 验证目标订单
RAISE NOTICE '目标订单信息:';
FOR rec IN (
SELECT o.id, o.order_code, o.total_amount, o.status,
o.payment_status, o.fulfillment_status, o.created_at
FROM orders o
WHERE o.order_code = target_order_code
) LOOP
RAISE NOTICE 'ID: %, 订单号: %, 金额: %, 状态: %',
rec.id, rec.order_code, rec.total_amount, rec.status;
END LOOP;
-- 3. 开始清理(按顺序执行)
-- 3.1 删除订单时间线
DELETE FROM order_timelines
WHERE order_id = target_order_id;
RAISE NOTICE '删除订单时间线完成';
-- 3.2 删除履约历史
DELETE FROM fulfillment_histories
WHERE fulfillment_id IN (
SELECT id FROM fulfillments WHERE order_id = target_order_id
);
RAISE NOTICE '删除履约历史完成';
-- 3.3 删除履约商品
DELETE FROM fulfillment_items
WHERE fulfillment_id IN (
SELECT id FROM fulfillments WHERE order_id = target_order_id
);
RAISE NOTICE '删除履约商品完成';
-- 3.4 删除履约标签
DELETE FROM fulfillment_labels
WHERE fulfillment_id IN (
SELECT id FROM fulfillments WHERE order_id = target_order_id
);
RAISE NOTICE '删除履约标签完成';
-- 3.5 删除履约记录
DELETE FROM fulfillments
WHERE order_id = target_order_id;
RAISE NOTICE '删除履约记录完成';
-- 3.6 删除支付会话
DELETE FROM payment_sessions
WHERE order_id = target_order_id;
RAISE NOTICE '删除支付会话完成';
-- 3.7 删除订单商品
DELETE FROM order_items
WHERE order_id = target_order_id;
RAISE NOTICE '删除订单商品完成';
-- 3.8 删除订单主记录(最后执行)
DELETE FROM orders
WHERE id = target_order_id;
RAISE NOTICE '删除订单主记录完成';
-- 4. 验证清理结果
RAISE NOTICE '清理完成,验证结果:';
RAISE NOTICE '剩余订单数: %', (SELECT COUNT(*) FROM orders WHERE order_code = target_order_code);
RAISE NOTICE '清理完成!';
END $$; |
0 replies
Answer selected by
XJY00
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
本贴子给社区用户作为参考提供帮助,执行脚本操作造成的后果自行承担
目前的方法(连接数据库,手动执行脚本,删除对应的订单数据)
数据库开源工具:DBeaver