PushDataSevice.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package com.gyee.alarm.service;
  2. import com.gyee.alarm.init.CacheContext;
  3. import com.gyee.alarm.model.auto.ProBasicEquipment;
  4. import com.gyee.alarm.model.vo.AlarmTag;
  5. import com.gyee.alarm.service.auto.ISysUserService;
  6. import com.gyee.alarm.util.DateUtils;
  7. import com.gyee.alarm.websocket.PushParams;
  8. import com.gyee.alarm.websocket.WebSocket;
  9. import com.gyee.common.model.StringUtils;
  10. import org.springframework.beans.factory.annotation.Value;
  11. import org.springframework.stereotype.Service;
  12. import javax.annotation.Resource;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.websocket.EncodeException;
  15. import java.io.IOException;
  16. import java.util.ArrayList;
  17. import java.util.Date;
  18. import java.util.List;
  19. import java.util.concurrent.ConcurrentHashMap;
  20. @Service
  21. public class PushDataSevice {
  22. @Resource
  23. private ISysUserService sysUserService;
  24. @Value("${pushinterval}")
  25. private Double pushinterval;
  26. @Resource
  27. private WebSocket webSocket;
  28. public void pushData(AlarmTag po) throws EncodeException, IOException {
  29. ConcurrentHashMap<String, WebSocket> webSocketPushMap = WebSocket.webSocketMap;
  30. ConcurrentHashMap<String, PushParams> webSocketPushParamsMap = WebSocket.webSocketParamsMap;
  31. if(!webSocketPushMap.isEmpty()){
  32. for(String key : webSocketPushMap.keySet()){
  33. // 根据ws连接用户ID获取推送参数
  34. PushParams pushParams = webSocketPushParamsMap.get(key);
  35. synchronized(po.getId())
  36. {
  37. if(webSocketPushParamsMap.contains(po.getId()))
  38. {
  39. PushParams pp=webSocketPushParamsMap.get(po.getId());
  40. double hours= DateUtils.hoursDiff(pp.getStartTime(),new Date());
  41. if(hours>pushinterval)
  42. {
  43. if(checkWtId(key,po.getDeviceId()))
  44. {
  45. webSocket.sendMessageByUserId(key,po);
  46. pp.setStartTime(new Date(po.getTs()));
  47. }
  48. }
  49. }else
  50. {
  51. if(checkWtId(key,po.getDeviceId()))
  52. {
  53. webSocket.sendMessageByUserId(key,po);
  54. PushParams pp=new PushParams();
  55. pp.setStartTime(new Date());
  56. webSocketPushParamsMap.put(po.getId(),pp);
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }
  63. private boolean checkWtId(String userId,String wtId) {
  64. boolean result=false;
  65. List<String> depls = sysUserService.getUserByuserId(Long.valueOf(userId));
  66. if (!depls.isEmpty()) {
  67. String depId = depls.get(0);
  68. if (CacheContext.wpwtmap.containsKey(depId)) {
  69. List<ProBasicEquipment> wtls=CacheContext.wpwtmap.get(depId);
  70. for(ProBasicEquipment wt:wtls)
  71. {
  72. if(wt.getId().equals(wtId))
  73. {
  74. result=true;
  75. break;
  76. }
  77. }
  78. } else if (CacheContext.cmwtlsmap.containsKey(depId)) {
  79. List<ProBasicEquipment> wtls=CacheContext.cmwtlsmap.get(depId);
  80. for(ProBasicEquipment wt:wtls)
  81. {
  82. if( wt.getId().equals(wtId))
  83. {
  84. result=true;
  85. break;
  86. }
  87. }
  88. } else if (CacheContext.rgwtlsmap.containsKey(depId)) {
  89. List<ProBasicEquipment> wtls=CacheContext.rgwtlsmap.get(depId);
  90. for(ProBasicEquipment wt:wtls)
  91. {
  92. if( wt.getId().equals(wtId))
  93. {
  94. result=true;
  95. break;
  96. }
  97. }
  98. }else if(depId.equals("0"))
  99. {
  100. for(ProBasicEquipment wt:CacheContext.wtls)
  101. {
  102. if( wt.getId().equals(wtId))
  103. {
  104. result=true;
  105. break;
  106. }
  107. }
  108. }
  109. }
  110. return result;
  111. }
  112. }