From 196437f8ba646344cf25c9fa4bd3797ca40e2154 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期三, 13 九月 2023 15:40:54 +0800
Subject: [PATCH] 支持获取多个任务,增加任务数量统计

---
 service/task.go          |   60 +++++++----
 model/procedures.go      |   11 ++
 conf/apsClient.json      |    2 
 model/response/common.go |   12 +
 main.go                  |    5 
 docs/swagger.yaml        |   35 +++++-
 model/work_order.go      |    6 +
 docs/docs.go             |   47 +++++++--
 api/v1/task.go           |   19 +++
 docs/swagger.json        |   47 +++++++--
 10 files changed, 183 insertions(+), 61 deletions(-)

diff --git a/api/v1/task.go b/api/v1/task.go
index 7fb3b50..ae11df0 100644
--- a/api/v1/task.go
+++ b/api/v1/task.go
@@ -5,6 +5,7 @@
 	"apsClient/constvar"
 	"apsClient/model"
 	"apsClient/model/common"
+	"apsClient/model/request"
 	"apsClient/model/response"
 	"apsClient/nsq"
 	"apsClient/pkg/contextx"
@@ -48,20 +49,32 @@
 // @Tags      Task
 // @Summary   鑾峰彇浠诲姟
 // @Produce   application/json
+// @Param     object  query    request.TaskList true  "鏌ヨ鍙傛暟"
 // @Success   200   {object}  contextx.Response{data=response.TaskData}  "鎴愬姛"
 // @Router    /v1/task/get [get]
 func (slf *TaskApi) TaskGet(c *gin.Context) {
-	ctx, ok := contextx.NewContext(c, nil)
+	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
+	}
 
-	taskData, code := service.NewTaskService().GetTask()
+	taskDataList, count, code := service.NewTaskService().GetTask(params.Page, params.PageSize)
 	if code != ecode.OK {
 		ctx.Fail(code)
 		return
 	}
-	ctx.OkWithDetailed(taskData)
+	taskResponse := &response.TaskResponse{
+		Tasks:     taskDataList,
+		TaskCount: count,
+	}
+	ctx.OkWithDetailed(taskResponse)
 }
 
 // GetProcessParams
diff --git a/conf/apsClient.json b/conf/apsClient.json
index f93e770..b22d9a1 100644
--- a/conf/apsClient.json
+++ b/conf/apsClient.json
@@ -2,7 +2,7 @@
   "system": {
     "env": "develop",
     "port": 8003,
-    "deviceId": "DeviceID1",
+    "deviceId": "111",
     "netSetShellPath": "/data/network/",
     "netUpShellName": "up.sh",
     "netDownShellName": "down.sh"
diff --git a/docs/docs.go b/docs/docs.go
index 486c228..d76cf46 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -392,6 +392,20 @@
                     "Task"
                 ],
                 "summary": "鑾峰彇浠诲姟",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    }
