瀏覽代碼

Merge remote-tracking branch 'origin/master'

xiao547607 4 年之前
父節點
當前提交
5c695d0b7c
共有 39 個文件被更改,包括 1626 次插入490 次删除
  1. 1 1
      common/pom.xml
  2. 4 0
      common/src/main/java/com/jpsoft/bus/modules/base/service/impl/OrderInfoServiceImpl.java
  3. 27 123
      common/src/main/java/com/jpsoft/bus/modules/bus/callback/GpsDataCallbackImpl.java
  4. 21 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dao/RouteTimeTableDAO.java
  5. 4 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dao/StationSubInfoDAO.java
  6. 2 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dao/VehicleInfoDAO.java
  7. 7 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dto/StationInfoDTO.java
  8. 173 0
      common/src/main/java/com/jpsoft/bus/modules/bus/entity/RouteTimeTable.java
  9. 1 1
      common/src/main/java/com/jpsoft/bus/modules/bus/entity/ShiftInfo.java
  10. 22 19
      common/src/main/java/com/jpsoft/bus/modules/bus/entity/StationSubInfo.java
  11. 2 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/GpsService.java
  12. 2 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/PassengerInfoService.java
  13. 19 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/RouteTimeTableService.java
  14. 2 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/ShiftInfoService.java
  15. 4 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/StationSubInfoService.java
  16. 2 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/VehicleInfoService.java
  17. 81 20
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/GpsServiceImpl.java
  18. 97 31
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/PassengerInfoServiceImpl.java
  19. 82 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/RouteTimeTableServiceImpl.java
  20. 136 8
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/ShiftInfoServiceImpl.java
  21. 16 6
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/StationSubInfoServiceImpl.java
  22. 5 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/VehicleInfoServiceImpl.java
  23. 118 0
      common/src/main/resources/mapper/bus/RouteTimeTable.xml
  24. 134 135
      common/src/main/resources/mapper/bus/StationInfo.xml
  25. 142 95
      common/src/main/resources/mapper/bus/StationSubInfo.xml
  26. 7 1
      common/src/main/resources/mapper/bus/VehicleInfo.xml
  27. 2 2
      gps/src/main/java/com/jpsoft/gps/codec/CustomDecoder.java
  28. 2 2
      pom.xml
  29. 0 5
      web/pom.xml
  30. 2 4
      web/src/main/java/com/jpsoft/bus/config/WebMvcConfig.java
  31. 8 4
      web/src/main/java/com/jpsoft/bus/modules/bus/controller/RouteInfoController.java
  32. 236 0
      web/src/main/java/com/jpsoft/bus/modules/bus/controller/RouteTimeTableController.java
  33. 39 0
      web/src/main/java/com/jpsoft/bus/modules/device/controller/DeviceCmdApiController.java
  34. 157 25
      web/src/main/java/com/jpsoft/bus/modules/driver/controller/DriverApiController.java
  35. 6 0
      web/src/main/java/com/jpsoft/bus/modules/mobile/controller/PassengerApiController.java
  36. 57 0
      web/src/main/java/com/jpsoft/bus/scheduled/CheckVehicleTask.java
  37. 4 6
      web/src/main/resources/application-dev.yml
  38. 1 1
      web/src/main/resources/application-production.yml
  39. 1 1
      web/src/main/resources/application-test.yml

+ 1 - 1
common/pom.xml

@@ -246,7 +246,7 @@
         <dependency>
             <groupId>joda-time</groupId>
             <artifactId>joda-time</artifactId>
-            <version>2.6</version>
+            <version>2.8.1</version>
         </dependency>
         <!--gps-->
         <dependency>

+ 4 - 0
common/src/main/java/com/jpsoft/bus/modules/base/service/impl/OrderInfoServiceImpl.java

@@ -132,6 +132,10 @@ public class OrderInfoServiceImpl implements OrderInfoService {
 			throw new Exception("非在线支付,不可在线退款");
 		}
 
+		if (orderInfo.getSettlementFlag()){
+			throw new Exception("在线缴费金额已结算,退款请联系管理员");
+		}
+
 		if ("wechat".equals(orderInfo.getPayName())){
 			wechatService.wxRefund(orderInfo);
 		}

