environmentDataService.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package service
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "iot_manager_service/app/data/dao"
  6. "iot_manager_service/app/data/model"
  7. device "iot_manager_service/app/device/service"
  8. "iot_manager_service/util/cache"
  9. "iot_manager_service/util/common"
  10. "iot_manager_service/util/logger"
  11. "strconv"
  12. "time"
  13. )
  14. var EnvironmentDataService = new(environmentDataService)
  15. type environmentDataService struct{}
  16. func (s *environmentDataService) DataSync() {
  17. devices := device.OptoSensorService.GetAll()
  18. if len(devices) == 0 {
  19. return
  20. }
  21. var environmentDatas []dao.EnvironmentData
  22. for _, d := range devices {
  23. creatTime, values := cache.GetDeviceData(d.Sn)
  24. now := time.Now()
  25. environmentData := dao.EnvironmentData{
  26. DeviceId: d.ID,
  27. PostTime: creatTime,
  28. TenantId: d.TenantId,
  29. CreateTime: time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, time.Local),
  30. }
  31. for key, value := range values {
  32. switch key {
  33. case model.ModelInfoNoise:
  34. environmentData.Noise = value
  35. case model.ModelInfoPM25:
  36. environmentData.Pm25 = value
  37. case model.ModelInfoPM10:
  38. environmentData.Pm10 = value
  39. case model.ModelInfoTemprature:
  40. environmentData.Temperature = value
  41. case model.ModelInfoHumidity:
  42. environmentData.Humidity = value
  43. case model.ModelInfoPressure:
  44. environmentData.Hpa = value
  45. case model.ModelInfowindSpeed:
  46. environmentData.WindSpeed = value
  47. case model.ModelInfoWindDirection:
  48. //environmentData.WindDirection = model.CalculateDirection(value)
  49. environmentData.WindDirection = model.CalculateDirection(value)
  50. case model.ModelInfoRainfall:
  51. environmentData.Rainfall = value
  52. case model.ModelInfoUltravioletRays:
  53. environmentData.Ultraviolet = value
  54. case model.ModelInfoLightIntensity:
  55. environmentData.Illuminance = value
  56. }
  57. }
  58. aqi := common.CountAqi(float64(environmentData.Pm25), float64(environmentData.Pm10))
  59. value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", aqi), 32)
  60. environmentData.Air = float32(value)
  61. environmentData.AirName = common.CalculateAirQuality(float64(environmentData.Air))
  62. // 7点的数据用于天数据
  63. environmentData.CreateDate = environmentData.CreateTime.Format("2006-01-02 15:04:06")
  64. if environmentData.CreateTime.Hour() == 7 {
  65. environmentData.IsDay = 1
  66. environmentData.CreateDate = environmentData.CreateTime.Format("2006-01-02")
  67. }
  68. environmentDatas = append(environmentDatas, environmentData)
  69. b, _ := json.Marshal(&environmentData)
  70. cache.Redis.Set(fmt.Sprintf(model.EnvironmentDataKey, d.ID), string(b), 0)
  71. }
  72. environment := &dao.EnvironmentData{}
  73. err := environment.BatchSave(environmentDatas)
  74. if err != nil {
  75. logger.Logger.Errorf("DataSync Hour.BatchSave err = %s", err.Error())
  76. }
  77. }
  78. func (s *environmentDataService) DayDataSync() {
  79. summary := &dao.EnvironmentDataSummary{}
  80. yesterday := time.Now().Add(-24 * time.Hour)
  81. now := time.Now()
  82. start := time.Date(yesterday.Year(), yesterday.Month(), yesterday.Day(), 0, 0, 0, 0, time.Local)
  83. end := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local)
  84. err := summary.DaySummary(start, end)
  85. if err != nil {
  86. logger.Logger.Errorf("DayDataSync err = %s", err.Error())
  87. }
  88. }
  89. func (s *environmentDataService) Get(deviceId int) *dao.EnvironmentData {
  90. var EnvironmentData dao.EnvironmentData
  91. result, err := cache.Redis.Get(fmt.Sprintf(model.EnvironmentDataKey, deviceId)).Result()
  92. if err == nil {
  93. err = json.Unmarshal([]byte(result), &EnvironmentData)
  94. if err != nil {
  95. return nil
  96. }
  97. return &EnvironmentData
  98. }
  99. EnvironmentData = dao.EnvironmentData{
  100. DeviceId: deviceId,
  101. }
  102. _ = EnvironmentData.Get()
  103. return &EnvironmentData
  104. }
  105. func (s *environmentDataService) GetData(deviceId, isDay int, start, end time.Time) ([]dao.EnvironmentData, error) {
  106. var EnvironmentData dao.EnvironmentData
  107. EnvironmentData = dao.EnvironmentData{
  108. DeviceId: deviceId,
  109. IsDay: isDay,
  110. }
  111. return EnvironmentData.GetByTime(start, end)
  112. }
  113. func (s *environmentDataService) GetScopeData(deviceId int, isDay int, queryType int) (interface{}, error) {
  114. var chartHistoryList []dao.EnvironmentScopeData
  115. var chartNowList []dao.EnvironmentScopeData
  116. var unit string
  117. switch queryType {
  118. case 1:
  119. unit = "aqi"
  120. case 2:
  121. unit = "ug/m³"
  122. case 3:
  123. unit = "ug/m³"
  124. case 4:
  125. unit = "℃"
  126. case 5:
  127. unit = "%"
  128. case 6:
  129. unit = "m/s"
  130. case 7:
  131. unit = "hPa"
  132. case 8:
  133. unit = "dB"
  134. }
  135. var EnvironmentData dao.EnvironmentData
  136. EnvironmentData = dao.EnvironmentData{
  137. DeviceId: deviceId,
  138. IsDay: isDay,
  139. }
  140. chartHistoryList = EnvironmentData.GetEnvironmentScope(queryType, "history")
  141. chartNowList = EnvironmentData.GetEnvironmentScope(queryType, "now")
  142. data := make(map[string]interface{})
  143. data["unit"] = unit
  144. data["chartHistoryList"] = chartHistoryList
  145. data["chartNowList"] = chartNowList
  146. return data, nil
  147. }