2025-11-20 20:58:51 +08:00
|
|
|
package data
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"datart/data/influx"
|
|
|
|
|
"datart/data/postgres"
|
2026-03-04 09:42:18 +08:00
|
|
|
"math"
|
2025-11-20 20:58:51 +08:00
|
|
|
"strings"
|
|
|
|
|
|
|
|
|
|
"github.com/redis/go-redis/v9"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func GenPhasorFields(channel string) []string {
|
|
|
|
|
fields := make([]string, 0, 3)
|
|
|
|
|
|
|
|
|
|
switch {
|
|
|
|
|
case strings.HasPrefix(channel, postgres.ChannelYCPrefix):
|
|
|
|
|
|
|
|
|
|
fieldPrefix := strings.ToLower(channel)
|
|
|
|
|
fields = append(fields,
|
|
|
|
|
fieldPrefix+influx.FieldSuffixAMP,
|
|
|
|
|
fieldPrefix+influx.FieldSuffixPA,
|
|
|
|
|
fieldPrefix+influx.FieldSuffixRMS)
|
|
|
|
|
|
|
|
|
|
case strings.HasPrefix(channel, postgres.ChannelYXPrefix):
|
|
|
|
|
|
|
|
|
|
fields = append(fields, strings.ToLower(channel))
|
|
|
|
|
|
|
|
|
|
case strings.HasPrefix(channel, postgres.ChannelUPrefix):
|
|
|
|
|
|
|
|
|
|
fieldUPrefix := strings.ToLower(channel)
|
|
|
|
|
fields = append(fields,
|
|
|
|
|
fieldUPrefix+influx.FieldSuffixAMP,
|
|
|
|
|
fieldUPrefix+influx.FieldSuffixPA,
|
|
|
|
|
fieldUPrefix+influx.FieldSuffixRMS)
|
|
|
|
|
|
|
|
|
|
case channel == postgres.ChannelP,
|
|
|
|
|
channel == postgres.ChannelQ,
|
|
|
|
|
channel == postgres.ChannelS,
|
|
|
|
|
channel == postgres.ChannelPF,
|
|
|
|
|
channel == postgres.ChannelF,
|
|
|
|
|
channel == postgres.ChannelDF:
|
|
|
|
|
|
|
|
|
|
fields = append(fields, strings.ToLower(channel))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return fields
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-04 09:42:18 +08:00
|
|
|
func ToPrimary(field string, value, iRatio, uRatio float64, iPolar int) float64 {
|
|
|
|
|
switch {
|
|
|
|
|
case field == "p", field == "q":
|
|
|
|
|
return value * iRatio * uRatio * float64(iPolar)
|
|
|
|
|
case strings.HasSuffix(field, "_pa"):
|
|
|
|
|
if iPolar < 0 {
|
|
|
|
|
return value + math.Pi
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
return value * iRatio * float64(iPolar)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return value
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-20 20:58:51 +08:00
|
|
|
type zUnit struct {
|
|
|
|
|
Key string
|
|
|
|
|
Members []redis.Z
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func convertTVsToMenmbers(tvs []influx.TV) []redis.Z {
|
|
|
|
|
members := make([]redis.Z, len(tvs))
|
|
|
|
|
|
|
|
|
|
for i, tv := range tvs {
|
|
|
|
|
members[i].Member = tv.Time
|
|
|
|
|
members[i].Score = tv.Value
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return members
|
|
|
|
|
}
|