From 369026325416d187b7b0a0fbe8b5fd1895515bbb Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期二, 22 八月 2023 18:18:15 +0800
Subject: [PATCH] 获取工艺参数用nsq方式获取

---
 constvar/const.go      |    8 ++-
 nsq/msg_handler.go     |   20 ++++++++++
 .gitignore             |    3 +
 model/common/common.go |   20 ++++++++++
 nsq/caller.go          |    3 +
 nsq/consumer.go        |    2 +
 api/v1/task.go         |   39 +++++++++++++++----
 nsq/nsq.go             |    4 ++
 8 files changed, 86 insertions(+), 13 deletions(-)

diff --git a/.gitignore b/.gitignore
index f7f7161..1561e76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,4 +24,5 @@
 apsClient
 aps.db
 .idea
-logs
\ No newline at end of file
+logs
+datafile
\ No newline at end of file
diff --git a/api/v1/task.go b/api/v1/task.go
index b0719bc..cf295c5 100644
--- a/api/v1/task.go
+++ b/api/v1/task.go
@@ -76,31 +76,52 @@
 		ctx.Fail(ecode.UnknownErr)
 		return
 	}
-	params := service.GetProcessModelParams{
+	//params := service.GetProcessModelParams{
+	//	WorkOrder: procedure.WorkOrderID,
+	//	OrderId:   procedure.OrderID,
+	//	Product:   order.ProductName,
+	//	Procedure: procedure.ProceduresInfo.ProcedureName,
+	//	Device:    procedure.ProceduresInfo.DeviceName,
+	//}
+	//resp, err := service.ProcessModel{}.GetProcessModel(params)
+	//if err != nil {
+	//	logx.Errorf("TaskStart GetProcessModel error: %v", err.Error())
+	//	ctx.FailWithMsg(ecode.UnknownErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟")
+	//	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,
-	}
-	resp, err := service.ProcessModel{}.GetProcessModel(params)
+		Device:    procedure.ProceduresInfo.DeviceName}, &result, time.Second*5)
 	if err != nil {
-		logx.Errorf("TaskStart Notice GetProcessModel error: %v", err.Error())
+		logx.Errorf("TaskStart GetProcessModel error:%v", err.Error())
 		ctx.FailWithMsg(ecode.UnknownErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟")
 		return
 	}
-	processParamsArr := make([]response.ProcessParams, 0, len(resp.ParamsMap))
-	for k, v := range resp.ParamsMap {
+	if result.ParamsMap == nil {
+		logx.Errorf("TaskStart GetProcessModel response miss process params:%v", result)
+		ctx.FailWithMsg(ecode.UnknownErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟")
+		return
+	}
+
+	processParamsArr := make([]response.ProcessParams, 0, len(result.ParamsMap))
+	for k, v := range result.ParamsMap {
 		processParamsArr = append(processParamsArr, response.ProcessParams{
 			Key:   k,
 			Value: v,
 		})
 	}
 	data := response.ProcessParamsResponse{
-		Number: resp.Number,
+		Number: result.Number,
 		Params: processParamsArr,
 	}
-	logx.Infof("TaskStart Notice GetProcessModel: %+v", resp)
+	logx.Infof("TaskStart Notice GetProcessModel: %+v", result)
 	ctx.OkWithDetailed(data)
 }
 
diff --git a/constvar/const.go b/constvar/const.go
index 5d30c70..20868e5 100644
--- a/constvar/const.go
+++ b/constvar/const.go
@@ -1,9 +1,11 @@
 package constvar
 
 const (
-	NsqTopicScheduleTask   = "aps.%v.scheduleTask" //鎺掔▼浠诲姟涓嬪彂
-	NsqTopicGetPlcAddress  = "aps.%v.getPlcAddress"
-	NsqTopicSendPlcAddress = "aps.%v.sendPlcAddress"
+	NsqTopicScheduleTask          = "aps.%v.scheduleTask" //鎺掔▼浠诲姟涓嬪彂
+	NsqTopicGetPlcAddress         = "aps.%v.getPlcAddress"
+	NsqTopicSendPlcAddress        = "aps.%v.sendPlcAddress"
+	NsqTopicProcessParamsRequest  = "aps.%v.processParams.request"
+	NsqTopicProcessParamsResponse = "aps.%v.processParams.response"
 )
 
 type PlcStartAddressType string
diff --git a/model/common/common.go b/model/common/common.go
index 580b2b8..c329eec 100644
--- a/model/common/common.go
+++ b/model/common/common.go
@@ -65,3 +65,23 @@
 		AddressData []byte
 	}
 )
