思路:责任链加策略模板实现动态审核

首页定义审核链,将审核串联起来
/**
 * @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);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值