处理批量提交时的审批情况

This commit is contained in:
syruan 2026-01-29 16:46:42 +08:00
parent f11d76b238
commit 39d1168a1e
1 changed files with 46 additions and 10 deletions

View File

@ -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<String> 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<String> copeCollId(Object businessIdObj) {
List<String> 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上下文
*/