Просмотр исходного кода

增加站点状态(到站、靠近、远离)

zhengqiang 4 лет назад
Родитель
Сommit
0fa30e2d9f

+ 30 - 128
common/src/main/java/com/jpsoft/bus/modules/bus/callback/GpsDataCallbackImpl.java

@@ -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);

+ 1 - 1
common/src/main/java/com/jpsoft/bus/modules/bus/entity/ShiftInfo.java

@@ -29,7 +29,7 @@ public class ShiftInfo implements Serializable {
     private String startStationId;
     @ApiModelProperty(value = "当前站点")
     private String currentStationId;
-    @ApiModelProperty(value = "车和当前站点的关系(1:站点上,2:站点和站点间)")
+    @ApiModelProperty(value = "车和当前站点的关系(1:到站,2:靠近,3:远离)")
     private String currentStationStatus = "1";
     @ApiModelProperty(value = "状态值(1:进行中,2:结束)")
     private String status;

+ 2 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/GpsService.java

@@ -24,4 +24,6 @@ public interface GpsService {
     String getLatelyStation(String id,boolean manual) throws Exception;
 
     boolean matchDistance(StationInfo stationInfo, VehicleInfo vehicleInfo, int distance);
+
+    double calculateDistance(String lastLongitude, String lastLatitude, Double longitude, Double latitude);
 }

+ 2 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/ShiftInfoService.java

@@ -27,4 +27,6 @@ public interface ShiftInfoService {
     List<ShiftInfo> findByRouteIdAndStatusAndStartStationId(String routeId, String status, String startStationId);
 
     void finishShift(ShiftInfo shiftInfo);
+
+    void stationChange(ShiftInfo shiftInfo, String stationId);
 }

+ 24 - 6
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/GpsServiceImpl.java

@@ -347,10 +347,10 @@ public class GpsServiceImpl implements GpsService {
                             continue;
                         }
 
-                        int distance = stationInfo.getRadius();
+                        int distance = 100;
 
-                        if (stationInfo.getRadius() == null){
-                            distance = 100;
+                        if (stationInfo.getRadius() != null){
+                            distance = stationInfo.getRadius();
                         }
 
                         if(matchDistance(stationInfo,shiftInfo.getStartStationId(),shiftInfo.getEndStationId(),vehicleInfo,distance)){
@@ -378,9 +378,10 @@ public class GpsServiceImpl implements GpsService {
                             continue;
                         }
 
-                        int distance = stationInfo.getRadius();
-                        if (stationInfo.getRadius() == null){
-                            distance = 100;
+                        int distance = 100;
+
+                        if (stationInfo.getRadius() != null){
+                            distance = stationInfo.getRadius();
                         }
 
                         if(matchDistance(stationInfo,shiftInfo.getStartStationId(),shiftInfo.getEndStationId(),vehicleInfo,distance)){
@@ -474,6 +475,23 @@ public class GpsServiceImpl implements GpsService {
         return text;
     }
 
+    @Override
+    public double calculateDistance(String lastLongitude, String lastLatitude, Double longitude, Double latitude) {
+        double meter1 = 0;
+
+        try {
+            GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(lastLatitude), Double.valueOf(lastLongitude));
+            GlobalCoordinates target = new GlobalCoordinates(latitude, longitude);
+
+            meter1 = CommonUtil.getDistanceMeter(source, target, Ellipsoid.Sphere);
+        }
+        catch (Exception ex){
+            log.error(ex.getMessage(),ex);
+        }
+
+        return meter1;
+    }
+
     public static void main(String[] args) {
         int s1 = -2147480189;
 

+ 136 - 8
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/ShiftInfoServiceImpl.java

@@ -6,19 +6,20 @@ import java.util.Map;
 import java.util.UUID;
 import javax.annotation.Resource;
 
+import com.jpsoft.bus.modules.base.entity.MergeOrderInfo;
+import com.jpsoft.bus.modules.base.entity.OrderInfo;
+import com.jpsoft.bus.modules.base.service.MergeOrderInfoService;
+import com.jpsoft.bus.modules.base.service.OrderInfoService;
 import com.jpsoft.bus.modules.bus.dto.StationStatusDTO;
-import com.jpsoft.bus.modules.bus.entity.PassengerInfo;
-import com.jpsoft.bus.modules.bus.entity.VehicleInfo;
-import com.jpsoft.bus.modules.bus.service.GpsService;
-import com.jpsoft.bus.modules.bus.service.PassengerInfoService;
+import com.jpsoft.bus.modules.bus.entity.*;
+import com.jpsoft.bus.modules.bus.service.*;
 import com.sun.xml.bind.v2.TODO;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import com.jpsoft.bus.modules.bus.dao.ShiftInfoDAO;
-import com.jpsoft.bus.modules.bus.entity.ShiftInfo;
-import com.jpsoft.bus.modules.bus.service.ShiftInfoService;
 import com.github.pagehelper.Page;
 import com.jpsoft.bus.modules.common.dto.Sort;
 import com.github.pagehelper.PageHelper;
@@ -32,9 +33,24 @@ public class ShiftInfoServiceImpl implements ShiftInfoService {
 	@Autowired
 	private GpsService gpsService;
 
+	@Autowired
+	private MergeOrderInfoService mergeOrderInfoService;
+
+	@Autowired
+	private OrderInfoService orderInfoService;
+
 	@Autowired
 	private PassengerInfoService passengerInfoService;
 
+	@Autowired
+	private StationInfoService stationInfoService;
+
+	@Autowired
+	private RabbitTemplate rabbitTemplate;
+
+	@Autowired
+	private PassengerMessageService passengerMessageService;
+
 	@Override
 	public ShiftInfo get(String id) {
 		// TODO Auto-generated method stub
@@ -137,8 +153,6 @@ public class ShiftInfoServiceImpl implements ShiftInfoService {
 
 	@Override
 	public void finishShift(ShiftInfo shiftInfo) {
-
-
 		shiftInfo.setStatus("2");
 		shiftInfo.setFinishTime(new Date());
 		shiftInfo.setUpdateTime(new Date());
@@ -156,4 +170,118 @@ public class ShiftInfoServiceImpl implements ShiftInfoService {
 			}
 		}
 	}
+
+	@Override
+	public void stationChange(ShiftInfo shiftInfo, String stationId) {
+		StationInfo currentStation = stationInfoService.get(stationId);
+
+		//站点发生变化时
+		if (!shiftInfo.getCurrentStationId().equals(stationId)){
+			shiftInfo.setCurrentStationId(stationId);
+			shiftInfo.setUpdateTime(new Date());
+			update(shiftInfo);
+
+			rabbitTemplate.convertAndSend("stationRemindQueue", shiftInfo);
+
+			//此线路的所有站点
+			List<StationInfo> stationInfoList = stationInfoService.findByRouteId(shiftInfo.getRouteId());
+
+			int currentStationIndex = currentStation.getSortNo();
+
+			//线路终点站
+			StationInfo endStation = stationInfoService.get(shiftInfo.getEndStationId());
+			boolean frontToEnd = true;
+
+			if(endStation.getId().equals(stationInfoList.get(0).getId())){
+				//反向行驶
+				frontToEnd = false;
+			}
+
+			//查询乘客表是否有过站的情况
+			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())){
+							PassengerMessage passengerMessage = passengerMessageService.findByPassengerId(orderInfo.getPassengerId());
+
+							if (passengerMessage ==null){
+								passengerMessage = new PassengerMessage();
+								passengerMessage.setId(cn.hutool.core.lang.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);
+							}
+						}
+					}
+				}
+			}
+
+			//查询乘客有过站的情况
+			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())){
+						PassengerMessage passengerMessage = passengerMessageService.findByPassengerId(orderInfo.getPassengerId());
+						if (passengerMessage ==null){
+							passengerMessage = new PassengerMessage();
+							passengerMessage.setId(cn.hutool.core.lang.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);
+						}
+					}
+				}
+			}
+		}
+	}
 }

