zhangqian
2023-08-22 369026325416d187b7b0a0fbe8b5fd1895515bbb
获取工艺参数用nsq方式获取
8个文件已修改
99 ■■■■ 已修改文件
.gitignore 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/task.go 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
constvar/const.go 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/common/common.go 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nsq/caller.go 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nsq/consumer.go 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nsq/msg_handler.go 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nsq/nsq.go 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -24,4 +24,5 @@
apsClient
aps.db
.idea
logs
logs
datafile
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)
}
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
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"`
    }
)
nsq/caller.go
@@ -42,6 +42,9 @@
        case data := <-ReceivedMessageChan:
            if data.Topic == caller.ResponseTopic {
                return json.Unmarshal(data.Message, &output)
            } else {
                //把消息放回去
                ReceivedMessageChan <- data
            }
        }
    }
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)
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
}
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
}