package database import ( "database/sql" "fmt" "os" _ "modernc.org/sqlite" ) var DB *sql.DB // InitDB 初始化数据库 func InitDB(dbPath string) error { var err error // 确保数据库目录存在 dir := "./data" if _, err := os.Stat(dir); os.IsNotExist(err) { 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) } 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, 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) return err } // CloseDB 关闭数据库连接 func CloseDB() error { if DB != nil { return DB.Close() } return nil }