dev_screens.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package devices
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "gorm.io/gorm"
  7. "net/http"
  8. "server/dao/devices"
  9. promodel "server/model/common/devices"
  10. "server/model/common/request"
  11. model "server/model/devices"
  12. "server/service/tcp"
  13. "server/utils/logger"
  14. "time"
  15. )
  16. type ScreensService struct{}
  17. func (screensService *ScreensService) GetScreensInfoList(info request.PageInfo) (list interface{}, total int64, err error) {
  18. limit := info.PageSize
  19. offset := info.PageSize * (info.Page - 1)
  20. keyword := info.Keyword
  21. shunt := info.Shunt
  22. screensList, total, err := devices.QueryScreensInfoList(limit, offset, keyword, shunt)
  23. for i, screens := range screensList {
  24. screensList[i].Status = tcp.Devices[screens.Sn].Info.Status
  25. screensList[i].LastOfflineTime = tcp.Devices[screens.Sn].Info.LastOfflineTime
  26. screensList[i].LastOnlineTime = tcp.Devices[screens.Sn].Info.LastOnlineTime
  27. }
  28. return screensList, total, err
  29. }
  30. func (screensService *ScreensService) QueryScreensParms() (list interface{}, err error) {
  31. resolution := devices.Resolution{}
  32. getResolution, err := resolution.GetResolution()
  33. screensSize := devices.ScreensSize{}
  34. getScreensSize, err := screensSize.GetScreensSize()
  35. way := devices.GateWay{}
  36. gatewayList, err := way.PublicGateway()
  37. params := model.RspParams{Resolution: getResolution, ScreensSize: getScreensSize, PubGateway: gatewayList}
  38. return params, err
  39. }
  40. func (screensService *ScreensService) DelScreens(sn string) error {
  41. s := devices.Screens{}
  42. err := s.DelScreens(sn)
  43. delete(tcp.Devices, sn)
  44. return err
  45. }
  46. func (screensService *ScreensService) AddScreens(screens devices.Screens) error {
  47. err := screens.IsExistedByCode()
  48. if !errors.Is(err, gorm.ErrRecordNotFound) {
  49. logger.Logger.Errorf("Create IsExistedByCode \n")
  50. return errors.New("设备编码已存在!")
  51. }
  52. err = screens.AddScreens()
  53. //将该屏信息添加到内存中
  54. tcp.Devices[screens.Sn] = &tcp.Device{Info: screens}
  55. return err
  56. }
  57. func (screensService *ScreensService) UpdateScreens(screens devices.Screens) error {
  58. err := screens.UpdateScreens()
  59. return err
  60. }
  61. /**
  62. 以下是关于设备操作的一些业务方法
  63. */
  64. // 开关屏
  65. func (screensService *ScreensService) SwitchScreens(swatch promodel.SwitchScreens) error {
  66. //判断组网方式 0代表网关 1代表4G模块
  67. err := tcp.SwitchScreen(swatch.Sn, swatch.Flag)
  68. if err != nil {
  69. logger.Logger.Errorf("SwitchScreens faild,error: %v \n", err)
  70. return errors.New("开关屏幕失败!")
  71. }
  72. return nil
  73. }
  74. // 发送内码文字
  75. func (screensService *ScreensService) SendInternalCode(sn string, content []promodel.InternalCodeContent) error {
  76. err := tcp.SendInternalCode(sn, content)
  77. if err != nil {
  78. logger.Logger.Errorf("SendInternalCode faild,error: %v \n", err)
  79. return errors.New("发送内码文字失败!")
  80. }
  81. return nil
  82. }
  83. // 远程喊话
  84. func (screensService *ScreensService) VoiceBroad(sn string, content string) error {
  85. err := tcp.VoiceBroad(sn, content)
  86. if err != nil {
  87. logger.Logger.Errorf("SendInternalCode faild,error: %v \n", err)
  88. return errors.New("远程喊话失败!")
  89. }
  90. return nil
  91. }
  92. // 设置屏幕亮度和声音开关时间
  93. func (screensService *ScreensService) SetBrightAudioLed(sb model.ReqBrightness) error {
  94. //先将白天、晚上亮度 声音开关时间 更新到数据库
  95. screens := devices.Screens{}
  96. err := screens.UpdateBrightAudioLedBySn(sb.Sn, sb.DayBright, sb.NightBright, sb.AudioOn, sb.AudioOff, sb.LedOn, sb.LedOff)
  97. if err != nil {
  98. logger.Logger.Errorf("SetBright faild,error: %v \n", err)
  99. return errors.New("亮度更新数据库失败!")
  100. }
  101. //修改屏幕亮度 判断当前时间是白天还是晚上(立马去更改当前所处时间的亮度)
  102. currentTime := time.Now()
  103. hour := currentTime.Hour()
  104. minute := currentTime.Minute()
  105. // 判断当前时间是否在 8:00 到 18:00 之间
  106. if (hour > 8 || (hour == 8 && minute >= 0)) && (hour < 18) {
  107. //白天
  108. err = tcp.SetBrightness(sb.Sn, sb.DayBright)
  109. if err != nil {
  110. logger.Logger.Errorf("SetBright[白天] faild,error: %v \n", err)
  111. return errors.New("设置白天亮度失败!")
  112. }
  113. } else {
  114. //晚上
  115. err = tcp.SetBrightness(sb.Sn, sb.NightBright)
  116. if err != nil {
  117. logger.Logger.Errorf("SetBright[晚上] faild,error: %v \n", err)
  118. return errors.New("设置晚上亮度失败!")
  119. }
  120. }
  121. //修改时控开关时间
  122. err = SetSwitchClock([]string{sb.SwitchSn}, sb.AudioOn, sb.AudioOff)
  123. if err != nil {
  124. logger.Logger.Errorf("SetSwitchClock faild,error: %v \n", err)
  125. return err
  126. }
  127. return nil
  128. }
  129. func SetSwitchClock(switchSn []string, audioOn, audioOff string) error {
  130. //目标接口的 URL
  131. url := "https://cloud.long-chi.com/lczh_wxapp_api/dev/batchUpdateDeviceTime"
  132. token := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVVUlEIjoiYjFkZDU2MGItM2RmNC00MTg0LWE2NzktODYyM2M1Y2I3ZDVkIiwiSUQiOjI0MCwiVXNlcm5hbWUiOiJzbWFydEludGVyc2VjdGlvbiIsIk5pY2tOYW1lIjoi5pm65oWn6Lev5Y-jIiwiQXV0aG9yaXR5SWQiOjk5OTk5LCJPcGVuaWQiOiIiLCJCdWZmZXJUaW1lIjo4NjQwMCwiaXNzIjoicW1QbHVzIiwiZXhwIjo0MTAyMzI5NjAwLCJhdWQiOiJHVkEiLCJuYmYiOjE3MzE5OTc5MDl9.DTWzlXPNbQ9bT7pX_X_tvJ06oW9bngPLKXsFNb54uV4"
  133. params := model.BatchUpdateDeviceTime{
  134. DeviceSn: switchSn,
  135. TimeSetData: model.DeviceRelay{
  136. TimeCondition1OnTime: audioOn, //声音开时间
  137. TimeCondition1OffTime: audioOff, //声音关时间
  138. },
  139. }
  140. buf, err := json.Marshal(&params)
  141. if err != nil {
  142. logger.Logger.Errorf("Fail to marshal [SetSwitchClock], error: %v \n", err)
  143. return err
  144. }
  145. req, err := http.NewRequest("PUT", url, bytes.NewBuffer(buf))
  146. if err != nil {
  147. logger.Logger.Errorf("Fail to create request [SetSwitchClock], error: %v \n", err)
  148. return err
  149. }
  150. // 在请求头中添加x-token字段,值为<Token>
  151. req.Header.Add("x-token", token)
  152. req.Header.Add("Content-Type", "application/json")
  153. // 创建一个 HTTP 客户端
  154. client := &http.Client{}
  155. // 发送请求
  156. resp, err := client.Do(req)
  157. if err != nil {
  158. logger.Logger.Errorf("Fail to Do request [SetSwitchClock], error: %v \n", err)
  159. return err
  160. }
  161. defer resp.Body.Close()
  162. if resp.StatusCode != 200 {
  163. return errors.New("设置声音时控 fail")
  164. }
  165. return nil
  166. }