device.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package admin
  2. import (
  3. "fmt"
  4. "server/dao"
  5. "server/model/common/request"
  6. "server/model/common/response"
  7. "server/utils/data"
  8. "server/utils/logger"
  9. "server/utils/protocol"
  10. "strconv"
  11. "time"
  12. )
  13. type DeviceService struct{}
  14. func (ds *DeviceService) QueryAllDevices() ([]dao.Device, error) {
  15. return dao.QueryAllDevices()
  16. }
  17. func (ds *DeviceService) QueryDeviceList(info request.DeviceSearch) (devices []dao.Device, total int64, err error) {
  18. limit := info.PageInfo.PageSize
  19. offset := info.PageInfo.PageSize * (info.PageInfo.Page - 1)
  20. return dao.QueryDeviceList(info.Sn, info.Name, info.Genre, limit, offset)
  21. }
  22. func (ds *DeviceService) GenerateDeviceFile(id int) (data response.DeviceFileData, err error) {
  23. devices, err := dao.QueryDeviceByTunnelId(id)
  24. if err != nil {
  25. return data, err
  26. }
  27. for _, d := range devices {
  28. if d.DeviceGenre.Type == "环境设备" {
  29. envDev := response.EnvDev{
  30. Name: d.Name,
  31. Sn: d.Sn,
  32. Address: d.Address,
  33. TaskTime: d.TaskTime,
  34. WaitTime: d.WaitTime,
  35. SerialId: d.SerialId,
  36. }
  37. data.EnvDev = append(data.EnvDev, envDev)
  38. } else if d.DeviceGenre.Type == "开关设备" {
  39. lampDev := response.LampDev{
  40. Sn: d.Sn,
  41. Name: d.Name,
  42. Address: d.Address,
  43. RadarId: d.RadarId,
  44. SerialId: d.SerialId,
  45. }
  46. data.LampDev = append(data.LampDev, lampDev)
  47. }
  48. }
  49. return data, nil
  50. }
  51. func (ds *DeviceService) DeviceSwitch(info request.SwitchTunnel) error {
  52. device, err := dao.QueryDeviceByTunnelSnAndRadarId(info.TunnelSn, info.RadarId)
  53. if err != nil {
  54. return err
  55. }
  56. err = dao.UpdateRelayState(device.Sn, info.RelayId, info.State)
  57. if err != nil {
  58. return err
  59. }
  60. var i int
  61. if info.State {
  62. i = 1
  63. } else {
  64. i = 0
  65. }
  66. data1 := strconv.Itoa(info.RadarId) + strconv.Itoa(info.RelayId) + strconv.Itoa(i)
  67. err = MqttService.Publish(MqttService.GetTopic(info.TunnelSn, protocol.TopicSwitchControl), []byte(data1))
  68. if err != nil {
  69. return fmt.Errorf("error updating: %v", err)
  70. }
  71. return nil
  72. }
  73. func (ds *DeviceService) CreateDevice(device dao.Device) error {
  74. tunnel, err := dao.QueryTunnelById(device.TunnelId)
  75. if err != nil {
  76. return err
  77. }
  78. genre, err := dao.QueryDeviceGenreByID(device.Genre)
  79. if err != nil {
  80. return err
  81. }
  82. if genre.Name == tunnel.SwitchType && genre.Type == "开关设备" {
  83. return fmt.Errorf("开关设备需安照隧道需求添加")
  84. }
  85. return device.CreateDevice()
  86. }
  87. func (ds *DeviceService) UpdateDevice(device dao.Device) error {
  88. tunnel, err := dao.QueryTunnelById(device.TunnelId)
  89. if err != nil {
  90. return err
  91. }
  92. if device.DeviceGenre.Name != tunnel.SwitchType && device.DeviceGenre.Type == "开关设备" {
  93. return fmt.Errorf("开关设备需安照隧道需求添加")
  94. }
  95. device.DeviceGenre = dao.DeviceGenre{}
  96. device.Tunnel = dao.Tunnel{}
  97. return device.UpdateDevice()
  98. }
  99. func (ds *DeviceService) DeleteDevice(id int) error {
  100. return dao.DeleteDevice(id)
  101. }
  102. func InductanceStatistics() error {
  103. tunnels, _ := dao.QueryAllTunnels()
  104. for _, tunnel := range tunnels {
  105. device, _ := dao.QueryDGDeviceByTunnelSn(tunnel.TunnelSn)
  106. list, err := dao.QueryInductanceDetailsOneDay(device.Sn)
  107. if err != nil {
  108. return err
  109. }
  110. preprocessData, err := data.PreprocessData(list)
  111. if err != nil {
  112. return err
  113. }
  114. consumption := data.CalculateDailyEnergyConsumption(preprocessData)
  115. err = dao.PowerStatistics{
  116. TunnelSn: tunnel.TunnelSn,
  117. TotalActivePower: consumption,
  118. UploadTime: time.Now().Add(-1).Local().Format("2006-01-02"),
  119. }.CreatePowerStatistics()
  120. logger.Get().Errorf("电感数据统计 隧道:%v 错误%v", tunnel.TunnelSn, err)
  121. }
  122. return nil
  123. }
  124. func (ds *DeviceService) QueryPowerStatisticsBySn(sn string) (powerStatistics []dao.PowerStatistics, err error) {
  125. return dao.QueryPowerStatisticsBySn(sn)
  126. }