| | |
| | | BigDecimal thirdRefundAmount = channelRefundAmount.min(getRefundableThirdPayAmount(chargingOrder)).setScale(2, RoundingMode.HALF_UP); |
| | | BigDecimal balanceRefundAmount = channelRefundAmount.subtract(thirdRefundAmount).min(money(chargingOrder.getBalancePayAmount())).setScale(2, RoundingMode.HALF_UP); |
| | | //构建退款明细 |
| | | String refundCode = "CDF" + chargingOrder.getCode().substring(2); |
| | | TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); |
| | | chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue()); |
| | | chargingOrderRefund.setRefundCode(refundCode); |
| | | chargingOrderRefund.setRefundAmount(recordedRefundAmount); |
| | | chargingOrderRefund.setBalanceRefundAmount(balanceRefundAmount); |
| | | chargingOrderRefund.setThirdRefundAmount(thirdRefundAmount); |
| | |
| | | .eq(TChargingOrder::getId, chargingOrder.getId()) |
| | | .eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())); |
| | | if (thirdRefundAmount.compareTo(BigDecimal.ZERO) > 0 && 1 == rechargePaymentType) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(chargingOrder.getCode()); |
| | | model.setOut_refund_no(chargingOrderRefund.getRefundCode()); |
| | |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | } |
| | | } |
| | | if (null != amount1) { |
| | | chargingOrderRefundService.save(chargingOrderRefund); |
| | | //手续费 |
| | | Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | Object refund_fee1 = amount1.get("refund_fee"); |
| | | BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); |
| | | chargingOrderRefund.setRefundFee(refund_fee); |
| | |
| | | Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); |
| | | Integer payMethod = chargingOrder.getPayMethod(); |
| | | //构建退款明细 |
| | | String refundCode = "CDF" + chargingOrder.getCode().substring(2); |
| | | TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); |
| | | chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue()); |
| | | chargingOrderRefund.setRefundCode(refundCode); |
| | | chargingOrderRefund.setRefundAmount(money); |
| | | BigDecimal thirdRefundAmount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP); |
| | | BigDecimal balanceRefundAmount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP); |
| | |
| | | return; |
| | | } |
| | | if (1 == rechargePaymentType) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(chargingOrder.getCode()); |
| | | model.setOut_refund_no(chargingOrderRefund.getRefundCode()); |
| | |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | } |
| | | } |
| | | if (null != amount1) { |
| | | chargingOrderRefundService.save(chargingOrderRefund); |
| | | //手续费 |
| | | Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | Object refund_fee1 = amount1.get("refund_fee"); |
| | | BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); |
| | | chargingOrderRefund.setRefundFee(refund_fee); |
| | |
| | | Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); |
| | | if (channelRefundAmount.compareTo(BigDecimal.ZERO) > 0) { |
| | | //构建退款明细 |
| | | String refundCode = "CDF" + chargingOrder.getCode().substring(2); |
| | | TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); |
| | | chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); |
| | | SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | chargingOrderRefund.setRefundCode("CDF" + sdf1.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); |
| | | chargingOrderRefund.setRefundCode(refundCode); |
| | | chargingOrderRefund.setRefundAmount(refundAmount); |
| | | chargingOrderRefund.setBalanceRefundAmount(balanceRefundAmount); |
| | | chargingOrderRefund.setThirdRefundAmount(thirdRefundAmount); |
| | |
| | | .eq(TChargingOrder::getId, chargingOrder.getId()) |
| | | .eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())); |
| | | } else if (1 == rechargePaymentType) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(chargingOrder.getCode()); |
| | | model.setOut_refund_no(chargingOrderRefund.getRefundCode()); |
| | |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model); |
| | | if (200 == result.getCode()) { |
| | | amount1 = (Map<String, Object>) result.getData().get("amount"); |
| | | } |
| | | } |
| | | |
| | | if (null != amount1) { |
| | | //手续费 |
| | | Map<String, Object> amount1 = (Map<String, Object>) result.getData().get("amount"); |
| | | Object refund_fee1 = amount1.get("refund_fee"); |
| | | BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); |
| | | chargingOrderRefund.setRefundFee(refund_fee); |
| | |
| | | if ((tChargingOrder.getRechargeAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) { |
| | | tChargingOrder.setStatus(5); |
| | | } |
| | | |
| | | String refundCode = "CDF" + tChargingOrder.getCode().substring(2); |
| | | TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); |
| | | chargingOrderRefund.setChargingOrderId(tChargingOrder.getId()); |
| | | chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | |
| | | chargingOrderRefund.setPayType(tChargingOrder.getRechargePaymentType()); |
| | | chargingOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | chargingOrderRefund.setCode(tChargingOrder.getCode()); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); |
| | | chargingOrderRefund.setRefundCode(refundCode); |
| | | chargingOrderRefund.setRefundTitle("后台退款"); |
| | | chargingOrderRefund.setRefundContent("后台退款"); |
| | | chargingOrderRefund.setRefundReason("后台退款"); |
| | |
| | | chargingOrderRefund.setRefundSerialNumber("BALANCE"); |
| | | finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); |
| | | } else if (1 == tChargingOrder.getRechargePaymentType()) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(tChargingOrder.getCode()); |
| | | model.setOut_refund_no(chargingOrderRefund.getRefundCode()); |
| | |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | } |
| | | } |
| | | if (null != amount1) { |
| | | finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); |
| | | //手续费 |
| | | Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | Object refund_fee1 = amount1.get("refund_fee"); |
| | | BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); |
| | | chargingOrderRefund.setRefundFee(refund_fee); |
| | |
| | | if ((shoppingOrder.getPaymentAmount().subtract(shoppingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) { |
| | | shoppingOrder.setStatus(5); |
| | | } |
| | | |
| | | String refundCode = "GWF" + shoppingOrder.getCode().substring(2); |
| | | TShoppingOrderRefund shoppingOrderRefund = new TShoppingOrderRefund(); |
| | | shoppingOrderRefund.setShoppingOrderId(shoppingOrder.getId()); |
| | | shoppingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | |
| | | shoppingOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | shoppingOrderRefund.setCode(shoppingOrder.getCode()); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | shoppingOrderRefund.setRefundCode("GWF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); |
| | | shoppingOrderRefund.setRefundCode(refundCode); |
| | | shoppingOrderRefund.setRefundTitle("后台退款"); |
| | | shoppingOrderRefund.setRefundContent("后台退款"); |
| | | shoppingOrderRefund.setRefundReason("后台退款"); |
| | |
| | | shoppingOrderRefund.setPayAmount(shoppingOrder.getPaymentAmount()); |
| | | |
| | | if (1 == shoppingOrder.getPaymentType()) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(shoppingOrder.getCode()); |
| | | model.setOut_refund_no(shoppingOrderRefund.getRefundCode()); |
| | |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | } |
| | | } |
| | | if (null != amount1) { |
| | | shoppingOrder.setRefundStatus(2); |
| | | shoppingOrder.setRefundAmount((shoppingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : shoppingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); |
| | | shoppingOrderService.updateById(shoppingOrder); |
| | | shoppingOrderRefundService.save(shoppingOrderRefund); |
| | | //手续费 |
| | | Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | Object refund_fee1 = amount1.get("refund_fee"); |
| | | BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); |
| | | shoppingOrderRefund.setRefundFee(refund_fee); |
| | |
| | | if (vipOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) { |
| | | return R.fail("退款金额需小于支付金额"); |
| | | } |
| | | String refundCode = "HYF" + vipOrder.getCode().substring(2); |
| | | TVipOrderRefund vipOrderRefund = new TVipOrderRefund(); |
| | | vipOrderRefund.setVipOrderId(vipOrder.getId()); |
| | | vipOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | |
| | | vipOrderRefund.setPayType(vipOrder.getPaymentType()); |
| | | vipOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | vipOrderRefund.setCode(vipOrder.getCode()); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | vipOrderRefund.setRefundCode("HYF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); |
| | | vipOrderRefund.setRefundCode(refundCode); |
| | | vipOrderRefund.setRefundTitle("后台退款"); |
| | | vipOrderRefund.setRefundContent("后台退款"); |
| | | vipOrderRefund.setRefundReason("后台退款"); |
| | |
| | | vipOrderRefund.setPayAmount(vipOrder.getPaymentAmount()); |
| | | |
| | | if (1 == vipOrder.getPaymentType()) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(vipOrder.getCode()); |
| | | model.setOut_refund_no(vipOrderRefund.getRefundCode()); |
| | |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | } |
| | | } |
| | | if (null != amount1) { |
| | | vipOrder.setRefundStatus(2); |
| | | vipOrder.setRefundAmount((vipOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : vipOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); |
| | | vipOrderService.updateById(vipOrder); |
| | | vipOrderRefundService.save(vipOrderRefund); |
| | | //手续费 |
| | | Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | Object refund_fee1 = amount1.get("refund_fee"); |
| | | BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); |
| | | vipOrderRefund.setRefundFee(refund_fee); |
| | |
| | | throw new ServiceException("退款查询失败"); |
| | | } |
| | | log.info("退款查询结果:{}", JSON.toJSONString(data)); |
| | | Object status = data.get("status"); |
| | | if(null == status){ |
| | | throw new ServiceException("无退款数据"); |
| | | } |
| | | |
| | | Map<String, Object> amount = (Map<String, Object>) data.get("amount"); |
| | | TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); |
| | | chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); |