|
@@ -28,8 +28,8 @@ var (
|
|
|
calculateIsRunning bool
|
|
|
)
|
|
|
|
|
|
-// NeckRingOriginalMergeData 把脖环数据合并成2个小时的
|
|
|
-func (e *Entry) NeckRingOriginalMergeData() (err error) {
|
|
|
+// NeckRingOriginalMerge 把脖环数据合并成2个小时的
|
|
|
+func (e *Entry) NeckRingOriginalMerge() (err error) {
|
|
|
if ok := e.IsExistCrontabLog(NeckRingOriginal); !ok {
|
|
|
newTime := time.Now()
|
|
|
e.CreateCrontabLog(NeckRingOriginal)
|
|
@@ -43,14 +43,27 @@ func (e *Entry) NeckRingOriginalMergeData() (err error) {
|
|
|
Delete(new(model.NeckActiveHabit))
|
|
|
}
|
|
|
|
|
|
+ pastureList := e.FindPastureList()
|
|
|
+ if pastureList == nil || len(pastureList) == 0 {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, pasture := range pastureList {
|
|
|
+ if err = e.OriginalMergeData(pasture.Id); err != nil {
|
|
|
+ zaplog.Error("NeckRingOriginalMerge", zap.Any("OriginalMergeData", err), zap.Any("pasture", pasture))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (e *Entry) OriginalMergeData(pastureId int64) error {
|
|
|
limit := e.Cfg.NeckRingLimit
|
|
|
if limit <= 0 {
|
|
|
limit = defaultLimit
|
|
|
}
|
|
|
|
|
|
- //createdAt := newTime.Add(-1 * time.Hour)
|
|
|
- neckRingNumber := []string{
|
|
|
- /*"10026", "10027", "10028", "10029", "10030",
|
|
|
+ /*neckRingNumber := []string{
|
|
|
+ "10026", "10027", "10028", "10029", "10030",
|
|
|
"10031", "10032", "10033", "10034", "10035",
|
|
|
"10036", "10037", "10038", "10039", "10040",
|
|
|
"10041", "10042", "10043", "10044", "10046",
|
|
@@ -59,7 +72,7 @@ func (e *Entry) NeckRingOriginalMergeData() (err error) {
|
|
|
"9120007", "9120029", "9120040", "9120123", "9120164", "9120184", "9120219", "9120246", "9120321", "9120355",
|
|
|
"9120359", "9120375", "9120379", "9120391", "9120446", "9120493", "9120497", "9120512", "9120531", "9120533",
|
|
|
"9120540", "9120542", "9120612", "9120614", "9120615", "9120623", "9120625", "9120630", "9120653", "9120662",
|
|
|
- "211670", "9121372", "3204736", "3212694", "3204532", "3214082", "9121667", "3212275", "3210345", "3217879",*/
|
|
|
+ "211670", "9121372", "3204736", "3212694", "3204532", "3214082", "9121667", "3212275", "3210345", "3217879",
|
|
|
"9422", "3206975", "9496", "3204907", "212194", "3211061", "9120840", "3207787", "3210201", "404", "3207104",
|
|
|
"3219173", "3216771", "3216872", "3209614", "3205455", "416", "9121026", "211622", "3207868", "3210340", "9120132",
|
|
|
"3207092", "3209390", "3205872", "3207367", "3219700", "9120022", "211246", "466", "3207565", "3208779", "3204863",
|
|
@@ -112,14 +125,15 @@ func (e *Entry) NeckRingOriginalMergeData() (err error) {
|
|
|
"3215061", "3209099", "3218820", "3212817", "3204659", "3210976", "3213266", "3211716", "3207860", "3213350", "9517",
|
|
|
"3215001", "3217667", "3213039", "3207248", "9510", "3215056", "3218732", "3216053", "3209995", "3215773", "3211035",
|
|
|
"3213295", "3205725", "9464", "3205636",
|
|
|
- }
|
|
|
+ }*/
|
|
|
neckRingList := make([]*model.NeckRingOriginal, 0)
|
|
|
- if err = e.DB.Model(new(model.NeckRingOriginal)).
|
|
|
+ if err := e.DB.Model(new(model.NeckRingOriginal)).
|
|
|
Where("is_show = ?", pasturePb.IsShow_No).
|
|
|
- Where("neck_ring_number IN (?)", neckRingNumber).
|
|
|
- Where("active_date = ?", time.Now().Format(model.LayoutDate2)).
|
|
|
+ //Where("neck_ring_number IN (?)", neckRingNumber).
|
|
|
+ Where("pasture_id = ?", pastureId).
|
|
|
+ //Where("active_date = ?", time.Now().Format(model.LayoutDate2)).
|
|
|
//Where("created_at <= ?", createdAt.Unix()).
|
|
|
- Order("active_date,frameid,neck_ring_number").
|
|
|
+ Order("active_date,neck_ring_number,frameid").
|
|
|
Limit(int(limit)).Find(&neckRingList).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
@@ -128,16 +142,16 @@ func (e *Entry) NeckRingOriginalMergeData() (err error) {
|
|
|
}
|
|
|
|
|
|
// 计算合并
|
|
|
- neckActiveHabitList := e.recalculate(neckRingList)
|
|
|
+ neckActiveHabitList := Recalculate(neckRingList)
|
|
|
if len(neckActiveHabitList) <= 0 {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
for _, habit := range neckActiveHabitList {
|
|
|
//更新脖环牛只相关信息 新数据直接插入
|
|
|
- historyNeckActiveHabit, ct := e.IsExistNeckActiveHabit(habit.NeckRingNumber, habit.HeatDate, habit.Frameid)
|
|
|
+ historyNeckActiveHabit, ct := e.IsExistNeckActiveHabit(pastureId, habit.NeckRingNumber, habit.HeatDate, habit.Frameid)
|
|
|
if ct <= 0 {
|
|
|
- if err = e.DB.Create(habit).Error; err != nil {
|
|
|
+ if err := e.DB.Create(habit).Error; err != nil {
|
|
|
zaplog.Info("NeckRingOriginalMergeData-1",
|
|
|
zap.Any("err", err),
|
|
|
zap.Any("neckActiveHabit", habit),
|
|
@@ -149,11 +163,11 @@ func (e *Entry) NeckRingOriginalMergeData() (err error) {
|
|
|
if newNeckActiveHabit == nil {
|
|
|
continue
|
|
|
}
|
|
|
- if err = e.DB.Model(new(model.NeckActiveHabit)).
|
|
|
+ if err := e.DB.Model(new(model.NeckActiveHabit)).
|
|
|
Select("rumina", "intake", "inactive", "gasp", "other", "high", "active", "is_show", "record_count").
|
|
|
Where("id = ?", historyNeckActiveHabit.Id).
|
|
|
Updates(newNeckActiveHabit).Error; err != nil {
|
|
|
- zaplog.Error("NeckRingOriginalMergeData-3",
|
|
|
+ zaplog.Error("NeckRingOriginalMergeData-2",
|
|
|
zap.Any("err", err),
|
|
|
zap.Any("ct", ct),
|
|
|
zap.Any("historyNeckActiveHabit", historyNeckActiveHabit),
|
|
@@ -162,8 +176,8 @@ func (e *Entry) NeckRingOriginalMergeData() (err error) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if err = e.UpdateNeckRingOriginalIsShow(habit); err != nil {
|
|
|
- zaplog.Error("NeckRingOriginalMergeData-2",
|
|
|
+ if err := e.UpdateNeckRingOriginalIsShow(habit); err != nil {
|
|
|
+ zaplog.Error("NeckRingOriginalMergeData-4",
|
|
|
zap.Any("err", err),
|
|
|
zap.Any("neckActiveHabit", habit),
|
|
|
)
|
|
@@ -314,11 +328,14 @@ func (e *Entry) FirstFilterUpdate(pastureId int64, xToDay *XToday) (processIds [
|
|
|
Where("id BETWEEN ? AND ?", xToDay.LastMaxHabitId, xToDay.CurrMaxHabitId).
|
|
|
Where("pasture_id = ?", pastureId).
|
|
|
Where("is_show = ?", pasturePb.IsShow_No).
|
|
|
+ Where("record_count = ?", model.DefaultRecordCount).
|
|
|
Where(e.DB.Where("high >= ?", xToDay.High).Or("rumina >= ?", xToDay.Rumina)).
|
|
|
Order("heat_date,neck_ring_number,frameid").
|
|
|
- Limit(int(defaultLimit)).Find(&newNeckActiveHabitList).Error; err != nil {
|
|
|
+ Limit(int(defaultLimit)).
|
|
|
+ Find(&newNeckActiveHabitList).Error; err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
+
|
|
|
// 活动量滤波
|
|
|
for _, v := range newNeckActiveHabitList {
|
|
|
// 过滤牛只未绑定的脖环的数据
|
|
@@ -333,6 +350,8 @@ func (e *Entry) FirstFilterUpdate(pastureId int64, xToDay *XToday) (processIds [
|
|
|
frameId = 11
|
|
|
heatDateParse, _ := time.Parse(model.LayoutDate2, heatDate)
|
|
|
heatDate = heatDateParse.AddDate(0, 0, -1).Format(model.LayoutDate2)
|
|
|
+ } else {
|
|
|
+ frameId -= 1
|
|
|
}
|
|
|
|
|
|
firstFilterData := e.FindFirstFilter(pastureId, v.NeckRingNumber, heatDate, frameId)
|
|
@@ -366,7 +385,6 @@ func (e *Entry) FirstFilterUpdate(pastureId int64, xToDay *XToday) (processIds [
|
|
|
}
|
|
|
|
|
|
processIds = append(processIds, v.Id)
|
|
|
-
|
|
|
// 更新过滤值 // todo 记得更新胎次为牛只胎次,现在为了测试特意改成0
|
|
|
if err = e.DB.Model(new(model.NeckActiveHabit)).
|
|
|
Select("filter_high", "filter_rumina", "filter_chew", "cow_id", "lact", "calving_age", "ear_number").
|
|
@@ -703,8 +721,8 @@ func (e *Entry) UpdateNeckRingOriginalIsShow(habit *model.NeckActiveHabit) error
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// recalculate 合并计算
|
|
|
-func (e *Entry) recalculate(neckRingList []*model.NeckRingOriginal) []*model.NeckActiveHabit {
|
|
|
+// Recalculate 合并计算
|
|
|
+func Recalculate(neckRingList []*model.NeckRingOriginal) []*model.NeckActiveHabit {
|
|
|
originalMapData := make(map[string]*model.NeckRingOriginalMerge)
|
|
|
// 合并成2个小时的
|
|
|
for _, v := range neckRingList {
|
|
@@ -721,10 +739,10 @@ func (e *Entry) recalculate(neckRingList []*model.NeckRingOriginal) []*model.Nec
|
|
|
// 算平均值
|
|
|
for k, v := range originalMapData {
|
|
|
// 过滤掉合并后不等于6条数据
|
|
|
- if v.RecordCount > 6 {
|
|
|
+ if v.RecordCount > model.DefaultRecordCount {
|
|
|
delete(originalMapData, k)
|
|
|
continue
|
|
|
- } else if v.RecordCount < 6 {
|
|
|
+ } else if v.RecordCount < model.DefaultRecordCount {
|
|
|
currMaxXframeId := util.FrameIdMapReverse[int32(currTime.Hour())]
|
|
|
activeDateString := fmt.Sprintf("%s %02d:00:00", v.ActiveDate, v.XframeId*2+1)
|
|
|
activeDate, _ := time.Parse(model.LayoutTime, activeDateString)
|
|
@@ -756,7 +774,8 @@ func (e *Entry) againRecalculate(data *model.NeckActiveHabit) *model.NeckActiveH
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
- newDataList := e.recalculate(originalList)
|
|
|
+ newDataList := Recalculate(originalList)
|
|
|
+ zaplog.Info("againRecalculate", zap.Any("data", data), zap.Any("newDataList", newDataList))
|
|
|
if len(newDataList) != 1 {
|
|
|
return nil
|
|
|
}
|