|
|
@@ -25,11 +25,9 @@ import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.InitializingBean;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
-import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
-import org.springframework.util.ObjectUtils;
|
|
|
|
|
|
import javax.sip.InvalidArgumentException;
|
|
|
import javax.sip.RequestEvent;
|
|
|
@@ -110,7 +108,6 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("未处理的异常 ", e);
|
|
|
}
|
|
|
- boolean runed = !taskQueue.isEmpty();
|
|
|
taskQueue.offer(new HandlerCatchData(evt, null, null));
|
|
|
}
|
|
|
@Scheduled(fixedRate = 200) //每200毫秒执行一次
|
|
|
@@ -158,108 +155,6 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 处理MobilePosition移动位置Notify
|
|
|
- *
|
|
|
- * @param evt
|
|
|
- */
|
|
|
- @Async("taskExecutor")
|
|
|
- public void processNotifyMobilePosition(RequestEvent evt) {
|
|
|
- try {
|
|
|
- FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
|
|
|
- String deviceId = SipUtils.getUserIdFromFromHeader(fromHeader);
|
|
|
- // 回复 200 OK
|
|
|
- Element rootElement = getRootElement(evt);
|
|
|
- if (rootElement == null) {
|
|
|
- logger.error("处理MobilePosition移动位置Notify时未获取到消息体,{}", evt.getRequest());
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- MobilePosition mobilePosition = new MobilePosition();
|
|
|
- mobilePosition.setCreateTime(DateUtil.getNow());
|
|
|
-
|
|
|
- Element deviceIdElement = rootElement.element("DeviceID");
|
|
|
- String channelId = deviceIdElement.getTextTrim().toString();
|
|
|
- Device device = redisCatchStorage.getDevice(deviceId);
|
|
|
-
|
|
|
- if (device == null) {
|
|
|
- device = redisCatchStorage.getDevice(channelId);
|
|
|
- if (device == null) {
|
|
|
- // 根据通道id查询设备Id
|
|
|
- List<Device> deviceList = deviceChannelService.getDeviceByChannelId(channelId);
|
|
|
- if (deviceList.size() > 0) {
|
|
|
- device = deviceList.get(0);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (device == null) {
|
|
|
- logger.warn("[mobilePosition移动位置Notify] 未找到通道{}所属的设备", channelId);
|
|
|
- return;
|
|
|
- }
|
|
|
- // 兼容设备部分设备上报是通道编号与设备编号一致的情况
|
|
|
- if(deviceId.equals(channelId)) {
|
|
|
- List<DeviceChannel> deviceChannels = deviceChannelService.queryChaneListByDeviceId(deviceId);
|
|
|
- if (deviceChannels.size() == 1) {
|
|
|
- channelId = deviceChannels.get(0).getChannelId();
|
|
|
- }
|
|
|
- }
|
|
|
- if (!ObjectUtils.isEmpty(device.getName())) {
|
|
|
- mobilePosition.setDeviceName(device.getName());
|
|
|
- }
|
|
|
-
|
|
|
- mobilePosition.setDeviceId(device.getDeviceId());
|
|
|
- mobilePosition.setChannelId(channelId);
|
|
|
- String time = XmlUtil.getText(rootElement, "Time");
|
|
|
- if (ObjectUtils.isEmpty(time)){
|
|
|
- mobilePosition.setTime(DateUtil.getNow());
|
|
|
- }else {
|
|
|
- mobilePosition.setTime(SipUtils.parseTime(time));
|
|
|
- }
|
|
|
-
|
|
|
- mobilePosition.setLongitude(Double.parseDouble(XmlUtil.getText(rootElement, "Longitude")));
|
|
|
- mobilePosition.setLatitude(Double.parseDouble(XmlUtil.getText(rootElement, "Latitude")));
|
|
|
- if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Speed"))) {
|
|
|
- mobilePosition.setSpeed(Double.parseDouble(XmlUtil.getText(rootElement, "Speed")));
|
|
|
- } else {
|
|
|
- mobilePosition.setSpeed(0.0);
|
|
|
- }
|
|
|
- if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Direction"))) {
|
|
|
- mobilePosition.setDirection(Double.parseDouble(XmlUtil.getText(rootElement, "Direction")));
|
|
|
- } else {
|
|
|
- mobilePosition.setDirection(0.0);
|
|
|
- }
|
|
|
- if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Altitude"))) {
|
|
|
- mobilePosition.setAltitude(Double.parseDouble(XmlUtil.getText(rootElement, "Altitude")));
|
|
|
- } else {
|
|
|
- mobilePosition.setAltitude(0.0);
|
|
|
- }
|
|
|
-// logger.info("[收到移动位置订阅通知]:{}/{}->{}.{}", mobilePosition.getDeviceId(), mobilePosition.getChannelId(),
|
|
|
-// mobilePosition.getLongitude(), mobilePosition.getLatitude());
|
|
|
- mobilePosition.setReportSource("Mobile Position");
|
|
|
-
|
|
|
- // 更新device channel 的经纬度
|
|
|
- DeviceChannel deviceChannel = new DeviceChannel();
|
|
|
- deviceChannel.setDeviceId(device.getDeviceId());
|
|
|
- deviceChannel.setChannelId(channelId);
|
|
|
- deviceChannel.setLongitude(mobilePosition.getLongitude());
|
|
|
- deviceChannel.setLatitude(mobilePosition.getLatitude());
|
|
|
- deviceChannel.setGpsTime(mobilePosition.getTime());
|
|
|
-// deviceChannel = deviceChannelService.updateGps(deviceChannel, device);
|
|
|
-//
|
|
|
-// mobilePosition.setLongitudeWgs84(deviceChannel.getLongitudeWgs84());
|
|
|
-// mobilePosition.setLatitudeWgs84(deviceChannel.getLatitudeWgs84());
|
|
|
-// mobilePosition.setLongitudeGcj02(deviceChannel.getLongitudeGcj02());
|
|
|
-// mobilePosition.setLatitudeGcj02(deviceChannel.getLatitudeGcj02());
|
|
|
-
|
|
|
- deviceChannelService.updateChannelGPS(device, deviceChannel, mobilePosition);
|
|
|
-
|
|
|
- } catch (DocumentException e) {
|
|
|
- logger.error("未处理的异常 ", e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/***
|
|
|
* 处理alarm设备报警Notify
|
|
|
*/
|