websocket_msg.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package services
  2. import (
  3. "eta/eta_api/models"
  4. "eta/eta_api/services/data"
  5. "eta/eta_api/utils"
  6. "github.com/gorilla/websocket"
  7. )
  8. func DealWebSocketMsg(conn *websocket.Conn, adminId int) {
  9. DealEdbInspectionMessage(conn, adminId)
  10. }
  11. // 处理巡检消息
  12. func DealEdbInspectionMessage(conn *websocket.Conn, adminId int) {
  13. messageList, err := data.GetHistoryInspectionMessages(adminId)
  14. if err != nil {
  15. utils.FileLog.Error("获取巡检信息历史失败,err:%s, adminId:%d", err.Error(), adminId)
  16. }
  17. success := make(chan int64, 10)
  18. go func() {
  19. defer close(success)
  20. for i, msg := range messageList {
  21. if i == 0 {
  22. // 多条消息仅发送最新一条
  23. respData, err := data.SendInspectionMessages(adminId, msg)
  24. if err != nil {
  25. utils.FileLog.Error("巡检信息发送失败,err:%s, adminId:%d", err.Error(), adminId)
  26. } else {
  27. resp := models.WebsocketMessageResponse{
  28. MessageType: 1,
  29. Data: respData,
  30. }
  31. err = conn.WriteJSON(resp)
  32. if err != nil {
  33. utils.FileLog.Error("巡检信息发送失败,err:%s, adminId:%d", err.Error(), adminId)
  34. } else {
  35. utils.FileLog.Info("巡检信息发送成功,adminId:%d, messageId:%d", adminId, msg.MessageId)
  36. success <- msg.MessageId
  37. }
  38. }
  39. } else {
  40. success <- msg.MessageId
  41. }
  42. }
  43. }()
  44. go func() {
  45. readList := make([]int64, 0)
  46. for {
  47. msgId, ok := <-success
  48. if !ok {
  49. break
  50. }
  51. readList = append(readList, msgId)
  52. }
  53. _, err = data.ReadEdbInspectionMessageList(readList, adminId)
  54. if err != nil {
  55. utils.FileLog.Error("巡检信息已读失败,err:%s, adminId:%d", err.Error(), adminId)
  56. }
  57. }()
  58. }