UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
@@ -520,6 +520,18 @@ private Date payTime; /** * 预估金额(先付模式下单时计算并存储) */ @TableField("estimateAmount") private Double estimateAmount; /** * 下单时系统支付模式(1=先付,2=后付) */ @TableField("paymentMode") private Integer paymentMode; public Date getSuccessTime() { return successTime; } @@ -1384,6 +1396,22 @@ this.payTime = payTime; } public Double getEstimateAmount() { return estimateAmount; } public void setEstimateAmount(Double estimateAmount) { this.estimateAmount = estimateAmount; } public Integer getPaymentMode() { return paymentMode; } public void setPaymentMode(Integer paymentMode) { this.paymentMode = paymentMode; } public String getAbnormalRemark() { return abnormalRemark; } UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -167,6 +167,12 @@ private TDriverPromotionActivityService driverPromotionActivityService; private CarMapper carMapper; @Autowired private ITSysPaymentModeService tSysPaymentModeService; @Autowired private IServerCarModelService serverCarModelService; /** * 专车下单操作 * @@ -297,6 +303,65 @@ orderPrivateCar.setPassengersPhone(userInfo.getPhone()); } orderPrivateCar.setState(1); // ===== 先付/后付模式判断 ===== if (orderSource != 2) { // 扫码下单跳过先付判断(扫码下单已有固定司机) TSysPaymentMode paymentMode = tSysPaymentModeService.selectOne( new EntityWrapper<TSysPaymentMode>().last("LIMIT 1")); if (paymentMode != null && Integer.valueOf(1).equals(paymentMode.getPrivateType())) { // 先付模式:计算预估金额,订单状态改为7(待支付) Company payCompany = companyCityService.query(geocode.get("districtCode")); if (payCompany != null) { try { // 复用已获取的预估距离(米)和预估时间(分钟),还原为 getPrice 所需单位 double distanceMeters = orderPrivateCar.getEstimateMileage() != null ? orderPrivateCar.getEstimateMileage() : 0; long durationSeconds = orderPrivateCar.getEstimateTime() != null ? (long) (orderPrivateCar.getEstimateTime() * 60) : 0; List<ServerCarModelWarpper> priceList = serverCarModelService.getPrice( payCompany.getId(), distanceMeters, durationSeconds, 0L, 1, geocode); if (priceList != null && !priceList.isEmpty()) { // 按 serverCarModelId 精确匹配,找不到则取第一条 ServerCarModelWarpper matched = priceList.stream() .filter(w -> w.getId() != null && w.getId().equals(serverCarModelId)) .findFirst() .orElse(priceList.get(0)); // 根据 rideType 取对应金额 Map(key="zongfeiyong") Map<String, Object> amountMap = null; if (Integer.valueOf(2).equals(rideType)) { amountMap = matched.getBuyNowAmount(); // 一口价 } else if (Integer.valueOf(3).equals(rideType)) { amountMap = matched.getPutTogetherOneAmount(); // 拼车(1人拼成) } else { amountMap = matched.getAmount(); // 独享(默认) } if (amountMap != null && amountMap.get("zongfeiyong") != null) { Double estimateMoney = Double.valueOf(amountMap.get("zongfeiyong").toString()); orderPrivateCar.setEstimateAmount(estimateMoney); orderPrivateCar.setOrderMoney(estimateMoney); } } // 先付模式:覆盖状态为7(待支付),不进行派单 orderPrivateCar.setState(7); orderPrivateCar.setCompanyId(payCompany.getId()); orderPrivateCar.setPaymentMode(1); // 记录先付模式 } catch (Exception e) { e.printStackTrace(); // 降级:计算失败时保持后付逻辑(state=1,正常派单) orderPrivateCar.setPaymentMode(2); // 降级记录后付 } } else { orderPrivateCar.setPaymentMode(1); // 公司未找到,仍记录配置为先付 } } else { // 后付模式(无配置 或 privateType=2) orderPrivateCar.setPaymentMode( (paymentMode != null && paymentMode.getPrivateType() != null) ? paymentMode.getPrivateType() : 2 ); } } // ===== 先付/后付判断结束 ===== orderPrivateCar.setInsertTime(new Date()); orderPrivateCar.setTravelTime(travelTime); orderPrivateCar.setOrderType(reservation); UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IServerCarModelService.java
@@ -28,4 +28,18 @@ * @return */ List<Map<String, Object>> queryServerCarModels(Integer type); /** * 计算各车型预估金额 * @param companyId 企业id * @param distance 预估距离(米) * @param duration 预估时间(秒) * @param wait 等待时长(秒) * @param type 业务类型(专车=1) * @param geocode 地理编码(含 districtCode/cityCode/provinceCode) * @return 车型预估金额列表 * @throws Exception */ List<ServerCarModelWarpper> getPrice(Integer companyId, double distance, long duration, long wait, Integer type, Map<String, String> geocode) throws Exception; } UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/OrderTaxiMapper.xml
@@ -50,6 +50,8 @@ <result column="discountAmount" property="discountAmount"/> <result column="companyId" property="companyId"/> <result column="payMoney" property="payMoney"/> <result column="estimateAmount" property="estimateAmount"/> <result column="paymentMode" property="paymentMode"/> <result column="thankYouFee" property="thankYouFee"/> <result column="substitute" property="substitute"/> <result column="passengers" property="passengers"/> @@ -117,6 +119,8 @@ activityId as activityId, companyId as companyId, payMoney as payMoney, estimateAmount as estimateAmount, paymentMode as paymentMode, substitute as substitute, passengers as passengers, passengersPhone as passengersPhone, @@ -461,4 +465,4 @@ boardingLat from t_order_taxi where userId = #{uid} and state in (8, 9) order by insertTime desc </select> </mapper> </mapper> UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/model/OrderTaxi.java
@@ -242,6 +242,16 @@ */ @TableField("payMoney") private Double payMoney; /** * 预估金额(先付模式下单时计算并存储) */ @TableField("estimateAmount") private Double estimateAmount; /** * 下单时系统支付模式(1=先付,2=后付) */ @TableField("paymentMode") private Integer paymentMode; //感谢费 @TableField("thankYouFee") private Double thankYouFee; @@ -955,6 +965,22 @@ this.orderSource = orderSource; } public Double getEstimateAmount() { return estimateAmount; } public void setEstimateAmount(Double estimateAmount) { this.estimateAmount = estimateAmount; } public Integer getPaymentMode() { return paymentMode; } public void setPaymentMode(Integer paymentMode) { this.paymentMode = paymentMode; } public Integer getInvoiceId() { return invoiceId; @@ -1233,6 +1259,8 @@ ", activityId=" + activityId + ", companyId=" + companyId + ", payMoney=" + payMoney + ", estimateAmount=" + estimateAmount + ", paymentMode=" + paymentMode + ", substitute=" + substitute + ", passengers='" + passengers + '\'' + ", passengersPhone='" + passengersPhone + '\'' + UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -21,6 +21,7 @@ import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.*; import com.stylefeng.guns.modular.system.warpper.*; import com.stylefeng.guns.modular.system.service.impl.ServerCarModelServiceImpl; import com.stylefeng.guns.modular.taxi.dao.OrderTaxiMapper; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.model.PaymentRecord; @@ -182,6 +183,12 @@ @Autowired private ITSysPushTypeService tSysPushTypeService; @Autowired private ITSysPaymentModeService tSysPaymentModeService; @Autowired private ServerCarModelServiceImpl serverCarModelService; public static List<Integer> orderIds = new ArrayList<>(); @@ -305,6 +312,45 @@ orderTaxi.setPassengersPhone(userInfo.getPhone()); } orderTaxi.setState(1);//待接单 if (orderTaxi.getOrderSource() != 2) { TSysPaymentMode paymentMode = tSysPaymentModeService.selectOne(new EntityWrapper<TSysPaymentMode>().last("LIMIT 1")); if (paymentMode != null && Integer.valueOf(1).equals(paymentMode.getTaxiType())) { try { Map<String, String> startGeocode = gdMapGeocodingUtil.geocode(String.valueOf(orderTaxi.getStartLon()), String.valueOf(orderTaxi.getStartLat())); if (orderTaxi.getEndLon() != null && orderTaxi.getEndLat() != null && startGeocode != null) { Map<String, String> distance = gdMapElectricFenceUtil.getDistance( orderTaxi.getStartLon() + "," + orderTaxi.getStartLat(), orderTaxi.getEndLon() + "," + orderTaxi.getEndLat(), 1 ); if (distance != null) { double distanceMeters = Double.parseDouble(distance.get("distance")); long durationSeconds = Long.parseLong(distance.get("duration")); ServerCarModelWarpper textPrice = serverCarModelService.getTextPrice(query.getId(), distanceMeters, durationSeconds, 0, 2, startGeocode); if (textPrice != null && textPrice.getAmount() != null && textPrice.getAmount().get("zongfeiyong") != null) { Double estimateAmount = Double.valueOf(textPrice.getAmount().get("zongfeiyong").toString()); orderTaxi.setEstimateAmount(estimateAmount); orderTaxi.setOrderMoney(estimateAmount); orderTaxi.setPaymentMode(1); orderTaxi.setState(7); } else { orderTaxi.setPaymentMode(2); } } else { orderTaxi.setPaymentMode(2); } } else { orderTaxi.setPaymentMode(2); } } catch (Exception e) { e.printStackTrace(); orderTaxi.setPaymentMode(2); orderTaxi.setState(1); } } else { orderTaxi.setPaymentMode(paymentMode != null && paymentMode.getTaxiType() != null ? paymentMode.getTaxiType() : 2); } } if (orderTaxi.getOrderSource() == 2 && null != orderTaxi.getDriverId()) {//扫码下单, Driver driver = driverService.selectById(orderTaxi.getDriverId()); if (null == driver) { @@ -372,7 +418,11 @@ } //添加消息 systemNoticeService.addSystemNotice(1, "您的出租车订单已下单成功,我们正在为您指派司机,请稍后!", orderTaxi.getUserId(), 1); if (orderTaxi.getState() == 7) { systemNoticeService.addSystemNotice(1, "您的出租车订单已生成,请先完成支付。", orderTaxi.getUserId(), 1); } else { systemNoticeService.addSystemNotice(1, "您的出租车订单已下单成功,我们正在为您指派司机,请稍后!", orderTaxi.getUserId(), 1); } BaseWarpper baseWarpper = new BaseWarpper(); baseWarpper.setId(orderTaxi.getId());