From 001d1f605c0a275a139f5c8fa66e631eb998e3b9 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期六, 02 九月 2023 14:35:10 +0800
Subject: [PATCH] 存储全部设备的工序和订单&代码优化
---
service/task.go | 54 +++++++++++++
nsq/msg_handler.go | 84 ++++++++++++---------
model/procedures.go | 2
model/process_model.go | 1
test/msg_handler_test.go | 4
api/v1/task.go | 77 ++----------------
6 files changed, 116 insertions(+), 106 deletions(-)
diff --git a/api/v1/task.go b/api/v1/task.go
index d07c123..0a364f5 100644
--- a/api/v1/task.go
+++ b/api/v1/task.go
@@ -1,12 +1,9 @@
package v1
import (
- "apsClient/conf"
"apsClient/constvar"
"apsClient/model"
- "apsClient/model/common"
"apsClient/model/response"
- "apsClient/nsq"
"apsClient/pkg/contextx"
"apsClient/pkg/convertx"
"apsClient/pkg/ecode"
@@ -14,7 +11,6 @@
"apsClient/pkg/plc"
"apsClient/service"
"apsClient/service/plc_address"
- "encoding/json"
"errors"
"fmt"
"github.com/gin-gonic/gin"
@@ -96,60 +92,21 @@
return
}
- paramsMap := make(map[string]interface{})
- var paramsNumber string
- data, err := model.NewProcessModelSearch().
- SetWorkOrder(procedure.WorkOrderID).
- SetDevice(procedure.ProceduresInfo.DeviceName).
- SetOrderId(procedure.OrderID).
- SetProcedure(procedure.ProceduresInfo.ProcedureName).
- SetProduct(order.ProductName).
- SetOrder("id desc").First()
- if err == nil {
- err = json.Unmarshal([]byte(data.Params), &data.ParamsMap)
- paramsMap = data.ParamsMap
- paramsNumber = data.Number
- if err != nil {
- logx.Errorf("process model json.Unmarshal:%v", err)
- ctx.FailWithMsg(ecode.UnknownErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟")
- return
- }
- } else if err == gorm.ErrRecordNotFound { //濡備綍鏁版嵁搴撴病鏈変粠浜戠鑾峰彇
- caller := nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicProcessParamsRequest, conf.Conf.NsqConf.NodeId), fmt.Sprintf(constvar.NsqTopicProcessParamsResponse, conf.Conf.NsqConf.NodeId))
- var result common.ResponseProcessParams
- err = caller.Call(common.RequestProcessParams{
- WorkOrder: procedure.WorkOrderID,
- OrderId: procedure.OrderID,
- Product: order.ProductName,
- Procedure: procedure.ProceduresInfo.ProcedureName,
- Device: procedure.ProceduresInfo.DeviceName}, &result, time.Second*3)
- if err != nil {
- logx.Errorf("TaskStart GetProcessModel error:%v", err.Error())
- ctx.FailWithMsg(ecode.UnknownErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟")
- return
- }
- if result.ParamsMap == nil {
- logx.Errorf("TaskStart GetProcessModel response miss process params:%v", result)
- ctx.FailWithMsg(ecode.UnknownErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟")
- return
- }
- paramsMap = result.ParamsMap
- paramsNumber = result.Number
- } else {
- logx.Errorf("TaskStart GetProcessModel err:%v", err)
- ctx.FailWithMsg(ecode.UnknownErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟")
+ processModel, err := service.NewTaskService().GetProcessParams(procedure, order)
+ if err != nil || processModel == nil || processModel.ParamsMap == nil {
+ ctx.Fail(ecode.UnknownErr)
return
}
- processParamsArr := make([]response.ProcessParams, 0, len(paramsMap))
- for k, v := range paramsMap {
+ processParamsArr := make([]response.ProcessParams, 0, len(processModel.ParamsMap))
+ for k, v := range processModel.ParamsMap {
processParamsArr = append(processParamsArr, response.ProcessParams{
Key: k,
Value: v,
})
}
resp := response.ProcessParamsResponse{
- Number: paramsNumber,
+ Number: processModel.Number,
Params: processParamsArr,
}
ctx.OkWithDetailed(resp)
@@ -221,23 +178,9 @@
return
}
- caller := nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicProcessParamsRequest, conf.Conf.NsqConf.NodeId), fmt.Sprintf(constvar.NsqTopicProcessParamsResponse, conf.Conf.NsqConf.NodeId))
- var result common.ResponseProcessParams
-
- err = caller.Call(common.RequestProcessParams{
- WorkOrder: procedure.WorkOrderID,
- OrderId: procedure.OrderID,
- Product: order.ProductName,
- Procedure: procedure.ProceduresInfo.ProcedureName,
- Device: procedure.ProceduresInfo.DeviceName}, &result, time.Second*3)
- if err != nil {
- logx.Errorf("SendProcessParams GetProcessModel error:%v", err.Error())
- ctx.FailWithMsg(ecode.UnknownErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟")
- return
- }
- if result.ParamsMap == nil {
- logx.Errorf("SendProcessParams GetProcessModel response miss process params:%v", result)
- ctx.FailWithMsg(ecode.UnknownErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟")
+ processModel, err := service.NewTaskService().GetProcessParams(procedure, order)
+ if err != nil || processModel == nil || processModel.ParamsMap == nil {
+ ctx.Fail(ecode.UnknownErr)
return
}
@@ -263,7 +206,7 @@
return
}
plcConfig.MaxTryTimes = 2
- err = SendParams(result.ParamsMap, plcConfig)
+ err = SendParams(processModel.ParamsMap, plcConfig)
if err != nil {
logx.Errorf("SendProcessParams: %v", err.Error())
ctx.FailWithMsg(ecode.NeedConfirmedErr, "绯熺硶锛屽伐鑹轰笅鍙戝け璐ャ��")
diff --git a/model/procedures.go b/model/procedures.go
index a8eb474..b15cc0c 100644
--- a/model/procedures.go
+++ b/model/procedures.go
@@ -15,7 +15,7 @@
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:"type:varchar(191);comment:璁惧ID" json:"deviceId"`
+ DeviceID string `gorm:"index;type:varchar(191);comment:璁惧ID" json:"deviceId"`
StartTime int64 `gorm:"comment:璁″垝寮�濮嬫椂闂�" json:"startTime"`
EndTime int64 `gorm:"comment:璁″垝缁撴潫鏃堕棿" json:"endTime"`
Status ProcedureStatus
diff --git a/model/process_model.go b/model/process_model.go
index 9a15886..77cf9af 100644
--- a/model/process_model.go
+++ b/model/process_model.go
@@ -18,6 +18,7 @@
Device string `gorm:"column:device;type:varchar(255);not null;default '';comment:璁惧" json:"device"` //璁惧
Params string `gorm:"type:text;comment:宸ヨ壓鍙傛暟閿�煎json涓�"`
ParamsMap map[string]interface{} `json:"paramsMap" gorm:"-"`
+ DeviceId string `json:"deviceId" gorm:"-"` //鐢ㄤ簬杩囨护鑾峰彇nsq娑堟伅
}
ProcessModelSearch struct {
diff --git a/nsq/msg_handler.go b/nsq/msg_handler.go
index b7a168b..af96211 100644
--- a/nsq/msg_handler.go
+++ b/nsq/msg_handler.go
@@ -43,41 +43,48 @@
return err
}
for _, task := range tasks {
+ oldWorkOrder, err := model.NewOrderSearch(nil).SetWorkOrderId(task.WorkOrder.WorkOrderID).First()
+ if oldWorkOrder != nil && oldWorkOrder.WorkOrderID != "" && oldWorkOrder.Status != model.OrderStatusWaitProcess { //宸插紑濮嬬殑宸ュ簭涓嶅彲浠ヤ慨鏀�
+ continue
+ }
+
+ procedureRecords := make([]*model.Procedures, 0, len(task.Procedures))
for _, procedure := range task.Procedures {
- if procedure.DeviceID == conf.Conf.System.DeviceId { //鍙瓨鍌ㄦ湰璁惧鐨勫伐搴�
- err = model.WithTransaction(func(db *gorm.DB) error {
- _, err := model.NewOrderSearch(db).SetWorkOrderId(task.WorkOrder.WorkOrderID).First()
- if err == gorm.ErrRecordNotFound {
- var orderRecord model.Order
- err = structx.AssignTo(task.WorkOrder, &orderRecord)
- orderRecord.Status = model.OrderStatusWaitProcess
- 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{
- StartTime: procedure.StartTime,
- EndTime: procedure.EndTime,
- WorkOrderID: task.WorkOrder.WorkOrderID,
- OrderID: task.WorkOrder.OrderID,
- Status: model.ProcedureStatusWaitProcess,
- }
- 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())
- }
+ procedureRecord := model.Procedures{
+ WorkOrderID: task.WorkOrder.WorkOrderID,
+ OrderID: task.WorkOrder.OrderID,
+ DeviceID: procedure.DeviceID,
+ StartTime: procedure.StartTime,
+ EndTime: procedure.EndTime,
+ Status: model.ProcedureStatusWaitProcess,
+ ProcedureData: "",
+ ProceduresInfo: common.ProductProcedure{},
}
+ procedureData, err := json.Marshal(procedure)
+ if err != nil {
+ return err
+ }
+ procedureRecord.ProcedureData = string(procedureData)
+ procedureRecords = append(procedureRecords, &procedureRecord)
+ }
+
+ var orderRecord model.Order
+ err = structx.AssignTo(task.WorkOrder, &orderRecord)
+ orderRecord.Status = model.OrderStatusWaitProcess
+ if err != nil {
+ logx.Errorf(" structx.Assign task.Order to orderRecord err: %v", err.Error())
+ return err
+ }
+
+ err = model.WithTransaction(func(db *gorm.DB) error {
+ if err = model.NewOrderSearch(db).Save(&orderRecord); err != nil {
+ return err
+ }
+ return model.NewProceduresSearch(db).CreateBatch(procedureRecords)
+ })
+ if err != nil {
+ logx.Errorf(" save task message error err: %v", err.Error())
+ return err
}
}
return nil
@@ -140,9 +147,14 @@
logx.Infof("unmarshal process params sync err :%s", err)
return err
}
- err = model.NewProcessModelSearch().Create(&processModel)
- if err != nil {
- logx.Infof("save process params err :%s", err)
+ if processModel.DeviceId != conf.Conf.System.DeviceId { //涓嶆槸鍙戠粰鏈澶囩殑娑堟伅
+ return nil
+ }
+ if processModel.Params != "" {
+ err = model.NewProcessModelSearch().Create(&processModel)
+ if err != nil {
+ logx.Infof("save process params err :%s", err)
+ }
}
//閫氱煡鍥炲鏀跺埌
ReceivedMessageChan <- &ReceivedMessage{
diff --git a/service/task.go b/service/task.go
index 5a1634e..43d6819 100644
--- a/service/task.go
+++ b/service/task.go
@@ -1,9 +1,17 @@
package service
import (
+ "apsClient/conf"
+ "apsClient/constvar"
"apsClient/model"
+ "apsClient/model/common"
"apsClient/model/response"
+ "apsClient/nsq"
"apsClient/pkg/ecode"
+ "apsClient/pkg/logx"
+ "apsClient/pkg/structx"
+ "encoding/json"
+ "fmt"
"gorm.io/gorm"
"time"
)
@@ -37,6 +45,7 @@
procedure, err := model.NewProceduresSearch(nil).SetOrder("start_time asc").
SetWorkOrderId(order.WorkOrderID).
SetStartTimeMax(nowTs).
+ SetDeviceId(conf.Conf.System.DeviceId).
SetStatusNot(model.ProcedureStatusFinished).
First()
if err == gorm.ErrRecordNotFound { //璇ヨ鍗曟湰璁惧鍏ㄩ儴宸ュ簭瀹屾垚锛屾妸璁㈠崟缃负瀹屾垚鐘舵�侊紙鍙槸瀵规湰璁惧瀹屾垚锛�
@@ -82,6 +91,51 @@
return model.NewOrderSearch(nil).SetWorkOrderId(workOrderId).First()
}
+func (slf TaskService) GetProcessParams(procedure *model.Procedures, order *model.Order) (processModel *model.ProcessModel, err error) {
+ data, err := model.NewProcessModelSearch().
+ SetWorkOrder(procedure.WorkOrderID).
+ SetDevice(procedure.ProceduresInfo.DeviceName).
+ SetOrderId(procedure.OrderID).
+ SetProcedure(procedure.ProceduresInfo.ProcedureName).
+ SetProduct(order.ProductName).
+ SetOrder("id desc").First()
+ if err != nil && err != gorm.ErrRecordNotFound {
+ logx.Errorf("TaskStart GetProcessModel err:%v", err)
+ return nil, err
+ }
+ if err == nil {
+ err = json.Unmarshal([]byte(data.Params), &data.ParamsMap)
+ if err != nil {
+ logx.Errorf("process model json.Unmarshal:%v", err)
+ return
+ }
+ return data, nil
+ }
+
+ if err == gorm.ErrRecordNotFound { //濡傛灉鏁版嵁搴撴病鏈変粠浜戠鑾峰彇
+ caller := nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicProcessParamsRequest, conf.Conf.NsqConf.NodeId), fmt.Sprintf(constvar.NsqTopicProcessParamsResponse, conf.Conf.NsqConf.NodeId))
+ var result common.ResponseProcessParams
+ err = caller.Call(common.RequestProcessParams{
+ WorkOrder: procedure.WorkOrderID,
+ OrderId: procedure.OrderID,
+ Product: order.ProductName,
+ Procedure: procedure.ProceduresInfo.ProcedureName,
+ Device: procedure.ProceduresInfo.DeviceName}, &result, time.Second*3)
+ if err != nil {
+ logx.Errorf("TaskStart GetProcessModel error:%v", err.Error())
+ return
+ }
+ if result.ParamsMap == nil {
+ logx.Errorf("TaskStart GetProcessModel response miss process params:%v", result)
+ return
+ }
+ processModel = new(model.ProcessModel)
+ err = structx.AssignTo(result, &processModel)
+ return processModel, err
+ }
+ return
+}
+
// GetCurrentTask 鑾峰彇寰呭畬鎴愭垨杩涜涓殑浠诲姟锛� 姣忎釜宸ュ崟鍙湁涓�涓伐搴�
func (slf TaskService) GetCurrentTask() (workOrder *model.Order, err error) {
nowTs := time.Now().Unix()
diff --git a/test/msg_handler_test.go b/test/msg_handler_test.go
index d2b0566..7c23cb1 100644
--- a/test/msg_handler_test.go
+++ b/test/msg_handler_test.go
@@ -79,7 +79,7 @@
Workers: workers,
}, {ProcedureID: "ProcedureID 2",
ProcedureName: "ProcedureName 2",
- DeviceID: "DeviceID1",
+ DeviceID: "DeviceID2",
DeviceName: "DeviceName 1",
StartTime: startTime.Unix(),
EndTime: endTime.Unix(),
@@ -118,7 +118,7 @@
}, {
ProcedureID: "ProcedureID 4",
ProcedureName: "ProcedureName 4",
- DeviceID: "DeviceID1",
+ DeviceID: "DeviceID2",
DeviceName: "DeviceName 1",
StartTime: startTime.Unix(),
EndTime: endTime.Unix(),
--
Gitblit v1.8.0