092_payment_orders.sql 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. CREATE TABLE IF NOT EXISTS payment_orders (
  2. id BIGSERIAL PRIMARY KEY,
  3. user_id BIGINT NOT NULL,
  4. user_email VARCHAR(255) NOT NULL DEFAULT '',
  5. user_name VARCHAR(100) NOT NULL DEFAULT '',
  6. user_notes TEXT,
  7. amount DECIMAL(20,2) NOT NULL,
  8. pay_amount DECIMAL(20,2) NOT NULL,
  9. fee_rate DECIMAL(10,4) NOT NULL DEFAULT 0,
  10. recharge_code VARCHAR(64) NOT NULL DEFAULT '',
  11. payment_type VARCHAR(30) NOT NULL DEFAULT '',
  12. payment_trade_no VARCHAR(128) NOT NULL DEFAULT '',
  13. pay_url TEXT,
  14. qr_code TEXT,
  15. qr_code_img TEXT,
  16. order_type VARCHAR(20) NOT NULL DEFAULT 'balance',
  17. plan_id BIGINT,
  18. subscription_group_id BIGINT,
  19. subscription_days INT,
  20. provider_instance_id VARCHAR(64),
  21. status VARCHAR(30) NOT NULL DEFAULT 'PENDING',
  22. refund_amount DECIMAL(20,2) NOT NULL DEFAULT 0,
  23. refund_reason TEXT,
  24. refund_at TIMESTAMPTZ,
  25. force_refund BOOLEAN NOT NULL DEFAULT FALSE,
  26. refund_requested_at TIMESTAMPTZ,
  27. refund_request_reason TEXT,
  28. refund_requested_by VARCHAR(20),
  29. expires_at TIMESTAMPTZ NOT NULL,
  30. paid_at TIMESTAMPTZ,
  31. completed_at TIMESTAMPTZ,
  32. failed_at TIMESTAMPTZ,
  33. failed_reason TEXT,
  34. client_ip VARCHAR(50) NOT NULL DEFAULT '',
  35. src_host VARCHAR(255) NOT NULL DEFAULT '',
  36. src_url TEXT,
  37. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  38. updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
  39. );
  40. -- Indexes
  41. CREATE INDEX IF NOT EXISTS idx_payment_orders_user_id ON payment_orders(user_id);
  42. CREATE INDEX IF NOT EXISTS idx_payment_orders_status ON payment_orders(status);
  43. CREATE INDEX IF NOT EXISTS idx_payment_orders_expires_at ON payment_orders(expires_at);
  44. CREATE INDEX IF NOT EXISTS idx_payment_orders_created_at ON payment_orders(created_at);
  45. CREATE INDEX IF NOT EXISTS idx_payment_orders_paid_at ON payment_orders(paid_at);
  46. CREATE INDEX IF NOT EXISTS idx_payment_orders_type_paid ON payment_orders(payment_type, paid_at);
  47. CREATE INDEX IF NOT EXISTS idx_payment_orders_order_type ON payment_orders(order_type);