代码拉取完成,页面将自动刷新
package protocol
import (
"strconv"
"strings"
"time"
"gitee.com/lu_jian_wei/hj212/consts"
log "github.com/sirupsen/logrus"
)
type Property2061 struct {
Cou float64 // 小时累计值
Min float64 // 小时最小值
Avg float64 // 小时平均值
Max float64 // 小时最大值
Flag string // 数据标记
}
type Data2061 map[string]Property2061
type HJ212_2061 struct {
DataTime time.Time
Data Data2061
}
// TODO 数据编码
func (entity *HJ212_2061) Encode() ([]byte, error) {
return nil, nil
}
// 数据解码
func (entity *HJ212_2061) Decode(data string) error {
// 初始化entity.body
entity.Data = make(Data2061)
// 提取CP报文体并重新赋值给data
start := strings.Index(data, "CP=&&") + len("CP=&&")
end := strings.LastIndex(data, "&&")
if start < 0 || end < 0 || end <= start {
log.WithFields(log.Fields{}).Warn(consts.ServerName, "No data found in CP")
return nil
}
data = data[start:end]
var items []string
if len(data) > 0 {
items = strings.Split(data, ";")
}
for _, item := range items {
parts := strings.Split(item, ",")
// 解析DataTime
if len(parts) == 1 && strings.Contains(parts[0], "DataTime") {
kv := strings.Split(parts[0], "=")
t, err := time.ParseInLocation("20060102150405", kv[1], time.Local)
if err != nil {
return err
}
entity.DataTime = t
continue
}
// 解析污染物数据
var key string
var points Property2061
for _, part := range parts {
kv := strings.Split(part, "=")
if len(kv) == 2 {
// 提取污染物检测因子名称和度量标记
keys := strings.Split(kv[0], "-")
if len(keys) == 2 {
key = keys[0]
switch keys[1] {
case Field_Cou:
num, err := strconv.ParseFloat(kv[1], 64)
if err != nil {
log.WithField(Field_Rtd, kv[1]).Warn("Parse data error")
return err
}
points.Cou = num
case Field_Min:
num, err := strconv.ParseFloat(kv[1], 64)
if err != nil {
log.WithField(Field_Rtd, kv[1]).Warn("Parse data error")
return err
}
points.Min = num
case Field_Max:
num, err := strconv.ParseFloat(kv[1], 64)
if err != nil {
log.WithField(Field_Rtd, kv[1]).Warn("Parse data error")
return err
}
points.Max = num
case Field_Avg:
num, err := strconv.ParseFloat(kv[1], 64)
if err != nil {
log.WithField(Field_Rtd, kv[1]).Warn("Parse data error")
return err
}
points.Avg = num
case Field_Flag:
points.Flag = kv[1]
}
}
}
}
entity.Data[key] = points
}
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。