+ 4 - 18
web/src/main/java/com/jpsoft/bus/modules/driver/controller/DriverApiController.java

@@ -1177,29 +1177,15 @@ public class DriverApiController {
                     }
 
                     //重新计算当前乘客状态
-                    gpsDataCallback.receive(vehicleInfo.getGpsDeviceNo(),
-                            String.valueOf(vehicleInfo.getLongitude()),
-                            String.valueOf(vehicleInfo.getLatitude()),
-                            true);
+                    String stationId = gpsService.getLatelyStation(vehicleInfo.getId(),true);
+                    shiftInfoService.stationChange(shiftInfo, stationId);
                 }
                 else{
-                    //当前车辆位置距离站点过于遥远,将车辆直接设置到站点位置,不添加站点入口
-                    if(currentStation.getLongitude()!=null && currentStation.getLatitude()!=null) {
-                        gpsDataCallback.receive(vehicleInfo.getGpsDeviceNo(),
-                                String.valueOf(currentStation.getLongitude()),
-                                String.valueOf(currentStation.getLatitude()),
-                                true);
-                    }
+                    //当前车辆位置距离站点过于遥远,直接设置当前站点
+                    shiftInfoService.stationChange(shiftInfo, currentStationId);
                 }
             }
 
-            shiftInfo.setCurrentStationId(currentStationId);
-            shiftInfo.setUpdateTime(new Date());
-            shiftInfo.setUpdateBy(subject);
-
-            shiftInfoService.update(shiftInfo);
-
-            //todo 填写具体代码
             messageResult.setData(currentStationId);
             messageResult.setResult(true);
         }