Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

xiao547607 4 lat temu
rodzic
commit
cf1c6ca41b
40 zmienionych plików z 1398 dodań i 298 usunięć
  1. 2 2
      common/pom.xml
  2. 2 0
      common/src/main/java/com/jpsoft/bus/modules/base/dao/MergeOrderInfoDAO.java
  3. 2 0
      common/src/main/java/com/jpsoft/bus/modules/base/dao/OrderInfoDAO.java
  4. 12 0
      common/src/main/java/com/jpsoft/bus/modules/base/dto/PassengerOrderDTO.java
  5. 20 17
      common/src/main/java/com/jpsoft/bus/modules/base/entity/MergeOrderInfo.java
  6. 6 0
      common/src/main/java/com/jpsoft/bus/modules/base/entity/OrderInfo.java
  7. 8 0
      common/src/main/java/com/jpsoft/bus/modules/base/entity/PaymentInfo.java
  8. 2 0
      common/src/main/java/com/jpsoft/bus/modules/base/service/MergeOrderInfoService.java
  9. 2 0
      common/src/main/java/com/jpsoft/bus/modules/base/service/OrderInfoService.java
  10. 5 0
      common/src/main/java/com/jpsoft/bus/modules/base/service/impl/MergeOrderInfoServiceImpl.java
  11. 5 0
      common/src/main/java/com/jpsoft/bus/modules/base/service/impl/OrderInfoServiceImpl.java
  12. 16 14
      common/src/main/java/com/jpsoft/bus/modules/bus/callback/GpsDataCallbackImpl.java
  13. 2 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dto/DriverBuyTicketDTO.java
  14. 14 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dto/PassengerDetailDTO.java
  15. 3 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dto/VehicleStationDTO.java
  16. 9 0
      common/src/main/java/com/jpsoft/bus/modules/bus/entity/DriverRecordInfo.java
  17. 2 2
      common/src/main/java/com/jpsoft/bus/modules/bus/entity/PassengerInfo.java
  18. 23 22
      common/src/main/java/com/jpsoft/bus/modules/bus/entity/ShiftInfo.java
  19. 1 1
      common/src/main/java/com/jpsoft/bus/modules/bus/service/BaiduService.java
  20. 5 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/PassengerInfoService.java
  21. 5 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/StationInfoService.java
  22. 42 17
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/BaiduServiceImpl.java
  23. 65 12
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/GpsServiceImpl.java
  24. 240 89
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/PassengerInfoServiceImpl.java
  25. 60 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/StationInfoServiceImpl.java
  26. 18 3
      common/src/main/resources/mapper/base/MergeOrderInfo.xml
  27. 22 3
      common/src/main/resources/mapper/base/OrderInfo.xml
  28. 17 3
      common/src/main/resources/mapper/base/PaymentInfo.xml
  29. 17 4
      common/src/main/resources/mapper/bus/DriverRecordInfo.xml
  30. 6 0
      common/src/main/resources/mapper/bus/PassengerInfo.xml
  31. 1 2
      gps/pom.xml
  32. 17 9
      gps/src/main/java/com/jpsoft/gps/handler/ProcessHandler.java
  33. 4 4
      gps/src/main/java/com/jpsoft/gps/utils/GPSUtil.java
  34. 8 0
      web/src/main/java/com/jpsoft/bus/config/WebMvcConfig.java
  35. 59 4
      web/src/main/java/com/jpsoft/bus/modules/base/controller/PaymentInfoController.java
  36. 98 0
      web/src/main/java/com/jpsoft/bus/modules/bus/controller/DriverRecordInfoController.java
  37. 149 60
      web/src/main/java/com/jpsoft/bus/modules/driver/controller/DriverApiController.java
  38. 386 28
      web/src/main/java/com/jpsoft/bus/modules/mobile/controller/PassengerApiController.java
  39. 22 0
      web/src/main/java/com/jpsoft/bus/modules/pay/alipay/AlipayController.java
  40. 21 2
      web/src/main/java/com/jpsoft/bus/modules/pay/wechat/WxPayController.java

+ 2 - 2
common/pom.xml

@@ -250,9 +250,9 @@
         </dependency>
         <!--gps-->
         <dependency>
-            <groupId>com.jpsoft</groupId>
+            <groupId>com.jpsoft.bus</groupId>
             <artifactId>gps</artifactId>
-            <version>1.0.0</version>
+            <version>1.1.0</version>
         </dependency>
         <dependency>
             <groupId>org.gavaghan</groupId>

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

@@ -17,4 +17,6 @@ public interface MergeOrderInfoDAO {
 	List<MergeOrderInfo> search(Map<String,Object> searchParams,List<Sort> sortList);
 
     MergeOrderInfo findByOutOrderNo(String outOrderNo);
+
+    List<MergeOrderInfo> findByOpenIdShiftIdPayStatus(String openId, String shiftId, int payStatus);
 }

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

@@ -21,4 +21,6 @@ public interface OrderInfoDAO {
     OrderInfo findByOutOrderNo(String outTradeNo);
 
 	List<OrderInfo> findByMergeOrderId(String mergeOrderId);
+
+    OrderInfo findByPassengerIdMergeOrderId(String passengerId, String mergeOrderId);
 }

+ 12 - 0
common/src/main/java/com/jpsoft/bus/modules/base/dto/PassengerOrderDTO.java

