Browse Source

Merge remote-tracking branch 'origin/master'

zhengqiang 4 years ago
parent
commit
65419fd670
21 changed files with 464 additions and 118 deletions
  1. 11 0
      common/src/main/java/com/jpsoft/bus/modules/bus/callback/GpsDataCallbackImpl.java
  2. 3 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dao/GpsDataInfoDAO.java
  3. 2 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dao/ShiftInfoDAO.java
  4. 23 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dto/NearbyShiftDTO.java
  5. 17 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dto/NearbyStationDTO.java
  6. 2 2
      common/src/main/java/com/jpsoft/bus/modules/bus/dto/VehicleStationDTO.java
  7. 3 0
      common/src/main/java/com/jpsoft/bus/modules/bus/entity/GpsDataInfo.java
  8. 2 2
      common/src/main/java/com/jpsoft/bus/modules/bus/entity/StationInfo.java
  9. 3 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/GpsDataInfoService.java
  10. 1 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/ShiftInfoService.java
  11. 6 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/GpsDataInfoServiceImpl.java
  12. 5 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/ShiftInfoServiceImpl.java
  13. 19 3
      common/src/main/resources/mapper/bus/GpsDataInfo.xml
  14. 9 0
      common/src/main/resources/mapper/bus/ShiftInfo.xml
  15. 22 4
      common/src/main/resources/mapper/bus/StationInfo.xml
  16. 8 1
      web/src/main/java/com/jpsoft/bus/SmartBusServerApplication.java
  17. 3 0
      web/src/main/java/com/jpsoft/bus/config/WebMvcConfig.java
  18. 7 7
      web/src/main/java/com/jpsoft/bus/modules/bus/controller/RouteInfoController.java
  19. 5 5
      web/src/main/java/com/jpsoft/bus/modules/bus/controller/StationInfoController.java
  20. 18 3
      web/src/main/java/com/jpsoft/bus/modules/driver/controller/DriverApiController.java
  21. 295 91
      web/src/main/java/com/jpsoft/bus/modules/mobile/controller/PassengerApiController.java

+ 11 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/callback/GpsDataCallbackImpl.java

@@ -73,6 +73,7 @@ public class GpsDataCallbackImpl implements GpsDataCallback {
                 }
             }
 
+            GpsDataInfo gpsDataInfo0 = null;
             if(allowInsert) {
                 log.warn("保存历史数据:{}", deviceNo);
                 GpsDataInfo gpsDataInfo = new GpsDataInfo();
@@ -83,7 +84,9 @@ public class GpsDataCallbackImpl implements GpsDataCallback {
                 gpsDataInfo.setLongitude(longitude);
                 gpsDataInfo.setDelFlag(false);
 
+
                 gpsDataInfoService.insert(gpsDataInfo);
+                gpsDataInfo0 = gpsDataInfo;
 
                 valueOperations.set(histKey, (new Date()).getTime(), 1, TimeUnit.HOURS);
             }
@@ -123,6 +126,9 @@ public class GpsDataCallbackImpl implements GpsDataCallback {
                             shiftInfo.setCurrentStationId(stationId);
                             shiftInfoService.update(shiftInfo);
 
+
+
+
                             //当前站点
                             StationInfo currentStation = stationInfoService.get(stationId);
                             //此线路的所有站点
@@ -161,6 +167,11 @@ public class GpsDataCallbackImpl implements GpsDataCallback {
                                 }
                             }
                         }