+                ],
                 "responses": {
                     "200": {
                         "description": "鎴愬姛",
@@ -422,7 +436,7 @@
                 "tags": [
                     "Task"
                 ],
-                "summary": "涓嬪彂宸ヨ壓鍙傛暟",
+                "summary": "涓嬪彂宸ヨ壓鍙傛暟锛堝紑濮嬩换鍔★級",
                 "parameters": [
                     {
                         "type": "integer",
@@ -450,7 +464,7 @@
                 "tags": [
                     "Task"
                 ],
-                "summary": "浠诲姟寮�濮�",
+                "summary": "浠诲姟寮�濮嬶紙鑾峰彇宸ヨ壓鍙傛暟锛�",
                 "parameters": [
                     {
                         "type": "integer",
@@ -793,10 +807,12 @@
             "type": "integer",
             "enum": [
                 1,
-                2
+                2,
+                3
             ],
             "x-enum-varnames": [
-                "OrderStatusUnFinished",
+                "OrderStatusWaitProcess",
+                "OrderStatusProcessing",
                 "OrderStatusFinished"
             ]
         },
@@ -815,16 +831,21 @@
             "type": "integer",
             "enum": [
                 1,
-                2
+                2,
+                3
             ],
             "x-enum-varnames": [
-                "ProcedureStatusUnFinished",
+                "ProcedureStatusWaitProcess",
+                "ProcedureStatusProcessing",
                 "ProcedureStatusFinished"
             ]
         },
         "model.Procedures": {
             "type": "object",
             "properties": {
+                "deviceId": {
+                    "type": "string"
+                },
                 "endTime": {
                     "type": "integer"
                 },
@@ -838,6 +859,9 @@
                             "$ref": "#/definitions/common.ProductProcedure"
                         }
                     ]
+                },
+                "procedureId": {
+                    "type": "string"
                 },
                 "startTime": {
                     "type": "integer"
@@ -977,11 +1001,14 @@
         "response.TaskData": {
             "type": "object",
             "properties": {
-                "deviceName": {
-                    "type": "string"
+                "allProcedures": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
                 },
-                "deviceStatus": {
-                    "type": "string"
+                "currentProcedureIndex": {
+                    "type": "integer"
                 },
                 "order": {
                     "$ref": "#/definitions/model.Order"
diff --git a/docs/swagger.json b/docs/swagger.json
index d833d3b..2fb263f 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -380,6 +380,20 @@
                     "Task"
                 ],
                 "summary": "鑾峰彇浠诲姟",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    }
+                ],
                 "responses": {
                     "200": {
                         "description": "鎴愬姛",
@@ -410,7 +424,7 @@
                 "tags": [
                     "Task"
                 ],
-                "summary": "涓嬪彂宸ヨ壓鍙傛暟",
+                "summary": "涓嬪彂宸ヨ壓鍙傛暟锛堝紑濮嬩换鍔★級",
                 "parameters": [
                     {
                         "type": "integer",
@@ -438,7 +452,7 @@
                 "tags": [
                     "Task"
                 ],
-                "summary": "浠诲姟寮�濮�",
+                "summary": "浠诲姟寮�濮嬶紙鑾峰彇宸ヨ壓鍙傛暟锛�",
                 "parameters": [
                     {
                         "type": "integer",
@@ -781,10 +795,12 @@
             "type": "integer",
             "enum": [
                 1,
-                2
+                2,
+                3
             ],
             "x-enum-varnames": [
-                "OrderStatusUnFinished",
+                "OrderStatusWaitProcess",
+                "OrderStatusProcessing",
                 "OrderStatusFinished"
             ]
         },
@@ -803,16 +819,21 @@
             "type": "integer",
             "enum": [
                 1,
-                2
+                2,
+                3
             ],
             "x-enum-varnames": [
-                "ProcedureStatusUnFinished",
+                "ProcedureStatusWaitProcess",
+                "ProcedureStatusProcessing",
                 "ProcedureStatusFinished"
             ]
         },
         "model.Procedures": {
             "type": "object",
             "properties": {
+                "deviceId": {
+                    "type": "string"
+                },
                 "endTime": {
                     "type": "integer"
                 },
@@ -826,6 +847,9 @@
                             "$ref": "#/definitions/common.ProductProcedure"
                         }
                     ]
+                },
+                "procedureId": {
+                    "type": "string"
                 },
                 "startTime": {
                     "type": "integer"
@@ -965,11 +989,14 @@
         "response.TaskData": {
             "type": "object",
             "properties": {
-                "deviceName": {
-                    "type": "string"
+                "allProcedures": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
                 },
-                "deviceStatus": {
-                    "type": "string"
+                "currentProcedureIndex": {
+                    "type": "integer"
                 },
                 "order": {
                     "$ref": "#/definitions/model.Order"
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 34d675d..2fe29b4 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -211,9 +211,11 @@
     enum:
     - 1
     - 2
+    - 3
     type: integer
     x-enum-varnames:
-    - OrderStatusUnFinished
+    - OrderStatusWaitProcess
+    - OrderStatusProcessing
     - OrderStatusFinished
   model.PlcBrand:
     properties:
@@ -226,12 +228,16 @@
     enum:
     - 1
     - 2
+    - 3
     type: integer
     x-enum-varnames:
-    - ProcedureStatusUnFinished
+    - ProcedureStatusWaitProcess
+    - ProcedureStatusProcessing
     - ProcedureStatusFinished
   model.Procedures:
     properties:
+      deviceId:
+        type: string
       endTime:
         type: integer
       id:
@@ -240,6 +246,8 @@
         allOf:
         - $ref: '#/definitions/common.ProductProcedure'
         description: common.ProductProcedure  瀵硅薄
+      procedureId:
+        type: string
       startTime:
         type: integer
       status:
@@ -334,10 +342,12 @@
     type: object
   response.TaskData:
     properties:
-      deviceName:
-        type: string
-      deviceStatus:
-        type: string
+      allProcedures:
+        items:
+          type: string
+        type: array
+      currentProcedureIndex:
+        type: integer
       order:
         $ref: '#/definitions/model.Order'
       procedure:
@@ -566,6 +576,15 @@
       - Task
   /v1/task/get:
     get:
+      parameters:
+      - description: 椤电爜
+        in: query
+        name: page
+        type: integer
+      - description: 姣忛〉澶у皬
+        in: query
+        name: pageSize
+        type: integer
       produces:
       - application/json
       responses:
@@ -596,7 +615,7 @@
           description: 鎴愬姛
           schema:
             $ref: '#/definitions/contextx.Response'
-      summary: 涓嬪彂宸ヨ壓鍙傛暟
+      summary: 涓嬪彂宸ヨ壓鍙傛暟锛堝紑濮嬩换鍔★級
       tags:
       - Task
   /v1/task/start/{id}:
@@ -619,7 +638,7 @@
                 data:
                   $ref: '#/definitions/response.ProcessParamsResponse'
               type: object
-      summary: 浠诲姟寮�濮�
+      summary: 浠诲姟寮�濮嬶紙鑾峰彇宸ヨ壓鍙傛暟锛�
       tags:
       - Task
 swagger: "2.0"
diff --git a/main.go b/main.go
index 386843c..f9585bf 100644
--- a/main.go
+++ b/main.go
@@ -7,7 +7,6 @@
 	"apsClient/nsq"
 	"apsClient/pkg/logx"
 	"apsClient/router"
-	"apsClient/service"
 	"apsClient/service/plc_address"
 	"fmt"
 	"net/http"
@@ -39,8 +38,8 @@
 	//鍔犺浇plc鍐欏叆鍦板潃
 	plc_address.LoadAddressFromFile()
 
-	//鎻愬墠鍔犺浇浠诲姟
-	service.NewTaskService().GetTask()
+	////鎻愬墠鍔犺浇浠诲姟
+	//service.NewTaskService().GetTask()
 
 	go shutdown()
 	logx.Infof("apsClient start serve...")
diff --git a/model/procedures.go b/model/procedures.go
index 6a4762e..a2aade5 100644
--- a/model/procedures.go
+++ b/model/procedures.go
@@ -271,6 +271,17 @@
 	return records, total, nil
 }
 
+func (slf *ProceduresSearch) Count() (int64, error) {
+	var (
+		total int64
+		db    = slf.build()
+	)
+	if err := db.Count(&total).Error; err != nil {
+		return total, fmt.Errorf("find count err: %v", err)
+	}
+	return total, nil
+}
+
 func (slf *ProceduresSearch) FindNotTotal() ([]*Procedures, error) {
 	var (
 		records = make([]*Procedures, 0)
diff --git a/model/response/common.go b/model/response/common.go
index ff33efc..99f8a6a 100644
--- a/model/response/common.go
+++ b/model/response/common.go
@@ -19,9 +19,15 @@
 }
 
 type TaskData struct {
-	Order     *model.Order
-	Procedure *model.Procedures
-	Config
+	Order                 *model.Order
+	Procedure             *model.Procedures
+	AllProcedures         []string
+	CurrentProcedureIndex int
+}
+
+type TaskResponse struct {
+	Tasks     []*TaskData
+	TaskCount int64
 }
 
 type Config struct {
diff --git a/model/work_order.go b/model/work_order.go
index 347d0ea..076edef 100644
--- a/model/work_order.go
+++ b/model/work_order.go
@@ -35,6 +35,7 @@
 		StartTimeMax int64
 		StartTimeMin int64
 		StatusList   []OrderStatus
+		WorkOrderIDs []string
 	}
 )
 
@@ -101,6 +102,11 @@
 	return slf
 }
 
+func (slf *OrderSearch) SetWorkOrderIds(workOrderIds []string) *OrderSearch {
+	slf.WorkOrderIDs = workOrderIds
+	return slf
+}
+
 func (slf *OrderSearch) SetId(id uint) *OrderSearch {
 	slf.ID = id
 	return slf
diff --git a/service/task.go b/service/task.go
index 4def207..96f2b4f 100644
--- a/service/task.go
+++ b/service/task.go
@@ -24,39 +24,54 @@
 }
 
 // GetTask 鑾峰彇浠诲姟锛屾湭瀹屾垚鐨勫紑濮嬫椂闂存渶鏃╃殑浠诲姟
-func (slf TaskService) GetTask() (taskData *response.TaskData, code int) {
-	if v, ok := TaskCacheGet(); ok {
-		return v, ecode.OK
-	}
-
+func (slf TaskService) GetTask(page, pageSize int) (taskDataList []*response.TaskData, count int64, code int) {
 	nowTs := time.Now().Unix()
 	var (
-		err       error
-		order     *model.Order
-		procedure *model.Procedures
+		err          error
+		orders       []*model.Order
+		procedures   []*model.Procedures
+		workOrderIds []string
 	)
-	procedure, err = model.NewProceduresSearch(nil).SetOrder("start_time asc").
+	procedures, err = model.NewProceduresSearch(nil).SetOrder("start_time asc").
 		SetStartTimeMax(nowTs).
 		SetDeviceId(conf.Conf.System.DeviceId).
 		SetStatusNot(model.ProcedureStatusFinished).
-		First()
-	if err == gorm.ErrRecordNotFound {
-		return nil, ecode.OK
+		SetPage(page, pageSize).
+		FindNotTotal()
+	if err != nil {
+		return nil, 0, ecode.DBErr
+	}
+	count, err = model.NewProceduresSearch(nil).
+		SetDeviceId(conf.Conf.System.DeviceId).
+		SetStatusNot(model.ProcedureStatusFinished).
+		Count()
+	if err != nil {
+		return nil, 0, ecode.DBErr
+	}
+	if len(procedures) == 0 {
+		return nil, 0, ecode.OK
 	}
 
-	order, err = model.NewOrderSearch(nil).SetWorkOrderId(procedure.WorkOrderID).First() //鐢卞伐搴忓弽鎺ㄥ伐鍗�
-	if err == gorm.ErrRecordNotFound {
-		err = nil
-		return nil, ecode.OK
+	for _, procedure := range procedures {
+		workOrderIds = append(workOrderIds, procedure.WorkOrderID)
 	}
+	orders, err = model.NewOrderSearch(nil).SetWorkOrderIds(workOrderIds).FindNotTotal() //鐢卞伐搴忓弽鎺ㄥ伐鍗�
 	if err != nil {
-		return nil, ecode.DBErr
+		return nil, 0, ecode.DBErr
 	}
-	taskData = new(response.TaskData)
-	taskData.Order = order
-	taskData.Procedure = procedure
-	TaskCacheSet(taskData)
-	return taskData, ecode.OK
+
+	orderMap := make(map[string]*model.Order, len(workOrderIds))
+	for _, order := range orders {
+		orderMap[order.WorkOrderID] = order
+	}
+	for _, procedure := range procedures {
+		taskData := response.TaskData{
+			Order:     orderMap[procedure.WorkOrderID],
+			Procedure: procedure,
+		}
+		taskDataList = append(taskDataList, &taskData)
+	}
+	return taskDataList, count, ecode.OK
 }
 
 func (slf TaskService) GetProcedureById(id int) (*model.Procedures, int) {
@@ -69,7 +84,6 @@
 
 func (slf TaskService) UpdateProcedureStatus(db *gorm.DB, id int, status model.ProcedureStatus) error {
 	if status == model.ProcedureStatusFinished {
-		TaskCacheUnset()
 		ProgressCacheUnset()
 	}
 	return model.NewProceduresSearch(db).SetId(id).UpdateByMap(map[string]interface{}{

--
Gitblit v1.8.0