免押逻辑修改

This commit is contained in:
2025-09-27 19:58:11 +08:00
parent e998dc6651
commit 3937c32c6b
5 changed files with 67 additions and 14 deletions

View File

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

View File

@ -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<OrderSubPO> 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<OrderSubPO> updatenoDepositWrapper = new LambdaUpdateWrapper<>();
updatenoDepositWrapper.set(OrderSubPO::getPayStatus, PayStatusEnum.UNFREEZE_SUCCESS.getCode())

View File

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

View File

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

View File

@ -30,6 +30,8 @@ public class OrderUtil {
public static final String FZ_PREFIX = "FZ";
public static final String FFZ_PREFIX = "FFZ";
/**
* 生成订单号的方法
* @return 唯一订单号字符串