- 更新任务
continuous-integration/drone/tag Build is failing Details
continuous-integration/drone/push Build is failing Details

master v1.0.18
李光春 2 years ago
parent 255be172e7
commit 64ee822347

@ -1,3 +1,7 @@
## v1.0.18
- 更新任务
## v1.0.17
- 优化任务

@ -6,7 +6,10 @@ require (
gitee.com/chunanyong/zorm v1.5.5
github.com/beego/beego/v2 v2.0.3
github.com/robfig/cron/v3 v3.0.1
go.dtapp.net/goarray v1.0.0
go.dtapp.net/goip v1.0.17
go.dtapp.net/goredis v1.0.0
go.dtapp.net/gotime v1.0.2
go.dtapp.net/gouuid v1.0.0
go.etcd.io/etcd/api/v3 v3.5.4
go.etcd.io/etcd/client/v3 v3.5.4
@ -17,8 +20,11 @@ require (
)
require (
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/coreos/go-semver v0.3.0 // indirect
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/go-redis/redis/v8 v8.11.5 // indirect
github.com/goccy/go-json v0.9.7 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect
@ -37,7 +43,6 @@ require (
github.com/ulikunitz/xz v0.5.10 // indirect
go.dtapp.net/gorequest v1.0.19 // indirect
go.dtapp.net/gostring v1.0.3 // indirect
go.dtapp.net/gotime v1.0.2 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.4 // indirect
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.8.0 // indirect

@ -39,6 +39,8 @@ github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
@ -66,6 +68,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
@ -84,6 +88,7 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
@ -92,6 +97,8 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
@ -181,7 +188,6 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
@ -313,14 +319,15 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE
github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
@ -429,8 +436,12 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
go.dtapp.net/goarray v1.0.0 h1:M2oopyC290j7HGkrhUxJB5w+a7fmPgGU5Q0CHYaNB8k=
go.dtapp.net/goarray v1.0.0/go.mod h1:/MPhlFCAhQyeNV1M0v1PAOOX33Sg705fVjUgMO12IBQ=
go.dtapp.net/goip v1.0.17 h1:xkUSTwMNjx1uc4MCs6vmSmiDNlcFNlCTA1tqrM9fmAY=
go.dtapp.net/goip v1.0.17/go.mod h1:VrFnytj/KJH81m7Hx43mekbqJvsHbiNOS1Ikm2XaFFw=
go.dtapp.net/goredis v1.0.0 h1:IvoOvdPeQlT2UR6lbumr+zN0x7ikTz9ro7od7jydD2U=
go.dtapp.net/goredis v1.0.0/go.mod h1:Wmrgb5yfbV7SiIK0NLdBOFWKnrQs+5g8p3t5+cjQkMM=
go.dtapp.net/gorequest v1.0.19 h1:ZBkXb/oD59aChfzHfReK6M3M4eu3dwpaPTefe1c8P90=
go.dtapp.net/gorequest v1.0.19/go.mod h1:EwOfdfxsWPszOWrphCWHTN4DbYtU6fyQ/fuWQyQwSnk=
go.dtapp.net/gostring v1.0.3 h1:KSOq4D77/g5yZN/bqWfZ0kOOaPr/P1240vg03+XdENI=
@ -668,7 +679,6 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=

@ -1,15 +1,34 @@
package gojobs
import "gorm.io/gorm"
import (
"go.dtapp.net/goarray"
"go.dtapp.net/goip"
"go.dtapp.net/gojobs/jobs_gorm"
"go.dtapp.net/goredis"
"gorm.io/gorm"
"runtime"
)
type JobsGorm struct {
Db *gorm.DB
type ConfigJobsGorm struct {
MainService int // 主要服务
Db *gorm.DB // 数据库
Redis goredis.App // 缓存数据库服务
}
func NewJobsGorm(db *gorm.DB) *JobsGorm {
func NewJobsGorm(config *ConfigJobsGorm) *jobs_gorm.JobsGorm {
var (
jobsGorm = &JobsGorm{}
jobsGorm = &jobs_gorm.JobsGorm{}
)
jobsGorm.Db = db
jobsGorm.RunVersion = Version
jobsGorm.Os = runtime.GOOS
jobsGorm.Arch = runtime.GOARCH
jobsGorm.MaxProCs = runtime.GOMAXPROCS(0)
jobsGorm.Version = runtime.Version()
jobsGorm.MacAddrS = goarray.TurnString(goip.GetMacAddr())
jobsGorm.InsideIp = goip.GetInsideIp()
jobsGorm.OutsideIp = goip.GetOutsideIp()
jobsGorm.MainService = config.MainService
jobsGorm.Db = config.Db
jobsGorm.Redis = config.Redis
return jobsGorm
}

@ -0,0 +1,19 @@
package jobs_gorm
import (
"go.dtapp.net/gotime"
"gorm.io/gorm"
"log"
)
func (jobsGorm *JobsGorm) Check(tx *gorm.DB, vs []Task) {
if jobsGorm.MainService > 0 && len(vs) > 0 {
for _, v := range vs {
diffInSecondWithAbs := gotime.Current().DiffInSecondWithAbs(gotime.SetCurrentParse(v.UpdatedAt).Time)
if diffInSecondWithAbs >= v.Frequency*3 {
log.Printf("每隔%v秒任务%v相差%v秒\n", v.Frequency, v.Id, diffInSecondWithAbs)
tx.Where("task_id = ?", v.Id).Where("run_id = ?", v.RunId).Delete(&TaskLogRun{}) // 删除
}
}
}
}

@ -0,0 +1,70 @@
package jobs_gorm
import (
"fmt"
"net/http"
)
const (
CodeAbnormal = 0 // 异常
CodeError = http.StatusInternalServerError // 失败
CodeSuccess = http.StatusOK // 成功
CodeEnd = http.StatusCreated // 结束
)
// 每隔n秒执行一次
const specSeconds = "*/%d * * * * *"
// GetSpecSeconds 每隔n秒执行一次
var GetSpecSeconds = func(n int64) string {
if n < 0 && n > 59 {
return ""
}
return fmt.Sprintf(specSeconds, n)
}
// GetFrequencySeconds 每隔n秒执行一次
var GetFrequencySeconds = func(n int64) int64 {
if n < 0 && n > 59 {
return -1
}
return n
}
// 每隔n分钟执行一次
const specMinutes = "0 */%d * * * *"
// GetSpecMinutes 每隔n分钟执行一次
var GetSpecMinutes = func(n int64) string {
if n < 0 && n > 59 {
return ""
}
return fmt.Sprintf(specMinutes, n)
}
// GetFrequencyMinutes 每隔n分钟执行一次
var GetFrequencyMinutes = func(n int64) int64 {
if n < 0 && n > 59 {
return -1
}
return n * 60
}
// 每天n点执行一次
const specHour = "0 0 */%d * * *"
// GetSpecHour 每天n点执行一次
var GetSpecHour = func(n int64) string {
if n < 0 && n > 23 {
return ""
}
return fmt.Sprintf(specHour, n)
}
// GetFrequencyHour 每天n点执行一次
var GetFrequencyHour = func(n int64) int64 {
if n < 0 && n > 23 {
return -1
}
return n * 60 * 60
}

@ -0,0 +1,18 @@
package jobs_gorm
import "testing"
func TestSpec(t *testing.T) {
t.Log(GetSpecSeconds(10))
t.Log(GetFrequencySeconds(10))
t.Log(GetSpecMinutes(1))
t.Log(GetFrequencyMinutes(1))
t.Log(GetSpecMinutes(10))
t.Log(GetFrequencyMinutes(10))
t.Log(GetSpecMinutes(30))
t.Log(GetFrequencyMinutes(30))
t.Log(GetSpecHour(10))
t.Log(GetFrequencyHour(10))
}

@ -0,0 +1,19 @@
package jobs_gorm
import (
"go.dtapp.net/goip"
"gorm.io/gorm"
)
// RefreshIp 刷新Ip
func (jobsGorm *JobsGorm) RefreshIp(tx *gorm.DB) {
xip := goip.GetOutsideIp()
if jobsGorm.OutsideIp == "" || jobsGorm.OutsideIp == "0.0.0.0" {
return
}
if jobsGorm.OutsideIp == xip {
return
}
tx.Where("ips = ?", jobsGorm.OutsideIp).Delete(&TaskIp{}) // 删除
jobsGorm.OutsideIp = xip
}

@ -0,0 +1,18 @@
package jobs_gorm
import "gorm.io/gorm"
import "go.dtapp.net/goredis"
type JobsGorm struct {
RunVersion string // 运行版本
Os string // 系统类型
Arch string // 系统架构
MaxProCs int // CPU核数
Version string // GO版本
MacAddrS string // Mac地址
InsideIp string // 内网ip
OutsideIp string // 外网ip
MainService int // 主要服务
Db *gorm.DB // 数据库
Redis goredis.App // 缓存数据库服务
}

@ -0,0 +1,35 @@
package jobs_gorm
import (
"fmt"
"go.dtapp.net/goredis"
"time"
)
// Lock 上锁
func (jobsGorm *JobsGorm) Lock(info Task, id any) string {
cacheName := fmt.Sprintf("cron:%v:%v", info.Type, id)
judgeCache := jobsGorm.Redis.NewStringOperation().Get(cacheName).UnwrapOr("")
if judgeCache != "" {
return judgeCache
}
jobsGorm.Redis.NewStringOperation().Set(cacheName, fmt.Sprintf("已在%v机器上锁成功", jobsGorm.OutsideIp), goredis.WithExpire(time.Millisecond*time.Duration(info.Frequency)*3))
return ""
}
// Unlock Lock 解锁
func (jobsGorm *JobsGorm) Unlock(info Task, id any) {
cacheName := fmt.Sprintf("cron:%v:%v", info.Type, id)
jobsGorm.Redis.NewStringOperation().Del(cacheName)
}
// LockForever 永远上锁
func (jobsGorm *JobsGorm) LockForever(info Task, id any) string {
cacheName := fmt.Sprintf("cron:%v:%v", info.Type, id)
judgeCache := jobsGorm.Redis.NewStringOperation().Get(cacheName).UnwrapOr("")
if judgeCache != "" {
return judgeCache
}
jobsGorm.Redis.NewStringOperation().Set(cacheName, fmt.Sprintf("已在%v机器永远上锁成功", jobsGorm.OutsideIp))
return ""
}

@ -1,6 +1,9 @@
package jobs_gorm_model
package jobs_gorm
import "gorm.io/gorm"
import (
"go.dtapp.net/gojobs"
"gorm.io/gorm"
)
// Task 任务
type Task struct {
@ -28,3 +31,47 @@ type Task struct {
func (m *Task) TableName() string {
return "task"
}
// TaskTake 查询任务
func (jobsGorm *JobsGorm) TaskTake(tx *gorm.DB, customId string) (result Task) {
tx.Where("custom_id = ?", customId).Where("status = ?", gojobs.TASK_IN).Take(&result)
return result
}
// TaskCustomIdTake 查询任务
func (jobsGorm *JobsGorm) TaskCustomIdTake(tx *gorm.DB, Type, customId string) (result Task) {
tx.Where("type = ?", Type).Where("custom_id = ?", customId).Take(&result)
return result
}
// TaskCustomIdTakeStatus 查询任务
func (jobsGorm *JobsGorm) TaskCustomIdTakeStatus(tx *gorm.DB, Type, customId, status string) (result Task) {
tx.Where("type = ?", Type).Where("custom_id = ?", customId).Where("status = ?", status).Take(&result)
return result
}
// TaskFind 查询任务
func (jobsGorm *JobsGorm) TaskFind(tx *gorm.DB, frequency int64) (results []Task) {
tx.Table("task").Select("task.*").Where("task.frequency = ?", frequency).Where("task.status = ?", gojobs.TASK_IN).Where("task_ip.ips = ?", jobsGorm.OutsideIp).Order("task.id asc").Joins("left join task_ip on task_ip.task_type = task.type").Find(&results)
return jobsGorm.taskFindCheck(results)
}
// TaskFindAll 查询任务
func (jobsGorm *JobsGorm) TaskFindAll(tx *gorm.DB, frequency int64) (results []Task) {
tx.Where("frequency = ?", frequency).Where("status = ?", gojobs.TASK_IN).Order("id asc").Find(&results)
return results
}
// 检查任务
func (jobsGorm *JobsGorm) taskFindCheck(lists []Task) (results []Task) {
for _, v := range lists {
if v.SpecifyIp == "" {
results = append(results, v)
} else {
if jobsGorm.OutsideIp == v.SpecifyIp {
results = append(results, v)
}
}
}
return results
}

@ -0,0 +1,64 @@
package jobs_gorm
import (
"gorm.io/gorm"
"log"
"strings"
)
// TaskIp 任务Ip
type TaskIp struct {
Id int64 `gorm:"primaryKey" json:"id"` // 记录编号
TaskType string `json:"task_type"` // 任务编号
Ips string `json:"ips"` // 任务IP
}
func (m *TaskIp) TableName() string {
return "task_ip"
}
func (jobsGorm *JobsGorm) TaskIpUpdate(tx *gorm.DB, taskType, ips string) *gorm.DB {
var query TaskIp
tx.Where("task_type = ?", taskType).Where("ips = ?", ips).Take(&query)
if query.Id != 0 {
return tx
}
updateStatus := tx.Create(&TaskIp{
TaskType: taskType,
Ips: ips,
})
if updateStatus.RowsAffected == 0 {
log.Println("任务更新失败:", updateStatus.Error)
}
return updateStatus
}
// TaskIpInit 实例任务ip
func (jobsGorm *JobsGorm) TaskIpInit(tx *gorm.DB, ips map[string]string) bool {
if jobsGorm.OutsideIp == "" || jobsGorm.OutsideIp == "0.0.0.0" {
return false
}
tx.Where("ips = ?", jobsGorm.OutsideIp).Delete(&TaskIp{}) // 删除
for k, v := range ips {
if v == "" {
jobsGorm.TaskIpUpdate(tx, k, jobsGorm.OutsideIp)
} else {
find := strings.Contains(v, ",")
if find == true {
// 包含
parts := strings.Split(v, ",")
for _, vv := range parts {
if vv == jobsGorm.OutsideIp {
jobsGorm.TaskIpUpdate(tx, k, jobsGorm.OutsideIp)
}
}
} else {
// 不包含
if v == jobsGorm.OutsideIp {
jobsGorm.TaskIpUpdate(tx, k, jobsGorm.OutsideIp)
}
}
}
}
return true
}

@ -1,4 +1,4 @@
package jobs_gorm_model
package jobs_gorm
// TaskLog 任务日志模型
type TaskLog struct {
@ -6,7 +6,7 @@ type TaskLog struct {
TaskId uint `json:"task_id"` // 任务编号
StatusCode int `json:"status_code"` // 状态码
Desc string `json:"desc"` // 结果
Version int `json:"version"` // 版本
Version string `json:"version"` // 版本
CreatedAt string `gorm:"type:text" json:"created_at"` // 创建时间
}

@ -1,4 +1,8 @@
package jobs_gorm_model
package jobs_gorm
import (
"gorm.io/gorm"
)
// TaskLogRun 任务执行日志模型
type TaskLogRun struct {
@ -18,3 +22,9 @@ type TaskLogRun struct {
func (m *TaskLogRun) TableName() string {
return "task_log_run"
}
// TaskLogRunTake 查询任务执行日志
func (jobsGorm *JobsGorm) TaskLogRunTake(tx *gorm.DB, taskId uint, runId string) (result TaskLogRun) {
tx.Select("id", "os", "arch", "outside_ip", "created_at").Where("task_id = ?", taskId).Where("run_id = ?", runId).Take(&result)
return result
}

@ -0,0 +1,29 @@
package jobs_gorm
var ParamsOrderType = "order"
// ParamsOrderId 订单任务
type ParamsOrderId struct {
OrderId string `json:"order_id,omitempty"`
}
var ParamsMerchantGoldenBeanType = "merchant.golden_bean"
var ParamsNewServiceType = "new_service"
// ParamsTaskId 企业自定义任务
type ParamsTaskId struct {
TaskId int64 `json:"task_id,omitempty"`
}
var ParamsNewServiceNextType = "new_service.next"
// ParamsTaskIdNext 企业自定义下一步任务
type ParamsTaskIdNext struct {
TaskId int64 `json:"task_id,omitempty"`
MerchantUserId int64 `json:"merchant_user_id,omitempty"`
CurrentNumber int `json:"current_number,omitempty"`
MaxNumber int `json:"max_number,omitempty"`
}
var ParamsTeamInvType = "team.inv"

@ -0,0 +1,25 @@
package jobs_gorm
func GetTypeApiPaySubmit(Type string) string {
return "api.pay.submit." + Type
}
func GetTypeWechatRefundsSubmit(Type string) string {
return "wechat.refunds.submit." + Type
}
func GetTypeWechatRefundsQuery(Type string) string {
return "wechat.refunds.query." + Type
}
func GetTypeGoldenBeansIssue(Type string) string {
return "golden_beans.issue." + Type
}
func GetTypeGoldenBeansRefunds(Type string) string {
return "golden_beans.refunds." + Type
}
func GetTypeCustomerAuto(Type string) string {
return "customer.auto." + Type
}

@ -1,12 +0,0 @@
package jobs_gorm_model
// TaskIp 任务Ip
type TaskIp struct {
Id int64 `gorm:"primaryKey" json:"id"`
TaskType string `json:"task_type"` // 任务编号
Ips string `json:"ips"` // 任务IP
}
func (m *TaskIp) TableName() string {
return "task_ip"
}

@ -1,3 +1,3 @@
package gojobs
const Version = "1.0.17"
const Version = "1.0.18"

Loading…
Cancel
Save