浏览代码

乘客微信端创建订单

fllmoyu 4 年之前
父节点
当前提交
acd48c610a

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

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

@@ -26,4 +26,6 @@ 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;
 }

+ 205 - 93
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,107 +162,211 @@ 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.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));
-			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.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());
-			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.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;
+    }
 
-		return driverBuyTicketDTO;
-	}
+    @Override
+    public List<PassengerInfo> findByShiftStatusPayStatusNotTicketDown(String shiftId, String status, String payStatus, String ticketDownStationId) {
+        return passengerInfoDAO.findByShiftStatusPayStatusNotTicketDown(shiftId, status, payStatus, ticketDownStationId);
+    }
 
     @Override
-    public List<PassengerInfo> findByShiftStatusPayStatusNotTicketDown(String shiftId, String status, String payStatus,String ticketDownStationId) {
-        return passengerInfoDAO.findByShiftStatusPayStatusNotTicketDown(shiftId,status,payStatus,ticketDownStationId);
+    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 {
+
+
+        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 goodTicketPrice = new BigDecimal(goodsTicket);
+
+        BigDecimal total = price.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("对应公司收款账户异常,请核验");
+        }
+
+        //乘客id集合
+        List<String> passengerList = Arrays.asList(passengerIds.split(","));
+        if (passengerList.size() == 0) {
+            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();
+        }
+
+
+        for (String passengerId : passengerList) {
+            PassengerInfo passengerInfo = get(passengerId);
+            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);
+                orderInfo.setGoodsTicket(new BigDecimal(goodsTicket));
+                orderInfo.setMergeOrderId(mergeId);
+                orderInfo.setTicketUpStationId(ticketUpStationId);
+                orderInfo.setTicketDownStationId(ticketDownStationId);
+                orderInfoService.insert(orderInfo);
+
+            }
+        }
+
+
     }
 }

+ 11 - 1
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>
@@ -127,6 +131,12 @@
 			<if test="mergeOrderId != null">
 				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}
 	</update>

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

@@ -57,6 +57,7 @@ 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")
@@ -65,6 +66,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
 				.excludePathPatterns("/wechat/findUserInfo/**")
 				.excludePathPatterns("/wechat/getConfig")
 				.excludePathPatterns("/mobile/passengerApi/upload")
+				.excludePathPatterns("/mobile/passengerApi/upBusNoTicketList")
 				.excludePathPatterns("/aliPay/**")
 				.excludePathPatterns("/wxPay/**")
 				;

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

@@ -126,6 +126,7 @@ public class DriverApiController {
 
         }catch (Exception ex){
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -161,6 +162,7 @@ public class DriverApiController {
 
         }catch (Exception ex){
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -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());
         }
@@ -289,6 +291,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 +346,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 +410,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 +450,7 @@ public class DriverApiController {
         }
         catch (Exception ex){
             log.error(ex.getMessage(),ex);
-
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -496,7 +501,7 @@ public class DriverApiController {
             }
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
-
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -553,6 +558,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());
         }
@@ -658,6 +664,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 +694,7 @@ public class DriverApiController {
         }
         catch (Exception ex){
             log.error(ex.getMessage(),ex);
-
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -758,6 +765,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());
         }
@@ -804,6 +812,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 +858,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());
         }
@@ -891,6 +901,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());
         }
@@ -920,6 +931,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());
         }

+ 101 - 9
web/src/main/java/com/jpsoft/bus/modules/mobile/controller/PassengerApiController.java

@@ -4,6 +4,7 @@ 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;
@@ -15,6 +16,7 @@ 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.dto.Sort;
 import com.jpsoft.bus.modules.common.utils.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -26,10 +28,7 @@ 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;
 
@@ -98,6 +97,7 @@ public class PassengerApiController {
 
         }catch (Exception ex){
             log.error(ex.getMessage(),ex);
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -135,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());
         }
 
@@ -204,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());
         }
@@ -266,6 +269,7 @@ public class PassengerApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage());
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -304,6 +308,7 @@ public class PassengerApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage());
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -342,6 +347,7 @@ public class PassengerApiController {
             messageResult.setCode(200);
         } catch (Exception ex) {
             log.error(ex.getMessage());
+            messageResult.setCode(400);
             messageResult.setResult(false);
             messageResult.setMessage(ex.getMessage());
         }
@@ -355,7 +361,7 @@ public class PassengerApiController {
             @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form"),
             @ApiImplicitParam(name = "openId", value = "openId", required = true, paramType = "form")
     })
-    public MessageResult<Map> getVehicleInfo(String id,String openId) {
+    public MessageResult<Map> getPassengerInfo(String id,String openId) {
         MessageResult<Map> messageResult = new MessageResult<>();
 
         try {
@@ -372,6 +378,7 @@ public class PassengerApiController {
             //车辆信息
             VehicleInfo vehicleInfo = vehicleInfoService.get(id);
 
+            String mergeOrderId = null;
             List<MergeOrderInfo> mergeOrderInfoList = mergeOrderInfoService.findByOpenIdShiftIdPayStatus(openId,shiftInfo.getId(),10);
 
             BigDecimal totalAmount = BigDecimal.ZERO;
@@ -379,6 +386,7 @@ public class PassengerApiController {
             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){
@@ -386,9 +394,9 @@ public class PassengerApiController {
 
                        PassengerInfo passengerInfo = passengerInfoService.get(orderInfo.getPassengerId());
                        //购票始发站
-                       StationInfo start = stationInfoService.get(passengerInfo.getTicketUpStationId());
+                       StationInfo start = stationInfoService.get(orderInfo.getTicketUpStationId());
                        //购票终点站
-                       StationInfo end = stationInfoService.get(passengerInfo.getTicketDownStationId());
+                       StationInfo end = stationInfoService.get(orderInfo.getTicketDownStationId());
                        PassengerOrderDTO passengerOrderDTO = new PassengerOrderDTO();
                        passengerOrderDTO.setId(orderInfo.getPassengerId());
                        passengerOrderDTO.setImageUrl(passengerInfo.getImageUrl());
@@ -413,11 +421,13 @@ public class PassengerApiController {
             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());
         }
@@ -447,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());
         }
@@ -475,20 +486,57 @@ public class PassengerApiController {
             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());
+        }
 
+        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());
         }
@@ -497,4 +545,48 @@ public class PassengerApiController {
     }
 
 
+    @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());
+        }
+
+        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);
 

+ 20 - 1
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());
             }
@@ -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);