@@ -23,6 +23,18 @@ public class PassengerOrderDTO {
 
     private BigDecimal totalFee;
 
+    private String id;
+
+    private String imageUrl;
+
+    private String ticketUpStationId;
+
+    private String ticketUpStationName;
+
+    private String ticketDownStationId;
+
+    private String ticketDownStationName;
+
     public String getTicketTypeStr(String ticketType){
         String ticketTypeStr = "";
         if ("1".equals(ticketType)){

+ 20 - 17
common/src/main/java/com/jpsoft/bus/modules/base/entity/MergeOrderInfo.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,37 +12,39 @@ import io.swagger.annotations.ApiModel;
 import lombok.Data;
 
 /**
-  描述:base_merge_order_info的实体类
+ * 描述:base_merge_order_info的实体类
  */
 @Data
 @ApiModel(value = "base_merge_order_info的实体类")
 public class MergeOrderInfo {
-        @ApiModelProperty(value = "")
+    @ApiModelProperty(value = "")
     private String id;
-        @ApiModelProperty(value = "用户标识")
+    @ApiModelProperty(value = "用户标识")
     private String openId;
-        @ApiModelProperty(value = "支付状态(10:未支付,15:部分支付,20:支付完成,30:关闭,40:全额退款,45:部分退款)")
+    @ApiModelProperty(value = "班次id")
+    private String vehicleShiftId;
+    @ApiModelProperty(value = "支付状态(10:未支付,15:部分支付,20:支付完成,30:关闭,40:全额退款,45:部分退款)")
     private Integer payStatus;
-        @ApiModelProperty(value = "支付方式(wechat:微信,alipay:支付宝,cash:现金,ticket:车票)")
+    @ApiModelProperty(value = "支付方式(wechat:微信,alipay:支付宝,cash:现金,ticket:车票)")
     private String payName;
-        @ApiModelProperty(value = "系统订单号")
+    @ApiModelProperty(value = "系统订单号")
     private String outOrderNo;
-        @ApiModelProperty(value = "微信支付订单号")
+    @ApiModelProperty(value = "微信支付订单号")
     private String transactionId;
-        @ApiModelProperty(value = "收款账户id")
+    @ApiModelProperty(value = "收款账户id")
     private String paymentId;
-        @ApiModelProperty(value = "创建人")
+    @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 = "是否删除")
+    @ApiModelProperty(value = "是否删除")
     private Boolean delFlag = false;
 }

+ 6 - 0
common/src/main/java/com/jpsoft/bus/modules/base/entity/OrderInfo.java

@@ -67,6 +67,12 @@ public class OrderInfo {
     @ApiModelProperty(value = "综合账单id")
     private String mergeOrderId;
 
+    @ApiModelProperty(value = "购票的上车站点")
+    private String ticketUpStationId;
+
+    @ApiModelProperty(value = "购票的下车站点")
+    private String ticketDownStationId;
+
 
     public String getPayNameStr(String payName){
         String payNameStr = "";

+ 8 - 0
common/src/main/java/com/jpsoft/bus/modules/base/entity/PaymentInfo.java

@@ -53,4 +53,12 @@ public class PaymentInfo {
     private Date updateTime;
     @ApiModelProperty(value = "是否删除")
     private Boolean delFlag;
+
+    @ApiModelProperty(value = "是否开启微信支付")
+    private Boolean isOpenWechat;
+    @ApiModelProperty(value = "是否开启支付宝支付")
+    private Boolean isOpenAlipay;
+
+    @ApiModelProperty(value = "对应公司")
+    private String companyName;
 }

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

@@ -16,4 +16,6 @@ public interface MergeOrderInfoService {
 	Page<MergeOrderInfo> pageSearch(Map<String, Object> searchParams,int pageNum,int pageSize,boolean count,List<Sort> sortList);
 
     MergeOrderInfo findByOutOrderNo(String outOrderNo);
+
+    List<MergeOrderInfo> findByOpenIdShiftIdPayStatus(String openId, String shiftId, int payStatus);
 }

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

@@ -20,4 +20,6 @@ public interface OrderInfoService {
     OrderInfo findByOutOrderNo(String outTradeNo);
 
 	List<OrderInfo> findByMergeOrderId(String mergeOrderId);
+
+    OrderInfo findByPassengerIdMergeOrderId(String id, String mergeOrderId);
 }

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

@@ -72,4 +72,9 @@ public class MergeOrderInfoServiceImpl implements MergeOrderInfoService {
 	public MergeOrderInfo findByOutOrderNo(String outOrderNo) {
 		return mergeOrderInfoDAO.findByOutOrderNo(outOrderNo);
 	}
+
+	@Override
+	public List<MergeOrderInfo> findByOpenIdShiftIdPayStatus(String openId, String shiftId, int payStatus) {
+		return mergeOrderInfoDAO.findByOpenIdShiftIdPayStatus(openId,shiftId,payStatus);
+	}
 }

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

@@ -82,4 +82,9 @@ public class OrderInfoServiceImpl implements OrderInfoService {
 	public List<OrderInfo> findByMergeOrderId(String mergeOrderId) {
 		return orderInfoDAO.findByMergeOrderId(mergeOrderId);
 	}
+
+	@Override
+	public OrderInfo findByPassengerIdMergeOrderId(String id, String mergeOrderId) {
+		return orderInfoDAO.findByPassengerIdMergeOrderId(id,mergeOrderId);
+	}
 }

+ 16 - 14
common/src/main/java/com/jpsoft/bus/modules/bus/callback/GpsDataCallbackImpl.java

@@ -105,19 +105,20 @@ public class GpsDataCallbackImpl implements GpsDataCallback {
                 }
 
                 v.setLatestAddress(address);
-
                 v.setLongitude(longitude);//经度
                 v.setLatitude(latitude);//纬度
 
                 vehicleInfoService.updateGps(v);
 
-
                 //更新车辆的当前站点
                 try{
                     List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(v.getId(),"1");
+
                     if (shiftInfoList.size()>0){
                         ShiftInfo shiftInfo = shiftInfoList.get(0);
                         String stationId = gpsService.getLatelyStation(v.getId());
+
+                        //站点发生变化时
                         if (!shiftInfo.getCurrentStationId().equals(stationId)){
                             shiftInfo.setCurrentStationId(stationId);
                             shiftInfoService.update(shiftInfo);
@@ -127,41 +128,42 @@ public class GpsDataCallbackImpl implements GpsDataCallback {
                             //此线路的所有站点
                             List<StationInfo> stationInfoList = stationInfoService.findByRouteId(shiftInfo.getRouteId());
 
-                            //站点集合大小
-                            int stationSize = stationInfoList.size();
-
-                            int currentStationIndex = stationInfoList.indexOf(currentStation);
+                            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());
-                                    int downStationIndex = stationInfoList.indexOf(downStation);
+
                                     //按照线路顺行并且当前站点大于乘客购票站点,则过站
-                                    if (shiftInfo.getStartStationId().equals(stationInfoList.get(0).getId()) && currentStationIndex > downStationIndex){
+                                    if (frontToEnd && currentStationIndex > downStation.getSortNo()){
                                         passengerInfo.setPayStatus("2");
                                         passengerInfoService.update(passengerInfo);
                                     }
 
                                     //按照线路逆行并且当前站点小于乘客购票站点,则过站
-                                    if (!shiftInfo.getStartStationId().equals(stationInfoList.get(0).getId()) && currentStationIndex < downStationIndex){
+                                    if (!frontToEnd && currentStationIndex < downStation.getSortNo()){
                                         passengerInfo.setPayStatus("2");
                                         passengerInfoService.update(passengerInfo);
                                     }
-
-
                                 }
                             }
                         }
                     }
                 }catch (Exception ex){
-
+                    log.error(ex.getMessage(),ex);
                 }
             }
         }

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

@@ -11,6 +11,8 @@ import java.math.BigDecimal;
 @Data
 public class DriverBuyTicketDTO {
 
+    private String id;
+
     private String payName;
 
     private String payNameStr;

+ 14 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dto/PassengerDetailDTO.java

@@ -1,9 +1,13 @@
 package com.jpsoft.bus.modules.bus.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jpsoft.bus.modules.base.dto.PassengerOrderDTO;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -44,4 +48,14 @@ public class PassengerDetailDTO {
     private List<PassengerOrderDTO> passengerOrderDTOList;
 
     private BigDecimal payFee;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    @ApiModelProperty(value = "上车时间")
+    private Date upTime;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    @ApiModelProperty(value = "下车时间")
+    private Date downTime;
 }

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

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

+ 9 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/entity/DriverRecordInfo.java

@@ -49,4 +49,13 @@ public class DriverRecordInfo {
     @ApiModelProperty(value = "是否删除")
     private Boolean delFlag = false;
 
+    @ApiModelProperty(value = "司机姓名")
+    private String driverName;
+
+    @ApiModelProperty(value = "考勤定位")
+    private String location;
+
+
+
+
 }

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

@@ -84,9 +84,9 @@ public class PassengerInfo {
         if ("0".equals(status)) {
             statusName = "未乘车";
         } else if ("1".equals(status)) {
-            statusName = "上车";
+            statusName = "上车";
         } else if ("2".equals(status)) {
-            statusName = "下车";
+            statusName = "下车";
         }
         return  statusName;
     }

+ 23 - 22
common/src/main/java/com/jpsoft/bus/modules/bus/entity/ShiftInfo.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,44 +12,44 @@ import io.swagger.annotations.ApiModel;
 import lombok.Data;
 
 /**
-  描述:bus_shift_info的实体类
+ * 描述:bus_shift_info的实体类
  */
 @Data
 @ApiModel(value = "bus_shift_info的实体类")
 public class ShiftInfo {
-        @ApiModelProperty(value = "车辆班次编号")
+    @ApiModelProperty(value = "车辆班次编号")
     private String id;
-        @ApiModelProperty(value = "司机")
-    private Long  driverId;
-        @ApiModelProperty(value = "车辆编号")
+    @ApiModelProperty(value = "司机")
+    private Long driverId;
+    @ApiModelProperty(value = "车辆编号")
     private String vehicleId;
-        @ApiModelProperty(value = "路线编号")
+    @ApiModelProperty(value = "路线编号")
     private String routeId;
-        @ApiModelProperty(value = "起始站")
+    @ApiModelProperty(value = "起始站")
     private String startStationId;
-        @ApiModelProperty(value = "当前站点")
+    @ApiModelProperty(value = "当前站点")
     private String currentStationId;
-        @ApiModelProperty(value = "状态值")
+    @ApiModelProperty(value = "状态值(1:进行中,2:结束)")
     private String status;
-        @ApiModelProperty(value = "终点站")
+    @ApiModelProperty(value = "终点站")
     private String endStationId;
-        @ApiModelProperty(value = "创建人")
+    @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 = "是否删除")
+    @ApiModelProperty(value = "是否删除")
     private Boolean delFlag = false;
-        @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 finishTime;
 
     @ApiModelProperty(value = "司机")

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

@@ -7,7 +7,7 @@ package com.jpsoft.bus.modules.bus.service;
 public interface BaiduService {
 
 
-    void faceSearch(String faceImageUrl,String faceType,String groupId) throws Exception;
+    Long faceSearch(String faceImageUrl,String faceType,String groupId) throws Exception;
 
     /**
      * 创建人脸用户组

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

@@ -3,6 +3,7 @@ package com.jpsoft.bus.modules.bus.service;
 import java.util.List;
 import java.util.Map;
 
+import com.jpsoft.bus.modules.base.entity.OrderInfo;
 import com.jpsoft.bus.modules.bus.dto.DriverBuyTicketDTO;
 import com.jpsoft.bus.modules.bus.entity.PassengerInfo;
 import com.github.pagehelper.Page;
@@ -26,4 +27,8 @@ public interface PassengerInfoService {
 	DriverBuyTicketDTO driverBuyTicket(PassengerInfo passengerInfo, String ticketUpStationId, String ticketDownStationId, String ticketType, String goodsTicket, String totalFee, String payName,String paymentId) throws Exception;
 
     List<PassengerInfo> findByShiftStatusPayStatusNotTicketDown(String shiftId, String status, String payStatus,String ticketDownStationId);
+
+	void createOrder(VehicleInfo vehicleInfo, ShiftInfo shiftInfo,String openId,String mergeOrderId, String passengerIds, String ticketUpStationId, String ticketDownStationId, String ticketType, String goodsTicket, String totalFee) throws Exception;
+
+	void updatePassengerOrder(OrderInfo orderInfo, String ticketUpStationId, String ticketDownStationId, String ticketType, String goodsTicket, String totalFee);
 }

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

@@ -2,6 +2,9 @@ package com.jpsoft.bus.modules.bus.service;
 
 import java.util.List;
 import java.util.Map;
+
+import com.jpsoft.bus.modules.bus.dto.VehicleStationDTO;
+import com.jpsoft.bus.modules.bus.entity.ShiftInfo;
 import com.jpsoft.bus.modules.bus.entity.StationInfo;
 import com.github.pagehelper.Page;
 import com.jpsoft.bus.modules.common.dto.Sort;
@@ -19,4 +22,6 @@ public interface StationInfoService {
     List<StationInfo> findByRouteIdAndClassify(String routeId, int classify);
 
 	StationInfo findByRouteIdAndName(String routeId, String name);
+
+    List<VehicleStationDTO> getVehicleStationDTO(ShiftInfo shiftInfo, List<StationInfo> stationInfoList);
 }

+ 42 - 17
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/BaiduServiceImpl.java

@@ -1,14 +1,17 @@
 package com.jpsoft.bus.modules.bus.service.impl;
 
 import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.google.gson.JsonObject;
 import com.jpsoft.bus.modules.bus.service.BaiduService;
 import com.jpsoft.bus.modules.common.utils.BaiduAuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -17,7 +20,7 @@ import java.util.Map;
  * @date 2021-4-6 11:05
  */
 @Transactional
-@Component(value="baiduService")
+@Component(value = "baiduService")
 public class BaiduServiceImpl implements BaiduService {
 
     @Autowired
@@ -25,24 +28,46 @@ public class BaiduServiceImpl implements BaiduService {
 
 
     @Override
-    public void faceSearch(String faceImageUrl, String faceType, String groupId) throws Exception {
+    public Long faceSearch(String faceImageUrl, String faceType, String groupId) throws Exception {
 
+        Long personId = null;
         // 请求url
         String url = "https://aip.baidubce.com/rest/2.0/face/v3/search";
         Map<String, Object> map = new HashMap<>();
-        map.put("image",faceImageUrl);
+        map.put("image", faceImageUrl);
         map.put("image_type", faceType);
-        map.put("group_id_list",groupId);
-        map.put("max_user_num",3);
+        map.put("group_id_list", groupId);
+        map.put("max_user_num", 1);
 
         // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
         String accessToken = baiduAuthUtil.getAuth();
 
-        String body = HttpRequest.post(url+"?access_token="+accessToken)
+        String body = HttpRequest.post(url + "?access_token=" + accessToken)
                 .form(map)
                 .execute()
                 .body();
 
+        JSONObject jsonObject = JSONUtil.parseObj(body);
+        String errorMsg = jsonObject.getStr("error_msg");
+        Integer errorCode = jsonObject.getInt("error_code");
+        if (!"SUCCESS".equals(errorMsg)) {
+            throw new Exception(errorMsg);
+        } else {
+            JSONObject jsonObject1 = jsonObject.getJSONObject("result");
+
+            JSONArray jsonArray = jsonObject1.getJSONArray("user_list");
+
+            Map map1 = (Map) jsonArray.get(0);
+
+            Double score = ((Double) map1.get("score"));
+
+            if (score.compareTo(new Double(90))>0){
+                Long userId = Long.parseLong((String) map1.get("user_id"));
+                personId = userId;
+            }
+
+        }
+        return personId;
 
 
     }
@@ -58,7 +83,7 @@ public class BaiduServiceImpl implements BaiduService {
         // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
         String accessToken = baiduAuthUtil.getAuth();
 
-        String body = HttpRequest.post(url+"?access_token="+accessToken)
+        String body = HttpRequest.post(url + "?access_token=" + accessToken)
                 .form(map)
                 .execute()
                 .body();
@@ -67,8 +92,8 @@ public class BaiduServiceImpl implements BaiduService {
 
         String errorMsg = jsonObject.getStr("error_msg");
         Integer errorCode = jsonObject.getInt("error_code");
-        if (!"SUCCESS".equals(errorMsg)){
-            if (errorCode != 223101){
+        if (!"SUCCESS".equals(errorMsg)) {
+            if (errorCode != 223101) {
                 throw new Exception(errorMsg);
             }
         }
@@ -77,30 +102,30 @@ public class BaiduServiceImpl implements BaiduService {
     }
 
     @Override
-    public void faceUserAdd(String imageUrl, String groupId, String personId,String userInfo) throws Exception {
+    public void faceUserAdd(String imageUrl, String groupId, String personId, String userInfo) throws Exception {
 
         // 请求url
         String url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add";
 
         Map<String, Object> map = new HashMap<>();
-        map.put("image",imageUrl);
+        map.put("image", imageUrl);
         map.put("image_type", "URL");
-        map.put("group_id",groupId);
-        map.put("user_id",personId);
-        map.put("user_info",userInfo);
+        map.put("group_id", groupId);
+        map.put("user_id", personId);
+        map.put("user_info", userInfo);
 
         // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
         String accessToken = baiduAuthUtil.getAuth();
 
-        String body = HttpRequest.post(url+"?access_token="+accessToken)
+        String body = HttpRequest.post(url + "?access_token=" + accessToken)
                 .form(map)
                 .execute()
                 .body();
         JSONObject jsonObject = JSONUtil.parseObj(body);
         String errorMsg = jsonObject.getStr("error_msg");
         Integer errorCode = jsonObject.getInt("error_code");
-        if (!"SUCCESS".equals(errorMsg)){
-            if (errorCode != 223105){
+        if (!"SUCCESS".equals(errorMsg)) {
+            if (errorCode != 223105) {
                 throw new Exception(errorMsg);
             }
         }

+ 65 - 12
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/GpsServiceImpl.java

@@ -297,31 +297,84 @@ public class GpsServiceImpl implements GpsService {
 
         String currentStationId = null;
         List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(id, "1");
-        if (shiftInfoList.size() > 0) {
-
 
+        if (shiftInfoList.size() > 0) {
             ShiftInfo shiftInfo = shiftInfoList.get(0);
-
             RouteInfo routeInfo = routeInfoService.get(shiftInfo.getRouteId());
 
             List<StationInfo> stationInfoList = stationInfoService.findByRouteId(routeInfo.getId());
-            currentStationId = shiftInfo.getStartStationId();
+            currentStationId = shiftInfo.getCurrentStationId();
+
+            //当前站点
+            StationInfo currentStation = stationInfoService.get(currentStationId);
+            int currentIndex = currentStation.getSortNo();
+
+            //线路终点站
+            StationInfo endStation = stationInfoService.get(shiftInfo.getEndStationId());
+
+            boolean frontToEnd = true;
+
             if (stationInfoList.size() > 0) {
-                for (StationInfo stationInfo : stationInfoList) {
-                    GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(vehicleInfo.getLatitude()), Double.valueOf(vehicleInfo.getLongitude()));
-                    GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(stationInfo.getLatitude()), Double.valueOf(stationInfo.getLongitude()));
-
-                    double meter1 = CommonUtil.getDistanceMeter(source, target, Ellipsoid.Sphere);
-                    if (meter1 <= Double.valueOf(50)) {
-                        currentStationId = stationInfo.getId();
-                        break;
+                if(endStation.getId().equals(stationInfoList.get(0).getId())){
+                    //反向行驶
+                    frontToEnd = false;
+                }
+
+                if(frontToEnd){
+                    for (int i=0;i<stationInfoList.size();i++) {
+                        StationInfo stationInfo = stationInfoList.get(i);
+
+                        if(stationInfo.getSortNo() <= currentIndex){
+                            //正向行驶时,排序比当前站小的站点不用计算
+                            continue;
+                        }
+
+                        if(matchDistance(stationInfo,vehicleInfo,50)){
+                           currentStationId = stationInfo.getId();
+                        }
                     }
                 }
+                else{
+                    for (int i=stationInfoList.size() - 1;i>=0;i--) {
+                        StationInfo stationInfo = stationInfoList.get(i);
+
+                        if (stationInfo.getSortNo() >= currentIndex){
+                            //反向行驶时,排序比当前站大的站点不用计算
+                            continue;
+                        }
+
+                        if(matchDistance(stationInfo,vehicleInfo,50)){
+                            currentStationId = stationInfo.getId();
+                        }
+                    }
+                }
+
             }
         }
         return currentStationId;
     }
 
+    /**
+     * 查询指定范围内的站点
+     * @param stationInfo
+     * @param vehicleInfo
+     * @param distance
+     * @return
+     */
+    private boolean matchDistance(StationInfo stationInfo,VehicleInfo vehicleInfo,int distance){
+        GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(vehicleInfo.getLatitude()), Double.valueOf(vehicleInfo.getLongitude()));
+        GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(stationInfo.getLatitude()), Double.valueOf(stationInfo.getLongitude()));
+
+        double meter1 = CommonUtil.getDistanceMeter(source, target, Ellipsoid.Sphere);
+
+        if (meter1 <= Double.valueOf(distance)) {
+            return true;
+        }
+        else{
+            return false;
+        }
+    }
+
     public String encode(String text) {
         try {
             text = URLEncoder.encode(text, "UTF-8");

+ 240 - 89
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/PassengerInfoServiceImpl.java

@@ -1,10 +1,7 @@
 package com.jpsoft.bus.modules.bus.service.impl;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 import javax.annotation.Resource;
 
 import cn.hutool.core.date.DateUtil;
@@ -12,12 +9,15 @@ import cn.hutool.core.util.StrUtil;
 import com.google.common.collect.Ordering;
 import com.jpsoft.bus.modules.base.entity.MergeOrderInfo;
 import com.jpsoft.bus.modules.base.entity.OrderInfo;
+import com.jpsoft.bus.modules.base.entity.PaymentInfo;
 import com.jpsoft.bus.modules.base.service.MergeOrderInfoService;
 import com.jpsoft.bus.modules.base.service.OrderInfoService;
+import com.jpsoft.bus.modules.base.service.PaymentInfoService;
 import com.jpsoft.bus.modules.bus.dto.DriverBuyTicketDTO;
-import com.jpsoft.bus.modules.bus.entity.ShiftInfo;
-import com.jpsoft.bus.modules.bus.entity.VehicleInfo;
+import com.jpsoft.bus.modules.bus.entity.*;
 import com.jpsoft.bus.modules.bus.service.BaiduService;
+import com.jpsoft.bus.modules.bus.service.CompanyInfoService;
+import com.jpsoft.bus.modules.bus.service.PriceInfoService;
 import com.jpsoft.bus.modules.common.utils.CommonUtil;
 import com.jpsoft.bus.modules.pay.service.AlipayService;
 import com.jpsoft.bus.modules.pay.service.WechatService;
@@ -26,7 +26,6 @@ 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.PassengerInfoDAO;
-import com.jpsoft.bus.modules.bus.entity.PassengerInfo;
 import com.jpsoft.bus.modules.bus.service.PassengerInfoService;
 import com.github.pagehelper.Page;
 import com.jpsoft.bus.modules.common.dto.Sort;
@@ -39,7 +38,16 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
     private PassengerInfoDAO passengerInfoDAO;
 
     @Autowired
-	private MergeOrderInfoService mergeOrderInfoService;
+    private MergeOrderInfoService mergeOrderInfoService;
+
+    @Autowired
+    private PriceInfoService priceInfoService;
+
+    @Autowired
+    private CompanyInfoService companyInfoService;
+
+    @Autowired
+    private PaymentInfoService paymentInfoService;
 
     @Autowired
     private WechatService wechatService;
@@ -48,7 +56,7 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
     private AlipayService alipayService;
 
     @Autowired
-	private OrderInfoService orderInfoService;
+    private OrderInfoService orderInfoService;
 
     @Autowired
     private BaiduService baiduService;
@@ -154,103 +162,246 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
                     baiduService.faceUserAdd(retFileUrl, groupId, personId, "2");
                 }
 
-            }else {
-				PassengerInfo passengerInfo = passengerInfoList1.get(0);
-				passengerInfo.setStatus("1");
-				update(passengerInfo);
-			}
+            } else {
+                PassengerInfo passengerInfo = passengerInfoList1.get(0);
+                passengerInfo.setStatus("1");
+                update(passengerInfo);
+            }
         }
     }
 
-	@Override
-	public DriverBuyTicketDTO driverBuyTicket(PassengerInfo passengerInfo, String ticketUpStationId, String ticketDownStationId, String ticketType, String goodsTicket, String totalFee, String payName,String paymentId) throws Exception {
+    @Override
+    public DriverBuyTicketDTO driverBuyTicket(PassengerInfo passengerInfo, String ticketUpStationId, String ticketDownStationId, String ticketType, String goodsTicket, String totalFee, String payName, String paymentId) throws Exception {
 
         DriverBuyTicketDTO driverBuyTicketDTO = new DriverBuyTicketDTO();
 
 
-    	//乘客记录添加购票上车点和下车点
-		passengerInfo.setTicketUpStationId(ticketUpStationId);
+        //乘客记录添加购票上车点和下车点
+		/*passengerInfo.setTicketUpStationId(ticketUpStationId);
 		passengerInfo.setTicketDownStationId(ticketDownStationId);
-		update(passengerInfo);
-
-
-
-		//根据支付方式创建订单
-		if ("cash".equals(payName) || "ticket".equals(payName)){
-			//创建综合账单
-			MergeOrderInfo mergeOrderInfo = new MergeOrderInfo();
-			mergeOrderInfo.setId(UUID.randomUUID().toString());
-			mergeOrderInfo.setPayStatus(20);
-			mergeOrderInfo.setOutOrderNo(com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
-			mergeOrderInfo.setPayName(payName);
-			mergeOrderInfo.setPaymentId(paymentId);
-			mergeOrderInfo.setCreateTime(new Date());
-			mergeOrderInfoService.insert(mergeOrderInfo);
-
-			OrderInfo orderInfo = new OrderInfo();
-			orderInfo.setId(UUID.randomUUID().toString());
-			orderInfo.setBody("买车票");
-			orderInfo.setTotalFee(new BigDecimal(totalFee));
-			orderInfo.setPayStatus(20);
-			orderInfo.setPayName(payName);
-			orderInfo.setPayFee(new BigDecimal(totalFee));
-			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(ticketType);
-			orderInfo.setGoodsTicket(new BigDecimal(goodsTicket));
-			orderInfoService.insert(orderInfo);
-
-			//乘客购票状态修改
+		update(passengerInfo);*/
+
+
+        //根据支付方式创建订单
+        if ("cash".equals(payName) || "ticket".equals(payName)) {
+            //创建综合账单
+            MergeOrderInfo mergeOrderInfo = new MergeOrderInfo();
+            mergeOrderInfo.setId(UUID.randomUUID().toString());
+            mergeOrderInfo.setVehicleShiftId(passengerInfo.getVehicleShiftId());
+            mergeOrderInfo.setPayStatus(20);
+            mergeOrderInfo.setOutOrderNo(com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
+            mergeOrderInfo.setPayName(payName);
+            mergeOrderInfo.setPaymentId(paymentId);
+            mergeOrderInfo.setCreateTime(new Date());
+            mergeOrderInfoService.insert(mergeOrderInfo);
+
+            OrderInfo orderInfo = new OrderInfo();
+            orderInfo.setId(UUID.randomUUID().toString());
+            orderInfo.setBody("买车票");
+            orderInfo.setTotalFee(new BigDecimal(totalFee));
+            orderInfo.setPayStatus(20);
+            orderInfo.setPayName(payName);
+            orderInfo.setPayFee(new BigDecimal(totalFee));
+            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(ticketType);
+            orderInfo.setCreateTime(new Date());
+            orderInfo.setGoodsTicket(new BigDecimal(goodsTicket));
+            orderInfo.setTicketUpStationId(ticketUpStationId);
+            orderInfo.setTicketDownStationId(ticketDownStationId);
+            orderInfoService.insert(orderInfo);
+
+            //乘客记录添加购票上车点和下车点
+            passengerInfo.setTicketUpStationId(ticketUpStationId);
+            passengerInfo.setTicketDownStationId(ticketDownStationId);
+
+
+            //乘客购票状态修改
             passengerInfo.setPayStatus("1");
             update(passengerInfo);
 
 
-		}else {
-
-			//创建综合账单
-			MergeOrderInfo mergeOrderInfo = new MergeOrderInfo();
-			mergeOrderInfo.setId(UUID.randomUUID().toString());
-			mergeOrderInfo.setPayStatus(10);
-			mergeOrderInfo.setOutOrderNo(com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
-			mergeOrderInfo.setPaymentId(paymentId);
-			mergeOrderInfo.setCreateTime(new Date());
-			mergeOrderInfoService.insert(mergeOrderInfo);
-
-			OrderInfo orderInfo = new OrderInfo();
-			orderInfo.setId(UUID.randomUUID().toString());
-			orderInfo.setBody("买车票");
-			orderInfo.setTotalFee(new BigDecimal(totalFee));
-			orderInfo.setPayStatus(10);
-			orderInfo.setOutOrderNo(com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
-			orderInfo.setMergeOrderId(mergeOrderInfo.getId());
-			orderInfo.setPassengerId(passengerInfo.getId());
-			orderInfo.setTicketType(ticketType);
-			orderInfo.setGoodsTicket(new BigDecimal(goodsTicket));
-			orderInfo.setCreateTime(new Date());
-			orderInfoService.insert(orderInfo);
-
-			String codeUrl = "";
-			if ("wechat".equals(payName)){
-			     codeUrl = wechatService.wxNativePay(mergeOrderInfo.getId());
-			}
-			if ("alipay".equals(payName)){
-			    codeUrl = alipayService.tradePrecreatePay(mergeOrderInfo.getId());
+        } else {
+
+            //创建综合账单
+            MergeOrderInfo mergeOrderInfo = new MergeOrderInfo();
+            mergeOrderInfo.setId(UUID.randomUUID().toString());
+            mergeOrderInfo.setVehicleShiftId(passengerInfo.getVehicleShiftId());
+            mergeOrderInfo.setPayStatus(10);
+            mergeOrderInfo.setOutOrderNo(com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
+            mergeOrderInfo.setPaymentId(paymentId);
+            mergeOrderInfo.setCreateTime(new Date());
+            mergeOrderInfoService.insert(mergeOrderInfo);
+
+            OrderInfo orderInfo = new OrderInfo();
+            orderInfo.setId(UUID.randomUUID().toString());
+            orderInfo.setBody("买车票");
+            orderInfo.setTotalFee(new BigDecimal(totalFee));
+            orderInfo.setPayStatus(10);
+            orderInfo.setOutOrderNo(com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
+            orderInfo.setMergeOrderId(mergeOrderInfo.getId());
+            orderInfo.setPassengerId(passengerInfo.getId());
+            orderInfo.setTicketType(ticketType);
+            orderInfo.setGoodsTicket(new BigDecimal(goodsTicket));
+            orderInfo.setCreateTime(new Date());
+            orderInfo.setTicketUpStationId(ticketUpStationId);
+            orderInfo.setTicketDownStationId(ticketDownStationId);
+            orderInfoService.insert(orderInfo);
+
+            String codeUrl = "";
+            if ("wechat".equals(payName)) {
+                codeUrl = wechatService.wxNativePay(mergeOrderInfo.getId());
+            }
+            if ("alipay".equals(payName)) {
+                codeUrl = alipayService.tradePrecreatePay(mergeOrderInfo.getId());
             }
 
+            driverBuyTicketDTO.setId(orderInfo.getId());
             driverBuyTicketDTO.setPayName(payName);
-			driverBuyTicketDTO.setTotalFee(orderInfo.getTotalFee());
-			driverBuyTicketDTO.setUrl(codeUrl);
-			driverBuyTicketDTO.setPayNameStr(orderInfo.getPayNameStr(payName));
-		}
+            driverBuyTicketDTO.setTotalFee(orderInfo.getTotalFee());
+            driverBuyTicketDTO.setUrl(codeUrl);
+            driverBuyTicketDTO.setPayNameStr(orderInfo.getPayNameStr(payName));
+        }
+
+        return driverBuyTicketDTO;
+    }
+
+    @Override
+    public List<PassengerInfo> findByShiftStatusPayStatusNotTicketDown(String shiftId, String status, String payStatus, String ticketDownStationId) {
+        return passengerInfoDAO.findByShiftStatusPayStatusNotTicketDown(shiftId, status, payStatus, ticketDownStationId);
+    }
+
+    @Override
+    public void createOrder(VehicleInfo vehicleInfo, ShiftInfo shiftInfo, String openId, String mergeOrderId,String passengerIds, String ticketUpStationId, String ticketDownStationId, String ticketType, String goodsTicket, String totalFee) throws Exception {
+
+
+        //乘客id集合
+        List<String> passengerList = Arrays.asList(passengerIds.split(","));
+        if (passengerList.size() == 0) {
+            throw new Exception("乘客不存在");
+        }
+
+        PriceInfo priceInfo = priceInfoService.findByStartStationAndEndStation(ticketUpStationId, ticketDownStationId);
+        if (priceInfo == null) {
+            PriceInfo priceInfo1 = priceInfoService.findByStartStationAndEndStation(ticketDownStationId, ticketUpStationId);
+            if (priceInfo1 == null) {
+                throw new Exception("站点间无费用设置");
+            }
+        }
+
+        BigDecimal price = priceInfo.getPrice();
+        if ("1".equals(ticketType)) {
+            price = price.divide(new BigDecimal(2));
+        }
+
+        BigDecimal totalTicketPrice =price.multiply(new BigDecimal(passengerList.size()));
+
+        BigDecimal goodTicketPrice = new BigDecimal(goodsTicket);
 
-		return driverBuyTicketDTO;
-	}
+        BigDecimal total = totalTicketPrice.add(goodTicketPrice);
+        if (total.compareTo(new BigDecimal(totalFee)) != 0) {
+            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("对应公司收款账户异常,请核验");
+        }
+
+
+
+        String mergeId = mergeOrderId;
+        if (StringUtils.isBlank(mergeOrderId)){
+            MergeOrderInfo mergeOrderInfo = new MergeOrderInfo();
+            mergeOrderInfo.setId(UUID.randomUUID().toString());
+            mergeOrderInfo.setVehicleShiftId(shiftInfo.getId());
+            mergeOrderInfo.setOpenId(openId);
+            mergeOrderInfo.setPayStatus(10);
+            mergeOrderInfo.setOutOrderNo(com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
+            mergeOrderInfo.setPaymentId(paymentId);
+            mergeOrderInfo.setCreateTime(new Date());
+            mergeOrderInfoService.insert(mergeOrderInfo);
+            mergeId = mergeOrderInfo.getId();
+        }
+
+        PassengerInfo passengerInfo0 = get(passengerList.get(0));
+
+        String upStationId = passengerInfo0.getUpStationId();
+
+        Boolean goodTicketStatus = false;
+        for (String passengerId : passengerList) {
+
+            OrderInfo orderInfo0 = orderInfoService.findByPassengerIdMergeOrderId(passengerId,mergeId);
+            if (orderInfo0 != null){
+                throw new Exception("有乘客已加入此账单,不可重复添加");
+            }
+
+            PassengerInfo passengerInfo = get(passengerId);
+            if (!passengerInfo.getUpStationId().equals(upStationId)){
+                throw new Exception("上车站点不一致不可同时选择");
+            }
+            if ("1".equals(passengerInfo.getStatus()) && "0".equals(passengerInfo.getPayStatus())) {
+
+                //创建订单
+                OrderInfo orderInfo = new OrderInfo();
+                orderInfo.setId(UUID.randomUUID().toString());
+                orderInfo.setTotalFee(new BigDecimal(totalFee));
+                orderInfo.setBody("买车票");
+                orderInfo.setPayStatus(10);
+                orderInfo.setOutOrderNo(com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
+                orderInfo.setCreateTime(new Date());
+                orderInfo.setPaymentId(paymentId);
+                orderInfo.setPassengerId(passengerId);
+                orderInfo.setTicketType(ticketType);
+
+                if (!goodTicketStatus){
+                    orderInfo.setGoodsTicket(new BigDecimal(goodsTicket));
+                    goodTicketStatus = true;
+                }
+
+                orderInfo.setMergeOrderId(mergeId);
+                orderInfo.setTicketUpStationId(ticketUpStationId);
+                orderInfo.setTicketDownStationId(ticketDownStationId);
+                orderInfoService.insert(orderInfo);
+
+            }else {
+                throw new Exception("乘客已下车或已购票");
+            }
+        }
+
+
+    }
 
     @Override
-    public List<PassengerInfo> findByShiftStatusPayStatusNotTicketDown(String shiftId, String status, String payStatus,String ticketDownStationId) {
-        return passengerInfoDAO.findByShiftStatusPayStatusNotTicketDown(shiftId,status,payStatus,ticketDownStationId);
+    public void updatePassengerOrder(OrderInfo orderInfo, String ticketUpStationId, String ticketDownStationId, String ticketType, String goodsTicket, String totalFee) {
+
+        orderInfo.setTicketUpStationId(ticketUpStationId);
+        orderInfo.setTicketDownStationId(ticketDownStationId);
+        orderInfo.setTotalFee(new BigDecimal(totalFee));
+        orderInfo.setTicketType(ticketType);
+        orderInfo.setGoodsTicket(new BigDecimal(goodsTicket));
+        orderInfoService.update(orderInfo);
     }
 }

+ 60 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/StationInfoServiceImpl.java

@@ -1,9 +1,13 @@
 package com.jpsoft.bus.modules.bus.service.impl;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import javax.annotation.Resource;
+
+import com.jpsoft.bus.modules.bus.dto.VehicleStationDTO;
+import com.jpsoft.bus.modules.bus.entity.ShiftInfo;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import com.jpsoft.bus.modules.bus.dao.StationInfoDAO;
@@ -83,4 +87,60 @@ public class StationInfoServiceImpl implements StationInfoService {
 	public StationInfo findByRouteIdAndName(String routeId, String name){
 		return stationInfoDAO.findByRouteIdAndName(routeId,name);
 	}
+
+	@Override
+	public List<VehicleStationDTO> getVehicleStationDTO(ShiftInfo shiftInfo, List<StationInfo> stationInfoList) {
+
+		List<VehicleStationDTO> vehicleStationDTOList = new ArrayList<>();
+
+		StationInfo currentStation = get(shiftInfo.getCurrentStationId());
+
+		int size = stationInfoList.size();
+		Integer index = stationInfoList.indexOf(currentStation);
+		if (shiftInfo.getStartStationId().equals(stationInfoList.get(0).getId())){
+			for (int n = 0;n<size;n++){
+				StationInfo stationInfo = stationInfoList.get(n);
+				VehicleStationDTO vehicleStationDTO = new VehicleStationDTO();
+				vehicleStationDTO.setId(stationInfo.getId());
+				vehicleStationDTO.setStationName(stationInfo.getName());
+				vehicleStationDTO.setLongitude(stationInfo.getLongitude());
+				vehicleStationDTO.setLatitude(stationInfo.getLatitude());
+				if (n < index){
+					vehicleStationDTO.setStatus("1");
+
+				}
+				if (n == index){
+					vehicleStationDTO.setStatus("2");
+				}
+				if (n > index){
+					vehicleStationDTO.setStatus("3");
+				}
+				vehicleStationDTOList.add(vehicleStationDTO);
+
+			}
+		}
+		if (shiftInfo.getEndStationId().equals(stationInfoList.get(0).getId())){
+			for (int n = size-1;n>=0;n--){
+				StationInfo stationInfo = stationInfoList.get(n);
+				VehicleStationDTO vehicleStationDTO = new VehicleStationDTO();
+				vehicleStationDTO.setId(stationInfo.getId());
+				vehicleStationDTO.setStationName(stationInfo.getName());
+				vehicleStationDTO.setLongitude(stationInfo.getLongitude());
+				vehicleStationDTO.setLatitude(stationInfo.getLatitude());
+				if (n < index){
+					vehicleStationDTO.setStatus("3");
+
+				}
+				if (n == index){
+					vehicleStationDTO.setStatus("2");
+				}
+				if (n > index){
+					vehicleStationDTO.setStatus("1");
+				}
+				vehicleStationDTOList.add(vehicleStationDTO);
+
+			}
+		}
+		return vehicleStationDTOList;
+	}
 }

+ 18 - 3
common/src/main/resources/mapper/base/MergeOrderInfo.xml

@@ -6,6 +6,7 @@
 	<resultMap id="MergeOrderInfoMap" type="com.jpsoft.bus.modules.base.entity.MergeOrderInfo">
 		<id property="id" column="id_" />
 			<result property="openId" column="open_id" />
+			<result property="vehicleShiftId" column="vehicle_shift_id"/>
 			<result property="payStatus" column="pay_status" />
 			<result property="payName" column="pay_name" />
 			<result property="outOrderNo" column="out_order_no" />
@@ -25,11 +26,12 @@
 	-->
 	<![CDATA[
 		insert into base_merge_order_info
-	    (id_,open_id,pay_status,pay_name,out_order_no,transaction_id,payment_id,create_by,create_time,update_by,update_time,del_flag)
+	    (id_,open_id,vehicle_shift_id,pay_status,pay_name,out_order_no,transaction_id,payment_id,create_by,create_time,update_by,update_time,del_flag)
 		values
 		(
 #{id,jdbcType=VARCHAR}
 ,#{openId,jdbcType=VARCHAR}
+,#{vehicleShiftId,jdbcType=VARCHAR}
 ,#{payStatus,jdbcType= NUMERIC }
 ,#{payName,jdbcType=VARCHAR}
 ,#{outOrderNo,jdbcType=VARCHAR}
@@ -52,6 +54,9 @@
 				<if test="openId!=null">
 		open_id=#{openId,jdbcType=VARCHAR},
 		</if>
+			<if test="vehicleShiftId!=null">
+				vehicle_shift_id=#{vehicleShiftId,jdbcType=VARCHAR},
+			</if>
 				<if test="payStatus!=null">
 		pay_status=#{payStatus,jdbcType= NUMERIC },
 		</if>
@@ -86,8 +91,7 @@
 	where id_=#{id}
 	</update>
 	<select id="get" parameterType="string" resultMap="MergeOrderInfoMap">
-		select
-id_,open_id,pay_status,pay_name,out_order_no,transaction_id,payment_id,create_by,create_time,update_by,update_time,del_flag		from base_merge_order_info where id_=#{0}
+		select * from base_merge_order_info where id_=#{0}
 	</select>
 	<select id="exist" parameterType="string" resultType="int">
 		select count(*) from base_merge_order_info where id_=#{0}
@@ -116,4 +120,15 @@ id_,open_id,pay_status,pay_name,out_order_no,transaction_id,payment_id,create_by
 		and out_order_no = #{outOrderNo}
 		]]>
 	</select>
+
+	<select id="findByOpenIdShiftIdPayStatus" resultMap="MergeOrderInfoMap">
+		<![CDATA[
+		select * from base_merge_order_info
+		where del_flag = 0
+		and open_id = #{openId}
+		and vehicle_shift_id = #{shiftId}
+		and pay_status = #{payStatus}
+		order by create_time desc
+		]]>
+	</select>
 </mapper>

+ 22 - 3
common/src/main/resources/mapper/base/OrderInfo.xml

@@ -25,6 +25,8 @@
 			<result property="ticketType" column="ticket_type"/>
 			<result property="goodsTicket" column="goods_ticket"/>
 			<result property="mergeOrderId" column="merge_order_id"/>
+			<result property="ticketUpStationId" column="ticket_up_station_id"/>
+			<result property="ticketDownStationId" column="ticket_down_station_id"/>
 			</resultMap>
 	<insert id="insert" parameterType="com.jpsoft.bus.modules.base.entity.OrderInfo">
 	<!--
@@ -34,7 +36,7 @@
 	-->
 	<![CDATA[
 		insert into base_order_info
-	    (id_,total_fee,body_,pay_status,pay_name,pay_fee,refund_fee,pay_time,out_order_no,transaction_id,open_id,payment_id,create_by,create_time,update_by,update_time,del_flag,passenger_id,ticket_type,goods_ticket,merge_order_id)
+	    (id_,total_fee,body_,pay_status,pay_name,pay_fee,refund_fee,pay_time,out_order_no,transaction_id,open_id,payment_id,create_by,create_time,update_by,update_time,del_flag,passenger_id,ticket_type,goods_ticket,merge_order_id,ticket_up_station_id,ticket_down_station_id)
 		values
 		(
 #{id,jdbcType=VARCHAR}
@@ -58,6 +60,8 @@
 ,#{ticketType,jdbcType=VARCHAR}
 ,#{goodsTicket,jdbcType=DECIMAL}
 ,#{mergeOrderId,jdbcType=VARCHAR}
+,#{ticketUpStationId,jdbcType=VARCHAR}
+,#{ticketDownStationId,jdbcType=VARCHAR}
 		)
 	]]>
 	</insert>
@@ -122,10 +126,16 @@
 				ticket_type = #{ticketType,jdbcType=VARCHAR},
 			</if>
 			<if test="goodsTicket != null">
-				goods_ticket = #{goodsTicket,jdbcType=DECIMAL}
+				goods_ticket = #{goodsTicket,jdbcType=DECIMAL},
 			</if>
 			<if test="mergeOrderId != null">
-				merge_order_id = #{mergeOrderId,jdbcType=VARCHAR}
+				merge_order_id = #{mergeOrderId,jdbcType=VARCHAR},
+			</if>
+			<if test="ticketUpStationId != null">
+				ticket_up_station_id = #{ticketUpStationId,jdbcType=VARCHAR},
+			</if>
+			<if test="ticketDownStationId != null">
+				ticket_down_station_id = #{ticketDownStationId,jdbcType=VARCHAR},
 			</if>
 		</set>
 	where id_=#{id}
@@ -196,4 +206,13 @@
 		and merge_order_id = #{mergeOrderId}
 		]]>
 	</select>
+
+	<select id="findByPassengerIdMergeOrderId" resultMap="OrderInfoMap">
+		<![CDATA[
+		select * from base_order_info
+		where del_flag = 0
+		and passenger_id = #{passengerId}
+		and merge_order_id = #{mergeOrderId}
+		]]>
+	</select>
 </mapper>

+ 17 - 3
common/src/main/resources/mapper/base/PaymentInfo.xml

@@ -20,6 +20,8 @@
 			<result property="updateBy" column="update_by" />
 			<result property="updateTime" column="update_time" />
 			<result property="delFlag" column="del_flag" />
+			<result property="isOpenWechat" column="is_open_wechat" />
+			<result property="isOpenAlipay" column="is_open_alipay" />
 			</resultMap>
 	<insert id="insert" parameterType="com.jpsoft.bus.modules.base.entity.PaymentInfo">
 	<!--
@@ -29,7 +31,7 @@
 	-->
 	<![CDATA[
 		insert into base_payment_info
-	    (id_,company_id,name_,wechat_notify_url,alipay_notify_url,app_id,sub_app_secret,mch_id,sub_app_id,sub_mch_id,app_auth_token,create_by,create_time,update_by,update_time,del_flag)
+	    (id_,company_id,name_,wechat_notify_url,alipay_notify_url,app_id,sub_app_secret,mch_id,sub_app_id,sub_mch_id,app_auth_token,create_by,create_time,update_by,update_time,del_flag,is_open_wechat,is_open_alipay)
 		values
 		(
 #{id,jdbcType=VARCHAR}
@@ -48,6 +50,8 @@
 ,#{updateBy,jdbcType=VARCHAR}
 ,#{updateTime,jdbcType= TIMESTAMP }
 ,#{delFlag,jdbcType= NUMERIC }
+,#{isOpenWechat,jdbcType= NUMERIC }
+,#{isOpenAlipay,jdbcType= NUMERIC }
 		)
 	]]>
 	</insert>
@@ -102,6 +106,12 @@
 				<if test="delFlag!=null">
 		del_flag=#{delFlag,jdbcType= NUMERIC },
 		</if>
+			<if test="isOpenWechat!=null">
+				is_open_wechat=#{isOpenWechat,jdbcType= NUMERIC },
+			</if>
+			<if test="isOpenAlipay!=null">
+				is_open_alipay=#{isOpenAlipay,jdbcType= NUMERIC },
+			</if>
 		</set>
 	where id_=#{id}
 	</update>
@@ -119,8 +129,12 @@
 			select * from base_payment_info
 		]]>
 		<where>
-			<if test="searchParams.id != null">
-				and ID_ like #{searchParams.id}
+			del_flag = false
+			<if test="searchParams.name != null">
+				and name_ like #{searchParams.name}
+			</if>
+			<if test="searchParams.companyId != null">
+				and company_id = #{searchParams.companyId}
 			</if>
 		</where>
 		<foreach item="sort" collection="sortList"  open="order by" separator=",">

+ 17 - 4
common/src/main/resources/mapper/bus/DriverRecordInfo.xml

@@ -101,12 +101,25 @@
 	</select>
     <select id="search" parameterType="hashmap" resultMap="DriverRecordInfoMap">
         <![CDATA[
-			select * from bus_driver_record_info
+			select * from bus_driver_record_info a inner join bus_driver_info b on a.driver_id = b.id_
 		]]>
         <where>
-            del_flag = false
-            <if test="searchParams.id != null">
-                and id_ = #{searchParams.id}
+            a.del_flag = false and b.del_flag=false
+            <if test="searchParams.name != null">
+                and b.name_ like #{searchParams.name}
+            </if>
+            <if test="searchParams.licensePlateNumber != null">
+                and a.license_plate_number like #{searchParams.licensePlateNumber}
+            </if>
+            <if test="searchParams.beginTime != null">
+                <![CDATA[
+                  and a.record_time >= #{searchParams.beginTime}
+            ]]>
+            </if>
+            <if test="searchParams.endTime != null">
+                <![CDATA[
+                  and a.record_time <= #{searchParams.endTime}
+            ]]>
             </if>
         </where>
         <foreach item="sort" collection="sortList"  open="order by" separator=",">

+ 6 - 0
common/src/main/resources/mapper/bus/PassengerInfo.xml

@@ -170,6 +170,12 @@
 			<if test="searchParams.status != null">
 				and a.status_ = #{searchParams.status}
 			</if>
+			<if test="searchParams.statusList != null">
+				and a.status_ in
+				<foreach collection="searchParams.statusList" item="status" open="(" separator="," close=")">
+					#{status}
+				</foreach>
+			</if>
 			<if test="searchParams.notPayStatus != null">
 				and a.pay_status != #{searchParams.notPayStatus}
 			</if>

+ 1 - 2
gps/pom.xml

@@ -8,9 +8,8 @@
         <version>1.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-
     <artifactId>gps</artifactId>
-    <version>1.0.0</version>
+    <version>1.1.0</version>
 
     <properties>
         <netty-all.version>4.1.6.Final</netty-all.version>

+ 17 - 9
gps/src/main/java/com/jpsoft/gps/handler/ProcessHandler.java

@@ -25,19 +25,27 @@ public class ProcessHandler extends SimpleChannelInboundHandler<String> {
             String deviceNo = arr[0];
             String[] subArr = arr[1].split(";");
 
-            double wd = Double.valueOf(subArr[0]);
-            double jd = Double.valueOf(subArr[1]);
+            if (subArr.length==3){
+                //测试用不进行转换
+                if (this.callback != null) {
+                    this.callback.receive(deviceNo, subArr[1], subArr[0]);
+                }
+            }
+            else {
+                double wd = Double.valueOf(subArr[0]);
+                double jd = Double.valueOf(subArr[1]);
 
-            DecimalFormat df = new DecimalFormat("#.######");
+                DecimalFormat df = new DecimalFormat("#.######");
 
-            if (wd > 0 && jd > 0) {
-                //高德地图坐标系 gcj02
-                double[] gcj = GPSUtil.gps84_To_Gcj02(wd, jd);//坐标转换
+                if (wd > 0 && jd > 0) {
+                    //gps坐标转高德地图坐标系 gcj02
+                    double[] gcj = GPSUtil.gps84_To_Gcj02(wd, jd);//坐标转换
 
-                System.out.println(deviceNo + "," + df.format(gcj[1]) + "," + df.format(gcj[0]));
+                    System.out.println(deviceNo + "," + df.format(gcj[1]) + "," + df.format(gcj[0]));
 
-                if (this.callback != null) {
-                    this.callback.receive(deviceNo, df.format(gcj[1]), df.format(gcj[0]));
+                    if (this.callback != null) {
+                        this.callback.receive(deviceNo, df.format(gcj[1]), df.format(gcj[0]));
+                    }
                 }
             }
         }

+ 4 - 4
gps/src/main/java/com/jpsoft/gps/utils/GPSUtil.java

@@ -191,8 +191,8 @@ public class GPSUtil {
     }
 
     public static void main(String[] args) {
-        double[] points = GPSUtil.bd09_To_Gcj02(30.308866F,112.270896F);
-
+//        double[] points = GPSUtil.bd09_To_Gcj02(30.308866F,112.270896F);
+        double[] points = GPSUtil.gcj02_To_Gps84(30.307475F,112.2757F);
         DecimalFormat df = new DecimalFormat("#.######");
 
         String longitude = df.format(points[1]);
@@ -200,8 +200,8 @@ public class GPSUtil {
 
         System.out.println(longitude + "," + latitude);
 
-        String address = GPSUtil.regeo(longitude,latitude,"a71a4fa458ed085246ea75ebe096bbea");
+//        String address = GPSUtil.regeo(longitude,latitude,"a71a4fa458ed085246ea75ebe096bbea");
 
-        System.out.println(address);
+//        System.out.println(address);
     }
 }

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

@@ -57,11 +57,19 @@ public class WebMvcConfig implements WebMvcConfigurer {
 				.excludePathPatterns("/mobile/passengerApi/validateCode")
 				.excludePathPatterns("/mobile/driverApi/carActivation")
 				.excludePathPatterns("/mobile/driverApi/findByPhone")
+				.excludePathPatterns("/mobile/driverApi/ticketAmount")
 				.excludePathPatterns("/mobile/passengerApi/getShiftInfo")
 				.excludePathPatterns("/mobile/passengerApi/upload")
+				.excludePathPatterns("/mobile/passengerApi/getVehicleInfo")
+				.excludePathPatterns("/mobile/passengerApi/getPassengerInfo")
+				.excludePathPatterns("/mobile/passengerApi/getVehicleStationInfo")
 				.excludePathPatterns("/wechat/findUserInfo/**")
 				.excludePathPatterns("/wechat/getConfig")
 				.excludePathPatterns("/mobile/passengerApi/upload")
+				.excludePathPatterns("/mobile/passengerApi/upBusNoTicketList")
+				.excludePathPatterns("/mobile/passengerApi/createPassengerOrder")
+				.excludePathPatterns("/mobile/passengerApi/deletePassengerOrder")
+				.excludePathPatterns("/mobile/passengerApi/updatePassengerOrder")
 				.excludePathPatterns("/aliPay/**")
 				.excludePathPatterns("/wxPay/**")
 				;

+ 59 - 4
web/src/main/java/com/jpsoft/bus/modules/base/controller/PaymentInfoController.java

@@ -1,6 +1,8 @@
 package com.jpsoft.bus.modules.base.controller;
 
 import com.github.pagehelper.Page;
+import com.jpsoft.bus.modules.bus.entity.CompanyInfo;
+import com.jpsoft.bus.modules.bus.service.CompanyInfoService;
 import com.jpsoft.bus.modules.common.dto.MessageResult;
 import com.jpsoft.bus.modules.common.dto.Sort;
 import com.jpsoft.bus.modules.base.entity.PaymentInfo;
@@ -27,6 +29,9 @@ public class PaymentInfoController {
     @Autowired
     private PaymentInfoService paymentInfoService;
 
+    @Autowired
+    private CompanyInfoService companyInfoService;
+
     @ApiOperation(value="创建空记录")
     @GetMapping("create")
     public MessageResult<PaymentInfo> create(){
@@ -196,7 +201,7 @@ public class PaymentInfoController {
     @ApiOperation(value="列表")
     @RequestMapping(value = "pageList",method = RequestMethod.POST)
     public MessageResult<Map> pageList(
-            String id,
+            String companyId,String name,
             @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
             @RequestParam(value="pageSize",defaultValue="20") int pageSize,
             @RequestAttribute String subject){
@@ -209,17 +214,67 @@ public class PaymentInfoController {
         Map<String,Object> searchParams = new HashMap<>();
 
         List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("id_","asc"));
+        sortList.add(new Sort("create_time","desc"));
+
+        if (StringUtils.isNotEmpty(companyId)) {
+            searchParams.put("companyId",companyId);
+        }
 
-        if (StringUtils.isNotEmpty(id)) {
-            searchParams.put("id","%" + id + "%");
+        if (StringUtils.isNotEmpty(name)) {
+            searchParams.put("name","%"+name+"%");
         }
 
         Page<PaymentInfo> page = paymentInfoService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
 
+        for (PaymentInfo paymentInfo:page) {
+            CompanyInfo companyInfo = companyInfoService.get(paymentInfo.getCompanyId());
+            if(companyInfo!=null){
+                paymentInfo.setCompanyName(companyInfo.getName());
+            }
+        }
+
         msgResult.setResult(true);
         msgResult.setData(PojoUtils.pageWrapper(page));
 
         return msgResult;
     }
+
+    @ApiOperation(value="修改是否支持微信支付宝支付")
+    @PostMapping("updateWechatPayOrAliPay")
+    public MessageResult<Integer> updateWechatPayOrAliPay(String id,Boolean wechatPay,Boolean aliPay, @RequestAttribute String subject) {
+        MessageResult<Integer> msgResult = new MessageResult<>();
+
+        try {
+            PaymentInfo paymentInfo = paymentInfoService.get(id);
+
+            if(paymentInfo!=null){
+                if(wechatPay!=null) {
+                    paymentInfo.setIsOpenWechat(wechatPay);
+                }
+                if(aliPay!=null) {
+                    paymentInfo.setIsOpenAlipay(aliPay);
+                }
+
+                paymentInfo.setUpdateBy(subject);
+                paymentInfo.setUpdateTime(new Date());
+
+                int count = paymentInfoService.update(paymentInfo);
+
+                msgResult.setResult(true);
+                msgResult.setData(count);
+            }
+            else{
+                msgResult.setResult(false);
+                msgResult.setMessage("更新失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
 }

+ 98 - 0
web/src/main/java/com/jpsoft/bus/modules/bus/controller/DriverRecordInfoController.java

@@ -0,0 +1,98 @@
+package com.jpsoft.bus.modules.bus.controller;
+
+import com.github.pagehelper.Page;
+import com.jpsoft.bus.modules.bus.entity.DriverInfo;
+import com.jpsoft.bus.modules.bus.entity.DriverRecordInfo;
+import com.jpsoft.bus.modules.bus.service.DriverInfoService;
+import com.jpsoft.bus.modules.bus.service.DriverRecordInfoService;
+import com.jpsoft.bus.modules.common.dto.MessageResult;
+import com.jpsoft.bus.modules.common.dto.Sort;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/bus/driverRecordInfo")
+@Api(description = "driverRecordInfo")
+public class DriverRecordInfoController {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private DriverInfoService driverInfoService;
+
+    @Autowired
+    private DriverRecordInfoService driverRecordInfoService;
+
+    @ApiOperation(value="列表")
+    @RequestMapping(value = "pageList",method = RequestMethod.POST)
+    public MessageResult<Map> pageList(
+            String name,String licensePlateNumber,String recordTimeRanges,
+            @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
+            @RequestParam(value="pageSize",defaultValue="20") int pageSize,
+            @RequestAttribute String subject){
+
+        //当前用户ID
+        System.out.println(subject);
+
+        MessageResult<Map> msgResult = new MessageResult<>();
+
+        Map<String,Object> searchParams = new HashMap<>();
+
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("a.create_time","desc"));
+
+        if (StringUtils.isNotEmpty(name)) {
+            searchParams.put("name", name);
+        }
+
+        if (StringUtils.isNotEmpty(licensePlateNumber)) {
+            searchParams.put("licensePlateNumber","%" + licensePlateNumber + "%");
+        }
+
+        if(StringUtils.isNotEmpty(recordTimeRanges)){
+            String[] timeRangeArray = recordTimeRanges.split(",");
+            String beginTime = "";
+            String endTime = "";
+            if (timeRangeArray.length == 1) {
+                beginTime = timeRangeArray[0];
+                beginTime+=" 00:00:00";
+            } else if (timeRangeArray.length == 2) {
+                beginTime = timeRangeArray[0];
+                endTime = timeRangeArray[1];
+                beginTime+=" 00:00:00";
+                endTime+=" 23:59:59";
+            }
+
+            searchParams.put("beginTime", beginTime);
+            searchParams.put("endTime", endTime);
+        }
+
+
+        Page<DriverRecordInfo> page = driverRecordInfoService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
+
+        for (DriverRecordInfo driverRecordInfo:page) {
+            DriverInfo driverInfo = driverInfoService.get(driverRecordInfo.getDriverId().toString());
+            if(driverInfo!=null){
+                driverRecordInfo.setDriverName(driverInfo.getName());
+            }
+            if(StringUtils.isNoneEmpty(driverRecordInfo.getLongitude())&&StringUtils.isNoneEmpty(driverRecordInfo.getLatitude())){
+                driverRecordInfo.setLocation(driverRecordInfo.getLongitude()+","+driverRecordInfo.getLatitude());
+            }
+        }
+
+        msgResult.setResult(true);
+        msgResult.setData(PojoUtils.pageWrapper(page));
+
+        return msgResult;
+    }
+}

+ 149 - 60
web/src/main/java/com/jpsoft/bus/modules/driver/controller/DriverApiController.java

@@ -34,6 +34,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 
@@ -126,6 +127,7 @@ public class DriverApiController {
 
         }catch (Exception ex){
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -161,6 +163,7 @@ public class DriverApiController {
 
         }catch (Exception ex){
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -182,7 +185,6 @@ public class DriverApiController {
         MessageResult<DriverRecordInfo> messageResult = new MessageResult<>();
 
         try {
-
             VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
             if (vehicleInfo == null){
                 throw new Exception("当前车辆不存在");
@@ -235,7 +237,7 @@ public class DriverApiController {
         }
         catch (Exception ex){
             log.error(ex.getMessage(),ex);
-
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -254,7 +256,6 @@ public class DriverApiController {
         MessageResult<Map> messageResult = new MessageResult<>();
 
         try {
-
             VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
             if (vehicleInfo == null){
                 throw new Exception("当前车辆不存在");
@@ -289,6 +290,7 @@ public class DriverApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -343,6 +345,7 @@ public class DriverApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -406,6 +409,7 @@ public class DriverApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -445,7 +449,7 @@ public class DriverApiController {
         }
         catch (Exception ex){
             log.error(ex.getMessage(),ex);
-
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -496,7 +500,7 @@ public class DriverApiController {
             }
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
-
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -509,27 +513,46 @@ public class DriverApiController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "token", value = "令牌", paramType = "form"),
             @ApiImplicitParam(name = "subject", value = "目标(不传)", paramType = "form"),
-            @ApiImplicitParam(name = "type", value = "1:未购票,2:待下车,3:待补票,4:全部", required = true, paramType = "form")
+            @ApiImplicitParam(name = "type", value = "1:未购票,2:待下车,3:待补票,4:全部", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "status", value = "0-未乘车、1-上车、2-下车", required = false, paramType = "form"),
+            @ApiImplicitParam(name = "shiftId", value = "班次编号", paramType = "form")
     })
-    public MessageResult<Map> busShiftTicketList(String token, @RequestAttribute String subject,@RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex,@RequestParam(value = "pageSize", defaultValue = "20") int pageSize,String type) {
+    public MessageResult<Map> busShiftTicketList(String token,
+                                                 @RequestAttribute String subject,
+                                                 @RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex,
+                                                 @RequestParam(value = "pageSize", defaultValue = "20") int pageSize,
+                                                 @RequestParam(value = "type", defaultValue = "1") String type,
+                                                 @RequestParam(value = "status", defaultValue = "1") String status,
+                                                 @RequestParam(value = "shiftId", defaultValue = "") String shiftId) {
         MessageResult<Map> messageResult = new MessageResult<>();
 
         try {
-
             VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
             if (vehicleInfo == null){
                 throw new Exception("当前车辆不存在");
             }
 
-            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(vehicleInfo.getId(),"1");
-            if (shiftInfoList.size() == 0){
+            ShiftInfo shiftInfo = null;
+
+            if (StringUtils.isNotEmpty(shiftId)){
+                shiftInfo = shiftInfoService.get(shiftId);
+            }
+            else {
+                List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(vehicleInfo.getId(), "1");
+
+                if(shiftInfoList.size()>0) {
+                    shiftInfo = shiftInfoList.get(0);
+                }
+            }
+
+            if (shiftInfo==null){
                 throw new Exception("车辆没有相关班次信息");
             }
 
-            ShiftInfo shiftInfo = shiftInfoList.get(0);
             Map<String,Object> searchParams = new HashMap<>();
             searchParams.put("vehicleShiftId",shiftInfo.getId());
-            searchParams.put("status","1");
+            searchParams.put("statusList",status.split(","));
+
             //未购票
             if ("1".equals(type)){
                 searchParams.put("payStatus","0");
@@ -545,6 +568,7 @@ public class DriverApiController {
             }
 
             List<Sort> sortList = new ArrayList<>();
+//            sortList.add(new Sort("status_","asc"));
             sortList.add(new Sort("create_time","desc"));
             Page<PassengerInfo> page = passengerInfoService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
 
@@ -553,6 +577,7 @@ public class DriverApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -572,7 +597,7 @@ public class DriverApiController {
         MessageResult<PassengerDetailDTO> messageResult = new MessageResult<>();
 
         try {
-            PassengerDetailDTO passengerDetailDTO = new PassengerDetailDTO();;
+            PassengerDetailDTO passengerDetailDTO = new PassengerDetailDTO();
             VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
             if (vehicleInfo == null){
                 throw new Exception("当前车辆不存在");
@@ -588,7 +613,7 @@ public class DriverApiController {
 
             passengerDetailDTO.setId(id);
             passengerDetailDTO.setImageUrl(passengerInfo.getImageUrl());
-
+            passengerDetailDTO.setUpTime(passengerInfo.getUpTime());
             passengerDetailDTO.setUpStationId(passengerInfo.getUpStationId());
 
             //上车站点
@@ -599,6 +624,7 @@ public class DriverApiController {
             }
 
             passengerDetailDTO.setDownStationId(passengerInfo.getDownStationId());
+            passengerDetailDTO.setDownTime(passengerInfo.getDownTime());
 
             //下车站点
             StationInfo downStationInfo = stationInfoService.get(passengerInfo.getDownStationId());
@@ -658,6 +684,7 @@ public class DriverApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -687,7 +714,7 @@ public class DriverApiController {
         }
         catch (Exception ex){
             log.error(ex.getMessage(),ex);
-
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -758,6 +785,7 @@ public class DriverApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -774,7 +802,7 @@ public class DriverApiController {
             @ApiImplicitParam(name = "ticketDownStationId", value = "乘客买票下车站点id", required = true, paramType = "form"),
             @ApiImplicitParam(name = "ticketType", value = "购票类型(1:儿童票,2:成人票)", required = true, paramType = "form")
     })
-    public MessageResult<Map> ticketAmount(String ticketUpStationId,String ticketDownStationId,String ticketType,String token, @RequestAttribute String subject) {
+    public MessageResult<Map> ticketAmount(String ticketUpStationId,String ticketDownStationId,String ticketType,String token,String subject) {
         MessageResult<Map> messageResult = new MessageResult<>();
 
         try {
@@ -804,6 +832,7 @@ public class DriverApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -849,6 +878,7 @@ public class DriverApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -882,59 +912,46 @@ public class DriverApiController {
 
             List<VehicleStationDTO> vehicleStationDTOList = new ArrayList<>();
             if (stationInfoList.size()>0){
-                StationInfo currentStation = stationInfoService.get(shiftInfo.getCurrentStationId());
-
-                int size = stationInfoList.size();
-                Integer index = stationInfoList.indexOf(currentStation);
-                if (shiftInfo.getStartStationId().equals(stationInfoList.get(0).getId())){
-                    for (int n = 0;n<size;n++){
-                        StationInfo stationInfo = stationInfoList.get(n);
-                        VehicleStationDTO vehicleStationDTO = new VehicleStationDTO();
-                        vehicleStationDTO.setId(stationInfo.getId());
-                        vehicleStationDTO.setStationName(stationInfo.getName());
-                        if (n < index){
-                            vehicleStationDTO.setStatus("1");
-
-                        }
-                        if (n == index){
-                            vehicleStationDTO.setStatus("2");
-                        }
-                        if (n > index){
-                            vehicleStationDTO.setStatus("3");
-                        }
-                        vehicleStationDTOList.add(vehicleStationDTO);
+                vehicleStationDTOList = stationInfoService.getVehicleStationDTO(shiftInfo,stationInfoList);
+            }
 
-                    }
-                }
-                if (shiftInfo.getEndStationId().equals(stationInfoList.get(0).getId())){
-                    for (int n = size-1;n>=0;n--){
-                        StationInfo stationInfo = stationInfoList.get(n);
-                        VehicleStationDTO vehicleStationDTO = new VehicleStationDTO();
-                        vehicleStationDTO.setId(stationInfo.getId());
-                        vehicleStationDTO.setStationName(stationInfo.getName());
-                        if (n < index){
-                            vehicleStationDTO.setStatus("3");
-
-                        }
-                        if (n == index){
-                            vehicleStationDTO.setStatus("2");
-                        }
-                        if (n > index){
-                            vehicleStationDTO.setStatus("1");
-                        }
-                        vehicleStationDTOList.add(vehicleStationDTO);
 
-                    }
-                }
+            messageResult.setData(vehicleStationDTOList);
+            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("orderDetailInfo")
+    @ApiOperation(value = "查看订单状态")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "token", value = "令牌", paramType = "form"),
+            @ApiImplicitParam(name = "subject", value = "目标(不传)", paramType = "form"),
+            @ApiImplicitParam(name = "id", value = "订单主id", paramType = "form")
+    })
+    public MessageResult<OrderInfo> orderDetailInfo(String id,String token,@RequestAttribute String subject) {
+        MessageResult<OrderInfo> messageResult = new MessageResult<>();
 
+        try {
+            OrderInfo orderInfo = orderInfoService.get(id);
 
-            messageResult.setData(vehicleStationDTOList);
+            if (orderInfo == null){
+                throw new Exception("订单不存在");
+            }
+
+            messageResult.setData(orderInfo);
             messageResult.setResult(true);
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -942,8 +959,80 @@ public class DriverApiController {
         return messageResult;
     }
 
+    @PostMapping("updateCurrentStation")
+    @ApiOperation(value="更新当前站点")
+    public MessageResult<String> updateCurrentStation(String currentStationId,@RequestAttribute String subject){
+        MessageResult<String> messageResult = new MessageResult<>();
 
+        try {
+            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("车辆没有相关班次信息");
+            }
+
+            ShiftInfo shiftInfo = shiftInfoList.get(0);
+
+            shiftInfo.setCurrentStationId(currentStationId);
+            shiftInfo.setUpdateTime(new Date());
+            shiftInfo.setUpdateBy(subject);
+
+            shiftInfoService.update(shiftInfo);
+
+            //todo 填写具体代码
+            messageResult.setData(currentStationId);
+            messageResult.setResult(true);
+        }
+        catch (Exception ex){
+            log.error(ex.getMessage(),ex);
+
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("finishShift")
+    @ApiOperation(value="收班")
+    public MessageResult<Date> finishShift(@RequestAttribute String subject){
+        MessageResult<Date> messageResult = new MessageResult<>();
+
+        try {
+            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("车辆没有相关班次信息");
+            }
+
+            ShiftInfo shiftInfo = shiftInfoList.get(0);
+
+            shiftInfo.setStatus("2");
+            shiftInfo.setFinishTime(new Date());
+            shiftInfo.setUpdateTime(new Date());
+            shiftInfo.setUpdateBy(subject);
 
+            shiftInfoService.update(shiftInfo);
 
+            //todo 填写具体代码
+            messageResult.setData(shiftInfo.getFinishTime());
+            messageResult.setResult(true);
+        }
+        catch (Exception ex){
+            log.error(ex.getMessage(),ex);
+
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
 }

+ 386 - 28
web/src/main/java/com/jpsoft/bus/modules/mobile/controller/PassengerApiController.java

@@ -2,15 +2,22 @@ package com.jpsoft.bus.modules.mobile.controller;
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.symmetric.DES;
+import cn.hutool.db.sql.Order;
 import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.Page;
 import com.jpsoft.bus.config.OSSConfig;
+import com.jpsoft.bus.modules.base.dto.PassengerOrderDTO;
+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.PassengerDetailDTO;
+import com.jpsoft.bus.modules.bus.dto.VehicleStationDTO;
 import com.jpsoft.bus.modules.bus.entity.*;
 import com.jpsoft.bus.modules.bus.service.*;
 import com.jpsoft.bus.modules.common.dto.MessageResult;
-import com.jpsoft.bus.modules.common.utils.DES3;
-import com.jpsoft.bus.modules.common.utils.JwtUtil;
-import com.jpsoft.bus.modules.common.utils.OSSUtil;
-import com.jpsoft.bus.modules.common.utils.SMSUtil;
+import com.jpsoft.bus.modules.common.dto.Sort;
+import com.jpsoft.bus.modules.common.utils.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -21,17 +28,12 @@ import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestAttribute;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import sun.security.krb5.internal.crypto.Des3;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -53,6 +55,15 @@ public class PassengerApiController {
     @Autowired
     private BaiduService baiduService;
 
+    @Autowired
+    private OrderInfoService orderInfoService;
+
+    @Autowired
+    private PassengerInfoService passengerInfoService;
+
+    @Autowired
+    private MergeOrderInfoService mergeOrderInfoService;
+
     @Autowired
     private RedisTemplate redisTemplate;
 
@@ -86,6 +97,7 @@ public class PassengerApiController {
 
         }catch (Exception ex){
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -123,7 +135,9 @@ public class PassengerApiController {
             messageResult.setResult(true);
             messageResult.setCode(200);
         } catch (Exception ex) {
+            log.error(ex.getMessage(),ex);
             messageResult.setResult(false);
+            messageResult.setCode(400);
             messageResult.setMessage(ex.getMessage());
         }
 
@@ -181,16 +195,8 @@ public class PassengerApiController {
                 userId = userInfo.getId();
             }
 
-
             token = JwtUtil.createToken(jwtSecret, String.valueOf(userId), DateTime.now().plusHours(6).toDate());
 
-
-
-
-
-
-
-
             Map<String, Object> map = new HashMap<>();
             map.put("token", token);
             map.put("userInfo", userInfo);
@@ -200,6 +206,7 @@ public class PassengerApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage());
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -238,21 +245,70 @@ public class PassengerApiController {
             //结束站点
             StationInfo endStation = stationInfoService.get(shiftInfo.getEndStationId());
 
+            //线路所有站点
+            List<StationInfo> stationInfoList = stationInfoService.findByRouteId(shiftInfo.getRouteId());
+
+         //   List<VehicleStationDTO> vehicleStationDTOList = stationInfoService.getVehicleStationDTO(shiftInfo,stationInfoList);
+
+
 
             Map<String, Object> map = new HashMap<>();
             map.put("startStation",startStation.getName());
+            map.put("startStationId",startStation.getId());
+            map.put("startStationCoordinate",startStation.getLongitude() + "|" +startStation.getLatitude());
             map.put("endStation",endStation.getName());
+            map.put("endStationId",endStation.getId());
+            map.put("endStationCoordinate",endStation.getLongitude() + "|" + endStation.getLatitude());
             map.put("startTime",routeInfo.getStartTime());
             map.put("endTime",routeInfo.getEndTime());
             map.put("routeName",routeInfo.getName());
             map.put("mapPath",routeInfo.getMapPath());
-            map.put("longitude",vehicleInfo.getLongitude());
-            map.put("latitude",vehicleInfo.getLatitude());
+        //    map.put("stationList",vehicleStationDTOList);
             messageResult.setData(map);
             messageResult.setResult(true);
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage());
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("getVehicleStationInfo")
+    @ApiOperation(value = "获取车辆站点的位置")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form")
+    })
+    public MessageResult<List<VehicleStationDTO>> getVehicleStationInfo(String id) {
+        MessageResult<List<VehicleStationDTO>> messageResult = new MessageResult<>();
+
+        try {
+
+            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(id, "1");
+
+            if (shiftInfoList.size() == 0) {
+                throw new Exception("当前车辆没有正运行的班次");
+            }
+
+            //班次信息
+            ShiftInfo shiftInfo = shiftInfoList.get(0);
+
+            //车辆信息
+            VehicleInfo vehicleInfo = vehicleInfoService.get(id);
+
+            //线路所有站点
+            List<StationInfo> stationInfoList = stationInfoService.findByRouteId(shiftInfo.getRouteId());
+            Map<String, Object> map = new HashMap<>();
+            List<VehicleStationDTO> vehicleStationDTOList = stationInfoService.getVehicleStationDTO(shiftInfo,stationInfoList);
+            messageResult.setData(vehicleStationDTOList);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -260,6 +316,127 @@ public class PassengerApiController {
         return messageResult;
     }
 
+
+    @PostMapping("getVehicleInfo")
+    @ApiOperation(value = "获取车辆的位置")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form")
+    })
+    public MessageResult<Map> getVehicleInfo(String id) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(id, "1");
+
+            if (shiftInfoList.size() == 0) {
+                throw new Exception("当前车辆没有正运行的班次");
+            }
+
+            //班次信息
+            ShiftInfo shiftInfo = shiftInfoList.get(0);
+
+            //车辆信息
+            VehicleInfo vehicleInfo = vehicleInfoService.get(id);
+            Map<String, Object> map = new HashMap<>();
+            map.put("longitude", vehicleInfo.getLongitude());
+            map.put("latitude", vehicleInfo.getLatitude());
+            map.put("currentStationId",shiftInfo.getCurrentStationId());
+            messageResult.setData(map);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("getPassengerInfo")
+    @ApiOperation(value = "获取微信在当前车辆添加乘客信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "openId", value = "openId", required = true, paramType = "form")
+    })
+    public MessageResult<Map> getPassengerInfo(String id,String openId) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(id, "1");
+
+            if (shiftInfoList.size() == 0) {
+                throw new Exception("当前车辆没有正运行的班次");
+            }
+
+            //班次信息
+            ShiftInfo shiftInfo = shiftInfoList.get(0);
+
+            //车辆信息
+            VehicleInfo vehicleInfo = vehicleInfoService.get(id);
+
+            String mergeOrderId = null;
+            List<MergeOrderInfo> mergeOrderInfoList = mergeOrderInfoService.findByOpenIdShiftIdPayStatus(openId,shiftInfo.getId(),10);
+
+            BigDecimal totalAmount = BigDecimal.ZERO;
+            List<PassengerOrderDTO> passengerOrderDTOList = new ArrayList<>();
+            if (mergeOrderInfoList.size()>0){
+               MergeOrderInfo mergeOrderInfo = mergeOrderInfoList.get(0);
+               List<OrderInfo> orderInfoList = orderInfoService.findByMergeOrderId(mergeOrderInfo.getId());
+               mergeOrderId = mergeOrderInfo.getId();
+
+               if (orderInfoList.size()>0){
+                   for (OrderInfo orderInfo : orderInfoList){
+
+
+                       PassengerInfo passengerInfo = passengerInfoService.get(orderInfo.getPassengerId());
+                       //购票始发站
+                       StationInfo start = stationInfoService.get(orderInfo.getTicketUpStationId());
+                       //购票终点站
+                       StationInfo end = stationInfoService.get(orderInfo.getTicketDownStationId());
+                       PassengerOrderDTO passengerOrderDTO = new PassengerOrderDTO();
+                       passengerOrderDTO.setId(orderInfo.getPassengerId());
+                       passengerOrderDTO.setImageUrl(passengerInfo.getImageUrl());
+                       passengerOrderDTO.setTicketUpStationName(start.getName());
+                       passengerOrderDTO.setTicketUpStationId(start.getId());
+                       passengerOrderDTO.setTicketDownStationId(end.getId());
+                       passengerOrderDTO.setTicketDownStationName(end.getName());
+                       passengerOrderDTO.setTicketType(orderInfo.getTicketType());
+                       passengerOrderDTO.setTicketTypeStr(passengerOrderDTO.getTicketTypeStr(passengerOrderDTO.getTicketType()));
+                       passengerOrderDTO.setGoodsTicket(orderInfo.getGoodsTicket());
+                       passengerOrderDTO.setTotalFee(orderInfo.getTotalFee());
+                       passengerOrderDTOList.add(passengerOrderDTO);
+
+                       totalAmount = totalAmount.add(orderInfo.getTotalFee());
+                   }
+               }
+            }
+
+
+
+
+            Map<String, Object> map = new HashMap<>();
+            map.put("totalAmount", totalAmount);
+            map.put("list", passengerOrderDTOList);
+            map.put("id",mergeOrderId);
+            messageResult.setData(map);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+
+
     @PostMapping("upload")
     @ApiOperation(value = "人员照片上传")
     @ApiImplicitParams({
@@ -280,6 +457,7 @@ public class PassengerApiController {
             messageResult.setCode(200);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(e.getMessage());
         }
@@ -288,8 +466,8 @@ public class PassengerApiController {
     }
 
 
-    @PostMapping("matchFaceImage")
-    @ApiOperation(value = "匹配照片")
+    @PostMapping("getMatchFaceImage")
+    @ApiOperation(value = "获取匹配度高的照片")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "faceImageUrl", value = "人脸照片", required = true, paramType = "form"),
             @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form")
@@ -301,24 +479,109 @@ public class PassengerApiController {
             //车辆
             VehicleInfo vehicleInfo = vehicleInfoService.get(id);
             //人脸库id
-            String groupId = StrUtil.sub(vehicleInfo.getLicensePlateNumber(),1,-1);
+            String groupId = CommonUtil.getProvinceNum(vehicleInfo.getLicensePlateNumber()) + StrUtil.sub(vehicleInfo.getLicensePlateNumber(), 1, 10);
+
+           Long personId =  baiduService.faceSearch(faceImageUrl,"URL",groupId);
+           if (personId == null){
+            throw new Exception("无匹配照片");
+           }
+
+            Map<String, Object> map = new HashMap<>();
+            messageResult.setData(map);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
 
-          //  baiduService.faceSearch();
+        return messageResult;
+    }
 
 
+    @PostMapping("upBusNoTicketList")
+    @ApiOperation(value = "上传未购票乘客列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form")
+    })
+    public MessageResult<Map> upBusNoTicketList(String id, @RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex, @RequestParam(value = "pageSize", defaultValue = "20") int pageSize) {
+        MessageResult<Map> messageResult = new MessageResult<>();
 
+        try {
+            //车辆
+            VehicleInfo vehicleInfo = vehicleInfoService.get(id);
 
+            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(id, "1");
 
+            if (shiftInfoList.size() == 0) {
+                throw new Exception("当前车辆没有正运行的班次");
+            }
 
+            //班次信息
+            ShiftInfo shiftInfo = shiftInfoList.get(0);
 
+            Map<String,Object> searchParams = new HashMap<>();
+            searchParams.put("vehicleShiftId",shiftInfo.getId());
+            searchParams.put("status","1");
+            searchParams.put("payStatus","0");
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("up_time","desc"));
+            Page<PassengerInfo> page = passengerInfoService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
 
 
-            Map<String, Object> map = new HashMap<>();
-            messageResult.setData(map);
+            messageResult.setData(PojoUtils.pageWrapper(page));
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+
+    @PostMapping("createPassengerOrder")
+    @ApiOperation(value = "创建乘客订单")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "openId", value = "购票人openId", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "mergeOrderId", value = "综合车票id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "passengerIds", value = "乘客ids", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "ticketUpStationId", value = "购票起站", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "ticketDownStationId", value = "购票终点站", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "ticketType", value = "购票类型(1:儿童票,2:成人票)", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "goodsTicket", value = "货票金额", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "totalFee", value = "总金额", required = true, paramType = "form")
+    })
+    public MessageResult<Map> createPassengerOrder(String id,String openId,String mergeOrderId,String passengerIds,String ticketUpStationId,String ticketDownStationId,String ticketType,String goodsTicket,String totalFee) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+            //车辆
+            VehicleInfo vehicleInfo = vehicleInfoService.get(id);
+
+            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(id, "1");
+
+            if (shiftInfoList.size() == 0) {
+                throw new Exception("当前车辆没有正运行的班次");
+            }
+
+            //班次信息
+            ShiftInfo shiftInfo = shiftInfoList.get(0);
+
+
+             passengerInfoService.createOrder(vehicleInfo,shiftInfo,openId,mergeOrderId,passengerIds,ticketUpStationId,ticketDownStationId,ticketType,goodsTicket,totalFee);
+
             messageResult.setResult(true);
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage());
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -327,4 +590,99 @@ public class PassengerApiController {
     }
 
 
+    @PostMapping("deletePassengerOrder")
+    @ApiOperation(value = "删除乘客订单")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "乘客id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "mergeOrderId", value = "综合账单id", required = true, paramType = "form")
+    })
+    public MessageResult<Map> deletePassengerOrder(String id,String mergeOrderId) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+
+            MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.get(mergeOrderId);
+            if (mergeOrderInfo == null){
+                throw new Exception("账单不存在");
+            }
+
+            if (mergeOrderInfo.getPayStatus() == 20){
+                throw new Exception("已支付账单不可删除");
+            }
+
+            OrderInfo orderInfo = orderInfoService.findByPassengerIdMergeOrderId(id,mergeOrderId);
+
+            if (orderInfo != null){
+                if (orderInfo.getPayStatus() == 20){
+                    throw new Exception("已支付账单不可删除");
+                }
+                orderInfo.setDelFlag(true);
+                orderInfoService.update(orderInfo);
+            }
+
+
+
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("updatePassengerOrder")
+    @ApiOperation(value = "修改乘客订单")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "乘客id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "mergeOrderId", value = "综合账单id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "ticketUpStationId", value = "购票起站", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "ticketDownStationId", value = "购票终点站", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "ticketType", value = "购票类型(1:儿童票,2:成人票)", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "goodsTicket", value = "货票金额", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "totalFee", value = "总金额", required = true, paramType = "form")
+    })
+    public MessageResult<Map> updatePassengerOrder(String id,String mergeOrderId,String ticketUpStationId,String ticketDownStationId,String ticketType,String goodsTicket,String totalFee) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+
+            MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.get(mergeOrderId);
+            if (mergeOrderInfo == null){
+                throw new Exception("账单不存在");
+            }
+
+            if (mergeOrderInfo.getPayStatus() == 20){
+                throw new Exception("已支付账单不可修改");
+            }
+
+            OrderInfo orderInfo = orderInfoService.findByPassengerIdMergeOrderId(id,mergeOrderId);
+
+            if (orderInfo != null){
+                if (orderInfo.getPayStatus() == 20){
+                    throw new Exception("已支付账单不可修改");
+                }
+            }
+
+            passengerInfoService.updatePassengerOrder(orderInfo,ticketUpStationId,ticketDownStationId,ticketType,goodsTicket,totalFee);
+
+
+
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setCode(400);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
 }

+ 22 - 0
web/src/main/java/com/jpsoft/bus/modules/pay/alipay/AlipayController.java

@@ -18,6 +18,7 @@ import com.ijpay.alipay.AliPayApi;
 import com.jpsoft.bus.config.AliPayConfig;
 import com.jpsoft.bus.modules.base.entity.MergeOrderInfo;
 import com.jpsoft.bus.modules.base.entity.OrderInfo;
+import com.jpsoft.bus.modules.base.entity.PaymentInfo;
 import com.jpsoft.bus.modules.base.service.MergeOrderInfoService;
 import com.jpsoft.bus.modules.base.service.OrderInfoService;
 import com.jpsoft.bus.modules.bus.entity.PassengerInfo;
@@ -112,6 +113,8 @@ public class AlipayController {
                             new Thread(() -> {
                                 PassengerInfo passengerInfo = passengerInfoService.get(orderInfo.getPassengerId());
                                 if (passengerInfo != null){
+                                    passengerInfo.setTicketUpStationId(orderInfo.getTicketUpStationId());
+                                    passengerInfo.setTicketDownStationId(orderInfo.getTicketDownStationId());
                                     passengerInfo.setPayStatus("1");
                                     passengerInfoService.update(passengerInfo);
                                 }
@@ -196,6 +199,25 @@ public class AlipayController {
         MessageResult result = new MessageResult();
 
         try {
+
+            MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.get(id);
+
+            if (mergeOrderInfo == null) {
+                throw new Exception("订单不存在");
+            }
+
+            List<OrderInfo> orderInfoList = orderInfoService.findByMergeOrderId(id);
+
+            if (orderInfoList.size() == 0){
+                throw new Exception("订单错误");
+            }
+            for (OrderInfo orderInfo : orderInfoList){
+                if (orderInfo.getPayStatus() !=10){
+                    throw new Exception("有已完成购票的乘客,请删除");
+                }
+            }
+
+
             String qrCode = alipayService.tradePrecreatePay(id);
             result.setResult(true);
 

+ 21 - 2
web/src/main/java/com/jpsoft/bus/modules/pay/wechat/WxPayController.java

@@ -89,7 +89,7 @@ public class WxPayController {
             }
             for (OrderInfo orderInfo : orderInfoList){
                 if (orderInfo.getPayStatus() !=10){
-                    throw new Exception("订单错误");
+                    throw new Exception("有已完成购票的乘客,请删除");
                 }
                 totalFee = totalFee.add(orderInfo.getTotalFee());
             }
@@ -177,7 +177,7 @@ public class WxPayController {
 
                     mergeOrderInfo.setPayStatus(20);
                     mergeOrderInfo.setPayName("wechat");
-                    mergeOrderInfo.setTransactionId(params.get("trade_no"));
+                    mergeOrderInfo.setTransactionId(params.get("transaction_id"));
                     mergeOrderInfo.setUpdateTime(new Date());
                     mergeOrderInfoService.update(mergeOrderInfo);
 
@@ -199,6 +199,8 @@ public class WxPayController {
                                 try {
                                     PassengerInfo passengerInfo = passengerInfoService.get(orderInfo.getPassengerId());
                                     if (passengerInfo != null){
+                                        passengerInfo.setTicketUpStationId(orderInfo.getTicketUpStationId());
+                                        passengerInfo.setTicketDownStationId(orderInfo.getTicketDownStationId());
                                         passengerInfo.setPayStatus("1");
                                         passengerInfoService.update(passengerInfo);
                                     }
@@ -240,6 +242,23 @@ public class WxPayController {
 
         try {
 
+            MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.get(id);
+
+            if (mergeOrderInfo == null) {
+                throw new Exception("订单不存在");
+            }
+
+            List<OrderInfo> orderInfoList = orderInfoService.findByMergeOrderId(id);
+
+            if (orderInfoList.size() == 0){
+                throw new Exception("订单错误");
+            }
+            for (OrderInfo orderInfo : orderInfoList){
+                if (orderInfo.getPayStatus() !=10){
+                    throw new Exception("有已完成购票的乘客,请删除");
+                }
+            }
+
             String qrCodeUrl = wechatService.wxNativePay(id);
             msgResult.setData(qrCodeUrl);
             msgResult.setResult(true);