et-go 20240919重建
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.
 
 

85 lines
2.7 KiB

package et_Info
import (
"gitea.anxinyun.cn/container/common_models"
"gitea.anxinyun.cn/container/common_utils"
"gitea.anxinyun.cn/container/common_utils/configLoad"
"log"
"node/stages"
)
type InfoHandler struct {
configHelper *common_utils.ConfigHelper
stage *stages.Stage
}
func NewInfoHandler() *InfoHandler {
redisAddr := configLoad.LoadConfig().GetString("redis.address")
the := &InfoHandler{
configHelper: common_utils.NewConfigHelper(redisAddr),
stage: stages.NewStage("测点信息获取"),
}
the.stage.AddProcess(the.getStationInfo)
return the
}
func (the *InfoHandler) GetStage() stages.Stage {
return *the.stage
}
func (the *InfoHandler) getStationInfo(p *common_models.ProcessData) *common_models.ProcessData {
s, err := the.configHelper.GetDeviceStationObjs(p.DeviceData.DeviceId)
if err == nil && s != nil {
p.Stations = s
} else {
//无法查询到完整的 重新获取
log.Printf("重获取设备[%s]的 DeviceStationObj", p.DeviceData.DeviceId)
stationIds, err := the.configHelper.GetDeviceStationIds(p.DeviceData.DeviceId)
if err != nil {
log.Printf("err !!! GetDeviceStationIds =>%s", err.Error())
return p
}
p.Stations, err = the.configHelper.GetStations(stationIds...)
the.getFormulaInfo(p)
//补全 设备数据输入单位
p.DeviceData.RawUnit = p.DeviceData.DeviceInfo.DeviceMeta.GetOutputUnit()
//存储测点obj
if len(p.Stations) > 0 {
the.configHelper.SetDeviceStationObjs(p.DeviceData.DeviceId, p.Stations)
}
}
return p
}
func (the *InfoHandler) getFormulaInfo(p *common_models.ProcessData) {
for i, _ := range p.Stations {
deviceFactorProto, err := the.configHelper.GetDeviceFactorProto(p.Stations[i].Info.ProtoCode, p.DeviceData.DeviceInfo.DeviceMeta.Id)
p.Stations[i].Info.Proto, err = the.configHelper.GetProto(p.Stations[i].Info.ProtoCode)
if err != nil {
panic(err)
}
//绑定工具没有配置 设备和监测原型,字段映射关系的
if len(deviceFactorProto.FieldVal) == 0 {
log.Printf("设备[%s]和原型[%s]无绑定关系,默认采用监测原型字段", p.DeviceData.DeviceId, p.Stations[i].Info.ProtoCode)
deviceFactorProto.FieldVal = the.defaultDeviceFactorProtoFieldVal(p.Stations[i].Info.Proto)
}
for i2, device := range p.Stations[i].Info.Devices {
formulaInfo, err := the.configHelper.GetFormulaInfo(device.FormulaId)
if err == nil {
p.Stations[i].Info.Devices[i2].FormulaInfo = formulaInfo
p.Stations[i].Info.Devices[i2].DeviceFactorProto = deviceFactorProto
}
}
}
}
func (the *InfoHandler) defaultDeviceFactorProtoFieldVal(p common_models.Proto) map[string]string {
fieldMap := make(map[string]string)
for _, item := range p.Items {
fieldMap[item.FieldName] = item.FieldName
}
return fieldMap
}