当返回的任务数不足通道数时,按通道号查询已完成的,补齐
| | |
| | | "fmt" |
| | | "github.com/gin-gonic/gin" |
| | | "gorm.io/gorm" |
| | | "sort" |
| | | "time" |
| | | ) |
| | | |
| | |
| | | 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 { |
| | |
| | | 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 |
| | |
| | | EndTimeMin int64 |
| | | StatusNot ProcedureStatus |
| | | ProcedureIds []string |
| | | Channels []int32 |
| | | } |
| | | ) |
| | | |
| | |
| | | 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{}) |
| | | |
| | |
| | | db = db.Where("procedure_id = ?", slf.ProcedureID) |
| | | } |
| | | |
| | | if len(slf.Channels) > 0 { |
| | | db = db.Where("channel in ?", slf.Channels) |
| | | } |
| | | |
| | | return db |
| | | } |
| | | |
| | |
| | | ) |
| | | |
| | | // 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 |
| | |
| | | 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 { |
| | |
| | | } |
| | | 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)) |