diff --git a/src/main/java/com/sczx/order/service/PayService.java b/src/main/java/com/sczx/order/service/PayService.java index b306395..57a2c93 100644 --- a/src/main/java/com/sczx/order/service/PayService.java +++ b/src/main/java/com/sczx/order/service/PayService.java @@ -38,4 +38,21 @@ public interface PayService { * @return */ UnifiedPaymentInfoDTO freezeOrder(Long companyId,String outOrderNo, BigDecimal freezeFee); + + /** + * 解冻 + * @param companyId + * @param outOrderNo + * @param authCode + * @return + */ + boolean finishFreezeOrder(Long companyId,String outOrderNo, String authCode); + + /** + * 取消冻结 + * @param companyId + * @param outOrderNo + * @return + */ + boolean cancelFreezeOrder(Long companyId,String outOrderNo); } diff --git a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java index 7132d9c..0a3fde3 100644 --- a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java @@ -612,11 +612,29 @@ public class OrderServiceImpl implements OrderService { if(orderMainPO.getIsDepositFree()){ OrderSubPO noDepositOrder = orderSubPOList.stream().filter(orderSubPO -> StringUtils.equalsIgnoreCase(orderSubPO.getSuborderType(), SubOrderTypeEnum.NO_DEPOSIT.getCode())).findFirst().orElse(null); if(Objects.nonNull(noDepositOrder)){ - log.info("开始取消支付宝押金冻结支付单"); - AlipayFundFreezeRequest fundFreezeRequest = new AlipayFundFreezeRequest(); - fundFreezeRequest.setCompanyId(companyStoreDTO.getOperatingCompanyId().toString()); - fundFreezeRequest.setOutOrderNo(noDepositOrder.getPaymentId()); - closePayOrder = payInteg.cancelFundFreeze(fundFreezeRequest); + if(StringUtils.equalsIgnoreCase(noDepositOrder.getPayStatus(), PayStatusEnum.USERPAYING.getCode())){ + log.info("查询支付宝冻结订单结果"); + AlipayQueryFreezeRequest alipayQueryFreezeRequest = new AlipayQueryFreezeRequest(); + alipayQueryFreezeRequest.setOutOrderNo(noDepositOrder.getPaymentId()); + alipayQueryFreezeRequest.setOperationType("FREEZE"); + alipayQueryFreezeRequest.setCompanyId(orderMainPO.getOperatorId().toString()); + AlipayQueryFreezeResponse queryFreezeResponse = payInteg.queryFundFreeze(alipayQueryFreezeRequest); + if(queryFreezeResponse==null){ + closePayOrder = payService.cancelFreezeOrder(Long.valueOf(companyStoreDTO.getOperatingCompanyId()),noDepositOrder.getPaymentId()); + }else { + closePayOrder = payService.finishFreezeOrder(Long.valueOf(companyStoreDTO.getOperatingCompanyId()),noDepositOrder.getPaymentId(),noDepositOrder.getTransactionId()); + } + + } else if(StringUtils.equalsIgnoreCase(noDepositOrder.getPayStatus(), PayStatusEnum.SUCCESS.getCode())){ + closePayOrder = payService.finishFreezeOrder(Long.valueOf(companyStoreDTO.getOperatingCompanyId()),noDepositOrder.getPaymentId(),noDepositOrder.getTransactionId()); + } + if (closePayOrder) { + //解冻成功更新状态为解冻成功 + LambdaUpdateWrapper updatenoDepositWrapper = new LambdaUpdateWrapper<>(); + updatenoDepositWrapper.set(OrderSubPO::getPayStatus, PayStatusEnum.UNFREEZE_SUCCESS.getCode()) + .eq(OrderSubPO::getSuborderId, noDepositOrder.getSuborderId()); + orderSubRepo.update(updatenoDepositWrapper); + } } } if(StringUtils.equalsIgnoreCase(rentOrder.getPayStatus(), PayStatusEnum.USERPAYING.getCode())){ @@ -1353,13 +1371,8 @@ public class OrderServiceImpl implements OrderService { .eq(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS).last(" limit 1"); OrderSubPO noDepositOrder = orderSubRepo.getOne(orderSubWrapper); if (Objects.nonNull(noDepositOrder)) { - AlipayFinishFreezeRequest alipayFinishFreezeRequest = new AlipayFinishFreezeRequest(); - alipayFinishFreezeRequest.setCompanyId(orderDTO.getOperatorId().toString()); - alipayFinishFreezeRequest.setAuthNo(noDepositOrder.getTransactionId()); - alipayFinishFreezeRequest.setOutRequestNo(noDepositOrder.getPaymentId()); - alipayFinishFreezeRequest.setAmount(noDepositOrder.getAmount().toString()); - AlipayResponse result = payInteg.finishFreeze(alipayFinishFreezeRequest); - if (result.isSuccess()) { + boolean result = payService.finishFreezeOrder(orderDTO.getOperatorId(),noDepositOrder.getPaymentId(),noDepositOrder.getTransactionId()); + if (result) { //解冻成功更新状态为解冻成功 LambdaUpdateWrapper updatenoDepositWrapper = new LambdaUpdateWrapper<>(); updatenoDepositWrapper.set(OrderSubPO::getPayStatus, PayStatusEnum.UNFREEZE_SUCCESS.getCode()) diff --git a/src/main/java/com/sczx/order/service/impl/PayServiceImpl.java b/src/main/java/com/sczx/order/service/impl/PayServiceImpl.java index ad7d018..304e59d 100644 --- a/src/main/java/com/sczx/order/service/impl/PayServiceImpl.java +++ b/src/main/java/com/sczx/order/service/impl/PayServiceImpl.java @@ -4,6 +4,7 @@ import com.sczx.order.common.enums.PaymentTypeEnum; import com.sczx.order.dto.SimpleUserInfoDTO; import com.sczx.order.service.PayService; import com.sczx.order.thirdpart.dto.AlipayFundFreezeResponse; +import com.sczx.order.thirdpart.dto.AlipayResponse; import com.sczx.order.thirdpart.dto.UnifiedPaymentInfoDTO; import com.sczx.order.thirdpart.dto.req.*; import com.sczx.order.thirdpart.integration.PayInteg; @@ -100,4 +101,24 @@ public class PayServiceImpl implements PayService { unifiedPaymentInfoDTO.setOrderStr(result.getOrderStr()); return unifiedPaymentInfoDTO; } + + @Override + public boolean finishFreezeOrder(Long companyId, String outOrderNo, String authCode) { + log.info("开始完结支付宝押金冻结支付单"); + AlipayFinishFreezeRequest finishFreezeRequest = new AlipayFinishFreezeRequest(); + finishFreezeRequest.setCompanyId(companyId.toString()); + finishFreezeRequest.setAuthNo(authCode); + finishFreezeRequest.setOutRequestNo(OrderUtil.generateSubOrderNo(OrderUtil.FFZ_PREFIX)); + AlipayResponse alipayResponse = payInteg.finishFreeze(finishFreezeRequest); + return alipayResponse.isSuccess(); + } + + @Override + public boolean cancelFreezeOrder(Long companyId, String outOrderNo) { + log.info("开始取消支付宝押金冻结支付单"); + AlipayFundFreezeRequest request = new AlipayFundFreezeRequest(); + request.setCompanyId(companyId.toString()); + request.setOutOrderNo(outOrderNo); + return payInteg.cancelFundFreeze(request); + } } diff --git a/src/main/java/com/sczx/order/thirdpart/integration/PayInteg.java b/src/main/java/com/sczx/order/thirdpart/integration/PayInteg.java index e1f8f88..e2f74a8 100644 --- a/src/main/java/com/sczx/order/thirdpart/integration/PayInteg.java +++ b/src/main/java/com/sczx/order/thirdpart/integration/PayInteg.java @@ -248,7 +248,7 @@ public class PayInteg { if(StringUtils.isNotBlank(result.getCode()) && "SUCCESS".equals(result.getCode())){ return true; } else { - throw new InnerException("取消免押冻结失败"); + return false; } } catch (Exception e){ log.error("取消免押冻结失败",e); @@ -263,7 +263,7 @@ public class PayInteg { if(StringUtils.isNotBlank(result.getCode()) && "SUCCESS".equals(result.getCode())){ return result; } else { - throw new InnerException("查询免押冻结失败"); + return null; } } catch (Exception e){ log.error("查询免押押冻结失败",e); diff --git a/src/main/java/com/sczx/order/utils/OrderUtil.java b/src/main/java/com/sczx/order/utils/OrderUtil.java index 1fd3592..6ccfda2 100644 --- a/src/main/java/com/sczx/order/utils/OrderUtil.java +++ b/src/main/java/com/sczx/order/utils/OrderUtil.java @@ -30,6 +30,8 @@ public class OrderUtil { public static final String FZ_PREFIX = "FZ"; + public static final String FFZ_PREFIX = "FFZ"; + /** * 生成订单号的方法 * @return 唯一订单号字符串