From 7788cb0ea88354718b2ad04ac29aea24e0b64911 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 22 九月 2023 20:19:29 +0800
Subject: [PATCH] 增加当前时间可以开始但是未开始的任务接口,增加是否可以开始字段

---
 service/task.go          |   40 +++++++---
 model/response/common.go |    1 
 router/index.go          |   11 +-
 docs/swagger.yaml        |   33 +++++++
 docs/docs.go             |   53 ++++++++++++
 api/v1/task.go           |   44 ++++++++++
 docs/swagger.json        |   53 ++++++++++++
 7 files changed, 211 insertions(+), 24 deletions(-)

diff --git a/api/v1/task.go b/api/v1/task.go
index 11a1332..8fbc448 100644
--- a/api/v1/task.go
+++ b/api/v1/task.go
@@ -66,7 +66,49 @@
 		params.PageSize = 1
 	}
 
-	taskResponse, code := service.NewTaskService().GetTask(params.Page, params.PageSize)
+	taskResponse, code := service.NewTaskService().GetTask(params.Page, params.PageSize, service.TaskModeCurrent) //鍙栬繘琛屼腑鐨勬垨鏈紑濮嬬殑
+	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
+		}
+	}
+
+	for _, task := range taskResponse.Tasks {
+		if task.Procedure.Status == model.ProcedureStatusWaitProcess {
+			task.CanStarted = true
+		}
+	}
+
+	ctx.OkWithDetailed(taskResponse)
+}
+
+// TaskGetUnStarted
+// @Tags      Task
+// @Summary   鑾峰彇鏈紑濮嬬殑浠诲姟
+// @Produce   application/json
+// @Param     object  query    request.TaskList true  "鏌ヨ鍙傛暟"
+// @Success   200   {object}  contextx.Response{data=response.TaskData}  "鎴愬姛"
+// @Router    /v1/task/get/unStarted [get]
+func (slf *TaskApi) TaskGetUnStarted(c *gin.Context) {
+	var params request.TaskList
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+	if params.Page <= 0 {
+		params.Page = 1
+	}
+	if params.PageSize <= 0 {
+		params.PageSize = 1
+	}
+
+	taskResponse, code := service.NewTaskService().GetTask(params.Page, params.PageSize, service.TaskModeUnStarted) //鏃堕棿鍒颁簡鏈紑濮嬬殑
 	if code != ecode.OK {
 		ctx.Fail(code)
 		return
diff --git a/docs/docs.go b/docs/docs.go
index b8014f8..87355c3 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -470,6 +470,51 @@
                 }
             }
         },
