device.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package service
  2. import (
  3. "fmt"
  4. "net"
  5. "server/dao"
  6. "server/logger"
  7. "server/modbus"
  8. "server/model"
  9. "server/utils"
  10. )
  11. func SaveData(data []dao.Region) error {
  12. if len(data) == 0 {
  13. return fmt.Errorf("数据不能为空")
  14. }
  15. err := utils.SaveData("static/data.json", data)
  16. if err != nil {
  17. return err
  18. }
  19. // Remove the redundant return err statement.
  20. return nil // Return nil to indicate success
  21. }
  22. func DeviceLoopSwitch(deviceLoop dao.DeviceLoop) error {
  23. data := modbus.DeviceLoopSwitch(deviceLoop.ID, deviceLoop.State)
  24. if conn1, ok := model.ConnectionMap1.Load(deviceLoop.DeviceId); ok {
  25. // 成功找到连接
  26. netConn := conn1.(net.Conn)
  27. _, dev, _ := utils.GetDataByDeviceId(deviceLoop.DeviceId)
  28. if dev.State == 0 {
  29. return fmt.Errorf("设备离线无法操作")
  30. }
  31. err := utils.WriteDevice(data, netConn)
  32. if err != nil {
  33. fmt.Printf("Write device error: %v\n", err)
  34. return err
  35. }
  36. } else {
  37. // 没有找到对应的连接
  38. logger.Get().Printf("Connection for key %s not found", deviceLoop.DeviceId)
  39. }
  40. return nil
  41. }
  42. func DeviceSwitch(req model.DeviceRequest) error {
  43. data := modbus.DeviceSwitch(req.Device.LoopNumber, req.State)
  44. if conn1, ok := model.ConnectionMap1.Load(req.Device.Sn); ok {
  45. // 成功找到连接
  46. netConn := conn1.(net.Conn)
  47. err := utils.WriteDevice(data, netConn)
  48. if err != nil {
  49. logger.Get().Errorf("Write device error: %v\n", err)
  50. return err
  51. }
  52. } else {
  53. // 没有找到对应的连接
  54. logger.Get().Printf("Connection for key %s not found", req.Device.Sn)
  55. }
  56. return nil
  57. }
  58. func DeviceBatchSwitch(req model.DevicesRequest) error {
  59. for _, device := range req.Devices {
  60. if device.State == 0 {
  61. continue
  62. }
  63. data := modbus.DeviceSwitch(device.LoopNumber, req.State)
  64. if conn1, ok := model.ConnectionMap1.Load(device.Sn); ok {
  65. // 成功找到连接
  66. netConn := conn1.(net.Conn)
  67. err := utils.WriteDevice(data, netConn)
  68. if err != nil {
  69. fmt.Printf("Write device error: %v\n", err)
  70. return err
  71. }
  72. } else {
  73. // 没有找到对应的连接
  74. logger.Get().Printf("Connection for key %s not found", device.Sn)
  75. }
  76. }
  77. return nil
  78. }
  79. // GetOnlineDevice 获取在线设备 总共设备 在线率
  80. func GetOnlineDevice() (total, online int) {
  81. devices, err := utils.GetOnlineDevices()
  82. if err != nil {
  83. logger.Get().Errorf("GetOnlineDevices err = %s\n", err.Error())
  84. return
  85. }
  86. allDevices, err := utils.GetAllDevices()
  87. if err != nil {
  88. logger.Get().Errorf("GetAllDevices err = %s\n", err.Error())
  89. return
  90. }
  91. return len(allDevices), len(devices)
  92. }
  93. func GetSunDevices() (devices []dao.Device, err error) {
  94. allDevices, err := utils.GetAllDevices()
  95. if err != nil {
  96. return nil, err
  97. }
  98. for _, device := range allDevices {
  99. if device.IsSun {
  100. devices = append(devices, device)
  101. }
  102. }
  103. return
  104. }
  105. func UpdateRegisterAddress(deviceId string) error {
  106. if conn1, ok := model.ConnectionMap1.Load(deviceId); ok {
  107. // 成功找到连接
  108. netConn := conn1.(net.Conn)
  109. err := utils.WriteDevice(modbus.UpdateRegisterAddress(), netConn)
  110. if err != nil {
  111. logger.Get().Errorf("UpdateRegisterAddress error: %v\n", err)
  112. return err
  113. }
  114. } else {
  115. // 没有找到对应的连接
  116. logger.Get().Printf("Connection for key %s not found", deviceId)
  117. }
  118. return nil
  119. }