123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package crontab
- import (
- "fmt"
- "kpt-pasture/config"
- "kpt-pasture/model"
- "math"
- "gorm.io/gorm"
- pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
- "gitee.com/xuyiping_admin/pkg/xerr"
- )
- // NeckRingMergeData 把
- func (e *Entry) NeckRingMergeData() error {
- cfg := config.Options()
- limit := cfg.NeckRingLimit
- if limit <= 0 {
- limit = 10000
- }
- neckRingList := make([]*model.NeckRingOriginal, 0)
- if err := e.DB.Model(new(model.NeckRingOriginal)).
- Where("h1.is_show = ?", pasturePb.IsShow_No).
- Limit(int(limit)).
- Find(&neckRingList).Error; err != nil {
- return xerr.WithStack(err)
- }
- if len(neckRingList) <= 0 {
- return nil
- }
- neckRingIds := make([]int64, 0)
- originalMapData := make(map[string]*model.NeckRingOriginalMerge)
- // 合并成2个小时的
- for _, v := range neckRingList {
- neckRingIds = append(neckRingIds, v.Id)
- xframeId := int(math.Floor(float64(v.FrameId)/10) * 2)
- mapKey := fmt.Sprintf("%s%s%s%s%d", v.Imei, model.JoinKey, v.ActiveDate, model.JoinKey, xframeId) // 0001-2023-12-04-0 0001-2023-12-03-4
- if _, ok := originalMapData[mapKey]; !ok {
- originalMapData[mapKey] = new(model.NeckRingOriginalMerge)
- }
- v.IsAvgHours()
- originalMapData[mapKey].IsMageData(v)
- }
- // 算平均值
- sumAvgImei := make(map[string]*model.NeckRingOriginalMerge)
- for key, _ := range originalMapData {
- if _, ok := originalMapData[key]; !ok {
- sumAvgImei[key] = new(model.NeckRingOriginalMerge)
- }
- sumAvgImei[key].SumAvg()
- }
- if err := e.DB.Transaction(func(tx *gorm.DB) error {
- // 更新已处理过的id
- if len(neckRingIds) > 0 {
- if err := tx.Model(new(model.NeckRingOriginal)).
- Where("id IN ?", neckRingIds).
- Update("is_show", pasturePb.IsShow_Ok).
- Error; err != nil {
- return xerr.WithStack(err)
- }
- }
- // 插入新的数据,如果存在则合并更新
- newNeckActiveHabitList := model.NeckRingOriginalMap(sumAvgImei).ForMatData(e.GetCowInfoByImei)
- if len(newNeckActiveHabitList) > 0 {
- if err := tx.Create(newNeckActiveHabitList).Error; err != nil {
- return xerr.WithStack(err)
- }
- }
- return nil
- }); err != nil {
- return xerr.WithStack(err)
- }
- return nil
- }
|