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 }