|
@@ -380,71 +380,77 @@ public class TradeRefundServiceImpl implements TradeRefundService {
|
|
|
try {
|
|
try {
|
|
|
//如果失败更新退款记录状态为退款失败,成功状态由通知变更
|
|
//如果失败更新退款记录状态为退款失败,成功状态由通知变更
|
|
|
List<TradeOrderPayDO> tradeOrderPayList = tradeOrderRepositoryService.getPayOrderByOrderId(tradeOrderDO.getId());
|
|
List<TradeOrderPayDO> tradeOrderPayList = tradeOrderRepositoryService.getPayOrderByOrderId(tradeOrderDO.getId());
|
|
|
- for (TradeOrderPayDO payOrderDO : tradeOrderPayList) {
|
|
|
|
|
- if(totalAmount.compareTo(BigDecimal.ZERO) <= 0){
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- RefundDO refundDO = new RefundDO();
|
|
|
|
|
- if(payOrderDO.getPayAmount().compareTo(totalAmount) >= 0){
|
|
|
|
|
- refundDO.setRefundAmount(amount);
|
|
|
|
|
- refundDO.setOriginAmount(amount);
|
|
|
|
|
- }else{
|
|
|
|
|
- refundDO.setRefundAmount(payOrderDO.getPayAmount());
|
|
|
|
|
- refundDO.setOriginAmount(payOrderDO.getPayAmount());
|
|
|
|
|
- //还剩多少
|
|
|
|
|
- totalAmount = totalAmount.subtract(payOrderDO.getPayAmount());
|
|
|
|
|
- }
|
|
|
|
|
- refundDO.setOrderId(orderId);
|
|
|
|
|
- refundDO.setRefundChannel(6);
|
|
|
|
|
- refundDO.setId(IdWorker.getId());
|
|
|
|
|
- refundDO.setSellMethod(tradeOrderDO.getSellMethod());
|
|
|
|
|
- refundDO.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus());
|
|
|
|
|
- refundDO.setRefundMethod(3);
|
|
|
|
|
- refundDO.setRefundBackType(0);
|
|
|
|
|
- refundDO.setRefundReason("取消订单退押金");
|
|
|
|
|
- refundDO.setRefundUser(tradeOrderDO.getSellerId());
|
|
|
|
|
- refundDO.setFee(BigDecimal.ZERO);
|
|
|
|
|
- refundDO.setOrderStatus(tradeOrderDO.getOrderStatus());
|
|
|
|
|
- refundDO.setTenantId(1L);
|
|
|
|
|
- refundDO.setCreator(getLoginUserId()+"");
|
|
|
|
|
- refundDO.setCreateTime(LocalDateTime.now());
|
|
|
|
|
- refundDO.setDeleted(false);
|
|
|
|
|
- refundMapper.insert(refundDO);
|
|
|
|
|
-
|
|
|
|
|
- RefundRecordDO refundRecordDO = new RefundRecordDO();
|
|
|
|
|
- refundRecordDO.setOrderPayId(payOrderDO.getId());
|
|
|
|
|
- refundRecordDO.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus());
|
|
|
|
|
- refundRecordDO.setMerchantNo(payOrderDO.getMerchantNo());
|
|
|
|
|
- refundRecordDO.setChannelId(payOrderDO.getChannelId());
|
|
|
|
|
- refundRecordDO.setPaymentType(payOrderDO.getPaymentType());
|
|
|
|
|
- refundRecordDO.setRefundId(refundDO.getId());
|
|
|
|
|
- refundRecordDO.setRefundAmount(refundDO.getRefundAmount());
|
|
|
|
|
- refundRecordDO.setTenantId(payOrderDO.getTenantId());
|
|
|
|
|
- refundRecordDO.setPaymentNo(payOrderDO.getPaymentNo());
|
|
|
|
|
- refundRecordDO.setRealPayOrderId(payOrderDO.getId());
|
|
|
|
|
- refundRecordDO.setRefundBackType(0);
|
|
|
|
|
- tradeRefundRepositoryService.saveRefundRecord(refundRecordDO);
|
|
|
|
|
- if(payOrderDO.getPaymentType() == 1 || payOrderDO.getPaymentType() == 2) {
|
|
|
|
|
- TradeMchInfoDO tradeMchInfoDO = tradeOrderRepositoryService.getByMchId(refundRecordDO.getMerchantNo());
|
|
|
|
|
- Map result = payPlatService.createRefundOrder(refundRecordDO, refundDO, payOrderDO, tradeMchInfoDO);
|
|
|
|
|
- Asserts.isTrue(StrUtil.equals(SUCCESS, MapUtils.getString(result, "retCode")), "调用支付平台退款失败");
|
|
|
|
|
- String refundOrderId = MapUtil.getStr(result, "refundOrderId");
|
|
|
|
|
- if (StrUtil.isNotBlank(refundOrderId)) {
|
|
|
|
|
- refundRecordDO.setRefundNo(refundOrderId);
|
|
|
|
|
|
|
+ log.error("refundByOrderId开始退款"+orderId+";"+(tradeOrderPayList!=null?tradeOrderPayList.size():0));
|
|
|
|
|
+ if (tradeOrderPayList != null) {
|
|
|
|
|
+ for (TradeOrderPayDO payOrderDO : tradeOrderPayList) {
|
|
|
|
|
+ if(totalAmount.compareTo(BigDecimal.ZERO) <= 0){
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ RefundDO refundDO = new RefundDO();
|
|
|
|
|
+ if(payOrderDO.getPayAmount().compareTo(totalAmount) >= 0){
|
|
|
|
|
+ refundDO.setRefundAmount(amount);
|
|
|
|
|
+ refundDO.setOriginAmount(amount);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ refundDO.setRefundAmount(payOrderDO.getPayAmount());
|
|
|
|
|
+ refundDO.setOriginAmount(payOrderDO.getPayAmount());
|
|
|
|
|
+ //还剩多少
|
|
|
|
|
+ totalAmount = totalAmount.subtract(payOrderDO.getPayAmount());
|
|
|
|
|
+ }
|
|
|
|
|
+ refundDO.setOrderId(orderId);
|
|
|
|
|
+ refundDO.setRefundChannel(6);
|
|
|
|
|
+ refundDO.setId(IdWorker.getId(refundDO));
|
|
|
|
|
+ refundDO.setSellMethod(tradeOrderDO.getSellMethod());
|
|
|
|
|
+ refundDO.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus());
|
|
|
|
|
+ refundDO.setRefundMethod(3);
|
|
|
|
|
+ refundDO.setRefundBackType(0);
|
|
|
|
|
+ refundDO.setRefundReason("取消订单退押金");
|
|
|
|
|
+ refundDO.setRefundUser(tradeOrderDO.getSellerId());
|
|
|
|
|
+ refundDO.setFee(BigDecimal.ZERO);
|
|
|
|
|
+ refundDO.setOrderStatus(tradeOrderDO.getOrderStatus());
|
|
|
|
|
+ refundDO.setTenantId(1L);
|
|
|
|
|
+ refundDO.setCreator(getLoginUserId()+"");
|
|
|
|
|
+ refundDO.setCreateTime(LocalDateTime.now());
|
|
|
|
|
+ refundDO.setDeleted(false);
|
|
|
|
|
+ refundMapper.insert(refundDO);
|
|
|
|
|
+
|
|
|
|
|
+ RefundRecordDO refundRecordDO = new RefundRecordDO();
|
|
|
|
|
+ refundRecordDO.setId(IdWorker.getId(refundRecordDO));
|
|
|
|
|
+ refundRecordDO.setOrderPayId(payOrderDO.getId());
|
|
|
|
|
+ refundRecordDO.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus());
|
|
|
|
|
+ refundRecordDO.setMerchantNo(payOrderDO.getMerchantNo());
|
|
|
|
|
+ refundRecordDO.setChannelId(payOrderDO.getChannelId());
|
|
|
|
|
+ refundRecordDO.setPaymentType(payOrderDO.getPaymentType());
|
|
|
|
|
+ refundRecordDO.setRefundId(refundDO.getId());
|
|
|
|
|
+ refundRecordDO.setRefundAmount(refundDO.getRefundAmount());
|
|
|
|
|
+ refundRecordDO.setTenantId(payOrderDO.getTenantId());
|
|
|
|
|
+ refundRecordDO.setPaymentNo(payOrderDO.getPaymentNo());
|
|
|
|
|
+ refundRecordDO.setRealPayOrderId(payOrderDO.getId());
|
|
|
|
|
+ refundRecordDO.setRefundBackType(0);
|
|
|
|
|
+ tradeRefundRepositoryService.saveRefundRecord(refundRecordDO);
|
|
|
|
|
+ if(payOrderDO.getPaymentType() == 1 || payOrderDO.getPaymentType() == 2) {
|
|
|
|
|
+ log.error(tradeOrderDO.getOrderNo()+ "定金退款开始调用支付平台退款"+refundDO.getRefundAmount());
|
|
|
|
|
+ TradeMchInfoDO tradeMchInfoDO = tradeOrderRepositoryService.getByMchId(refundRecordDO.getMerchantNo());
|
|
|
|
|
+ Map result = payPlatService.createRefundOrder(refundRecordDO, refundDO, payOrderDO, tradeMchInfoDO);
|
|
|
|
|
+ Asserts.isTrue(StrUtil.equals(SUCCESS, MapUtils.getString(result, "retCode")), "调用支付平台退款失败");
|
|
|
|
|
+ String refundOrderId = MapUtil.getStr(result, "refundOrderId");
|
|
|
|
|
+ if (StrUtil.isNotBlank(refundOrderId)) {
|
|
|
|
|
+ refundRecordDO.setRefundNo(refundOrderId);
|
|
|
|
|
+ refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND.getStatus());
|
|
|
|
|
+ tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
|
|
|
|
|
+ }
|
|
|
|
|
+ }else{
|
|
|
|
|
+ log.error(tradeOrderDO.getOrderNo()+ "定金退款开始调用余额授信退款"+refundDO.getRefundAmount());
|
|
|
|
|
+ PayTypeEnum payType = PayTypeEnum.valueOf(refundRecordDO.getPaymentType());
|
|
|
|
|
+ if (StrUtil.isNotBlank(payType.getServiceName()) && refundRecordDO.getRefundBackType() == REFUND_BACK_TYPE_ORIGINAL && (refundRecordDO.getRefundAmount().compareTo(BigDecimal.ZERO) > 0)) {
|
|
|
|
|
+ PayTypeService payTypeService = payTypeServiceMap.get(payType.getServiceName());
|
|
|
|
|
+ Long tradeId = payTypeService.refund(refundDO, refundRecordDO);
|
|
|
|
|
+ //更新退款记录(退款成功)
|
|
|
|
|
+ refundRecordDO.setRefundNo(tradeId.toString());
|
|
|
|
|
+ }
|
|
|
|
|
+ refundRecordDO.setRefundTime(LocalDateTime.now());
|
|
|
refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND.getStatus());
|
|
refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND.getStatus());
|
|
|
tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
|
|
tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
|
|
|
}
|
|
}
|
|
|
- }else{
|
|
|
|
|
- PayTypeEnum payType = PayTypeEnum.valueOf(refundRecordDO.getPaymentType());
|
|
|
|
|
- if (StrUtil.isNotBlank(payType.getServiceName()) && refundRecordDO.getRefundBackType() == REFUND_BACK_TYPE_ORIGINAL && (refundRecordDO.getRefundAmount().compareTo(BigDecimal.ZERO) > 0)) {
|
|
|
|
|
- PayTypeService payTypeService = payTypeServiceMap.get(payType.getServiceName());
|
|
|
|
|
- Long tradeId = payTypeService.refund(refundDO, refundRecordDO);
|
|
|
|
|
- //更新退款记录(退款成功)
|
|
|
|
|
- refundRecordDO.setRefundNo(tradeId.toString());
|
|
|
|
|
- }
|
|
|
|
|
- refundRecordDO.setRefundTime(LocalDateTime.now());
|
|
|
|
|
- refundRecordDO.setRefundStatus(RefundStatusEnum.REFUND.getStatus());
|
|
|
|
|
- tradeRefundRepositoryService.updateRefundRecord(refundRecordDO);
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
} catch (ServiceException e) {
|
|
} catch (ServiceException e) {
|