neck_ring.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package crontab
  2. import (
  3. "fmt"
  4. "kpt-pasture/config"
  5. "kpt-pasture/model"
  6. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  7. "gitee.com/xuyiping_admin/pkg/xerr"
  8. )
  9. func (e *Entry) NeckRingMergeData() error {
  10. cfg := config.Options()
  11. limit := cfg.NeckRingLimit
  12. if limit <= 0 {
  13. limit = 10000
  14. }
  15. neckRingList := make([]*model.NeckRingOriginal, 0)
  16. if err := e.DB.Model(new(model.NeckRingOriginal)).
  17. Where("h1.is_show = ?", pasturePb.IsShow_No).
  18. Find(&neckRingList).Limit(int(limit)).Error; err != nil {
  19. return xerr.WithStack(err)
  20. }
  21. if len(neckRingList) <= 0 {
  22. return nil
  23. }
  24. neckRingIds := make([]int64, len(neckRingList))
  25. // 更新已处理过的id
  26. defer func() {
  27. if len(neckRingIds) > 0 {
  28. e.DB.Model(new(model.NeckRingOriginal)).
  29. Where("id IN ?", neckRingIds).
  30. Update("is_show", pasturePb.IsShow_Ok)
  31. }
  32. }()
  33. originalMapData := make(map[string]*model.NeckRingOriginal)
  34. // 合并成2个小时的
  35. for i, v := range neckRingList {
  36. if v.ActiveDate == "" {
  37. continue
  38. }
  39. neckRingIds[i] = v.Id
  40. if _, ok := originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)]; ok {
  41. if v.ActiveDateType == pasturePb.ActiveTimeType_Twenty_Minutes {
  42. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Remain += v.Remain
  43. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Intake += v.Intake
  44. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Inactive += v.Inactive
  45. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Gasp += v.Gasp
  46. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Other += v.Other
  47. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Active += v.Active
  48. }
  49. if v.ActiveDateType == pasturePb.ActiveTimeType_Two_Hours {
  50. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Remain *= 6
  51. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Intake *= 6
  52. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Inactive *= 6
  53. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Gasp *= 6
  54. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Other *= 6
  55. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Active *= 6
  56. }
  57. } else {
  58. originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)] = v
  59. }
  60. }
  61. return nil
  62. }