+        "/v1/task/get/unStarted": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Task"
+                ],
+                "summary": "鑾峰彇鏈紑濮嬬殑浠诲姟",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.TaskData"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
         "/v1/task/sendProcessParams": {
             "post": {
                 "produces": [
@@ -692,7 +737,7 @@
             "type": "object",
             "properties": {
                 "address": {
-                    "description": "PortName   string ` + "`" + `gorm:\"type:varchar(191);comment:绔彛鍚嶇О\" json:\"portName\"` + "`" + `\nFrequency  int    ` + "`" + `gorm:\"type:int(11);comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉抃" json:\"frequency\"` + "`" + `",
+                    "description": "PortName   string ` + "`" + `gorm:\"type:varchar(191);comment:绔彛鍚嶇О\" json:\"portName\"` + "`" + `\nFrequency  int    ` + "`" + `gorm:\"comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉抃" json:\"frequency\"` + "`" + `",
                     "type": "string"
                 },
                 "baudRate": {
@@ -963,7 +1008,7 @@
             "type": "object",
             "properties": {
                 "address": {
-                    "description": "PortName   string ` + "`" + `gorm:\"type:varchar(191);comment:绔彛鍚嶇О\" json:\"portName\"` + "`" + `\nFrequency  int    ` + "`" + `gorm:\"type:int(11);comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉抃" json:\"frequency\"` + "`" + `",
+                    "description": "PortName   string ` + "`" + `gorm:\"type:varchar(191);comment:绔彛鍚嶇О\" json:\"portName\"` + "`" + `\nFrequency  int    ` + "`" + `gorm:\"comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉抃" json:\"frequency\"` + "`" + `",
                     "type": "string"
                 },
                 "baudRate": {
@@ -1087,6 +1132,10 @@
                         "type": "string"
                     }
                 },
+                "canStarted": {
+                    "description": "鏄惁鍙互寮�濮嬬敓浜�",
+                    "type": "boolean"
+                },
                 "currentProcedureIndex": {
                     "type": "integer"
                 },
diff --git a/docs/swagger.json b/docs/swagger.json
index 4a7475b..e3d2b43 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -458,6 +458,51 @@
                 }
             }
         },
+        "/v1/task/get/unStarted": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Task"
+                ],
+                "summary": "鑾峰彇鏈紑濮嬬殑浠诲姟",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.TaskData"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
         "/v1/task/sendProcessParams": {
             "post": {
                 "produces": [
@@ -680,7 +725,7 @@
             "type": "object",
             "properties": {
                 "address": {
-                    "description": "PortName   string `gorm:\"type:varchar(191);comment:绔彛鍚嶇О\" json:\"portName\"`\nFrequency  int    `gorm:\"type:int(11);comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉抃" json:\"frequency\"`",
+                    "description": "PortName   string `gorm:\"type:varchar(191);comment:绔彛鍚嶇О\" json:\"portName\"`\nFrequency  int    `gorm:\"comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉抃" json:\"frequency\"`",
                     "type": "string"
                 },
                 "baudRate": {
@@ -951,7 +996,7 @@
             "type": "object",
             "properties": {
                 "address": {
-                    "description": "PortName   string `gorm:\"type:varchar(191);comment:绔彛鍚嶇О\" json:\"portName\"`\nFrequency  int    `gorm:\"type:int(11);comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉抃" json:\"frequency\"`",
+                    "description": "PortName   string `gorm:\"type:varchar(191);comment:绔彛鍚嶇О\" json:\"portName\"`\nFrequency  int    `gorm:\"comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉抃" json:\"frequency\"`",
                     "type": "string"
                 },
                 "baudRate": {
@@ -1075,6 +1120,10 @@
                         "type": "string"
                     }
                 },
+                "canStarted": {
+                    "description": "鏄惁鍙互寮�濮嬬敓浜�",
+                    "type": "boolean"
+                },
                 "currentProcedureIndex": {
                     "type": "integer"
                 },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 908f61e..db53996 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -105,7 +105,7 @@
       address:
         description: |-
           PortName   string `gorm:"type:varchar(191);comment:绔彛鍚嶇О" json:"portName"`
-          Frequency  int    `gorm:"type:int(11);comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉�" json:"frequency"`
+          Frequency  int    `gorm:"comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉�" json:"frequency"`
         type: string
       baudRate:
         description: 涓插彛娉㈢壒鐜囷紝 method = serial鏃� 鐢�
@@ -289,7 +289,7 @@
       address:
         description: |-
           PortName   string `gorm:"type:varchar(191);comment:绔彛鍚嶇О" json:"portName"`
-          Frequency  int    `gorm:"type:int(11);comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉�" json:"frequency"`
+          Frequency  int    `gorm:"comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉�" json:"frequency"`
         type: string
       baudRate:
         description: 涓插彛娉㈢壒鐜囷紝 method = serial鏃� 鐢�
@@ -372,6 +372,9 @@
         items:
           type: string
         type: array
+      canStarted:
+        description: 鏄惁鍙互寮�濮嬬敓浜�
+        type: boolean
       currentProcedureIndex:
         type: integer
       order:
@@ -653,6 +656,32 @@
       summary: 鑾峰彇浠诲姟
       tags:
       - Task
+  /v1/task/get/unStarted:
+    get:
+      parameters:
+      - description: 椤电爜
+        in: query
+        name: page
+        type: integer
+      - description: 姣忛〉澶у皬
+        in: query
+        name: pageSize
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鎴愬姛
+          schema:
+            allOf:
+            - $ref: '#/definitions/contextx.Response'
+            - properties:
+                data:
+                  $ref: '#/definitions/response.TaskData'
+              type: object
+      summary: 鑾峰彇鏈紑濮嬬殑浠诲姟
+      tags:
+      - Task
   /v1/task/sendProcessParams:
     post:
       parameters:
diff --git a/model/response/common.go b/model/response/common.go
index 788dd40..61bc97d 100644
--- a/model/response/common.go
+++ b/model/response/common.go
@@ -26,6 +26,7 @@
 	Position              int //褰撳墠浠诲姟鍦ㄨ澶囩鍑犱釜浣嶇疆
 	AllProcedures         []string
 	CurrentProcedureIndex int
+	CanStarted            bool //鏄惁鍙互寮�濮嬬敓浜�
 }
 
 type TaskResponse struct {
diff --git a/router/index.go b/router/index.go
index 3c71534..dcbb9f0 100644
--- a/router/index.go
+++ b/router/index.go
@@ -35,11 +35,12 @@
 	taskApi := new(v1.TaskApi)
 	taskGroup := v1Group.Group("task")
 	{
-		taskGroup.GET("countdown", taskApi.TaskCountdown)      // 鏂颁换鍔″�掕鏃�
-		taskGroup.GET("get", taskApi.TaskGet)                  // 鑾峰彇宸ュ簭
-		taskGroup.GET("start/:id", taskApi.GetProcessParams)   // 鑾峰彇宸ヨ壓鍙傛暟
-		taskGroup.POST("sendProcessParams", taskApi.TaskStart) // 涓嬪彂宸ヨ壓鍙傛暟骞跺紑濮嬪伐搴�
-		taskGroup.PUT("finish/:id", taskApi.TaskFinish)        // 瀹屾垚宸ュ簭
+		taskGroup.GET("countdown", taskApi.TaskCountdown)        // 鏂颁换鍔″�掕鏃�
+		taskGroup.GET("get", taskApi.TaskGet)                    // 鑾峰彇宸ュ簭
+		taskGroup.GET("get/unStarted", taskApi.TaskGetUnStarted) // 鏃堕棿鍒颁簡鏈紑濮嬬殑浠诲姟
+		taskGroup.GET("start/:id", taskApi.GetProcessParams)     // 鑾峰彇宸ヨ壓鍙傛暟
+		taskGroup.POST("sendProcessParams", taskApi.TaskStart)   // 涓嬪彂宸ヨ壓鍙傛暟骞跺紑濮嬪伐搴�
+		taskGroup.PUT("finish/:id", taskApi.TaskFinish)          // 瀹屾垚宸ュ簭
 	}
 
 	configApi := new(v1.ConfigApi)
diff --git a/service/task.go b/service/task.go
index 944d0e0..df0002e 100644
--- a/service/task.go
+++ b/service/task.go
@@ -23,8 +23,16 @@
 	return &TaskService{}
 }
 
+type TaskMode int
+
+const (
+	TaskModeUnStarted    TaskMode = 1 //鏈紑濮嬬殑
+	TaskModeCurrent      TaskMode = 2
+	TaskModeLastFinished TaskMode = 3 //涓婁竴涓粨鏉熺殑
+)
+
 // GetTask 鑾峰彇浠诲姟锛屾湭瀹屾垚鐨勫紑濮嬫椂闂村皬浜庣瓑浜庡綋鍓嶆椂闂达紝缁撴潫鏃堕棿澶т簬褰撳墠鏃堕棿鐨勪换鍔�
-func (slf TaskService) GetTask(page, pageSize int) (taskResp *response.TaskResponse, code int) {
+func (slf TaskService) GetTask(page, pageSize int, mode TaskMode) (taskResp *response.TaskResponse, code int) {
 	var taskList []*response.TaskData
 	var count int64
 	var workers []*common.ProcedureWorker
@@ -35,21 +43,29 @@
 		procedures   []*model.Procedures
 		workOrderIds []string
 	)
-	procedures, err = model.NewProceduresSearch(nil).SetOrder("start_time asc").
-		SetStartTimeMax(nowTs).
-		SetEndTimeMin(nowTs).
+	search := model.NewProceduresSearch(nil).
 		SetDeviceId(conf.Conf.System.DeviceId).
-		SetStatusNot(model.ProcedureStatusFinished).
-		SetPage(page, pageSize).
-		SetOrder("status desc").
-		FindNotTotal()
+		SetPage(page, pageSize)
+
+	if mode == TaskModeUnStarted {
+		search.SetStatus(model.ProcedureStatusWaitProcess).
+			SetStartTimeMax(nowTs).
+			SetEndTimeMin(nowTs).
+			SetOrder("start_time asc")
+	} else if mode == TaskModeCurrent {
+		search.SetStatusNot(model.ProcedureStatusFinished).
+			SetStartTimeMax(nowTs).
+			SetEndTimeMin(nowTs).
+			SetOrder("start_time asc, status desc")
+	} else if mode == TaskModeLastFinished {
+		search.SetStatus(model.ProcedureStatusFinished).SetOrder("updated_at desc")
+	}
+
+	procedures, err = search.FindNotTotal()
 	if err != nil {
 		return nil, ecode.DBErr
 	}
-	count, err = model.NewProceduresSearch(nil).
-		SetDeviceId(conf.Conf.System.DeviceId).
-		SetStatusNot(model.ProcedureStatusFinished).
-		Count()
+	count, err = search.Count()
 	if err != nil {
 		return nil, ecode.DBErr
 	}

--
Gitblit v1.8.0