From 847e73ca2be7cb0b0df2eef425f4adedda20a874 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期日, 08 十月 2023 11:16:01 +0800
Subject: [PATCH] 多个新任务只能第一个可以开始

---
 api/v1/task.go |   23 ++++++++++++++++++++---
 1 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/api/v1/task.go b/api/v1/task.go
index 558b127..4cf4808 100644
--- a/api/v1/task.go
+++ b/api/v1/task.go
@@ -68,10 +68,14 @@
 		return
 	}
 
+	taskCount := service.NewTaskService().NewTaskCount()
 	params.Page = 1
-
 	if params.PageSize <= 0 {
-		params.PageSize = channelAmount
+		if params.TaskMode == constvar.TaskModeUnStarted {
+			params.PageSize = int(taskCount)
+		} else {
+			params.PageSize = channelAmount
+		}
 	}
 
 	taskMode := constvar.TaskModeCurrent
@@ -107,14 +111,19 @@
 		return taskResponse.Tasks[i].Channel < taskResponse.Tasks[i].Channel
 	})
 
+	nowTs := time.Now().Unix()
+
+	flagMap := make(map[int32]struct{}, 0)
+
 	for _, task := range taskResponse.Tasks {
-		if !service.TaskFlagGet(task.Channel) {
+		if _, ok := flagMap[task.Channel]; !ok && !service.TaskFlagGet(task.Channel) && task.Procedure.StartTime <= nowTs {
 			task.CanStarted = true
 		}
 	}
 
 	taskResponse.Prompt = conf.Conf.Prompt
 	taskResponse.ChannelAmount = channelAmount
+	taskResponse.TaskCount = taskCount
 
 	ctx.OkWithDetailed(taskResponse)
 }
@@ -202,6 +211,14 @@
 		ctx.Fail(code)
 		return
 	}
+	if procedure.Status == model.ProcedureStatusFinished {
+		ctx.Ok()
+		return
+	}
+	if procedure.Status != model.ProcedureStatusProcessing {
+		ctx.Fail(ecode.ParamsErr)
+		return
+	}
 	err := service.NewTaskService().UpdateProcedureStatus(nil, id, model.ProcedureStatusFinished, procedure.Channel)
 	if err != nil {
 		logx.Errorf("UpdateProcedureStatus err: %v", err.Error())

--
Gitblit v1.8.0