You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.8 KiB
107 lines
2.8 KiB
package service |
|
|
|
import ( |
|
"context" |
|
|
|
"go-common/app/interface/main/laser/model" |
|
xsql "go-common/library/database/sql" |
|
"go-common/library/log" |
|
) |
|
|
|
// QueryTaskState is query satisfied logDate from memcache if key exist,Otherwise query from db. |
|
func (s *Service) QueryUndoneTaskLogdate(c context.Context, mid int64, platform int, sourceType int) (logDate int64, err error) { |
|
// cache flag: cached to memcache only when query db. |
|
cache := true |
|
var v *model.TaskInfo |
|
if v, err = s.dao.TaskInfoCache(c, mid); err != nil { |
|
err = nil |
|
cache = false |
|
} else if v != nil { |
|
// if memcache key exist |
|
if v.Empty { |
|
return |
|
} |
|
if logDateExist(v, sourceType, platform) { |
|
logDate = v.LogDate.Time().Unix() |
|
return |
|
} |
|
return |
|
} |
|
|
|
// if memcache key not exist , then query db. |
|
v, err = s.dao.QueryUndoneTaskInfo(c, mid) |
|
if err != nil { |
|
return |
|
} |
|
if v != nil { |
|
if logDateExist(v, sourceType, platform) { |
|
logDate = v.LogDate.Time().Unix() |
|
} |
|
} else { |
|
// if not found from db, new empty Instance and set Flag:Empty true. |
|
v = &model.TaskInfo{ |
|
Empty: true, |
|
} |
|
} |
|
|
|
if cache { |
|
s.addCache(func() { |
|
s.dao.AddTaskInfoCache(context.Background(), mid, v) |
|
}) |
|
} |
|
return |
|
} |
|
|
|
func logDateExist(t *model.TaskInfo, sourceType int, platform int) bool { |
|
if sourceType == t.SourceType && (platform == t.Platform || platform == model.ALL_PLATFORM) { |
|
return true |
|
} |
|
return false |
|
} |
|
|
|
// UpdateTaskState is update task set state = 1 ,insert taskLog to table task_log and remove memcache. |
|
func (s *Service) UpdateTaskState(c context.Context, mid int64, build string, platform int, taskState int, reason string) (err error) { |
|
// avoid err when remove the specified-mid task on laser-admin application. |
|
taskID, err := s.dao.QueryTaskID(c, mid) |
|
if err != nil { |
|
log.Error("s.UpdateTaskState() error(%v)", err) |
|
return |
|
} |
|
if taskID == 0 { |
|
return |
|
} |
|
tx, err := s.dao.BeginTran(c) |
|
if err != nil { |
|
log.Error("s.dao.BeginTran() error(%v)", err) |
|
return |
|
} |
|
rows, err := s.dao.TxUpdateTaskState(c, tx, 1, taskID) |
|
if err != nil || rows <= 0 { |
|
tx.Rollback() |
|
log.Error("s.UpdateTaskState() error(%v)", err) |
|
return |
|
} |
|
err = s.addTaskLog(c, tx, taskID, mid, build, platform, taskState, reason) |
|
if err != nil { |
|
tx.Rollback() |
|
log.Error("s.UpdateTaskState() error(%v)", err) |
|
return |
|
} |
|
if err = tx.Commit(); err != nil { |
|
log.Error("tx.Commit() error(%v)", err) |
|
return |
|
} |
|
s.dao.RemoveTaskInfoCache(c, mid) |
|
go s.SendEmail(context.Background(), taskID) |
|
return |
|
} |
|
|
|
// addTaskLog is insert TaskLog to table task_log. |
|
func (s *Service) addTaskLog(c context.Context, tx *xsql.Tx, taskID int64, mid int64, build string, platform int, taskState int, reason string) (err error) { |
|
insertID, err := s.dao.TxAddTaskLog(c, tx, taskID, mid, build, platform, taskState, reason) |
|
if err != nil || insertID <= 0 { |
|
log.Error("s.UpdateTaskState() error(%v)", err) |
|
return |
|
} |
|
return |
|
}
|
|
|