|
@@ -127,6 +127,10 @@ public class GpsDataCallbackImpl implements GpsDataCallback {
|
|
|
valueOperations.set(lbsKey, address, 10, TimeUnit.MINUTES);
|
|
|
}
|
|
|
|
|
|
+ //上一次的经纬度
|
|
|
+ String lastLongitude = v.getLongitude();
|
|
|
+ String lastLatitude = v.getLatitude();
|
|
|
+
|
|
|
v.setLatestAddress(address);
|
|
|
v.setLongitude(longitude);//经度
|
|
|
v.setLatitude(latitude);//纬度
|
|
@@ -141,142 +145,40 @@ public class GpsDataCallbackImpl implements GpsDataCallback {
|
|
|
ShiftInfo shiftInfo = shiftInfoList.get(0);
|
|
|
String stationId = gpsService.getLatelyStation(v.getId(),manual);
|
|
|
|
|
|
- StationInfo currentStation = stationInfoService.get(stationId);
|
|
|
-
|
|
|
- //站点发生变化时
|
|
|
- if (!shiftInfo.getCurrentStationId().equals(stationId)){
|
|
|
- shiftInfo.setCurrentStationId(stationId);
|
|
|
- shiftInfoService.update(shiftInfo);
|
|
|
-
|
|
|
- rabbitTemplate.convertAndSend("stationRemindQueue", shiftInfo);
|
|
|
+ shiftInfoService.stationChange(shiftInfo, stationId);
|
|
|
|
|
|
- //当前站点
|
|
|
- // StationInfo currentStation = stationInfoService.get(stationId);
|
|
|
- //此线路的所有站点
|
|
|
- List<StationInfo> stationInfoList = stationInfoService.findByRouteId(shiftInfo.getRouteId());
|
|
|
+ if (gpsDataInfo0 != null){
|
|
|
+ gpsDataInfo0.setStationId(shiftInfo.getCurrentStationId());
|
|
|
+ gpsDataInfoService.update(gpsDataInfo0);
|
|
|
+ }
|
|
|
|
|
|
- int currentStationIndex = currentStation.getSortNo();
|
|
|
+ //判断车辆和当前站点的位置关系
|
|
|
+ int radius = 0;
|
|
|
+ StationInfo currentStation = stationInfoService.get(stationId);
|
|
|
|
|
|
- //线路终点站
|
|
|
- StationInfo endStation = stationInfoService.get(shiftInfo.getEndStationId());
|
|
|
- boolean frontToEnd = true;
|
|
|
+ if (currentStation.getRadius() == null){
|
|
|
+ radius = 100;
|
|
|
+ }
|
|
|
|
|
|
- if(endStation.getId().equals(stationInfoList.get(0).getId())){
|
|
|
- //反向行驶
|
|
|
- frontToEnd = false;
|
|
|
- }
|
|
|
+ double distance1 = gpsService.calculateDistance(lastLongitude,lastLatitude,currentStation.getLongitude(),currentStation.getLatitude());
|
|
|
+ double distance2 = gpsService.calculateDistance(v.getLongitude(),v.getLatitude(),currentStation.getLongitude(),currentStation.getLatitude());
|
|
|
|
|
|
- //查询乘客表是否有过站的情况
|
|
|
- List<PassengerInfo> passengerInfoList = passengerInfoService.findByShiftStatusPayStatusNotTicketDown(shiftInfo.getId(),"1","1",stationId);
|
|
|
-
|
|
|
- if (passengerInfoList.size()>0){
|
|
|
- for (PassengerInfo passengerInfo : passengerInfoList){
|
|
|
- //乘客购票的下车站点
|
|
|
- StationInfo downStation = stationInfoService.get(passengerInfo.getTicketDownStationId());
|
|
|
-
|
|
|
- //按照线路顺行并且当前站点大于乘客购票站点,则过站
|
|
|
- if (frontToEnd){
|
|
|
- if(currentStationIndex > downStation.getSortNo()) {
|
|
|
- passengerInfo.setPayStatus("2");
|
|
|
- }
|
|
|
- else{
|
|
|
- passengerInfo.setPayStatus("1");
|
|
|
- }
|
|
|
-
|
|
|
- passengerInfoService.update(passengerInfo);
|
|
|
- }
|
|
|
-
|
|
|
- //按照线路逆行并且当前站点小于乘客购票站点,则过站
|
|
|
- if (!frontToEnd){
|
|
|
- if(currentStationIndex < downStation.getSortNo()) {
|
|
|
- passengerInfo.setPayStatus("2");
|
|
|
- }
|
|
|
- else {
|
|
|
- passengerInfo.setPayStatus("1");
|
|
|
- }
|
|
|
-
|
|
|
- passengerInfoService.update(passengerInfo);
|
|
|
- }
|
|
|
-
|
|
|
- //过站发消息
|
|
|
- if (passengerInfo.getPayStatus().equals("2")){
|
|
|
- List<OrderInfo> orderInfoList = orderInfoService.findByPassengerIdAndPayStatus(passengerInfo.getId(),20);
|
|
|
- OrderInfo orderInfo = orderInfoList.get(0);
|
|
|
- //综合账单
|
|
|
- MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.get(orderInfo.getMergeOrderId());
|
|
|
- if (StringUtils.isNotBlank(mergeOrderInfo.getOpenId())){
|
|
|
-// UserInfo userInfo = userInfoService.findByOpenId(mergeOrderInfo.getOpenId());
|
|
|
-// if (userInfo.getAcceptMessage()){
|
|
|
- PassengerMessage passengerMessage = passengerMessageService.findByPassengerId(orderInfo.getPassengerId());
|
|
|
-
|
|
|
- if (passengerMessage ==null){
|
|
|
- passengerMessage = new PassengerMessage();
|
|
|
- passengerMessage.setId(UUID.randomUUID().toString());
|
|
|
- passengerMessage.setOpenId(mergeOrderInfo.getOpenId());
|
|
|
- passengerMessage.setPassengerId(passengerInfo.getId());
|
|
|
- passengerMessage.setCreateTime(new Date());
|
|
|
- passengerMessageService.insert(passengerMessage);
|
|
|
- }
|
|
|
- else {
|
|
|
- passengerMessage.setReadStatus(false);
|
|
|
- passengerMessageService.update(passengerMessage);
|
|
|
- }
|
|
|
-// }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ if (distance2<=radius){
|
|
|
+ //已到站点附近
|
|
|
+ shiftInfo.setCurrentStationStatus("1"); //到站
|
|
|
+ shiftInfoService.update(shiftInfo);
|
|
|
+ }else {
|
|
|
+ //进入站点区域
|
|
|
+ //判断当前车辆是靠近还是远离站点
|
|
|
+ if (distance1<distance2) {
|
|
|
+ shiftInfo.setCurrentStationStatus("2"); //靠近
|
|
|
+ shiftInfoService.update(shiftInfo);
|
|
|
}
|
|
|
-
|
|
|
- //查询乘客有过站的情况
|
|
|
- List<PassengerInfo> passengerInfoList1 = passengerInfoService.findByShiftStatusPayStatusNotTicketDown(shiftInfo.getId(),"1","2",stationId);
|
|
|
- if (passengerInfoList1.size()>0){
|
|
|
- for (PassengerInfo passengerInfo : passengerInfoList1){
|
|
|
- List<OrderInfo> orderInfoList = orderInfoService.findByPassengerIdAndPayStatus(passengerInfo.getId(),20);
|
|
|
- OrderInfo orderInfo = orderInfoList.get(0);
|
|
|
- //综合账单
|
|
|
- MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.get(orderInfo.getMergeOrderId());
|
|
|
- if (StringUtils.isNotBlank(mergeOrderInfo.getOpenId())){
|
|
|
-
|
|
|
-// UserInfo userInfo = userInfoService.findByOpenId(mergeOrderInfo.getOpenId());
|
|
|
-// if (userInfo.getAcceptMessage()){
|
|
|
- PassengerMessage passengerMessage = passengerMessageService.findByPassengerId(orderInfo.getPassengerId());
|
|
|
- if (passengerMessage ==null){
|
|
|
- passengerMessage = new PassengerMessage();
|
|
|
- passengerMessage.setId(UUID.randomUUID().toString());
|
|
|
- passengerMessage.setOpenId(mergeOrderInfo.getOpenId());
|
|
|
- passengerMessage.setPassengerId(passengerInfo.getId());
|
|
|
- passengerMessage.setCreateTime(new Date());
|
|
|
- passengerMessageService.insert(passengerMessage);
|
|
|
- }
|
|
|
- else {
|
|
|
- passengerMessage.setReadStatus(false);
|
|
|
- passengerMessageService.update(passengerMessage);
|
|
|
- }
|
|
|
-// }
|
|
|
- }
|
|
|
- }
|
|
|
+ else if(distance2>distance1){
|
|
|
+ shiftInfo.setCurrentStationStatus("3"); //远离
|
|
|
+ shiftInfoService.update(shiftInfo);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if (gpsDataInfo0 != null){
|
|
|
- gpsDataInfo0.setStationId(shiftInfo.getCurrentStationId());
|
|
|
- gpsDataInfoService.update(gpsDataInfo0);
|
|
|
- }
|
|
|
-
|
|
|
- //判断车辆和当前站点的位置关系
|
|
|
-// int distance = 0;
|
|
|
-//
|
|
|
-// if (currentStation.getRadius() == null){
|
|
|
-// distance = 100;
|
|
|
-// }
|
|
|
-
|
|
|
-// if (gpsService.matchDistance(currentStation,v,distance)){
|
|
|
-// shiftInfo.setCurrentStationStatus("1");
|
|
|
-// shiftInfoService.update(shiftInfo);
|
|
|
-// }else {
|
|
|
-// shiftInfo.setCurrentStationStatus("2");
|
|
|
-// shiftInfoService.update(shiftInfo);
|
|
|
-// }
|
|
|
}
|
|
|
}catch (Exception ex){
|
|
|
log.error(ex.getMessage(),ex);
|