all_platform/job/job.go

210 lines
5.8 KiB
Go
Raw Normal View History

2025-03-16 23:57:25 +08:00
package job
import (
"all_platform/conn"
"all_platform/dbpool"
"bytes"
"database/sql"
"encoding/json"
"fmt"
"log"
"time"
"github.com/robfig/cron/v3"
)
func Job() {
job := cron.New(cron.WithSeconds())
job.Schedule(cron.Every(5*time.Minute), &myJob{
t: time.Now(),
})
job.Schedule(cron.Every(30*time.Minute), &myJob1{
t: time.Now(),
})
job.Start()
select {}
}
// 查询ip地区并写入数据库
type myJob struct {
i int
t time.Time
}
type myJob1 struct {
i int
t time.Time
}
// 更新ip地址用户地区
func (j *myJob) Run() {
j.i++
now := time.Now()
sub := now.Sub(j.t)
j.t = now
fmt.Printf("ip地址更新: %d, duraction : %d ms \n", j.i, sub.Milliseconds())
//查询sql 获取用户信息
rows, err := dbpool.Query("SELECT DT_SRCIPADDR FROM `dt_zgdz`.`dt_attack_event` WHERE DT_CUNTRY IS NULL LIMIT 1")
if err != nil {
log.Println(err)
}
defer rows.Close()
// var typecho_userss []dbpool.Typecho_users
var ipStr sql.NullString
for rows.Next() {
if err := rows.Scan(&ipStr); err != nil {
log.Println(err)
}
// typecho_userss = append(typecho_userss, users)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
if ipStr.Valid {
//请求接口获取ip地区
header := map[string]string{
"Content-Type": "application/json",
}
url := "http://ip-api.com/json/" + ipStr.String + "?lang=zh-CN"
iplistStr := conn.DT_GET(url, header, nil)
var data map[string]interface{}
err = json.Unmarshal([]byte(iplistStr), &data)
if err != nil {
log.Fatal(err)
}
//开始更新数据
result, err := dbpool.ExecuteSQL("UPDATE `dt_zgdz`.`dt_attack_event` SET `DT_CUNTRY`=? where DT_SRCIPADDR = ?", data["country"].(string)+"/"+data["city"].(string), ipStr.String)
if err != nil {
log.Println(err)
}
// 获取插入操作的最后插入ID和受影响的行数
lastInsertId, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
rowsAffected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
log.Printf("Last Insert ID: %d, Rows Affected: %d\n", lastInsertId, rowsAffected)
} else {
log.Println("没有数据")
}
}
// 每天更新一次星座数据
func (j1 *myJob1) Run() {
j1.i++
now := time.Now()
sub := now.Sub(j1.t)
j1.t = now
fmt.Printf("星座信息更新: %d, duraction : %d ms \n", j1.i, sub.Milliseconds())
//更具星座列表获取星座数据
//查询sql 获取用户信息
rows, err := dbpool.Query("SELECT DT_ITEMID FROM `all_platform`.`dt_constellation` ")
if err != nil {
log.Println(err)
}
defer rows.Close()
var typecho_userss []string
var itemIDStr sql.NullString
for rows.Next() {
if err := rows.Scan(&itemIDStr); err != nil {
log.Println(err)
}
typecho_userss = append(typecho_userss, itemIDStr.String)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
for _, v := range typecho_userss {
//查询sql 获取用户信息
rows, err := dbpool.Query("SELECT DT_DATE FROM `all_platform`.`dt_constellation_info` WHERE DT_DATE=? LIMIT 1 ;", time.Now().Format("2006-01-02"))
if err != nil {
log.Println(err)
}
defer rows.Close()
// var typecho_userss []string
var itemIDStr sql.NullString
for rows.Next() {
if err := rows.Scan(&itemIDStr); err != nil {
log.Println(err)
}
// typecho_userss = append(typecho_userss, itemIDStr.String)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
//不等于今天,插入数据,等于今天,不插入数据
if itemIDStr.String != time.Now().Format("2006-01-02") {
//请求接口获取ip地区
header := map[string]string{
"Content-Type": "application/json",
}
jsonStr := `{
"cardDataReq": [
{
"serviceID": "e61264eb17f94d518dc143344304ef29",
"beginTime": "` + time.Now().Format("2006-01-02") + `T00:00+0800",
"endTime": "` + time.Now().Format("2006-01-02") + `T23:59+0800",
"parameters": {
"itemID": "` + v + `",
"type": [
"today",
"tomorrow",
"week",
"month"
]
}
}
],
"reqAllInfo": 1
}`
listStr := conn.DT_POST("https://api-calendar-drcn.music.dbankcloud.cn/calendar-sub-service/v1/carddata/simple/querybyids", header, bytes.NewBuffer([]byte(jsonStr)))
var data map[string]interface{}
err = json.Unmarshal([]byte(listStr), &data)
if err != nil {
log.Fatal(err)
}
var dataStr map[string]interface{}
if err := json.Unmarshal([]byte(data["datas"].([]interface{})[0].(map[string]interface{})["originalData"].([]interface{})[0].(map[string]interface{})["data"].(string)), &dataStr); err != nil {
log.Fatal(err)
}
// 将 map 转换为 JSON 格式的字符串
week, err := json.Marshal(dataStr["week"])
month, err := json.Marshal(dataStr["month"])
today, err := json.Marshal(dataStr["today"])
tomorrow, err := json.Marshal(dataStr["tomorrow"])
if err != nil {
fmt.Println("Error marshaling JSON:", err)
return
}
if dataStr["date"].(string) != "" {
//开始更新数据
result, err := dbpool.ExecuteSQL("INSERT INTO `all_platform`.`dt_constellation_info` (`DT_DATE`, `DT_SIGNNAME`, `DT_WEEK`, `DT_MONTH`, `DT_TODAY`, `DT_TOMORROW`) VALUES (?,?,?,?,?,?);", dataStr["date"], dataStr["signName"], week, month, today, tomorrow)
if err != nil {
log.Println(err)
}
// 获取插入操作的最后插入ID和受影响的行数
lastInsertId, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
rowsAffected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
log.Printf("Last Insert ID: %d, Rows Affected: %d\n", lastInsertId, rowsAffected)
} else {
log.Println("没有数据")
}
} else {
log.Println("已有今天的数据,不在插入数据")
}
}
}