+
+                        if (gpsDataInfo0 != null){
+                            gpsDataInfo0.setStationId(shiftInfo.getCurrentStationId());
+                            gpsDataInfoService.update(gpsDataInfo0);
+                        }
                     }
                 }catch (Exception ex){
                     log.error(ex.getMessage(),ex);

+ 3 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dao/GpsDataInfoDAO.java

@@ -4,6 +4,7 @@ import com.jpsoft.bus.modules.bus.entity.GpsDataInfo;
 import com.jpsoft.bus.modules.common.dto.Sort;
 import org.springframework.stereotype.Repository;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -17,4 +18,6 @@ public interface GpsDataInfoDAO {
 	List<GpsDataInfo> list();
 	List<GpsDataInfo> search(Map<String, Object> searchParams, List<Sort> sortList);
     GpsDataInfo findLast(String deviceNo);
+
+    GpsDataInfo findByDeviceNoAndCreateTime(String gpsDeviceNo, Date maxTime, Date minTime);
 }

+ 2 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dao/ShiftInfoDAO.java

@@ -19,4 +19,6 @@ public interface ShiftInfoDAO {
     List<ShiftInfo> findByDriverIdAndStatus(Long driverId, String status);
 
     List<ShiftInfo> findByVehicleIdAndStatus(String vehicleId, String status);
+
+    List<ShiftInfo> findByRouteIdAndStatus(String routeId, String status);
 }

+ 23 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dto/NearbyShiftDTO.java

@@ -0,0 +1,23 @@
+package com.jpsoft.bus.modules.bus.dto;
+
+import lombok.Data;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2021-4-13 17:07
+ */
+@Data
+public class NearbyShiftDTO {
+
+    private String id;
+
+    private String routeName;
+
+    private String startStationName;
+
+    private String endStationName;
+
+    private String currentStationName;
+
+    private Integer distance;
+}

+ 17 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dto/NearbyStationDTO.java

@@ -0,0 +1,17 @@
+package com.jpsoft.bus.modules.bus.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2021-4-13 17:07
+ */
+@Data
+public class NearbyStationDTO {
+
+    private String stationName;
+
+    private List<NearbyShiftDTO> nearbyShiftDTOList;
+}

+ 2 - 2
common/src/main/java/com/jpsoft/bus/modules/bus/dto/VehicleStationDTO.java

@@ -17,7 +17,7 @@ public class VehicleStationDTO {
 
     private String stationName;
 
-    private String longitude;
-    private String latitude;
+    private Double longitude;
+    private Double latitude;
 
 }

+ 3 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/entity/GpsDataInfo.java

@@ -34,6 +34,9 @@ public class GpsDataInfo {
      */
     @ApiModelProperty(value = "纬度")
     private String latitude;
+
+    @ApiModelProperty(value = "站点id")
+    private String stationId;
     /**
      * 创建人
      */

+ 2 - 2
common/src/main/java/com/jpsoft/bus/modules/bus/entity/StationInfo.java

@@ -25,9 +25,9 @@ public class StationInfo {
         @ApiModelProperty(value = "站点名称")
     private String name;
         @ApiModelProperty(value = "经度")
-    private String longitude;
+    private Double longitude;
         @ApiModelProperty(value = "纬度")
-    private String latitude;
+    private Double latitude;
         @ApiModelProperty(value = "1-起点,2-途径,3-终点")
     private Integer classify;
         @ApiModelProperty(value = "创建人")

+ 3 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/GpsDataInfoService.java

@@ -4,6 +4,7 @@ import com.github.pagehelper.Page;
 import com.jpsoft.bus.modules.bus.entity.GpsDataInfo;
 import com.jpsoft.bus.modules.common.dto.Sort;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -16,4 +17,6 @@ public interface GpsDataInfoService {
 	List<GpsDataInfo> list();
 	Page<GpsDataInfo> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
     GpsDataInfo findLast(String deviceNo);
+
+    GpsDataInfo findByDeviceNoAndCreateTime(String gpsDeviceNo, Date maxTime, Date minTime);
 }

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

@@ -22,4 +22,5 @@ public interface ShiftInfoService {
 
     void createShift(VehicleInfo vehicleInfo, Long driverId, String startStationId, String endStationId) throws Exception;
 
+    List<ShiftInfo> findByRouteIdAndStatus(String routeId, String status);
 }

+ 6 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/GpsDataInfoServiceImpl.java

@@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -72,4 +73,9 @@ public class GpsDataInfoServiceImpl implements GpsDataInfoService {
 	public GpsDataInfo findLast(String deviceNo) {
 		return gpsDataInfoDAO.findLast(deviceNo);
 	}
+
+	@Override
+	public GpsDataInfo findByDeviceNoAndCreateTime(String gpsDeviceNo, Date maxTime, Date minTime) {
+		return gpsDataInfoDAO.findByDeviceNoAndCreateTime(gpsDeviceNo,maxTime,minTime);
+	}
 }

+ 5 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/ShiftInfoServiceImpl.java

@@ -114,4 +114,9 @@ public class ShiftInfoServiceImpl implements ShiftInfoService {
 
 
 	}
+
+	@Override
+	public List<ShiftInfo> findByRouteIdAndStatus(String routeId, String status) {
+		return shiftInfoDAO.findByRouteIdAndStatus(routeId,status);
+	}
 }

+ 19 - 3
common/src/main/resources/mapper/bus/GpsDataInfo.xml

@@ -8,6 +8,7 @@
         <result property="deviceNo" column="device_no"/>
         <result property="longitude" column="longitude_"/>
         <result property="latitude" column="latitude_"/>
+        <result property="stationId" column="station_id"/>
         <result property="createBy" column="create_by"/>
         <result property="createTime" column="create_time"/>
         <result property="updateBy" column="update_by"/>
@@ -22,13 +23,14 @@
         -->
         <![CDATA[
 		insert into bus_gps_data_info
-	    (id_,device_no,longitude_,latitude_,create_by,create_time,update_by,update_time,del_flag)
+	    (id_,device_no,longitude_,latitude_,station_id,create_by,create_time,update_by,update_time,del_flag)
 		values
 		(
             #{id,jdbcType=VARCHAR}
             ,#{deviceNo,jdbcType=VARCHAR}
             ,#{longitude,jdbcType=VARCHAR}
             ,#{latitude,jdbcType=VARCHAR}
+            ,#{stationId,jdbcType=VARCHAR}
             ,#{createBy,jdbcType=VARCHAR}
             ,#{createTime,jdbcType= TIMESTAMP }
             ,#{updateBy,jdbcType=VARCHAR}
@@ -52,6 +54,9 @@
             <if test="latitude!=null">
                 latitude_=#{latitude,jdbcType=VARCHAR},
             </if>
+            <if test="stationId != null">
+                station_id = #{stationId,jdbcType=VARCHAR},
+            </if>
             <if test="createBy!=null">
                 create_by=#{createBy,jdbcType=VARCHAR},
             </if>
@@ -71,8 +76,7 @@
         where id_=#{id}
     </update>
     <select id="get" parameterType="string" resultMap="GpsDataInfoMap">
-        select id_,device_no,longitude_,latitude_,create_by,create_time,update_by,update_time,del_flag
-        from bus_gps_data_info where id_=#{0}
+        select * from bus_gps_data_info where id_=#{0}
     </select>
     <select id="exist" parameterType="string" resultType="int">
         select count(*) from bus_gps_data_info where id_=#{0}
@@ -109,4 +113,16 @@
         where device_no=#{deviceNo}
         order by create_time desc limit 1
     </select>
+
+    <select id="findByDeviceNoAndCreateTime" resultMap="GpsDataInfoMap">
+        <![CDATA[
+        select * from bus_gps_data_info
+        where del_flag = 0
+        and device_no = #{gpsDeviceNo}
+        and create_time <= #{maxTime}
+        and create_time >= #{minTime}
+        limit 1
+        ]]>
+
+    </select>
 </mapper>

+ 9 - 0
common/src/main/resources/mapper/bus/ShiftInfo.xml

@@ -162,4 +162,13 @@
 		and status_ = #{status}
 		]]>
 	</select>
+
+	<select id="findByRouteIdAndStatus" resultMap="ShiftInfoMap">
+		<![CDATA[
+		select * from bus_shift_info
+		where del_flag = 0
+		and route_id = #{routeId}
+		and status_ = #{status}
+		]]>
+	</select>
 </mapper>

+ 22 - 4
common/src/main/resources/mapper/bus/StationInfo.xml

@@ -32,8 +32,8 @@
 ,#{sortNo,jdbcType= NUMERIC }
 ,#{routeId,jdbcType=VARCHAR}
 ,#{name,jdbcType=VARCHAR}
-,#{longitude,jdbcType=VARCHAR}
-,#{latitude,jdbcType=VARCHAR}
+,#{longitude,jdbcType=DOUBLE}
+,#{latitude,jdbcType=DOUBLE}
 ,#{classify,jdbcType= NUMERIC }
 ,#{createBy,jdbcType=VARCHAR}
 ,#{createTime,jdbcType= TIMESTAMP }
@@ -59,10 +59,10 @@
 		name_=#{name,jdbcType=VARCHAR},
 		</if>
 				<if test="longitude!=null">
-		longitude_=#{longitude,jdbcType=VARCHAR},
+		longitude_=#{longitude,jdbcType=DOUBLE},
 		</if>
 				<if test="latitude!=null">
-		latitude_=#{latitude,jdbcType=VARCHAR},
+		latitude_=#{latitude,jdbcType=DOUBLE},
 		</if>
 				<if test="classify!=null">
 		classify_=#{classify,jdbcType= NUMERIC },
@@ -106,6 +106,24 @@ id_,sort_no,route_id,name_,longitude_,latitude_,classify_,create_by,create_time,
 			<if test="searchParams.id != null">
 				and ID_ like #{searchParams.id}
 			</if>
+			<if test="searchParams.maxLongitude != null">
+				<![CDATA[
+				and longitude_ <= #{searchParams.maxLongitude}
+				]]>
+			</if>
+			<if test="searchParams.minLongitude != null">
+				<![CDATA[
+				and longitude_ >= #{searchParams.minLongitude}
+				]]>
+			</if>
+			<if test="searchParams.maxLatitude != null">
+				<![CDATA[
+				and latitude_ <= #{searchParams.maxLatitude}
+				]]>
+			</if>
+			<if test="searchParams.minLatitude != null">
+				and latitude_ >= #{searchParams.minLatitude}
+			</if>
 		</where>
 		<foreach item="sort" collection="sortList"  open="order by" separator=",">
 	        ${sort.name} ${sort.order}

+ 8 - 1
web/src/main/java/com/jpsoft/bus/SmartBusServerApplication.java

@@ -3,6 +3,8 @@ package com.jpsoft.bus;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -12,10 +14,15 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableScheduling
 @EnableAsync
 @MapperScan("com.jpsoft.bus.**.dao")
-public class SmartBusServerApplication {
+public class SmartBusServerApplication extends SpringBootServletInitializer {
 
     public static void main(String[] args) {
         SpringApplication.run(SmartBusServerApplication.class, args);
     }
 
+
+    @Override
+    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
+        return builder.sources(SmartBusServerApplication.class);
+    }
 }

+ 3 - 0
web/src/main/java/com/jpsoft/bus/config/WebMvcConfig.java

@@ -70,6 +70,9 @@ public class WebMvcConfig implements WebMvcConfigurer {
 				.excludePathPatterns("/mobile/passengerApi/createPassengerOrder")
 				.excludePathPatterns("/mobile/passengerApi/deletePassengerOrder")
 				.excludePathPatterns("/mobile/passengerApi/updatePassengerOrder")
+				.excludePathPatterns("/mobile/passengerApi/passengerNearbyStation")
+				.excludePathPatterns("/mobile/passengerApi/routeList")
+				.excludePathPatterns("/mobile/passengerApi/routeDetail")
 				.excludePathPatterns("/aliPay/**")
 				.excludePathPatterns("/wxPay/**")
 				;

+ 7 - 7
web/src/main/java/com/jpsoft/bus/modules/bus/controller/RouteInfoController.java

@@ -112,8 +112,8 @@ public class RouteInfoController {
                     String[] arr = stationDTO.getLocation().split(",");
 
                     if(arr.length>1){
-                        stationInfo.setLongitude(arr[0]);
-                        stationInfo.setLatitude(arr[1]);
+                        stationInfo.setLongitude(Double.parseDouble(arr[0]));
+                        stationInfo.setLatitude(Double.parseDouble(arr[1]));
                     }
 
                     stationInfo.setDelFlag(false);
@@ -166,7 +166,7 @@ public class RouteInfoController {
                     stationInfoDTO.setId(stationInfo.getId());
                     stationInfoDTO.setName(stationInfo.getName());
 
-                    if(StringUtils.isNotEmpty(stationInfo.getLongitude()) && StringUtils.isNotEmpty(stationInfo.getLatitude())){
+                    if(stationInfo.getLongitude() ==null && stationInfo.getLatitude() == null){
                         stationInfoDTO.setLocation(stationInfo.getLongitude()+","+stationInfo.getLatitude());
                     }
 
@@ -251,8 +251,8 @@ public class RouteInfoController {
                                 String[] arr = stationInfoDTO.getLocation().split(",");
 
                                 if (arr.length > 1) {
-                                    stationInfo.setLongitude(arr[0]);
-                                    stationInfo.setLatitude(arr[1]);
+                                    stationInfo.setLongitude(Double.parseDouble(arr[0]));
+                                    stationInfo.setLatitude(Double.parseDouble(arr[1]));
                                 }
                             }
 
@@ -276,8 +276,8 @@ public class RouteInfoController {
                                 String[] arr = stationInfoDTO.getLocation().split(",");
 
                                 if (arr.length > 1) {
-                                    stationInfo.setLongitude(arr[0]);
-                                    stationInfo.setLatitude(arr[1]);
+                                    stationInfo.setLongitude(Double.parseDouble(arr[0]));
+                                    stationInfo.setLatitude(Double.parseDouble(arr[1]));
                                 }
                             }
 

+ 5 - 5
web/src/main/java/com/jpsoft/bus/modules/bus/controller/StationInfoController.java

@@ -62,7 +62,7 @@ public class StationInfoController {
 
         return msgResult;
     }
-    
+
     @ApiOperation(value="添加信息")
     @PostMapping("add")
     public MessageResult<StationInfo> add(@RequestBody StationInfo stationInfo,@RequestAttribute String subject){
@@ -73,7 +73,7 @@ public class StationInfoController {
             stationInfo.setDelFlag(false);
             stationInfo.setCreateBy(subject);
             stationInfo.setCreateTime(new Date());
-            
+
             int affectCount = stationInfoService.insert(stationInfo);
 
             if (affectCount > 0) {
@@ -128,7 +128,7 @@ public class StationInfoController {
         try {
             stationInfo.setUpdateBy(subject);
             stationInfo.setUpdateTime(new Date());
-            
+
             int affectCount = stationInfoService.update(stationInfo);
 
             if (affectCount > 0) {
@@ -312,8 +312,8 @@ public class StationInfoController {
                     stationInfo.setId(UUID.randomUUID().toString());
                     stationInfo.setName(name);
                     stationInfo.setClassify(classify);
-                    stationInfo.setLongitude(longitude);
-                    stationInfo.setLatitude(Latitude);
+                    stationInfo.setLongitude(Double.parseDouble(longitude));
+                    stationInfo.setLatitude(Double.parseDouble(Latitude));
                     stationInfo.setRouteId(routeId);
 
                     stationInfo.setDelFlag(false);

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

@@ -69,6 +69,9 @@ public class DriverApiController {
     @Autowired
     private BaiduService baiduService;
 
+    @Autowired
+    private GpsDataInfoService gpsDataInfoService;
+
     @Autowired
     private OrderInfoService orderInfoService;
 
@@ -497,7 +500,19 @@ public class DriverApiController {
                     retFileUrl = OSSUtil.uploadBase64(photoBase64Data,personId+".jpg",ossConfig);
                 }
 
-                passengerInfoService.passengerFace(vehicleInfo, shiftInfo, retFileUrl, recordTime, shiftInfo.getCurrentStationId(), personId);
+                String currentStationId = shiftInfo.getCurrentStationId();
+                //班次的当前站点和GPS记录对比验证
+                //记录时间往后偏移1min
+                Date time = DateUtil.parse(recordTime,"yyyy-MM-dd HH:mm:ss");
+                Date offsetTime = DateUtil.offsetMinute(time,-1);
+                //查询gps记录表中此时间段间的记录
+                GpsDataInfo gpsDataInfo = gpsDataInfoService.findByDeviceNoAndCreateTime(vehicleInfo.getGpsDeviceNo(),time,offsetTime);
+                if (gpsDataInfo != null && StringUtils.isNotBlank(gpsDataInfo.getStationId())){
+                    currentStationId = gpsDataInfo.getStationId();
+                }
+
+
+                passengerInfoService.passengerFace(vehicleInfo, shiftInfo, retFileUrl, recordTime, currentStationId, personId);
                 messageResult.setResult(true);
                 messageResult.setCode(200);
             }
@@ -872,10 +887,10 @@ public class DriverApiController {
             list.add("ticket");
             PaymentInfo paymentInfo = paymentInfoService.findByCompanyId(vehicleInfo.getCompanyId());
             if (paymentInfo != null){
-                if (StringUtils.isNotBlank(paymentInfo.getSubMchId())){
+                if (paymentInfo.getIsOpenWechat()){
                     list.add("wechat");
                 }
-                if (StringUtils.isNotBlank(paymentInfo.getAppAuthToken())){
+                if (paymentInfo.getIsOpenAlipay()){
                     list.add("alipay");
                 }
             }

+ 295 - 91
web/src/main/java/com/jpsoft/bus/modules/mobile/controller/PassengerApiController.java

@@ -11,6 +11,8 @@ 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.NearbyShiftDTO;
+import com.jpsoft.bus.modules.bus.dto.NearbyStationDTO;
 import com.jpsoft.bus.modules.bus.dto.PassengerDetailDTO;
 import com.jpsoft.bus.modules.bus.dto.VehicleStationDTO;
 import com.jpsoft.bus.modules.bus.entity.*;
@@ -24,6 +26,8 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.gavaghan.geodesy.Ellipsoid;
+import org.gavaghan.geodesy.GlobalCoordinates;
 import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -90,13 +94,13 @@ public class PassengerApiController {
             @ApiImplicitParam(name = "subject", value = "令牌", required = false, paramType = "query"),
             @ApiImplicitParam(name = "carNum", value = "车牌号", required = true, paramType = "form")
     })
-    public MessageResult<Map> findByCarNum(String token, @RequestAttribute String subject, String carNum){
+    public MessageResult<Map> findByCarNum(String token, @RequestAttribute String subject, String carNum) {
 
         MessageResult<Map> messageResult = new MessageResult<>();
-        try{
+        try {
 
-        }catch (Exception ex){
-            log.error(ex.getMessage(),ex);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
             messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
@@ -135,7 +139,7 @@ public class PassengerApiController {
             messageResult.setResult(true);
             messageResult.setCode(200);
         } catch (Exception ex) {
-            log.error(ex.getMessage(),ex);
+            log.error(ex.getMessage(), ex);
             messageResult.setResult(false);
             messageResult.setCode(400);
             messageResult.setMessage(ex.getMessage());
@@ -159,7 +163,7 @@ public class PassengerApiController {
 
             String beforeVerifyCode = (String) redisTemplate.opsForValue().get(smsKey);
 
-            if (StringUtils.isBlank(openId)){
+            if (StringUtils.isBlank(openId)) {
                 throw new Exception("用户标识为空");
             }
 
@@ -177,11 +181,11 @@ public class PassengerApiController {
             Long userId;
 
             UserInfo userInfo = userInfoService.findByPhone(phone);
-            if (userInfo == null){
+            if (userInfo == null) {
                 UserInfo userInfo1 = new UserInfo();
-                userInfo1.setName("乘客_"+ com.jpsoft.bus.modules.common.utils.StringUtils.random(8, com.jpsoft.bus.modules.common.utils.StringUtils.RandomType.ALL));
+                userInfo1.setName("乘客_" + com.jpsoft.bus.modules.common.utils.StringUtils.random(8, com.jpsoft.bus.modules.common.utils.StringUtils.RandomType.ALL));
                 userInfo1.setPhone(phone);
-                userInfo1.setPassword(des3.encrypt(jwtSecret,phone));
+                userInfo1.setPassword(des3.encrypt(jwtSecret, phone));
                 userInfo1.setAcceptMessage(false);
                 userInfo1.setCreateTime(new Date());
                 userInfo1.setDelFlag(false);
@@ -189,7 +193,7 @@ public class PassengerApiController {
                 userInfoService.insert(userInfo1);
                 userId = userInfo1.getId();
                 userInfo = userInfo1;
-            }else {
+            } else {
                 userInfo.setOpenId(openId);
                 userInfoService.update(userInfo);
                 userId = userInfo.getId();
@@ -225,9 +229,9 @@ public class PassengerApiController {
 
         try {
 
-            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(id,"1");
+            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(id, "1");
 
-            if (shiftInfoList.size() == 0){
+            if (shiftInfoList.size() == 0) {
                 throw new Exception("当前车辆没有正运行的班次");
             }
 
@@ -248,22 +252,21 @@ public class PassengerApiController {
             //线路所有站点
             List<StationInfo> stationInfoList = stationInfoService.findByRouteId(shiftInfo.getRouteId());
 
-         //   List<VehicleStationDTO> vehicleStationDTOList = stationInfoService.getVehicleStationDTO(shiftInfo,stationInfoList);
-
+            //   List<VehicleStationDTO> vehicleStationDTOList = stationInfoService.getVehicleStationDTO(shiftInfo,stationInfoList);
 
 
             Map<String, Object> map = new HashMap<>();
-            map.put("startStation",startStation.getName());
-            map.put("startStationId",startStation.getId());
-            map.put("startStationCoordinate",startStation.getLongitude() + "|" +startStation.getLatitude());
-            map.put("endStation",endStation.getName());
-            map.put("endStationId",endStation.getId());
-            map.put("endStationCoordinate",endStation.getLongitude() + "|" + endStation.getLatitude());
-            map.put("startTime",routeInfo.getStartTime());
-            map.put("endTime",routeInfo.getEndTime());
-            map.put("routeName",routeInfo.getName());
-            map.put("mapPath",routeInfo.getMapPath());
-        //    map.put("stationList",vehicleStationDTOList);
+            map.put("startStation", startStation.getName());
+            map.put("startStationId", startStation.getId());
+            map.put("startStationCoordinate", startStation.getLongitude() + "|" + startStation.getLatitude());
+            map.put("endStation", endStation.getName());
+            map.put("endStationId", endStation.getId());
+            map.put("endStationCoordinate", endStation.getLongitude() + "|" + endStation.getLatitude());
+            map.put("startTime", routeInfo.getStartTime());
+            map.put("endTime", routeInfo.getEndTime());
+            map.put("routeName", routeInfo.getName());
+            map.put("mapPath", routeInfo.getMapPath());
+            //    map.put("stationList",vehicleStationDTOList);
             messageResult.setData(map);
             messageResult.setResult(true);
             messageResult.setCode(200);
@@ -302,7 +305,7 @@ public class PassengerApiController {
             //线路所有站点
             List<StationInfo> stationInfoList = stationInfoService.findByRouteId(shiftInfo.getRouteId());
             Map<String, Object> map = new HashMap<>();
-            List<VehicleStationDTO> vehicleStationDTOList = stationInfoService.getVehicleStationDTO(shiftInfo,stationInfoList);
+            List<VehicleStationDTO> vehicleStationDTOList = stationInfoService.getVehicleStationDTO(shiftInfo, stationInfoList);
             messageResult.setData(vehicleStationDTOList);
             messageResult.setResult(true);
             messageResult.setCode(200);
@@ -341,7 +344,7 @@ public class PassengerApiController {
             Map<String, Object> map = new HashMap<>();
             map.put("longitude", vehicleInfo.getLongitude());
             map.put("latitude", vehicleInfo.getLatitude());
-            map.put("currentStationId",shiftInfo.getCurrentStationId());
+            map.put("currentStationId", shiftInfo.getCurrentStationId());
             messageResult.setData(map);
             messageResult.setResult(true);
             messageResult.setCode(200);
@@ -361,7 +364,7 @@ public class PassengerApiController {
             @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form"),
             @ApiImplicitParam(name = "openId", value = "openId", required = true, paramType = "form")
     })
-    public MessageResult<Map> getPassengerInfo(String id,String openId) {
+    public MessageResult<Map> getPassengerInfo(String id, String openId) {
         MessageResult<Map> messageResult = new MessageResult<>();
 
         try {
@@ -379,49 +382,47 @@ public class PassengerApiController {
             VehicleInfo vehicleInfo = vehicleInfoService.get(id);
 
             String mergeOrderId = null;
-            List<MergeOrderInfo> mergeOrderInfoList = mergeOrderInfoService.findByOpenIdShiftIdPayStatus(openId,shiftInfo.getId(),10);
+            List<MergeOrderInfo> mergeOrderInfoList = mergeOrderInfoService.findByOpenIdShiftIdPayStatus(openId, shiftInfo.getId(), 10);
 
             BigDecimal totalAmount = BigDecimal.ZERO;
             List<PassengerOrderDTO> passengerOrderDTOList = new ArrayList<>();
-            if (mergeOrderInfoList.size()>0){
-               MergeOrderInfo mergeOrderInfo = mergeOrderInfoList.get(0);
-               List<OrderInfo> orderInfoList = orderInfoService.findByMergeOrderId(mergeOrderInfo.getId());
-               mergeOrderId = mergeOrderInfo.getId();
-
-               if (orderInfoList.size()>0){
-                   for (OrderInfo orderInfo : orderInfoList){
-
-
-                       PassengerInfo passengerInfo = passengerInfoService.get(orderInfo.getPassengerId());
-                       //购票始发站
-                       StationInfo start = stationInfoService.get(orderInfo.getTicketUpStationId());
-                       //购票终点站
-                       StationInfo end = stationInfoService.get(orderInfo.getTicketDownStationId());
-                       PassengerOrderDTO passengerOrderDTO = new PassengerOrderDTO();
-                       passengerOrderDTO.setId(orderInfo.getPassengerId());
-                       passengerOrderDTO.setImageUrl(passengerInfo.getImageUrl());
-                       passengerOrderDTO.setTicketUpStationName(start.getName());
-                       passengerOrderDTO.setTicketUpStationId(start.getId());
-                       passengerOrderDTO.setTicketDownStationId(end.getId());
-                       passengerOrderDTO.setTicketDownStationName(end.getName());
-                       passengerOrderDTO.setTicketType(orderInfo.getTicketType());
-                       passengerOrderDTO.setTicketTypeStr(passengerOrderDTO.getTicketTypeStr(passengerOrderDTO.getTicketType()));
-                       passengerOrderDTO.setGoodsTicket(orderInfo.getGoodsTicket());
-                       passengerOrderDTO.setTotalFee(orderInfo.getTotalFee());
-                       passengerOrderDTOList.add(passengerOrderDTO);
-
-                       totalAmount = totalAmount.add(orderInfo.getTotalFee());
-                   }
-               }
+            if (mergeOrderInfoList.size() > 0) {
+                MergeOrderInfo mergeOrderInfo = mergeOrderInfoList.get(0);
+                List<OrderInfo> orderInfoList = orderInfoService.findByMergeOrderId(mergeOrderInfo.getId());
+                mergeOrderId = mergeOrderInfo.getId();
+
+                if (orderInfoList.size() > 0) {
+                    for (OrderInfo orderInfo : orderInfoList) {
+
+
+                        PassengerInfo passengerInfo = passengerInfoService.get(orderInfo.getPassengerId());
+                        //购票始发站
+                        StationInfo start = stationInfoService.get(orderInfo.getTicketUpStationId());
+                        //购票终点站
+                        StationInfo end = stationInfoService.get(orderInfo.getTicketDownStationId());
+                        PassengerOrderDTO passengerOrderDTO = new PassengerOrderDTO();
+                        passengerOrderDTO.setId(orderInfo.getPassengerId());
+                        passengerOrderDTO.setImageUrl(passengerInfo.getImageUrl());
+                        passengerOrderDTO.setTicketUpStationName(start.getName());
+                        passengerOrderDTO.setTicketUpStationId(start.getId());
+                        passengerOrderDTO.setTicketDownStationId(end.getId());
+                        passengerOrderDTO.setTicketDownStationName(end.getName());
+                        passengerOrderDTO.setTicketType(orderInfo.getTicketType());
+                        passengerOrderDTO.setTicketTypeStr(passengerOrderDTO.getTicketTypeStr(passengerOrderDTO.getTicketType()));
+                        passengerOrderDTO.setGoodsTicket(orderInfo.getGoodsTicket());
+                        passengerOrderDTO.setTotalFee(orderInfo.getTotalFee());
+                        passengerOrderDTOList.add(passengerOrderDTO);
+
+                        totalAmount = totalAmount.add(orderInfo.getTotalFee());
+                    }
+                }
             }
 
 
-
-
             Map<String, Object> map = new HashMap<>();
             map.put("totalAmount", totalAmount);
             map.put("list", passengerOrderDTOList);
-            map.put("id",mergeOrderId);
+            map.put("id", mergeOrderId);
             messageResult.setData(map);
             messageResult.setResult(true);
             messageResult.setCode(200);
@@ -436,7 +437,6 @@ public class PassengerApiController {
     }
 
 
-
     @PostMapping("upload")
     @ApiOperation(value = "人员照片上传")
     @ApiImplicitParams({
@@ -450,7 +450,7 @@ public class PassengerApiController {
         try {
 
 
-            String retFileUrl = OSSUtil.uploadBase64(photoFile,photoName,ossConfig);
+            String retFileUrl = OSSUtil.uploadBase64(photoFile, photoName, ossConfig);
 
             messageResult.setResult(true);
             messageResult.setData(retFileUrl);
@@ -472,7 +472,7 @@ public class PassengerApiController {
             @ApiImplicitParam(name = "faceImageUrl", value = "人脸照片", required = true, paramType = "form"),
             @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form")
     })
-    public MessageResult<Map> matchFaceImage(String faceImageUrl,String id) {
+    public MessageResult<Map> matchFaceImage(String faceImageUrl, String id) {
         MessageResult<Map> messageResult = new MessageResult<>();
 
         try {
@@ -481,10 +481,10 @@ public class PassengerApiController {
             //人脸库id
             String groupId = CommonUtil.getProvinceNum(vehicleInfo.getLicensePlateNumber()) + StrUtil.sub(vehicleInfo.getLicensePlateNumber(), 1, 10);
 
-           Long personId =  baiduService.faceSearch(faceImageUrl,"URL",groupId);
-           if (personId == null){
-            throw new Exception("无匹配照片");
-           }
+            Long personId = baiduService.faceSearch(faceImageUrl, "URL", groupId);
+            if (personId == null) {
+                throw new Exception("无匹配照片");
+            }
 
             Map<String, Object> map = new HashMap<>();
             messageResult.setData(map);
@@ -522,13 +522,13 @@ public class PassengerApiController {
             //班次信息
             ShiftInfo shiftInfo = shiftInfoList.get(0);
 
-            Map<String,Object> searchParams = new HashMap<>();
-            searchParams.put("vehicleShiftId",shiftInfo.getId());
-            searchParams.put("status","1");
-            searchParams.put("payStatus","0");
+            Map<String, Object> searchParams = new HashMap<>();
+            searchParams.put("vehicleShiftId", shiftInfo.getId());
+            searchParams.put("status", "1");
+            searchParams.put("payStatus", "0");
             List<Sort> sortList = new ArrayList<>();
-            sortList.add(new Sort("up_time","desc"));
-            Page<PassengerInfo> page = passengerInfoService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
+            sortList.add(new Sort("up_time", "desc"));
+            Page<PassengerInfo> page = passengerInfoService.pageSearch(searchParams, pageIndex, pageSize, true, sortList);
 
 
             messageResult.setData(PojoUtils.pageWrapper(page));
@@ -558,7 +558,7 @@ public class PassengerApiController {
             @ApiImplicitParam(name = "goodsTicket", value = "货票金额", required = true, paramType = "form"),
             @ApiImplicitParam(name = "totalFee", value = "总金额", required = true, paramType = "form")
     })
-    public MessageResult<Map> createPassengerOrder(String id,String openId,String mergeOrderId,String passengerIds,String ticketUpStationId,String ticketDownStationId,String ticketType,String goodsTicket,String totalFee) {
+    public MessageResult<Map> createPassengerOrder(String id, String openId, String mergeOrderId, String passengerIds, String ticketUpStationId, String ticketDownStationId, String ticketType, String goodsTicket, String totalFee) {
         MessageResult<Map> messageResult = new MessageResult<>();
 
         try {
@@ -575,7 +575,7 @@ public class PassengerApiController {
             ShiftInfo shiftInfo = shiftInfoList.get(0);
 
 
-             passengerInfoService.createOrder(vehicleInfo,shiftInfo,openId,mergeOrderId,passengerIds,ticketUpStationId,ticketDownStationId,ticketType,goodsTicket,totalFee);
+            passengerInfoService.createOrder(vehicleInfo, shiftInfo, openId, mergeOrderId, passengerIds, ticketUpStationId, ticketDownStationId, ticketType, goodsTicket, totalFee);
 
             messageResult.setResult(true);
             messageResult.setCode(200);
@@ -596,25 +596,25 @@ public class PassengerApiController {
             @ApiImplicitParam(name = "id", value = "乘客id", required = true, paramType = "form"),
             @ApiImplicitParam(name = "mergeOrderId", value = "综合账单id", required = true, paramType = "form")
     })
-    public MessageResult<Map> deletePassengerOrder(String id,String mergeOrderId) {
+    public MessageResult<Map> deletePassengerOrder(String id, String mergeOrderId) {
         MessageResult<Map> messageResult = new MessageResult<>();
 
         try {
 
 
             MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.get(mergeOrderId);
-            if (mergeOrderInfo == null){
+            if (mergeOrderInfo == null) {
                 throw new Exception("账单不存在");
             }
 
-            if (mergeOrderInfo.getPayStatus() == 20){
+            if (mergeOrderInfo.getPayStatus() == 20) {
                 throw new Exception("已支付账单不可删除");
             }
 
-            OrderInfo orderInfo = orderInfoService.findByPassengerIdMergeOrderId(id,mergeOrderId);
+            OrderInfo orderInfo = orderInfoService.findByPassengerIdMergeOrderId(id, mergeOrderId);
 
-            if (orderInfo != null){
-                if (orderInfo.getPayStatus() == 20){
+            if (orderInfo != null) {
+                if (orderInfo.getPayStatus() == 20) {
                     throw new Exception("已支付账单不可删除");
                 }
                 orderInfo.setDelFlag(true);
@@ -622,7 +622,6 @@ public class PassengerApiController {
             }
 
 
-
             messageResult.setResult(true);
             messageResult.setCode(200);
         } catch (Exception ex) {
@@ -646,33 +645,168 @@ public class PassengerApiController {
             @ApiImplicitParam(name = "goodsTicket", value = "货票金额", required = true, paramType = "form"),
             @ApiImplicitParam(name = "totalFee", value = "总金额", required = true, paramType = "form")
     })
-    public MessageResult<Map> updatePassengerOrder(String id,String mergeOrderId,String ticketUpStationId,String ticketDownStationId,String ticketType,String goodsTicket,String totalFee) {
+    public MessageResult<Map> updatePassengerOrder(String id, String mergeOrderId, String ticketUpStationId, String ticketDownStationId, String ticketType, String goodsTicket, String totalFee) {
         MessageResult<Map> messageResult = new MessageResult<>();
 
         try {
 
 
             MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.get(mergeOrderId);
-            if (mergeOrderInfo == null){
+            if (mergeOrderInfo == null) {
                 throw new Exception("账单不存在");
             }
 
-            if (mergeOrderInfo.getPayStatus() == 20){
+            if (mergeOrderInfo.getPayStatus() == 20) {
                 throw new Exception("已支付账单不可修改");
             }
 
-            OrderInfo orderInfo = orderInfoService.findByPassengerIdMergeOrderId(id,mergeOrderId);
+            OrderInfo orderInfo = orderInfoService.findByPassengerIdMergeOrderId(id, mergeOrderId);
 
-            if (orderInfo != null){
-                if (orderInfo.getPayStatus() == 20){
+            if (orderInfo != null) {
+                if (orderInfo.getPayStatus() == 20) {
                     throw new Exception("已支付账单不可修改");
                 }
             }
 
-            passengerInfoService.updatePassengerOrder(orderInfo,ticketUpStationId,ticketDownStationId,ticketType,goodsTicket,totalFee);
+            passengerInfoService.updatePassengerOrder(orderInfo, ticketUpStationId, ticketDownStationId, ticketType, goodsTicket, totalFee);
+
+
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+
+    @PostMapping("passengerNearbyStation")
+    @ApiOperation(value = "乘客附近站点")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "longitude", value = "经度", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "latitude", value = "纬度", required = true, paramType = "form")
+    })
+    public MessageResult<List<NearbyStationDTO>> passengerNearbyStation(String longitude, String latitude, @RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex,
+                                                                        @RequestParam(value = "pageSize", defaultValue = "5") int pageSize) {
+        MessageResult<List<NearbyStationDTO>> messageResult = new MessageResult<>();
+
+        try {
+
+            Double lo = Double.valueOf(longitude);
+            Double la = Double.valueOf(latitude);
+
+            Double maxLo = lo + 0.005D;
+            Double minLo = lo - 0.005D;
+            Double maxLa = la + 0.004D;
+            Double minLa = la - 0.004D;
 
 
+            Map<String, Object> searchParams = new HashMap<>();
+            searchParams.put("maxLongitude", maxLo);
+            searchParams.put("minLongitude", minLo);
+            searchParams.put("maxLatitude", maxLa);
+            searchParams.put("minLatitude", minLa);
 
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("create_time", "desc"));
+
+            Page<StationInfo> page = stationInfoService.pageSearch(searchParams, pageIndex, pageSize, true, sortList);
+
+            List<StationInfo> stationInfoList = page.getResult();
+            List<NearbyStationDTO> nearbyStationDTOList = new ArrayList<>();
+            List<String> shiftIdList = new ArrayList<>();
+            if (stationInfoList.size() > 0) {
+                for (StationInfo stationInfo : stationInfoList) {
+
+                    NearbyStationDTO nearbyStationDTO = new NearbyStationDTO();
+                    List<ShiftInfo> shiftInfoList = shiftInfoService.findByRouteIdAndStatus(stationInfo.getRouteId(), "1");
+                    if (shiftInfoList.size() > 0) {
+                        if (shiftInfoList.size() == 1) {
+                            ShiftInfo shiftInfo = shiftInfoList.get(0);
+
+                            if (!shiftIdList.contains(shiftInfo.getId())) {
+
+
+                                //线路
+                                RouteInfo routeInfo = routeInfoService.get(shiftInfo.getRouteId());
+                                VehicleInfo vehicleInfo = vehicleInfoService.get(shiftInfo.getVehicleId());
+                                //起始站
+                                StationInfo startStation = stationInfoService.get(shiftInfo.getStartStationId());
+                                //终点站
+                                StationInfo endStation = stationInfoService.get(shiftInfo.getEndStationId());
+                                //当前站
+                                StationInfo currentStation = stationInfoService.get(shiftInfo.getCurrentStationId());
+                                nearbyStationDTO.setStationName(stationInfo.getName());
+                                List<NearbyShiftDTO> nearbyShiftDTOList = new ArrayList<>();
+                                NearbyShiftDTO nearbyShiftDTO = new NearbyShiftDTO();
+                                nearbyShiftDTO.setId(shiftInfo.getId());
+                                nearbyShiftDTO.setRouteName(routeInfo.getName());
+                                nearbyShiftDTO.setStartStationName(startStation.getName());
+                                nearbyShiftDTO.setEndStationName(endStation.getName());
+                                nearbyShiftDTO.setCurrentStationName(currentStation.getName());
+
+                                //距离
+                                GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(vehicleInfo.getLatitude()), Double.valueOf(vehicleInfo.getLongitude()));
+                                GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(latitude), Double.valueOf(longitude));
+
+                                double meter1 = CommonUtil.getDistanceMeter(source, target, Ellipsoid.Sphere);
+                                nearbyShiftDTO.setDistance((new Double(meter1)).intValue());
+
+
+                                nearbyShiftDTOList.add(nearbyShiftDTO);
+                                nearbyStationDTO.setNearbyShiftDTOList(nearbyShiftDTOList);
+                                nearbyStationDTOList.add(nearbyStationDTO);
+                                shiftIdList.add(shiftInfo.getId());
+
+                            }
+                        } else {
+                            for (ShiftInfo shiftInfo : shiftInfoList) {
+
+                                if (!shiftIdList.contains(shiftInfo.getId())) {
+
+
+                                    //线路
+                                    RouteInfo routeInfo = routeInfoService.get(shiftInfo.getRouteId());
+                                    VehicleInfo vehicleInfo = vehicleInfoService.get(shiftInfo.getVehicleId());
+                                    //起始站
+                                    StationInfo startStation = stationInfoService.get(shiftInfo.getStartStationId());
+                                    //终点站
+                                    StationInfo endStation = stationInfoService.get(shiftInfo.getEndStationId());
+                                    //当前站
+                                    StationInfo currentStation = stationInfoService.get(shiftInfo.getCurrentStationId());
+                                    nearbyStationDTO.setStationName(stationInfo.getName());
+                                    List<NearbyShiftDTO> nearbyShiftDTOList = new ArrayList<>();
+                                    NearbyShiftDTO nearbyShiftDTO = new NearbyShiftDTO();
+                                    nearbyShiftDTO.setId(shiftInfo.getId());
+                                    nearbyShiftDTO.setRouteName(routeInfo.getName());
+                                    nearbyShiftDTO.setStartStationName(startStation.getName());
+                                    nearbyShiftDTO.setEndStationName(endStation.getName());
+                                    nearbyShiftDTO.setCurrentStationName(currentStation.getName());
+
+                                    //距离
+                                    GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(vehicleInfo.getLatitude()), Double.valueOf(vehicleInfo.getLongitude()));
+                                    GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(latitude), Double.valueOf(longitude));
+
+                                    double meter1 = CommonUtil.getDistanceMeter(source, target, Ellipsoid.Sphere);
+                                    nearbyShiftDTO.setDistance((new Double(meter1)).intValue());
+                                    nearbyShiftDTOList.add(nearbyShiftDTO);
+                                    nearbyStationDTO.setNearbyShiftDTOList(nearbyShiftDTOList);
+                                    nearbyStationDTOList.add(nearbyStationDTO);
+                                    shiftIdList.add(shiftInfo.getId());
+                                }
+                            }
+                        }
+
+                    }
+                }
+            }
+
+
+            messageResult.setData(nearbyStationDTOList);
             messageResult.setResult(true);
             messageResult.setCode(200);
         } catch (Exception ex) {
@@ -685,4 +819,74 @@ public class PassengerApiController {
         return messageResult;
     }
 
+
+    @PostMapping("routeList")
+    @ApiOperation(value = "乘客查询线路列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "name", value = "线路名称", required = true, paramType = "form")
+    })
+    public MessageResult<Map> routeList(String name, @RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex,@RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+            Map<String,Object> searchParams = new HashMap<>();
+            searchParams.put("name","%"+name+"%");
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("create_time","desc"));
+            Page<RouteInfo> page = routeInfoService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
+
+            messageResult.setData(PojoUtils.pageWrapper(page));
+            messageResult.setCode(200);
+            messageResult.setResult(true);
+
+
+        }catch (Exception ex){
+            log.error(ex.getMessage());
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("routeDetail")
+    @ApiOperation(value = "乘客查询线路详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "线路id", required = true, paramType = "form")
+    })
+    public MessageResult<Map> routeDetail(String id) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+            RouteInfo routeInfo = routeInfoService.get(id);
+            if (routeInfo == null){
+                throw new Exception("线路不存在");
+            }
+
+            List<StationInfo> stationInfoList = stationInfoService.findByRouteId(id);
+
+
+            Map<String,Object> map = new HashMap<>();
+            map.put("routeInfo",routeInfo);
+            map.put("stationInfoList",stationInfoList);
+
+
+            messageResult.setData(map);
+            messageResult.setCode(200);
+            messageResult.setResult(true);
+
+
+        }catch (Exception ex){
+            log.error(ex.getMessage());
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
 }