广汽安道拓Acura项目MES后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

137 lines
6.0 KiB

package plc
import (
"LAPP_ACURA_MOM_BACKEND/conf"
"LAPP_ACURA_MOM_BACKEND/grmi"
"LAPP_ACURA_MOM_BACKEND/infra/logger"
baseModel "LAPP_ACURA_MOM_BACKEND/models/base"
"LAPP_ACURA_MOM_BACKEND/utils"
json "github.com/json-iterator/go"
"github.com/kataras/iris/v12"
)
// ReadDataFromPLC 从PLC读取数据
func ReadDataFromPLC(data baseModel.PLC, log logger.Log, dataType string) (interface{}, error) {
postData, err := json.Marshal(data)
if err != nil {
log.Error("序列化读数据请求数据失败, error:" + err.Error())
return "", grmi.NewBusinessError("序列化读取数据请求数据失败, error:" + err.Error())
}
log.Debug("读取数据请求参数:" + string(postData) + ", url:" + conf.DbConfig.PLCReadBackend)
boday, err := utils.Post(conf.DbConfig.PLCReadBackend, postData)
if err != nil {
log.Error("读取数据调用失败, error:" + err.Error())
return "", grmi.NewBusinessError("读取数据调用失败, error:" + err.Error())
}
log.Debug("读取数据请求响应:" + string(boday))
var response baseModel.Response
err = json.Unmarshal(boday, &response)
if err != nil {
log.Error("解析读取数据后台数据失败, error:" + err.Error() + ", 后台数据:" + string(boday))
return "", grmi.NewBusinessError("解析读取数据后台数据失败, error:" + err.Error())
}
if response.Code != iris.StatusOK {
log.Error("读取数据调用后台失败, 后台返回错误, 后台数据:" + string(boday))
return "", grmi.NewBusinessError("读取数据调用后台失败, 后台返回错误, 错误:" + response.Msg)
}
plcData, ok := response.Data.(map[string]interface{})
if !ok {
log.Error("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
return "", grmi.NewBusinessError("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
}
successInterface, exist := plcData["IsSuccess"]
if !exist {
log.Error("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
return "", grmi.NewBusinessError("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
}
success, ok := successInterface.(bool)
if !ok {
log.Error("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
return "", grmi.NewBusinessError("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
}
if !success {
log.Error("读取数据后台plc执行失败, 后台数据:" + string(boday))
return "", grmi.NewBusinessError("读取数据后台plc执行失败, 后台数据:" + string(boday))
}
content, exist := plcData["Content"]
if !exist {
log.Error("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
return "", grmi.NewBusinessError("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
}
if dataType == "String" {
stringContent, ok := content.(string)
if !ok {
log.Error("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
return "", grmi.NewBusinessError("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
}
if !ok {
log.Error("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
return "", grmi.NewBusinessError("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
}
length := len(stringContent)
for index, item := range stringContent {
if item == 0 {
length = index
break
}
}
return stringContent[:length], nil
} else if dataType == "Boolean" {
boolContent, ok := content.(bool)
if !ok {
log.Error("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
return false, grmi.NewBusinessError("读取数据后台返回data格式不正确, 后台数据:" + string(boday))
}
return boolContent, nil
} else {
return nil, grmi.NewBusinessError("不支持的数据类型")
}
}
// WriteDataToPLC 向plc中写入数据
func WriteDataToPLC(data baseModel.PLC, log logger.Log) error {
postData, err := json.Marshal(data)
if err != nil {
log.Error("序列化数据请求数据失败, error:" + err.Error())
return grmi.NewBusinessError("序列化数据请求数据失败, error:" + err.Error())
}
log.Debug("写入数据请求参数:" + string(postData) + ", url:" + conf.DbConfig.PLCWriteBackend)
boday, err := utils.Post(conf.DbConfig.PLCWriteBackend, postData)
if err != nil {
log.Error("写入数据调用失败, error:" + err.Error())
return grmi.NewBusinessError("写入数据调用失败, error:" + err.Error())
}
log.Debug("写入数据请求响应:" + string(boday))
var response baseModel.Response
err = json.Unmarshal(boday, &response)
if err != nil {
log.Error("解析写入数据后台数据失败, error:" + err.Error() + ", 后台数据:" + string(boday))
return grmi.NewBusinessError("解析写入数据后台数据失败, error:" + err.Error())
}
if response.Code != iris.StatusOK {
log.Error("写入数据调用后台失败, 后台返回错误, 后台数据:" + string(boday))
return grmi.NewBusinessError("写入数据调用后台失败, 后台返回错误, 错误:" + response.Msg)
}
plcData, ok := response.Data.(map[string]interface{})
if !ok {
log.Error("写入数据后台返回data格式不正确, 后台数据:" + string(boday))
return grmi.NewBusinessError("写入数据后台返回data格式不正确, 后台数据:" + string(boday))
}
successInterface, exist := plcData["IsSuccess"]
if !exist {
log.Error("写入数据后台返回data格式不正确, 后台数据:" + string(boday))
return grmi.NewBusinessError("写入数据后台返回data格式不正确, 后台数据:" + string(boday))
}
success, ok := successInterface.(bool)
if !ok {
log.Error("写入数据后台返回data格式不正确, 后台数据:" + string(boday))
return grmi.NewBusinessError("写入数据后台返回data格式不正确, 后台数据:" + string(boday))
}
if !success {
log.Error("写入数据后台plc执行失败, 后台数据:" + string(boday))
return grmi.NewBusinessError("写入数据后台plc执行失败, 后台数据:" + string(boday))
}
return nil
}