From 468ceb8a9bfe9e15e3be470b23809dde83a11f0d Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期一, 09 十月 2023 19:14:53 +0800
Subject: [PATCH] merge master
---
test/test.go | 2
service/task.go | 27 +-
model/procedures.go | 24 +-
docs/swagger.yaml | 62 +++++-
api/v1/process_model.go | 21 -
docs/docs.go | 90 ++++++++-
model/request/task.go | 3
pkg/contextx/contextx.go | 1
api/v1/task.go | 104 +++++++++--
docs/swagger.json | 90 ++++++++-
test/task_test.go | 31 +++
service/cache_store.go | 17 +
service/process_model.go | 4
router/index.go | 19 +-
model/process_model.go | 20 +-
15 files changed, 394 insertions(+), 121 deletions(-)
diff --git a/api/v1/process_model.go b/api/v1/process_model.go
index 06c1711..64becd0 100644
--- a/api/v1/process_model.go
+++ b/api/v1/process_model.go
@@ -15,23 +15,12 @@
// @Summary 鑾峰彇宸ヨ壓妯″瀷鍒楄〃
// @Produce application/json
// @Param object query request.ProcessModelList true "鏌ヨ鍙傛暟"
-// @Success 200 {object} contextx.Response{data=response.TaskCountdown} "鎴愬姛"
+// @Success 200 {object} contextx.Response{data=[]model.ProcessModel} "鎴愬姛"
// @Router /v1/processModel/list [get]
func (slf *ProcessModelApi) List(c *gin.Context) {
var params request.ProcessModelList
ctx, ok := contextx.NewContext(c, ¶ms)
if !ok {
- return
- }
- procedure, code := service.NewTaskService().GetProcedureById(params.ProcedureId)
- if code != ecode.OK {
- ctx.Fail(code)
- return
- }
-
- order, err := service.NewTaskService().GetOrderByWorkOrderId(procedure.WorkOrderID)
- if err != nil {
- ctx.Fail(ecode.DBErr)
return
}
@@ -40,10 +29,16 @@
ctx.Fail(ecode.DBErr)
return
}
+ oldProcessModel, _ := service.GetProcessModelByNumber(params.Number)
for _, processModel := range list {
- if processModel.Procedure == procedure.ProceduresInfo.ProcedureName && processModel.Product == order.ProductName {
+ if processModel.Procedure == oldProcessModel.Procedure && processModel.Product == oldProcessModel.Product {
processModel.IsUpdate = processModel.Number != params.Number
}
+ if processModel.IsUpdate {
+
+ processModel.NewNumber, processModel.NewParamsMap = processModel.Number, processModel.ParamsMap
+ processModel.Number, processModel.ParamsMap = oldProcessModel.Number, oldProcessModel.ParamsMap
+ }
}
ctx.ResultList(list, total)
diff --git a/api/v1/task.go b/api/v1/task.go
index f0631d5..2d66ffe 100644
--- a/api/v1/task.go
+++ b/api/v1/task.go
@@ -68,10 +68,14 @@
return
}
+ taskCount := service.NewTaskService().NewTaskCount()
params.Page = 1
-
if params.PageSize <= 0 {
- params.PageSize = channelAmount
+ if params.TaskMode == constvar.TaskModeUnStarted {
+ params.PageSize = int(taskCount)
+ } else {
+ params.PageSize = channelAmount
+ }
}
taskMode := constvar.TaskModeCurrent
@@ -107,15 +111,18 @@
return taskResponse.Tasks[i].Channel < taskResponse.Tasks[i].Channel
})
+ nowTs := time.Now().Unix()
+ flagMap := make(map[int32]struct{}, 0)
for _, task := range taskResponse.Tasks {
- if !service.TaskFlagGet(task.Channel) {
+ if _, ok := flagMap[task.Channel]; !ok && !service.TaskFlagGet(task.Channel) && task.Procedure.StartTime <= nowTs {
task.CanStarted = true
+ flagMap[task.Channel] = struct{}{}
}
}
taskResponse.Prompt = conf.Conf.Prompt
taskResponse.ChannelAmount = channelAmount
- taskResponse.TaskCount = service.NewTaskService().NewTaskCount()
+ taskResponse.TaskCount = taskCount
ctx.OkWithDetailed(taskResponse)
}
@@ -149,11 +156,19 @@
ctx.Fail(ecode.DBErr)
return
}
-
- processModel, err := service.NewTaskService().GetProcessParams(procedure, order)
- if err != nil || processModel == nil || processModel.ParamsMap == nil {
- ctx.FailWithMsg(ecode.ParamsErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟锛岃鍦ㄥ伐鑹烘ā鍨嬪簱涓笂浼狅紒")
- return
+ var processModel *model.ProcessModel
+ if procedure.ProcessModelNumber != "" {
+ processModel, err = service.GetProcessModelByNumber(procedure.ProcessModelNumber)
+ if err != nil || processModel == nil || processModel.ParamsMap == nil {
+ ctx.FailWithMsg(ecode.ParamsErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟锛岃鍦ㄥ伐鑹烘ā鍨嬪簱涓笂浼狅紒")
+ return
+ }
+ } else {
+ processModel, err = service.NewTaskService().GetProcessParams(procedure, order)
+ if err != nil || processModel == nil || processModel.ParamsMap == nil {
+ ctx.FailWithMsg(ecode.ParamsErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟锛岃鍦ㄥ伐鑹烘ā鍨嬪簱涓笂浼狅紒")
+ return
+ }
}
processParamsArr := make([]response.ProcessParams, 0, len(processModel.ParamsMap))
@@ -272,16 +287,15 @@
}
processModel, err := taskService.GetProcessParams(procedure, order)
if err != nil || processModel == nil || processModel.ParamsMap == nil {
- ctx.Fail(ecode.UnknownErr)
+ ctx.FailWithMsg(ecode.ParamsErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟锛岃鍦ㄥ伐鑹烘ā鍨嬪簱涓笂浼狅紒")
return
}
err = model.WithTransaction(func(db *gorm.DB) error {
- err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusProcessing, params.Channel)
+ err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusProcessing, procedure.Channel, processModel.Number)
if err != nil {
return err
}
- procedure.Channel = params.Channel
err = taskService.UpdateOrderStatus(db, order.ID, model.OrderStatusProcessing)
if err != nil {
return err
@@ -303,12 +317,7 @@
if err != nil {
logx.Errorf("SendProcessParams: %v", err.Error())
err = model.WithTransaction(func(db *gorm.DB) error {
- err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusWaitProcess, params.Channel)
- if err != nil {
- return err
- }
- procedure.Channel = params.Channel
- err = taskService.UpdateOrderStatus(db, order.ID, model.OrderStatusWaitProcess)
+ err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusWaitProcess, procedure.Channel, "")
if err != nil {
return err
}
@@ -317,12 +326,8 @@
ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC璇锋眰澶辫触锛岃妫�鏌LC閰嶇疆锛�")
return
}
- if code != ecode.OK {
- logx.Errorf("get plcConfig err: %v", err.Error())
- return
- }
plcConfig.CurrentTryTimes = 0
- err = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, params.Channel, order.Amount.IntPart())
+ err = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, procedure.Channel, order.Amount.IntPart())
if err != nil {
ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC璇锋眰澶辫触锛岃妫�鏌LC閰嶇疆")
return
@@ -345,6 +350,59 @@
ctx.Ok()
}
+// UpdateProcessParams
+// @Tags Task
+// @Summary 鏇存柊宸ヨ壓鍙傛暟锛堣繘琛屼腑鐨勪换鍔★級
+// @Produce application/json
+// @Param object body request.SendProcessParams true "鏌ヨ鍙傛暟"
+// @Success 200 {object} contextx.Response{} "鎴愬姛"
+// @Router /v1/task/updateProcessParams [post]
+func (slf *TaskApi) UpdateProcessParams(c *gin.Context) {
+ mutex.Lock()
+ defer mutex.Unlock()
+ var params request.SendProcessParams
+ ctx, ok := contextx.NewContext(c, ¶ms)
+ if !ok {
+ return
+ }
+ taskService := service.NewTaskService()
+ procedure, code := taskService.GetProcedureById(params.ProcedureId)
+ if code != ecode.OK {
+ ctx.Fail(code)
+ return
+ }
+ order, err := taskService.GetOrderByWorkOrderId(procedure.WorkOrderID)
+ if err != nil {
+ ctx.Fail(ecode.UnknownErr)
+ return
+ }
+
+ if procedure.Status != model.ProcedureStatusProcessing { //鍙兘杩涜涓殑鍙互鏇存柊
+ ctx.FailWithMsg(ecode.ParamsErr, "鍙兘杩涜涓殑宸ュ簭鍙互鏇存柊宸ヨ壓鍙傛暟")
+ return
+ }
+ processModel, err := taskService.GetProcessParams(procedure, order)
+ if err != nil || processModel == nil || processModel.ParamsMap == nil {
+ ctx.FailWithMsg(ecode.ParamsErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟锛岃鍦ㄥ伐鑹烘ā鍨嬪簱涓笂浼狅紒")
+ return
+ }
+
+ plcConfig, code := service.NewDevicePlcService().GetDevicePlc()
+ if code != ecode.OK || plcConfig.Id == 0 {
+ ctx.FailWithMsg(ecode.NeedConfirmedErr, "璇峰厛閰嶇疆PLC")
+ return
+ }
+ plcConfig.MaxTryTimes = 2
+ err = SendParams(processModel.ParamsMap, plcConfig)
+ if err != nil {
+ logx.Errorf("update process params err: %v", err.Error())
+ ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC璇锋眰澶辫触锛岃妫�鏌LC閰嶇疆锛�")
+ return
+ }
+ _ = taskService.UpdateProcedureStatusAndChannel(nil, params.ProcedureId, model.ProcedureStatusProcessing, procedure.Channel, processModel.Number)
+ ctx.Ok()
+}
+
func SendParams(paramsMap map[string]interface{}, plcConfig *model.DevicePlc) error {
if len(paramsMap) == 0 {
return errors.New("empty params")
diff --git a/docs/docs.go b/docs/docs.go
index 1ad485b..5868d78 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -415,7 +415,10 @@
"type": "object",
"properties": {
"data": {
- "$ref": "#/definitions/response.TaskCountdown"
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/model.ProcessModel"
+ }
}
}
}
@@ -614,6 +617,36 @@
}
}
]
+ }
+ }
+ }
+ }
+ },
+ "/v1/task/updateProcessParams": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Task"
+ ],
+ "summary": "鏇存柊宸ヨ壓鍙傛暟锛堣繘琛屼腑鐨勪换鍔★級",
+ "parameters": [
+ {
+ "description": "鏌ヨ鍙傛暟",
+ "name": "object",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/request.SendProcessParams"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "$ref": "#/definitions/contextx.Response"
}
}
}
@@ -1038,11 +1071,54 @@
"procedureId": {
"type": "string"
},
+ "processModelNumber": {
+ "description": "宸ヨ壓妯″瀷缂栧彿",
+ "type": "string"
+ },
"startTime": {
"type": "integer"
},
"status": {
"$ref": "#/definitions/model.ProcedureStatus"
+ }
+ }
+ },
+ "model.ProcessModel": {
+ "type": "object",
+ "properties": {
+ "deviceId": {
+ "description": "鐢ㄤ簬杩囨护鑾峰彇nsq娑堟伅",
+ "type": "string"
+ },
+ "isUpdate": {
+ "description": "鍓嶇鐢�",
+ "type": "boolean"
+ },
+ "newNumber": {
+ "type": "string"
+ },
+ "newParamsMap": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "number": {
+ "description": "宸ヨ壓妯″瀷缂栧彿",
+ "type": "string"
+ },
+ "params": {
+ "type": "string"
+ },
+ "paramsMap": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "procedure": {
+ "description": "宸ュ簭",
+ "type": "string"
+ },
+ "product": {
+ "description": "浜у搧鍚嶇О",
+ "type": "string"
}
}
},
@@ -1063,9 +1139,6 @@
"procedureId"
],
"properties": {
- "channel": {
- "type": "integer"
- },
"procedureId": {
"type": "integer"
}
@@ -1132,15 +1205,6 @@
},
"data": {},
"msg": {
- "type": "string"
- }
- }
- },
- "response.Message": {
- "type": "object",
- "properties": {
- "data": {},
- "event": {
"type": "string"
}
}
diff --git a/docs/swagger.json b/docs/swagger.json
index 03ce549..39f51a6 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -403,7 +403,10 @@
"type": "object",
"properties": {
"data": {
- "$ref": "#/definitions/response.TaskCountdown"
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/model.ProcessModel"
+ }
}
}
}
@@ -602,6 +605,36 @@
}
}
]
+ }
+ }
+ }
+ }
+ },
+ "/v1/task/updateProcessParams": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Task"
+ ],
+ "summary": "鏇存柊宸ヨ壓鍙傛暟锛堣繘琛屼腑鐨勪换鍔★級",
+ "parameters": [
+ {
+ "description": "鏌ヨ鍙傛暟",
+ "name": "object",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/request.SendProcessParams"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "$ref": "#/definitions/contextx.Response"
}
}
}
@@ -1026,11 +1059,54 @@
"procedureId": {
"type": "string"
},
+ "processModelNumber": {
+ "description": "宸ヨ壓妯″瀷缂栧彿",
+ "type": "string"
+ },
"startTime": {
"type": "integer"
},
"status": {
"$ref": "#/definitions/model.ProcedureStatus"
+ }
+ }
+ },
+ "model.ProcessModel": {
+ "type": "object",
+ "properties": {
+ "deviceId": {
+ "description": "鐢ㄤ簬杩囨护鑾峰彇nsq娑堟伅",
+ "type": "string"
+ },
+ "isUpdate": {
+ "description": "鍓嶇鐢�",
+ "type": "boolean"
+ },
+ "newNumber": {
+ "type": "string"
+ },
+ "newParamsMap": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "number": {
+ "description": "宸ヨ壓妯″瀷缂栧彿",
+ "type": "string"
+ },
+ "params": {
+ "type": "string"
+ },
+ "paramsMap": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "procedure": {
+ "description": "宸ュ簭",
+ "type": "string"
+ },
+ "product": {
+ "description": "浜у搧鍚嶇О",
+ "type": "string"
}
}
},
@@ -1051,9 +1127,6 @@
"procedureId"
],
"properties": {
- "channel": {
- "type": "integer"
- },
"procedureId": {
"type": "integer"
}
@@ -1120,15 +1193,6 @@
},
"data": {},
"msg": {
- "type": "string"
- }
- }
- },
- "response.Message": {
- "type": "object",
- "properties": {
- "data": {},
- "event": {
"type": "string"
}
}
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index b73d1c3..e17229c 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -287,10 +287,41 @@
description: common.ProductProcedure 瀵硅薄
procedureId:
type: string
+ processModelNumber:
+ description: 宸ヨ壓妯″瀷缂栧彿
+ type: string
startTime:
type: integer
status:
$ref: '#/definitions/model.ProcedureStatus'
+ type: object
+ model.ProcessModel:
+ properties:
+ deviceId:
+ description: 鐢ㄤ簬杩囨护鑾峰彇nsq娑堟伅
+ type: string
+ isUpdate:
+ description: 鍓嶇鐢�
+ type: boolean
+ newNumber:
+ type: string
+ newParamsMap:
+ additionalProperties: true
+ type: object
+ number:
+ description: 宸ヨ壓妯″瀷缂栧彿
+ type: string
+ params:
+ type: string
+ paramsMap:
+ additionalProperties: true
+ type: object
+ procedure:
+ description: 宸ュ簭
+ type: string
+ product:
+ description: 浜у搧鍚嶇О
+ type: string
type: object
request.AddPlcBrand:
properties:
@@ -301,8 +332,6 @@
type: object
request.SendProcessParams:
properties:
- channel:
- type: integer
procedureId:
type: integer
required:
@@ -352,12 +381,6 @@
type: integer
data: {}
msg:
- type: string
- type: object
- response.Message:
- properties:
- data: {}
- event:
type: string
type: object
response.ProcessParams:
@@ -679,7 +702,9 @@
- $ref: '#/definitions/contextx.Response'
- properties:
data:
- $ref: '#/definitions/response.TaskCountdown'
+ items:
+ $ref: '#/definitions/model.ProcessModel'
+ type: array
type: object
summary: 鑾峰彇宸ヨ壓妯″瀷鍒楄〃
tags:
@@ -802,4 +827,23 @@
summary: 浠诲姟寮�濮嬶紙鑾峰彇宸ヨ壓鍙傛暟锛�
tags:
- Task
+ /v1/task/updateProcessParams:
+ post:
+ parameters:
+ - description: 鏌ヨ鍙傛暟
+ in: body
+ name: object
+ required: true
+ schema:
+ $ref: '#/definitions/request.SendProcessParams'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: 鎴愬姛
+ schema:
+ $ref: '#/definitions/contextx.Response'
+ summary: 鏇存柊宸ヨ壓鍙傛暟锛堣繘琛屼腑鐨勪换鍔★級
+ tags:
+ - Task
swagger: "2.0"
diff --git a/model/procedures.go b/model/procedures.go
index b3d9e73..de7397d 100644
--- a/model/procedures.go
+++ b/model/procedures.go
@@ -11,17 +11,19 @@
type (
Procedures struct {
- gorm.Model
- WorkOrderID string `gorm:"index;type:varchar(191);not null;comment:宸ュ崟ID" json:"-"`
- OrderID string `gorm:"index;type:varchar(191);not null;comment:璁㈠崟ID" json:"-"`
- DeviceID string `gorm:"index;type:varchar(191);comment:璁惧ID" json:"deviceId"`
- ProcedureID string `gorm:"index;type:varchar(191);comment:宸ュ簭ID" json:"procedureId"`
- Channel int32 `gorm:"index;comment:閫氶亾" json:"channel"` //閫氶亾
- StartTime int64 `gorm:"comment:璁″垝寮�濮嬫椂闂�" json:"startTime"`
- EndTime int64 `gorm:"comment:璁″垝缁撴潫鏃堕棿" json:"endTime"`
- Status ProcedureStatus
- ProcedureData string `json:"-"` //common.ProductProcedure json涓�
- ProceduresInfo common.ProductProcedure `json:"procedure" gorm:"-"` //common.ProductProcedure 瀵硅薄
+ gorm.Model `json:"-"`
+ ID int `gorm:"primarykey"`
+ WorkOrderID string `gorm:"index;type:varchar(191);not null;comment:宸ュ崟ID" json:"-"`
+ OrderID string `gorm:"index;type:varchar(191);not null;comment:璁㈠崟ID" json:"-"`
+ DeviceID string `gorm:"index;type:varchar(191);comment:璁惧ID" json:"deviceId"`
+ ProcedureID string `gorm:"index;type:varchar(191);comment:宸ュ簭ID" json:"procedureId"`
+ Channel int32 `gorm:"index;comment:閫氶亾" json:"channel"` //閫氶亾
+ ProcessModelNumber string `gorm:"index;comment:宸ヨ壓妯″瀷缂栧彿" json:"processModelNumber"` //宸ヨ壓妯″瀷缂栧彿
+ StartTime int64 `gorm:"comment:璁″垝寮�濮嬫椂闂�" json:"startTime"`
+ EndTime int64 `gorm:"comment:璁″垝缁撴潫鏃堕棿" json:"endTime"`
+ Status ProcedureStatus
+ ProcedureData string `json:"-"` //common.ProductProcedure json涓�
+ ProceduresInfo common.ProductProcedure `json:"procedure" gorm:"-"` //common.ProductProcedure 瀵硅薄
}
ProceduresSearch struct {
diff --git a/model/process_model.go b/model/process_model.go
index 57e73a8..7c3afb4 100644
--- a/model/process_model.go
+++ b/model/process_model.go
@@ -11,15 +11,17 @@
type (
// ProcessModel 宸ヨ壓鍙傛暟
ProcessModel struct {
- gorm.Model
- Number string `gorm:"index;column:number;type:varchar(255);not null;default '';comment:宸ヨ壓妯″瀷缂栧彿" json:"number"` //宸ヨ壓妯″瀷缂栧彿
- Product string `gorm:"column:product;type:varchar(255);not null;default '';comment:浜у搧鍚嶇О" json:"product"` //浜у搧鍚嶇О
- Procedure string `gorm:"column:procedure;type:varchar(255);not null;default '';comment:宸ュ簭" json:"procedure"` //宸ュ簭
- Params string `gorm:"type:text;comment:宸ヨ壓鍙傛暟閿�煎json涓�"`
- ParamsMap map[string]interface{} `json:"paramsMap" gorm:"-"`
- DeviceId string `json:"deviceId" gorm:"-"` //鐢ㄤ簬杩囨护鑾峰彇nsq娑堟伅
- IsNew bool `json:"isNew" gorm:"column:is_new;comment:鏄惁鏈�鏂扮殑"` //鏄惁鏈�鏂扮殑
- IsUpdate bool `json:"isUpdate" gorm:"-"` //鍓嶇鐢�
+ gorm.Model `json:"-"`
+ Number string `gorm:"index;column:number;type:varchar(255);not null;default '';comment:宸ヨ壓妯″瀷缂栧彿" json:"number"` //宸ヨ壓妯″瀷缂栧彿
+ Product string `gorm:"column:product;type:varchar(255);not null;default '';comment:浜у搧鍚嶇О" json:"product"` //浜у搧鍚嶇О
+ Procedure string `gorm:"column:procedure;type:varchar(255);not null;default '';comment:宸ュ簭" json:"procedure"` //宸ュ簭
+ Params string `gorm:"type:text;comment:宸ヨ壓鍙傛暟閿�煎json涓�"`
+ ParamsMap map[string]interface{} `json:"paramsMap" gorm:"-"`
+ DeviceId string `json:"deviceId" gorm:"-"` //鐢ㄤ簬杩囨护鑾峰彇nsq娑堟伅
+ IsNew bool `json:"-" gorm:"column:is_new;comment:鏄惁鏈�鏂扮殑"` //鏄惁鏈�鏂扮殑
+ IsUpdate bool `json:"isUpdate" gorm:"-"` //鍓嶇鐢�
+ NewParamsMap map[string]interface{} `json:"newParamsMap" gorm:"-"`
+ NewNumber string `json:"newNumber" gorm:"-"`
}
ProcessModelSearch struct {
diff --git a/model/request/task.go b/model/request/task.go
index b1b8ba8..6be2efa 100644
--- a/model/request/task.go
+++ b/model/request/task.go
@@ -18,8 +18,7 @@
}
type SendProcessParams struct {
- ProcedureId uint `json:"procedureId" binding:"required"`
- Channel int32 `json:"channel"`
+ ProcedureId int `json:"procedureId" binding:"required"`
}
type GetProductProgress struct {
diff --git a/pkg/contextx/contextx.go b/pkg/contextx/contextx.go
index aa450eb..1cd5c40 100644
--- a/pkg/contextx/contextx.go
+++ b/pkg/contextx/contextx.go
@@ -81,6 +81,7 @@
slf.ctx.JSON(http.StatusOK, ResponseList{
Data: data,
Total: total,
+ Code: ecode.OK,
})
}
diff --git a/router/index.go b/router/index.go
index ce53646..8a26e61 100644
--- a/router/index.go
+++ b/router/index.go
@@ -35,11 +35,12 @@
taskApi := new(v1.TaskApi)
taskGroup := v1Group.Group("task")
{
- taskGroup.GET("countdown", taskApi.TaskCountdown) // 鏂颁换鍔″�掕鏃�
- taskGroup.GET("get", taskApi.TaskGet) // 鑾峰彇宸ュ簭
- taskGroup.GET("start/:id", taskApi.GetProcessParams) // 鑾峰彇宸ヨ壓鍙傛暟
- taskGroup.POST("sendProcessParams", taskApi.TaskStart) // 涓嬪彂宸ヨ壓鍙傛暟骞跺紑濮嬪伐搴�
- taskGroup.PUT("finish/:id", taskApi.TaskFinish) // 瀹屾垚宸ュ簭
+ taskGroup.GET("countdown", taskApi.TaskCountdown) // 鏂颁换鍔″�掕鏃�
+ taskGroup.GET("get", taskApi.TaskGet) // 鑾峰彇宸ュ簭
+ taskGroup.GET("start/:id", taskApi.GetProcessParams) // 鑾峰彇宸ヨ壓鍙傛暟
+ taskGroup.POST("sendProcessParams", taskApi.TaskStart) // 涓嬪彂宸ヨ壓鍙傛暟骞跺紑濮嬪伐搴�
+ taskGroup.POST("updateProcessParams", taskApi.UpdateProcessParams) // 鏇存柊宸ヨ壓鍙傛暟
+ taskGroup.PUT("finish/:id", taskApi.TaskFinish) // 瀹屾垚宸ュ簭
}
configApi := new(v1.ConfigApi)
@@ -54,15 +55,15 @@
plcApi := new(v1.PlcApi)
plcGroup := v1Group.Group("plc")
{
- plcGroup.POST("productProgress", plcApi.GetProductProgress) // 鑾峰彇鐢熶骇杩涘害
- plcGroup.POST("productProgressRealTime", plcApi.GetProductProgressRealTime) // 瀹炴椂鑾峰彇鐢熶骇杩涘害
- plcGroup.POST("setProductNumber", plcApi.SetProductNumber) // 涓嬪彂鐢熶骇鎬婚噺
+ plcGroup.POST("productProgress", plcApi.GetProductProgress) // 鑾峰彇鐢熶骇杩涘害
+ //plcGroup.POST("productProgressRealTime", plcApi.GetProductProgressRealTime) // 瀹炴椂鑾峰彇鐢熶骇杩涘害
+ plcGroup.POST("setProductNumber", plcApi.SetProductNumber) // 涓嬪彂鐢熶骇鎬婚噺
}
processModelApi := new(v1.ProcessModelApi)
processModelGroup := v1Group.Group("processModel")
{
- processModelGroup.GET("list", processModelApi.List) // 鏂颁换鍔″�掕鏃�
+ processModelGroup.GET("list", processModelApi.List) // 宸ヨ壓鍙傛暟鍒楄〃
}
//eventsApi := new(v1.EventsApi)
diff --git a/service/cache_store.go b/service/cache_store.go
index 2f6c515..743e4a7 100644
--- a/service/cache_store.go
+++ b/service/cache_store.go
@@ -1,9 +1,11 @@
package service
import (
+ "apsClient/conf"
"apsClient/constvar"
"apsClient/model"
"fmt"
+ "github.com/jinzhu/gorm"
"github.com/spf13/cast"
"sync"
"time"
@@ -79,18 +81,25 @@
}
func TaskFlagSet(channel int32) {
- defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), struct{}{})
+ defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), true)
}
func TaskFlagUnset(channel int32) {
- defaultCacheStore.Remove(fmt.Sprintf(CurrentTaskCacheKey, channel))
+ defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), false)
}
func TaskFlagGet(channel int32) bool {
- if _, ok := defaultCacheStore.Get(fmt.Sprintf(CurrentTaskCacheKey, channel)); ok {
+ if v, ok := defaultCacheStore.Get(fmt.Sprintf(CurrentTaskCacheKey, channel)); ok {
+ return v.(bool)
+ }
+ _, err := model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.System.DeviceId).SetStatus(model.ProcedureStatusProcessing).SetChannels([]int32{channel}).First()
+ if err == gorm.ErrRecordNotFound {
+ defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), false)
+ return false
+ } else {
+ defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), true)
return true
}
- return false
}
func ProgressCacheGet(channel int32) (*model.ProductionProgress, bool) {
diff --git a/service/process_model.go b/service/process_model.go
index c4ff7dd..728248d 100644
--- a/service/process_model.go
+++ b/service/process_model.go
@@ -15,3 +15,7 @@
SetPage(page, pageSize).SetProcedures(device.ProceduresArr).Find()
return
}
+
+func GetProcessModelByNumber(num string) (record *model.ProcessModel, err error) {
+ return model.NewProcessModelSearch().SetNumber(num).First()
+}
diff --git a/service/task.go b/service/task.go
index 94df214..4ff5cb8 100644
--- a/service/task.go
+++ b/service/task.go
@@ -34,7 +34,6 @@
Workers: slf.WorkerDistinct(workers),
}
- nowTs := time.Now().Unix()
var (
err error
orders []*model.Order
@@ -47,14 +46,10 @@
if mode == constvar.TaskModeUnStarted {
search.SetStatus(model.ProcedureStatusWaitProcess).
- SetStartTimeMax(nowTs).
- SetEndTimeMin(nowTs).
SetOrder("start_time asc")
} else if mode == constvar.TaskModeCurrent {
search.SetStatus(model.ProcedureStatusProcessing).
- SetStartTimeMax(nowTs).
- SetEndTimeMin(nowTs).
- SetOrder("status desc, start_time asc")
+ SetOrder("start_time asc")
} else if mode == constvar.TaskModeLastFinished {
search.SetStatus(model.ProcedureStatusFinished).SetOrder("updated_at desc")
if len(channels) > 0 {
@@ -112,8 +107,7 @@
return taskResp, ecode.OK
}
func (slf TaskService) NewTaskCount() (count int64) {
- nowTs := time.Now().Unix()
- count, _ = model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.System.DeviceId).SetStatus(model.ProcedureStatusWaitProcess).SetEndTimeMin(nowTs).Count()
+ count, _ = model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.System.DeviceId).SetStatus(model.ProcedureStatusWaitProcess).Count()
return count
}
@@ -137,14 +131,19 @@
return procedure, ecode.OK
}
-func (slf TaskService) UpdateProcedureStatusAndChannel(db *gorm.DB, id uint, status model.ProcedureStatus, channel int32) error {
- if status == model.ProcedureStatusFinished {
+func (slf TaskService) UpdateProcedureStatusAndChannel(db *gorm.DB, id int, status model.ProcedureStatus, channel int32, processModelNumber string) error {
+ if status == model.ProcedureStatusFinished || status == model.ProcedureStatusWaitProcess {
ProgressCacheUnset(channel)
}
- return model.NewProceduresSearch(db).SetId(id).UpdateByMap(map[string]interface{}{
- "status": status,
- "channel": channel,
- })
+
+ upMap := map[string]interface{}{"status": status}
+ if status == model.ProcedureStatusProcessing {
+ upMap["process_model_number"] = processModelNumber
+ } else if status == model.ProcedureStatusWaitProcess {
+ upMap["process_model_number"] = ""
+ }
+
+ return model.NewProceduresSearch(db).SetId(id).UpdateByMap(upMap)
}
func (slf TaskService) UpdateProcedureStatus(db *gorm.DB, id uint, status model.ProcedureStatus, channel int32) error {
diff --git a/test/task_test.go b/test/task_test.go
new file mode 100644
index 0000000..caa2a00
--- /dev/null
+++ b/test/task_test.go
@@ -0,0 +1,31 @@
+package test
+
+import (
+ "apsClient/conf"
+ "apsClient/constvar"
+ "apsClient/model/common"
+ "apsClient/nsq"
+ "apsClient/pkg/logx"
+ "apsClient/service"
+ "fmt"
+ "testing"
+)
+
+func TestTaskStatusUpdate(t *testing.T) {
+ Init()
+ procedureId := 1
+ taskService := service.NewTaskService()
+ procedure, _ := taskService.GetProcedureById(procedureId)
+ msg := &common.MsgTaskStatusUpdate{
+ WorkOrderId: procedure.WorkOrderID,
+ ProcedureID: procedure.ProceduresInfo.ProcedureID,
+ DeviceId: procedure.ProceduresInfo.DeviceID,
+ IsProcessing: false,
+ IsFinish: true,
+ }
+ caller := nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicTaskProcedureStatusUpdate, conf.Conf.NsqConf.NodeId), "")
+ err := caller.Send(msg)
+ if err != nil {
+ logx.Errorf("send task status update msg error:%v", err.Error())
+ }
+}
diff --git a/test/test.go b/test/test.go
index 62ec57a..c5dd986 100644
--- a/test/test.go
+++ b/test/test.go
@@ -10,7 +10,7 @@
func Init() {
logx.Init(conf.Conf.Log)
defer logx.Sync()
-
+ conf.Conf.Sqlite.Dsn = "../aps.db"
if err := model.Init(); err != nil {
logx.Errorf("model Init err:%v", err)
return
--
Gitblit v1.8.0