低空智控平台 后端go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

91 lines
5.4 KiB

-- 支付与 SIM 套餐续费基础。执行前请先备份生产数据库。
ALTER TABLE traffic_order
ADD COLUMN total_fee_fen BIGINT NOT NULL DEFAULT 0 COMMENT '固定支付金额(分)' AFTER total_price,
ADD COLUMN payment_provider VARCHAR(32) DEFAULT '' COMMENT '支付渠道' AFTER pay_status,
ADD COLUMN provider_trade_no VARCHAR(128) DEFAULT '' COMMENT '第三方交易号' AFTER payment_provider,
ADD COLUMN credit_attempt_count INT NOT NULL DEFAULT 0 COMMENT '入账尝试次数' AFTER credit_status,
ADD COLUMN next_credit_at DATETIME NULL COMMENT '下次入账时间' AFTER credit_attempt_count,
ADD COLUMN closed_at DATETIME NULL COMMENT '关闭时间' AFTER paid_at,
ADD UNIQUE KEY uk_traffic_order_provider_trade (payment_provider, provider_trade_no),
ADD KEY idx_traffic_order_credit_retry (pay_status, credit_status, next_credit_at);
UPDATE traffic_order
SET total_fee_fen = ROUND(total_price * 100)
WHERE total_fee_fen = 0 AND total_price IS NOT NULL;
CREATE TABLE IF NOT EXISTS sim_package (
id BIGINT PRIMARY KEY COMMENT '主键 ID',
code VARCHAR(64) NOT NULL COMMENT '平台套餐编码',
name VARCHAR(128) NOT NULL COMMENT '套餐名称',
carrier VARCHAR(16) NOT NULL COMMENT '运营商',
provider_rate_plan_id BIGINT NOT NULL COMMENT 'SIMBOSS 套餐标识',
amount_gb INT NOT NULL COMMENT '流量额度 GB',
validity_months INT NOT NULL COMMENT '有效月数',
cost_fee_fen BIGINT NOT NULL COMMENT '采购成本(分)',
sale_fee_fen BIGINT NOT NULL COMMENT '销售价格(分)',
status VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT 'active/inactive',
created_at DATETIME NULL COMMENT '创建时间',
updated_at DATETIME NULL COMMENT '更新时间',
UNIQUE KEY uk_sim_package_code (code),
UNIQUE KEY uk_sim_package_provider_plan (carrier, provider_rate_plan_id),
KEY idx_sim_package_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS sim_recharge_order (
id BIGINT PRIMARY KEY COMMENT '主键 ID',
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
sim_card_id BIGINT NOT NULL COMMENT 'SIM 卡 ID',
package_id BIGINT NOT NULL COMMENT '套餐 ID',
package_code VARCHAR(64) NOT NULL COMMENT '套餐编码快照',
provider_rate_plan_id BIGINT NOT NULL COMMENT 'SIMBOSS 套餐标识快照',
iccid_snapshot VARCHAR(32) NOT NULL COMMENT 'ICCID 快照,仅供履约',
amount_gb INT NOT NULL COMMENT '流量额度 GB',
validity_months INT NOT NULL COMMENT '有效月数',
total_fee_fen BIGINT NOT NULL COMMENT '固定支付金额(分)',
payment_status VARCHAR(16) NOT NULL DEFAULT 'unpaid' COMMENT 'unpaid/processing/paid/failed/closed',
fulfillment_status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT 'pending/submitting/retrying/success/failed',
external_order_no VARCHAR(128) NOT NULL COMMENT '平台稳定外部订单号',
provider_order_no VARCHAR(128) DEFAULT '' COMMENT '运营商流水号',
attempt_count INT NOT NULL DEFAULT 0 COMMENT '履约尝试次数',
next_attempt_at DATETIME NULL COMMENT '下次履约时间',
last_error_code VARCHAR(64) DEFAULT '' COMMENT '最后错误代码',
last_error_message VARCHAR(256) DEFAULT '' COMMENT '最后错误信息',
created_at DATETIME NULL COMMENT '创建时间',
paid_at DATETIME NULL COMMENT '支付时间',
fulfilled_at DATETIME NULL COMMENT '履约时间',
updated_at DATETIME NULL COMMENT '更新时间',
UNIQUE KEY uk_sim_recharge_external (external_order_no),
KEY idx_sim_recharge_user_created (user_id, created_at),
KEY idx_sim_recharge_fulfillment_retry (payment_status, fulfillment_status, next_attempt_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS payment_transaction (
id BIGINT PRIMARY KEY COMMENT '主键 ID',
user_id BIGINT NOT NULL COMMENT '付款用户 ID',
business_type VARCHAR(32) NOT NULL COMMENT 'traffic_order/sim_recharge_order',
business_order_id BIGINT NOT NULL COMMENT '业务订单 ID',
provider VARCHAR(32) NOT NULL COMMENT '支付渠道',
merchant_order_no VARCHAR(128) NOT NULL COMMENT '商户订单号',
provider_trade_no VARCHAR(128) DEFAULT '' COMMENT '第三方交易号',
total_fee_fen BIGINT NOT NULL COMMENT '固定金额(分)',
status VARCHAR(16) NOT NULL DEFAULT 'unpaid' COMMENT 'unpaid/processing/paid/failed/closed',
created_at DATETIME NULL COMMENT '创建时间',
paid_at DATETIME NULL COMMENT '支付时间',
updated_at DATETIME NULL COMMENT '更新时间',
UNIQUE KEY uk_payment_merchant_order (provider, merchant_order_no),
UNIQUE KEY uk_payment_provider_trade (provider, provider_trade_no),
KEY idx_payment_business (business_type, business_order_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS payment_callback_event (
id BIGINT PRIMARY KEY COMMENT '主键 ID',
provider VARCHAR(32) NOT NULL COMMENT '支付渠道',
event_key VARCHAR(128) NOT NULL COMMENT '回调事件幂等键',
payload_hash VARCHAR(64) NOT NULL COMMENT '载荷哈希',
verified TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否通过验签',
processed_at DATETIME NULL COMMENT '处理时间',
result_code VARCHAR(64) DEFAULT '' COMMENT '处理结果',
created_at DATETIME NULL COMMENT '创建时间',
UNIQUE KEY uk_payment_callback_event (provider, event_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;