|
@@ -4,12 +4,9 @@ import (
|
|
|
"kpt-pasture/model"
|
|
|
"kpt-pasture/util"
|
|
|
"math"
|
|
|
- "time"
|
|
|
|
|
|
pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
|
|
|
|
|
|
- "gitee.com/xuyiping_admin/pkg/xerr"
|
|
|
-
|
|
|
"gitee.com/xuyiping_admin/pkg/logger/zaplog"
|
|
|
"go.uber.org/zap"
|
|
|
)
|
|
@@ -113,57 +110,6 @@ func (e *Entry) isEventCowLog(pastureId int64, CowId int64, startAt, endAt int64
|
|
|
return count > 0
|
|
|
}
|
|
|
|
|
|
-func (e *Entry) NeckRingHealthWarning() error {
|
|
|
- pastureList := e.FindPastureList()
|
|
|
- if pastureList == nil || len(pastureList) == 0 {
|
|
|
- return nil
|
|
|
- }
|
|
|
- for _, pasture := range pastureList {
|
|
|
-
|
|
|
- e.DB.Model(new(model.NeckRingHealthWarning)).
|
|
|
- Where("pasture_id = ?", pasture.Id).
|
|
|
- Delete(new(model.NeckRingHealthWarning))
|
|
|
-
|
|
|
- if err := e.UpdateNeckRingHealth(pasture.Id); err != nil {
|
|
|
- zaplog.Error("NeckRingHealthWarning",
|
|
|
- zap.Any("UpdateNeckRingHealth", err),
|
|
|
- zap.Any("pasture", pasture),
|
|
|
- )
|
|
|
- }
|
|
|
- }
|
|
|
- return nil
|
|
|
-}
|
|
|
-
|
|
|
-func (e *Entry) UpdateNeckRingHealth(pastureId int64) error {
|
|
|
- neckRingConfigureList, err := e.FindSystemNeckRingConfigure(pastureId)
|
|
|
- if err != nil {
|
|
|
- return xerr.WithStack(err)
|
|
|
- }
|
|
|
- healthValue := int32(0)
|
|
|
- for _, v := range neckRingConfigureList {
|
|
|
- if v.Name != model.HealthWarning {
|
|
|
- continue
|
|
|
- }
|
|
|
- healthValue = int32(v.Value)
|
|
|
- }
|
|
|
-
|
|
|
- newNeckRingHealthWarningList, err := e.FindNewNeckRingHealthWarning(pastureId, healthValue)
|
|
|
- if err != nil {
|
|
|
- return xerr.WithStack(err)
|
|
|
- }
|
|
|
-
|
|
|
- if len(newNeckRingHealthWarningList) > 0 {
|
|
|
- if err = e.DB.Model(new(model.NeckRingHealthWarning)).
|
|
|
- Create(&newNeckRingHealthWarningList).Error; err != nil {
|
|
|
- zaplog.Error("UpdateNeckRingHealth",
|
|
|
- zap.Any("error", err),
|
|
|
- zap.Any("newNeckRingHealthWarningList", newNeckRingHealthWarningList),
|
|
|
- )
|
|
|
- }
|
|
|
- }
|
|
|
- return nil
|
|
|
-}
|
|
|
-
|
|
|
func calculateNewScore(data *model.NeckRingHealth) int32 {
|
|
|
otherScore := int32(0)
|
|
|
|
|
@@ -206,85 +152,3 @@ func calculateMilkFilterScore(milkFilter int32, maxHigh int32) int32 {
|
|
|
|
|
|
return result
|
|
|
}
|
|
|
-
|
|
|
-func (e *Entry) FindNewNeckRingHealthWarning(pastureId int64, healthValue int32) ([]*model.NeckRingHealthWarning, error) {
|
|
|
- nowTime := time.Now().Local()
|
|
|
- //endTime := nowTime.Format(model.LayoutDate2)
|
|
|
- startTime := nowTime.AddDate(0, 0, -1).Format(model.LayoutDate2)
|
|
|
- neckRingHealthList := make([]*model.NeckRingHealth, 0)
|
|
|
- if err := e.DB.Model(new(model.NeckRingHealth)).
|
|
|
- Select(`MAX(id) AS id,heat_date,neck_ring_number,cow_id,score,max_high,created_at,min_high,min_chew,
|
|
|
- min_intake,sum_chew,before_three_sum_chew`).
|
|
|
- Where("pasture_id = ?", pastureId).
|
|
|
- Where("heat_date >= ?", startTime).
|
|
|
- Group("cow_id").
|
|
|
- Find(&neckRingHealthList).Error; err != nil {
|
|
|
- return nil, xerr.WithStack(err)
|
|
|
- }
|
|
|
-
|
|
|
- newNeckRingHealthWarningList := make([]*model.NeckRingHealthWarning, 0)
|
|
|
- for _, v := range neckRingHealthList {
|
|
|
- if v.HeatDate == "" {
|
|
|
- continue
|
|
|
- }
|
|
|
- cowInfo, err := e.GetCowById(pastureId, v.CowId)
|
|
|
- if err != nil || cowInfo == nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- newScore := calculateNewScore(v)
|
|
|
- zaplog.Info("calculateNewScore",
|
|
|
- zap.Any("newScore", newScore),
|
|
|
- zap.Any("v", v),
|
|
|
- zap.Any("healthValue", healthValue),
|
|
|
- zap.Any("cowInfo", cowInfo),
|
|
|
- )
|
|
|
- if newScore > healthValue {
|
|
|
- continue
|
|
|
- }
|
|
|
-
|
|
|
- if e.HistoryNeckRingHealthWarning(pastureId, cowInfo.NeckRingNumber, v.HeatDate) {
|
|
|
- continue
|
|
|
- }
|
|
|
-
|
|
|
- if e.FindNeckRingError(pastureId, cowInfo.NeckRingNumber) {
|
|
|
- continue
|
|
|
- }
|
|
|
-
|
|
|
- newNeckRingHealthWarning := model.NewNeckRingHealthWarning(pastureId, v, cowInfo, newScore)
|
|
|
- zaplog.Info("newNeckRingHealthWarning",
|
|
|
- zap.Any("newNeckRingHealthWarning", newNeckRingHealthWarning),
|
|
|
- zap.Any("pastureId", pastureId),
|
|
|
- zap.Any("neckRingHealth", v),
|
|
|
- zap.Any("cowInfo", cowInfo),
|
|
|
- zap.Any("newScore", newScore),
|
|
|
- )
|
|
|
- newNeckRingHealthWarningList = append(newNeckRingHealthWarningList, newNeckRingHealthWarning)
|
|
|
- }
|
|
|
- return newNeckRingHealthWarningList, nil
|
|
|
-}
|
|
|
-
|
|
|
-func (e *Entry) HistoryNeckRingHealthWarning(pastureId int64, neckRingNumber string, heatDate string) bool {
|
|
|
- var count int64
|
|
|
- if err := e.DB.Model(new(model.NeckRingHealthWarning)).
|
|
|
- Where("pasture_id = ?", pastureId).
|
|
|
- Where("neck_ring_number = ?", neckRingNumber).
|
|
|
- Where("heat_date = ?", heatDate).
|
|
|
- Where("is_show = ?", pasturePb.IsShow_Ok).
|
|
|
- Count(&count).Error; err != nil {
|
|
|
- return false
|
|
|
- }
|
|
|
- return count > 0
|
|
|
-}
|
|
|
-
|
|
|
-func (e *Entry) FindNeckRingError(pastureId int64, neckRingNumber string) bool {
|
|
|
- var count int64
|
|
|
- if err := e.DB.Model(new(model.NeckRing)).
|
|
|
- Where("pasture_id = ?", pastureId).
|
|
|
- Where("neck_ring_number = ?", neckRingNumber).
|
|
|
- Where("status = ?", pasturePb.IsShow_No).
|
|
|
- Where("error_kind = ?", pasturePb.NeckRingNumberError_Suspected_Fall_Off).
|
|
|
- Count(&count).Error; err != nil {
|
|
|
- return false
|
|
|
- }
|
|
|
- return count > 0
|
|
|
-}
|