init: 初始化仓库
This commit is contained in:
126
service/jrrp/jrrp.go
Normal file
126
service/jrrp/jrrp.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package jrrp
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"math"
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
)
|
||||
|
||||
// 初始化 SQLite 数据库
|
||||
func initDB() {
|
||||
db, err := sql.Open("sqlite3", "./jrrp.db")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
createTableSQL := `CREATE TABLE IF NOT EXISTS jrrp (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
qqid TEXT UNIQUE,
|
||||
date TEXT,
|
||||
rp_value INTEGER
|
||||
);`
|
||||
|
||||
_, err = db.Exec(createTableSQL)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
// 获取今天的日期
|
||||
func getTodayFullDate() string {
|
||||
today := time.Now().Format("2006-01-02")
|
||||
return today
|
||||
}
|
||||
|
||||
// 构造RP值
|
||||
func rpValueConstructor() (string, int) {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
rpValue := int(math.Floor(math.Sqrt(rand.Float64()*100) * 10))
|
||||
if rpValue == 0 {
|
||||
rpValue = 1
|
||||
}
|
||||
return getTodayFullDate(), rpValue
|
||||
}
|
||||
|
||||
// Jrrp 结构体
|
||||
type Jrrp struct {
|
||||
db *sql.DB
|
||||
}
|
||||
|
||||
// NewJrrp 创建 Jrrp 实例
|
||||
func NewJrrp() *Jrrp {
|
||||
initDB()
|
||||
db, err := sql.Open("sqlite3", "./jrrp.db")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
return &Jrrp{db: db}
|
||||
}
|
||||
|
||||
// findJrrp 查找RP数据
|
||||
func (j *Jrrp) findJrrp(qqid string) (string, int, error) {
|
||||
var date string
|
||||
var rpValue int
|
||||
|
||||
query := "SELECT date, rp_value FROM jrrp WHERE qqid = ?"
|
||||
err := j.db.QueryRow(query, qqid).Scan(&date, &rpValue)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return "", 0, nil
|
||||
}
|
||||
return "", 0, err
|
||||
}
|
||||
return date, rpValue, nil
|
||||
}
|
||||
|
||||
// insertJrrp 插入RP数据
|
||||
func (j *Jrrp) insertJrrp(qqid string, date string, rpValue int) error {
|
||||
query := "INSERT OR REPLACE INTO jrrp (qqid, date, rp_value) VALUES (?, ?, ?)"
|
||||
_, err := j.db.Exec(query, qqid, date, rpValue)
|
||||
return err
|
||||
}
|
||||
|
||||
// updateJrrp 更新RP数据
|
||||
func (j *Jrrp) updateJrrp(qqid string) error {
|
||||
date, _, err := j.findJrrp(qqid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if date == "" {
|
||||
return fmt.Errorf("updateJrrp()-> Error: the qqid does not exist!")
|
||||
}
|
||||
newDate, newRpValue := rpValueConstructor()
|
||||
return j.insertJrrp(qqid, newDate, newRpValue)
|
||||
}
|
||||
|
||||
// GetJrrp 获取RP值
|
||||
func (j *Jrrp) GetJrrp(qqid string) (int, error) {
|
||||
today := getTodayFullDate()
|
||||
|
||||
date, rpValue, err := j.findJrrp(qqid)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if date == "" || date != today {
|
||||
newDate, newRpValue := rpValueConstructor()
|
||||
err = j.insertJrrp(qqid, newDate, newRpValue)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return newRpValue, nil
|
||||
}
|
||||
|
||||
return rpValue, nil
|
||||
}
|
||||
|
||||
// Close 关闭数据库连接
|
||||
func (j *Jrrp) Close() {
|
||||
j.db.Close()
|
||||
}
|
||||
Reference in New Issue
Block a user