Files
medical-mall/mall_sql/migrations/20260525_order_timeout_status.sql

77 lines
2.4 KiB
PL/PgSQL

BEGIN;
ALTER TABLE public.ml_orders
ADD COLUMN IF NOT EXISTS pay_expire_at TIMESTAMPTZ;
ALTER TABLE public.ml_orders
DROP CONSTRAINT IF EXISTS chk_ml_order_status;
ALTER TABLE public.ml_orders
DROP CONSTRAINT IF EXISTS chk_ml_payment_status;
ALTER TABLE public.ml_orders
ADD CONSTRAINT chk_ml_order_status CHECK (order_status IN (1,2,3,4,5,6,7,8));
ALTER TABLE public.ml_orders
ADD CONSTRAINT chk_ml_payment_status CHECK (payment_status IN (1,2,3,4,5));
COMMENT ON COLUMN public.ml_orders.pay_expire_at IS '支付截止时间,超过后订单进入已超时';
UPDATE public.ml_orders
SET pay_expire_at = created_at + INTERVAL '10 minutes'
WHERE pay_expire_at IS NULL
AND order_status = 1
AND payment_status = 1;
UPDATE public.ml_orders
SET order_status = 8,
payment_status = 5,
cancel_reason = CASE
WHEN cancel_reason IS NULL OR cancel_reason = '' THEN '支付超时自动关闭'
ELSE cancel_reason
END,
updated_at = NOW()
WHERE order_status = 1
AND payment_status = 1
AND pay_expire_at IS NOT NULL
AND pay_expire_at <= NOW();
CREATE INDEX IF NOT EXISTS idx_ml_orders_pay_expire_at
ON public.ml_orders(pay_expire_at);
DROP VIEW IF EXISTS public.ml_orders_detail_view;
CREATE VIEW public.ml_orders_detail_view AS
SELECT
o.*,
u.username as customer_name,
u.phone as customer_phone,
m.username as merchant_name,
s.shop_name,
CASE
WHEN o.order_status = 1 THEN '待付款'
WHEN o.order_status = 2 THEN '待发货'
WHEN o.order_status = 3 THEN '待收货'
WHEN o.order_status = 4 THEN '已完成'
WHEN o.order_status = 5 THEN '已取消'
WHEN o.order_status = 6 THEN '退款中'
WHEN o.order_status = 7 THEN '已退款'
WHEN o.order_status = 8 THEN '已超时'
ELSE '未知'
END as order_status_name,
CASE
WHEN o.payment_status = 1 THEN '未付款'
WHEN o.payment_status = 2 THEN '已付款'
WHEN o.payment_status = 3 THEN '部分退款'
WHEN o.payment_status = 4 THEN '全额退款'
WHEN o.payment_status = 5 THEN '已关闭'
ELSE '未知'
END as payment_status_name
FROM public.ml_orders o
LEFT JOIN public.ak_users u ON o.user_id = u.id
LEFT JOIN public.ak_users m ON o.merchant_id = m.id
LEFT JOIN public.ml_shops s ON o.merchant_id = s.merchant_id;
COMMENT ON VIEW public.ml_orders_detail_view IS '订单详情视图';
COMMIT;