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. 20
      esGroupTheme.go
  6. 5
      go.sum
  7. 10
      rpc_node.go
  8. 27
      staionGroup.go
  9. 40
      station.go

16
IotaData.go

@ -54,3 +54,19 @@ type Data struct {
func (the *Data) Success() bool {
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 通用结构体模块
### 开发语言和版本
golang ,版本 go1.22.0
golang ,版本 go1.23.1
### 平台支持
安心云4.0
### 使用方式:
1. 设置 go 环境
set GOPRIVATE=gitea.ngaiot.com
set GOPRIVATE=gitea.anxinyun.cn
2. 查询go 版本
go list -m -versions gitea.anxinyun.cn/container/common_models
如若 GOPRIVATE=gitea.ngaiot.com 生效,则会返回 common_models 的版本信息。
如若无版本信息返回,有可能是没有 DevOps 的权限,也有可能环境变量设置没有生效。
如若 GOPRIVATE=gitea.anxinyun.cn 生效,则会返回 common_models 的版本信息。
如若无版本信息返回,有可能是没有 container 的权限,也有可能环境变量设置没有生效。
异常情况处理:
1. 无 https://gitea.anxinyun.cn/container 访问权限,可以联系下管理员。
1. 无 https://gitea.anxinyun.cn/container 访问权限,可以联系下管理员(刘歆毅)
2. 环境变量设置不生效
解决方法,在GoLand工具中进行设置:
1)打开 Settings
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

17
aggData.go

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

10
dataTrace.go

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

20
esGroupTheme.go

@ -4,14 +4,22 @@ import "time"
// EsGroupTheme 分组主题数据结构体
type EsGroupTheme struct {
Structure int `json:"structure"`
StructId int `json:"struct_id"`
GroupId int `json:"group_id"`
GroupName string `json:"group_name"`
Factor int `json:"factor"`
FactorName string `json:"factor_name"`
FactorProtoCode string `json:"factor_proto_code"`
FactorProtoName string `json:"factor_proto_name"`
Data map[string]any `json:"data"`
GroupType string `json:"group_type"`
TaskId string `json:"task_id"`
CorrItems []StationGroupInfo `json:"corr_items"`
Data []CorrItemData `json:"data"`
CollectTime time.Time `json:"collect_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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
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=
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/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
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 // 网络地址
ThingIds []string // 处理的thingId
}
// RpcReply RPC方法的回复对象
type RpcReply struct {
Result bool
Message string
}
type IRpcData interface {
GetThingId() string
}

27
staionGroup.go

@ -62,9 +62,18 @@ func (g *StationGroup) AllCorrItems() []GroupItem {
// GetSettlementBaseItem 获取沉降分组的基点
func (g *StationGroup) GetSettlementBaseItem() *GroupItem {
for _, item := range g.Items {
for i, item := range g.Items {
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
@ -91,8 +100,8 @@ type GroupItem struct {
}
// GetDoubleParam 返回param的float64值
func (g *GroupItem) GetDoubleParam(key string) (float64, error) {
value := g.ParamsValue[key]
func (gi *GroupItem) GetDoubleParam(key string) (float64, error) {
value := gi.ParamsValue[key]
switch v := value.(type) {
case int:
return float64(v), nil
@ -113,16 +122,16 @@ func (g *GroupItem) GetDoubleParam(key string) (float64, error) {
}
// CorrItems 基点的级联参考基点和参考测点
func (g *GroupItem) CorrItems() []GroupItem {
if g.SubItems == nil {
return []GroupItem{*g}
func (gi *GroupItem) CorrItems() []GroupItem {
if gi.SubItems == nil {
return []GroupItem{*gi}
}
var result []GroupItem
for _, item := range g.SubItems {
for _, item := range gi.SubItems {
result = append(result, item.CorrItems()...)
}
result = append(result, *g)
result = append(result, *gi)
return result
}

40
station.go

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

Loading…
Cancel
Save