From 78f6276b1e727326b9797451db82cd6c7c480852 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 25 八月 2023 11:45:00 +0800
Subject: [PATCH] 增加任务倒计时接口

---
 service/plc.go           |    4 
 service/task.go          |   11 +++
 model/response/common.go |    6 ++
 router/index.go          |    1 
 docs/swagger.yaml        |   29 +++++++++
 model/work_order.go      |    9 +++
 docs/docs.go             |   48 ++++++++++++++++
 api/v1/task.go           |   22 +++++++
 docs/swagger.json        |   48 ++++++++++++++++
 9 files changed, 175 insertions(+), 3 deletions(-)

diff --git a/api/v1/task.go b/api/v1/task.go
index 48484b3..23ae0a2 100644
--- a/api/v1/task.go
+++ b/api/v1/task.go
@@ -23,6 +23,28 @@
 
 type TaskApi struct{}
 
+// TaskCountdown
+// @Tags      Task
+// @Summary   鏂颁换鍔″�掕鏃�
+// @Produce   application/json
+// @Success   200   {object}  contextx.Response{data=response.TaskCountdown}  "鎴愬姛"
+// @Router    /v1/task/countdown [get]
+func (slf *TaskApi) TaskCountdown(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+	var resp response.TaskCountdown
+	workOrder, err := service.NewTaskService().GetComingTask()
+	if err == nil {
+		seconds := workOrder.StartTime - time.Now().Unix()
+		resp.CountDownHour = seconds / 3600
+		resp.CountDownMinute = seconds % 3600 / 60
+		resp.ShowCountDown = true
+	}
+	ctx.OkWithDetailed(resp)
+}
+
 // TaskGet
 // @Tags      Task
 // @Summary   鑾峰彇浠诲姟
diff --git a/docs/docs.go b/docs/docs.go
index aaf2c50..486c228 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -324,6 +324,37 @@
                 }
             }
         },
+        "/v1/task/countdown": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Task"
+                ],
+                "summary": "鏂颁换鍔″�掕鏃�",
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.TaskCountdown"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
         "/v1/task/finish/{id}": {
             "put": {
                 "produces": [
@@ -926,6 +957,23 @@
                 }
             }
         },
+        "response.TaskCountdown": {
+            "type": "object",
+            "properties": {
+                "countDownHour": {
+                    "description": "鍊掕鏃� 鏃�",
+                    "type": "integer"
+                },
+                "countDownMinute": {
+                    "description": "鍊掕鏃� 鍒�",
+                    "type": "integer"
+                },
+                "showCountDown": {
+                    "description": "鏄惁灞曠ず鍊掕鏃�",
+                    "type": "boolean"
+                }
+            }
+        },
         "response.TaskData": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 0abdb9c..d833d3b 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -312,6 +312,37 @@
                 }
             }
         },
+        "/v1/task/countdown": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Task"
+                ],
+                "summary": "鏂颁换鍔″�掕鏃�",
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.TaskCountdown"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
         "/v1/task/finish/{id}": {
             "put": {
                 "produces": [
@@ -914,6 +945,23 @@
                 }
             }
         },
+        "response.TaskCountdown": {
+            "type": "object",
+            "properties": {
+                "countDownHour": {
+                    "description": "鍊掕鏃� 鏃�",
+                    "type": "integer"
+                },
+                "countDownMinute": {
+                    "description": "鍊掕鏃� 鍒�",
+                    "type": "integer"
+                },
+                "showCountDown": {
+                    "description": "鏄惁灞曠ず鍊掕鏃�",
+                    "type": "boolean"
+                }
+            }
+        },
         "response.TaskData": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 87e7cfd..34d675d 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -320,6 +320,18 @@
       totalNumber:
         type: integer
     type: object
+  response.TaskCountdown:
+    properties:
+      countDownHour:
+        description: 鍊掕鏃� 鏃�
+        type: integer
+      countDownMinute:
+        description: 鍊掕鏃� 鍒�
+        type: integer
+      showCountDown:
+        description: 鏄惁灞曠ず鍊掕鏃�
+        type: boolean
+    type: object
   response.TaskData:
     properties:
       deviceName:
@@ -517,6 +529,23 @@
       summary: 鏇存柊plc鍝佺墝
       tags:
       - plc鍝佺墝
+  /v1/task/countdown:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鎴愬姛
+          schema:
+            allOf:
+            - $ref: '#/definitions/contextx.Response'
+            - properties:
+                data:
+                  $ref: '#/definitions/response.TaskCountdown'
+              type: object
+      summary: 鏂颁换鍔″�掕鏃�
+      tags:
+      - Task
   /v1/task/finish/{id}:
     put:
       parameters:
