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.
124 lines
4.1 KiB
124 lines
4.1 KiB
package service |
|
|
|
import ( |
|
"fmt" |
|
"strings" |
|
"time" |
|
|
|
"context" |
|
"go-common/app/admin/main/laser/model" |
|
"go-common/library/log" |
|
xtime "go-common/library/time" |
|
) |
|
|
|
// AddTask is add a log task |
|
func (s *Service) AddTask(ctx context.Context, mid int64, username string, adminID int64, logDate int64, contactEmail string, platform int, sourceType int) (err error) { |
|
t, err := s.dao.FindTask(ctx, mid, 0) |
|
if err != nil { |
|
return |
|
} |
|
if t != nil { |
|
err = fmt.Errorf("存在该 mid:%d 未完成的任务,请先删除后再添加", mid) |
|
log.Error("s.AddTask() error(%v)", err) |
|
return |
|
} |
|
_, err = s.dao.AddTask(ctx, mid, username, adminID, time.Unix(logDate, 0).Format("2006-01-02 15:03:04"), contactEmail, platform, sourceType) |
|
go s.dao.AddTaskInfoCache(ctx, mid, &model.TaskInfo{ |
|
MID: mid, |
|
LogDate: xtime.Time(logDate), |
|
SourceType: sourceType, |
|
Platform: platform, |
|
Empty: false, |
|
}) |
|
return |
|
} |
|
|
|
// DeleteTask is delete a log task |
|
func (s *Service) DeleteTask(ctx context.Context, taskID int64, username string, adminID int64) (err error) { |
|
t, err := s.dao.QueryTaskInfoByIDSQL(ctx, taskID) |
|
if err != nil { |
|
return |
|
} |
|
go s.dao.RemoveTaskInfoCache(ctx, t.MID) |
|
return s.dao.DeleteTask(ctx, taskID, username, adminID) |
|
} |
|
|
|
// QueryTask is query Task by query params |
|
func (s *Service) QueryTask(ctx context.Context, mid int64, logDateStart int64, logDateEnd int64, sourceType int, platform int, state int, sortBy string, pageNo int, pageSize int) (tasks []*model.Task, count int64, err error) { |
|
var wherePairs []string |
|
wherePairs = append(wherePairs, "is_deleted = 0") |
|
wherePairs = append(wherePairs, fmt.Sprintf("state = %d", state)) |
|
if sourceType > 0 { |
|
wherePairs = append(wherePairs, fmt.Sprintf("source_type = %d", sourceType)) |
|
} |
|
if platform > 0 { |
|
wherePairs = append(wherePairs, fmt.Sprintf("platform = %d", platform)) |
|
} |
|
if mid > 0 { |
|
wherePairs = append(wherePairs, fmt.Sprintf("mid = %d", mid)) |
|
} |
|
layout := "2006-01-02 15:03:04" |
|
if logDateStart > 0 && logDateEnd > 0 { |
|
start := time.Unix(logDateStart, 0).Format(layout) |
|
end := time.Unix(logDateEnd, 0).Format(layout) |
|
wherePairs = append(wherePairs, fmt.Sprintf(" log_date between '%s' and '%s' ", start, end)) |
|
} else if logDateStart > 0 { |
|
start := time.Unix(logDateStart, 0).Format(layout) |
|
wherePairs = append(wherePairs, fmt.Sprintf("log_date >= '%s' ", start)) |
|
} |
|
|
|
var queryStmt string |
|
if len(wherePairs) > 0 { |
|
queryStmt = strings.Join(wherePairs, " AND ") |
|
} |
|
sort := buildSortStmt(sortBy) |
|
var limit, offset int |
|
if pageNo > 0 && pageSize > 0 { |
|
offset = (pageNo - 1) * pageSize |
|
limit = pageSize |
|
} else { |
|
offset = 0 |
|
limit = 20 |
|
} |
|
return s.dao.QueryTask(ctx, queryStmt, sort, offset, limit) |
|
} |
|
|
|
func buildSortStmt(sortBy string) (sort string) { |
|
if sortBy == "" { |
|
sort = "mtime Desc" |
|
return |
|
} |
|
if strings.HasPrefix(sortBy, "-") { |
|
sort = strings.TrimPrefix(sortBy, "-") + " " + "Desc" |
|
} |
|
return sort |
|
} |
|
|
|
// UpdateTask is update undone task where state = 0. |
|
func (s *Service) UpdateTask(ctx context.Context, username string, adminID int64, taskID int64, mid int64, logDate int64, contactEmail string, sourceType int, platform int) (err error) { |
|
var updatePairs []string |
|
updatePairs = append(updatePairs, fmt.Sprintf("source_type = %d", sourceType)) |
|
updatePairs = append(updatePairs, fmt.Sprintf("platform = %d", platform)) |
|
updatePairs = append(updatePairs, fmt.Sprintf("mid = %d", mid)) |
|
updatePairs = append(updatePairs, fmt.Sprintf("log_date = '%s' ", time.Unix(logDate, 0).Format("2006-01-02 15:03:04"))) |
|
updatePairs = append(updatePairs, fmt.Sprintf("contact_email = '%s'", contactEmail)) |
|
|
|
if adminID > 0 { |
|
updatePairs = append(updatePairs, fmt.Sprintf("admin_id = %d", adminID)) |
|
} |
|
if len(username) != 0 { |
|
updatePairs = append(updatePairs, fmt.Sprintf("username = '%s' ", username)) |
|
} |
|
updateStmt := strings.Join(updatePairs, ", ") |
|
// 0 undone |
|
state := 0 |
|
// 下列参数前端必传. |
|
go s.dao.AddTaskInfoCache(ctx, mid, &model.TaskInfo{ |
|
MID: mid, |
|
LogDate: xtime.Time(logDate), |
|
SourceType: sourceType, |
|
Platform: platform, |
|
Empty: false, |
|
}) |
|
return s.dao.UpdateTask(ctx, taskID, state, updateStmt) |
|
}
|
|
|