111 lines
2.6 KiB
Go
111 lines
2.6 KiB
Go
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
var DB *sql.DB
|
|
|
|
// InitDB 初始化数据库
|
|
func InitDB(dbPath string) error {
|
|
var err error
|
|
|
|
log.Printf("[DB] 初始化数据库: path=%s", dbPath)
|
|
|
|
// 确保数据库目录存在
|
|
dir := "./data"
|
|
if _, err := os.Stat(dir); os.IsNotExist(err) {
|
|
log.Printf("[DB] 数据库目录不存在, 创建: dir=%s", dir)
|
|
os.MkdirAll(dir, 0755)
|
|
}
|
|
|
|
// 打开数据库连接
|
|
DB, err = sql.Open("sqlite", dbPath)
|
|
if err != nil {
|
|
return fmt.Errorf("打开数据库失败: %w", err)
|
|
}
|
|
|
|
// 创建表
|
|
err = createTables()
|
|
if err != nil {
|
|
return fmt.Errorf("创建表失败: %w", err)
|
|
}
|
|
|
|
log.Printf("[DB] 数据库初始化完成")
|
|
return nil
|
|
}
|
|
|
|
// PlaceholderDownPrice float64 `json:"placeholderDownPrice"` // 占位降价 默认0.01
|
|
// MinShippingFee float64 `json:"minShippingFee"` // 最低运费
|
|
// MinPrice float64 `json:"minPrice"` // 最低书价
|
|
//
|
|
// createTables 创建数据表
|
|
func createTables() error {
|
|
sql := `
|
|
CREATE TABLE IF NOT EXISTS goods_pricing (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
isbn TEXT,
|
|
book_name TEXT,
|
|
author TEXT,
|
|
publishing TEXT,
|
|
out_id TEXT,
|
|
quality TEXT,
|
|
query_index INTEGER DEFAULT 0,
|
|
user_id TEXT,
|
|
price REAL,
|
|
shipping_fee REAL,
|
|
placeholder_down_price REAL, -- 占位降价
|
|
min_shipping_fee REAL, -- 最低运费
|
|
min_price REAL, -- 最低书价
|
|
final_price REAL, -- 最终价格
|
|
fail_count INTEGER DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS kfz_token (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
username TEXT NOT NULL,
|
|
password TEXT NOT NULL DEFAULT '',
|
|
token TEXT NOT NULL,
|
|
is_enable INTEGER DEFAULT 1,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_isbn ON goods_pricing(isbn);
|
|
CREATE INDEX IF NOT EXISTS idx_out_id ON goods_pricing(out_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS kfz_config (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
new_price REAL,
|
|
placeholder_down_price REAL,
|
|
min_shipping_fee REAL,
|
|
min_price REAL,
|
|
query_index INTEGER DEFAULT 0
|
|
);
|
|
`
|
|
|
|
_, err := DB.Exec(sql)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 兼容旧表:添加 password 列(已存在则忽略)
|
|
DB.Exec(`ALTER TABLE kfz_token ADD COLUMN password TEXT NOT NULL DEFAULT ''`)
|
|
|
|
return nil
|
|
}
|
|
|
|
// CloseDB 关闭数据库连接
|
|
func CloseDB() error {
|
|
if DB != nil {
|
|
return DB.Close()
|
|
}
|
|
return nil
|
|
}
|