diff --git a/model/response/common.go b/model/response/common.go
index c5e203e..ff33efc 100644
--- a/model/response/common.go
+++ b/model/response/common.go
@@ -43,3 +43,9 @@
 	FinishNumber int `json:"finishNumber"`
 	TotalNumber  int `json:"totalNumber"`
 }
+
+type TaskCountdown struct {
+	CountDownHour   int64 //鍊掕鏃� 鏃�
+	CountDownMinute int64 //鍊掕鏃� 鍒�
+	ShowCountDown   bool  //鏄惁灞曠ず鍊掕鏃�
+}
diff --git a/model/work_order.go b/model/work_order.go
index ed4ca40..be00fec 100644
--- a/model/work_order.go
+++ b/model/work_order.go
@@ -33,6 +33,7 @@
 		Orm          *gorm.DB
 		Preload      bool
 		StartTimeMax int64
+		StartTimeMin int64
 	}
 )
 
@@ -73,6 +74,10 @@
 	slf.StartTimeMax = ts
 	return slf
 }
+func (slf *OrderSearch) SetStartTimeMin(ts int64) *OrderSearch {
+	slf.StartTimeMin = ts
+	return slf
+}
 
 func (slf *OrderSearch) SetStatus(status OrderStatus) *OrderSearch {
 	slf.Status = status
@@ -108,6 +113,10 @@
 		db = db.Where("start_time <= ?", slf.StartTimeMax)
 	}
 
+	if slf.StartTimeMin != 0 {
+		db = db.Where("start_time >= ?", slf.StartTimeMin)
+	}
+
 	if slf.Preload {
 		db = db.Preload("InputMaterials").Preload("OutputMaterials")
 	}
diff --git a/router/index.go b/router/index.go
index 68c1125..6a4505c 100644
--- a/router/index.go
+++ b/router/index.go
@@ -35,6 +35,7 @@
 	taskApi := new(v1.TaskApi)
 	taskGroup := v1Group.Group("task")
 	{
+		taskGroup.GET("countdown", taskApi.TaskCountdown)                  // 鏂颁换鍔″�掕鏃�
 		taskGroup.GET("get", taskApi.TaskGet)                              // 鑾峰彇宸ュ簭
 		taskGroup.GET("start/:id", taskApi.TaskStart)                      // 寮�鍚伐搴忓苟鑾峰彇鍙傛暟
 		taskGroup.PUT("finish/:id", taskApi.TaskFinish)                    // 瀹屾垚宸ュ簭
diff --git a/service/plc.go b/service/plc.go
index 00fa70f..1cef995 100644
--- a/service/plc.go
+++ b/service/plc.go
@@ -24,8 +24,8 @@
 			valueType = pc.Type
 			dataLength = pc.Length
 		}
-		ipAddr = fmt.Sprintf("%s:%v", plcConfig.Address, plcConfig.Port)
 	}
+	ipAddr = fmt.Sprintf("%s:%v", plcConfig.Address, plcConfig.Port)
 
 	conn, err := plc.NewModbusConnection(ipAddr)
 	if err != nil {
@@ -58,8 +58,8 @@
 		if pc.FieldName == fieldType {
 			startAddress = pc.StartAddress
 		}
-		ipAddr = fmt.Sprintf("%s:%v", plcConfig.Address, plcConfig.Port)
 	}
+	ipAddr = fmt.Sprintf("%s:%v", plcConfig.Address, plcConfig.Port)
 
 	conn, err := plc.NewModbusConnection(ipAddr)
 	if err != nil {
diff --git a/service/task.go b/service/task.go
index 3cb816f..5b7be1c 100644
--- a/service/task.go
+++ b/service/task.go
@@ -47,7 +47,7 @@
 		if err != nil {
 			return nil, ecode.DBErr
 		}
-		return slf.GetTask() //褰撳墠璁㈠崟宸插畬鍏紝缁х画鏌ヨ鏈畬鎴愯鍗�
+		return slf.GetTask() //褰撳墠璁㈠崟宸插畬鎴愶紝缁х画鏌ヨ鏈畬鎴愯鍗�
 	}
 	if err != nil {
 		return nil, ecode.DBErr
@@ -75,3 +75,12 @@
 func (slf TaskService) GetOrderByWorkOrderId(workOrderId string) (order *model.Order, err error) {
 	return model.NewOrderSearch(nil).SetWorkOrderId(workOrderId).First()
 }
+
+// GetComingTask 鑾峰彇鏃堕棿鏈埌鐨勬渶鏃╀换鍔�
+func (slf TaskService) GetComingTask() (workOrder *model.Order, err error) {
+	nowTs := time.Now().Unix()
+	orderSearch := model.NewOrderSearch(nil)
+	return orderSearch.SetOrder("created_at asc").
+		SetStartTimeMin(nowTs).
+		SetStatus(model.OrderStatusUnFinished).First()
+}

--
Gitblit v1.8.0