+ 27 - 123
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,122 +145,7 @@ 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);
-
-                            //当前站点
-                          //  StationInfo currentStation = stationInfoService.get(stationId);
-                            //此线路的所有站点
-                            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())){
-//                                                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);
-                                                }
-//                                                }
-                                            }
-                                    }
-                                }
-                            }
-
-                            //查询乘客有过站的情况
-                            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);
-                                            }
-//                                        }
-                                    }
-                                }
-                            }
-                        }
+                        shiftInfoService.stationChange(shiftInfo, stationId);
 
                         if (gpsDataInfo0 != null){
                             gpsDataInfo0.setStationId(shiftInfo.getCurrentStationId());
@@ -264,16 +153,31 @@ public class GpsDataCallbackImpl implements GpsDataCallback {
                         }
 
                         //判断车辆和当前站点的位置关系
-                        int distance = currentStation.getRadius();
-                        if (currentStation.getRadius() == null){
-                            distance = 100;
+                        int radius = 100;
+                        StationInfo currentStation = stationInfoService.get(stationId);
+
+                        if (currentStation.getRadius() != null){
+                            radius = currentStation.getRadius();
                         }
-                        if (gpsService.matchDistance(currentStation,v,distance)){
-                            shiftInfo.setCurrentStationStatus("1");
+
+                        double distance1 = gpsService.calculateDistance(lastLongitude,lastLatitude,currentStation.getLongitude(),currentStation.getLatitude());
+                        double distance2 = gpsService.calculateDistance(v.getLongitude(),v.getLatitude(),currentStation.getLongitude(),currentStation.getLatitude());
+
+                        if (distance2<=radius){
+                            //已到站点附近
+                            shiftInfo.setCurrentStationStatus("1"); //到站
                             shiftInfoService.update(shiftInfo);
                         }else {
-                            shiftInfo.setCurrentStationStatus("2");
-                            shiftInfoService.update(shiftInfo);
+                            //进入站点区域
+                            //判断当前车辆是靠近还是远离站点
+                            if (distance1>distance2) {
+                                shiftInfo.setCurrentStationStatus("2"); //靠近
+                                shiftInfoService.update(shiftInfo);
+                            }
+                            else if(distance1<distance2){
+                                shiftInfo.setCurrentStationStatus("3"); //远离
+                                shiftInfoService.update(shiftInfo);
+                            }
                         }
                     }
                 }catch (Exception ex){

+ 21 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dao/RouteTimeTableDAO.java

@@ -0,0 +1,21 @@
+package com.jpsoft.bus.modules.bus.dao;
+
+import java.util.List;
+import org.springframework.stereotype.Repository;
+import com.jpsoft.bus.modules.bus.entity.RouteTimeTable;
+import java.util.Map;
+import com.jpsoft.bus.modules.common.dto.Sort;
+
+@Repository
+public interface RouteTimeTableDAO {
+	int insert(RouteTimeTable entity);
+	int update(RouteTimeTable entity);
+	int exist(String id);
+	RouteTimeTable get(String id);
+	int delete(String id);
+	List<RouteTimeTable> list();
+	RouteTimeTable findByRouteId(String routeId);
+	List<RouteTimeTable> search(Map<String, Object> searchParams, List<Sort> sortList);
+
+	List<RouteTimeTable> findListByRouteId(String routeId);
+}

+ 4 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dao/StationSubInfoDAO.java

@@ -16,4 +16,8 @@ public interface StationSubInfoDAO {
 	int delete(String id);
 	List<StationSubInfo> list();
 	List<StationSubInfo> search(Map<String,Object> searchParams,List<Sort> sortList);
+
+    StationSubInfo findByStationIdStartEnd(String stationId, String startStationId, String endStationId);
+
+    List<StationSubInfo> findByStationId(String stationId);
 }

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

@@ -23,4 +23,6 @@ public interface VehicleInfoDAO {
 	VehicleInfo findByCarNum(String carNum);
 
     List<VehicleInfo> findByCompanyId(String companyId);
+
+    List<VehicleInfo> getRunningList();
 }

+ 7 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dto/StationInfoDTO.java

@@ -1,9 +1,12 @@
 package com.jpsoft.bus.modules.bus.dto;
 
+import com.jpsoft.bus.modules.bus.entity.StationSubInfo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.hibernate.validator.constraints.NotBlank;
 
+import java.util.List;
+
 @Data
 public class StationInfoDTO {
     /**
@@ -44,6 +47,10 @@ public class StationInfoDTO {
 
     @ApiModelProperty(value = "是否删除")
     private Boolean delFlag;
+
     @ApiModelProperty(value = "半径(米)")
     private Integer radius;
+
+    @ApiModelProperty(value = "站点入口")
+    private List<StationSubInfo> stationSubInfoList;
 }

+ 173 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/entity/RouteTimeTable.java

@@ -0,0 +1,173 @@
+package com.jpsoft.bus.modules.bus.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+  描述:bus_route_time_table的实体类
+ */
+public class RouteTimeTable {
+	private String id;
+	private String name;
+	private Integer sort;
+	private String startTime;
+	private String endTime;
+	private String routeId;
+	private String createBy;
+	private Date createTime;
+	private String updateBy;
+	private Date updateTime;
+	private Boolean delFlag;
+	
+		/**
+	 *获取编号
+	 */
+	public String getId(){
+		return id;
+	}
+	
+	/**
+	 *设置编号
+	 */
+	public void setId(String id){
+		this.id = id;
+	}
+		/**
+	 *获取时刻表名称
+	 */
+	public String getName(){
+		return name;
+	}
+	
+	/**
+	 *设置时刻表名称
+	 */
+	public void setName(String name){
+		this.name = name;
+	}
+		/**
+	 *获取排序
+	 */
+	public Integer getSort(){
+		return sort;
+	}
+	
+	/**
+	 *设置排序
+	 */
+	public void setSort(Integer sort){
+		this.sort = sort;
+	}
+		/**
+	 *获取开始时间
+	 */
+	public String getStartTime(){
+		return startTime;
+	}
+	
+	/**
+	 *设置开始时间
+	 */
+	public void setStartTime(String startTime){
+		this.startTime = startTime;
+	}
+		/**
+	 *获取结束时间
+	 */
+	public String getEndTime(){
+		return endTime;
+	}
+	
+	/**
+	 *设置结束时间
+	 */
+	public void setEndTime(String endTime){
+		this.endTime = endTime;
+	}
+		/**
+	 *获取线路ID
+	 */
+	public String getRouteId(){
+		return routeId;
+	}
+	
+	/**
+	 *设置线路ID
+	 */
+	public void setRouteId(String routeId){
+		this.routeId = routeId;
+	}
+		/**
+	 *获取创建人
+	 */
+	public String getCreateBy(){
+		return createBy;
+	}
+	
+	/**
+	 *设置创建人
+	 */
+	public void setCreateBy(String createBy){
+		this.createBy = createBy;
+	}
+		@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+		/**
+	 *获取创建时间
+	 */
+	public Date getCreateTime(){
+		return createTime;
+	}
+	
+	/**
+	 *设置创建时间
+	 */
+	public void setCreateTime(Date createTime){
+		this.createTime = createTime;
+	}
+		/**
+	 *获取更新人
+	 */
+	public String getUpdateBy(){
+		return updateBy;
+	}
+	
+	/**
+	 *设置更新人
+	 */
+	public void setUpdateBy(String updateBy){
+		this.updateBy = updateBy;
+	}
+		@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+		/**
+	 *获取更新时间
+	 */
+	public Date getUpdateTime(){
+		return updateTime;
+	}
+	
+	/**
+	 *设置更新时间
+	 */
+	public void setUpdateTime(Date updateTime){
+		this.updateTime = updateTime;
+	}
+		/**
+	 *获取是否删除
+	 */
+	public Boolean getDelFlag(){
+		return delFlag;
+	}
+	
+	/**
+	 *设置是否删除
+	 */
+	public void setDelFlag(Boolean delFlag){
+		this.delFlag = delFlag;
+	}
+}

+ 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;

+ 22 - 19
common/src/main/java/com/jpsoft/bus/modules/bus/entity/StationSubInfo.java

@@ -4,6 +4,7 @@ import java.io.Serializable;
 import java.util.Date;
 import java.text.SimpleDateFormat;
 import java.math.BigDecimal;
+
 import org.springframework.format.annotation.DateTimeFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
@@ -11,35 +12,37 @@ import io.swagger.annotations.ApiModel;
 import lombok.Data;
 
 /**
-  描述:bus_station_sub_info的实体类
+ * 描述:bus_station_sub_info的实体类
  */
 @Data
 @ApiModel(value = "bus_station_sub_info的实体类")
 public class StationSubInfo {
-        @ApiModelProperty(value = "")
+    @ApiModelProperty(value = "")
     private String id;
-        @ApiModelProperty(value = "对应站点id")
+    @ApiModelProperty(value = "对应站点id")
     private String stationId;
-        @ApiModelProperty(value = "开始站点id")
+    @ApiModelProperty(value = "开始站点id")
     private String startStationId;
-        @ApiModelProperty(value = "终点站点id")
+    @ApiModelProperty(value = "终点站点id")
     private String endStationId;
-        @ApiModelProperty(value = "经度")
-    private BigDecimal longitude;
-        @ApiModelProperty(value = "纬度")
-    private BigDecimal latitude;
-        @ApiModelProperty(value = "创建人")
+    @ApiModelProperty(value = "经度")
+    private Double longitude;
+    @ApiModelProperty(value = "纬度")
+    private Double latitude;
+    @ApiModelProperty(value = "半径(米)")
+    private Integer radius;
+    @ApiModelProperty(value = "创建人")
     private String createBy;
-        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
-	    @ApiModelProperty(value = "创建时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    @ApiModelProperty(value = "创建时间")
     private Date createTime;
-        @ApiModelProperty(value = "更新人")
+    @ApiModelProperty(value = "更新人")
     private String updateBy;
-        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
-	    @ApiModelProperty(value = "更新时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    @ApiModelProperty(value = "更新时间")
     private Date updateTime;
-        @ApiModelProperty(value = "是否删除")
-    private Boolean delFlag;
+    @ApiModelProperty(value = "是否删除")
+    private Boolean delFlag = false;
 }

+ 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/PassengerInfoService.java

@@ -39,4 +39,6 @@ public interface PassengerInfoService {
 	List<PassengerInfo> findByOpenIdAndVehicleShiftId(String openId, String vehicleShiftId, String status,String payStatus);
 
     List<PassengerInfo> findByShiftIdAndStatus(String shiftId, String status);
+
+    DriverBuyTicketDTO driverCreateCashOrder(PassengerInfo passengerInfo, String ticketUpStationId, String ticketDownStationId,String paymentId) throws Exception ;
 }

+ 19 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/RouteTimeTableService.java

@@ -0,0 +1,19 @@
+package com.jpsoft.bus.modules.bus.service;
+
+import java.util.List;
+import java.util.Map;
+import com.jpsoft.bus.modules.bus.entity.RouteTimeTable;
+import com.github.pagehelper.Page;
+import com.jpsoft.bus.modules.common.dto.Sort;
+
+public interface RouteTimeTableService {
+	RouteTimeTable get(String id);
+	boolean exist(String id);
+	int insert(RouteTimeTable model);
+	int update(RouteTimeTable model);
+	int delete(String id);
+	List<RouteTimeTable> list();
+    RouteTimeTable findByRouteId(String routeId);
+	List<RouteTimeTable> findListByRouteId(String routeId);
+	Page<RouteTimeTable> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
+}

+ 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);
 }

+ 4 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/StationSubInfoService.java

@@ -14,4 +14,8 @@ public interface StationSubInfoService {
 	int delete(String id);
 	List<StationSubInfo> list();
 	Page<StationSubInfo> pageSearch(Map<String, Object> searchParams,int pageNum,int pageSize,boolean count,List<Sort> sortList);
+
+    StationSubInfo findByStationIdStartEnd(String currentStationId, String startStationId, String endStationId);
+
+    List<StationSubInfo> findByStationId(String stationId);
 }

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

@@ -24,4 +24,6 @@ public interface VehicleInfoService {
 	void updateGps(VehicleInfo v);
 
     List<VehicleInfo> findByCompanyId(String companyId);
+
+    List<VehicleInfo> getRunningList();
 }

+ 81 - 20
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/GpsServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jpsoft.bus.modules.bus.service.impl;
 
+import com.github.pagehelper.Page;
 import com.jpsoft.bus.modules.bus.dto.StationStatusDTO;
 import com.jpsoft.bus.modules.bus.entity.*;
 import com.jpsoft.bus.modules.bus.service.*;
@@ -36,6 +37,9 @@ public class GpsServiceImpl implements GpsService {
     @Autowired
     private RestTemplate restTemplate;
 
+    @Autowired
+    private StationSubInfoService stationSubInfoService;
+
     @Autowired
     private VehicleInfoService vehicleInfoService;
 
@@ -305,8 +309,6 @@ public class GpsServiceImpl implements GpsService {
         if (shiftInfoList.size() > 0) {
             ShiftInfo shiftInfo = shiftInfoList.get(0);
 
-
-
             RouteInfo routeInfo = routeInfoService.get(shiftInfo.getRouteId());
 
             List<StationInfo> stationInfoList = stationInfoService.findByRouteId(routeInfo.getId());
@@ -339,18 +341,19 @@ public class GpsServiceImpl implements GpsService {
                     int n = 0;
                     for (int i=0;i<stationInfoList.size();i++) {
                         StationInfo stationInfo = stationInfoList.get(i);
-                        int distance = stationInfo.getRadius();
-                        if (stationInfo.getRadius() == null){
-                            distance = 100;
-                        }
-
 
                         if(stationInfo.getSortNo() <= currentIndex){
                             //正向行驶时,排序比当前站小的站点不用计算
                             continue;
                         }
 
-                        if(matchDistance(stationInfo,vehicleInfo,distance)){
+                        int distance = 100;
+
+                        if (stationInfo.getRadius() != null){
+                            distance = stationInfo.getRadius();
+                        }
+
+                        if(matchDistance(stationInfo,shiftInfo.getStartStationId(),shiftInfo.getEndStationId(),vehicleInfo,distance)){
                            currentStationId = stationInfo.getId();
                            break;
                         }
@@ -369,17 +372,19 @@ public class GpsServiceImpl implements GpsService {
                     int n = 0;
                     for (int i=stationInfoList.size() - 1;i>=0;i--) {
                         StationInfo stationInfo = stationInfoList.get(i);
-                        int distance = stationInfo.getRadius();
-                        if (stationInfo.getRadius() == null){
-                            distance = 100;
-                        }
 
                         if (stationInfo.getSortNo() >= currentIndex){
                             //反向行驶时,排序比当前站大的站点不用计算
                             continue;
                         }
 
-                        if(matchDistance(stationInfo,vehicleInfo,distance)){
+                        int distance = 100;
+
+                        if (stationInfo.getRadius() != null){
+                            distance = stationInfo.getRadius();
+                        }
+
+                        if(matchDistance(stationInfo,shiftInfo.getStartStationId(),shiftInfo.getEndStationId(),vehicleInfo,distance)){
                             currentStationId = stationInfo.getId();
                             break;
                         }
@@ -394,18 +399,41 @@ public class GpsServiceImpl implements GpsService {
                     }
                 }
 
+                //gps修改站点时,查询是否有附属站点
+                /*if (!manual){
+
+                    Double lo = Double.valueOf(vehicleInfo.getLongitude());
+                    Double la = Double.valueOf(vehicleInfo.getLatestAddress());
+
+                    //50米
+                    Double maxLo = lo + 0.0005D;
+                    Double minLo = lo - 0.0005D;
+                    Double maxLa = la + 0.0004D;
+                    Double minLa = la - 0.0004D;
+
+
+                    Map<String, Object> searchParams = new HashMap<>();
+                    searchParams.put("maxLongitude", maxLo);
+                    searchParams.put("minLongitude", minLo);
+                    searchParams.put("maxLatitude", maxLa);
+                    searchParams.put("minLatitude", minLa);
+                    searchParams.put("startStationId",shiftInfo.getStartStationId());
+                    searchParams.put("endStationId",shiftInfo.getEndStationId());
+                    List<Sort> sortList = new ArrayList<>();
+                    sortList.add(new Sort("create_time", "desc"));
+                    Page<StationSubInfo> page = stationSubInfoService.pageSearch(searchParams,1,1,false,sortList);
+                    List<StationSubInfo> stationSubInfoList = page.getResult();
+                    if (stationSubInfoList.size()>0){
+                        StationSubInfo stationSubInfo = stationSubInfoList.get(0);
+                        currentStationId = stationSubInfo.getStationId();
+                    }
+                }*/
+
             }
         }
         return currentStationId;
     }
 
-    /**
-     * 查询指定范围内的站点
-     * @param stationInfo
-     * @param vehicleInfo
-     * @param distance
-     * @return
-     */
     @Override
     public boolean matchDistance(StationInfo stationInfo,VehicleInfo vehicleInfo,int distance){
         GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(vehicleInfo.getLatitude()), Double.valueOf(vehicleInfo.getLongitude()));
@@ -421,6 +449,22 @@ public class GpsServiceImpl implements GpsService {
         }
     }
 
+    public boolean matchDistance(StationInfo stationInfo,String startStationId,String endStationId,VehicleInfo vehicleInfo,int distance){
+        StationSubInfo stationSubInfo = stationSubInfoService.findByStationIdStartEnd(stationInfo.getId(),startStationId,endStationId);
+
+        if (stationSubInfo != null){
+            StationInfo subStationInfo = new StationInfo();
+            subStationInfo.setLongitude(stationSubInfo.getLongitude());
+            subStationInfo.setLatitude(stationSubInfo.getLatitude());
+
+            if(matchDistance(subStationInfo,vehicleInfo,stationSubInfo.getRadius())){
+                return true;
+            }
+        }
+
+        return matchDistance(stationInfo,vehicleInfo,distance);
+    }
+
     public String encode(String text) {
         try {
             text = URLEncoder.encode(text, "UTF-8");
@@ -431,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;
 

+ 97 - 31
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/PassengerInfoServiceImpl.java

@@ -131,7 +131,7 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
 
     @Override
     public void passengerFace(VehicleInfo vehicleInfo, ShiftInfo shiftInfo, String retFileUrl, String recordTime,
-                              String stationId,Long libId, Long personId,String localImageUrl) throws Exception {
+                              String stationId, Long libId, Long personId, String localImageUrl) throws Exception {
         Date recordDate = DateUtil.parse(recordTime, "yyyy-MM-dd HH:mm:ss");
 
         //查询是否有已上车的乘客记录
@@ -143,19 +143,18 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
             boolean allow = true;
 
             //如果已过站则不改状态
-            if("2".equals(passengerInfo.getPayStatus())) {
-                log.warn("乘客:{}已过站,不修改状态",passengerInfo.getId());
+            if ("2".equals(passengerInfo.getPayStatus())) {
+                log.warn("乘客:{}已过站,不修改状态", passengerInfo.getId());
                 allow = false;
-            }
-            else if("0".equals(passengerInfo.getPayStatus())){
+            } else if ("0".equals(passengerInfo.getPayStatus())) {
                 //未购票,同时已过站
-                if (!passengerInfo.getUpStationId().equals(shiftInfo.getCurrentStationId())){
+                if (!passengerInfo.getUpStationId().equals(shiftInfo.getCurrentStationId())) {
                     log.warn("乘客:{}未购票且已过站,不修改状态", passengerInfo.getId());
                     allow = false;
                 }
             }
 
-            if(allow){
+            if (allow) {
                 passengerInfo.setLocalImageUrl(localImageUrl);
                 passengerInfo.setDownTime(recordDate);
                 passengerInfo.setDownStationId(stationId);
@@ -334,15 +333,15 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
         if (passengerList.size() == 0) {
             throw new Exception("乘客不存在");
         }
-        if (passengerList.size() != ticketTypeList.size()){
+        if (passengerList.size() != ticketTypeList.size()) {
             throw new Exception("乘客数和购票类型数不一致");
         }
 
 
-        PriceInfo priceInfo = priceInfoService.findByStartStationAndEndStation(ticketUpStationId,ticketDownStationId);
-        if (priceInfo == null || priceInfo.getPrice().compareTo(BigDecimal.ZERO) <=0){
-            PriceInfo priceInfo1 = priceInfoService.findByStartStationAndEndStation(ticketDownStationId,ticketUpStationId);
-            if (priceInfo1 == null || priceInfo1.getPrice().compareTo(BigDecimal.ZERO) <= 0){
+        PriceInfo priceInfo = priceInfoService.findByStartStationAndEndStation(ticketUpStationId, ticketDownStationId);
+        if (priceInfo == null || priceInfo.getPrice().compareTo(BigDecimal.ZERO) <= 0) {
+            PriceInfo priceInfo1 = priceInfoService.findByStartStationAndEndStation(ticketDownStationId, ticketUpStationId);
+            if (priceInfo1 == null || priceInfo1.getPrice().compareTo(BigDecimal.ZERO) <= 0) {
                 throw new Exception("站点间无费用设置");
             }
             priceInfo = priceInfo1;
@@ -390,16 +389,15 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
         }
 
 
-
         String mergeId = mergeOrderId;
-        if (StringUtils.isBlank(mergeOrderId)){
+        if (StringUtils.isBlank(mergeOrderId)) {
             MergeOrderInfo mergeOrderInfo = new MergeOrderInfo();
             mergeOrderInfo.setId(UUID.randomUUID().toString());
             mergeOrderInfo.setVehicleShiftId(shiftInfo.getId());
 
             //当前车辆所属公司
-           // ShiftInfo shiftInfo = shiftInfoService.get(passengerInfo.getVehicleShiftId());
-          //  VehicleInfo vehicleInfo = vehicleInfoService.get(shiftInfo.getVehicleId());
+            // ShiftInfo shiftInfo = shiftInfoService.get(passengerInfo.getVehicleShiftId());
+            //  VehicleInfo vehicleInfo = vehicleInfoService.get(shiftInfo.getVehicleId());
 
             mergeOrderInfo.setCompanyId(vehicleInfo.getCompanyId());
             mergeOrderInfo.setOpenId(openId);
@@ -419,9 +417,9 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
 
         Boolean goodTicketStatus = false;
         List<PassengerRecordDTO> passengerRecordDTOList = new ArrayList<>();
-     //   for (String passengerId : passengerList) {
+        //   for (String passengerId : passengerList) {
 
-        for (int n = 0;n<passengerList.size();n++){
+        for (int n = 0; n < passengerList.size(); n++) {
             BigDecimal price1 = price;
             String passengerId = passengerList.get(n);
             String ticketType = ticketTypeList.get(n);
@@ -433,17 +431,17 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
 
             PassengerRecordDTO passengerRecordDTO = new PassengerRecordDTO();
 
-            OrderInfo orderInfo0 = orderInfoService.findByPassengerIdMergeOrderId(passengerId,mergeId);
-            if (orderInfo0 != null){
+            OrderInfo orderInfo0 = orderInfoService.findByPassengerIdMergeOrderId(passengerId, mergeId);
+            if (orderInfo0 != null) {
                 throw new Exception("有乘客已加入此账单,不可重复添加");
             }
 
             PassengerInfo passengerInfo = get(passengerId);
-            if (!passengerInfo.getUpStationId().equals(upStationId)){
+            if (!passengerInfo.getUpStationId().equals(upStationId)) {
                 throw new Exception("上车站点不一致不可同时选择");
             }
             if ("1".equals(passengerInfo.getStatus())) {
-                if (!"1".equals(passengerInfo.getPayStatus())){
+                if (!"1".equals(passengerInfo.getPayStatus())) {
                     //创建订单
                     OrderInfo orderInfo = new OrderInfo();
                     orderInfo.setId(UUID.randomUUID().toString());
@@ -456,7 +454,7 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
                     orderInfo.setPassengerId(passengerId);
                     orderInfo.setTicketType(ticketType);
 
-                    if (!goodTicketStatus){
+                    if (!goodTicketStatus) {
                         orderInfo.setGoodsTicket(new BigDecimal(goodsTicket));
                         orderInfo.setTotalFee(price1.add(new BigDecimal(goodsTicket)));
                         goodTicketStatus = true;
@@ -479,17 +477,16 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
                     passengerRecordDTO.setTicketType(orderInfo.getTicketType());
                     passengerRecordDTO.setTicketTypeName(passengerRecordDTO.getTicketTypeName(passengerRecordDTO.getTicketType()));
                     passengerRecordDTO.setGoodTicket(orderInfo.getGoodsTicket());
-                    passengerRecordDTO.setPayTime(DateUtil.format(orderInfo.getPayTime(),"yyyy-MM-dd HH:mm:ss"));
+                    passengerRecordDTO.setPayTime(DateUtil.format(orderInfo.getPayTime(), "yyyy-MM-dd HH:mm:ss"));
                     passengerRecordDTO.setTotalFee(orderInfo.getTotalFee());
                     passengerRecordDTOList.add(passengerRecordDTO);
 
-                }else {
+                } else {
                     throw new Exception("乘客已购票");
                 }
 
 
-
-            }else {
+            } else {
                 throw new Exception("乘客已下车");
             }
         }
@@ -515,17 +512,86 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
     }
 
     @Override
-    public List<PassengerInfo> findByOpenIdAndStatus(String openId, String status,String payStatus) {
-        return passengerInfoDAO.findByOpenIdAndStatus(openId,status,payStatus);
+    public List<PassengerInfo> findByOpenIdAndStatus(String openId, String status, String payStatus) {
+        return passengerInfoDAO.findByOpenIdAndStatus(openId, status, payStatus);
     }
 
     @Override
     public List<PassengerInfo> findByOpenIdAndVehicleShiftId(String openId, String vehicleShiftId, String status, String payStatus) {
-        return passengerInfoDAO.findByOpenIdAndVehicleShiftId(openId,vehicleShiftId,status,payStatus);
+        return passengerInfoDAO.findByOpenIdAndVehicleShiftId(openId, vehicleShiftId, status, payStatus);
     }
 
     @Override
     public List<PassengerInfo> findByShiftIdAndStatus(String shiftId, String status) {
-        return passengerInfoDAO.findByShiftIdAndStatus(shiftId,status);
+        return passengerInfoDAO.findByShiftIdAndStatus(shiftId, status);
+    }
+
+    @Override
+    public DriverBuyTicketDTO driverCreateCashOrder(PassengerInfo passengerInfo, String ticketUpStationId, String ticketDownStationId,String paymentId) throws Exception{
+        DriverBuyTicketDTO driverBuyTicketDTO = new DriverBuyTicketDTO();
+
+
+        //查询车票价格
+        PriceInfo priceInfo = priceInfoService.findByStartStationAndEndStation(ticketUpStationId,ticketDownStationId);
+        if (priceInfo == null || priceInfo.getPrice().compareTo(BigDecimal.ZERO) <=0){
+            PriceInfo priceInfo1 = priceInfoService.findByStartStationAndEndStation(ticketDownStationId,ticketUpStationId);
+            if (priceInfo1 == null || priceInfo1.getPrice().compareTo(BigDecimal.ZERO) <= 0){
+                throw new Exception("站点间无费用设置");
+            }
+            priceInfo = priceInfo1;
+        }
+
+        BigDecimal price = priceInfo.getPrice();
+
+        //创建综合账单
+        MergeOrderInfo mergeOrderInfo = new MergeOrderInfo();
+        mergeOrderInfo.setId(UUID.randomUUID().toString());
+        mergeOrderInfo.setVehicleShiftId(passengerInfo.getVehicleShiftId());
+        //当前车辆所属公司
+        ShiftInfo shiftInfo = shiftInfoService.get(passengerInfo.getVehicleShiftId());
+        VehicleInfo vehicleInfo = vehicleInfoService.get(shiftInfo.getVehicleId());
+
+        mergeOrderInfo.setPayStatus(20);
+        mergeOrderInfo.setCompanyId(vehicleInfo.getCompanyId());
+        mergeOrderInfo.setOutOrderNo(wxJpsoftConfig.getUrlKey() + com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
+        mergeOrderInfo.setPayName("cash");
+        mergeOrderInfo.setPaymentId(paymentId);
+        mergeOrderInfo.setCreateTime(new Date());
+        mergeOrderInfoService.insert(mergeOrderInfo);
+
+        OrderInfo orderInfo = new OrderInfo();
+        orderInfo.setId(UUID.randomUUID().toString());
+        orderInfo.setBody("买车票");
+        orderInfo.setTotalFee(price);
+        orderInfo.setPayStatus(20);
+        orderInfo.setPayName("cash");
+        orderInfo.setPayFee(price);
+        orderInfo.setPayTime(new Date());
+        orderInfo.setOutOrderNo(com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
+        orderInfo.setMergeOrderId(mergeOrderInfo.getId());
+        orderInfo.setTransactionId(orderInfo.getOutOrderNo());
+        orderInfo.setPassengerId(passengerInfo.getId());
+        orderInfo.setTicketType("2");
+        orderInfo.setCreateTime(new Date());
+        orderInfo.setGoodsTicket(BigDecimal.ZERO);
+        orderInfo.setTicketUpStationId(ticketUpStationId);
+        orderInfo.setTicketDownStationId(ticketDownStationId);
+        orderInfoService.insert(orderInfo);
+
+        //乘客记录添加购票上车点和下车点
+        passengerInfo.setTicketUpStationId(ticketUpStationId);
+        passengerInfo.setTicketDownStationId(ticketDownStationId);
+        passengerInfo.setTicketType("2");
+
+        //乘客购票状态修改
+        passengerInfo.setPayStatus("1");
+        update(passengerInfo);
+
+        driverBuyTicketDTO.setPayName("cash");
+        driverBuyTicketDTO.setPayNameStr("现金");
+        driverBuyTicketDTO.setTotalFee(price);
+
+
+        return driverBuyTicketDTO;
     }
 }

+ 82 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/RouteTimeTableServiceImpl.java

@@ -0,0 +1,82 @@
+package com.jpsoft.bus.modules.bus.service.impl;
+
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import com.jpsoft.bus.modules.bus.dao.RouteTimeTableDAO;
+import com.jpsoft.bus.modules.bus.entity.RouteTimeTable;
+import com.jpsoft.bus.modules.bus.service.RouteTimeTableService;
+import com.github.pagehelper.Page;
+import com.jpsoft.bus.modules.common.dto.Sort;
+import com.github.pagehelper.PageHelper;
+
+@Transactional
+@Component(value="routeTimeTableService")
+public class RouteTimeTableServiceImpl implements RouteTimeTableService {
+	@Resource(name="routeTimeTableDAO")
+	private RouteTimeTableDAO routeTimeTableDAO;
+
+	@Override
+	public RouteTimeTable get(String id) {
+		// TODO Auto-generated method stub
+		return routeTimeTableDAO.get(id);
+	}
+
+	@Override
+	public int insert(RouteTimeTable model) {
+		// TODO Auto-generated method stub
+		//model.setId(UUID.randomUUID().toString());
+		
+		return routeTimeTableDAO.insert(model);
+	}
+
+	@Override
+	public int update(RouteTimeTable model) {
+		// TODO Auto-generated method stub
+		return routeTimeTableDAO.update(model);		
+	}
+
+	@Override
+	public int delete(String id) {
+		// TODO Auto-generated method stub
+		return routeTimeTableDAO.delete(id);
+	}
+
+	@Override
+	public boolean exist(String id) {
+		// TODO Auto-generated method stub
+		int count = routeTimeTableDAO.exist(id);
+
+		return count > 0 ? true : false;
+	}
+
+	@Override
+	public List<RouteTimeTable> list() {
+		// TODO Auto-generated method stub
+		return routeTimeTableDAO.list();
+	}
+
+    @Override
+    public RouteTimeTable findByRouteId(String routeId){
+        return routeTimeTableDAO.findByRouteId(routeId);
+    }
+
+
+
+	@Override
+	public Page<RouteTimeTable> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize,boolean count,List<Sort> sortList) {
+		Page<RouteTimeTable> page = PageHelper.startPage(pageNumber,pageSize,count).doSelectPage(()->{
+			routeTimeTableDAO.search(searchParams,sortList);
+		});
+
+		return page;
+	}
+
+	@Override
+	public List<RouteTimeTable> findListByRouteId(String routeId) {
+		return routeTimeTableDAO.findListByRouteId(routeId);
+	}
+}

+ 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);
+						}
+					}
+				}
+			}
+		}
+	}
 }

+ 16 - 6
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/StationSubInfoServiceImpl.java

@@ -30,14 +30,14 @@ public class StationSubInfoServiceImpl implements StationSubInfoService {
 	public int insert(StationSubInfo model) {
 		// TODO Auto-generated method stub
 		//model.setId(UUID.randomUUID().toString());
-		
+
 		return stationSubInfoDAO.insert(model);
 	}
 
 	@Override
 	public int update(StationSubInfo model) {
 		// TODO Auto-generated method stub
-		return stationSubInfoDAO.update(model);		
+		return stationSubInfoDAO.update(model);
 	}
 
 	@Override
@@ -50,22 +50,32 @@ public class StationSubInfoServiceImpl implements StationSubInfoService {
 	public boolean exist(String id) {
 		// TODO Auto-generated method stub
 		int count = stationSubInfoDAO.exist(id);
-		
+
 		return count > 0 ? true : false;
 	}
-	
+
 	@Override
 	public List<StationSubInfo> list() {
 		// TODO Auto-generated method stub
 		return stationSubInfoDAO.list();
 	}
-		
+
 	@Override
 	public Page<StationSubInfo> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize,boolean count,List<Sort> sortList) {
         Page<StationSubInfo> page = PageHelper.startPage(pageNumber,pageSize,count).doSelectPage(()->{
             stationSubInfoDAO.search(searchParams,sortList);
         });
-        
+
         return page;
 	}
+
+	@Override
+	public StationSubInfo findByStationIdStartEnd(String currentStationId, String startStationId, String endStationId) {
+		return stationSubInfoDAO.findByStationIdStartEnd(currentStationId,startStationId,endStationId);
+	}
+
+	@Override
+	public List<StationSubInfo> findByStationId(String stationId) {
+		return stationSubInfoDAO.findByStationId(stationId);
+	}
 }

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

@@ -91,4 +91,9 @@ public class VehicleInfoServiceImpl implements VehicleInfoService {
 	public VehicleInfo findByCarNum(String carNum){
 		return vehicleInfoDAO.findByCarNum(carNum);
 	}
+
+	@Override
+	public List<VehicleInfo> getRunningList() {
+		return vehicleInfoDAO.getRunningList();
+	}
 }

+ 118 - 0
common/src/main/resources/mapper/bus/RouteTimeTable.xml

@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- namespace必须指向DAO接口 -->
+<mapper namespace="com.jpsoft.bus.modules.bus.dao.RouteTimeTableDAO">
+	<resultMap id="RouteTimeTableMap" type="com.jpsoft.bus.modules.bus.entity.RouteTimeTable">
+		<id property="id" column="id_" />
+			<result property="name" column="name_" />
+			<result property="sort" column="sort_" />
+			<result property="startTime" column="start_time" />
+			<result property="endTime" column="end_time" />
+			<result property="routeId" column="route_id" />
+			<result property="createBy" column="create_by" />
+			<result property="createTime" column="create_time" />
+			<result property="updateBy" column="update_by" />
+			<result property="updateTime" column="update_time" />
+			<result property="delFlag" column="del_flag" />
+			</resultMap>
+	<insert id="insert" parameterType="com.jpsoft.bus.modules.bus.entity.RouteTimeTable">
+	<!--
+	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+		select sys_guid() from dual
+	</selectKey>
+	-->
+	<![CDATA[
+		insert into bus_route_time_table
+	    (id_,name_,sort_,start_time,end_time,route_id,create_by,create_time,update_by,update_time,del_flag)
+		values
+		(
+#{id,jdbcType=VARCHAR}
+,#{name,jdbcType=VARCHAR}
+,#{sort,jdbcType= NUMERIC }
+,#{startTime,jdbcType=VARCHAR}
+,#{endTime,jdbcType=VARCHAR}
+,#{routeId,jdbcType=VARCHAR}
+,#{createBy,jdbcType=VARCHAR}
+,#{createTime,jdbcType= TIMESTAMP }
+,#{updateBy,jdbcType=VARCHAR}
+,#{updateTime,jdbcType= TIMESTAMP }
+,#{delFlag,jdbcType= NUMERIC }
+		)
+	]]>
+	</insert>
+	<delete id="delete" parameterType="string">
+		delete from bus_route_time_table where id_=#{id,jdbcType=VARCHAR}
+	</delete>
+	<update id="update" parameterType="com.jpsoft.bus.modules.bus.entity.RouteTimeTable">
+		update bus_route_time_table
+		<set>
+				<if test="name!=null">
+		name_=#{name,jdbcType=VARCHAR},
+		</if>
+				<if test="sort!=null">
+		sort_=#{sort,jdbcType= NUMERIC },
+		</if>
+				<if test="startTime!=null">
+		start_time=#{startTime,jdbcType=VARCHAR},
+		</if>
+				<if test="endTime!=null">
+		end_time=#{endTime,jdbcType=VARCHAR},
+		</if>
+				<if test="routeId!=null">
+		route_id=#{routeId,jdbcType=VARCHAR},
+		</if>
+				<if test="createBy!=null">
+		create_by=#{createBy,jdbcType=VARCHAR},
+		</if>
+				<if test="createTime!=null">
+		create_time=#{createTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="updateBy!=null">
+		update_by=#{updateBy,jdbcType=VARCHAR},
+		</if>
+				<if test="updateTime!=null">
+		update_time=#{updateTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="delFlag!=null">
+		del_flag=#{delFlag,jdbcType= NUMERIC },
+		</if>
+		</set>
+	where id_=#{id}
+	</update>
+	<select id="get" parameterType="string" resultMap="RouteTimeTableMap">
+		select
+id_,name_,sort_,start_time,end_time,route_id,create_by,create_time,update_by,update_time,del_flag		from bus_route_time_table where id_=#{0}
+	</select>
+	<select id="exist" parameterType="string" resultType="int">
+		select count(*) from bus_route_time_table where id_=#{0}
+	</select>
+	<select id="list" resultMap="RouteTimeTableMap">
+		select * from bus_route_time_table
+	</select>
+	<select id="findByRouteId" resultMap="RouteTimeTableMap">
+		select * from bus_route_time_table where del_flag = false and route_id = #{0} order by sort_ desc limit 1
+	</select>
+
+	<select id="search" parameterType="hashmap" resultMap="RouteTimeTableMap">
+		<![CDATA[
+			select * from bus_route_time_table
+		]]>
+		<where>
+			del_flag = false
+			<if test="searchParams.routeId != null">
+				and route_id = #{searchParams.routeId}
+			</if>
+		</where>
+		<foreach item="sort" collection="sortList"  open="order by" separator=",">
+	        ${sort.name} ${sort.order}
+	 	</foreach>
+	</select>
+	<select id="findListByRouteId" resultMap="RouteTimeTableMap">
+		<![CDATA[
+		select * from bus_route_time_table
+		where del_flag = 0
+		and route_id = #{routeId}
+		]]>
+	</select>
+</mapper>

+ 134 - 135
common/src/main/resources/mapper/bus/StationInfo.xml

@@ -1,169 +1,168 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- namespace必须指向DAO接口 -->
 <mapper namespace="com.jpsoft.bus.modules.bus.dao.StationInfoDAO">
-	<resultMap id="StationInfoMap" type="com.jpsoft.bus.modules.bus.entity.StationInfo">
-		<id property="id" column="id_" />
-			<result property="sortNo" column="sort_no" />
-			<result property="routeId" column="route_id" />
-			<result property="name" column="name_" />
-			<result property="longitude" column="longitude_" />
-			<result property="latitude" column="latitude_" />
-			<result property="classify" column="classify_" />
-			<result property="createBy" column="create_by" />
-			<result property="createTime" column="create_time" />
-			<result property="updateBy" column="update_by" />
-			<result property="updateTime" column="update_time" />
-			<result property="delFlag" column="del_flag" />
-			<result property="radius" column="radius_" />
-			</resultMap>
-	<insert id="insert" parameterType="com.jpsoft.bus.modules.bus.entity.StationInfo">
-	<!--
-	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
-		select sys_guid() from dual
-	</selectKey>
-	-->
-	<![CDATA[
+    <resultMap id="StationInfoMap" type="com.jpsoft.bus.modules.bus.entity.StationInfo">
+        <id property="id" column="id_"/>
+        <result property="sortNo" column="sort_no"/>
+        <result property="routeId" column="route_id"/>
+        <result property="name" column="name_"/>
+        <result property="longitude" column="longitude_"/>
+        <result property="latitude" column="latitude_"/>
+        <result property="classify" column="classify_"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="radius" column="radius_"/>
+    </resultMap>
+    <insert id="insert" parameterType="com.jpsoft.bus.modules.bus.entity.StationInfo">
+        <!--
+        <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+            select sys_guid() from dual
+        </selectKey>
+        -->
+        <![CDATA[
 		insert into bus_station_info
 	    (id_,sort_no,route_id,name_,longitude_,latitude_,classify_,create_by,create_time,update_by,update_time,del_flag,radius_)
 		values
 		(
-#{id,jdbcType=VARCHAR}
-,#{sortNo,jdbcType= NUMERIC }
-,#{routeId,jdbcType=VARCHAR}
-,#{name,jdbcType=VARCHAR}
-,#{longitude,jdbcType=DOUBLE}
-,#{latitude,jdbcType=DOUBLE}
-,#{classify,jdbcType= NUMERIC }
-,#{createBy,jdbcType=VARCHAR}
-,#{createTime,jdbcType= TIMESTAMP }
-,#{updateBy,jdbcType=VARCHAR}
-,#{updateTime,jdbcType= TIMESTAMP }
-,#{delFlag,jdbcType= NUMERIC }
-,#{radius,jdbcType= NUMERIC }
+            #{id,jdbcType=VARCHAR}
+            ,#{sortNo,jdbcType= NUMERIC }
+            ,#{routeId,jdbcType=VARCHAR}
+            ,#{name,jdbcType=VARCHAR}
+            ,#{longitude,jdbcType=DOUBLE}
+            ,#{latitude,jdbcType=DOUBLE}
+            ,#{classify,jdbcType= NUMERIC }
+            ,#{createBy,jdbcType=VARCHAR}
+            ,#{createTime,jdbcType= TIMESTAMP }
+            ,#{updateBy,jdbcType=VARCHAR}
+            ,#{updateTime,jdbcType= TIMESTAMP }
+            ,#{delFlag,jdbcType= NUMERIC }
+            ,#{radius,jdbcType= NUMERIC }
 		)
 	]]>
-	</insert>
-	<delete id="delete" parameterType="string">
-		delete from bus_station_info where id_=#{id,jdbcType=VARCHAR}
-	</delete>
-	<update id="update" parameterType="com.jpsoft.bus.modules.bus.entity.StationInfo">
-		update bus_station_info
-		<set>
-				<if test="sortNo!=null">
-		sort_no=#{sortNo,jdbcType= NUMERIC },
-		</if>
-				<if test="routeId!=null">
-		route_id=#{routeId,jdbcType=VARCHAR},
-		</if>
-				<if test="name!=null">
-		name_=#{name,jdbcType=VARCHAR},
-		</if>
-				<if test="longitude!=null">
-		longitude_=#{longitude,jdbcType=DOUBLE},
-		</if>
-				<if test="latitude!=null">
-		latitude_=#{latitude,jdbcType=DOUBLE},
-		</if>
-				<if test="classify!=null">
-		classify_=#{classify,jdbcType= NUMERIC },
-		</if>
-				<if test="createBy!=null">
-		create_by=#{createBy,jdbcType=VARCHAR},
-		</if>
-				<if test="createTime!=null">
-		create_time=#{createTime,jdbcType= TIMESTAMP },
-		</if>
-				<if test="updateBy!=null">
-		update_by=#{updateBy,jdbcType=VARCHAR},
-		</if>
-				<if test="updateTime!=null">
-		update_time=#{updateTime,jdbcType= TIMESTAMP },
-		</if>
-				<if test="delFlag!=null">
-		del_flag=#{delFlag,jdbcType= NUMERIC },
-		</if>
-			<if test="radius!=null">
-				radius_=#{radius,jdbcType= NUMERIC },
-			</if>
-		</set>
-	where id_=#{id}
-	</update>
-	<select id="get" parameterType="string" resultMap="StationInfoMap">
-		select
-id_,sort_no,route_id,name_,longitude_,latitude_,classify_,create_by,create_time,update_by,update_time,del_flag		from bus_station_info where id_=#{0}
-	</select>
-	<select id="exist" parameterType="string" resultType="int">
-		select count(*) from bus_station_info where id_=#{0}
-	</select>
-	<select id="list" resultMap="StationInfoMap">
-		select * from bus_station_info
-	</select>
-	<select id="findByRouteId" resultMap="StationInfoMap">
-		select * from bus_station_info where del_flag = false and route_id = #{0} order by sort_no asc
-	</select>
-	<select id="search" parameterType="hashmap" resultMap="StationInfoMap">
-		<![CDATA[
+    </insert>
+    <delete id="delete" parameterType="string">
+        delete from bus_station_info where id_=#{id,jdbcType=VARCHAR}
+    </delete>
+    <update id="update" parameterType="com.jpsoft.bus.modules.bus.entity.StationInfo">
+        update bus_station_info
+        <set>
+            <if test="sortNo!=null">
+                sort_no=#{sortNo,jdbcType= NUMERIC },
+            </if>
+            <if test="routeId!=null">
+                route_id=#{routeId,jdbcType=VARCHAR},
+            </if>
+            <if test="name!=null">
+                name_=#{name,jdbcType=VARCHAR},
+            </if>
+            <if test="longitude!=null">
+                longitude_=#{longitude,jdbcType=DOUBLE},
+            </if>
+            <if test="latitude!=null">
+                latitude_=#{latitude,jdbcType=DOUBLE},
+            </if>
+            <if test="classify!=null">
+                classify_=#{classify,jdbcType= NUMERIC },
+            </if>
+            <if test="createBy!=null">
+                create_by=#{createBy,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime!=null">
+                create_time=#{createTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="updateBy!=null">
+                update_by=#{updateBy,jdbcType=VARCHAR},
+            </if>
+            <if test="updateTime!=null">
+                update_time=#{updateTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="delFlag!=null">
+                del_flag=#{delFlag,jdbcType= NUMERIC },
+            </if>
+            <if test="radius!=null">
+                radius_=#{radius,jdbcType= NUMERIC },
+            </if>
+        </set>
+        where id_=#{id}
+    </update>
+    <select id="get" parameterType="string" resultMap="StationInfoMap">
+        select * from bus_station_info where id_=#{0}
+    </select>
+    <select id="exist" parameterType="string" resultType="int">
+        select count(*) from bus_station_info where id_=#{0}
+    </select>
+    <select id="list" resultMap="StationInfoMap">
+        select * from bus_station_info
+    </select>
+    <select id="findByRouteId" resultMap="StationInfoMap">
+        select * from bus_station_info where del_flag = false and route_id = #{0} order by sort_no asc
+    </select>
+    <select id="search" parameterType="hashmap" resultMap="StationInfoMap">
+        <![CDATA[
 			select a.* from bus_station_info a
 			left join bus_route_info b on a.route_id = b.id_
 		]]>
-		<where>
-			a.del_flag = 0
-			and b.del_flag = 0
-			<if test="searchParams.id != null">
-				and a.ID_ like #{searchParams.id}
-			</if>
-			<if test="searchParams.maxLongitude != null">
-				<![CDATA[
+        <where>
+            a.del_flag = 0
+            and b.del_flag = 0
+            <if test="searchParams.id != null">
+                and a.ID_ like #{searchParams.id}
+            </if>
+            <if test="searchParams.maxLongitude != null">
+                <![CDATA[
 				and longitude_ <= #{searchParams.maxLongitude}
 				]]>
-			</if>
-			<if test="searchParams.minLongitude != null">
-				<![CDATA[
+            </if>
+            <if test="searchParams.minLongitude != null">
+                <![CDATA[
 				and a.longitude_ >= #{searchParams.minLongitude}
 				]]>
-			</if>
-			<if test="searchParams.maxLatitude != null">
-				<![CDATA[
+            </if>
+            <if test="searchParams.maxLatitude != null">
+                <![CDATA[
 				and a.latitude_ <= #{searchParams.maxLatitude}
 				]]>
-			</if>
-			<if test="searchParams.minLatitude != null">
-				and a.latitude_ >= #{searchParams.minLatitude}
-			</if>
-			<if test="searchParams.routeId != null">
-				and a.route_id like #{searchParams.routeId}
-			</if>
-			<if test="searchParams.name !=null ">
-				and a.name_ like #{searchParams.name}
-			</if>
-			<if test="searchParams.regionId">
-				and b.region_id = #{searchParams.regionId}
-			</if>
-		</where>
-		<foreach item="sort" collection="sortList"  open="order by" separator=",">
-	        ${sort.name} ${sort.order}
-	 	</foreach>
-	</select>
+            </if>
+            <if test="searchParams.minLatitude != null">
+                and a.latitude_ >= #{searchParams.minLatitude}
+            </if>
+            <if test="searchParams.routeId != null">
+                and a.route_id like #{searchParams.routeId}
+            </if>
+            <if test="searchParams.name !=null ">
+                and a.name_ like #{searchParams.name}
+            </if>
+            <if test="searchParams.regionId">
+                and b.region_id = #{searchParams.regionId}
+            </if>
+        </where>
+        <foreach item="sort" collection="sortList" open="order by" separator=",">
+            ${sort.name} ${sort.order}
+        </foreach>
+    </select>
 
-	<select id="findByRouteIdAndClassify" resultMap="StationInfoMap">
-		<![CDATA[
+    <select id="findByRouteIdAndClassify" resultMap="StationInfoMap">
+        <![CDATA[
 		select * from bus_station_info
 		where del_flag = 0
 		and route_id = #{routeId}
 		and classify_ = #{classify}
 		]]>
-	</select>
+    </select>
 
-	<select id="findByRouteIdAndName" resultMap="StationInfoMap">
-		<![CDATA[
+    <select id="findByRouteIdAndName" resultMap="StationInfoMap">
+        <![CDATA[
 		select * from bus_station_info
 		where del_flag = 0
 		and route_id = #{routeId}
 		and name_ = #{name}
 		limit 1
 		]]>
-	</select>
+    </select>
 
 </mapper>

+ 142 - 95
common/src/main/resources/mapper/bus/StationSubInfo.xml

@@ -1,106 +1,153 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- namespace必须指向DAO接口 -->
 <mapper namespace="com.jpsoft.bus.modules.bus.dao.StationSubInfoDAO">
-	<resultMap id="StationSubInfoMap" type="com.jpsoft.bus.modules.bus.entity.StationSubInfo">
-		<id property="id" column="id_" />
-			<result property="stationId" column="station_id" />
-			<result property="startStationId" column="start_station_id" />
-			<result property="endStationId" column="end_station_id" />
-			<result property="longitude" column="longitude_" />
-			<result property="latitude" column="latitude_" />
-			<result property="createBy" column="create_by" />
-			<result property="createTime" column="create_time" />
-			<result property="updateBy" column="update_by" />
-			<result property="updateTime" column="update_time" />
-			<result property="delFlag" column="del_flag" />
-			</resultMap>
-	<insert id="insert" parameterType="com.jpsoft.bus.modules.bus.entity.StationSubInfo">
-	<!--
-	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
-		select sys_guid() from dual
-	</selectKey>
-	-->
-	<![CDATA[
+    <resultMap id="StationSubInfoMap" type="com.jpsoft.bus.modules.bus.entity.StationSubInfo">
+        <id property="id" column="id_"/>
+        <result property="stationId" column="station_id"/>
+        <result property="startStationId" column="start_station_id"/>
+        <result property="endStationId" column="end_station_id"/>
+        <result property="longitude" column="longitude_"/>
+        <result property="latitude" column="latitude_"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="radius" column="radius_"/>
+    </resultMap>
+    <insert id="insert" parameterType="com.jpsoft.bus.modules.bus.entity.StationSubInfo">
+        <!--
+        <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+            select sys_guid() from dual
+        </selectKey>
+        -->
+        <![CDATA[
 		insert into bus_station_sub_info
-	    (id_,station_id,start_station_id,end_station_id,longitude_,latitude_,create_by,create_time,update_by,update_time,del_flag)
+	    (id_,station_id,start_station_id,end_station_id,longitude_,latitude_,create_by,create_time,update_by,update_time,del_flag,radius_)
 		values
 		(
-#{id,jdbcType=VARCHAR}
-,#{stationId,jdbcType=VARCHAR}
-,#{startStationId,jdbcType=VARCHAR}
-,#{endStationId,jdbcType=VARCHAR}
-,#{longitude,jdbcType= NUMERIC }
-,#{latitude,jdbcType= NUMERIC }
-,#{createBy,jdbcType=VARCHAR}
-,#{createTime,jdbcType= TIMESTAMP }
-,#{updateBy,jdbcType=VARCHAR}
-,#{updateTime,jdbcType= TIMESTAMP }
-,#{delFlag,jdbcType= NUMERIC }
+			#{id,jdbcType=VARCHAR}
+			,#{stationId,jdbcType=VARCHAR}
+			,#{startStationId,jdbcType=VARCHAR}
+			,#{endStationId,jdbcType=VARCHAR}
+			,#{longitude,jdbcType= NUMERIC }
+			,#{latitude,jdbcType= NUMERIC }
+			,#{createBy,jdbcType=VARCHAR}
+			,#{createTime,jdbcType= TIMESTAMP }
+			,#{updateBy,jdbcType=VARCHAR}
+			,#{updateTime,jdbcType= TIMESTAMP }
+			,#{delFlag,jdbcType= NUMERIC }
+            ,#{radius,jdbcType= NUMERIC }
 		)
 	]]>
-	</insert>
-	<delete id="delete" parameterType="string">
-		delete from bus_station_sub_info where id_=#{id,jdbcType=VARCHAR}
-	</delete>
-	<update id="update" parameterType="com.jpsoft.bus.modules.bus.entity.StationSubInfo">
-		update bus_station_sub_info
-		<set>
-				<if test="stationId!=null">
-		station_id=#{stationId,jdbcType=VARCHAR},
-		</if>
-				<if test="startStationId!=null">
-		start_station_id=#{startStationId,jdbcType=VARCHAR},
-		</if>
-				<if test="endStationId!=null">
-		end_station_id=#{endStationId,jdbcType=VARCHAR},
-		</if>
-				<if test="longitude!=null">
-		longitude_=#{longitude,jdbcType= NUMERIC },
-		</if>
-				<if test="latitude!=null">
-		latitude_=#{latitude,jdbcType= NUMERIC },
-		</if>
-				<if test="createBy!=null">
-		create_by=#{createBy,jdbcType=VARCHAR},
-		</if>
-				<if test="createTime!=null">
-		create_time=#{createTime,jdbcType= TIMESTAMP },
-		</if>
-				<if test="updateBy!=null">
-		update_by=#{updateBy,jdbcType=VARCHAR},
-		</if>
-				<if test="updateTime!=null">
-		update_time=#{updateTime,jdbcType= TIMESTAMP },
-		</if>
-				<if test="delFlag!=null">
-		del_flag=#{delFlag,jdbcType= NUMERIC },
-		</if>
-		</set>
-	where id_=#{id}
-	</update>
-	<select id="get" parameterType="string" resultMap="StationSubInfoMap">
-		select 
-id_,station_id,start_station_id,end_station_id,longitude_,latitude_,create_by,create_time,update_by,update_time,del_flag		from bus_station_sub_info where id_=#{0}
-	</select>
-	<select id="exist" parameterType="string" resultType="int">
-		select count(*) from bus_station_sub_info where id_=#{0}
-	</select>
-	<select id="list" resultMap="StationSubInfoMap">
-		select * from bus_station_sub_info
-	</select>
-	<select id="search" parameterType="hashmap" resultMap="StationSubInfoMap">
-		<![CDATA[
+    </insert>
+    <delete id="delete" parameterType="string">
+        delete from bus_station_sub_info where id_=#{id,jdbcType=VARCHAR}
+    </delete>
+    <update id="update" parameterType="com.jpsoft.bus.modules.bus.entity.StationSubInfo">
+        update bus_station_sub_info
+        <set>
+            <if test="stationId!=null">
+                station_id=#{stationId,jdbcType=VARCHAR},
+            </if>
+            <if test="startStationId!=null">
+                start_station_id=#{startStationId,jdbcType=VARCHAR},
+            </if>
+            <if test="endStationId!=null">
+                end_station_id=#{endStationId,jdbcType=VARCHAR},
+            </if>
+            <if test="longitude!=null">
+                longitude_=#{longitude,jdbcType= NUMERIC },
+            </if>
+            <if test="latitude!=null">
+                latitude_=#{latitude,jdbcType= NUMERIC },
+            </if>
+            <if test="createBy!=null">
+                create_by=#{createBy,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime!=null">
+                create_time=#{createTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="updateBy!=null">
+                update_by=#{updateBy,jdbcType=VARCHAR},
+            </if>
+            <if test="updateTime!=null">
+                update_time=#{updateTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="delFlag!=null">
+                del_flag=#{delFlag,jdbcType= NUMERIC },
+            </if>
+            <if test="radius!=null">
+                radius_=#{radius,jdbcType= NUMERIC },
+            </if>
+        </set>
+        where id_=#{id}
+    </update>
+    <select id="get" parameterType="string" resultMap="StationSubInfoMap">
+        select * from bus_station_sub_info where id_=#{0}
+    </select>
+    <select id="exist" parameterType="string" resultType="int">
+        select count(*) from bus_station_sub_info where id_=#{0}
+    </select>
+    <select id="list" resultMap="StationSubInfoMap">
+        select * from bus_station_sub_info
+    </select>
+    <select id="search" parameterType="hashmap" resultMap="StationSubInfoMap">
+        <![CDATA[
 			select * from bus_station_sub_info
 		]]>
-		<where>
-			<if test="searchParams.id != null">
-				and ID_ like #{searchParams.id}
-			</if>
-		</where>
-		<foreach item="sort" collection="sortList"  open="order by" separator=",">
-	        ${sort.name} ${sort.order}
-	 	</foreach>
-	</select>
+        <where>
+            <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>
+
+            <if test="searchParams.startStationId != null">
+                and start_station_id = #{searchParams.startStationId}
+            </if>
+            <if test="searchParams.endStationId != null">
+                and end_station_id = #{searchParams.endStationId}
+            </if>
+
+        </where>
+        <foreach item="sort" collection="sortList" open="order by" separator=",">
+            ${sort.name} ${sort.order}
+        </foreach>
+    </select>
+    <select id="findByStationIdStartEnd" resultMap="StationSubInfoMap">
+        <![CDATA[
+		select * from bus_station_sub_info
+		where del_flag = 0
+		and station_id = #{stationId}
+		and start_station_id = #{startStationId}
+		and end_station_id = #{endStationId}
+		limit 1
+		]]>
+    </select>
+    <select id="findByStationId" resultMap="StationSubInfoMap">
+        <![CDATA[
+            select * from bus_station_sub_info
+            where del_flag = 0
+            and station_id = #{stationId}
+		]]>
+    </select>
 </mapper>

+ 7 - 1
common/src/main/resources/mapper/bus/VehicleInfo.xml

@@ -187,6 +187,8 @@
 		update bus_vehicle_info
 		<set>
 			update_time=now(),
+			running_=1,
+            online_=1,
 			<if test="longitude!=null">
 				longitude_=#{longitude,jdbcType=VARCHAR},
 			</if>
@@ -212,5 +214,9 @@
 		and company_id = #{companyId}
 		]]>
 	</select>
-
+	<select id="getRunningList" resultMap="VehicleInfoMap">
+		select * from bus_vehicle_info
+		where del_flag=0
+		and running_=1
+	</select>
 </mapper>

+ 2 - 2
gps/src/main/java/com/jpsoft/gps/codec/CustomDecoder.java

@@ -18,8 +18,8 @@ public class CustomDecoder extends ByteToMessageDecoder {
         String prefix = "#";
         String suffix = "\n";
 
-        int start = str.indexOf(prefix);
-        int end = str.indexOf(suffix);
+        int start = str.lastIndexOf(prefix);
+        int end = str.lastIndexOf(suffix);
 
         if (start>=0 && end>start) {
             String data = str.substring(start+1, end);

+ 2 - 2
pom.xml

@@ -21,7 +21,7 @@
     <description>车信达</description>
     <properties>
         <java.version>1.8</java.version>
-        <lombok.version>1.16.12</lombok.version>
+        <lombok.version>1.18.12</lombok.version>
     </properties>
 
 
@@ -58,7 +58,7 @@
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
-            <version>${lombok.version}</version>
+            <version>1.18.12</version>
         </dependency>
         <dependency>
             <groupId>cn.hutool</groupId>

+ 0 - 5
web/pom.xml

@@ -122,11 +122,6 @@
             </exclusions>
         </dependency>
         <!--支付相关 end-->
-        <dependency>
-            <groupId>joda-time</groupId>
-            <artifactId>joda-time</artifactId>
-            <version>2.6</version>
-        </dependency>
     </dependencies>
 
     <build>

+ 2 - 4
web/src/main/java/com/jpsoft/bus/config/WebMvcConfig.java

@@ -77,7 +77,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
 				.excludePathPatterns("/aliPay/**")
 				.excludePathPatterns("/wxPay/**")
 				.excludePathPatterns("/bus/deviceCmdApi/queryPadLatestVersion")
-				.excludePathPatterns("/bus/deviceCmdApi/queryXunFeiAppId")
+				.excludePathPatterns("/bus/deviceCmdApi/queryDeviceParam")
 				.excludePathPatterns("/mobile/passengerApi/passengerMessageNoReadNum")
 				.excludePathPatterns("/mobile/passengerApi/passengerMessage")
 				.excludePathPatterns("/mobile/passengerApi/mergeInfo")
@@ -96,8 +96,6 @@ public class WebMvcConfig implements WebMvcConfigurer {
 				.excludePathPatterns("/mobile/merchantApi/findByOpenId")
 				.excludePathPatterns("/mobile/passengerApi/getRegionList")
 				.excludePathPatterns("/mobile/passengerApi/getOwnerRegion")
-
-
-		;
+				.excludePathPatterns("/mobile/driverApi/findByCarNum");
 	}
 }

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

@@ -5,14 +5,12 @@ import com.jpsoft.bus.config.OSSConfig;
 import com.jpsoft.bus.modules.bus.dto.RouteInfoDTO;
 import com.jpsoft.bus.modules.bus.dto.RouteMapPathDTO;
 import com.jpsoft.bus.modules.bus.dto.StationInfoDTO;
-import com.jpsoft.bus.modules.bus.entity.CompanyInfo;
-import com.jpsoft.bus.modules.bus.entity.StationInfo;
-import com.jpsoft.bus.modules.bus.entity.VehicleInfo;
+import com.jpsoft.bus.modules.bus.entity.*;
 import com.jpsoft.bus.modules.bus.service.CompanyInfoService;
 import com.jpsoft.bus.modules.bus.service.StationInfoService;
+import com.jpsoft.bus.modules.bus.service.StationSubInfoService;
 import com.jpsoft.bus.modules.common.dto.MessageResult;
 import com.jpsoft.bus.modules.common.dto.Sort;
-import com.jpsoft.bus.modules.bus.entity.RouteInfo;
 import com.jpsoft.bus.modules.bus.service.RouteInfoService;
 import com.jpsoft.bus.modules.common.utils.OSSUtil;
 import com.jpsoft.bus.modules.common.utils.POIUtils;
@@ -68,6 +66,9 @@ public class RouteInfoController {
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private StationSubInfoService stationSubInfoService;
+
     @ApiOperation(value="创建空记录")
     @GetMapping("create")
     public MessageResult<RouteInfoDTO> create(){
@@ -184,6 +185,9 @@ public class RouteInfoController {
                     stationInfoDTO.setSortNo(stationInfo.getSortNo());
                     stationInfoDTO.setDelFlag(stationInfo.getDelFlag());
 
+                    List<StationSubInfo> stationSubInfoList = stationSubInfoService.findByStationId(stationInfo.getId());
+                    stationInfoDTO.setStationSubInfoList(stationSubInfoList);
+
                     stationInfoDTOList.add(stationInfoDTO);
                 }
 

+ 236 - 0
web/src/main/java/com/jpsoft/bus/modules/bus/controller/RouteTimeTableController.java

@@ -0,0 +1,236 @@
+package com.jpsoft.bus.modules.bus.controller;
+
+import com.github.pagehelper.Page;
+import com.jpsoft.bus.modules.common.dto.MessageResult;
+import com.jpsoft.bus.modules.common.dto.Sort;
+import com.jpsoft.bus.modules.bus.entity.RouteTimeTable;
+import com.jpsoft.bus.modules.bus.service.RouteTimeTableService;
+import com.jpsoft.bus.modules.common.utils.PojoUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.mapping.ResultMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+@RestController
+@RequestMapping("/bus/routeTimeTable")
+@Api(description = "routeTimeTable")
+public class RouteTimeTableController {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private RouteTimeTableService routeTimeTableService;
+
+    @ApiOperation(value="创建空记录")
+    @GetMapping("create")
+    public MessageResult<RouteTimeTable> create(){
+        RouteTimeTable dto = new RouteTimeTable();
+
+        MessageResult<RouteTimeTable> messageResult = new MessageResult<>();
+
+        messageResult.setResult(true);
+        messageResult.setData(dto);
+
+        return messageResult;
+    }
+
+    @ApiOperation(value="添加信息")
+    @PostMapping("add")
+    public MessageResult<RouteTimeTable> add(@RequestBody RouteTimeTable routeTimeTable,@RequestAttribute String subject){
+        MessageResult<RouteTimeTable> msgResult = new MessageResult<>();
+
+        try {
+            routeTimeTable.setId(UUID.randomUUID().toString());
+            routeTimeTable.setCreateBy(subject);
+            routeTimeTable.setCreateTime(new Date());
+            routeTimeTable.setDelFlag(false);
+
+
+            RouteTimeTable item = routeTimeTableService.findByRouteId(routeTimeTable.getRouteId());
+
+            if(item!=null){
+                routeTimeTable.setSort(item.getSort()+1);
+            }
+            else{
+                routeTimeTable.setSort(1);
+            }
+
+            int affectCount = routeTimeTableService.insert(routeTimeTable);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(routeTimeTable);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库添加失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="获取信息")
+    @GetMapping("edit/{id}")
+    public MessageResult<RouteTimeTable> detail(@PathVariable("id") String id){
+        MessageResult<RouteTimeTable> msgResult = new MessageResult<>();
+
+        try {
+            RouteTimeTable routeTimeTable = routeTimeTableService.get(id);
+
+            if (routeTimeTable != null) {
+                msgResult.setResult(true);
+                msgResult.setData(routeTimeTable);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库不存在该记录!");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="更新用户")
+    @PostMapping("update")
+    public MessageResult<RouteTimeTable> update(@RequestBody RouteTimeTable routeTimeTable,@RequestAttribute String subject){
+        MessageResult<RouteTimeTable> msgResult = new MessageResult<>();
+
+        try {
+
+            routeTimeTable.setUpdateBy(subject);
+            routeTimeTable.setUpdateTime(new Date());
+
+            int affectCount = routeTimeTableService.update(routeTimeTable);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(routeTimeTable);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库更新失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="删除用户")
+    @PostMapping("delete/{id}")
+    public MessageResult<RouteTimeTable> delete(@PathVariable("id") String id,@RequestAttribute String subject){
+        MessageResult<RouteTimeTable> msgResult = new MessageResult<>();
+
+        try {
+            RouteTimeTable routeTimeTable = routeTimeTableService.get(id);
+            routeTimeTable.setDelFlag(true);
+            routeTimeTable.setUpdateBy(subject);
+            routeTimeTable.setUpdateTime(new Date());
+
+            int affectCount = routeTimeTableService.update(routeTimeTable);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库删除失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+
+    @ApiOperation(value="批量删除")
+    @PostMapping("batchDelete")
+    public MessageResult<Integer> batchDelete(@RequestBody List<String> idList,@RequestAttribute String subject){
+        MessageResult<Integer> msgResult = new MessageResult<>();
+
+        try {
+            int affectCount = 0;
+
+            for (String id : idList) {
+                RouteTimeTable routeTimeTable = routeTimeTableService.get(id);
+                routeTimeTable.setDelFlag(true);
+                routeTimeTable.setUpdateBy(subject);
+                routeTimeTable.setUpdateTime(new Date());
+
+                affectCount += routeTimeTableService.update(routeTimeTable);
+            }
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(affectCount);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("删除失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="列表")
+    @RequestMapping(value = "pageList",method = RequestMethod.POST)
+    public MessageResult<Object> pageList(
+            String routeId,
+            @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
+            @RequestParam(value="pageSize",defaultValue="20") int pageSize,
+            HttpServletRequest request){
+        String subject = (String)request.getAttribute("subject");
+
+        //当前用户ID
+        System.out.println(subject);
+
+        MessageResult<Object> msgResult = new MessageResult<>();
+
+        Map<String,Object> searchParams = new HashMap<>();
+
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("sort_","asc"));
+
+        searchParams.put("routeId",routeId);
+
+        Page<RouteTimeTable> page = routeTimeTableService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
+
+        msgResult.setResult(true);
+        msgResult.setData(PojoUtils.pageWrapper(page));
+
+        return msgResult;
+    }
+}

+ 39 - 0
web/src/main/java/com/jpsoft/bus/modules/device/controller/DeviceCmdApiController.java

@@ -79,6 +79,45 @@ public class DeviceCmdApiController {
         return messageResult;
     }
 
+
+    @GetMapping("queryDeviceParam")
+    @ApiOperation(value="查询设备参数")
+    public MessageResult<Map> queryDeviceParam(){
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+            DataDictionary regExpiredDays  = dataDictionaryService.findByName("乘客登记照过期天数");
+            DataDictionary captureExpiredDays  = dataDictionaryService.findByName("乘客抓拍照过期天数");
+
+            Map<String,Object> data = new HashMap<>();
+
+            if (regExpiredDays!=null) {
+                data.put("regExpiredDays", regExpiredDays.getValue());
+            }
+            else{
+                data.put("regExpiredDays", 30);
+            }
+
+            if (captureExpiredDays!=null) {
+                data.put("captureExpiredDays", captureExpiredDays.getValue());
+            }
+            else{
+                data.put("captureExpiredDays", 7);
+            }
+
+            messageResult.setData(data);
+            messageResult.setResult(true);
+        }
+        catch (Exception ex){
+            log.error(ex.getMessage(),ex);
+
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
     @PostMapping("downloadCommand")
     @ApiOperation(value="下载设备待执行命令")
     public MessageResult<List> downloadCommand(@RequestBody JSONObject requestBody){

+ 157 - 25
web/src/main/java/com/jpsoft/bus/modules/driver/controller/DriverApiController.java

@@ -67,6 +67,9 @@ public class DriverApiController {
     @Autowired
     private PriceInfoService priceInfoService;
 
+    @Autowired
+    private StationSubInfoService stationSubInfoService;
+
     @Autowired
     private BaiduService baiduService;
 
@@ -201,6 +204,44 @@ public class DriverApiController {
 
     }
 
+    @GetMapping("getVehicleInfo")
+    @ApiOperation(value = "获取当前车辆信息")
+    public MessageResult<VehicleInfo> getVehicleInfo(@RequestAttribute String subject){
+        MessageResult<VehicleInfo> messageResult = new MessageResult<>();
+
+        VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
+
+        try {
+            messageResult.setData(vehicleInfo);
+            messageResult.setResult(true);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(),ex);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @GetMapping("findByCarNum")
+    @ApiOperation(value = "根据车牌获取当前车辆信息")
+    public MessageResult<VehicleInfo> findByCarNum(String licensePlateNumber){
+        MessageResult<VehicleInfo> messageResult = new MessageResult<>();
+
+        VehicleInfo vehicleInfo = vehicleInfoService.findByCarNum(licensePlateNumber);
+
+        try {
+            messageResult.setData(vehicleInfo);
+            messageResult.setResult(true);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(),ex);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
     @PostMapping("driverAttendance")
     @ApiOperation(value = "司机考勤")
     @ApiImplicitParams({
@@ -555,22 +596,24 @@ public class DriverApiController {
             String recordTime = requestBody.getString("recordTime");
             String localImageUrl = requestBody.getString("localImageUrl");
 
-            //同一辆车相同乘客上下车登记间隔1分钟
-            String key = subject + "_" + personId;
-            boolean absent = valueOperations.setIfAbsent(key,true,1,TimeUnit.MINUTES);
+            VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
+            if (vehicleInfo == null){
+                throw new Exception("当前车辆不存在");
+            }
 
-            if(absent) {
-                VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
-                if (vehicleInfo == null){
-                    throw new Exception("当前车辆不存在");
-                }
+            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(vehicleInfo.getId(),"1");
+            if (shiftInfoList.size() == 0){
+                throw new Exception("车辆没有相关班次信息");
+            }
 
-                List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(vehicleInfo.getId(),"1");
-                if (shiftInfoList.size() == 0){
-                    throw new Exception("车辆没有相关班次信息");
-                }
+            ShiftInfo shiftInfo = shiftInfoList.get(0);
+
+            //同一辆车、相同班次下、相同乘客上下车登记间隔1分钟
+            String key = subject + "_" + shiftInfo.getId() + "_" + personId;
 
-                ShiftInfo shiftInfo = shiftInfoList.get(0);
+            boolean absent = valueOperations.setIfAbsent(key,true,1,TimeUnit.MINUTES);
+
+            if(absent) {
                 String retFileUrl = "";
 
                 //只有第一次上车时返回登记照
@@ -912,6 +955,74 @@ public class DriverApiController {
         return messageResult;
     }
 
+
+    @PostMapping("driverCreateCashOrder")
+    @ApiOperation(value = "司机为乘客创建现金订单")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "token", value = "令牌", paramType = "form"),
+            @ApiImplicitParam(name = "subject", value = "目标(不传)", paramType = "form"),
+            @ApiImplicitParam(name = "id", value = "乘客主id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "ticketUpStationId", value = "乘客买票站点id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "ticketDownStationId", value = "乘客买票下车站点id", required = true, paramType = "form")
+    })
+    public MessageResult<DriverBuyTicketDTO> driverCreateCashOrder(String id,String ticketUpStationId,String ticketDownStationId,String token, @RequestAttribute String subject) {
+        MessageResult<DriverBuyTicketDTO> messageResult = new MessageResult<>();
+
+        try {
+
+            VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
+            if (vehicleInfo == null){
+                throw new Exception("当前车辆不存在");
+            }
+
+            String paymentId = "";
+            CompanyInfo companyInfo = companyInfoService.get(vehicleInfo.getCompanyId());
+
+            PaymentInfo paymentInfo = paymentInfoService.findByCompanyId(vehicleInfo.getCompanyId());
+            if (paymentInfo != null){
+                paymentId = paymentInfo.getId();
+            }
+            else {
+                if ("1".equals(companyInfo.getType())){
+                    throw new Exception("车辆对应公司未配置收款账户");
+                }
+                if (!"1".equals(companyInfo.getType())){
+                    CompanyInfo companyInfo1 = companyInfoService.get(companyInfo.getParentId());
+                    PaymentInfo paymentInfo1 = paymentInfoService.findByCompanyId(companyInfo1.getId());
+                    if (paymentInfo1 != null){
+                        paymentId = paymentInfo1.getId();
+                    }
+
+                }
+            }
+
+            if (StringUtils.isBlank(paymentId)){
+                throw new Exception("对应公司收款账户异常,请核验");
+            }
+
+            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(vehicleInfo.getId(),"1");
+            if (shiftInfoList.size() == 0){
+                throw new Exception("车辆没有相关班次信息");
+            }
+
+            PassengerInfo passengerInfo = passengerInfoService.get(id);
+
+
+            DriverBuyTicketDTO driverBuyTicketDTO = passengerInfoService.driverCreateCashOrder(passengerInfo,ticketUpStationId,ticketDownStationId,paymentId);
+
+            messageResult.setData(driverBuyTicketDTO);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
     @PostMapping("ticketAmount")
     @ApiOperation(value = "站点之间的车票金额")
     @ApiImplicitParams({
@@ -1108,22 +1219,43 @@ public class DriverApiController {
                 sysLog.setCreateTime(new Date());
                 logService.insert(sysLog);
             }
-
-            //改gps后,会自动修改当前站点,只能往后改
-            if(currentStation.getLongitude()!=null && currentStation.getLatitude()!=null) {
-                gpsDataCallback.receive(vehicleInfo.getGpsDeviceNo(),
-                        String.valueOf(currentStation.getLongitude()),
-                        String.valueOf(currentStation.getLatitude()),
-                        true);
+            else{
+                throw new Exception("站点:" + currentStationId + "不存在!");
             }
 
-            shiftInfo.setCurrentStationId(currentStationId);
-            shiftInfo.setUpdateTime(new Date());
-            shiftInfo.setUpdateBy(subject);
+            if(vehicleInfo.getLongitude()!=null && vehicleInfo.getLatitude()!=null) {
+                //如果当前车辆与校正站点距离2km内
+                if (gpsService.matchDistance(currentStation,vehicleInfo,2000)){
+                    //创建一个站点附属站点
+                    StationSubInfo stationSubInfo = stationSubInfoService.findByStationIdStartEnd(currentStationId, shiftInfo.getStartStationId(), shiftInfo.getEndStationId());
+                    if (stationSubInfo == null) {
+                        StationSubInfo stationSubInfo1 = new StationSubInfo();
+                        stationSubInfo1.setId(UUID.randomUUID().toString());
+                        stationSubInfo1.setStationId(currentStationId);
+                        stationSubInfo1.setStartStationId(shiftInfo.getStartStationId());
+                        stationSubInfo1.setEndStationId(shiftInfo.getEndStationId());
+                        stationSubInfo1.setLongitude(new Double(vehicleInfo.getLongitude()));
+                        stationSubInfo1.setLatitude(new Double(vehicleInfo.getLatitude()));
+                        stationSubInfo1.setRadius(50);
+                        stationSubInfo1.setCreateTime(new Date());
+                        stationSubInfoService.insert(stationSubInfo1);
+                    } else {
+                        stationSubInfo.setLongitude(new Double(vehicleInfo.getLongitude()));
+                        stationSubInfo.setLatitude(new Double(vehicleInfo.getLatitude()));
+                        stationSubInfo.setUpdateTime(new Date());
+                        stationSubInfoService.update(stationSubInfo);
+                    }
 
-            shiftInfoService.update(shiftInfo);
+                    //重新计算当前乘客状态
+                    String stationId = gpsService.getLatelyStation(vehicleInfo.getId(),true);
+                    shiftInfoService.stationChange(shiftInfo, stationId);
+                }
+                else{
+                    //当前车辆位置距离站点过于遥远,直接设置当前站点
+                    shiftInfoService.stationChange(shiftInfo, currentStationId);
+                }
+            }
 
-            //todo 填写具体代码
             messageResult.setData(currentStationId);
             messageResult.setResult(true);
         }

+ 6 - 0
web/src/main/java/com/jpsoft/bus/modules/mobile/controller/PassengerApiController.java

@@ -65,6 +65,9 @@ public class PassengerApiController {
     @Autowired
     private BaiduService baiduService;
 
+    @Autowired
+    private RouteTimeTableService routeTimeTableService;
+
     @Autowired
     private HelpCenterService helpCenterService;
 
@@ -1317,9 +1320,12 @@ public class PassengerApiController {
 
             List<StationInfo> stationInfoList = stationInfoService.findByRouteId(id);
 
+            //线路时刻表
+            List<RouteTimeTable> routeTimeTableList = routeTimeTableService.findListByRouteId(routeInfo.getId());
 
             Map<String, Object> map = new HashMap<>();
             map.put("routeInfo", routeInfo);
+            map.put("routeTimeTableList",routeTimeTableList);
             map.put("stationInfoList", stationInfoList);
 
 

+ 57 - 0
web/src/main/java/com/jpsoft/bus/scheduled/CheckVehicleTask.java

@@ -0,0 +1,57 @@
+package com.jpsoft.bus.scheduled;
+
+import com.jpsoft.bus.modules.bus.entity.VehicleInfo;
+import com.jpsoft.bus.modules.bus.service.VehicleInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.joda.time.DateTime;
+import org.joda.time.Minutes;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 检查车辆是否有gps传回
+ */
+@Component
+@Slf4j
+public class CheckVehicleTask {
+    @Autowired
+    private VehicleInfoService vehicleInfoService;
+
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public  void run() {
+        List<VehicleInfo> vehicleInfoList = vehicleInfoService.getRunningList();
+
+        DateTime now = DateTime.now();
+
+        for (VehicleInfo vehicleInfo : vehicleInfoList) {
+            boolean running = false;
+
+            if (vehicleInfo.getUpdateTime()!=null) {
+                int minutes = Minutes.minutesBetween(new DateTime(vehicleInfo.getUpdateTime()), now).getMinutes();
+
+                if (minutes > 5) {
+                    //5分钟未更新
+                    running = false;
+                }
+                else{
+                    running = true;
+                }
+            }
+            else{
+                running = false;
+            }
+
+            if (!running) {
+                vehicleInfo.setRunning(false);
+                vehicleInfo.setOnline(false);
+                vehicleInfo.setUpdateTime(new Date());
+
+                vehicleInfoService.update(vehicleInfo);
+            }
+        }
+    }
+}

+ 4 - 6
web/src/main/resources/application-dev.yml

@@ -7,9 +7,9 @@ spring:
   datasource:
 
     #开发环境
-     url: jdbc:log4jdbc:mysql://192.168.33.20:3306/smart-bus?autoReconnect=true&characterEncoding=utf8&serverTimezone=GMT%2B8
-     username: root
-     password: jpsoft2016
+    url: jdbc:log4jdbc:mysql://192.168.33.20:3306/smart-bus?autoReconnect=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+    username: root
+    password: jpsoft2016
 
     #测试环境
 #     url: jdbc:log4jdbc:mysql://47.92.161.104:3336/smart-bus?autoReconnect=true&characterEncoding=utf8&serverTimezone=GMT%2B8
@@ -17,12 +17,10 @@ spring:
 #     password: jpsoft8121234
 
     #正式环境
-#     url: jdbc:log4jdbc:mysql://122.189.98.152:3336/jp_housekeeper?autoReconnect=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+#     url: jdbc:log4jdbc:mysql://121.37.187.149:8100/smart-bus?autoReconnect=true&characterEncoding=utf8&serverTimezone=GMT%2B8
 #     username: root
 #     password: jpsoft8121234
 
-
-
   devtools:
     add-properties: false
     restart:

+ 1 - 1
web/src/main/resources/application-production.yml

@@ -54,7 +54,7 @@ wx:
     refreshOAuth2TokenUrl: "https://api.weixin.qq.com/sns/oauth2/refresh_token"
     createQrCodeUrl: "https://api.weixin.qq.com/cgi-bin/qrcode/create"
     showQrCodeUrl: "https://mp.weixin.qq.com/cgi-bin/showqrcode"
-    portalUrl: "http://xpgj.xiaoxinda.com/prod/business/#/"
+    portalUrl: http://xpgj.xiaoxinda.com/jp-car/#
 
   jpsoft:
     appId: wx907e84ad32e6e142

+ 1 - 1
web/src/main/resources/application-test.yml

@@ -50,7 +50,7 @@ wx:
     refreshOAuth2TokenUrl: "https://api.weixin.qq.com/sns/oauth2/refresh_token"
     createQrCodeUrl: "https://api.weixin.qq.com/cgi-bin/qrcode/create"
     showQrCodeUrl: "https://mp.weixin.qq.com/cgi-bin/showqrcode"
-    portalUrl: http://xpgj.xiaoxinda.com/jp-car/#
+    portalUrl: http://xpgj.xiaoxinda.com/jp-car-test/#
 
   jpsoft:
     appId: wx907e84ad32e6e142