Browse Source

分组计算相关模型更新

dev
yfh 4 months ago
parent
commit
3a97f5d072
  1. 16
      IotaData.go
  2. 12
      README.md
  3. 17
      aggData.go
  4. 10
      dataTrace.go
  5. 28
      esGroupTheme.go
  6. 5
      go.sum
  7. 10
      rpc_node.go
  8. 81
      staionGroup.go
  9. 40
      station.go

16
IotaData.go

@ -54,3 +54,19 @@ type Data struct {
func (the *Data) Success() bool { func (the *Data) Success() bool {
return the.Result.Code == 0 return the.Result.Code == 0
} }
func (the *IotaData) T() time.Time {
return the.TriggerTime
}
func (the *IotaData) Q() string {
return fmt.Sprintf("iotaData:%s", the.DeviceId)
}
func (the *IotaData) R() string {
return fmt.Sprintf("[ThingId:%s] [DeviceId:%s]", the.ThingId, the.DeviceId)
}
func (the *IotaData) GetThingId() string {
return the.ThingId
}

12
README.md

@ -1,26 +1,26 @@
# common_models 通用结构体模块 # common_models 通用结构体模块
### 开发语言和版本 ### 开发语言和版本
golang ,版本 go1.22.0 golang ,版本 go1.23.1
### 平台支持 ### 平台支持
安心云4.0 安心云4.0
### 使用方式: ### 使用方式:
1. 设置 go 环境 1. 设置 go 环境
set GOPRIVATE=gitea.ngaiot.com set GOPRIVATE=gitea.anxinyun.cn
2. 查询go 版本 2. 查询go 版本
go list -m -versions gitea.anxinyun.cn/container/common_models go list -m -versions gitea.anxinyun.cn/container/common_models
如若 GOPRIVATE=gitea.ngaiot.com 生效,则会返回 common_models 的版本信息。 如若 GOPRIVATE=gitea.anxinyun.cn 生效,则会返回 common_models 的版本信息。
如若无版本信息返回,有可能是没有 DevOps 的权限,也有可能环境变量设置没有生效。 如若无版本信息返回,有可能是没有 container 的权限,也有可能环境变量设置没有生效。
异常情况处理: 异常情况处理:
1. 无 https://gitea.anxinyun.cn/container 访问权限,可以联系下管理员。 1. 无 https://gitea.anxinyun.cn/container 访问权限,可以联系下管理员(刘歆毅)
2. 环境变量设置不生效 2. 环境变量设置不生效
解决方法,在GoLand工具中进行设置: 解决方法,在GoLand工具中进行设置:
1)打开 Settings 1)打开 Settings
2)Go > GOROOT,Download Go SDK 2)Go > GOROOT,Download Go SDK
3)Go > Go Modules,设置环境变量 GOPRIVATE=gitea.ngaiot.com 3)Go > Go Modules,设置环境变量 GOPRIVATE=gitea.anxinyun.cn
### 依赖包管理 ### 依赖包管理
common_models 如若有修改,必须需要同步升级 common_utils、et-go common_models 如若有修改,必须需要同步升级 common_utils、et-go

17
aggData.go

