Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/YueKeDuo
# Conflicts:
# DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
| | |
| | | import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; |
| | | import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; |
| | | import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; |
| | | import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; |
| | | import com.stylefeng.guns.modular.system.dao.DriverWorkMapper; |
| | | import com.stylefeng.guns.modular.system.model.*; |
| | | import com.stylefeng.guns.modular.system.service.*; |
| | | import com.stylefeng.guns.modular.system.util.ChinaMobileUtil; |
| | | import com.stylefeng.guns.modular.system.util.PayMoneyUtil; |
| | | import com.stylefeng.guns.modular.system.util.PushUtil; |
| | | import com.stylefeng.guns.modular.system.util.ResultUtil; |
| | | import com.stylefeng.guns.modular.system.util.SystemException; |
| | | import com.stylefeng.guns.modular.system.warpper.*; |
| | | import com.stylefeng.guns.modular.taxi.model.OrderTaxi; |
| | | import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; |
| | | import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.PrintWriter; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | |
| | | |
| | | @Autowired |
| | | private ICarService carService; |
| | | |
| | | @Autowired |
| | | private IOrderTaxiService orderTaxiService; |
| | | |
| | | @Autowired |
| | | private IOrderPrivateCarService orderPrivateCarService; |
| | | |
| | | @Autowired |
| | | private PayMoneyUtil payMoneyUtil; |
| | | |
| | | @Autowired |
| | | private IOrderPrivateCarService orderPrivateCarService; |
| | |
| | | return ResultUtil.success(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 预支付微信退款成功回调 |
| | | * @param request |
| | | * @param response |
| | | */ |
| | | @ResponseBody |
| | | @PostMapping("/base/prepayRefundWXPay") |
| | | public void prepayRefundWXPay(HttpServletRequest request, HttpServletResponse response) { |
| | | try { |
| | | Map<String, String> map = payMoneyUtil.wxRefundCallback(request); |
| | | if (map == null) { |
| | | return; |
| | | } |
| | | String refundId = map.get("refund_id"); |
| | | String outRefundNo = map.get("out_refund_no"); |
| | | String result = map.get("result"); |
| | | if (ToolUtil.isEmpty(outRefundNo)) { |
| | | return; |
| | | } |
| | | PrintWriter out = response.getWriter(); |
| | | out.write(result); |
| | | out.flush(); |
| | | out.close(); |
| | | |
| | | String[] split = outRefundNo.split("_"); |
| | | if (split.length < 4) { |
| | | return; |
| | | } |
| | | Integer orderType = Integer.valueOf(split[1]); |
| | | Integer orderId = Integer.valueOf(split[2]); |
| | | if (orderType == 1) { |
| | | orderPrivateCarService.payPrepaidRefundCallback(orderId, outRefundNo, refundId); |
| | | } else if (orderType == 2) { |
| | | orderTaxiService.payPrepaidRefundCallback(orderId, outRefundNo, refundId); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | |
| | | */ |
| | | @TableField("paymentMode") |
| | | private Integer paymentMode; |
| | | @TableField("prepayStage") |
| | | private Integer prepayStage; |
| | | @TableField("prepaySecondPayNo") |
| | | private String prepaySecondPayNo; |
| | | @TableField("prepayRefundNo") |
| | | private String prepayRefundNo; |
| | | @TableField("prepayRefundAmount") |
| | | private Double prepayRefundAmount; |
| | | @TableField("prepayRefundTime") |
| | | private Date prepayRefundTime; |
| | | |
| | | private String waitRule; |
| | | private String chargeRule; |
| | |
| | | this.paymentMode = paymentMode; |
| | | } |
| | | |
| | | public Integer getPrepayStage() { |
| | | return prepayStage; |
| | | } |
| | | |
| | | public void setPrepayStage(Integer prepayStage) { |
| | | this.prepayStage = prepayStage; |
| | | } |
| | | |
| | | public String getPrepaySecondPayNo() { |
| | | return prepaySecondPayNo; |
| | | } |
| | | |
| | | public void setPrepaySecondPayNo(String prepaySecondPayNo) { |
| | | this.prepaySecondPayNo = prepaySecondPayNo; |
| | | } |
| | | |
| | | public String getPrepayRefundNo() { |
| | | return prepayRefundNo; |
| | | } |
| | | |
| | | public void setPrepayRefundNo(String prepayRefundNo) { |
| | | this.prepayRefundNo = prepayRefundNo; |
| | | } |
| | | |
| | | public Double getPrepayRefundAmount() { |
| | | return prepayRefundAmount; |
| | | } |
| | | |
| | | public void setPrepayRefundAmount(Double prepayRefundAmount) { |
| | | this.prepayRefundAmount = prepayRefundAmount; |
| | | } |
| | | |
| | | public Date getPrepayRefundTime() { |
| | | return prepayRefundTime; |
| | | } |
| | | |
| | | public void setPrepayRefundTime(Date prepayRefundTime) { |
| | | this.prepayRefundTime = prepayRefundTime; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "OrderPrivateCar{" + |
| | |
| | | |
| | | |
| | | /** |
| | | * 预支付微信退款回调 |
| | | * @param orderId |
| | | * @param refundNo |
| | | * @param refundId |
| | | * @throws Exception |
| | | */ |
| | | void payPrepaidRefundCallback(Integer orderId, String refundNo, String refundId) throws Exception; |
| | | |
| | | |
| | | /** |
| | | * 获取费用明细 |
| | | * @param orderId |
| | | * @return |
| | |
| | | @Resource |
| | | private IOpenCityService openCityService; |
| | | |
| | | @Autowired |
| | | private IPaymentRecordService paymentRecordService; |
| | | |
| | | @Autowired |
| | | private ITransactionDetailsService transactionDetailsService; |
| | | |
| | | @Autowired |
| | | private IIncomeService incomeService; |
| | | |
| | | @Autowired |
| | | private PayMoneyUtil payMoneyUtil; |
| | | |
| | | |
| | | /** |
| | | * 获取司机端首页订单列表 |
| | |
| | | double estimateAmount = orderPrivateCar.getEstimateAmount() == null ? 0D : orderPrivateCar.getEstimateAmount(); |
| | | int compareResult = BigDecimal.valueOf(estimateAmount).compareTo(BigDecimal.valueOf(orderPrivateCar.getOrderMoney())); |
| | | if (compareResult > 0) { |
| | | orderPrivateCar.setState(7); |
| | | orderPrivateCar.setPrepayStage(4); |
| | | handlePrepaidRefund(orderPrivateCar, estimateAmount - orderPrivateCar.getOrderMoney()); |
| | | orderPrivateCar.setState(9); |
| | | } else if (compareResult < 0) { |
| | | orderPrivateCar.setState(7); |
| | | orderPrivateCar.setPrepayStage(3); |
| | | } else { |
| | | orderPrivateCar.setState(9); |
| | | finishPrepaidOrder(orderPrivateCar); |
| | | } |
| | | } else { |
| | | orderPrivateCar.setState(7); |
| | |
| | | } |
| | | }).start(); |
| | | |
| | | if (Integer.valueOf(8).equals(orderPrivateCar.getState()) && Integer.valueOf(5).equals(orderPrivateCar.getPrepayStage())) { |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | if (pushMinistryOfTransport) { |
| | | pushMinistryOfTransportUtil.operatePay(orderId); |
| | | } |
| | | } |
| | | }).start(); |
| | | } |
| | | |
| | | OrderPrivateCar finalOrderPrivateCar = orderPrivateCar; |
| | | new Thread(new Runnable() { |
| | | @Override |
| | |
| | | } |
| | | |
| | | /** |
| | | * 先付订单退款预留逻辑,后续接入真实退款接口 |
| | | * 处理预支付多退退款 |
| | | */ |
| | | private void handlePrepaidRefund(OrderPrivateCar orderPrivateCar, Double refundAmount) { |
| | | private void handlePrepaidRefund(OrderPrivateCar orderPrivateCar, Double refundAmount) throws Exception { |
| | | if (refundAmount == null || refundAmount <= 0) { |
| | | return; |
| | | } |
| | | // TODO 对接真实退款接口,当前先保留调用入口,避免阻塞订单完成流程 |
| | | Double refundMoney = formatMoney(refundAmount); |
| | | String refundNo = buildPrepayRefundNo(1, orderPrivateCar.getId()); |
| | | orderPrivateCar.setPrepayRefundNo(refundNo); |
| | | orderPrivateCar.setPrepayRefundAmount(refundMoney); |
| | | |
| | | if (Integer.valueOf(3).equals(orderPrivateCar.getPayType())) { |
| | | UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId()); |
| | | if (userInfo != null) { |
| | | userInfo.setBalance(formatMoney((userInfo.getBalance() == null ? 0D : userInfo.getBalance()) + refundMoney)); |
| | | userInfoMapper.updateById(userInfo); |
| | | finishPrepaidOrder(orderPrivateCar); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | PaymentRecord paymentRecord = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, orderPrivateCar.getId(), 1, orderPrivateCar.getPayType(), 2); |
| | | if (paymentRecord == null || ToolUtil.isEmpty(paymentRecord.getCode())) { |
| | | System.err.println("预支付退款数据异常(privateCarOrderId = " + orderPrivateCar.getId() + ")"); |
| | | return; |
| | | } |
| | | |
| | | if (Integer.valueOf(1).equals(orderPrivateCar.getPayType())) { |
| | | Map<String, String> map = payMoneyUtil.wxRefund(paymentRecord.getCode(), refundNo, paymentRecord.getAmount().toString(), refundMoney.toString(), "/base/prepayRefundWXPay"); |
| | | if (!"SUCCESS".equals(map.get("return_code"))) { |
| | | System.err.println("专车预支付退款申请失败:" + map.get("return_msg")); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | if (Integer.valueOf(2).equals(orderPrivateCar.getPayType())) { |
| | | try { |
| | | Map<String, String> map = payMoneyUtil.aliRefund(paymentRecord.getCode(), refundMoney.toString()); |
| | | if ("10000".equals(map.get("code"))) { |
| | | finishPrepaidOrder(orderPrivateCar); |
| | | } else { |
| | | System.err.println("专车预支付退款申请失败:" + map.get("msg")); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void finishPrepaidOrder(OrderPrivateCar orderPrivateCar) throws Exception { |
| | | boolean refunded = Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage()) |
| | | && orderPrivateCar.getPrepayRefundAmount() != null |
| | | && orderPrivateCar.getPrepayRefundAmount() > 0; |
| | | if (refunded && orderPrivateCar.getPrepayRefundTime() == null) { |
| | | transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车预支付退款", orderPrivateCar.getPrepayRefundAmount(), 1, 1, 1, 1, orderPrivateCar.getId()); |
| | | orderPrivateCar.setPrepayRefundTime(new Date()); |
| | | } |
| | | orderPrivateCar.setState(8); |
| | | orderPrivateCar.setPrepayStage(5); |
| | | orderPrivateCar.setPayMoney(formatMoney(orderPrivateCar.getOrderMoney())); |
| | | |
| | | if (orderPrivateCar.getRecoveryOrder() == null || orderPrivateCar.getRecoveryOrder() == 0) { |
| | | Double orderMoney = (2 == orderPrivateCar.getAbnormal() && 2 == orderPrivateCar.getAbnormalStatus() |
| | | ? orderPrivateCar.getResponsibilityMoney().doubleValue() : orderPrivateCar.getOrderMoney()); |
| | | Map<String, Object> map = incomeService.saveIncome(orderPrivateCar.getId(), 1, orderMoney); |
| | | orderPrivateCar.setSplitAllocation(JSON.toJSONString(map)); |
| | | } |
| | | |
| | | if (orderPrivateCar.getAbnormal() != null && orderPrivateCar.getAbnormal() == 2 |
| | | && orderPrivateCar.getAbnormalStatus() != null && orderPrivateCar.getAbnormalStatus() == 1) { |
| | | orderPrivateCar.setAbnormalStatus(3); |
| | | orderPrivateCar.setResponsibilityMoney(new BigDecimal(orderPrivateCar.getOrderMoney())); |
| | | orderPrivateCar.setResponsibilityType(3); |
| | | orderPrivateCar.setAbnormalRemark("乘客已完成预支付订单结算,申诉已自动关闭"); |
| | | } |
| | | } |
| | | |
| | | private String buildPrepayRefundNo(Integer orderType, Integer orderId) { |
| | | return "PRF_" + orderType + "_" + orderId + "_" + System.currentTimeMillis(); |
| | | } |
| | | |
| | | private Double formatMoney(Double money) { |
| | | return new BigDecimal(money == null ? 0D : money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); |
| | | } |
| | | |
| | | @Override |
| | | public void payPrepaidRefundCallback(Integer orderId, String refundNo, String refundId) throws Exception { |
| | | OrderPrivateCar orderPrivateCar = this.selectById(orderId); |
| | | if (orderPrivateCar == null || !Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) { |
| | | return; |
| | | } |
| | | if (ToolUtil.isNotEmpty(orderPrivateCar.getPrepayRefundTime())) { |
| | | return; |
| | | } |
| | | if (ToolUtil.isNotEmpty(orderPrivateCar.getPrepayRefundNo()) && !orderPrivateCar.getPrepayRefundNo().equals(refundNo)) { |
| | | return; |
| | | } |
| | | finishPrepaidOrder(orderPrivateCar); |
| | | this.updateById(orderPrivateCar); |
| | | pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState()); |
| | | pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState()); |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | if (pushMinistryOfTransport) { |
| | | pushMinistryOfTransportUtil.operatePay(orderId); |
| | | } |
| | | } |
| | | }).start(); |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | @TableField("paymentMode") |
| | | private Integer paymentMode; |
| | | @TableField("prepayStage") |
| | | private Integer prepayStage; |
| | | @TableField("prepaySecondPayNo") |
| | | private String prepaySecondPayNo; |
| | | @TableField("prepayRefundNo") |
| | | private String prepayRefundNo; |
| | | @TableField("prepayRefundAmount") |
| | | private Double prepayRefundAmount; |
| | | @TableField("prepayRefundTime") |
| | | private Date prepayRefundTime; |
| | | //感谢费 |
| | | @TableField("thankYouFee") |
| | | private Double thankYouFee; |
| | |
| | | this.paymentMode = paymentMode; |
| | | } |
| | | |
| | | public Integer getPrepayStage() { |
| | | return prepayStage; |
| | | } |
| | | |
| | | public void setPrepayStage(Integer prepayStage) { |
| | | this.prepayStage = prepayStage; |
| | | } |
| | | |
| | | public String getPrepaySecondPayNo() { |
| | | return prepaySecondPayNo; |
| | | } |
| | | |
| | | public void setPrepaySecondPayNo(String prepaySecondPayNo) { |
| | | this.prepaySecondPayNo = prepaySecondPayNo; |
| | | } |
| | | |
| | | public String getPrepayRefundNo() { |
| | | return prepayRefundNo; |
| | | } |
| | | |
| | | public void setPrepayRefundNo(String prepayRefundNo) { |
| | | this.prepayRefundNo = prepayRefundNo; |
| | | } |
| | | |
| | | public Double getPrepayRefundAmount() { |
| | | return prepayRefundAmount; |
| | | } |
| | | |
| | | public void setPrepayRefundAmount(Double prepayRefundAmount) { |
| | | this.prepayRefundAmount = prepayRefundAmount; |
| | | } |
| | | |
| | | public Date getPrepayRefundTime() { |
| | | return prepayRefundTime; |
| | | } |
| | | |
| | | public void setPrepayRefundTime(Date prepayRefundTime) { |
| | | this.prepayRefundTime = prepayRefundTime; |
| | | } |
| | | |
| | | |
| | | public Integer getInvoiceId() { |
| | | return invoiceId; |
| | |
| | | |
| | | |
| | | /** |
| | | * 预支付微信退款回调 |
| | | * @param orderId |
| | | * @param refundNo |
| | | * @param refundId |
| | | * @throws Exception |
| | | */ |
| | | void payPrepaidRefundCallback(Integer orderId, String refundNo, String refundId) throws Exception; |
| | | |
| | | |
| | | /** |
| | | * 确认费用(车载端) |
| | | * @param orderId |
| | | * @param type |
| | |
| | | @Resource |
| | | private IOpenCityService openCityService; |
| | | |
| | | @Autowired |
| | | private IPaymentRecordService paymentRecordService; |
| | | |
| | | @Autowired |
| | | private ITransactionDetailsService transactionDetailsService; |
| | | |
| | | @Autowired |
| | | private IIncomeService incomeService; |
| | | |
| | | @Autowired |
| | | private PayMoneyUtil payMoneyUtil; |
| | | |
| | | |
| | | |
| | | |
| | |
| | | double estimateAmount = orderTaxi.getEstimateAmount() == null ? 0D : orderTaxi.getEstimateAmount(); |
| | | int compareResult = BigDecimal.valueOf(estimateAmount).compareTo(BigDecimal.valueOf(orderTaxi.getOrderMoney())); |
| | | if (compareResult > 0) { |
| | | orderTaxi.setState(7); |
| | | orderTaxi.setPrepayStage(4); |
| | | handlePrepaidRefund(orderTaxi, estimateAmount - orderTaxi.getOrderMoney()); |
| | | orderTaxi.setState(9); |
| | | } else if (compareResult < 0) { |
| | | orderTaxi.setState(7); |
| | | orderTaxi.setPrepayStage(3); |
| | | } else { |
| | | orderTaxi.setState(9); |
| | | finishPrepaidOrder(orderTaxi); |
| | | } |
| | | } else { |
| | | orderTaxi.setState(7); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 先付订单退款预留逻辑,后续接入真实退款接口 |
| | | * 处理预支付多退退款 |
| | | */ |
| | | private void handlePrepaidRefund(OrderTaxi orderTaxi, Double refundAmount) { |
| | | private void handlePrepaidRefund(OrderTaxi orderTaxi, Double refundAmount) throws Exception { |
| | | if (refundAmount == null || refundAmount <= 0) { |
| | | return; |
| | | } |
| | | // TODO 对接真实退款接口,当前先保留调用入口,避免阻塞订单完成流程 |
| | | Double refundMoney = formatMoney(refundAmount); |
| | | String refundNo = buildPrepayRefundNo(2, orderTaxi.getId()); |
| | | orderTaxi.setPrepayRefundNo(refundNo); |
| | | orderTaxi.setPrepayRefundAmount(refundMoney); |
| | | |
| | | if (Integer.valueOf(3).equals(orderTaxi.getPayType())) { |
| | | UserInfo userInfo = userInfoMapper.selectById(orderTaxi.getUserId()); |
| | | if (userInfo != null) { |
| | | userInfo.setBalance(formatMoney((userInfo.getBalance() == null ? 0D : userInfo.getBalance()) + refundMoney)); |
| | | userInfoMapper.updateById(userInfo); |
| | | finishPrepaidOrder(orderTaxi); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | PaymentRecord paymentRecord = paymentRecordService.query(1, orderTaxi.getUserId(), 1, orderTaxi.getId(), 2, orderTaxi.getPayType(), 2); |
| | | if (paymentRecord == null || ToolUtil.isEmpty(paymentRecord.getCode())) { |
| | | System.err.println("预支付退款数据异常(taxiOrderId = " + orderTaxi.getId() + ")"); |
| | | return; |
| | | } |
| | | |
| | | if (Integer.valueOf(1).equals(orderTaxi.getPayType())) { |
| | | Map<String, String> map = payMoneyUtil.wxRefund(paymentRecord.getCode(), refundNo, paymentRecord.getAmount().toString(), refundMoney.toString(), "/base/prepayRefundWXPay"); |
| | | if (!"SUCCESS".equals(map.get("return_code"))) { |
| | | System.err.println("出租车预支付退款申请失败:" + map.get("return_msg")); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | if (Integer.valueOf(2).equals(orderTaxi.getPayType())) { |
| | | try { |
| | | Map<String, String> map = payMoneyUtil.aliRefund(paymentRecord.getCode(), refundMoney.toString()); |
| | | if ("10000".equals(map.get("code"))) { |
| | | finishPrepaidOrder(orderTaxi); |
| | | } else { |
| | | System.err.println("出租车预支付退款申请失败:" + map.get("msg")); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void finishPrepaidOrder(OrderTaxi orderTaxi) throws Exception { |
| | | boolean refunded = Integer.valueOf(4).equals(orderTaxi.getPrepayStage()) |
| | | && orderTaxi.getPrepayRefundAmount() != null |
| | | && orderTaxi.getPrepayRefundAmount() > 0; |
| | | if (refunded && orderTaxi.getPrepayRefundTime() == null) { |
| | | transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车预支付退款", orderTaxi.getPrepayRefundAmount(), 1, 1, 1, 2, orderTaxi.getId()); |
| | | orderTaxi.setPrepayRefundTime(new Date()); |
| | | } |
| | | orderTaxi.setState(8); |
| | | orderTaxi.setPrepayStage(5); |
| | | orderTaxi.setPayMoney(formatMoney(orderTaxi.getOrderMoney())); |
| | | |
| | | if (orderTaxi.getRecoveryOrder() == null || orderTaxi.getRecoveryOrder() == 0) { |
| | | Double orderMoney = (2 == orderTaxi.getAbnormal() && 2 == orderTaxi.getAbnormalStatus() |
| | | ? orderTaxi.getResponsibilityMoney().doubleValue() : orderTaxi.getOrderMoney()); |
| | | Map<String, Object> map = incomeService.saveIncome(orderTaxi.getId(), 2, orderMoney); |
| | | orderTaxi.setSplitAllocation(JSON.toJSONString(map)); |
| | | } |
| | | |
| | | if (2 == orderTaxi.getAbnormal() && 1 == orderTaxi.getAbnormalStatus()) { |
| | | orderTaxi.setAbnormalStatus(3); |
| | | orderTaxi.setResponsibilityMoney(new BigDecimal(orderTaxi.getOrderMoney())); |
| | | orderTaxi.setResponsibilityType(3); |
| | | orderTaxi.setAbnormalRemark("乘客已完成预支付订单结算,申诉已自动关闭"); |
| | | } |
| | | } |
| | | |
| | | private String buildPrepayRefundNo(Integer orderType, Integer orderId) { |
| | | return "PRF_" + orderType + "_" + orderId + "_" + System.currentTimeMillis(); |
| | | } |
| | | |
| | | private Double formatMoney(Double money) { |
| | | return new BigDecimal(money == null ? 0D : money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); |
| | | } |
| | | |
| | | @Override |
| | | public void payPrepaidRefundCallback(Integer orderId, String refundNo, String refundId) throws Exception { |
| | | OrderTaxi orderTaxi = this.selectById(orderId); |
| | | if (orderTaxi == null || !Integer.valueOf(4).equals(orderTaxi.getPrepayStage())) { |
| | | return; |
| | | } |
| | | if (ToolUtil.isNotEmpty(orderTaxi.getPrepayRefundTime())) { |
| | | return; |
| | | } |
| | | if (ToolUtil.isNotEmpty(orderTaxi.getPrepayRefundNo()) && !orderTaxi.getPrepayRefundNo().equals(refundNo)) { |
| | | return; |
| | | } |
| | | finishPrepaidOrder(orderTaxi); |
| | | this.updateById(orderTaxi); |
| | | pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState()); |
| | | pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState()); |
| | | } |
| | | |
| | | |
| | |
| | | orderLogisticsService.payOrderLogisticsCallback(orderId,",",4); |
| | | } |
| | | if(integer==6){ |
| | | orderPrivateCarService.payOrderPrivateCarCallback(orderId,",",4); |
| | | orderPrivateCarService.payOrderPrivateCarCallback(orderId,",",4, null); |
| | | } |
| | | if(integer==9){ |
| | | orderTaxiService.payOrderTaxiCallback(orderId,"",4,paymentId); |
| | | orderTaxiService.payOrderTaxiCallback(orderId,"",4,paymentId, null); |
| | | } |
| | | if(integer==1){ |
| | | orderPrivateCarService.payCancelOrderPrivateCar(orderId,",",4); |
| | |
| | | Integer type = Integer.valueOf(split[1]); |
| | | switch (type) { |
| | | case 1: |
| | | orderPrivateCarService.payOrderPrivateCarCallback(id, order_id, 1); |
| | | orderPrivateCarService.payOrderPrivateCarCallback(id, order_id, 1, out_trade_no); |
| | | break; |
| | | case 2: |
| | | orderTaxiService.payOrderTaxiCallback(id, order_id, 1, 0); |
| | | orderTaxiService.payOrderTaxiCallback(id, order_id, 1, 0, out_trade_no); |
| | | break; |
| | | case 3: |
| | | orderCrossCityService.payOrderCrossCityCallback(id, order_id, 1, null); |
| | |
| | | Integer type = Integer.valueOf(split[1]); |
| | | switch (type) { |
| | | case 1: |
| | | orderPrivateCarService.payOrderPrivateCarCallback(id, order_id, 2); |
| | | orderPrivateCarService.payOrderPrivateCarCallback(id, order_id, 2, out_trade_no); |
| | | break; |
| | | case 2: |
| | | orderTaxiService.payOrderTaxiCallback(id, order_id, 2, 0); |
| | | orderTaxiService.payOrderTaxiCallback(id, order_id, 2, 0, out_trade_no); |
| | | break; |
| | | case 3: |
| | | orderCrossCityService.payOrderCrossCityCallback(id, order_id, 2, null); |
| | |
| | | */ |
| | | @TableField("paymentMode") |
| | | private Integer paymentMode; |
| | | /** |
| | | * 预支付阶段(0=非预支付,1=待首付,2=已首付待结算,3=待补差,4=待退款,5=结算完成) |
| | | */ |
| | | @TableField("prepayStage") |
| | | private Integer prepayStage; |
| | | /** |
| | | * 预支付补差支付流水号 |
| | | */ |
| | | @TableField("prepaySecondPayNo") |
| | | private String prepaySecondPayNo; |
| | | /** |
| | | * 预支付退款单号 |
| | | */ |
| | | @TableField("prepayRefundNo") |
| | | private String prepayRefundNo; |
| | | /** |
| | | * 预支付退款金额 |
| | | */ |
| | | @TableField("prepayRefundAmount") |
| | | private Double prepayRefundAmount; |
| | | /** |
| | | * 预支付退款时间 |
| | | */ |
| | | @TableField("prepayRefundTime") |
| | | private Date prepayRefundTime; |
| | | |
| | | public Date getSuccessTime() { |
| | | return successTime; |
| | |
| | | this.paymentMode = paymentMode; |
| | | } |
| | | |
| | | public Integer getPrepayStage() { |
| | | return prepayStage; |
| | | } |
| | | |
| | | public void setPrepayStage(Integer prepayStage) { |
| | | this.prepayStage = prepayStage; |
| | | } |
| | | |
| | | public String getPrepaySecondPayNo() { |
| | | return prepaySecondPayNo; |
| | | } |
| | | |
| | | public void setPrepaySecondPayNo(String prepaySecondPayNo) { |
| | | this.prepaySecondPayNo = prepaySecondPayNo; |
| | | } |
| | | |
| | | public String getPrepayRefundNo() { |
| | | return prepayRefundNo; |
| | | } |
| | | |
| | | public void setPrepayRefundNo(String prepayRefundNo) { |
| | | this.prepayRefundNo = prepayRefundNo; |
| | | } |
| | | |
| | | public Double getPrepayRefundAmount() { |
| | | return prepayRefundAmount; |
| | | } |
| | | |
| | | public void setPrepayRefundAmount(Double prepayRefundAmount) { |
| | | this.prepayRefundAmount = prepayRefundAmount; |
| | | } |
| | | |
| | | public Date getPrepayRefundTime() { |
| | | return prepayRefundTime; |
| | | } |
| | | |
| | | public void setPrepayRefundTime(Date prepayRefundTime) { |
| | | this.prepayRefundTime = prepayRefundTime; |
| | | } |
| | | |
| | | public String getAbnormalRemark() { |
| | | return abnormalRemark; |
| | | } |
| | |
| | | * @param type 1=微信,2=支付宝 |
| | | * @throws Exception |
| | | */ |
| | | void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception; |
| | | void payOrderPrivateCarCallback(Integer id, String order_id, Integer type, String outTradeNo) throws Exception; |
| | | |
| | | |
| | | |
| | |
| | | orderPrivateCar.setTotalPeopleNum(peopleNum); |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0); |
| | | this.insert(orderPrivateCar); |
| | | |
| | | if (orderSource == 2) {//扫码下单 |
| | |
| | | orderPrivateCar.setTotalPeopleNum(peopleNum); |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0); |
| | | this.insert(orderPrivateCar); |
| | | this.pushOrder(orderPrivateCar); |
| | | } else { |
| | |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()); |
| | | orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0); |
| | | this.insert(orderPrivateCar); |
| | | //修改总订单人数 |
| | | OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); |
| | |
| | | orderPrivateCar.setTotalPeopleNum(peopleNum); |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0); |
| | | |
| | | //判断独享,一口价,拼车 |
| | | JSONArray jsonArray = JSON.parseArray(serverCarModel); |
| | |
| | | if (orderPrivateCar.getState() != 7) { |
| | | return ResultUtil.error("订单不在待支付状态,不允许支付", ""); |
| | | } |
| | | if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) { |
| | | return ResultUtil.error("订单退款处理中,请等待退款完成", ""); |
| | | } |
| | | Integer uid = orderPrivateCar.getUserId(); |
| | | Double orderMoney = (2 == orderPrivateCar.getAbnormal() && 2 == orderPrivateCar.getAbnormalStatus() ? orderPrivateCar.getResponsibilityMoney().doubleValue() : orderPrivateCar.getOrderMoney()); |
| | | UserInfo userInfo = userInfoService.selectById(uid); |
| | |
| | | orderMoney = orderMoney < 0 ? 0 : orderMoney; |
| | | if (payType == 1) {//微信支付 |
| | | String app = type == 1 ? "APP" : "JSAPI"; |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据 |
| | | String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", outTradeNo, orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 2) {//支付宝支付 |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据 |
| | | String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 3) {//余额支付 |
| | | if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { |
| | |
| | | |
| | | userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | |
| | | boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar); |
| | | boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar); |
| | | if (isPrepayFirstStage) { |
| | | handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3); |
| | | return resultUtil; |
| | | } |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 |
| | | |
| | | |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(uid, "快车订单", orderMoney, 2, 1, 1, 1, orderId); |
| | | userInfoService.updateById(userInfo); |
| | | |
| | | |
| | | orderPrivateCar.setState(8); |
| | | orderPrivateCar.setPayType(3); |
| | | orderPrivateCar.setPayMoney(orderMoney); |
| | | orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), orderMoney) : orderMoney); |
| | | orderPrivateCar.setPayTime(new Date()); |
| | | |
| | | //处理优惠券和红包 |
| | | if (null != userCouponRecord) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | if (isPrepaySpreadStage) { |
| | | orderPrivateCar.setPrepayStage(5); |
| | | orderPrivateCar.setPrepaySecondPayNo(buildBalancePayNo(1, orderId)); |
| | | } |
| | | if (null != query) { |
| | | query.setState(2); |
| | | query.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(query); |
| | | |
| | | if (!isPrepaySpreadStage) { |
| | | consumePrivateCarBenefits(orderPrivateCar); |
| | | } |
| | | //非追缴单才需要添加收入 |
| | | if(0 == orderPrivateCar.getRecoveryOrder()){ |
| | |
| | | } |
| | | if (orderPrivateCar.getState() != 7) { |
| | | return ResultUtil.error("订单不在待支付状态,不允许支付", new ArrayList<>()); |
| | | } |
| | | if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) { |
| | | return ResultUtil.error("订单退款处理中,请等待退款完成", new ArrayList<>()); |
| | | } |
| | | |
| | | Integer uid = orderPrivateCar.getUserId(); |
| | |
| | | return ResultUtil.error("请使用余额支付"); |
| | | } |
| | | String app = type == 1 ? "APP" : "JSAPI"; |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据 |
| | | String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", outTradeNo, orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | |
| | | //创建定时任务查询订单支付状态 |
| | | ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); |
| | |
| | | if (orderMoney == 0) { |
| | | return ResultUtil.error("请使用余额支付"); |
| | | } |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据 |
| | | String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 3) {//余额支付 |
| | | if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { |
| | |
| | | } |
| | | |
| | | userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | |
| | | |
| | | boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar); |
| | | boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar); |
| | | if (isPrepayFirstStage) { |
| | | handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3); |
| | | return resultUtil; |
| | | } |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | if (null != query1) { |
| | |
| | | |
| | | orderPrivateCar.setState(8); |
| | | orderPrivateCar.setPayType(3); |
| | | orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), orderMoney) : orderMoney); |
| | | orderPrivateCar.setPayTime(new Date()); |
| | | |
| | | //处理优惠券和红包 |
| | | if (null != userCouponRecord) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | if (isPrepaySpreadStage) { |
| | | orderPrivateCar.setPrepayStage(5); |
| | | orderPrivateCar.setPrepaySecondPayNo(buildBalancePayNo(1, orderId)); |
| | | } |
| | | //处理打车卡 |
| | | if (null != userTaxiCard) { |
| | | userTaxiCardService.updateById(userTaxiCard); |
| | | } |
| | | if (null != query) { |
| | | query.setState(2); |
| | | query.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(query); |
| | | |
| | | if (!isPrepaySpreadStage) { |
| | | consumePrivateCarBenefits(orderPrivateCar); |
| | | } |
| | | //非追缴单才添加收入记录 |
| | | if(0 == orderPrivateCar.getRecoveryOrder()){ |
| | |
| | | System.err.println("预支付数据异常(orderId = " + id + ")"); |
| | | } |
| | | } |
| | | |
| | | private boolean isPrivateCarPrepayFirstStage(OrderPrivateCar orderPrivateCar) { |
| | | return orderPrivateCar != null |
| | | && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) |
| | | && Integer.valueOf(1).equals(orderPrivateCar.getPrepayStage()); |
| | | } |
| | | |
| | | private boolean isPrivateCarPrepaySpreadStage(OrderPrivateCar orderPrivateCar) { |
| | | return orderPrivateCar != null |
| | | && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) |
| | | && Integer.valueOf(3).equals(orderPrivateCar.getPrepayStage()); |
| | | } |
| | | |
| | | private String buildBalancePayNo(Integer orderType, Integer orderId) { |
| | | return "BAL_" + orderType + "_" + orderId + "_" + System.currentTimeMillis(); |
| | | } |
| | | |
| | | private Double appendPayMoney(Double source, Double amount) { |
| | | return new BigDecimal(source == null ? 0D : source) |
| | | .add(new BigDecimal(amount == null ? 0D : amount)) |
| | | .setScale(2, BigDecimal.ROUND_HALF_EVEN) |
| | | .doubleValue(); |
| | | } |
| | | |
| | | private void consumePrivateCarBenefits(OrderPrivateCar orderPrivateCar) throws Exception { |
| | | if (null != orderPrivateCar.getCouponId()) { |
| | | UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId()); |
| | | if (userCouponRecord != null) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | } |
| | | } |
| | | if (null != orderPrivateCar.getUserTaxiCardId()) { |
| | | UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId()); |
| | | if (userTaxiCard != null && (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3)) { |
| | | JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); |
| | | jsonObject.put("time", jsonObject.getInteger("time") - 1); |
| | | userTaxiCard.setContent(jsonObject.toJSONString()); |
| | | userTaxiCardService.updateById(userTaxiCard); |
| | | } |
| | | } |
| | | if (null != orderPrivateCar.getRedPacketId()) { |
| | | UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId()); |
| | | if (userRedPacketRecord != null) { |
| | | userRedPacketRecord.setState(2); |
| | | userRedPacketRecord.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(userRedPacketRecord); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void dispatchPrepayPrivateCarOrder(OrderPrivateCar orderPrivateCar) throws Exception { |
| | | if (Integer.valueOf(3).equals(orderPrivateCar.getType()) && ToolUtil.isNotEmpty(orderPrivateCar.getServerCarModel())) { |
| | | JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getServerCarModel()); |
| | | for (int i = 0; i < jsonArray.size(); i++) { |
| | | JSONObject jsonObject = jsonArray.getJSONObject(i); |
| | | Integer serverCarModelId = jsonObject.getInteger("serverCarModelId"); |
| | | Integer rideType = jsonObject.getInteger("rideType"); |
| | | if (serverCarModelId != null && serverCarModelId == 0) { |
| | | OrderTaxi orderTaxi = new OrderTaxi(); |
| | | orderTaxi.setId(orderPrivateCar.getId()); |
| | | orderTaxi.setState(1); |
| | | orderTaxi.setUserId(orderPrivateCar.getUserId()); |
| | | orderTaxi.setStartLon(orderPrivateCar.getStartLon()); |
| | | orderTaxi.setStartLat(orderPrivateCar.getStartLat()); |
| | | orderTaxiService.pushOrder(orderTaxi, 3); |
| | | continue; |
| | | } |
| | | OrderPrivateCar pushOrder = new OrderPrivateCar(); |
| | | BeanUtils.copyProperties(orderPrivateCar, pushOrder); |
| | | pushOrder.setRideType(rideType); |
| | | pushOrder.setServerCarModelId(serverCarModelId); |
| | | this.pushOrder(pushOrder); |
| | | } |
| | | return; |
| | | } |
| | | if (Integer.valueOf(3).equals(orderPrivateCar.getRideType())) { |
| | | this.pushOrderPrivateCar(orderPrivateCar.getId()); |
| | | return; |
| | | } |
| | | this.pushOrder(orderPrivateCar); |
| | | } |
| | | |
| | | private void handlePrivateCarPrepayFirstPaid(OrderPrivateCar orderPrivateCar, UserInfo userInfo, Double payAmount, Integer payType) throws Exception { |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | if (null != query1) { |
| | | userInfo.setIntegral(userInfo.getIntegral() + (payAmount.intValue() * query1.getIntegral())); |
| | | } |
| | | userInfoService.updateById(userInfo); |
| | | |
| | | consumePrivateCarBenefits(orderPrivateCar); |
| | | transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", payAmount, 2, 1, 1, 1, orderPrivateCar.getId()); |
| | | |
| | | orderPrivateCar.setState(1); |
| | | orderPrivateCar.setPayType(payType); |
| | | orderPrivateCar.setPayMoney(payAmount); |
| | | orderPrivateCar.setPayTime(new Date()); |
| | | orderPrivateCar.setPrepayStage(2); |
| | | this.updateAllColumnById(orderPrivateCar); |
| | | |
| | | pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); |
| | | systemNoticeService.addSystemNotice(1, "您的快车订单已支付成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); |
| | | dispatchPrepayPrivateCarOrder(orderPrivateCar); |
| | | } |
| | | |
| | | @Override |
| | | public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception { |
| | | public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type, String outTradeNo) throws Exception { |
| | | OrderPrivateCar orderPrivateCar = this.selectById(id); |
| | | PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1); |
| | | PaymentRecord query = ToolUtil.isNotEmpty(outTradeNo) ? paymentRecordService.queryByCode(outTradeNo, 1) : null; |
| | | if (query == null) { |
| | | query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1); |
| | | } |
| | | if (null != query && query.getState() == 1) { |
| | | UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); |
| | | query.setState(2); |
| | | query.setCode(order_id); |
| | | paymentRecordService.updateById(query); |
| | | |
| | | if (isPrivateCarPrepayFirstStage(orderPrivateCar)) { |
| | | handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, query.getAmount(), type); |
| | | return; |
| | | } |
| | | |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); |
| | | orderPrivateCar.setState(8); |
| | | orderPrivateCar.setPayType(type); |
| | | orderPrivateCar.setPayMoney(query.getAmount()); |
| | | boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar); |
| | | orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), query.getAmount()) : query.getAmount()); |
| | | orderPrivateCar.setPayTime(new Date()); |
| | | |
| | | UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); |
| | | if (isPrepaySpreadStage) { |
| | | orderPrivateCar.setPrepayStage(5); |
| | | orderPrivateCar.setPrepaySecondPayNo(order_id); |
| | | } |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | if(null != query1){ |
| | | userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 |
| | | userInfoService.updateById(userInfo); |
| | | } |
| | | |
| | | //处理优惠券和红包 |
| | | if (null != orderPrivateCar.getCouponId()) { |
| | | UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId()); |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | |
| | | if (!isPrepaySpreadStage) { |
| | | consumePrivateCarBenefits(orderPrivateCar); |
| | | } |
| | | if (null != orderPrivateCar.getUserTaxiCardId()) { |
| | | UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId()); |
| | | if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) { |
| | | JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); |
| | | jsonObject.put("time", jsonObject.getInteger("time") - 1); |
| | | userTaxiCard.setContent(jsonObject.toJSONString()); |
| | | userTaxiCardService.updateById(userTaxiCard); |
| | | } |
| | | } |
| | | if (null != orderPrivateCar.getRedPacketId()) { |
| | | UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId()); |
| | | userRedPacketRecord.setState(2); |
| | | userRedPacketRecord.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(userRedPacketRecord); |
| | | } |
| | | |
| | | |
| | | query.setState(2); |
| | | query.setCode(order_id); |
| | | paymentRecordService.updateById(query); |
| | | |
| | | //非追缴单才需要记录收入 |
| | | if(null != orderPrivateCar.getRecoveryOrder() && 0 == orderPrivateCar.getRecoveryOrder()){ |
| | |
| | | @Param("type") Integer type, @Param("orderId") Integer orderId, |
| | | @Param("orderType") Integer orderType, @Param("payType") Integer payType, |
| | | @Param("state") Integer state); |
| | | |
| | | PaymentRecord queryByCode(@Param("code") String code, @Param("state") Integer state); |
| | | } |
| | |
| | | </if> |
| | | order by insertTime desc limit 0,1 |
| | | </select> |
| | | </mapper> |
| | | |
| | | <select id="queryByCode" resultType="PaymentRecord"> |
| | | select |
| | | id as id, |
| | | category as category, |
| | | userId as userId, |
| | | `type` as `type`, |
| | | orderId as orderId, |
| | | orderType as orderType, |
| | | payType as payType, |
| | | amount as amount, |
| | | code as code, |
| | | state as state, |
| | | insertTime as insertTime |
| | | from t_payment_record where code = #{code} |
| | | <if test="null != state"> |
| | | and state = #{state} |
| | | </if> |
| | | order by insertTime desc limit 0,1 |
| | | </select> |
| | | </mapper> |
| | |
| | | */ |
| | | @TableField("paymentMode") |
| | | private Integer paymentMode; |
| | | /** |
| | | * 预支付阶段(0=非预支付,1=待首付,2=已首付待结算,3=待补差,4=待退款,5=结算完成) |
| | | */ |
| | | @TableField("prepayStage") |
| | | private Integer prepayStage; |
| | | /** |
| | | * 预支付补差支付流水号 |
| | | */ |
| | | @TableField("prepaySecondPayNo") |
| | | private String prepaySecondPayNo; |
| | | /** |
| | | * 预支付退款单号 |
| | | */ |
| | | @TableField("prepayRefundNo") |
| | | private String prepayRefundNo; |
| | | /** |
| | | * 预支付退款金额 |
| | | */ |
| | | @TableField("prepayRefundAmount") |
| | | private Double prepayRefundAmount; |
| | | /** |
| | | * 预支付退款时间 |
| | | */ |
| | | @TableField("prepayRefundTime") |
| | | private Date prepayRefundTime; |
| | | //感谢费 |
| | | @TableField("thankYouFee") |
| | | private Double thankYouFee; |
| | |
| | | this.paymentMode = paymentMode; |
| | | } |
| | | |
| | | public Integer getPrepayStage() { |
| | | return prepayStage; |
| | | } |
| | | |
| | | public void setPrepayStage(Integer prepayStage) { |
| | | this.prepayStage = prepayStage; |
| | | } |
| | | |
| | | public String getPrepaySecondPayNo() { |
| | | return prepaySecondPayNo; |
| | | } |
| | | |
| | | public void setPrepaySecondPayNo(String prepaySecondPayNo) { |
| | | this.prepaySecondPayNo = prepaySecondPayNo; |
| | | } |
| | | |
| | | public String getPrepayRefundNo() { |
| | | return prepayRefundNo; |
| | | } |
| | | |
| | | public void setPrepayRefundNo(String prepayRefundNo) { |
| | | this.prepayRefundNo = prepayRefundNo; |
| | | } |
| | | |
| | | public Double getPrepayRefundAmount() { |
| | | return prepayRefundAmount; |
| | | } |
| | | |
| | | public void setPrepayRefundAmount(Double prepayRefundAmount) { |
| | | this.prepayRefundAmount = prepayRefundAmount; |
| | | } |
| | | |
| | | public Date getPrepayRefundTime() { |
| | | return prepayRefundTime; |
| | | } |
| | | |
| | | public void setPrepayRefundTime(Date prepayRefundTime) { |
| | | this.prepayRefundTime = prepayRefundTime; |
| | | } |
| | | |
| | | |
| | | public Integer getInvoiceId() { |
| | | return invoiceId; |
| | |
| | | * @param type 1=微信,2=支付宝 |
| | | * @throws Exception |
| | | */ |
| | | void payOrderTaxiCallback(Integer id, String order_id, Integer type,Integer paymentId) throws Exception; |
| | | void payOrderTaxiCallback(Integer id, String order_id, Integer type, Integer paymentId, String outTradeNo) throws Exception; |
| | | |
| | | |
| | | /** |
| | |
| | | */ |
| | | PaymentRecord query(Integer category, Integer userId, Integer type, Integer orderId, Integer orderType, |
| | | Integer payType, Integer state) throws Exception; |
| | | |
| | | PaymentRecord queryByCode(String code, Integer state) throws Exception; |
| | | } |
| | |
| | | driver.setState(3); |
| | | driverService.updateById(driver); |
| | | } |
| | | orderTaxi.setPrepayStage(Integer.valueOf(1).equals(orderTaxi.getPaymentMode()) ? 1 : 0); |
| | | |
| | | this.insert(orderTaxi); |
| | | |
| | |
| | | if (orderTaxi.getState() != 7) { |
| | | return ResultUtil.error("订单不在待支付状态,不允许支付", ""); |
| | | } |
| | | if (Integer.valueOf(1).equals(orderTaxi.getPaymentMode()) && Integer.valueOf(4).equals(orderTaxi.getPrepayStage())) { |
| | | return ResultUtil.error("订单退款处理中,请等待退款完成", ""); |
| | | } |
| | | Integer uid = orderTaxi.getUserId(); |
| | | Double orderMoney = (2 == orderTaxi.getAbnormal() && 2 == orderTaxi.getAbnormalStatus() ? orderTaxi.getResponsibilityMoney().doubleValue() : orderTaxi.getOrderMoney()); |
| | | UserInfo userInfo = userInfoService.selectById(uid); |
| | |
| | | |
| | | if (payType == 1) {//微信支付 |
| | | String app = type == 1 ? "APP" : "JSAPI"; |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 1, orderMoney, "", 1);//添加预支付数据 |
| | | String outTradeNo = orderId + "_2_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", outTradeNo, orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 1, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 2) {//支付宝支付 |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 2, orderMoney, "", 1);//添加预支付数据 |
| | | String outTradeNo = orderId + "_2_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 2, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 3) {//余额支付 |
| | | if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { |
| | |
| | | } |
| | | |
| | | userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | |
| | | |
| | | boolean isPrepayFirstStage = isTaxiPrepayFirstStage(orderTaxi); |
| | | boolean isPrepaySpreadStage = isTaxiPrepaySpreadStage(orderTaxi); |
| | | if (isPrepayFirstStage) { |
| | | handleTaxiPrepayFirstPaid(orderTaxi, userInfo, orderMoney, 3); |
| | | return resultUtil; |
| | | } |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 |
| | |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(uid, "出租车", orderMoney, 2, 1, 1, 2, orderId); |
| | | userInfoService.updateById(userInfo); |
| | | |
| | | |
| | | orderTaxi.setState(8); |
| | | orderTaxi.setPayType(3); |
| | | orderTaxi.setPayMoney(orderMoney); |
| | | orderTaxi.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderTaxi.getPayMoney(), orderMoney) : orderMoney); |
| | | orderTaxi.setPayTime(new Date()); |
| | | |
| | | //处理优惠券和红包 |
| | | if (null != userCouponRecord) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | if (isPrepaySpreadStage) { |
| | | orderTaxi.setPrepayStage(5); |
| | | orderTaxi.setPrepaySecondPayNo(buildBalancePayNo(2, orderId)); |
| | | } |
| | | if (null != query) { |
| | | query.setState(2); |
| | | query.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(query); |
| | | |
| | | if (!isPrepaySpreadStage) { |
| | | consumeTaxiBenefits(orderTaxi); |
| | | } |
| | | if (Integer.valueOf(2).equals(orderTaxi.getPaymentMode())) { |
| | | if (Integer.valueOf(2).equals(orderTaxi.getPaymentMode()) || isPrepaySpreadStage) { |
| | | //添加收入 |
| | | Map<String, Object> map = incomeService.saveIncome(orderTaxi.getId(), 2, orderTaxi.getOrderMoney()); |
| | | orderTaxi.setSplitAllocation(JSON.toJSONString(map)); |
| | |
| | | } |
| | | if (orderTaxi.getState() != 7) { |
| | | return ResultUtil.error("订单不在待支付状态,不允许支付", ""); |
| | | } |
| | | if (Integer.valueOf(1).equals(orderTaxi.getPaymentMode()) && Integer.valueOf(4).equals(orderTaxi.getPrepayStage())) { |
| | | return ResultUtil.error("订单退款处理中,请等待退款完成", ""); |
| | | } |
| | | Integer uid = orderTaxi.getUserId(); |
| | | Double orderMoney = (2 == orderTaxi.getAbnormal() && 2 == orderTaxi.getAbnormalStatus() ? orderTaxi.getResponsibilityMoney().doubleValue() : orderTaxi.getOrderMoney()); |
| | |
| | | return ResultUtil.error("请使用余额支付"); |
| | | } |
| | | String app = type == 1 ? "APP" : "JSAPI"; |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | String outTradeNo = orderId + "_2_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", outTradeNo, orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | |
| | | paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 1, orderMoney, "", 1);//添加预支付数据 |
| | | paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 1, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 2) {//支付宝支付 |
| | | if (orderMoney == 0) { |
| | | return ResultUtil.error("请使用余额支付"); |
| | | } |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 2, orderMoney, "", 1);//添加预支付数据 |
| | | String outTradeNo = orderId + "_2_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 2, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 3) {//余额支付 |
| | | if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { |
| | |
| | | // } |
| | | |
| | | userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | |
| | | |
| | | boolean isPrepayFirstStage = isTaxiPrepayFirstStage(orderTaxi); |
| | | boolean isPrepaySpreadStage = isTaxiPrepaySpreadStage(orderTaxi); |
| | | if (isPrepayFirstStage) { |
| | | handleTaxiPrepayFirstPaid(orderTaxi, userInfo, orderMoney, 3); |
| | | return resultUtil; |
| | | } |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | if (null != query1) { |
| | | userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 |
| | | } |
| | | |
| | | |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(uid, "出租车", orderMoney, 2, 1, 1, 2, orderId); |
| | | userInfoService.updateById(userInfo); |
| | | |
| | | |
| | | orderTaxi.setState(8); |
| | | orderTaxi.setPayType(3); |
| | | orderTaxi.setPayMoney(orderMoney); |
| | | orderTaxi.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderTaxi.getPayMoney(), orderMoney) : orderMoney); |
| | | orderTaxi.setPayTime(new Date()); |
| | | |
| | | //处理优惠券和红包 |
| | | if (null != userCouponRecord) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | if (isPrepaySpreadStage) { |
| | | orderTaxi.setPrepayStage(5); |
| | | orderTaxi.setPrepaySecondPayNo(buildBalancePayNo(2, orderId)); |
| | | } |
| | | //处理打车卡 |
| | | if (null != userTaxiCard) { |
| | | userTaxiCardService.updateById(userTaxiCard); |
| | | } |
| | | if (null != query) { |
| | | query.setState(2); |
| | | query.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(query); |
| | | |
| | | if (!isPrepaySpreadStage) { |
| | | consumeTaxiBenefits(orderTaxi); |
| | | } |
| | | //非追缴单才添加收入记录 |
| | | if(0 == orderTaxi.getRecoveryOrder() && Integer.valueOf(2).equals(orderTaxi.getPaymentMode())){ |
| | | if(0 == orderTaxi.getRecoveryOrder() && (Integer.valueOf(2).equals(orderTaxi.getPaymentMode()) || isPrepaySpreadStage)){ |
| | | //添加收入 |
| | | Double orderMoney1 = (2 == orderTaxi.getAbnormal() && 2 == orderTaxi.getAbnormalStatus() ? orderTaxi.getResponsibilityMoney().doubleValue() : orderTaxi.getOrderMoney()); |
| | | Map<String, Object> map = incomeService.saveIncome(orderTaxi.getId(), 2, orderTaxi.getOrderMoney()); |
| | |
| | | } |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | | private boolean isTaxiPrepayFirstStage(OrderTaxi orderTaxi) { |
| | | return orderTaxi != null |
| | | && Integer.valueOf(1).equals(orderTaxi.getPaymentMode()) |
| | | && Integer.valueOf(1).equals(orderTaxi.getPrepayStage()); |
| | | } |
| | | |
| | | private boolean isTaxiPrepaySpreadStage(OrderTaxi orderTaxi) { |
| | | return orderTaxi != null |
| | | && Integer.valueOf(1).equals(orderTaxi.getPaymentMode()) |
| | | && Integer.valueOf(3).equals(orderTaxi.getPrepayStage()); |
| | | } |
| | | |
| | | private String buildBalancePayNo(Integer orderType, Integer orderId) { |
| | | return "BAL_" + orderType + "_" + orderId + "_" + System.currentTimeMillis(); |
| | | } |
| | | |
| | | private Double appendPayMoney(Double source, Double amount) { |
| | | return new BigDecimal(source == null ? 0D : source) |
| | | .add(new BigDecimal(amount == null ? 0D : amount)) |
| | | .setScale(2, BigDecimal.ROUND_HALF_EVEN) |
| | | .doubleValue(); |
| | | } |
| | | |
| | | private void consumeTaxiBenefits(OrderTaxi orderTaxi) throws Exception { |
| | | if (null != orderTaxi.getCouponId()) { |
| | | UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderTaxi.getCouponId()); |
| | | if (userCouponRecord != null) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | } |
| | | } |
| | | if (null != orderTaxi.getUserTaxiCardId()) { |
| | | UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderTaxi.getUserTaxiCardId()); |
| | | if (userTaxiCard != null && (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3)) { |
| | | JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); |
| | | jsonObject.put("time", jsonObject.getInteger("time") - 1); |
| | | userTaxiCard.setContent(jsonObject.toJSONString()); |
| | | userTaxiCardService.updateById(userTaxiCard); |
| | | } |
| | | } |
| | | if (null != orderTaxi.getRedPacketId()) { |
| | | UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderTaxi.getRedPacketId()); |
| | | if (userRedPacketRecord != null) { |
| | | userRedPacketRecord.setState(2); |
| | | userRedPacketRecord.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(userRedPacketRecord); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void handleTaxiPrepayFirstPaid(OrderTaxi orderTaxi, UserInfo userInfo, Double payAmount, Integer payType) throws Exception { |
| | | OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | if (null != query1) { |
| | | userInfo.setIntegral(userInfo.getIntegral() + (payAmount.intValue() * query1.getIntegral())); |
| | | } |
| | | userInfoService.updateById(userInfo); |
| | | |
| | | consumeTaxiBenefits(orderTaxi); |
| | | transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车", payAmount, 2, 1, 1, 2, orderTaxi.getId()); |
| | | |
| | | orderTaxi.setState(1); |
| | | orderTaxi.setPayType(payType); |
| | | orderTaxi.setPayMoney(payAmount); |
| | | orderTaxi.setPayTime(new Date()); |
| | | orderTaxi.setPrepayStage(2); |
| | | this.updateAllColumnById(orderTaxi); |
| | | |
| | | pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); |
| | | systemNoticeService.addSystemNotice(1, "您的出租车订单已支付成功,我们正在为您指派司机,请稍后!", orderTaxi.getUserId(), 1); |
| | | this.pushOrder(orderTaxi, 1); |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public void payOrderTaxiCallback(Integer id, String order_id, Integer type, Integer paymentId) throws Exception { |
| | | public void payOrderTaxiCallback(Integer id, String order_id, Integer type, Integer paymentId, String outTradeNo) throws Exception { |
| | | OrderTaxi orderTaxi = this.selectById(id); |
| | | PaymentRecord query = paymentRecordService.query(1, orderTaxi.getUserId(), 1, Integer.valueOf(id), 2, type, 1); |
| | | PaymentRecord query = ToolUtil.isNotEmpty(outTradeNo) ? paymentRecordService.queryByCode(outTradeNo, 1) : null; |
| | | if (query == null) { |
| | | query = paymentRecordService.query(1, orderTaxi.getUserId(), 1, Integer.valueOf(id), 2, type, 1); |
| | | } |
| | | if (null != query && query.getState() == 1) { |
| | | UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId()); |
| | | query.setState(2); |
| | | query.setCode(order_id); |
| | | paymentRecordService.updateById(query); |
| | | |
| | | if (isTaxiPrepayFirstStage(orderTaxi)) { |
| | | handleTaxiPrepayFirstPaid(orderTaxi, userInfo, query.getAmount(), type); |
| | | return; |
| | | } |
| | | |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车", query.getAmount(), 2, 1, 1, 2, query.getOrderId()); |
| | | orderTaxi.setState(8); |
| | | orderTaxi.setPayType(type); |
| | | orderTaxi.setPayMoney(query.getAmount()); |
| | | boolean isPrepaySpreadStage = isTaxiPrepaySpreadStage(orderTaxi); |
| | | orderTaxi.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderTaxi.getPayMoney(), query.getAmount()) : query.getAmount()); |
| | | orderTaxi.setPayTime(new Date()); |
| | | |
| | | UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId()); |
| | | if (isPrepaySpreadStage) { |
| | | orderTaxi.setPrepayStage(5); |
| | | orderTaxi.setPrepaySecondPayNo(order_id); |
| | | } |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | if(null != query1){ |
| | | userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 |
| | | userInfoService.updateById(userInfo); |
| | | } |
| | | |
| | | //处理优惠券和红包 |
| | | if (null != orderTaxi.getCouponId()) { |
| | | UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderTaxi.getCouponId()); |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | |
| | | if (!isPrepaySpreadStage) { |
| | | consumeTaxiBenefits(orderTaxi); |
| | | } |
| | | if (null != orderTaxi.getUserTaxiCardId()) { |
| | | UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderTaxi.getUserTaxiCardId()); |
| | | if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) { |
| | | JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); |
| | | jsonObject.put("time", jsonObject.getInteger("time") - 1); |
| | | userTaxiCard.setContent(jsonObject.toJSONString()); |
| | | userTaxiCardService.updateById(userTaxiCard); |
| | | } |
| | | } |
| | | if (null != orderTaxi.getRedPacketId()) { |
| | | UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderTaxi.getRedPacketId()); |
| | | userRedPacketRecord.setState(2); |
| | | userRedPacketRecord.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(userRedPacketRecord); |
| | | } |
| | | |
| | | |
| | | query.setState(2); |
| | | query.setCode(order_id); |
| | | paymentRecordService.updateById(query); |
| | | |
| | | //非追缴单才添加收入记录 |
| | | if(0 == orderTaxi.getRecoveryOrder() && Integer.valueOf(2).equals(orderTaxi.getPaymentMode())){ |
| | | if(0 == orderTaxi.getRecoveryOrder() && (Integer.valueOf(2).equals(orderTaxi.getPaymentMode()) || Integer.valueOf(5).equals(orderTaxi.getPrepayStage()))){ |
| | | //添加收入 |
| | | Double orderMoney1 = (2 == orderTaxi.getAbnormal() && 2 == orderTaxi.getAbnormalStatus() ? orderTaxi.getResponsibilityMoney().doubleValue() : orderTaxi.getOrderMoney()); |
| | | Map<String, Object> map = incomeService.saveIncome(orderTaxi.getId(), 2, orderMoney1); |
| | |
| | | Integer payType, Integer state) throws Exception { |
| | | return paymentRecordMapper.query(category, userId, type, orderId, orderType, payType, state); |
| | | } |
| | | |
| | | @Override |
| | | public PaymentRecord queryByCode(String code, Integer state) throws Exception { |
| | | return paymentRecordMapper.queryByCode(code, state); |
| | | } |
| | | } |