dev_screens.go 5.6 KB

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