You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.4 KiB
147 lines
3.4 KiB
1 month ago
|
package common_models
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
"gitea.anxinyun.cn/container/common_models/constant/logTag"
|
||
|
"gitea.anxinyun.cn/container/common_models/constant/settlementParam"
|
||
|
"log"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
var group36 = `
|
||
|
RedisKey = group:36 的值:
|
||
|
{
|
||
|
"id": 36,
|
||
|
"name": "上游沉降",
|
||
|
"group_type": "202",
|
||
|
"items": [
|
||
|
{
|
||
|
"sensor": 26,
|
||
|
"params_value": {
|
||
|
"base": false
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"sensor": 43,
|
||
|
"params_value": {
|
||
|
"base": false
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"sensor": 192,
|
||
|
"params_value": {
|
||
|
"base": true
|
||
|
}
|
||
|
}
|
||
|
],
|
||
|
"params": {
|
||
|
"ref_base": 193,
|
||
|
"ref_point": 23
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
type StationGroup struct {
|
||
|
Id int `json:"id"`
|
||
|
Name string `json:"name"`
|
||
|
GroupType string `json:"group_type"`
|
||
|
Items []GroupItem `json:"items"`
|
||
|
Params map[string]interface{}
|
||
|
}
|
||
|
|
||
|
// AllCorrItems 分组的关联项 = Items + 该分组的级联 ref_base、ref_point(可能有多层)
|
||
|
func (g *StationGroup) AllCorrItems() []GroupItem {
|
||
|
var allCorrItems []GroupItem
|
||
|
for _, item := range g.Items {
|
||
|
allCorrItems = append(allCorrItems, item.CorrItems()...)
|
||
|
}
|
||
|
return allCorrItems
|
||
|
}
|
||
|
|
||
|
// GetSettlementBaseItem 获取沉降分组的基点
|
||
|
func (g *StationGroup) GetSettlementBaseItem() *GroupItem {
|
||
|
for _, item := range g.Items {
|
||
|
if item.ParamsValue[settlementParam.Base] == true {
|
||
|
return &item
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (g *StationGroup) R() string {
|
||
|
return fmt.Sprintf("[%s:%d]", logTag.Group, g.Id)
|
||
|
}
|
||
|
|
||
|
// redis序列化
|
||
|
func (g *StationGroup) MarshalBinary() (data []byte, err error) {
|
||
|
return json.Marshal(g)
|
||
|
}
|
||
|
|
||
|
// redis序列化
|
||
|
func (g *StationGroup) UnmarshalBinary(data []byte) error {
|
||
|
return json.Unmarshal(data, g)
|
||
|
}
|
||
|
|
||
|
type GroupItem struct {
|
||
|
StationId int `json:"sensor"`
|
||
|
ParamsValue map[string]interface{} `json:"params_value"`
|
||
|
SubItems map[string]GroupItem `json:"subItems,omitempty"`
|
||
|
}
|
||
|
|
||
|
// GetDoubleParam 返回param的float64值
|
||
|
func (g *GroupItem) GetDoubleParam(key string) (float64, error) {
|
||
|
value := g.ParamsValue[key]
|
||
|
switch v := value.(type) {
|
||
|
case int:
|
||
|
return float64(v), nil
|
||
|
case float64:
|
||
|
return v, nil
|
||
|
case string:
|
||
|
if floatValue, err := strconv.ParseFloat(v, 64); err == nil {
|
||
|
return floatValue, nil
|
||
|
} else {
|
||
|
log.Printf("[GroupItem.getDoubleParam] key=%s value=%v ,value parse to float64 error: %v\n", key, value, err)
|
||
|
return 0.0, err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var noKeyMsg = fmt.Sprintf("[GroupItem.getDoubleParam] no key=%s\n", key)
|
||
|
log.Println(noKeyMsg)
|
||
|
return 0.0, errors.New(noKeyMsg)
|
||
|
}
|
||
|
|
||
|
// CorrItems 基点的级联参考基点和参考测点
|
||
|
func (g *GroupItem) CorrItems() []GroupItem {
|
||
|
if g.SubItems == nil {
|
||
|
return []GroupItem{*g}
|
||
|
}
|
||
|
|
||
|
var result []GroupItem
|
||
|
for _, item := range g.SubItems {
|
||
|
result = append(result, item.CorrItems()...)
|
||
|
}
|
||
|
result = append(result, *g)
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
// StationGroupInfo 测点的分组信息(对应 ET3.0 的 secure_station_group )
|
||
|
type StationGroupInfo struct {
|
||
|
StationId int `json:"station"`
|
||
|
GroupId int `json:"group"`
|
||
|
Params map[string]interface{} `json:"params"`
|
||
|
Name string `json:"name"`
|
||
|
GroupType string `json:"group_type"`
|
||
|
}
|
||
|
|
||
|
// redis序列化
|
||
|
func (g *StationGroupInfo) MarshalBinary() (data []byte, err error) {
|
||
|
return json.Marshal(g)
|
||
|
}
|
||
|
|
||
|
// redis序列化
|
||
|
func (g *StationGroupInfo) UnmarshalBinary(data []byte) error {
|
||
|
return json.Unmarshal(data, g)
|
||
|
}
|