temperature.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package handler
  2. import (
  3. "city_chips/internal/model"
  4. "city_chips/internal/service"
  5. "city_chips/pkg/helper/resp"
  6. "encoding/json"
  7. "fmt"
  8. "github.com/gin-gonic/gin"
  9. "github.com/spf13/viper"
  10. "github.com/tidwall/gjson"
  11. "go.uber.org/zap"
  12. "strconv"
  13. "time"
  14. )
  15. type TemperatureHandler struct {
  16. *Handler
  17. temperatureService service.TemperatureService
  18. conf *viper.Viper
  19. }
  20. func NewTemperatureHandler(
  21. handler *Handler,
  22. temperatureService service.TemperatureService,
  23. conf *viper.Viper,
  24. ) *TemperatureHandler {
  25. return &TemperatureHandler{
  26. Handler: handler,
  27. temperatureService: temperatureService,
  28. conf: conf,
  29. }
  30. }
  31. func (h *TemperatureHandler) GetTemperature(ctx *gin.Context) {
  32. m := make(map[string]any)
  33. var alarmstatistics model.AlarmStatistics
  34. var alarmCount model.AlarmCount
  35. var statis model.IlluminatingStatistics
  36. now := time.Now()
  37. sevenDaysAgo := now.AddDate(0, 0, -30).Format("2006-01-02")
  38. format := now.Format("2006-01-02")
  39. alarmStatistics, err := h.temperatureService.GetAlarmStatistics(sevenDaysAgo, format)
  40. if err != nil {
  41. h.logger.Error("获取告警信息统计失败", zap.Any("err", err))
  42. resp.HandleError(ctx, 1204, "获取告警信息统计失败", nil)
  43. return
  44. }
  45. err = json.Unmarshal(alarmStatistics, &alarmstatistics)
  46. if err != nil {
  47. h.logger.Error("json反序列化失败")
  48. resp.HandleError(ctx, 1205, "json序列化失败", nil)
  49. return
  50. }
  51. alarm, err := h.temperatureService.GetAlarm(1, 100)
  52. if err != nil {
  53. h.logger.Error("获取告警信息失败", zap.Any("err", err))
  54. resp.HandleError(ctx, 1203, "获取告警信息失败", nil)
  55. return
  56. }
  57. err = json.Unmarshal(alarm, &alarmCount)
  58. if err != nil {
  59. h.logger.Error("json反序列化失败")
  60. resp.HandleError(ctx, 1205, "json序列化失败", nil)
  61. return
  62. }
  63. statistics, err := h.temperatureService.GetStatistics()
  64. if err != nil {
  65. h.logger.Error("获取统计信息失败", zap.Any("err", err))
  66. resp.HandleError(ctx, 1201, "获取统计信息失败", nil)
  67. return
  68. }
  69. err = json.Unmarshal(statistics, &statis)
  70. if err != nil {
  71. h.logger.Error("json反序列化失败")
  72. resp.HandleError(ctx, 1202, "json反序列化失败", nil)
  73. return
  74. }
  75. for i, _ := range alarmstatistics.TimeStatistics {
  76. s := alarmstatistics.TimeStatistics[i].TimeDay.Format("2006-01-02 15:04:05")
  77. alarmstatistics.TimeStatistics[i].Time = s
  78. }
  79. baseecic, err := h.temperatureService.GetBaseecic(1, 0, -1, 0, statis.DeviceCount, "", "")
  80. if err != nil {
  81. h.logger.Error("获取 basement_ecic 列表失败", zap.Any("err", err))
  82. resp.HandleError(ctx, 1202, "获取 basement_ecic 列表失败", nil)
  83. return
  84. }
  85. deviceStatistics, err := h.temperatureService.GetGatewayStatistics()
  86. if err != nil {
  87. h.logger.Error("获取设备统计失败", zap.Any("err", err))
  88. resp.HandleError(ctx, 1202, "获取设备统计失败", nil)
  89. return
  90. }
  91. m["temperatureDevice"] = baseecic.Devices //设备列表
  92. m["DeviceCount"] = statis.DeviceCount //设备总数
  93. m["GatewayCount"] = statis.GatewayCount //网关数量
  94. m["GatewayOnline"] = deviceStatistics.GatewayOnline //网关在线数量
  95. m["GatewayOffline"] = deviceStatistics.GatewayOffline //网关离线数量
  96. m["DeviceOnLine"] = deviceStatistics.DeviceOnline //设备在线数量
  97. m["DeviceOffLine"] = deviceStatistics.DeviceOffline //设备离线数量
  98. m["AlarmCount"] = statis.AlarmCount //报警数量
  99. m["RunAnalyse"] = alarmstatistics.TimeStatistics //报警统计分析
  100. m["EventList"] = alarmCount //报警事件
  101. resp.HandleSuccess(ctx, m)
  102. }
  103. // GetBaseecic 获取设备列表
  104. func (h *TemperatureHandler) GetBaseecic(ctx *gin.Context) {
  105. currentPageStr := ctx.PostForm("currentPage")
  106. currentPage, err := strconv.Atoi(currentPageStr)
  107. device_type_idStr := ctx.PostForm("device_type_id")
  108. device_type_id, err := strconv.Atoi(device_type_idStr)
  109. devices_enabledStr := ctx.PostForm("devices_enabled")
  110. devices_enabled, err := strconv.Atoi(devices_enabledStr)
  111. pageSizeStr := ctx.PostForm("pageSize")
  112. gatewayStr := ctx.PostForm("gateway_id")
  113. gateway_id, err := strconv.Atoi(gatewayStr)
  114. pageSize, err := strconv.Atoi(pageSizeStr)
  115. if err != nil {
  116. resp.HandleError(ctx, 1203, "参数错误", err)
  117. return
  118. }
  119. query := ctx.PostForm("query")
  120. baseecic, err := h.temperatureService.GetBaseecic(currentPage, device_type_id, devices_enabled, gateway_id, pageSize, query, "")
  121. if err != nil {
  122. h.logger.Error("获取统计信息失败", zap.Any("err", err))
  123. resp.HandleError(ctx, 1201, "获取统计信息失败", nil)
  124. return
  125. }
  126. resp.HandleSuccess(ctx, baseecic)
  127. }
  128. // GetgatewayFind 获取网关信息
  129. func (h *TemperatureHandler) GetgatewayFind(ctx *gin.Context) {
  130. gateway, err := h.temperatureService.GetgatewayFind()
  131. if err != nil {
  132. h.logger.Error("获取统计信息失败", zap.Any("err", err))
  133. resp.HandleError(ctx, 1201, "获取统计信息失败", nil)
  134. return
  135. }
  136. resp.HandleSuccess(ctx, gateway)
  137. h.logger.Info("获取统计信息成功", zap.Any("control", gateway))
  138. }
  139. // GetTemperatureInfo 获取温度详情
  140. func (h *TemperatureHandler) GetTemperatureInfo(ctx *gin.Context) {
  141. // 设置响应头
  142. ctx.Header("Content-Type", "text/event-stream")
  143. ctx.Header("Cache-Control", "no-cache")
  144. ctx.Header("Connection", "keep-alive")
  145. // 监听客户端断开连接
  146. conn := true
  147. notify := ctx.Writer.CloseNotify()
  148. var response model.Response
  149. m := make(map[string]any)
  150. devices_udid := ctx.Query("id")
  151. for conn {
  152. select {
  153. case <-notify:
  154. conn = false
  155. fmt.Println("断开连接")
  156. return
  157. default:
  158. baseecic, err := h.temperatureService.GetBaseecic(1, 0, -1, 0, 1, "", devices_udid)
  159. if err != nil {
  160. h.logger.Error("获取设备信息详情失败")
  161. response.Code = 1203
  162. response.Msg = "获取设备信息详情失败"
  163. response.Data = nil
  164. res, _ := json.Marshal(&response)
  165. fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
  166. ctx.Writer.Flush()
  167. conn = false
  168. return
  169. }
  170. m["设备名称"] = baseecic.Devices[0].DevicesName
  171. m["温度设定上限"] = gjson.Get(baseecic.Devices[0].DevicesJsonObject, "temp_max").Num
  172. m["温度设定下限"] = gjson.Get(baseecic.Devices[0].DevicesJsonObject, "temp_min").Num
  173. m["当前温度"] = gjson.Get(baseecic.Devices[0].DevicesJsonObject, "dis_temp").Num
  174. response.Code = 200
  175. response.Msg = "获取设备信息成功"
  176. response.Data = m
  177. res, _ := json.Marshal(&response)
  178. fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
  179. ctx.Writer.Flush()
  180. time.Sleep(10 * time.Second)
  181. }
  182. }
  183. }