180 lines
3.8 KiB
Go
180 lines
3.8 KiB
Go
package apns
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
"time"
|
|
)
|
|
|
|
// 连接MySQL数据库
|
|
func ConnectDB() (*sql.DB, error) {
|
|
// 数据库连接信息
|
|
dsn := "wechat_mmtls:hNPpcsT2RH6pYRRk@tcp(106.53.106.115:3306)/wechat_mmtls"
|
|
|
|
// 连接到数据库
|
|
db, err := sql.Open("mysql", dsn)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 测试连接是否成功
|
|
err = db.Ping()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return db, nil
|
|
}
|
|
|
|
// 结果结构体
|
|
type APNSVip struct {
|
|
ID int
|
|
DeviceToken string
|
|
Status int
|
|
UserName string
|
|
WxID string
|
|
}
|
|
|
|
// 结果结构体
|
|
type LicenseKey struct {
|
|
ID int
|
|
DeviceToken string
|
|
Status int
|
|
License string
|
|
expiryDate string
|
|
}
|
|
|
|
// 查询数据
|
|
func QueryData(db *sql.DB, query string) ([]APNSVip, error) {
|
|
// 查询数据
|
|
rows, err := db.Query(query)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var result []APNSVip
|
|
|
|
for rows.Next() {
|
|
var apns APNSVip
|
|
if err := rows.Scan(&apns.ID, &apns.DeviceToken, &apns.Status, &apns.UserName, &apns.WxID); err != nil {
|
|
return nil, err
|
|
}
|
|
result = append(result, apns)
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
// 查询单条记录数据(防止 SQL 注入)
|
|
func queryDataByField(db *sql.DB, fieldName string, value interface{}) (*APNSVip, error) {
|
|
// 构建查询语句
|
|
query := fmt.Sprintf("SELECT * FROM apns_vip WHERE %s = ? LIMIT 1", fieldName)
|
|
|
|
// 查询数据
|
|
row := db.QueryRow(query, value)
|
|
|
|
var apns APNSVip
|
|
err := row.Scan(&apns.ID, &apns.DeviceToken, &apns.Status, &apns.UserName, &apns.WxID)
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
// 如果未找到记录,则返回 nil 和 nil
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return &apns, nil
|
|
}
|
|
|
|
func IsLicenseBind(db *sql.DB, value string) (*LicenseKey, error) {
|
|
// 构建查询语句
|
|
query := fmt.Sprintf("SELECT * FROM license_key WHERE license = ? and status=1 LIMIT 1")
|
|
// 查询数据
|
|
row := db.QueryRow(query, value)
|
|
|
|
var licenseKey LicenseKey
|
|
err := row.Scan(&licenseKey.ID, &licenseKey.DeviceToken, &licenseKey.Status, &licenseKey.License, &licenseKey.expiryDate)
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
// 如果未找到记录,则返回 nil 和 nil
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return &licenseKey, nil
|
|
}
|
|
|
|
func UpdateLicenseBindStatus(db *sql.DB, device_token string, license string) error {
|
|
// 构建更新语句
|
|
query := "UPDATE license_key SET status = 1,device_token=? WHERE license = ? and status=0"
|
|
|
|
// 执行更新操作
|
|
_, err := db.Exec(query, device_token, license)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func HasLicense(db *sql.DB, value string) (*LicenseKey, error) {
|
|
// 构建查询语句
|
|
query := fmt.Sprintf("SELECT license FROM license_key WHERE license = ? LIMIT 1")
|
|
// 查询数据
|
|
row := db.QueryRow(query, value)
|
|
|
|
var licenseKey LicenseKey
|
|
err := row.Scan(&licenseKey.License)
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
// 如果未找到记录,则返回 nil 和 nil
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return &licenseKey, nil
|
|
}
|
|
|
|
// CheckExpiry 检查日期是否过期
|
|
func CheckExpiry(expiryDateString string) bool {
|
|
// 将字符串解析为时间对象
|
|
expiryDate, err := time.Parse("2006-01-02", expiryDateString)
|
|
if err != nil {
|
|
fmt.Println("Error parsing expiry date:", err)
|
|
return false
|
|
}
|
|
|
|
// 获取当前时间
|
|
currentTime := time.Now()
|
|
|
|
// 比较过期日期和当前日期
|
|
if expiryDate.Before(currentTime) {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func main777() {
|
|
// 连接数据库
|
|
db, err := ConnectDB()
|
|
if err != nil {
|
|
fmt.Println(err.Error())
|
|
}
|
|
defer db.Close()
|
|
|
|
// 根据字段查询数据(防止 SQL 注入)
|
|
license := "123"
|
|
license_key, err := IsLicenseBind(db, license)
|
|
if err != nil {
|
|
fmt.Println(err.Error())
|
|
}
|
|
_ = UpdateLicenseBindStatus(db, "333", "123")
|
|
|
|
fmt.Println(license_key)
|
|
}
|