禅道bug#1599修复

This commit is contained in:
gaoqr
2026-06-04 11:29:17 +08:00
parent c61f994ed5
commit c5a471f5cc
8 changed files with 64 additions and 10 deletions
@@ -0,0 +1,14 @@
package com.cf.imes.framework.common.exception;
import lombok.Data;
/**
* 异常错误数据:用于CommonResult.data
*
* @author Gqr
* @since 2026/6/4 10:40
*/
@Data
public class ErrorData {
private String errorData;
}
@@ -31,12 +31,24 @@ public final class ServiceException extends RuntimeException {
*/
private transient Object[] args;
/**
* 异常需要的回调数据
*/
private ErrorData errorData;
/**
* 空构造方法,避免反序列化问题
*/
public ServiceException() {
}
public ServiceException(ErrorCode errorCode, ErrorData errorData, Object... args) {
this.code = errorCode.getCode();
this.message = errorCode.getMsg();
this.errorData = errorData;
this.args = args;
}
public ServiceException(ErrorCode errorCode, Object... args) {
this.code = errorCode.getCode();
this.message = errorCode.getMsg();
@@ -3,6 +3,8 @@ package com.cf.imes.framework.web.core.handler;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
import com.cf.imes.framework.common.exception.ErrorData;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.monitor.TracerUtils;
@@ -238,12 +240,17 @@ public class GlobalExceptionHandler {
@ExceptionHandler(value = ServiceException.class)
public CommonResult serviceExceptionHandler(ServiceException ex) {
// 系统异常输出堆栈
if(INTERNAL_SERVER_ERROR.getCode().equals(ex.getCode())) {
if (INTERNAL_SERVER_ERROR.getCode().equals(ex.getCode())) {
log.error("[serviceExceptionHandler]", ex);
} else {
log.error(String.format("==========[serviceExceptionHandler]==========%s%s", ex.getCode(), ex.getMessage()));
}
return CommonResult.error(ex.getCode(), ex.getMessage(), ex.getArgs());
CommonResult<Object> error = CommonResult.error(ex.getCode(), ex.getMessage(), ex.getArgs());
ErrorData errorData = ex.getErrorData();
if (ObjectUtil.isNotNull(errorData)) {
error.setData(errorData.getErrorData());
}
return error;
}
/**
@@ -154,4 +154,9 @@ public class PurchaseRecordDO extends BaseDO {
* 状态
*/
private Integer status;
/**
* 第三方支付链接
*/
private String displayContent;
}
@@ -8,10 +8,12 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.cf.imes.framework.common.exception.ErrorData;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.validation.ValidationUtils;
import com.cf.imes.framework.id.core.util.SnowflakeSerialNoWorker3rd;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.cf.imes.framework.pay.config.ChenfengAlipayConfig;
import com.cf.imes.framework.pay.config.ChenfengPayConfig;
import com.cf.imes.framework.pay.core.client.dto.order.PayOrderRespDTO;
@@ -56,6 +58,7 @@ import jakarta.validation.Validator;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
@@ -166,7 +169,11 @@ public class PayOrderServiceImpl implements PayOrderService {
// 检查机构产品是否有待支付的购买记录
List<PurchaseRecordDO> pendingPurchaseList = purchaseService.getOrgProductPendingPurchaseList(organId, productId);
if (CollUtil.isNotEmpty(pendingPurchaseList)) {
throw new ServiceException(ORG_PRODUCT_PURCHASE_WAIT_PAY_ERROR);
// 取更新时间最新的那一条展示支付链接
PurchaseRecordDO latestPendingPurchase = pendingPurchaseList.stream()
.max(Comparator.comparing(BaseDO::getUpdateTime))
.orElse(null);
throw new ServiceException(ORG_PRODUCT_PURCHASE_WAIT_PAY_ERROR, new ErrorData().setErrorData(latestPendingPurchase.getDisplayContent()), payConfig.getPayExpireTime().toMinutes());
}
// 查询组织产品的首次购买记录
@@ -188,15 +195,20 @@ public class PayOrderServiceImpl implements PayOrderService {
processPreviosPurchaseRecord(previouProductDelayRespVO, payOrder);
// 记录入库,如果有外部支付发起请求二维码
// 购买记录入库
purchaseService.createRecord(productProcessorRespVO.getPurchaseRecordDO());
PurchaseRecordDO purchaseRecordDO = productProcessorRespVO.getPurchaseRecordDO();
// 发起渠道方支付
createPayOrder(payOrder);
AbstractPayHandler payHandler = payHandlerFactory.getPayHandler(channelCode);
payOrderUnifiedReqDTO = createPayOrderUnifiedReqDTO(payOrder);
return payHandler.unifiedOrder(payOrderUnifiedReqDTO);
PayOrderRespDTO payOrderRespDTO = payHandler.unifiedOrder(payOrderUnifiedReqDTO);
// 购买记录入库,记录外部支付请求
purchaseRecordDO.setDisplayContent(payOrderRespDTO.getDisplayContent());
purchaseService.createRecord(purchaseRecordDO);
return payOrderRespDTO;
} catch (Throwable e) {
// 系统异常,则包装成 PayException 异常抛出
@@ -231,7 +243,11 @@ public class PayOrderServiceImpl implements PayOrderService {
// 检查机构产品是否有待支付的购买记录
List<PurchaseRecordDO> pendingPurchaseList = purchaseService.getOrgProductPendingPurchaseList(organId, productId);
if (CollUtil.isNotEmpty(pendingPurchaseList)) {
throw new ServiceException(ORG_PRODUCT_PURCHASE_WAIT_PAY_ERROR);
// 取更新时间最新的那一条展示支付链接
PurchaseRecordDO latestPendingPurchase = pendingPurchaseList.stream()
.max(Comparator.comparing(BaseDO::getUpdateTime))
.orElse(null);
throw new ServiceException(ORG_PRODUCT_PURCHASE_WAIT_PAY_ERROR, new ErrorData().setErrorData(latestPendingPurchase.getDisplayContent()), payConfig.getPayExpireTime().toMinutes());
}
// 查询组织产品的首次购买记录
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long