|
@@ -0,0 +1,133 @@
|
|
|
+package com.gyee.alarm.service;
|
|
|
+
|
|
|
+import com.gyee.alarm.init.CacheContext;
|
|
|
+import com.gyee.alarm.model.auto.ProBasicEquipment;
|
|
|
+import com.gyee.alarm.model.vo.AlarmTag;
|
|
|
+import com.gyee.alarm.service.auto.ISysUserService;
|
|
|
+import com.gyee.alarm.util.DateUtils;
|
|
|
+import com.gyee.alarm.websocket.PushParams;
|
|
|
+import com.gyee.alarm.websocket.WebSocket;
|
|
|
+import com.gyee.common.model.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.websocket.EncodeException;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+
|
|
|
+
|
|
|
+@Service
|
|
|
+public class PushDataSevice {
|
|
|
+ @Resource
|
|
|
+ private ISysUserService sysUserService;
|
|
|
+ @Value("${pushinterval}")
|
|
|
+ private Double pushinterval;
|
|
|
+ @Resource
|
|
|
+ private WebSocket webSocket;
|
|
|
+ public synchronized void pushData(AlarmTag po) throws EncodeException, IOException {
|
|
|
+ ConcurrentHashMap<String, WebSocket> webSocketPushMap = WebSocket.webSocketMap;
|
|
|
+ ConcurrentHashMap<String, PushParams> webSocketPushParamsMap = WebSocket.webSocketParamsMap;
|
|
|
+ if(!webSocketPushMap.isEmpty()){
|
|
|
+ for(String key : webSocketPushMap.keySet()){
|
|
|
+ // 根据ws连接用户ID获取推送参数
|
|
|
+ PushParams pushParams = webSocketPushParamsMap.get(key);
|
|
|
+
|
|
|
+ if(webSocketPushParamsMap.contains(po.getId()))
|
|
|
+ {
|
|
|
+ PushParams pp=webSocketPushParamsMap.get(po.getId());
|
|
|
+
|
|
|
+ double hours= DateUtils.hoursDiff(pp.getStartTime(),new Date());
|
|
|
+ if(hours>pushinterval)
|
|
|
+ {
|
|
|
+ if(checkWtId(key,po.getDeviceId()))
|
|
|
+ {
|
|
|
+ webSocket.sendMessageByUserId(key,po);
|
|
|
+ pp.setStartTime(new Date(po.getTs()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ if(checkWtId(key,po.getDeviceId()))
|
|
|
+ {
|
|
|
+ webSocket.sendMessageByUserId(key,po);
|
|
|
+ PushParams pp=new PushParams();
|
|
|
+ pp.setStartTime(new Date());
|
|
|
+ webSocketPushParamsMap.put(po.getId(),pp);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean checkWtId(String userId,String wtId) {
|
|
|
+
|
|
|
+
|
|
|
+ boolean result=false;
|
|
|
+ List<String> depls = sysUserService.getUserByuserId(Long.valueOf(userId));
|
|
|
+ if (!depls.isEmpty()) {
|
|
|
+ String depId = depls.get(0);
|
|
|
+
|
|
|
+ if (CacheContext.wpwtmap.containsKey(depId)) {
|
|
|
+
|
|
|
+ List<ProBasicEquipment> wtls=CacheContext.wpwtmap.get(depId);
|
|
|
+ for(ProBasicEquipment wt:wtls)
|
|
|
+ {
|
|
|
+ if(wt.getId().equals(wtId))
|
|
|
+ {
|
|
|
+ result=true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } else if (CacheContext.cmwtlsmap.containsKey(depId)) {
|
|
|
+
|
|
|
+ List<ProBasicEquipment> wtls=CacheContext.cmwtlsmap.get(depId);
|
|
|
+ for(ProBasicEquipment wt:wtls)
|
|
|
+ {
|
|
|
+ if( wt.getId().equals(wtId))
|
|
|
+ {
|
|
|
+ result=true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } else if (CacheContext.rgwtlsmap.containsKey(depId)) {
|
|
|
+
|
|
|
+ List<ProBasicEquipment> wtls=CacheContext.rgwtlsmap.get(depId);
|
|
|
+ for(ProBasicEquipment wt:wtls)
|
|
|
+ {
|
|
|
+ if( wt.getId().equals(wtId))
|
|
|
+ {
|
|
|
+ result=true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }else if(depId.equals("0"))
|
|
|
+ {
|
|
|
+ for(ProBasicEquipment wt:CacheContext.wtls)
|
|
|
+ {
|
|
|
+ if( wt.getId().equals(wtId))
|
|
|
+ {
|
|
|
+ result=true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+}
|