zhangqian
2023-09-25 94a760e098571a4657c93985a89ec084f8df357c
当返回的任务数不足通道数时,按通道号查询已完成的,补齐
3个文件已修改
66 ■■■■ 已修改文件
api/v1/task.go 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/procedures.go 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/task.go 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/task.go
@@ -19,6 +19,7 @@
    "fmt"
    "github.com/gin-gonic/gin"
    "gorm.io/gorm"
    "sort"
    "time"
)
@@ -66,26 +67,39 @@
        return
    }
    if params.Page <= 0 {
        params.Page = 1
    }
    params.Page = 1
    if params.Page <= 0 {
        params.PageSize = channelAmount
    }
    taskResponse, code := service.NewTaskService().GetTask(params.Page, params.PageSize, service.TaskModeCurrent) //取进行中的或未开始的
    taskResponse, code := service.NewTaskService().GetTask(params.Page, params.PageSize, service.TaskModeCurrent, nil) //取进行中的或未开始的
    if code != ecode.OK {
        ctx.Fail(code)
        return
    }
    if len(taskResponse.Tasks) == 0 {
        taskResponse, code = service.NewTaskService().GetTask(params.Page, params.PageSize, service.TaskModeLastFinished) //取上一个完成的
        if code != ecode.OK {
            ctx.Fail(code)
            return
    if len(taskResponse.Tasks) < channelAmount {
        var existsChannel = make(map[int32]bool, channelAmount)
        for _, task := range taskResponse.Tasks {
            existsChannel[task.Channel] = true
        }
        for i := 0; i < channelAmount; i++ {
            if existsChannel[int32(i)] {
                continue
            }
            taskResponseTemp, code := service.NewTaskService().GetTask(params.Page, 1, service.TaskModeLastFinished, []int32{int32(i)}) //取上一个完成的
            if code != ecode.OK {
                ctx.Fail(code)
                return
            }
            taskResponse.Tasks = append(taskResponse.Tasks, taskResponseTemp.Tasks...)
        }
    }
    sort.Slice(taskResponse.Tasks, func(i, j int) bool {
        return taskResponse.Tasks[i].Channel < taskResponse.Tasks[i].Channel
    })
    for _, task := range taskResponse.Tasks {
        if task.Procedure.Status == model.ProcedureStatusWaitProcess {
@@ -119,7 +133,7 @@
        params.PageSize = 100
    }
    taskResponse, code := service.NewTaskService().GetTask(params.Page, params.PageSize, service.TaskModeUnStarted) //时间到了未开始的
    taskResponse, code := service.NewTaskService().GetTask(params.Page, params.PageSize, service.TaskModeUnStarted, nil) //时间到了未开始的
    if code != ecode.OK {
        ctx.Fail(code)
        return
model/procedures.go
@@ -36,6 +36,7 @@
        EndTimeMin   int64
        StatusNot    ProcedureStatus
        ProcedureIds []string
        Channels     []int32
    }
)
@@ -133,6 +134,11 @@
    return slf
}
func (slf *ProceduresSearch) SetChannels(channels []int32) *ProceduresSearch {
    slf.Channels = channels
    return slf
}
func (slf *ProceduresSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&Procedures{})
@@ -180,6 +186,10 @@
        db = db.Where("procedure_id = ?", slf.ProcedureID)
    }
    if len(slf.Channels) > 0 {
        db = db.Where("channel in ?", slf.Channels)
    }
    return db
}
service/task.go
@@ -32,10 +32,17 @@
)
// GetTask 获取任务,未完成的开始时间小于等于当前时间,结束时间大于当前时间的任务
func (slf TaskService) GetTask(page, pageSize int, mode TaskMode) (taskResp *response.TaskResponse, code int) {
func (slf TaskService) GetTask(page, pageSize int, mode TaskMode, channels []int32) (taskResp *response.TaskResponse, code int) {
    var taskList []*response.TaskData
    var count int64
    var workers []*common.ProcedureWorker
    taskResp = &response.TaskResponse{
        Tasks:     taskList,
        TaskCount: count,
        Workers:   slf.WorkerDistinct(workers),
    }
    nowTs := time.Now().Unix()
    var (
        err          error
@@ -56,21 +63,24 @@
        search.SetStatusNot(model.ProcedureStatusFinished).
            SetStartTimeMax(nowTs).
            SetEndTimeMin(nowTs).
            SetOrder("start_time asc, status desc")
            SetOrder("status desc, start_time asc")
    } else if mode == TaskModeLastFinished {
        search.SetStatus(model.ProcedureStatusFinished).SetOrder("updated_at desc")
        if len(channels) > 0 {
            search.SetChannels(channels)
        }
    }
    procedures, err = search.FindNotTotal()
    if err != nil {
        return nil, ecode.DBErr
        return taskResp, ecode.DBErr
    }
    count, err = search.Count()
    if err != nil {
        return nil, ecode.DBErr
        return taskResp, ecode.DBErr
    }
    if len(procedures) == 0 {
        return nil, ecode.OK
        return taskResp, ecode.OK
    }
    for _, procedure := range procedures {
@@ -78,7 +88,7 @@
    }
    orders, err = model.NewOrderSearch(nil).SetWorkOrderIds(workOrderIds).FindNotTotal() //由工序反推工单
    if err != nil {
        return nil, ecode.DBErr
        return taskResp, ecode.DBErr
    }
    orderMap := make(map[string]*model.Order, len(workOrderIds))