+
+// 宸ヨ壓鍙傛暟
+type (
+	RequestProcessParams struct {
+		WorkOrder string `json:"workOrder,omitempty" form:"workOrder"` //宸ュ簭缂栧彿
+		OrderId   string `json:"orderId"`                              // 璁㈠崟鍙�
+		Product   string `json:"password"`                             // 浜у搧
+		Procedure string `json:"procedure"`                            // 宸ュ簭
+		Device    string `json:"device"`                               // 璁惧
+	}
+	ResponseProcessParams struct {
+		Number    string                 `json:"number"`    //宸ヨ壓妯″瀷缂栧彿
+		OrderId   string                 `json:"orderId"`   //璁㈠崟id
+		Product   string                 `json:"product"`   //浜у搧鍚嶇О
+		Procedure string                 `json:"procedure"` //宸ュ簭
+		WorkOrder string                 `json:"workOrder"` //宸ュ崟
+		Device    string                 `json:"device"`    //璁惧
+		ParamsMap map[string]interface{} `json:"paramsMap"`
+	}
+)
diff --git a/nsq/caller.go b/nsq/caller.go
index 36839cc..59c6848 100644
--- a/nsq/caller.go
+++ b/nsq/caller.go
@@ -42,6 +42,9 @@
 		case data := <-ReceivedMessageChan:
 			if data.Topic == caller.ResponseTopic {
 				return json.Unmarshal(data.Message, &output)
+			} else {
+				//鎶婃秷鎭斁鍥炲幓
+				ReceivedMessageChan <- data
 			}
 		}
 	}
diff --git a/nsq/consumer.go b/nsq/consumer.go
index feb2814..d7b55e3 100644
--- a/nsq/consumer.go
+++ b/nsq/consumer.go
@@ -22,6 +22,8 @@
 		handler = new(ScheduleTask)
 	case fmt.Sprintf(constvar.NsqTopicSendPlcAddress, conf.Conf.NsqConf.NodeId):
 		handler = &PlcAddress{Topic: topic}
+	case fmt.Sprintf(constvar.NsqTopicProcessParamsResponse, conf.Conf.NsqConf.NodeId):
+		handler = &ProcessParams{Topic: topic}
 	}
 	c.AddHandler(handler.HandleMessage)
 
diff --git a/nsq/msg_handler.go b/nsq/msg_handler.go
index a33cf9f..1274aa1 100644
--- a/nsq/msg_handler.go
+++ b/nsq/msg_handler.go
@@ -126,3 +126,23 @@
 	}
 	return nil
 }
+
+type ProcessParams struct {
+	Topic string
+}
+
+func (slf *ProcessParams) HandleMessage(data []byte) (err error) {
+	logx.Infof("get an process params message :%s", data)
+	var resp = new(common.ResponseProcessParams)
+	err = json.Unmarshal(data, &resp)
+	if err != nil {
+		logx.Errorf("ScheduleTask HandleMessage Unmarshal json err: %v", err.Error())
+		return err
+	}
+	//閫氱煡鍥炲鏀跺埌
+	ReceivedMessageChan <- &ReceivedMessage{
+		Topic:   slf.Topic,
+		Message: data,
+	}
+	return nil
+}
diff --git a/nsq/nsq.go b/nsq/nsq.go
index 2710e13..6957985 100644
--- a/nsq/nsq.go
+++ b/nsq/nsq.go
@@ -37,5 +37,9 @@
 		_ = Consume(fmt.Sprintf(constvar.NsqTopicSendPlcAddress, conf.Conf.NsqConf.NodeId), conf.Conf.System.DeviceId)
 	})
 
+	safe.Go(func() {
+		_ = Consume(fmt.Sprintf(constvar.NsqTopicProcessParamsResponse, conf.Conf.NsqConf.NodeId), conf.Conf.System.DeviceId)
+	})
+
 	return nil
 }

--
Gitblit v1.8.0