all_platform/job/job.go
2025-03-16 23:57:25 +08:00

210 lines
5.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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("已有今天的数据,不在插入数据")
}
}
}