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, ¶ms)
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