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