123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- package model
- import (
- "fmt"
- "strings"
- pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
- )
- type NeckRingOriginal struct {
- Id int64 `json:"id"`
- PastureId int64 `json:"pastureId"`
- Uuid string `json:"uuid"`
- NeckRingNumber string `json:"neckRingNumber"` // 脖环号 (对应老表字段EID1)
- ActiveDate string `json:"activeDate"` // 采集时间-天(YYYY-MM-DD对应老表字段heatdate)
- Hours int32 `json:"hours"` // 采集时间-小时(hours)
- Frameid int32 `json:"frameid"` // 采集时长(对应老表frameid)
- Rumina int32 `json:"rumina"` // 反刍时长(rumaina)
- Intake int32 `json:"intake"` // 采食时长(intake)
- Inactive int32 `json:"inactive"` // 静止时间(inactive)
- Gasp int32 `json:"gasp"` // 喘息时长(Other)
- High int32 `json:"high"` // 活动量(activitys)
- Active int32 `json:"active"` // 运动时长(High)
- Other int32 `json:"other"` // 其他时长
- FirmwareVersion int32 `json:"firmwareVersion"` // 固件版本(对应老表Version)
- HardwareVersion int32 `json:"hardwareVersion"` // 硬件版本
- Remain int32 `json:"remain"` // 脖环剩余数据量,57之后为上一次上报结果
- Voltage int32 `json:"voltage"` // 电池电压
- RestartReason int32 `json:"restartReason"` // 脖环重启原因 (对应老表HIB)
- Upper int32 `json:"upper"` // 脖环正向比例发射功率
- ActiveDateType pasturePb.ActiveTimeType_Kind `json:"ActiveDateTimeType"`
- IsShow pasturePb.IsShow_Kind `json:"isShow"`
- Imei string `json:"imei"` // 4G模组IMEI(imei)
- ReceiveNumber string `json:"receiveNumber"` // 接收器编号
- CreatedAt int64 `json:"createdAt"`
- UpdatedAt int64 `json:"updatedAt"`
- }
- func (n *NeckRingOriginal) TableName() string {
- return "neck_ring_original"
- }
- func NewNeckRingOriginal(neckLog *Behavior) *NeckRingOriginal {
- activeDateTimeType := pasturePb.ActiveTimeType_Twenty_Minutes
- if neckLog.Frameid%10 == 8 {
- activeDateTimeType = pasturePb.ActiveTimeType_Two_Hours
- }
- return &NeckRingOriginal{
- Uuid: neckLog.UUID,
- PastureId: 1,
- NeckRingNumber: fmt.Sprintf("%d", neckLog.Ecowid),
- Frameid: neckLog.Frameid,
- Rumina: neckLog.Rumina,
- Intake: neckLog.Intake,
- Inactive: neckLog.Inactive,
- Gasp: neckLog.Other,
- High: neckLog.Activitys,
- Active: neckLog.High,
- FirmwareVersion: neckLog.Sver,
- HardwareVersion: neckLog.Hver,
- Remain: neckLog.Remain,
- Voltage: neckLog.BAT,
- RestartReason: neckLog.STATUS,
- Upper: neckLog.UpPer,
- Imei: neckLog.Imei,
- ReceiveNumber: neckLog.Imei,
- ActiveDateType: activeDateTimeType,
- IsShow: pasturePb.IsShow_No,
- }
- }
- const (
- AvgHours = int32(6)
- JoinKey = "/"
- )
- type NeckRingOriginalMerge struct {
- Rumina int32
- Inactive int32
- Active int32
- Intake int32
- Other int32
- High int32
- Gasp int32
- ActiveDate string
- NeckRingNumber string
- XframeId int32
- ActiveDateType pasturePb.ActiveTimeType_Kind
- RecordCount int32
- PastureId int64
- FirmwareVersion int32
- IsShow pasturePb.IsShow_Kind
- }
- func (n *NeckRingOriginalMerge) IsMageData(data *NeckRingOriginal, xframeId int32) {
- avgParam := int32(1)
- if n.ActiveDateType == pasturePb.ActiveTimeType_Two_Hours {
- n.RecordCount = AvgHours
- avgParam = 6
- } else {
- n.RecordCount += 1
- }
- high := data.High * avgParam
- if high > 8800 {
- high = 8800
- }
- n.Rumina += data.Rumina * avgParam
- n.Inactive += data.Inactive * avgParam
- n.Active += data.Active * avgParam
- n.Intake += data.Intake * avgParam
- n.Other += data.Other * avgParam
- n.Gasp += data.Gasp * avgParam
- n.High += high
- n.ActiveDate = data.ActiveDate
- n.NeckRingNumber = data.NeckRingNumber
- n.XframeId = xframeId
- n.PastureId = data.PastureId
- n.FirmwareVersion = data.FirmwareVersion
- n.IsShow = pasturePb.IsShow_No
- }
- func (n *NeckRingOriginalMerge) SumAvg() {
- n.Rumina = int32(float32(n.Rumina) / float32(n.RecordCount) * float32(n.RecordCount))
- n.Inactive = int32(float32(n.Inactive) / float32(n.RecordCount) * float32(n.RecordCount))
- n.Active = int32(float32(n.Active) / float32(n.RecordCount) * float32(n.RecordCount))
- n.Intake = int32(float32(n.Intake) / float32(n.RecordCount) * float32(n.RecordCount))
- n.Other = int32(float32(n.Other) / float32(n.RecordCount) * float32(n.RecordCount))
- n.Gasp = int32(float32(n.Gasp) / float32(n.RecordCount) * float32(n.RecordCount))
- n.High = int32(float32(n.High) / float32(n.RecordCount) * float32(n.RecordCount))
- }
- type NeckRingOriginalMap map[string]*NeckRingOriginalMerge
- func (n NeckRingOriginalMap) ForMatData() []*NeckActiveHabit {
- res := make([]*NeckActiveHabit, 0)
- for key, v := range n {
- keyStrList := strings.Split(key, JoinKey)
- if len(keyStrList) != 3 {
- continue
- }
- res = append(res, NewNeckActiveHabit(v))
- }
- return res
- }
|