From fcc5eaccffbbd0980077cf3fc4707566546f879a Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期四, 17 八月 2023 17:31:18 +0800 Subject: [PATCH] 增加plc pkg, 增加获取任务,完成任务,开始任务接口 --- service/task.go | 69 ++ nsq/msg_handler.go | 55 + .gitignore | 3 logs/apsClient.info.log | 133 ++++ model/procedures.go | 80 ++ go.mod | 1 docs/swagger.yaml | 146 +++- logs/apsClient.err.log | 11 docs/docs.go | 198 ++++- api/v1/task.go | 111 +++ docs/swagger.json | 198 ++++- /dev/null | 260 -------- pkg/plc/plc4x.go | 127 ++++ model/order.go | 268 +++++++++ model/index.go | 2 conf/config.go | 24 conf/apsClient.json | 16 model/response/common.go | 9 router/index.go | 11 19 files changed, 1,188 insertions(+), 534 deletions(-) diff --git a/.gitignore b/.gitignore index 5f530a0..ca9b9ad 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,5 @@ *.exe *.test apsClient -aps.db \ No newline at end of file +aps.db +.idea \ No newline at end of file diff --git a/api/v1/notice.go b/api/v1/notice.go deleted file mode 100644 index 53b7a01..0000000 --- a/api/v1/notice.go +++ /dev/null @@ -1,44 +0,0 @@ -package v1 - -import ( - "apsClient/model/request" - _ "apsClient/model/response" - "apsClient/pkg/contextx" - "apsClient/pkg/logx" - "apsClient/pkg/safe" - "apsClient/service" - "github.com/gin-gonic/gin" -) - -type NoticeApi struct{} - -// TaskStart -// @Tags Base -// @Summary 浠诲姟寮�鍚�氱煡 -// @Produce application/json -// @Param object body request.TaskInfo true "鏌ヨ鍙傛暟" -// @Success 200 {object} contextx.Response{} "鎴愬姛" -// @Router /v1/notice/task/start [post] -func (slf *NoticeApi) TaskStart(c *gin.Context) { - var params request.TaskInfo - ctx, ok := contextx.NewContext(c, ¶ms) - if !ok { - return - } - safe.Go(func() { - resp, err := service.ProcessModel{}.GetProcessModel(service.GetProcessModelParams{ - WorkOrder: params.WorkOrder, - OrderId: params.OrderId, - Product: params.Product, - Procedure: params.Procedure, - Device: params.Device, - }) - if err != nil { - logx.Errorf("TaskStart Notice GetProcessModel error: %v", err.Error()) - return - } - logx.Infof("TaskStart Notice GetProcessModel: %+v", resp) - }) - - ctx.Ok() -} diff --git a/api/v1/task.go b/api/v1/task.go index 196ee69..cc746f2 100644 --- a/api/v1/task.go +++ b/api/v1/task.go @@ -1,47 +1,114 @@ package v1 import ( - "apsClient/model/request" + "apsClient/model" _ "apsClient/model/response" "apsClient/pkg/contextx" + "apsClient/pkg/convertx" "apsClient/pkg/ecode" + "apsClient/pkg/logx" "apsClient/service" - "encoding/json" "github.com/gin-gonic/gin" ) type TaskApi struct{} -// TaskList -// @Tags Base -// @Summary 浠诲姟寮�鍚�氱煡 +// TaskGet +// @Tags Task +// @Summary 鑾峰彇浠诲姟 // @Produce application/json -// @Param object query request.TaskList true "鏌ヨ鍙傛暟" -// @Success 200 {object} contextx.Response{data=[]model.ScheduleTask} "鎴愬姛" -// @Router /v1/task/list [get] -func (slf *TaskApi) TaskList(c *gin.Context) { - var params request.TaskList - ctx, ok := contextx.NewContext(c, ¶ms) +// @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) if !ok { return } - taskList, total, code := service.NewTaskService().GetTaskList(params.Page, params.PageSize) + taskData, code := service.NewTaskService().GetTask() if code != ecode.OK { ctx.Fail(code) return } + ctx.OkWithDetailed(taskData) +} - for _, task := range taskList { - if task.Data != "" { - err := json.Unmarshal([]byte(task.Data), &task.TaskInfo) - if err != nil { - ctx.Fail(ecode.UnknownErr) - return - } - } - +// TaskStart +// @Tags Base +// @Summary 浠诲姟寮�濮� +// @Produce application/json +// @Param id path int true "宸ュ簭id" +// @Success 200 {object} contextx.Response{service.GetProcessModel} "鎴愬姛" +// @Router /v1/task/start/{id} [get] +func (slf *TaskApi) TaskStart(c *gin.Context) { + ctx, ok := contextx.NewContext(c, nil) + if !ok { + return + } + idx := c.Param("id") + if idx == "" { + ctx.Fail(ecode.ParamsErr) + return + } + id := convertx.Atoi(idx) + procedure, code := service.NewTaskService().GetProcedureById(id) + if code != ecode.OK { + ctx.Fail(code) + return + } + order, err := service.NewTaskService().GetOrderByOrderId(procedure.OrderID) + if err != nil { + ctx.Fail(ecode.UnknownErr) + return } - ctx.ResultList(taskList, total) + params := service.GetProcessModelParams{ + WorkOrder: "", + OrderId: procedure.OrderID, + Product: order.ProductName, + Procedure: procedure.ProceduresInfo.ProcedureName, + Device: procedure.ProceduresInfo.DeviceID, + } + + resp, err := service.ProcessModel{}.GetProcessModel(params) + + if err != nil { + logx.Errorf("TaskStart Notice GetProcessModel error: %v", err.Error()) + ctx.Fail(ecode.UnknownErr) + return + } + logx.Infof("TaskStart Notice GetProcessModel: %+v", resp) + ctx.OkWithDetailed(resp) +} + +// TaskFinish +// @Tags Base +// @Summary 浠诲姟缁撴潫 +// @Produce application/json +// @Param id path int true "宸ュ簭id" +// @Success 200 {object} contextx.Response{service.GetProcessModel} "鎴愬姛" +// @Router /v1/task/finish/{id} [put] +func (slf *TaskApi) TaskFinish(c *gin.Context) { + ctx, ok := contextx.NewContext(c, nil) + if !ok { + return + } + idx := c.Param("id") + if idx == "" { + ctx.Fail(ecode.ParamsErr) + return + } + id := convertx.Atoi(idx) + _, code := service.NewTaskService().GetProcedureById(id) + if code != ecode.OK { + ctx.Fail(code) + return + } + err := service.NewTaskService().UpdateProcedureStatus(id, model.ProcedureStatusFinished) + if err != nil { + logx.Errorf("UpdateProcedureStatus err: %v", err.Error()) + ctx.Fail(ecode.UnknownErr) + return + } + ctx.Ok() } diff --git a/conf/apsClient.json b/conf/apsClient.json index aaaf003..2ed7d69 100644 --- a/conf/apsClient.json +++ b/conf/apsClient.json @@ -7,7 +7,8 @@ "LimitCountIP": 15000, "LimitTimeIP": 3600, "RouterPrefix": "api", - "SudoPassword": "basic2021" + "SudoPassword": "basic2021", + "deviceId": "MA-JWW-1" }, "log": { "path": "./logs/apsClient.log", @@ -34,19 +35,6 @@ "port": 6379, "password": "123456", "db": 0 - }, - "captcha": { - "keyLong": 6, - "imgWidth": 240, - "imgHeight": 80, - "openCaptcha": 0, - "openCaptchaTimeout": 3600 - }, - "jwt": { - "SigningKey": "327a9457-899a-481e-8b30-58cc97e5b808", - "ExpiresTime": "7d", - "BufferTime": "1d", - "Issuer": "qmPlus" }, "etcd": { "endpoints": [ diff --git a/conf/config.go b/conf/config.go index 60569a2..5af1d43 100644 --- a/conf/config.go +++ b/conf/config.go @@ -24,21 +24,6 @@ ) type ( - Captcha struct { - KeyLong int // 楠岃瘉鐮侀暱搴� - ImgWidth int // 楠岃瘉鐮佸搴� - ImgHeight int // 楠岃瘉鐮侀珮搴� - OpenCaptcha int // 闃茬垎鐮撮獙璇佺爜寮�鍚鏁帮紝0浠h〃姣忔鐧诲綍閮介渶瑕侀獙璇佺爜锛屽叾浠栨暟瀛椾唬琛ㄩ敊璇瘑鐮佹鏁帮紝濡�3浠h〃閿欒涓夋鍚庡嚭鐜伴獙璇佺爜 - OpenCaptchaTimeOut int // 闃茬垎鐮撮獙璇佺爜瓒呮椂鏃堕棿锛屽崟浣嶏細s(绉�) - } - - JWT struct { - SigningKey string // jwt绛惧悕 - ExpiresTime string // 杩囨湡鏃堕棿 - BufferTime string // 缂撳啿鏃堕棿 - Issuer string // 绛惧彂鑰� - } - System struct { Env string // 鐜鍊� develop test public Port int // 绔彛 @@ -49,6 +34,7 @@ LimitTimeIP int RouterPrefix string // 璺敱鍓嶇紑 SudoPassword string // sudo瀵嗙爜 + DeviceId string //璁惧id } Etcd struct { @@ -102,12 +88,6 @@ // redis閰嶇疆 Redis redisx.Conf - - // 楠岃瘉鐮� - Captcha Captcha - - // JWT閰嶇疆 - JWT JWT // etcd閰嶇疆 Etcd Etcd @@ -169,8 +149,6 @@ log.Printf(" System: %+v", Conf.System) log.Printf(" Log: %+v", Conf.Log) log.Printf(" Mysql: %+v", Conf.Mysql) - log.Printf(" Captcha: %+v", Conf.Captcha) - log.Printf(" JWT: %+v", Conf.JWT) log.Printf(" etcd: %+v", Conf.Etcd) log.Printf(" rancher: %+v", Conf.Rancher) log.Printf(" k8s: %+v", Conf.K8s) diff --git a/docs/docs.go b/docs/docs.go index be67e6e..91eb01b 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -16,24 +16,22 @@ "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { - "/v1/notice/task/start": { - "post": { + "/v1/task/finish/{id}": { + "put": { "produces": [ "application/json" ], "tags": [ "Base" ], - "summary": "浠诲姟寮�鍚�氱煡", + "summary": "浠诲姟缁撴潫", "parameters": [ { - "description": "鏌ヨ鍙傛暟", - "name": "object", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/request.TaskInfo" - } + "type": "integer", + "description": "宸ュ簭id", + "name": "id", + "in": "path", + "required": true } ], "responses": { @@ -46,29 +44,15 @@ } } }, - "/v1/task/list": { + "/v1/task/get": { "get": { "produces": [ "application/json" ], "tags": [ - "Base" + "Task" ], - "summary": "浠诲姟寮�鍚�氱煡", - "parameters": [ - { - "type": "integer", - "description": "椤电爜", - "name": "page", - "in": "query" - }, - { - "type": "integer", - "description": "姣忛〉澶у皬", - "name": "pageSize", - "in": "query" - } - ], + "summary": "鑾峰彇浠诲姟", "responses": { "200": { "description": "鎴愬姛", @@ -81,14 +65,39 @@ "type": "object", "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/definitions/model.ScheduleTask" - } + "$ref": "#/definitions/response.TaskData" } } } ] + } + } + } + } + }, + "/v1/task/start/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "Base" + ], + "summary": "浠诲姟寮�濮�", + "parameters": [ + { + "type": "integer", + "description": "宸ュ簭id", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "鎴愬姛", + "schema": { + "$ref": "#/definitions/contextx.Response" } } } @@ -108,33 +117,35 @@ } } }, - "model.ScheduleTask": { + "model.Order": { "type": "object", "properties": { "amount": { - "description": "Parameter string ` + "`" + `json:\"parameter\"` + "`" + ` //浜у搧鍚嶇О\nCustomer string ` + "`" + `json:\"customer\"` + "`" + `\nDeliverDate string ` + "`" + `json:\"deliverDate\"` + "`" + `\nOrderAttr string ` + "`" + `json:\"orderAttr\"` + "`" + `", "type": "number" }, - "data": { - "description": "鎺掔▼浠诲姟json涓�", + "customer": { + "type": "string" + }, + "deliverDate": { "type": "string" }, "endTime": { "type": "integer" }, - "id": { - "type": "integer" + "orderAttr": { + "description": "璁㈠崟灞炴�ф嫾鎺ョ殑瀛楃涓诧紝鍗宠揣鐗╂弿杩�", + "type": "string" }, "orderId": { - "description": "璁㈠崟id", + "type": "string" + }, + "parameter": { "type": "string" }, "productId": { - "description": "璁㈠崟id", "type": "string" }, "productName": { - "description": "浜у搧鍚嶇О", "type": "string" }, "startTime": { @@ -145,28 +156,105 @@ } } }, - "request.TaskInfo": { + "model.Procedures": { "type": "object", "properties": { - "device": { - "description": "璁惧", - "type": "string" - }, - "orderId": { - "description": "璁㈠崟鍙�", - "type": "string" - }, - "password": { - "description": "浜у搧", - "type": "string" + "id": { + "type": "integer" }, "procedure": { - "description": "宸ュ簭", + "description": "request.ProductProcedure 瀵硅薄", + "allOf": [ + { + "$ref": "#/definitions/request.ProductProcedure" + } + ] + } + } + }, + "request.ProcedureMaterial": { + "type": "object", + "properties": { + "amount": { + "type": "number" + }, + "materialId": { "type": "string" }, - "workOrder": { - "description": "宸ュ崟", + "materialName": { "type": "string" + }, + "unit": { + "type": "string" + } + } + }, + "request.ProcedureWorker": { + "type": "object", + "properties": { + "phoneNum": { + "type": "string" + }, + "workerId": { + "type": "string" + }, + "workerName": { + "type": "string" + } + } + }, + "request.ProductProcedure": { + "type": "object", + "properties": { + "deviceId": { + "type": "string" + }, + "endTime": { + "type": "integer" + }, + "inputMaterials": { + "description": "杈撳叆鐗╂枡鍒楄〃", + "type": "array", + "items": { + "$ref": "#/definitions/request.ProcedureMaterial" + } + }, + "outputMaterials": { + "description": "杈撳嚭鐗╂枡鍒楄〃", + "type": "array", + "items": { + "$ref": "#/definitions/request.ProcedureMaterial" + } + }, + "procedureId": { + "type": "string" + }, + "procedureName": { + "type": "string" + }, + "startTime": { + "type": "integer" + }, + "workHours": { + "type": "number" + }, + "workers": { + "description": "浜哄憳鍒楄〃", + "type": "array", + "items": { + "$ref": "#/definitions/request.ProcedureWorker" + } + } + } + }, + "response.TaskData": { + "type": "object", + "properties": { + "order": { + "$ref": "#/definitions/model.Order" + }, + "procedure": { + "$ref": "#/definitions/model.Procedures" } } } diff --git a/docs/swagger.json b/docs/swagger.json index bba27ba..0fa3a0e 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -4,24 +4,22 @@ "contact": {} }, "paths": { - "/v1/notice/task/start": { - "post": { + "/v1/task/finish/{id}": { + "put": { "produces": [ "application/json" ], "tags": [ "Base" ], - "summary": "浠诲姟寮�鍚�氱煡", + "summary": "浠诲姟缁撴潫", "parameters": [ { - "description": "鏌ヨ鍙傛暟", - "name": "object", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/request.TaskInfo" - } + "type": "integer", + "description": "宸ュ簭id", + "name": "id", + "in": "path", + "required": true } ], "responses": { @@ -34,29 +32,15 @@ } } }, - "/v1/task/list": { + "/v1/task/get": { "get": { "produces": [ "application/json" ], "tags": [ - "Base" + "Task" ], - "summary": "浠诲姟寮�鍚�氱煡", - "parameters": [ - { - "type": "integer", - "description": "椤电爜", - "name": "page", - "in": "query" - }, - { - "type": "integer", - "description": "姣忛〉澶у皬", - "name": "pageSize", - "in": "query" - } - ], + "summary": "鑾峰彇浠诲姟", "responses": { "200": { "description": "鎴愬姛", @@ -69,14 +53,39 @@ "type": "object", "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/definitions/model.ScheduleTask" - } + "$ref": "#/definitions/response.TaskData" } } } ] + } + } + } + } + }, + "/v1/task/start/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "Base" + ], + "summary": "浠诲姟寮�濮�", + "parameters": [ + { + "type": "integer", + "description": "宸ュ簭id", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "鎴愬姛", + "schema": { + "$ref": "#/definitions/contextx.Response" } } } @@ -96,33 +105,35 @@ } } }, - "model.ScheduleTask": { + "model.Order": { "type": "object", "properties": { "amount": { - "description": "Parameter string `json:\"parameter\"` //浜у搧鍚嶇О\nCustomer string `json:\"customer\"`\nDeliverDate string `json:\"deliverDate\"`\nOrderAttr string `json:\"orderAttr\"`", "type": "number" }, - "data": { - "description": "鎺掔▼浠诲姟json涓�", + "customer": { + "type": "string" + }, + "deliverDate": { "type": "string" }, "endTime": { "type": "integer" }, - "id": { - "type": "integer" + "orderAttr": { + "description": "璁㈠崟灞炴�ф嫾鎺ョ殑瀛楃涓诧紝鍗宠揣鐗╂弿杩�", + "type": "string" }, "orderId": { - "description": "璁㈠崟id", + "type": "string" + }, + "parameter": { "type": "string" }, "productId": { - "description": "璁㈠崟id", "type": "string" }, "productName": { - "description": "浜у搧鍚嶇О", "type": "string" }, "startTime": { @@ -133,28 +144,105 @@ } } }, - "request.TaskInfo": { + "model.Procedures": { "type": "object", "properties": { - "device": { - "description": "璁惧", - "type": "string" - }, - "orderId": { - "description": "璁㈠崟鍙�", - "type": "string" - }, - "password": { - "description": "浜у搧", - "type": "string" + "id": { + "type": "integer" }, "procedure": { - "description": "宸ュ簭", + "description": "request.ProductProcedure 瀵硅薄", + "allOf": [ + { + "$ref": "#/definitions/request.ProductProcedure" + } + ] + } + } + }, + "request.ProcedureMaterial": { + "type": "object", + "properties": { + "amount": { + "type": "number" + }, + "materialId": { "type": "string" }, - "workOrder": { - "description": "宸ュ崟", + "materialName": { "type": "string" + }, + "unit": { + "type": "string" + } + } + }, + "request.ProcedureWorker": { + "type": "object", + "properties": { + "phoneNum": { + "type": "string" + }, + "workerId": { + "type": "string" + }, + "workerName": { + "type": "string" + } + } + }, + "request.ProductProcedure": { + "type": "object", + "properties": { + "deviceId": { + "type": "string" + }, + "endTime": { + "type": "integer" + }, + "inputMaterials": { + "description": "杈撳叆鐗╂枡鍒楄〃", + "type": "array", + "items": { + "$ref": "#/definitions/request.ProcedureMaterial" + } + }, + "outputMaterials": { + "description": "杈撳嚭鐗╂枡鍒楄〃", + "type": "array", + "items": { + "$ref": "#/definitions/request.ProcedureMaterial" + } + }, + "procedureId": { + "type": "string" + }, + "procedureName": { + "type": "string" + }, + "startTime": { + "type": "integer" + }, + "workHours": { + "type": "number" + }, + "workers": { + "description": "浜哄憳鍒楄〃", + "type": "array", + "items": { + "$ref": "#/definitions/request.ProcedureWorker" + } + } + } + }, + "response.TaskData": { + "type": "object", + "properties": { + "order": { + "$ref": "#/definitions/model.Order" + }, + "procedure": { + "$ref": "#/definitions/model.Procedures" } } } diff --git a/docs/swagger.yaml b/docs/swagger.yaml index d7c6fa3..fa6eed7 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -7,66 +7,109 @@ msg: type: string type: object - model.ScheduleTask: + model.Order: properties: amount: - description: |- - Parameter string `json:"parameter"` //浜у搧鍚嶇О - Customer string `json:"customer"` - DeliverDate string `json:"deliverDate"` - OrderAttr string `json:"orderAttr"` type: number - data: - description: 鎺掔▼浠诲姟json涓� + customer: + type: string + deliverDate: type: string endTime: type: integer - id: - type: integer + orderAttr: + description: 璁㈠崟灞炴�ф嫾鎺ョ殑瀛楃涓诧紝鍗宠揣鐗╂弿杩� + type: string orderId: - description: 璁㈠崟id + type: string + parameter: type: string productId: - description: 璁㈠崟id type: string productName: - description: 浜у搧鍚嶇О type: string startTime: type: integer unit: type: string type: object - request.TaskInfo: + model.Procedures: properties: - device: - description: 璁惧 - type: string - orderId: - description: 璁㈠崟鍙� - type: string - password: - description: 浜у搧 - type: string + id: + type: integer procedure: - description: 宸ュ簭 + allOf: + - $ref: '#/definitions/request.ProductProcedure' + description: request.ProductProcedure 瀵硅薄 + type: object + request.ProcedureMaterial: + properties: + amount: + type: number + materialId: type: string - workOrder: - description: 宸ュ崟 + materialName: type: string + unit: + type: string + type: object + request.ProcedureWorker: + properties: + phoneNum: + type: string + workerId: + type: string + workerName: + type: string + type: object + request.ProductProcedure: + properties: + deviceId: + type: string + endTime: + type: integer + inputMaterials: + description: 杈撳叆鐗╂枡鍒楄〃 + items: + $ref: '#/definitions/request.ProcedureMaterial' + type: array + outputMaterials: + description: 杈撳嚭鐗╂枡鍒楄〃 + items: + $ref: '#/definitions/request.ProcedureMaterial' + type: array + procedureId: + type: string + procedureName: + type: string + startTime: + type: integer + workHours: + type: number + workers: + description: 浜哄憳鍒楄〃 + items: + $ref: '#/definitions/request.ProcedureWorker' + type: array + type: object + response.TaskData: + properties: + order: + $ref: '#/definitions/model.Order' + procedure: + $ref: '#/definitions/model.Procedures' type: object info: contact: {} paths: - /v1/notice/task/start: - post: + /v1/task/finish/{id}: + put: parameters: - - description: 鏌ヨ鍙傛暟 - in: body - name: object + - description: 宸ュ簭id + in: path + name: id required: true - schema: - $ref: '#/definitions/request.TaskInfo' + type: integer produces: - application/json responses: @@ -74,20 +117,11 @@ description: 鎴愬姛 schema: $ref: '#/definitions/contextx.Response' - summary: 浠诲姟寮�鍚�氱煡 + summary: 浠诲姟缁撴潫 tags: - Base - /v1/task/list: + /v1/task/get: get: - parameters: - - description: 椤电爜 - in: query - name: page - type: integer - - description: 姣忛〉澶у皬 - in: query - name: pageSize - type: integer produces: - application/json responses: @@ -98,11 +132,27 @@ - $ref: '#/definitions/contextx.Response' - properties: data: - items: - $ref: '#/definitions/model.ScheduleTask' - type: array + $ref: '#/definitions/response.TaskData' type: object - summary: 浠诲姟寮�鍚�氱煡 + summary: 鑾峰彇浠诲姟 + tags: + - Task + /v1/task/start/{id}: + get: + parameters: + - description: 宸ュ簭id + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: 鎴愬姛 + schema: + $ref: '#/definitions/contextx.Response' + summary: 浠诲姟寮�濮� tags: - Base swagger: "2.0" diff --git a/go.mod b/go.mod index dd75050..4e81ef2 100644 --- a/go.mod +++ b/go.mod @@ -26,6 +26,7 @@ gorm.io/driver/mysql v1.5.0 gorm.io/gorm v1.25.3 moul.io/zapgorm2 v1.3.0 + github.com/apache/plc4x/plc4go v0.0.0-20230714120555-05ec3da87ebe ) require ( diff --git a/logs/apsClient.err.log b/logs/apsClient.err.log index e636088..9f6ddbd 100644 --- a/logs/apsClient.err.log +++ b/logs/apsClient.err.log @@ -51,3 +51,14 @@ [2023-08-15 19:53:30] [error] [gorm.io/gorm/migrator.Migrator.AutoMigrate:113] failed to parse value model.ScheduleTask{Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}, Id:0, OrderId:"", ProductId:"", ProductName:"", Amount:decimal.Decimal{value:(*big.Int)(nil), exp:0}, Unit:"", StartTime:0, EndTime:0, Data:"", TaskInfo:request.DeliverScheduleTask{Order:request.Order{OrderID:"", ProductID:"", ProductName:"", Parameter:"", Customer:"", DeliverDate:"", OrderAttr:"", Amount:decimal.Decimal{value:(*big.Int)(nil), exp:0}, Unit:"", StartTime:0, EndTime:0}, Procedures:[]*request.ProductProcedure(nil)}}, got error invalid field found for struct apsClient/model/request.DeliverScheduleTask's field Order: define a valid foreign key for relations or implement the Valuer/Scanner interface [2023-08-15 19:53:30] [error] [gorm.io/gorm/migrator.Migrator.CreateTable:207] failed to parse value model.ScheduleTask{Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}, Id:0, OrderId:"", ProductId:"", ProductName:"", Amount:decimal.Decimal{value:(*big.Int)(nil), exp:0}, Unit:"", StartTime:0, EndTime:0, Data:"", TaskInfo:request.DeliverScheduleTask{Order:request.Order{OrderID:"", ProductID:"", ProductName:"", Parameter:"", Customer:"", DeliverDate:"", OrderAttr:"", Amount:decimal.Decimal{value:(*big.Int)(nil), exp:0}, Unit:"", StartTime:0, EndTime:0}, Procedures:[]*request.ProductProcedure(nil)}}, got error invalid field found for struct apsClient/model/request.DeliverScheduleTask's field Order: define a valid foreign key for relations or implement the Valuer/Scanner interface [2023-08-15 19:53:30] [error] [main.main:23] model Init err:invalid field found for struct apsClient/model/request.DeliverScheduleTask's field Order: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-08-16 13:37:32] [error] [apsClient/model.Init:10] failed to initialize database, got error Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +[2023-08-16 13:37:32] [error] [main.main:23] model Init err:Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +[2023-08-16 14:23:42] [error] [apsClient/model.Init:10] failed to initialize database, got error Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +[2023-08-16 14:23:42] [error] [main.main:23] model Init err:Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +[2023-08-16 19:47:30] [error] [apsClient/model.Init:10] failed to initialize database, got error Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +[2023-08-16 19:47:30] [error] [main.main:23] model Init err:Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +[2023-08-16 19:58:28] [error] [apsClient/model.Init:10] failed to initialize database, got error Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +[2023-08-16 19:58:28] [error] [main.main:23] model Init err:Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +[2023-08-17 17:01:05] [error] [apsClient/model.Init:10] failed to initialize database, got error Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +[2023-08-17 17:01:05] [error] [main.main:23] model Init err:Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +[2023-08-17 17:27:57] [error] [apsClient/model.(*OrderSearch).First:189] trace {"error": "record not found", "elapsed": 0, "rows": 0, "sql": "SELECT * FROM `Order` WHERE status = \"1\" AND start_time >= 1692264477 AND `Order`.`deleted_at` IS NULL ORDER BY created_at asc,`Order`.`id` LIMIT 1"} diff --git a/logs/apsClient.info.log b/logs/apsClient.info.log index d69ffb7..85d9e6a 100644 --- a/logs/apsClient.info.log +++ b/logs/apsClient.info.log @@ -188,3 +188,136 @@ [2023-08-15 19:54:52] [debug] [apsClient/model.(*ScheduleTaskSearch).Find:195] trace {"elapsed": 0.0010002, "rows": 1, "sql": "SELECT count(*) FROM `schedule_task` WHERE `schedule_task`.`deleted_at` IS NULL"} [2023-08-15 19:54:52] [debug] [apsClient/model.(*ScheduleTaskSearch).Find:201] trace {"elapsed": 0.0009973, "rows": 4, "sql": "SELECT * FROM `schedule_task` WHERE `schedule_task`.`deleted_at` IS NULL LIMIT 20"} [2023-08-15 19:55:57] [info] [main.shutdown:48] apsClient exited... +[2023-08-15 19:56:02] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"schedule_task\""} +[2023-08-15 19:56:02] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"schedule_task\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-15 19:56:02] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `schedule_task` LIMIT 1"} +[2023-08-15 19:56:02] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"schedule_task\" AND name = \"idx_schedule_task_deleted_at\""} +[2023-08-15 19:56:02] [info] [main.main:33] apsClient start serve... +[2023-08-15 19:56:02] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-15 19:56:07] [info] [apsClient/pkg/contextx.NewContext.func1:44] 192.168.20.120 | GET /v1/task/list?page=1&pageSize=20 | uid: | &{PageInfo:{Page:1 PageSize:20}} +[2023-08-15 19:56:07] [debug] [apsClient/model.(*ScheduleTaskSearch).Find:195] trace {"elapsed": 0, "rows": 1, "sql": "SELECT count(*) FROM `schedule_task` WHERE `schedule_task`.`deleted_at` IS NULL"} +[2023-08-15 19:56:07] [debug] [apsClient/model.(*ScheduleTaskSearch).Find:201] trace {"elapsed": 0, "rows": 4, "sql": "SELECT * FROM `schedule_task` WHERE `schedule_task`.`deleted_at` IS NULL LIMIT 20"} +[2023-08-16 13:37:29] [info] [main.shutdown:48] apsClient exited... +[2023-08-16 14:24:28] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0.0010137, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"schedule_task\""} +[2023-08-16 14:24:28] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0.0009919, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"schedule_task\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-16 14:24:28] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `schedule_task` LIMIT 1"} +[2023-08-16 14:24:28] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"schedule_task\" AND name = \"idx_schedule_task_deleted_at\""} +[2023-08-16 14:24:28] [info] [main.main:33] apsClient start serve... +[2023-08-16 14:24:28] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-16 14:24:52] [info] [main.shutdown:48] apsClient exited... +[2023-08-16 14:24:53] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"schedule_task\""} +[2023-08-16 14:24:53] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"schedule_task\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-16 14:24:53] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `schedule_task` LIMIT 1"} +[2023-08-16 14:24:53] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"schedule_task\" AND name = \"idx_schedule_task_deleted_at\""} +[2023-08-16 14:24:53] [info] [main.main:33] apsClient start serve... +[2023-08-16 14:24:53] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-16 14:25:21] [info] [main.shutdown:48] apsClient exited... +[2023-08-16 14:25:26] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"schedule_task\""} +[2023-08-16 14:25:26] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"schedule_task\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-16 14:25:26] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `schedule_task` LIMIT 1"} +[2023-08-16 14:25:26] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"schedule_task\" AND name = \"idx_schedule_task_deleted_at\""} +[2023-08-16 14:25:26] [info] [main.main:33] apsClient start serve... +[2023-08-16 14:25:26] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-16 19:47:26] [info] [main.shutdown:48] apsClient exited... +[2023-08-16 19:58:49] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"schedule_task\""} +[2023-08-16 19:58:49] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0.0010028, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"schedule_task\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-16 19:58:49] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `schedule_task` LIMIT 1"} +[2023-08-16 19:58:49] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"schedule_task\" AND name = \"idx_schedule_task_deleted_at\""} +[2023-08-16 19:58:49] [info] [main.main:33] apsClient start serve... +[2023-08-16 19:58:49] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-17 17:00:28] [info] [main.shutdown:48] apsClient exited... +[2023-08-17 17:01:32] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"Order\""} +[2023-08-17 17:01:32] [debug] [gorm.io/gorm/migrator.Migrator.CreateTable.func1:290] trace {"elapsed": 0.0070474, "rows": 0, "sql": "CREATE TABLE `Order` (`id` integer,`created_at` datetime,`updated_at` datetime,`deleted_at` datetime,`order_id` varchar(191) NOT NULL,`product_id` varchar(191),`product_name` varchar(191),`parameter` varchar(1024),`customer` varchar(191),`deliver_date` varchar(100),`order_attr` text,`amount` decimal(35,18),`unit` varchar(100),`start_time` integer,`end_time` integer,`status` integer,PRIMARY KEY (`id`))"} +[2023-08-17 17:01:32] [debug] [gorm.io/driver/sqlite.Migrator.CreateIndex.func1:294] trace {"elapsed": 0.0040126, "rows": 0, "sql": "CREATE INDEX `idx_Order_order_id` ON `Order`(`order_id`)"} +[2023-08-17 17:01:32] [debug] [gorm.io/driver/sqlite.Migrator.CreateIndex.func1:294] trace {"elapsed": 0.0050064, "rows": 0, "sql": "CREATE INDEX `idx_Order_deleted_at` ON `Order`(`deleted_at`)"} +[2023-08-17 17:01:32] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"procedures\""} +[2023-08-17 17:01:32] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 2, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"procedures\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:01:32] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `procedures` LIMIT 1"} +[2023-08-17 17:01:32] [debug] [gorm.io/gorm/migrator.Migrator.AddColumn.func1:363] trace {"elapsed": 0.0060192, "rows": 0, "sql": "ALTER TABLE `procedures` ADD `order_id` varchar(191) NOT NULL"} +[2023-08-17 17:01:32] [debug] [gorm.io/gorm/migrator.Migrator.AddColumn.func1:363] trace {"elapsed": 0.0050113, "rows": 0, "sql": "ALTER TABLE `procedures` ADD `status` integer"} +[2023-08-17 17:01:32] [debug] [gorm.io/gorm/migrator.Migrator.AddColumn.func1:363] trace {"elapsed": 0.004009, "rows": 0, "sql": "ALTER TABLE `procedures` ADD `procedure_data` text"} +[2023-08-17 17:01:32] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_deleted_at\""} +[2023-08-17 17:01:32] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_order_id\""} +[2023-08-17 17:01:32] [debug] [gorm.io/driver/sqlite.Migrator.CreateIndex.func1:294] trace {"elapsed": 0.0050123, "rows": 0, "sql": "CREATE INDEX `idx_procedures_order_id` ON `procedures`(`order_id`)"} +[2023-08-17 17:01:32] [info] [main.main:33] apsClient start serve... +[2023-08-17 17:01:32] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-17 17:18:25] [info] [main.shutdown:48] apsClient exited... +[2023-08-17 17:18:30] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"Order\""} +[2023-08-17 17:18:30] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"Order\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:18:30] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `Order` LIMIT 1"} +[2023-08-17 17:18:30] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_deleted_at\""} +[2023-08-17 17:18:30] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_order_id\""} +[2023-08-17 17:18:30] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"procedures\""} +[2023-08-17 17:18:30] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"procedures\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:18:30] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `procedures` LIMIT 1"} +[2023-08-17 17:18:30] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_deleted_at\""} +[2023-08-17 17:18:30] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_order_id\""} +[2023-08-17 17:18:30] [info] [main.main:33] apsClient start serve... +[2023-08-17 17:18:30] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-17 17:23:05] [info] [main.shutdown:48] apsClient exited... +[2023-08-17 17:23:10] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"Order\""} +[2023-08-17 17:23:10] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"Order\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:23:10] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `Order` LIMIT 1"} +[2023-08-17 17:23:10] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_deleted_at\""} +[2023-08-17 17:23:10] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_order_id\""} +[2023-08-17 17:23:10] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"procedures\""} +[2023-08-17 17:23:10] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0.0009688, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"procedures\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:23:10] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `procedures` LIMIT 1"} +[2023-08-17 17:23:10] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_deleted_at\""} +[2023-08-17 17:23:10] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_order_id\""} +[2023-08-17 17:23:10] [info] [main.main:33] apsClient start serve... +[2023-08-17 17:23:10] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-17 17:24:23] [info] [main.shutdown:48] apsClient exited... +[2023-08-17 17:24:28] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"Order\""} +[2023-08-17 17:24:28] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"Order\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:24:28] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `Order` LIMIT 1"} +[2023-08-17 17:24:28] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_deleted_at\""} +[2023-08-17 17:24:28] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_order_id\""} +[2023-08-17 17:24:28] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"procedures\""} +[2023-08-17 17:24:28] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"procedures\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:24:28] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `procedures` LIMIT 1"} +[2023-08-17 17:24:28] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_deleted_at\""} +[2023-08-17 17:24:28] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_order_id\""} +[2023-08-17 17:24:28] [info] [main.main:33] apsClient start serve... +[2023-08-17 17:24:28] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-17 17:25:44] [info] [main.shutdown:48] apsClient exited... +[2023-08-17 17:25:51] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"Order\""} +[2023-08-17 17:25:51] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"Order\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:25:51] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `Order` LIMIT 1"} +[2023-08-17 17:25:51] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_deleted_at\""} +[2023-08-17 17:25:51] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_order_id\""} +[2023-08-17 17:25:51] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"procedures\""} +[2023-08-17 17:25:51] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"procedures\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:25:51] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `procedures` LIMIT 1"} +[2023-08-17 17:25:51] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_deleted_at\""} +[2023-08-17 17:25:51] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_order_id\""} +[2023-08-17 17:25:51] [info] [main.main:33] apsClient start serve... +[2023-08-17 17:25:51] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-17 17:26:43] [info] [main.shutdown:48] apsClient exited... +[2023-08-17 17:26:48] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"Order\""} +[2023-08-17 17:26:48] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"Order\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:26:48] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `Order` LIMIT 1"} +[2023-08-17 17:26:48] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_deleted_at\""} +[2023-08-17 17:26:48] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_order_id\""} +[2023-08-17 17:26:48] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"procedures\""} +[2023-08-17 17:26:48] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"procedures\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:26:48] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `procedures` LIMIT 1"} +[2023-08-17 17:26:48] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_deleted_at\""} +[2023-08-17 17:26:48] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_order_id\""} +[2023-08-17 17:26:48] [info] [main.main:33] apsClient start serve... +[2023-08-17 17:26:48] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-17 17:27:40] [info] [main.shutdown:48] apsClient exited... +[2023-08-17 17:27:45] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"Order\""} +[2023-08-17 17:27:45] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"Order\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:27:45] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `Order` LIMIT 1"} +[2023-08-17 17:27:45] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_deleted_at\""} +[2023-08-17 17:27:45] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"Order\" AND name = \"idx_Order_order_id\""} +[2023-08-17 17:27:45] [debug] [gorm.io/driver/sqlite.Migrator.HasTable.func1:33] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=\"procedures\""} +[2023-08-17 17:27:45] [debug] [gorm.io/gorm/migrator.Migrator.RunWithValue:71] trace {"elapsed": 0, "rows": 3, "sql": "SELECT sql FROM sqlite_master WHERE type IN (\"table\",\"index\") AND tbl_name = \"procedures\" AND sql IS NOT NULL order by type = \"table\" desc"} +[2023-08-17 17:27:45] [debug] [gorm.io/driver/sqlite.Migrator.ColumnTypes.func1:119] trace {"elapsed": 0, "rows": -1, "sql": "SELECT * FROM `procedures` LIMIT 1"} +[2023-08-17 17:27:45] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_deleted_at\""} +[2023-08-17 17:27:45] [debug] [gorm.io/driver/sqlite.Migrator.HasIndex.func1:313] trace {"elapsed": 0, "rows": -1, "sql": "SELECT count(*) FROM sqlite_master WHERE type = \"index\" AND tbl_name = \"procedures\" AND name = \"idx_procedures_order_id\""} +[2023-08-17 17:27:45] [info] [main.main:33] apsClient start serve... +[2023-08-17 17:27:45] [info] [apsClient/nsq.Consume:17] Consume NewNsqConsumer topic:aps.wangpengfei.scheduleTask +[2023-08-17 17:27:57] [info] [apsClient/pkg/contextx.NewContext.func1:44] 192.168.20.120 | GET /v1/task/get | uid: | <nil> +[2023-08-17 17:28:54] [info] [main.shutdown:48] apsClient exited... diff --git a/model/index.go b/model/index.go index fb11459..21552fb 100644 --- a/model/index.go +++ b/model/index.go @@ -19,6 +19,6 @@ func RegisterTables() error { db := sqlitex.GetDB() - err := db.AutoMigrate(ScheduleTask{}) + err := db.AutoMigrate(Order{}, Procedures{}) return err } diff --git a/model/materials.go b/model/materials.go deleted file mode 100644 index 8fd66e5..0000000 --- a/model/materials.go +++ /dev/null @@ -1,221 +0,0 @@ -package model - -import ( - "apsClient/pkg/sqlitex" - "fmt" - "gorm.io/gorm" -) - -type ( - - //"materialId": "PS", - //"materialName": "涓ョ墝PS", - //"amount": "10", - //"unit": "g/銕�" - - Materials struct { - gorm.Model `json:"-"` - Id int `json:"id"` - MaterialId string `json:"materialId"` - MaterialName string `json:"materialName"` - Amount string `json:"amount"` - Unit string `json:"unit"` - } - - MaterialsSearch struct { - Materials - Order string - PageNum int - PageSize int - Orm *gorm.DB - } -) - -func (slf *Materials) TableName() string { - return "materials" -} - -func NewMaterialsSearch(db *gorm.DB) *MaterialsSearch { - if db == nil { - db = sqlitex.GetDB() - } - return &MaterialsSearch{Orm: db} -} - -func (slf *MaterialsSearch) SetOrm(tx *gorm.DB) *MaterialsSearch { - slf.Orm = tx - return slf -} - -func (slf *MaterialsSearch) SetPage(page, size int) *MaterialsSearch { - slf.PageNum, slf.PageSize = page, size - return slf -} - -func (slf *MaterialsSearch) SetOrder(order string) *MaterialsSearch { - slf.Order = order - return slf -} - -func (slf *MaterialsSearch) build() *gorm.DB { - var db = slf.Orm.Model(&Materials{}) - - if slf.Order != "" { - db = db.Order(slf.Order) - } - - return db -} - -// Create 鍗曟潯鎻掑叆 -func (slf *MaterialsSearch) Create(record *Materials) error { - var db = slf.build() - - if err := db.Create(record).Error; err != nil { - return fmt.Errorf("create err: %v, record: %+v", err, record) - } - - return nil -} - -// CreateBatch 鎵归噺鎻掑叆 -func (slf *MaterialsSearch) CreateBatch(records []*Materials) error { - var db = slf.build() - - if err := db.Create(&records).Error; err != nil { - return fmt.Errorf("create batch err: %v, records: %+v", err, records) - } - - return nil -} - -func (slf *MaterialsSearch) Save(record *Materials) error { - var db = slf.build() - - if err := db.Save(record).Error; err != nil { - return fmt.Errorf("save err: %v, record: %+v", err, record) - } - - return nil -} - -func (slf *MaterialsSearch) UpdateByMap(upMap map[string]interface{}) error { - var ( - db = slf.build() - ) - - if err := db.Updates(upMap).Error; err != nil { - return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap) - } - - return nil -} - -func (slf *MaterialsSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error { - var ( - db = slf.Orm.Table(slf.TableName()).Where(query, args...) - ) - - if err := db.Updates(upMap).Error; err != nil { - return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap) - } - - return nil -} - -func (slf *MaterialsSearch) Delete() error { - var db = slf.build() - - if err := db.Unscoped().Delete(&Materials{}).Error; err != nil { - return err - } - - return nil -} - -func (slf *MaterialsSearch) First() (*Materials, error) { - var ( - record = new(Materials) - db = slf.build() - ) - - if err := db.First(record).Error; err != nil { - return record, err - } - - return record, nil -} - -func (slf *MaterialsSearch) Find() ([]*Materials, int64, error) { - var ( - records = make([]*Materials, 0) - total int64 - db = slf.build() - ) - - if err := db.Count(&total).Error; err != nil { - return records, total, fmt.Errorf("find count err: %v", err) - } - if slf.PageNum*slf.PageSize > 0 { - db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) - } - if err := db.Find(&records).Error; err != nil { - return records, total, fmt.Errorf("find records err: %v", err) - } - - return records, total, nil -} - -func (slf *MaterialsSearch) FindNotTotal() ([]*Materials, error) { - var ( - records = make([]*Materials, 0) - db = slf.build() - ) - - if slf.PageNum*slf.PageSize > 0 { - db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) - } - if err := db.Find(&records).Error; err != nil { - return records, fmt.Errorf("find records err: %v", err) - } - - return records, nil -} - -// FindByQuery 鎸囧畾鏉′欢鏌ヨ. -func (slf *MaterialsSearch) FindByQuery(query string, args []interface{}) ([]*Materials, int64, error) { - var ( - records = make([]*Materials, 0) - total int64 - db = slf.Orm.Table(slf.TableName()).Where(query, args...) - ) - - if err := db.Count(&total).Error; err != nil { - return records, total, fmt.Errorf("find by query count err: %v", err) - } - if slf.PageNum*slf.PageSize > 0 { - db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) - } - if err := db.Find(&records).Error; err != nil { - return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) - } - - return records, total, nil -} - -// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�. -func (slf *MaterialsSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*Materials, error) { - var ( - records = make([]*Materials, 0) - db = slf.Orm.Table(slf.TableName()).Where(query, args...) - ) - - if slf.PageNum*slf.PageSize > 0 { - db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) - } - if err := db.Find(&records).Error; err != nil { - return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) - } - - return records, nil -} diff --git a/model/order.go b/model/order.go new file mode 100644 index 0000000..87e67c9 --- /dev/null +++ b/model/order.go @@ -0,0 +1,268 @@ +package model + +import ( + "apsClient/pkg/sqlitex" + "fmt" + "github.com/shopspring/decimal" + "gorm.io/gorm" +) + +type ( + Order struct { + gorm.Model `json:"-"` + OrderID string `gorm:"index;type:varchar(191);not null;comment:璁㈠崟ID" json:"orderId"` + ProductID string `gorm:"type:varchar(191);comment:浜у搧ID" json:"productId"` + ProductName string `gorm:"type:varchar(191);comment:浜у搧鍚嶇О" json:"productName"` + Parameter string `gorm:"type:varchar(1024);comment:鍙傛暟闇�姹�" json:"parameter"` + Customer string `gorm:"type:varchar(191);comment:瀹㈡埛缂栫爜" json:"customer"` + DeliverDate string `gorm:"type:varchar(100);comment:浜よ揣鏃ユ湡" json:"deliverDate"` + OrderAttr string `json:"orderAttr"` // 璁㈠崟灞炴�ф嫾鎺ョ殑瀛楃涓诧紝鍗宠揣鐗╂弿杩� + Amount decimal.Decimal `gorm:"type:decimal(35,18);comment:鏁伴噺" json:"amount"` + Unit string `gorm:"type:varchar(100);comment:鍗曚綅" json:"unit"` + StartTime int64 `gorm:"comment:璁″垝寮�濮嬫椂闂�" json:"startTime"` + EndTime int64 `gorm:"comment:璁″垝缁撴潫鏃堕棿" json:"endTime"` + Status OrderStatus `json:"-"` + } + + OrderSearch struct { + Order + OrderBy string + PageNum int + PageSize int + Orm *gorm.DB + Preload bool + StartTimeMin int64 + } +) + +type OrderStatus int + +const ( + OrderStatusUnFinished OrderStatus = 1 + OrderStatusFinished OrderStatus = 2 +) + +func (slf *Order) TableName() string { + return "Order" +} + +func NewOrderSearch(db *gorm.DB) *OrderSearch { + if db == nil { + db = sqlitex.GetDB() + } + return &OrderSearch{Orm: db} +} + +func (slf *OrderSearch) SetOrm(tx *gorm.DB) *OrderSearch { + slf.Orm = tx + return slf +} + +func (slf *OrderSearch) SetPage(page, size int) *OrderSearch { + slf.PageNum, slf.PageSize = page, size + return slf +} + +func (slf *OrderSearch) SetOrder(order string) *OrderSearch { + slf.OrderBy = order + return slf +} + +func (slf *OrderSearch) SetStartTimeMin(ts int64) *OrderSearch { + slf.StartTimeMin = ts + return slf +} + +func (slf *OrderSearch) SetStatus(status OrderStatus) *OrderSearch { + slf.Status = status + return slf +} + +func (slf *OrderSearch) SetPreload(preload bool) *OrderSearch { + slf.Preload = preload + return slf +} + +func (slf *OrderSearch) SetOrderId(orderId string) *OrderSearch { + slf.OrderID = orderId + return slf +} + +func (slf *OrderSearch) build() *gorm.DB { + var db = slf.Orm.Model(&Order{}) + + if slf.OrderBy != "" { + db = db.Order(slf.OrderBy) + } + + if slf.OrderID != "" { + db = db.Where("order_id = ?", slf.OrderID) + } + + if slf.Status != 0 { + db = db.Where("status = ?", slf.Status) + } + + if slf.StartTimeMin != 0 { + db = db.Where("start_time >= ?", slf.StartTimeMin) + } + + if slf.Preload { + db = db.Preload("InputMaterials").Preload("OutputMaterials") + } + + return db +} + +// Create 鍗曟潯鎻掑叆 +func (slf *OrderSearch) Create(record *Order) error { + var db = slf.build() + + if err := db.Create(record).Error; err != nil { + return fmt.Errorf("create err: %v, record: %+v", err, record) + } + + return nil +} + +// CreateBatch 鎵归噺鎻掑叆 +func (slf *OrderSearch) CreateBatch(records []*Order) error { + var db = slf.build() + + if err := db.Create(&records).Error; err != nil { + return fmt.Errorf("create batch err: %v, records: %+v", err, records) + } + + return nil +} + +func (slf *OrderSearch) Save(record *Order) error { + var db = slf.build() + + if err := db.Save(record).Error; err != nil { + return fmt.Errorf("save err: %v, record: %+v", err, record) + } + + return nil +} + +func (slf *OrderSearch) UpdateByMap(upMap map[string]interface{}) error { + var ( + db = slf.build() + ) + + if err := db.Updates(upMap).Error; err != nil { + return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap) + } + + return nil +} + +func (slf *OrderSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error { + var ( + db = slf.Orm.Table(slf.TableName()).Where(query, args...) + ) + + if err := db.Updates(upMap).Error; err != nil { + return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap) + } + + return nil +} + +func (slf *OrderSearch) Delete() error { + var db = slf.build() + + if err := db.Unscoped().Delete(&Order{}).Error; err != nil { + return err + } + + return nil +} + +func (slf *OrderSearch) First() (*Order, error) { + var ( + record = new(Order) + db = slf.build() + ) + + if err := db.First(record).Error; err != nil { + return record, err + } + + return record, nil +} + +func (slf *OrderSearch) Find() ([]*Order, int64, error) { + var ( + records = make([]*Order, 0) + total int64 + db = slf.build() + ) + + if err := db.Count(&total).Error; err != nil { + return records, total, fmt.Errorf("find count err: %v", err) + } + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, total, fmt.Errorf("find records err: %v", err) + } + + return records, total, nil +} + +func (slf *OrderSearch) FindNotTotal() ([]*Order, error) { + var ( + records = make([]*Order, 0) + db = slf.build() + ) + + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, fmt.Errorf("find records err: %v", err) + } + + return records, nil +} + +// FindByQuery 鎸囧畾鏉′欢鏌ヨ. +func (slf *OrderSearch) FindByQuery(query string, args []interface{}) ([]*Order, int64, error) { + var ( + records = make([]*Order, 0) + total int64 + db = slf.Orm.Table(slf.TableName()).Where(query, args...) + ) + + if err := db.Count(&total).Error; err != nil { + return records, total, fmt.Errorf("find by query count err: %v", err) + } + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) + } + + return records, total, nil +} + +// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�. +func (slf *OrderSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*Order, error) { + var ( + records = make([]*Order, 0) + db = slf.Orm.Table(slf.TableName()).Where(query, args...) + ) + + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) + } + + return records, nil +} diff --git a/model/procedures.go b/model/procedures.go index 1dfc611..245f2e4 100644 --- a/model/procedures.go +++ b/model/procedures.go @@ -1,39 +1,53 @@ package model import ( + "apsClient/model/request" + "apsClient/pkg/logx" "apsClient/pkg/sqlitex" + "encoding/json" "fmt" "gorm.io/gorm" ) type ( Procedures struct { - gorm.Model `json:"-"` - Id int `json:"id"` - ProcedureId string `json:"orderId"` - ProcedureName string `json:"product"` - DeviceId string `json:"deviceId"` - StartTime string `json:"startTime"` - EndTime string `json:"endTime"` - WorkHours string `json:"workHours"` - InputMaterialsId int `json:"-"` - InputMaterials *Materials `json:"inputMaterials" gorm:"foreignKey:InputMaterialsId"` - OutputMaterialsId int `json:"-"` - OutputMaterials *Materials `json:"outputMaterials" gorm:"foreignKey:InputMaterialsId"` + gorm.Model `json:"-"` + ID int `gorm:"primarykey"` + OrderID string `gorm:"index;type:varchar(191);not null;comment:璁㈠崟ID" json:"-"` + Status ProcedureStatus `json:"-"` + ProcedureData string `json:"-"` //request.ProductProcedure json涓� + ProceduresInfo request.ProductProcedure `json:"procedure" gorm:"-"` //request.ProductProcedure 瀵硅薄 } ProceduresSearch struct { Procedures - Order string - PageNum int - PageSize int - Orm *gorm.DB - Preload bool + Order string + PageNum int + PageSize int + Orm *gorm.DB + Preload bool + StartTimeMin int64 } +) + +type ProcedureStatus int + +const ( + ProcedureStatusUnFinished ProcedureStatus = 1 + ProcedureStatusFinished ProcedureStatus = 2 ) func (slf *Procedures) TableName() string { return "procedures" +} +func (slf *Procedures) AfterFind() { + var proceduresInfo request.ProductProcedure + err := json.Unmarshal([]byte(slf.ProcedureData), &proceduresInfo) + if err != nil { + logx.Errorf("AfterFind Unmarshal err: %v", err.Error()) + return + } + slf.ProceduresInfo = proceduresInfo } func NewProceduresSearch(db *gorm.DB) *ProceduresSearch { @@ -58,6 +72,25 @@ return slf } +func (slf *ProceduresSearch) SetOrderId(orderId string) *ProceduresSearch { + slf.OrderID = orderId + return slf +} +func (slf *ProceduresSearch) SetStartTimeMin(ts int64) *ProceduresSearch { + slf.StartTimeMin = ts + return slf +} + +func (slf *ProceduresSearch) SetId(id int) *ProceduresSearch { + slf.ID = id + return slf +} + +func (slf *ProceduresSearch) SetStatus(status ProcedureStatus) *ProceduresSearch { + slf.Status = status + return slf +} + func (slf *ProceduresSearch) SetPreload(preload bool) *ProceduresSearch { slf.Preload = preload return slf @@ -69,10 +102,23 @@ if slf.Order != "" { db = db.Order(slf.Order) } + + if slf.OrderID != "" { + db = db.Where("order_id = ?", slf.OrderID) + } + if slf.Preload { db = db.Preload("InputMaterials").Preload("OutputMaterials") } + if slf.StartTimeMin != 0 { + db = db.Where("start_time >= ?", slf.StartTimeMin) + } + + if slf.Status != 0 { + db = db.Where("status = ?", slf.Status) + } + return db } diff --git a/model/response/common.go b/model/response/common.go index 7461096..05246bb 100644 --- a/model/response/common.go +++ b/model/response/common.go @@ -1,8 +1,17 @@ package response +import ( + "apsClient/model" +) + type PageResult struct { List interface{} `json:"list"` Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"pageSize"` } + +type TaskData struct { + Order *model.Order + Procedure *model.Procedures +} diff --git a/model/schedule_task.go b/model/schedule_task.go deleted file mode 100644 index b8ab664..0000000 --- a/model/schedule_task.go +++ /dev/null @@ -1,260 +0,0 @@ -package model - -import ( - "apsClient/model/request" - "apsClient/pkg/sqlitex" - "fmt" - "github.com/shopspring/decimal" - "gorm.io/gorm" -) - -//{ -//"orderId": "0100000", -//"productId": "PE500A01D/F", -//"productName": "鍓嶇汉姣涘竷", -//"parameter": "", -//"customer": "1200", -//"deliverDate": "2023-08-16", -//"orderAttr": "浜у搧绫诲埆:娑ょ憾", -//"amount": "1200", -//"unit": "", -//"startTime": 1692328320, -//"endTime": 1692946800 -//}, - -type ( - ScheduleTask struct { - gorm.Model `json:"-"` - Id int `json:"id"` - OrderId string `json:"orderId"` //璁㈠崟id - ProductId string `json:"productId"` //璁㈠崟id - ProductName string `json:"productName"` //浜у搧鍚嶇О - //Parameter string `json:"parameter"` //浜у搧鍚嶇О - //Customer string `json:"customer"` - //DeliverDate string `json:"deliverDate"` - //OrderAttr string `json:"orderAttr"` - Amount decimal.Decimal `json:"amount"` - Unit string `json:"unit"` - StartTime int64 `json:"startTime"` - EndTime int64 `json:"endTime"` - Data string `json:"data"` //鎺掔▼浠诲姟json涓� - TaskInfo request.DeliverScheduleTask `json:"taskInfo" gorm:"-"` //鎺掔▼浠诲姟json涓� - //Procedures []*Procedures `json:"Procedures" gorm:"many2many:ScheduleTask_Procedures;"` - } - - ScheduleTaskSearch struct { - ScheduleTask - Order string - PageNum int - PageSize int - Orm *gorm.DB - Preload bool - } -) - -func (slf *ScheduleTask) TableName() string { - return "schedule_task" -} - -func NewScheduleTaskSearch(db *gorm.DB) *ScheduleTaskSearch { - if db == nil { - db = sqlitex.GetDB() - } - return &ScheduleTaskSearch{Orm: db} -} - -func (slf *ScheduleTaskSearch) SetOrm(tx *gorm.DB) *ScheduleTaskSearch { - slf.Orm = tx - return slf -} - -func (slf *ScheduleTaskSearch) SetPage(page, size int) *ScheduleTaskSearch { - slf.PageNum, slf.PageSize = page, size - return slf -} - -func (slf *ScheduleTaskSearch) SetOrder(order string) *ScheduleTaskSearch { - slf.Order = order - return slf -} - -func (slf *ScheduleTaskSearch) SetPreload(preload bool) *ScheduleTaskSearch { - slf.Preload = preload - return slf -} - -func (slf *ScheduleTaskSearch) SetEndTime(endTime int64) *ScheduleTaskSearch { - slf.EndTime = endTime - return slf -} - -func (slf *ScheduleTaskSearch) build() *gorm.DB { - var db = slf.Orm.Model(&ScheduleTask{}) - - if slf.Order != "" { - db = db.Order(slf.Order) - } - - if slf.EndTime > 0 { - db = db.Where("end_time < ?", slf.EndTime) - } - - //if slf.Preload { - // db = db.Preload("Procedures") - //} - - return db -} - -// Create 鍗曟潯鎻掑叆 -func (slf *ScheduleTaskSearch) Create(record *ScheduleTask) error { - var db = slf.build() - - if err := db.Create(record).Error; err != nil { - return fmt.Errorf("create err: %v, record: %+v", err, record) - } - - return nil -} - -// CreateBatch 鎵归噺鎻掑叆 -func (slf *ScheduleTaskSearch) CreateBatch(records []*ScheduleTask) error { - var db = slf.build() - - if err := db.Create(&records).Error; err != nil { - return fmt.Errorf("create batch err: %v, records: %+v", err, records) - } - - return nil -} - -func (slf *ScheduleTaskSearch) Save(record *ScheduleTask) error { - var db = slf.build() - - if err := db.Save(record).Error; err != nil { - return fmt.Errorf("save err: %v, record: %+v", err, record) - } - - return nil -} - -func (slf *ScheduleTaskSearch) UpdateByMap(upMap map[string]interface{}) error { - var ( - db = slf.build() - ) - - if err := db.Updates(upMap).Error; err != nil { - return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap) - } - - return nil -} - -func (slf *ScheduleTaskSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error { - var ( - db = slf.Orm.Table(slf.TableName()).Where(query, args...) - ) - - if err := db.Updates(upMap).Error; err != nil { - return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap) - } - - return nil -} - -func (slf *ScheduleTaskSearch) Delete() error { - var db = slf.build() - - if err := db.Unscoped().Delete(&ScheduleTask{}).Error; err != nil { - return err - } - - return nil -} - -func (slf *ScheduleTaskSearch) First() (*ScheduleTask, error) { - var ( - record = new(ScheduleTask) - db = slf.build() - ) - - if err := db.First(record).Error; err != nil { - return record, err - } - - return record, nil -} - -func (slf *ScheduleTaskSearch) Find() ([]*ScheduleTask, int64, error) { - var ( - records = make([]*ScheduleTask, 0) - total int64 - db = slf.build() - ) - - if err := db.Count(&total).Error; err != nil { - return records, total, fmt.Errorf("find count err: %v", err) - } - if slf.PageNum*slf.PageSize > 0 { - db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) - } - if err := db.Find(&records).Error; err != nil { - return records, total, fmt.Errorf("find records err: %v", err) - } - - return records, total, nil -} - -func (slf *ScheduleTaskSearch) FindNotTotal() ([]*ScheduleTask, error) { - var ( - records = make([]*ScheduleTask, 0) - db = slf.build() - ) - - if slf.PageNum*slf.PageSize > 0 { - db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) - } - if err := db.Find(&records).Error; err != nil { - return records, fmt.Errorf("find records err: %v", err) - } - - return records, nil -} - -// FindByQuery 鎸囧畾鏉′欢鏌ヨ. -func (slf *ScheduleTaskSearch) FindByQuery(query string, args []interface{}) ([]*ScheduleTask, int64, error) { - var ( - records = make([]*ScheduleTask, 0) - total int64 - db = slf.Orm.Table(slf.TableName()).Where(query, args...) - ) - - if err := db.Count(&total).Error; err != nil { - return records, total, fmt.Errorf("find by query count err: %v", err) - } - if slf.PageNum*slf.PageSize > 0 { - db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) - } - if err := db.Find(&records).Error; err != nil { - return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) - } - - return records, total, nil -} - -// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�. -func (slf *ScheduleTaskSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*ScheduleTask, error) { - var ( - records = make([]*ScheduleTask, 0) - db = slf.Orm.Table(slf.TableName()).Where(query, args...) - ) - - if slf.PageNum*slf.PageSize > 0 { - db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) - } - if err := db.Find(&records).Error; err != nil { - return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) - } - - return records, nil -} diff --git a/nsq/msg_handler.go b/nsq/msg_handler.go index 495b6ef..fef9a83 100644 --- a/nsq/msg_handler.go +++ b/nsq/msg_handler.go @@ -1,10 +1,13 @@ package nsq import ( + "apsClient/conf" "apsClient/model" "apsClient/pkg/logx" + "apsClient/pkg/structx" "encoding/json" "fmt" + "gorm.io/gorm" ) type MsgHandler interface { @@ -25,26 +28,38 @@ return err } for _, task := range tasks { - taskRecord := model.ScheduleTask{ - Id: 0, - OrderId: task.Order.OrderID, - ProductId: task.Order.ProductID, - ProductName: task.Order.ProductName, - Amount: task.Order.Amount, - Unit: task.Order.Unit, - StartTime: task.Order.StartTime, - EndTime: task.Order.EndTime, - } - jsonStr, err := json.Marshal(task) - if err != nil { - logx.Errorf("ScheduleTask HandleMessage Marshal err: %v, old: %#v", err.Error(), task) - return err - } - taskRecord.Data = string(jsonStr) - err = model.NewScheduleTaskSearch(nil).Create(&taskRecord) - if err != nil { - logx.Errorf("ScheduleTask HandleMessage Create taskRecord err: %v, record: %#v", err.Error(), taskRecord) - return err + for _, procedure := range task.Procedures { + if procedure.DeviceID == conf.Conf.System.DeviceId { //鍙瓨鍌ㄦ湰璁惧鐨勫伐搴� + err = model.WithTransaction(func(db *gorm.DB) error { + _, err := model.NewOrderSearch(db).SetOrderId(task.Order.OrderID).First() + if err == gorm.ErrRecordNotFound { + var orderRecord model.Order + err = structx.AssignTo(task.Order, &orderRecord) + orderRecord.Status = model.OrderStatusUnFinished + if err != nil { + logx.Errorf(" structx.Assign task.Order to orderRecord err: %v", err.Error()) + return err + } + if err = model.NewOrderSearch(db).Create(&orderRecord); err != nil { + return err + } + } + procedureRecord := model.Procedures{ + OrderID: task.Order.OrderID, + Status: model.ProcedureStatusUnFinished, + } + procedureData, err := json.Marshal(procedure) + procedureRecord.ProcedureData = string(procedureData) + if err != nil { + logx.Errorf(" json.Marshal(procedure) err: %v", err.Error()) + return err + } + return model.NewProceduresSearch(db).Create(&procedureRecord) + }) + if err != nil { + logx.Errorf(" save procedure err: %v", err.Error()) + } + } } } return nil diff --git a/pkg/plc/plc4x.go b/pkg/plc/plc4x.go new file mode 100644 index 0000000..8afb487 --- /dev/null +++ b/pkg/plc/plc4x.go @@ -0,0 +1,127 @@ +package plc + +import ( + "errors" + "fmt" + apiModel "github.com/apache/plc4x/plc4go/pkg/api/model" + + plc4go "github.com/apache/plc4x/plc4go/pkg/api" + "github.com/apache/plc4x/plc4go/pkg/api/drivers" + "github.com/apache/plc4x/plc4go/pkg/api/transports" +) + +func NewModbusConnection(ipAddr string) (plc4go.PlcConnection, error) { + // 鍒涘缓椹卞姩绠$悊鍣� + driverManager := plc4go.NewPlcDriverManager() + + // 娉ㄥ唽TCP浼犺緭 + transports.RegisterTcpTransport(driverManager) + + // 娉ㄥ唽椹卞姩 + //drivers.RegisterKnxDriver(driverManager) + drivers.RegisterModbusTcpDriver(driverManager) + + // 閫氳繃TCP杩炴帴PLC璁惧 + connectionString := fmt.Sprintf("modbus-tcp://%s", ipAddr) + connectionRequestChanel := driverManager.GetConnection(connectionString) + + // 绛夊緟杩炴帴鍝嶅簲 + connectionResult := <-connectionRequestChanel + + // 鍒ゆ柇鏄惁杩炴帴鎴愬姛 + if err := connectionResult.GetErr(); err != nil { + return nil, err + } + + return connectionResult.GetConnection(), nil +} +func ReadHoldingRegisterSingle(connection plc4go.PlcConnection, address int) ([]byte, error) { + tagAddress := fmt.Sprintf("holding-register:%d:UINT", address) + + // 璇绘ā寮� + readRequest, err := connection.ReadRequestBuilder().AddTagAddress("tag", tagAddress).Build() + if err != nil { + fmt.Printf("preparing read-request:%s\n", err.Error()) + return nil, err + } + + // 鎵ц + readResult := <-readRequest.Execute() + if err := readResult.GetErr(); err != nil { + fmt.Printf("execting read-request:%s\n", err.Error()) + return nil, err + } + + // 鍒ゆ柇鍝嶅簲鐮佹槸鍚︽纭� + if readResult.GetResponse().GetResponseCode("tag") != apiModel.PlcResponseCode_OK { + fmt.Printf("error an non-ok return code: %s", readResult.GetResponse().GetResponseCode("tag").GetName()) + return nil, nil + } + + value := readResult.GetResponse().GetValue("tag") + + return value.GetRaw(), err + +} + +func ReadHoldingRegisterList(connection plc4go.PlcConnection, address, length int) ([]byte, error) { + tagAddress := fmt.Sprintf("holding-register:%d:UINT[%d]", address, length) + + // 璇绘ā寮� + readRequest, err := connection.ReadRequestBuilder().AddTagAddress("tag", tagAddress).Build() + if err != nil { + fmt.Printf("preparing read-request:%s\n", err.Error()) + return nil, err + } + + // 鎵ц + readResult := <-readRequest.Execute() + if err := readResult.GetErr(); err != nil { + fmt.Printf("execting read-request:%s\n", err.Error()) + return nil, err + } + + // 鍒ゆ柇鍝嶅簲鐮佹槸鍚︽纭� + if readResult.GetResponse().GetResponseCode("tag") != apiModel.PlcResponseCode_OK { + fmt.Printf("error an non-ok return code: %s", readResult.GetResponse().GetResponseCode("tag").GetName()) + return nil, errors.New("error code: " + readResult.GetResponse().GetResponseCode("tag").GetName()) + } + + value := readResult.GetResponse().GetValue("tag") + + var result []byte + + for _, val := range value.GetList() { + result = append(result, val.GetRaw()...) + } + + return result, nil +} + +func WriteHoldingRegister(connection plc4go.PlcConnection, address int, value any) (string, error) { + tagAddress := fmt.Sprintf("holding-register:%d:UINT", address) + + // 鍐欐ā寮� + writeRequest, err := connection.WriteRequestBuilder().AddTagAddress("tag", tagAddress, value).Build() + if err != nil { + fmt.Printf("preparing read-request:%s\n", err.Error()) + return "", err + } + + // 鎵ц + writeResult := <-writeRequest.Execute() + if err := writeResult.GetErr(); err != nil { + fmt.Printf("execting read-request:%s\n", err.Error()) + return "", err + } + + // 鍒ゆ柇鍝嶅簲鐮佹槸鍚︽纭� + if writeResult.GetResponse().GetResponseCode("tag") != apiModel.PlcResponseCode_OK { + fmt.Printf("error an non-ok return code: %s", writeResult.GetResponse().GetResponseCode("tag").GetName()) + return "", errors.New("error code: " + writeResult.GetResponse().GetResponseCode("tag").GetName()) + } + + result := writeResult.GetResponse().String() + + return result, nil +} diff --git a/router/index.go b/router/index.go index 3e5f9c7..462624d 100644 --- a/router/index.go +++ b/router/index.go @@ -32,17 +32,12 @@ v1Group := Router.Group("v1") - // 鎺ユ敹閫氱煡 - noticeApi := new(v1.NoticeApi) - noticeGroup := v1Group.Group("notice") - { - noticeGroup.POST("task/start", noticeApi.TaskStart) // 浠诲姟寮�鍚�氱煡 - } - taskApi := new(v1.TaskApi) taskGroup := v1Group.Group("task") { - taskGroup.GET("list", taskApi.TaskList) // 浠诲姟寮�鍚�氱煡 + taskGroup.GET("get", taskApi.TaskGet) // 鑾峰彇宸ュ簭 + taskGroup.GET("start/:id", taskApi.TaskStart) // 寮�鍚伐搴忓苟鑾峰彇鍙傛暟 + taskGroup.PUT("finish/:id", taskApi.TaskFinish) // 瀹屾垚宸ュ簭 } return Router diff --git a/service/task.go b/service/task.go index bf65ebf..11b543b 100644 --- a/service/task.go +++ b/service/task.go @@ -2,7 +2,10 @@ import ( "apsClient/model" + "apsClient/model/response" "apsClient/pkg/ecode" + "gorm.io/gorm" + "time" ) type TaskService struct { @@ -12,16 +15,62 @@ return &TaskService{} } -func (slf TaskService) GetTaskList(page, pageSize int) (taskList []*model.ScheduleTask, total int64, code int) { - search := model.NewScheduleTaskSearch(nil) - search.SetPage(page, pageSize). - SetPreload(true) - //SetEndTime(time.Now().Unix()) - var err error - taskList, total, err = search.Find() - if err != nil { - return +// GetTask 鑾峰彇浠诲姟锛屾湭瀹屾垚鐨勫紑濮嬫椂闂存渶鏃╃殑浠诲姟 +func (slf TaskService) GetTask() (taskData *response.TaskData, code int) { + nowTs := time.Now().Unix() + orderSearch := model.NewOrderSearch(nil) + orderSearch.SetOrder("created_at asc"). + SetStartTimeMin(nowTs). + SetStatus(model.OrderStatusUnFinished) + var ( + err error + order *model.Order + ) + order, err = orderSearch.First() //鍏堝彇杩涜涓殑浠诲姟 + if err == gorm.ErrRecordNotFound { + err = nil + return nil, ecode.OK } - return taskList, total, ecode.OK + if err != nil { + return nil, ecode.DBErr + } + procedure, err := model.NewProceduresSearch(nil). + SetOrderId(order.OrderID). + SetStartTimeMin(nowTs). + SetStatus(model.ProcedureStatusUnFinished). + First() + if err == gorm.ErrRecordNotFound { //璇ヨ鍗曟湰璁惧鍏ㄩ儴宸ュ簭瀹屾垚锛屾妸璁㈠崟缃负瀹屾垚鐘舵�侊紙鍙槸瀵规湰璁惧瀹屾垚锛� + err = nil + err = model.NewOrderSearch(nil).SetOrderId(order.OrderID).UpdateByMap(map[string]interface{}{ + "status": model.OrderStatusFinished, + }) + if err != nil { + return nil, ecode.DBErr + } + return slf.GetTask() //褰撳墠璁㈠崟宸插畬鍏紝缁х画鏌ヨ鏈畬鎴愯鍗� + } + if err != nil { + return nil, ecode.DBErr + } + taskData.Order = order + taskData.Procedure = procedure + return taskData, ecode.OK +} +func (slf TaskService) GetProcedureById(id int) (*model.Procedures, int) { + procedure, err := model.NewProceduresSearch(nil).SetId(id).First() + if err != nil { + return nil, ecode.DBErr + } + return procedure, ecode.OK +} + +func (slf TaskService) UpdateProcedureStatus(id int, status model.ProcedureStatus) error { + return model.NewProceduresSearch(nil).SetId(id).UpdateByMap(map[string]interface{}{ + "status": status, + }) +} + +func (slf TaskService) GetOrderByOrderId(orderId string) (order *model.Order, err error) { + return model.NewOrderSearch(nil).SetOrderId(orderId).First() } -- Gitblit v1.8.0