illuminating.go 3.6 KB

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