首页定义审核链,将审核串联起来
/**
* @author admin
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public abstract class ReviewLess {
/**
* 后继审批对象
*/
protected ReviewLess successor;
/**
* 当前审核节点
*/
protected Integer index;
/**
* 总节点
*/
protected Integer count;
/**
* 当前借点审核人Id
*/
protected String userId;
public ReviewLess(Integer index, String userId) {
this.index = index;
this.userId = userId;
}
/**
* 抽象的请求处理方法
* @param reviewRequest 审核时的状态
*/
public abstract void processRequest(ReviewRequest reviewRequest);
}
/**
* @author admin
*/
@NoArgsConstructor
public class ReviewPublic extends ReviewLess {
public ReviewPublic(Integer index, String userId) {
super(index, userId);
}
@Override
public void processRequest(ReviewRequest reviewRequest) {
ICompanyReviewService bean = SpringUtil.getBean(ICompanyReviewService.class);
//得到审核Id
CompanyReview byId = bean.getById(reviewRequest.getReviewId());
//如果不是当前层级,进入下一层级
if (!byId.getReviewLevel().equals(this.getIndex())) {
this.getSuccessor().processRequest(reviewRequest);
return;
}
//如果不是当前审核流程id人,直接报错
if (!Func.toStrList(this.getUserId()).contains(Func.toStr(SecureUtil.getUserId()))) {
throw new ServiceException("没有权限");
}
//如果当前审核层级是最后一级
if (this.getIndex().equals(this.getCount())) {
ReviewFlowFactory reviewFactory = SpringUtil.getBean(ReviewFlowFactory.class);
reviewFactory.getBean(策略类型).doReview(参数);
return;
}
//结束
if (reviewRequest.getReviewStatus() == 2) {
//填写结束逻辑
} else {
//向下一个节点进发
byId.setReviewLevel(this.getIndex() + 1);
}
bean.updateById(byId);
}
}
如果审核类型有多个,可以定义执行策略
/**
* @author admin
*/
public interface PublicStrategy {
/**
* 审核最终节点
* @param reviewRequest
* @param bean
* @param byId
*/
void doReview();
/**
* 类型
* @return 类型
*/
String getType();
}
/**
* @author admin
*/
@Component
public class CompanyStrategy implements PublicStrategy {
@Override
public void doReview() {
}
}
@Override
public String getType() {
return ;
}
}
/**
* @author admin
*/
@Component
public class BankStrategy implements PublicStrategy {
@Override
public void doReview() {
}
@Override
public String getType() {
return ;
}
}
使用方式 如果多个审核类似的话,可以抽出公共部分
//审核流程
List<ReviewLess> review = new ArrayList<>();
//获取审核人节点
List<ReviewCompanyAuditor> reviewCompanyAuditors = reviewCompanyAuditorService.list(Wrappers.<ReviewCompanyAuditor>lambdaQuery().eq(ReviewCompanyAuditor::getType, reviewCompanyAuditor));
//根据审核节点排序
reviewCompanyAuditors.sort(Comparator.comparing(ReviewCompanyAuditor::getReviewLess));
LinkedHashMap<Integer, List<ReviewCompanyAuditor>> collect = reviewCompanyAuditors.stream().collect(Collectors.groupingBy(ReviewCompanyAuditor::getReviewLess, LinkedHashMap::new, Collectors.toList()));
//进行数据组装
for (Map.Entry<Integer, List<ReviewCompanyAuditor>> integerListEntry : collect.entrySet()) {
ReviewPublic manager = new ReviewPublic();
//总节点
manager.setCount(collect.size());
//当前节点
manager.setIndex(integerListEntry.getKey());
//当前节点审核id用户
manager.setUserId(integerListEntry.getValue().stream().map(ReviewCompanyAuditor::getReviewUserId).map(Func::toStr).collect(Collectors.joining(",")));
review.add(manager);
}
//进行连接 组装成一个链表结构
ReviewLess filter = null;
ReviewLess next = null;
for (ReviewLess reviewLess : review) {
if (next == null) {
filter = reviewLess;
} else {
next.setSuccessor(reviewLess);
}
next = reviewLess;
}
//开始审核流程事件
filter.processRequest(reviewRequest);