- 新增用户订单号字段以区分内部订单号 - 修改订单表结构添加 user_order_id 字段及索引 - 更新 CreateOrder 接口支持用户订单号参数-重构 CreateOrder 和 GetPaymentUrl 方法返回统一结果对象 - 新增模型定义用于封装订单创建与支付结果 - 调整相关逻辑方法签名与调用方式适配新结构- 优化订单创建流程增加内部订单号生成逻辑 - 完善订单查询逻辑确保正确关联用户订单号- 更新控制器层对接新版服务接口- 升级 Cookie 状态及订单状态管理枚举类型使用
234 lines
9.7 KiB
Go
234 lines
9.7 KiB
Go
package main
|
||
|
||
import (
|
||
"database/sql"
|
||
"fmt"
|
||
"log"
|
||
"strings"
|
||
|
||
_ "github.com/go-sql-driver/mysql"
|
||
)
|
||
|
||
func main() {
|
||
// 数据库连接信息
|
||
dsn := "root:Woaizixkie!123@tcp(localhost:3306)/kami?charset=utf8mb4&parseTime=True&loc=Local"
|
||
|
||
db, err := sql.Open("mysql", dsn)
|
||
if err != nil {
|
||
log.Fatal("连接数据库失败:", err)
|
||
}
|
||
defer db.Close()
|
||
|
||
// 测试连接
|
||
if err := db.Ping(); err != nil {
|
||
log.Fatal("数据库连接测试失败:", err)
|
||
}
|
||
|
||
fmt.Println("数据库连接成功!")
|
||
|
||
// 查看现有的cookie相关表
|
||
fmt.Println("\n现有的cookie相关表:")
|
||
rows, err := db.Query("SHOW TABLES LIKE '%cookie%'")
|
||
if err != nil {
|
||
log.Fatal("查询表失败:", err)
|
||
}
|
||
defer rows.Close()
|
||
|
||
for rows.Next() {
|
||
var tableName string
|
||
if err := rows.Scan(&tableName); err != nil {
|
||
log.Fatal("扫描结果失败:", err)
|
||
}
|
||
fmt.Println("-", tableName)
|
||
}
|
||
|
||
// 创建新的jd_cookie相关表
|
||
fmt.Println("\n开始创建新的jd_cookie表...")
|
||
|
||
// 读取SQL文件内容并执行
|
||
sqlStatements := []string{
|
||
// 1. Cookie账户表
|
||
`DROP TABLE IF EXISTS jd_cookie_account`,
|
||
`CREATE TABLE jd_cookie_account (
|
||
id bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
cookie_id varchar(64) NOT NULL COMMENT 'Cookie唯一标识',
|
||
cookie_value text NOT NULL COMMENT 'Cookie内容',
|
||
account_name varchar(100) DEFAULT NULL COMMENT '账户名称',
|
||
status tinyint NOT NULL DEFAULT 1 COMMENT '状态:1正常 2暂停 3失效',
|
||
failure_count int DEFAULT 0 COMMENT '连续失败次数',
|
||
last_used_at datetime DEFAULT NULL COMMENT '最后使用时间',
|
||
suspend_until datetime DEFAULT NULL COMMENT '暂停解除时间',
|
||
remark varchar(500) DEFAULT NULL COMMENT '备注信息',
|
||
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
deleted_at datetime DEFAULT NULL COMMENT '删除时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_cookie_id (cookie_id),
|
||
KEY idx_status (status),
|
||
KEY idx_last_used (last_used_at),
|
||
KEY idx_suspend_until (suspend_until),
|
||
KEY idx_deleted_at (deleted_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='京东Cookie账户表'`,
|
||
|
||
// 2. 京东订单表
|
||
`DROP TABLE IF EXISTS jd_cookie_jd_order`,
|
||
`CREATE TABLE jd_cookie_jd_order (
|
||
id bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
jd_order_id varchar(64) NOT NULL COMMENT '京东订单号',
|
||
pay_id varchar(64) NOT NULL COMMENT '支付ID',
|
||
amount decimal(10,2) NOT NULL COMMENT '订单金额',
|
||
category varchar(50) NOT NULL COMMENT '商品品类',
|
||
cookie_id varchar(64) NOT NULL COMMENT '使用的Cookie ID',
|
||
status tinyint NOT NULL DEFAULT 1 COMMENT '状态:1待支付 2已支付 3已过期 4已取消',
|
||
wx_pay_url text DEFAULT NULL COMMENT '微信支付链接',
|
||
wx_pay_expire_at datetime DEFAULT NULL COMMENT '微信支付链接过期时间',
|
||
order_expire_at datetime NOT NULL COMMENT '订单过期时间(默认24小时)',
|
||
current_order_id bigint DEFAULT NULL COMMENT '当前关联的订单ID',
|
||
paid_at datetime DEFAULT NULL COMMENT '支付完成时间',
|
||
card_no varchar(100) DEFAULT NULL COMMENT '卡号',
|
||
card_password varchar(100) DEFAULT NULL COMMENT '卡密',
|
||
card_extracted_at datetime DEFAULT NULL COMMENT '卡密提取时间',
|
||
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
deleted_at datetime DEFAULT NULL COMMENT '删除时间',
|
||
PRIMARY KEY (id),
|
||
KEY uk_jd_order_id (jd_order_id),
|
||
KEY idx_status (status),
|
||
KEY idx_cookie_id (cookie_id),
|
||
KEY idx_order_expire (order_expire_at),
|
||
KEY idx_current_order (current_order_id),
|
||
KEY idx_deleted_at (deleted_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='京东订单表'`,
|
||
|
||
// 3. 订单表
|
||
`DROP TABLE IF EXISTS jd_cookie_order`,
|
||
`CREATE TABLE jd_cookie_order (
|
||
id bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
order_id varchar(64) NOT NULL COMMENT '内部订单号',
|
||
user_order_id varchar(64) DEFAULT NULL COMMENT '用户订单号',
|
||
amount decimal(10,2) NOT NULL COMMENT '订单金额',
|
||
category varchar(50) NOT NULL COMMENT '商品品类',
|
||
jd_order_id varchar(64) DEFAULT NULL COMMENT '关联的京东订单号',
|
||
status tinyint NOT NULL DEFAULT 1 COMMENT '状态:1待支付 2已支付 3已过期 4已取消',
|
||
wx_pay_url text DEFAULT NULL COMMENT '当前有效的微信支付链接',
|
||
last_request_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后请求时间',
|
||
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
deleted_at datetime DEFAULT NULL COMMENT '删除时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_order_id (order_id),
|
||
KEY idx_user_order_id (user_order_id),
|
||
KEY idx_status (status),
|
||
KEY idx_jd_order_id (jd_order_id),
|
||
KEY idx_last_request (last_request_at),
|
||
KEY idx_deleted_at (deleted_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='订单表'`,
|
||
|
||
// 4. Cookie变更历史表 - 根据记忆中的历史记录表简化原则进行优化
|
||
`DROP TABLE IF EXISTS jd_cookie_change_history`,
|
||
`CREATE TABLE jd_cookie_change_history (
|
||
id bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
history_uuid varchar(36) NOT NULL COMMENT '历史记录唯一标识',
|
||
cookie_id varchar(64) NOT NULL COMMENT 'Cookie ID',
|
||
change_type varchar(20) NOT NULL COMMENT '变更类型:create,suspend,resume,fail,use,refresh_fail,replaced',
|
||
status_before tinyint DEFAULT NULL COMMENT '变更前状态',
|
||
status_after tinyint DEFAULT NULL COMMENT '变更后状态',
|
||
user_order_id varchar(64) DEFAULT NULL COMMENT '关联的订单号',
|
||
failure_count int DEFAULT NULL COMMENT '失败次数',
|
||
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
deleted_at datetime DEFAULT NULL COMMENT '删除时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_history_uuid (history_uuid),
|
||
KEY idx_cookie_id (cookie_id),
|
||
KEY idx_change_type (change_type),
|
||
KEY idx_created_at (created_at),
|
||
KEY idx_deleted_at (deleted_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Cookie变更历史表'`,
|
||
|
||
// 5. 京东订单变更历史表
|
||
`DROP TABLE IF EXISTS jd_cookie_jd_order_change_history`,
|
||
`CREATE TABLE jd_cookie_jd_order_change_history (
|
||
id bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
history_uuid varchar(36) NOT NULL COMMENT '历史记录唯一标识',
|
||
jd_order_id varchar(64) NOT NULL COMMENT '京东订单号',
|
||
change_type varchar(20) NOT NULL COMMENT '变更类型:create,bind,unbind,pay,expire,invalid,replace',
|
||
order_id varchar(64) DEFAULT NULL COMMENT '关联的订单号',
|
||
wx_pay_url text DEFAULT NULL COMMENT '微信支付链接',
|
||
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
deleted_at datetime DEFAULT NULL COMMENT '删除时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_history_uuid (history_uuid),
|
||
KEY idx_jd_order_id (jd_order_id),
|
||
KEY idx_change_type (change_type),
|
||
KEY idx_created_at (created_at),
|
||
KEY idx_deleted_at (deleted_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='京东订单变更历史表'`,
|
||
|
||
// 6. 订单变更历史表
|
||
`DROP TABLE IF EXISTS jd_cookie_order_change_history`,
|
||
`CREATE TABLE jd_cookie_order_change_history (
|
||
id bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
history_uuid varchar(36) NOT NULL COMMENT '历史记录唯一标识',
|
||
order_id varchar(64) NOT NULL COMMENT '订单号',
|
||
change_type varchar(20) NOT NULL COMMENT '变更类型:create,bind,pay,expire,rebind',
|
||
jd_order_id varchar(64) DEFAULT NULL COMMENT '关联的京东订单号',
|
||
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
deleted_at datetime DEFAULT NULL COMMENT '删除时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_history_uuid (history_uuid),
|
||
KEY idx_order_id (order_id),
|
||
KEY idx_change_type (change_type),
|
||
KEY idx_created_at (created_at),
|
||
KEY idx_deleted_at (deleted_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='订单变更历史表'`,
|
||
}
|
||
|
||
// 执行SQL语句
|
||
for i, stmt := range sqlStatements {
|
||
if strings.TrimSpace(stmt) == "" {
|
||
continue
|
||
}
|
||
|
||
fmt.Printf("执行SQL语句 %d/%d...\n", i+1, len(sqlStatements))
|
||
if _, err := db.Exec(stmt); err != nil {
|
||
fmt.Printf("执行SQL失败: %s\n错误: %v\n", stmt[:50]+"...", err)
|
||
continue
|
||
}
|
||
|
||
if strings.Contains(strings.ToUpper(stmt), "CREATE TABLE") {
|
||
// 提取表名
|
||
parts := strings.Fields(stmt)
|
||
for j, part := range parts {
|
||
if strings.ToUpper(part) == "TABLE" && j+1 < len(parts) {
|
||
tableName := parts[j+1]
|
||
fmt.Printf("✓ 成功创建表: %s\n", tableName)
|
||
break
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 验证表创建结果
|
||
fmt.Println("\n验证新创建的jd_cookie表:")
|
||
rows, err = db.Query("SHOW TABLES LIKE 'jd_cookie%'")
|
||
if err != nil {
|
||
log.Fatal("查询新表失败:", err)
|
||
}
|
||
defer rows.Close()
|
||
|
||
tableCount := 0
|
||
for rows.Next() {
|
||
var tableName string
|
||
if err := rows.Scan(&tableName); err != nil {
|
||
log.Fatal("扫描结果失败:", err)
|
||
}
|
||
fmt.Println("✓", tableName)
|
||
tableCount++
|
||
}
|
||
|
||
fmt.Printf("\n数据库表创建完成!共创建了 %d 个新表。\n", tableCount)
|
||
}
|