履约订单审核、履约订单结束

This commit is contained in:
19173159168
2025-09-07 23:06:20 +08:00
parent 59e9b30ae2
commit 305a39ca86
7 changed files with 172 additions and 41 deletions

View File

@ -1,9 +1,7 @@
package com.sczx.pay.controller;
import com.alipay.api.*;
import com.alipay.api.domain.AlipayCommerceRentOrderCloseModel;
import com.alipay.api.response.AlipayCommerceRentOrderCloseResponse;
import com.sczx.pay.dto.AlipayOrderCloseRequest;
import com.sczx.pay.service.AliPayOrderCloseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -30,9 +28,9 @@ public class AliPayOrderCloseController {
*/
@ApiOperation(value = "支付宝订单关闭接口")
@PostMapping("/orderClose")
public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(@RequestBody AlipayOrderCloseRequest alipayOrderCloseRequest) {
log.info("支付宝订单关闭接口请求: {}", alipayOrderCloseRequest);
return aliPayOrderCloseService.aliPayOrderClose(alipayOrderCloseRequest);
public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(@RequestBody AlipayCommerceRentOrderCloseModel model) {
log.info("支付宝订单关闭接口请求: {}", model);
return aliPayOrderCloseService.aliPayOrderClose(model);
}

View File

@ -0,0 +1,49 @@
package com.sczx.pay.controller;
import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentFinishModel;
import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentApproveResponse;
import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentApproveModel;
import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentFinishResponse;
import com.sczx.pay.service.AliPayOrderFulfillmentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(value = "支付宝订单履约接口", tags = "支付宝租赁履约接口")
@Slf4j
@RestController
@RequestMapping("/alipay/orderFulfillment")
public class AliPayOrderFulfillmentController {
@Autowired
private AliPayOrderFulfillmentService aliPayOrderFulfillmentService;
/**
* 支付宝订单履约审核接口
*/
@ApiOperation(value = "支付宝订单履约审核接口")
@PostMapping("/approve")
public AlipayCommerceRentOrderFulfillmentApproveResponse aliPayOrderFulfillmentApprove(@RequestBody AlipayCommerceRentOrderFulfillmentApproveModel model) {
log.info("支付宝订单履约审核接口请求: {}", model);
return aliPayOrderFulfillmentService.aliPayOrderFulfillmentApprove(model);
}
/**
* 支付宝订单履约完成接口
*/
@ApiOperation(value = "支付宝订单履约完成接口")
@PostMapping("/finish")
public AlipayCommerceRentOrderFulfillmentFinishResponse aliPayOrderFulfillmentFinish(@RequestBody AlipayCommerceRentOrderFulfillmentFinishModel model) {
log.info("支付宝订单履约审核接口请求: {}", model);
return aliPayOrderFulfillmentService.aliPayOrderFulfillmentFinish(model);
}
}

View File

@ -1,15 +0,0 @@
package com.sczx.pay.dto;
import lombok.Data;
@Data
public class AlipayOrderCloseRequest {
private String reasonCode; // 关单原因编码
private String reasonDesc; // 关单原因说明
private String orderId; // 交易组件订单号 orderId 和 outOrderId参数 二选一 传入
private String outOrderId; // 商户订单号
private String buyerId; // 买家ID buyerId 和 buyerOpenId 参数 二选一 传入
private String buyerOpenId; // 买家支付宝用户唯一标识
}

View File

@ -1,15 +1,15 @@
package com.sczx.pay.service;
import com.alipay.api.domain.AlipayCommerceRentOrderCloseModel;
import com.alipay.api.response.AlipayCommerceRentOrderCloseResponse;
import com.sczx.pay.dto.AlipayOrderCloseRequest;
public interface AliPayOrderCloseService {
/**
* 支付宝订单关闭接口
* @param alipayOrderCloseRequest
* @param model
* @return
*/
public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(AlipayOrderCloseRequest alipayOrderCloseRequest);
public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(AlipayCommerceRentOrderCloseModel model);
}

View File

@ -0,0 +1,25 @@
package com.sczx.pay.service;
import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentApproveModel;
import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentFinishModel;
import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentApproveResponse;
import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentFinishResponse;
public interface AliPayOrderFulfillmentService {
/**
* 支付宝订单履约审核
* @param model
* @return
*/
public AlipayCommerceRentOrderFulfillmentApproveResponse aliPayOrderFulfillmentApprove(AlipayCommerceRentOrderFulfillmentApproveModel model);
/**
* 支付宝订单履约完成
* @param model
* @return
*/
public AlipayCommerceRentOrderFulfillmentFinishResponse aliPayOrderFulfillmentFinish(AlipayCommerceRentOrderFulfillmentFinishModel model);
}

View File

@ -1,10 +1,9 @@
package com.sczx.pay.service.impl;
import com.alipay.api.AlipayResponse;
import com.alipay.api.domain.AlipayCommerceRentOrderCloseModel;
import com.alipay.api.request.AlipayCommerceRentOrderCloseRequest;
import com.alipay.api.response.AlipayCommerceRentOrderCloseResponse;
import com.sczx.pay.dto.AlipayOrderCloseRequest;
import com.sczx.pay.entity.OrderMain;
import com.sczx.pay.entity.PayStatus;
import com.sczx.pay.entity.ReasonCodes;
import com.sczx.pay.mapper.OrderPayMapper;
@ -12,7 +11,6 @@ import com.sczx.pay.service.AliPayOrderCloseService;
import com.sczx.pay.utils.AlipaySdkUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Slf4j
@ -27,25 +25,15 @@ public class AliPayOrderCloseServiceImpl implements AliPayOrderCloseService {
/**
* 支付宝订单关闭接口
*
* @param alipayOrderCloseRequest
* @param model
* @return
*/
@Override
public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(AlipayOrderCloseRequest alipayOrderCloseRequest) {
public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(AlipayCommerceRentOrderCloseModel model) {
AlipayCommerceRentOrderCloseResponse response = new AlipayCommerceRentOrderCloseResponse();
try{
// 构造请求参数以调用接口
AlipayCommerceRentOrderCloseRequest request = new AlipayCommerceRentOrderCloseRequest();
AlipayCommerceRentOrderCloseModel model = new AlipayCommerceRentOrderCloseModel();
// 设置交易组件订单号
model.setOrderId(alipayOrderCloseRequest.getOrderId());
// 设置商户订单号
model.setOutOrderId(alipayOrderCloseRequest.getOutOrderId());
// 设置买家支付宝用户唯一标识
model.setBuyerOpenId(alipayOrderCloseRequest.getBuyerOpenId());
// 设置关单原因编码
model.setReasonCode(ReasonCodes.USER_QUALIFICATION_ISSUES.getCode());
@ -62,10 +50,14 @@ public class AliPayOrderCloseServiceImpl implements AliPayOrderCloseService {
if (response.isSuccess()) {
log.info("支付宝订单关闭接口调用成功,开始更新订单状态");
/** 更新订单状态 */
orderPayMapper.updateOrderStatus(alipayOrderCloseRequest.getOutOrderId(), PayStatus.CLOSED.getCode());
/** 履约审核通过,更新订单状态为租赁中 */
OrderMain orderMain = orderPayMapper.getOrderStatusByOrderNo(model.getOutOrderId());
orderPayMapper.updateOrderStatus(orderMain.getOrderNo(), PayStatus.CLOSED.getCode());
}else{
log.error("支付宝订单关闭接口调用失败OutOrderId: {}", model.getOutOrderId());
}
} catch (Exception e) {
log.error("支付宝关闭异常,订单号: {}", alipayOrderCloseRequest.getOutOrderId(), e);
log.error("支付宝关闭异常,OutOrderId: {}", model.getOutOrderId(), e);
response.setCode("FAIL");
response.setMsg("关闭订单失败异常: " + e.getMessage());
}

View File

@ -0,0 +1,82 @@
package com.sczx.pay.service.impl;
import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentApproveModel;
import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentFinishModel;
import com.alipay.api.request.AlipayCommerceRentOrderFulfillmentApproveRequest;
import com.alipay.api.request.AlipayCommerceRentOrderFulfillmentFinishRequest;
import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentApproveResponse;
import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentFinishResponse;
import com.sczx.pay.entity.OrderMain;
import com.sczx.pay.entity.OrderSub;
import com.sczx.pay.entity.PayStatus;
import com.sczx.pay.mapper.OrderPayMapper;
import com.sczx.pay.service.AliPayOrderFulfillmentService;
import com.sczx.pay.utils.AlipaySdkUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class AliPayOrderFulfillmentServiceImpl implements AliPayOrderFulfillmentService {
@Autowired
private AlipaySdkUtil alipaySdkUtil;
@Autowired
private OrderPayMapper orderPayMapper;
public AlipayCommerceRentOrderFulfillmentApproveResponse aliPayOrderFulfillmentApprove(AlipayCommerceRentOrderFulfillmentApproveModel model) {
AlipayCommerceRentOrderFulfillmentApproveResponse response = new AlipayCommerceRentOrderFulfillmentApproveResponse();
try{
// 构造请求参数以调用接口
AlipayCommerceRentOrderFulfillmentApproveRequest request = new AlipayCommerceRentOrderFulfillmentApproveRequest();
request.setBizModel(model);
response = alipaySdkUtil.execute(request);
log.info("支付宝订单履约审核接口响应 : {}",response.getBody());
if (response.isSuccess()) {
log.info("支付宝订单履约审核接口调用成功,更新订单状态为租赁中,订单号: {}", model.getOutOrderId());
/** 履约审核通过,更新订单状态为租赁中 */
OrderMain orderMain = orderPayMapper.getOrderStatusByOrderNo(model.getOutOrderId());
orderPayMapper.updateOrderStatus(orderMain.getOrderNo(),"RENT_ING");
} else {
log.error("支付宝订单履约审核接口调用失败,OutOrderId: {}", model.getOutOrderId());
}
} catch (Exception e) {
log.error("支付宝订单履约审核异常,OutOrderId: {}", model.getOutOrderId(), e);
response.setCode("FAIL");
response.setMsg("支付宝订单履约审核失败异常: " + e.getMessage());
}
return response;
}
@Override
public AlipayCommerceRentOrderFulfillmentFinishResponse aliPayOrderFulfillmentFinish(AlipayCommerceRentOrderFulfillmentFinishModel model) {
AlipayCommerceRentOrderFulfillmentFinishResponse response = new AlipayCommerceRentOrderFulfillmentFinishResponse();
try{
// 构造请求参数以调用接口
AlipayCommerceRentOrderFulfillmentFinishRequest request = new AlipayCommerceRentOrderFulfillmentFinishRequest();
request.setBizModel(model);
response = alipaySdkUtil.execute(request);
log.info("支付宝订单履约完成接口响应 : {}",response.getBody());
if (response.isSuccess()) {
log.info("支付宝订单履约完成接口调用成功,更新订单状态为己结束-还车,订单号: {}", model.getOutOrderId());
/** 支付宝订单履约完成通过,更新订单状态为己结束-还车 */
//更新主订单状态
OrderMain orderMain = orderPayMapper.getOrderStatusByOrderNo(model.getOutOrderId());
orderPayMapper.updateOrderStatus(orderMain.getOrderNo(),"AUTO_END");
} else {
log.error("支付宝订单履约完成接口调用失败,OutOrderId: {}", model.getOutOrderId());
}
} catch (Exception e) {
log.error("支付宝订单履约完成异常,OutOrderId: {}", model.getOutOrderId(), e);
response.setCode("FAIL");
response.setMsg("支付宝订单履约完成异常: " + e.getMessage());
}
return response;
}
}