illuminating.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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. "go.uber.org/zap"
  9. "math/rand"
  10. "strconv"
  11. "time"
  12. "github.com/gin-gonic/gin"
  13. "github.com/spf13/viper"
  14. )
  15. type IlluminatingHandler struct {
  16. *Handler
  17. illuminatingService service.IlluminatingService
  18. conf *viper.Viper
  19. }
  20. func NewIlluminatingHandler(
  21. handler *Handler,
  22. illuminatingService service.IlluminatingService,
  23. conf *viper.Viper,
  24. ) *IlluminatingHandler {
  25. return &IlluminatingHandler{
  26. Handler: handler,
  27. illuminatingService: illuminatingService,
  28. conf: conf,
  29. }
  30. }
  31. // 照明系统
  32. func (h *IlluminatingHandler) GetIlluminating(ctx *gin.Context) {
  33. m := make(map[string]any)
  34. runAnaly := make(map[string]any)
  35. var illuminatingDevice []model.IlluminatingDevice
  36. var eventList []model.EventList
  37. var runAnalyse model.RunAnalyse
  38. for i := 0; i < 20; i++ {
  39. device := model.IlluminatingDevice{
  40. Id: i + 1,
  41. DeviceName: model.GetRandomItem(model.IlluminatingDeviceNames),
  42. SwitchStatus: rand.Intn(2),
  43. OnlinePresence: rand.Intn(2),
  44. }
  45. list := model.EventList{
  46. Id: i + 1,
  47. DeviceName: model.GetRandomItem(model.LightingEvents),
  48. DeviceStatus: rand.Intn(2),
  49. EventDate: time.Now().Format("2006-01-02 15:04:05"),
  50. }
  51. eventList = append(eventList, list)
  52. illuminatingDevice = append(illuminatingDevice, device)
  53. }
  54. for i := 0; i < 7; i++ {
  55. date := fmt.Sprintf("2025-5-%v", i+1)
  56. runAnalyse.FaultCount = rand.Intn(100)
  57. runAnalyse.OpenCount = rand.Intn(100)
  58. runAnalyse.OffCount = rand.Intn(100)
  59. runAnaly[date] = runAnalyse
  60. }
  61. m["IlluminatingDevice"] = illuminatingDevice //设备列表
  62. m["DeviceCount"] = rand.Intn(100) //设备总数
  63. m["OpenCount"] = rand.Intn(100) //开启数量
  64. m["OffCount"] = rand.Intn(100) //关闭数量
  65. m["FaultCount"] = rand.Intn(100) //故障数量
  66. m["RunAnalyse"] = runAnaly //运行分析
  67. m["EventList"] = eventList //事件列表
  68. resp.HandleSuccess(ctx, m)
  69. }
  70. // 获取灯光状态
  71. func (h *IlluminatingHandler) GetLightingstatus(ctx *gin.Context) {
  72. // 设置响应头
  73. ctx.Header("Content-Type", "text/event-stream")
  74. ctx.Header("Cache-Control", "no-cache")
  75. ctx.Header("Connection", "keep-alive")
  76. // 监听客户端断开连接
  77. conn := true
  78. notify := ctx.Writer.CloseNotify()
  79. type Response struct {
  80. RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"`
  81. Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"`
  82. Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"`
  83. Data any `json:"data"`
  84. }
  85. stationNo := ctx.Query("id")
  86. if len(stationNo) == 0 {
  87. resp.HandleError(ctx, 1201, "缺少必要参数", nil)
  88. return
  89. }
  90. var response Response
  91. for conn {
  92. select {
  93. case <-notify:
  94. conn = false
  95. fmt.Println("断开连接")
  96. return
  97. default:
  98. // 模拟数据
  99. data := make(map[string]any)
  100. response.Code = 200
  101. response.RequestId = strconv.Itoa(rand.Intn(1000))
  102. response.Msg = "success"
  103. data["设备名称"] = model.GetRandomItem(model.IlluminatingDeviceNames)
  104. data["state"] = rand.Intn(2) // 1开 0关 2故障
  105. response.Data = data
  106. res, _ := json.Marshal(&response)
  107. fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
  108. ctx.Writer.Flush()
  109. time.Sleep(10 * time.Second)
  110. }
  111. }
  112. }
  113. // 修改灯光状态
  114. func (h *IlluminatingHandler) UpdataLightingStatus(ctx *gin.Context) {
  115. id := ctx.PostForm("id")
  116. state := ctx.PostForm("state")
  117. if len(id) == 0 || len(state) == 0 {
  118. resp.HandleError(ctx, 1201, "缺少必要参数", nil)
  119. return
  120. }
  121. resp.HandleSuccess(ctx, id)
  122. }
  123. // GetStatistics 获取灯光统计数据
  124. func (h *IlluminatingHandler) GetStatistics(ctx *gin.Context) {
  125. var statis model.IlluminatingStatistics
  126. statistics, err := h.illuminatingService.GetStatistics()
  127. if err != nil {
  128. h.logger.Error("获取统计信息失败", zap.Any("err", err))
  129. resp.HandleError(ctx, 1201, "获取统计信息失败", nil)
  130. return
  131. }
  132. err = json.Unmarshal(statistics, &statis)
  133. if err != nil {
  134. h.logger.Error("json反序列化失败")
  135. resp.HandleError(ctx, 1202, "json反序列化失败", nil)
  136. return
  137. }
  138. resp.HandleSuccess(ctx, statis)
  139. }
  140. func (h *IlluminatingHandler) GetBaseecic(ctx *gin.Context) {
  141. currentPageStr := ctx.PostForm("currentPage")
  142. currentPage, err := strconv.Atoi(currentPageStr)
  143. device_type_idStr := ctx.PostForm("device_type_id")
  144. device_type_id, err := strconv.Atoi(device_type_idStr)
  145. devices_enabledStr := ctx.PostForm("devices_enabled")
  146. devices_enabled, err := strconv.Atoi(devices_enabledStr)
  147. pageSizeStr := ctx.PostForm("pageSize")
  148. pageSize, err := strconv.Atoi(pageSizeStr)
  149. if err != nil {
  150. resp.HandleError(ctx, 1203, "参数错误", err)
  151. return
  152. }
  153. query := ctx.PostForm("query")
  154. baseecic, err := h.illuminatingService.GetBaseecic(currentPage, device_type_id, devices_enabled, pageSize, query)
  155. if err != nil {
  156. h.logger.Error("获取统计信息失败", zap.Any("err", err))
  157. resp.HandleError(ctx, 1201, "获取统计信息失败", nil)
  158. return
  159. }
  160. resp.HandleSuccess(ctx, baseecic)
  161. }