- refactor jxcontent and tasksch (remove dependency from jxcontent to tasksch)
- send dingding msg to user when async task finished
This commit is contained in:
@@ -8,6 +8,8 @@ import (
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/msg"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
)
|
||||
|
||||
@@ -97,14 +99,17 @@ type BaseTask struct {
|
||||
Children TaskList `json:"children"`
|
||||
Err error `json:"err"`
|
||||
|
||||
detailErrMsgList []string `json:"-"`
|
||||
finishChan chan int
|
||||
C <-chan int `json:"-"`
|
||||
detailErrMsgList []string
|
||||
finishChan chan struct{}
|
||||
C <-chan struct{} `json:"-"`
|
||||
params []interface{}
|
||||
quitChan chan int
|
||||
|
||||
locker sync.RWMutex
|
||||
parent ITask
|
||||
|
||||
ctx *jxcontext.Context
|
||||
isGetResultCalled bool
|
||||
}
|
||||
|
||||
func (s TaskList) Len() int {
|
||||
@@ -121,7 +126,7 @@ func (s TaskList) Swap(i, j int) {
|
||||
s[j] = tmp
|
||||
}
|
||||
|
||||
func (t *BaseTask) Init(parallelCount, batchSize int, isContinueWhenError bool, params []interface{}, name, userName string, totalItemCount, totalJobCount int) {
|
||||
func (t *BaseTask) Init(parallelCount, batchSize int, isContinueWhenError bool, params []interface{}, name string, ctx *jxcontext.Context, totalItemCount, totalJobCount int) {
|
||||
t.ID = utils.GetUUID()
|
||||
t.ParallelCount = parallelCount
|
||||
t.BatchSize = batchSize
|
||||
@@ -129,13 +134,14 @@ func (t *BaseTask) Init(parallelCount, batchSize int, isContinueWhenError bool,
|
||||
t.params = params
|
||||
t.Name = name
|
||||
t.CreatedAt = time.Now()
|
||||
t.CreatedBy = userName
|
||||
t.ctx = ctx
|
||||
t.CreatedBy = ctx.GetUserName()
|
||||
t.UpdatedAt = t.CreatedAt
|
||||
t.TerminatedAt = utils.DefaultTimeValue
|
||||
t.TotalItemCount = totalItemCount
|
||||
t.TotalJobCount = totalJobCount
|
||||
t.quitChan = make(chan int)
|
||||
t.finishChan = make(chan int)
|
||||
t.finishChan = make(chan struct{})
|
||||
t.Status = TaskStatusWorking
|
||||
|
||||
t.C = t.finishChan
|
||||
@@ -155,6 +161,7 @@ func (t *BaseTask) GetResult(duration time.Duration) (retVal []interface{}, err
|
||||
timer := time.NewTimer(duration)
|
||||
select {
|
||||
case <-t.finishChan:
|
||||
t.isGetResultCalled = true
|
||||
timer.Stop()
|
||||
return t.Result, t.Err
|
||||
case <-timer.C:
|
||||
@@ -249,6 +256,14 @@ func AddChild(parentTask ITask, task ITask) ITask {
|
||||
return task
|
||||
}
|
||||
|
||||
func HandleTask(task, parentTask ITask, isMangeIt bool) ITask {
|
||||
AddChild(task, parentTask)
|
||||
if parentTask == nil && isMangeIt {
|
||||
ManageTask(task)
|
||||
}
|
||||
return task
|
||||
}
|
||||
|
||||
/////////
|
||||
|
||||
func (t *BaseTask) MarshalJSON() ([]byte, error) {
|
||||
@@ -280,6 +295,18 @@ func (t *BaseTask) run(taskHandler func()) {
|
||||
}
|
||||
|
||||
close(t.finishChan)
|
||||
time.Sleep(10 * time.Millisecond) // 等待GetResult中的isGetResultCalled赋值
|
||||
if !t.isGetResultCalled && t.parent == nil && len(GetTasks(t.ID, TaskStatusBegin, TaskStatusEnd, 24, "")) == 0 {
|
||||
if authInfo, err := t.ctx.GetV2AuthInfo(); err == nil { // 这里应该是不管登录类型,直接以可能的方式发消息
|
||||
var content string
|
||||
if t.Status == TaskStatusFinished {
|
||||
content = fmt.Sprintf("你的异步任务[%s]执行成功完成", t.Name)
|
||||
} else {
|
||||
content = fmt.Sprintf("你的异步任务[%s]执行失败,%s", t.Name, t.Err.Error())
|
||||
}
|
||||
msg.SendUserMessage(authInfo.UserID, "异步任务完成", content)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user