处理批量提交时的审批情况
This commit is contained in:
parent
f11d76b238
commit
39d1168a1e
|
|
@ -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上下文
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue