energy.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package handler
  2. import (
  3. "city_chips/internal/service"
  4. "city_chips/pkg/helper/resp"
  5. "encoding/json"
  6. "fmt"
  7. "math/rand"
  8. "strconv"
  9. "time"
  10. "github.com/gin-gonic/gin"
  11. "github.com/spf13/viper"
  12. )
  13. type EnergyHandler struct {
  14. *Handler
  15. energyService service.EnergyService
  16. conf *viper.Viper
  17. }
  18. func NewEnergyHandler(
  19. handler *Handler,
  20. energyService service.EnergyService,
  21. conf *viper.Viper,
  22. ) *EnergyHandler {
  23. return &EnergyHandler{
  24. Handler: handler,
  25. energyService: energyService,
  26. conf: conf,
  27. }
  28. }
  29. // GetEnergy 获取能源系统数据
  30. func (h *EnergyHandler) GetEnergy(ctx *gin.Context) {
  31. m := make(map[string]any)
  32. OnedayPowerConsumption := make(map[string]any)
  33. OnedayWaterConsumption := make(map[string]any)
  34. LastYearEnergyConsumption := make(map[string]any)
  35. YearEnergyConsumption := make(map[string]any)
  36. LastYearCarbonEmissions := make(map[string]any)
  37. YearCarbonEmissions := make(map[string]any)
  38. for i := 0; i < 24; i++ {
  39. name := fmt.Sprintf("%v时", i+1)
  40. OnedayPowerConsumption[name] = rand.Intn(100)
  41. OnedayWaterConsumption[name] = rand.Intn(100)
  42. }
  43. for i := 0; i < 12; i++ {
  44. name := fmt.Sprintf("%v月", i+1)
  45. LastYearEnergyConsumption[name] = rand.Intn(1000)
  46. YearEnergyConsumption[name] = rand.Intn(1000)
  47. LastYearCarbonEmissions[name] = rand.Intn(1000)
  48. YearCarbonEmissions[name] = rand.Intn(1000)
  49. }
  50. m["PowerConsumption"] = rand.Intn(1000) //今日实时电耗
  51. m["WaterConsumption"] = rand.Intn(1000) //今日实时水耗
  52. m["YesterdayConsumption"] = rand.Intn(1000) //昨日电耗
  53. m["MonthElectricityConsumption"] = rand.Intn(1000) //本月电耗
  54. m["YesterdayWaterConsumption"] = rand.Intn(1000) //昨日水耗
  55. m["MonthWaterConsumption"] = rand.Intn(1000) //本月水耗
  56. m["OnedayPowerConsumption"] = OnedayPowerConsumption //本月水耗
  57. m["OnedayWaterConsumption"] = OnedayWaterConsumption //本月水耗
  58. m["EnergyCount"] = rand.Intn(10000) //能源总量
  59. m["EnergyIntensity"] = rand.Intn(1000) //能耗强度
  60. m["CarbonEmissions"] = rand.Intn(1000) //碳排总量
  61. m["CarbonIsntensity"] = rand.Intn(1000) //碳排强度
  62. m["LastYearEnergyConsumption"] = LastYearEnergyConsumption //去年能耗
  63. m["YearEnergyConsumption"] = YearEnergyConsumption //今年能耗
  64. m["LastYearCarbonEmissions"] = LastYearCarbonEmissions //去年碳排
  65. m["YearCarbonEmissions"] = YearCarbonEmissions //今年碳排
  66. resp.HandleSuccess(ctx, m)
  67. }
  68. // 水表数据
  69. func (h *EnergyHandler) GetWaterMmeter(ctx *gin.Context) {
  70. // 设置响应头
  71. ctx.Header("Content-Type", "text/event-stream")
  72. ctx.Header("Cache-Control", "no-cache")
  73. ctx.Header("Connection", "keep-alive")
  74. // 监听客户端断开连接
  75. conn := true
  76. notify := ctx.Writer.CloseNotify()
  77. type Response struct {
  78. RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"`
  79. Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"`
  80. Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"`
  81. Data any `json:"data"`
  82. }
  83. stationNo := ctx.Query("id")
  84. if len(stationNo) == 0 {
  85. resp.HandleError(ctx, 1201, "缺少必要参数", nil)
  86. return
  87. }
  88. var response Response
  89. for conn {
  90. select {
  91. case <-notify:
  92. conn = false
  93. fmt.Println("断开连接")
  94. return
  95. default:
  96. // 模拟数据
  97. data := make(map[string]any)
  98. response.Code = 200
  99. response.RequestId = strconv.Itoa(rand.Intn(1000))
  100. response.Msg = "success"
  101. data["今日用水"] = rand.Intn(1000)
  102. data["昨日用水"] = rand.Intn(1000)
  103. data["本月用水量"] = rand.Intn(1000)
  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. }