1 Star 2 Fork 0

卢建伟/hj212

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
hj212_2061.go 2.55 KB
一键复制 编辑 原始数据 按行查看 历史
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
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/lu_jian_wei/hj212.git
git@gitee.com:lu_jian_wei/hj212.git
lu_jian_wei
hj212
hj212
v0.0.8

搜索帮助