From 39d1168a1e9ee6c475e4eb2a5f0ff6d51bb3d321 Mon Sep 17 00:00:00 2001 From: syruan <15555146157@163.com> Date: Thu, 29 Jan 2026 16:46:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=89=B9=E9=87=8F=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E6=97=B6=E7=9A=84=E5=AE=A1=E6=89=B9=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../approval/aspect/ApprovalAspect.java | 56 +++++++++++++++---- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/aspect/ApprovalAspect.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/aspect/ApprovalAspect.java index 9c021e2..e507dd5 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/aspect/ApprovalAspect.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/aspect/ApprovalAspect.java @@ -10,6 +10,7 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; +import org.checkerframework.checker.nullness.qual.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.DefaultParameterNameDiscoverer; @@ -22,6 +23,8 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; /** * 审批切面 @@ -80,28 +83,61 @@ public class ApprovalAspect { if (businessIdObj == null) { throw new ServiceException("无法解析业务ID,表达式:" + annotation.businessIdExpr()); } - String businessId = String.valueOf(businessIdObj); // 6. 解析业务数据 Object businessDataObj = parseExpression(annotation.businessDataExpr(), joinPoint, result, Object.class); - String businessData = JSON.toJSONString(businessDataObj); - // 7. 创建审批实例 + // 7. 判断是否为批量操作(数组或集合) + List businessIds = copeCollId(businessIdObj); + + // 8. 为每个业务ID创建审批实例 try { - ApprovalInstance instance = approvalEngineService.createApprovalInstance( - annotation.businessType(), businessId, businessData); - - log.info("自动创建审批实例成功,业务类型:{},业务ID:{},实例编号:{}", - annotation.businessType(), businessId, instance.getInstanceCode()); + for (String businessId : businessIds) { + String businessData = JSON.toJSONString(businessDataObj); + ApprovalInstance instance = approvalEngineService.createApprovalInstance( + annotation.businessType(), businessId, businessData); + + log.info("自动创建审批实例成功,业务类型:{},业务ID:{},实例编号:{}", + annotation.businessType(), businessId, instance.getInstanceCode()); + } } catch (Exception e) { - log.error("创建审批实例失败,业务类型:{},业务ID:{}", - annotation.businessType(), businessId, e); + log.error("创建审批实例失败,业务类型:{},业务IDs:{}", annotation.businessType(), businessIds, e); throw new ServiceException("创建审批实例失败:" + e.getMessage()); } return result; } + /** + * 处理参数ID, 多个 or 1个的情况 + * @param businessIdObj 业务 ID + * @return 处理后的集合 + */ + private static @NonNull List copeCollId(Object businessIdObj) { + List businessIds = new ArrayList<>(); + if (businessIdObj.getClass().isArray()) { + // 处理数组情况 + Object[] idArray = (Object[]) businessIdObj; + for (Object id : idArray) { + if (id != null) { + businessIds.add(String.valueOf(id)); + } + } + } else if (businessIdObj instanceof java.util.Collection) { + // 处理集合情况 + java.util.Collection idCollection = (java.util.Collection) businessIdObj; + for (Object id : idCollection) { + if (id != null) { + businessIds.add(String.valueOf(id)); + } + } + } else { + // 单 ID 情况 + businessIds.add(String.valueOf(businessIdObj)); + } + return businessIds; + } + /** * 创建SpEL上下文 */