@ -14,18 +14,23 @@ type AggData struct {
AggMethodId int // 聚集方法 : 平均值/最大值/最小值 AggMethodId int // 聚集方法 : 平均值/最大值/最小值
Agg map[string]float64 // 聚集数据 Agg map[string]float64 // 聚集数据
Changed map[string]float64 // 变化量 Changed map[string]float64 // 变化量
ThingId string
} }
func (a *AggData) _t() time.Time { func (the *AggData) T() time.Time {
return a.Date return the.Date
} }
func (a *AggData) _q() string { func (the *AggData) Q() string {
return fmt.Sprintf("agg:%d", a.SensorId) return fmt.Sprintf("aggData:%d", the.SensorId)
} }
func (a *AggData) _r() string { func (the *AggData) R() string {
return fmt.Sprintf("[Structure:%d] [Station:%d]", a.StructId, a.SensorId) return fmt.Sprintf("[Structure:%d][Station:%d]", the.StructId, the.SensorId)
}
func (the *AggData) GetThingId() string {
return the.ThingId
} }
var typeDict = map[int]string{ var typeDict = map[int]string{

10
dataTrace.go

@ -2,13 +2,15 @@ package common_models
import "time" import "time"
type DataTrace interface { type IDataTrace interface {
// 数据时间 // 数据时间
_t() time.Time T() time.Time
// 定位标记 // 定位标记
_q() string Q() string
// 定位标记 // 定位标记
_r() string R() string
GetThingId() string
} }

28
esGroupTheme.go

@ -4,14 +4,22 @@ import "time"
// EsGroupTheme 分组主题数据结构体 // EsGroupTheme 分组主题数据结构体
type EsGroupTheme struct { type EsGroupTheme struct {
Structure int `json:"structure"` StructId int `json:"struct_id"`
GroupId int `json:"group_id"` GroupId int `json:"group_id"`
GroupName string `json:"group_name"` GroupName string `json:"group_name"`
Factor int `json:"factor"` GroupType string `json:"group_type"`
FactorName string `json:"factor_name"` TaskId string `json:"task_id"`
FactorProtoCode string `json:"factor_proto_code"` CorrItems []StationGroupInfo `json:"corr_items"`
FactorProtoName string `json:"factor_proto_name"` Data []CorrItemData `json:"data"`
Data map[string]any `json:"data"` CollectTime time.Time `json:"collect_time"`
CollectTime time.Time `json:"collect_time"` CreateTime time.Time `json:"create_time"`
CreateTime time.Time `json:"create_time"` }
// 级联测点数据
type CorrItemData struct {
StationId int `json:"station_id"`
StationName string `json:"station_name"`
IsBase *bool `json:"is_base,omitempty"`
PhyData map[string]interface{} `json:"phy_data"`
ThemeData map[string]interface{} `json:"theme_data"`
} }

5
go.sum

@ -1,5 +1,10 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

10
rpc_node.go

@ -8,3 +8,13 @@ type NodeArgs struct {
Addr string // 网络地址 Addr string // 网络地址
ThingIds []string // 处理的thingId ThingIds []string // 处理的thingId
} }
// RpcReply RPC方法的回复对象
type RpcReply struct {
Result bool
Message string
}
type IRpcData interface {
GetThingId() string
}

81
staionGroup.go

@ -13,33 +13,33 @@ import (
var group36 = ` var group36 = `
RedisKey = group:36 的值 RedisKey = group:36 的值
{ {
"id": 36, "id": 36,
"name": "上游沉降", "name": "上游沉降",
"group_type": "202", "group_type": "202",
"items": [ "items": [
{ {
"sensor": 26, "sensor": 26,
"params_value": { "params_value": {
"base": false "base": false
} }
}, },
{ {
"sensor": 43, "sensor": 43,
"params_value": { "params_value": {
"base": false "base": false
} }
}, },
{ {
"sensor": 192, "sensor": 192,
"params_value": { "params_value": {
"base": true "base": true
} }
} }
], ],
"params": { "params": {
"ref_base": 193, "ref_base": 193,
"ref_point": 23 "ref_point": 23
} }
} }
` `
@ -62,9 +62,18 @@ func (g *StationGroup) AllCorrItems() []GroupItem {
// GetSettlementBaseItem 获取沉降分组的基点 // GetSettlementBaseItem 获取沉降分组的基点
func (g *StationGroup) GetSettlementBaseItem() *GroupItem { func (g *StationGroup) GetSettlementBaseItem() *GroupItem {
for _, item := range g.Items { for i, item := range g.Items {
if item.ParamsValue[settlementParam.Base] == true { if item.ParamsValue[settlementParam.Base] == true {
return &item return &g.Items[i]
}
}
return nil
}
func (g *StationGroup) GetItem(stationId int) *GroupItem {
for i, item := range g.Items {
if item.StationId == stationId {
return &g.Items[i]
} }
} }
return nil return nil
@ -91,8 +100,8 @@ type GroupItem struct {
} }
// GetDoubleParam 返回param的float64值 // GetDoubleParam 返回param的float64值
func (g *GroupItem) GetDoubleParam(key string) (float64, error) { func (gi *GroupItem) GetDoubleParam(key string) (float64, error) {
value := g.ParamsValue[key] value := gi.ParamsValue[key]
switch v := value.(type) { switch v := value.(type) {
case int: case int:
return float64(v), nil return float64(v), nil
@ -113,16 +122,16 @@ func (g *GroupItem) GetDoubleParam(key string) (float64, error) {
} }
// CorrItems 基点的级联参考基点和参考测点 // CorrItems 基点的级联参考基点和参考测点
func (g *GroupItem) CorrItems() []GroupItem { func (gi *GroupItem) CorrItems() []GroupItem {
if g.SubItems == nil { if gi.SubItems == nil {
return []GroupItem{*g} return []GroupItem{*gi}
} }
var result []GroupItem var result []GroupItem
for _, item := range g.SubItems { for _, item := range gi.SubItems {
result = append(result, item.CorrItems()...) result = append(result, item.CorrItems()...)
} }
result = append(result, *g) result = append(result, *gi)
return result return result
} }

40
station.go

@ -37,7 +37,7 @@ type StationData struct {
DeviceCalcData map[string]any DeviceCalcData map[string]any
//测点最终数据(主题数据) //测点最终数据(主题数据)
ThemeData map[string]any ThemeData map[string]any
PyhData map[string]any PhyData map[string]any
CollectTime time.Time CollectTime time.Time
AlarmLevel int AlarmLevel int
} }
@ -52,9 +52,9 @@ func (s *StationData) GetThemeFields() []string {
} }
// GetProtoFields 获取监测原型的监测项 // GetProtoFields 获取监测原型的监测项
func (s *Station) GetProtoFields() []string { func (the *Station) GetProtoFields() []string {
var fields []string var fields []string
for _, protoItem := range s.Info.Factor.Items { for _, protoItem := range the.Info.Factor.Items {
fields = append(fields, protoItem.FieldName) fields = append(fields, protoItem.FieldName)
} }
return fields return fields
@ -86,11 +86,11 @@ func (s *StationData) GetValidThemeData() (map[string]float64, bool) {
return filteredData, len(filteredData) > 0 return filteredData, len(filteredData) > 0
} }
func (s *Station) LogMsg() string { func (the *Station) LogMsg() string {
logTagThing := fmt.Sprintf("[%s:%s][%s:%d]", logTag.Thing, s.Info.ThingId, logTag.Station, s.Info.Id) logTagThing := fmt.Sprintf("[%s:%s][%s:%d]", logTag.Thing, the.Info.ThingId, logTag.Station, the.Info.Id)
var deviceLogs []string var deviceLogs []string
for _, device := range s.Info.Devices { for _, device := range the.Info.Devices {
deviceLogs = append(deviceLogs, device.LogMsg()) deviceLogs = append(deviceLogs, device.LogMsg())
} }
deviceLogStr := strings.Join(deviceLogs, ",") deviceLogStr := strings.Join(deviceLogs, ",")
@ -99,26 +99,26 @@ func (s *Station) LogMsg() string {
} }
// redis序列化 // redis序列化
func (s *Station) MarshalBinary() (data []byte, err error) { func (the *Station) MarshalBinary() (data []byte, err error) {
return json.Marshal(s) return json.Marshal(the)
} }
// redis序列化 // redis序列化
func (s *Station) UnmarshalBinary(data []byte) error { func (the *Station) UnmarshalBinary(data []byte) error {
return json.Unmarshal(data, s) return json.Unmarshal(data, the)
} }
type StationArrayObj []Station type StationArrayObj []Station
// redis序列化 // redis序列化
func (s *StationArrayObj) MarshalBinary() (data []byte, err error) { func (m *StationArrayObj) MarshalBinary() (data []byte, err error) {
return json.Marshal(s) return json.Marshal(m)
} }
// redis序列化 // redis序列化
func (s *StationArrayObj) UnmarshalBinary(data []byte) error { func (m *StationArrayObj) UnmarshalBinary(data []byte) error {
return json.Unmarshal(data, s) return json.Unmarshal(data, m)
} }
type DeviceProto struct { type DeviceProto struct {
@ -150,18 +150,18 @@ type StationInfo struct {
} }
// redis序列化 // redis序列化
func (s *StationInfo) MarshalBinary() (data []byte, err error) { func (m *StationInfo) MarshalBinary() (data []byte, err error) {
return json.Marshal(s) return json.Marshal(m)
} }
// redis序列化 // redis序列化
func (s *StationInfo) UnmarshalBinary(data []byte) error { func (m *StationInfo) UnmarshalBinary(data []byte) error {
return json.Unmarshal(data, s) return json.Unmarshal(data, m)
} }
func (s *StationInfo) GetDeviceIdArray() []string { func (the *StationInfo) GetDeviceIdArray() []string {
var deviceIdArray []string var deviceIdArray []string
for _, device := range s.Devices { for _, device := range the.Devices {
deviceIdArray = append(deviceIdArray, device.IotaDeviceId) deviceIdArray = append(deviceIdArray, device.IotaDeviceId)
} }
return deviceIdArray return deviceIdArray

Loading…
Cancel
Save