• java实现审核流程

```java
CREATE TABLE `t_process_flow` (`process_id` bigint NOT NULL AUTO_INCREMENT COMMENT '审批任务流程id\r\n',`purchase_id` int DEFAULT NULL COMMENT '供应商子公司采购id',`operator_id` bigint DEFAULT NULL,`action` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,`result` varchar(255) DEFAULT NULL,`reason` varchar(255) DEFAULT NULL,`create_time` datetime DEFAULT NULL,`audit_time` datetime DEFAULT NULL,`order_no` int DEFAULT NULL,`state` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,`is_last` int DEFAULT NULL COMMENT '是否是最后节点 0-否 1-是',PRIMARY KEY (`process_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;```
@Service
public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> implements IPurchaseService {@Autowiredprivate PurchaseMapper purchaseMapper;@Autowiredprivate ProcessFlowMapper processFlowMapper;@Overridepublic Purchase createPurchase(Purchase purchase,Integer adminUserId) {//todo 事业部领导或者集团领导会不会直接添加供应商子公司采购??????//月度合作额度(元)Double monthlyCooperationQuota = purchase.getMonthlyCooperationQuota();// todo 查询当前用户的信息,及根据金额规则区间获取审批人// todo 保存供应商子公司采购信息purchase.setCreateTime(new Date());purchase.setCreator(1);purchase.setState(1);purchaseMapper.insert(purchase);// todo 保存审理流程表信息//1.保存第一条流程信息,表名表单提交,状态为completeProcessFlow flow1 = new ProcessFlow();flow1.setPurchaseId(purchase.getId());flow1.setOperatorId(adminUserId.longValue());flow1.setAction("apply");flow1.setCreateTime(new Date());flow1.setOrderNo(1);flow1.setState("complete");flow1.setIsLast(0);processFlowMapper.insert(flow1);//2. 分情况保存审批人流程信息//2.1  根据月度合作额度决定审核主体Integer routeFlag = route(monthlyCooperationQuota);//todo 获取审核下一节点领导idProcessFlow flow2 = new ProcessFlow();flow2.setPurchaseId(purchase.getId());flow2.setAction("audit");flow2.setCreateTime(new Date());flow2.setOrderNo(2);flow2.setState("process");if(Objects.equals(ApprovalProcessEnum.BUSINESS_DIVISION.getCode(), routeFlag)||Objects.equals(ApprovalProcessEnum.GROUP.getCode(), routeFlag)){//2.1.1 一级审核:事业部一级审核 或者 集团一级审核flow2.setOperatorId(getLeader(ApprovalProcessEnum.BUSINESS_DIVISION.getCode()));flow2.setIsLast(1);processFlowMapper.insert(flow2);}else {//2.1.2 事业部和集团两级审核//todo 获取当前用户的所属事业部领导和集团领导//事业部审核flow2.setOperatorId(getLeader(ApprovalProcessEnum.BUSINESS_DIVISION.getCode()));flow2.setIsLast(0);processFlowMapper.insert(flow2);//集团审核ProcessFlow flow3 = new ProcessFlow();flow3.setPurchaseId(purchase.getId());flow3.setAction("audit");flow3.setCreateTime(new Date());flow3.setOrderNo(3);flow3.setState("ready");flow3.setIsLast(1);processFlowMapper.insert(flow3);}// todo 保存流程通知表信息return purchase;}@Overridepublic void audit(Long purchaseId, Long operatorId, Integer result, String reason) {//当前审核任务对象ProcessFlow process;//1.无论同意/驳回,当前任务状态变更为complete//通过采购id查询业务流程集合,按照审核流程序号Wrapper<ProcessFlow> wrapper = new EntityWrapper<>();wrapper.eq("purchase_id", purchaseId).last("order by order_no");List<ProcessFlow> flowList = processFlowMapper.selectList(wrapper);if(flowList.size() == 0){throw new ResponseException("无效的审批流程");}//获取当前任务ProcessFlow对象List<ProcessFlow> processList = flowList.stream().filter(p -> Objects.equals(p.getOperatorId(), operatorId) && p.getState().equals(ProvessStateEnum.PROCESS.getValue())).collect(Collectors.toList());if(processList.size()==0){throw new ResponseException("未找到待处理任务");}else {process = processList.get(0);process.setState(ProvessStateEnum.COMPLETE.getValue());//result审核结果状态:2-审核通过,3-审核拒绝//todo 把String改成int类型的process.setResult(result.toString());process.setReason(reason);process.setAuditTime(new Date());processFlowMapper.updateById(process);}//2.如果当前任务是最后一个节点,代表流程结束,更新请假单状态为对应的 2-审核通过,3-审核拒绝Purchase purchase = purchaseMapper.selectById(purchaseId);if(process.getIsLast() == 1){//状态:1-待审核,2-审核通过,3-审核拒绝purchase.setState(result);purchaseMapper.updateById(purchase);}else {//readyList包含所有后续任务节点List<ProcessFlow> readyList = flowList.stream().filter(p -> p.getState().equals(ProvessStateEnum.READY.getValue())).collect(Collectors.toList());//3.如果当前任务不是最后一个节点且审批通过,那下一个节点的状态从ready变为processif(result.equals(PurchaseAuditTypeEnum.APPROVED.getCode())){ProcessFlow readyProcess = readyList.get(0);readyProcess.setState(ProvessStateEnum.PROCESS.getValue());processFlowMapper.updateById(readyProcess);}else if(result.equals(PurchaseAuditTypeEnum.REFUSED.getCode())) {//4.如果当前任务不是最后一个节点且审批驳回,则后续所有任务状态变为cancel,请假单状态变为refusedfor(ProcessFlow p:readyList){p.setState(ProvessStateEnum.CANCEL.getValue());processFlowMapper.updateById(p);}purchase.setState(result);purchaseMapper.updateById(purchase);}}}/*** 审核流-路由方法* 月度合作额度(元)* @param monthlyCooperationQuota* @return 路由标识 1-事业部一级审核 2-事业部->集团两级审核 3.集团一级审核*/private Integer route(Double monthlyCooperationQuota) {//todo 使用数据字典返回对应值,逻辑待实现return 1;}/*** 获取分管领导id* @param level 1-事业部 3-集团* @return*/private Long getLeader(Integer level) {//todo 实现获取分管领导id逻辑return null;}
}

- java实现审核流程相关推荐

  1. java开发 审核流程思路_java 实现一套流程管理、流转的思路(伪工作流) 【仅供参考】...

    转: 在做某个管理项目时,被要求实现一套流程管理,比如请假的申请审批流程等,在参考了很多资料,并和同事讨论后,得到了一个自主实现的流程管理. 以下提供我的设计思路,知道了思路,实现起来就简单很多了. ...

  2. js实现审批流_JavaScript实现审核流程状态的动态显示进度条

    中添加class即可,实现此功能的js代码如下: 标签 break; case '2': //待修复 addClass(step2.parentNode,'active'); addClass(ste ...

  3. 开发提交审核流程_小程序如何提交审核,多久能通过?

    小程序制作时需要代码开发的,因此,如果是想成为小程序商家的老板们,可以通过客源多这样的小程序制作公司来完成. 当然,老板们也可以多方面的了解一些小程序的制作过程,如果是想自己开发的程序员,这些审核流程 ...

  4. 4、java中的流程控制(程序结构)

            说一下java的流程控制(程序结构),其实对于计算机而言,无非就那几类执行流程(程序结构),程序从头到尾依次执行每一行代码,这就是顺序结构:也可能在执行过程中遇到条件判断,造成程序运行 ...

  5. OpenJDK源码赏析之二:java虚拟机启动流程到首函数调用全流程

    承接上一谈 OpenJDK源码赏析之一:漫谈java的历史渊源_星空_AZ的博客-CSDN博客 JAVA从启动到第一个函数执行的发生的流程: WinMain->JLI_Launch->JV ...

  6. facebook审核流程

    1.点击连接https://developers.facebook.com/进去facebook的后台: 2.点击选择自己注册的应用,如下图: 3.点击应用之后,进去设置-基本选项,点击添加开放平台添 ...

  7. Java学习笔记——流程控制

    Java学习笔记--流程控制 Day05 一.用户交互Scanner 1.Scanner对象 我们通过Java工具包java.util.Scanner中的Scanner类来获取用户的输入 基本语法:S ...

  8. Java SE 控制流程(今天本君不早朝)

    Java的控制流程结构与C和C++的控制流程结构一样,只有很少的例外. 具体参考<<java核心技术 卷一>> 第三章 3.8 控制流程 (p63) 或者自己多写写代码,参考报 ...

  9. java modify的使用方法图解,经过JDT修改(Modify)Java代码的流程步骤

    通过JDT修改(Modify)Java代码的流程步骤 1.ICompilationUnit originalUnit = ...;// Get original compilation unit 获取 ...

最新文章

  1. 浙江大学计算机研究生分数线初试单科学科,2016年浙江大学计算机考研复试分数线_浙江大学考研分数线...
  2. 大数据,正在到来的数据革命——涂子沛
  3. spacy库的安装与使用_PythonEEG工具库MNEPython详细安装与使用
  4. mysql sleep详解_关于MySQL的SLEEP(N)函数
  5. [3/21]Windows Server 2008时钟方面的改进展示
  6. pandas 基本使用
  7. Q1:spring-boot中Controller路径无法被访问的问题
  8. javascript高级程序设计 Boolean类型
  9. 华为新款旗舰P20发布,售价5000元起,首次搭载刷脸解锁
  10. POJ 2455 Secret Milking Machine
  11. Python_三级菜单
  12. [iOS] 通知详解: iOS 10 UserNotifications -- 附加包Media Attachments
  13. Xshell上传文件的方法和在docker打开lrzsz
  14. ALV 单元格控制参数LVC_S_STYL排序问题
  15. pcl::MovingLeastSquares滑动最小二乘
  16. EPMS- 让企业应用更加轻便!
  17. redis常用命令总结,一文足以(5种基本数据结构+bitmap+Geo+HyperLogLog+Streams)
  18. DeepMind AI 科学家:2020年NLP和ML领域十大研究进展
  19. python 遍历列表中的每个元素 for循环 while循环 迭代器
  20. 初学python找不到的类都到这儿来

热门文章

  1. 湘潭大学研究生计算机科学,湘潭大学计算机研究生难考么
  2. 电商用户行为和可视化分析
  3. 鼠标放到标签上面显示弹窗,滑过弹窗后,弹窗显示,移出标签和弹窗,弹窗消失
  4. 如何跟开发就测试范围进行沟通?
  5. 解决Maven项目创建太慢的问题
  6. 基于openmv的小车
  7. 小程序开发系列之基础部分-账号注册
  8. 当你看到别人在认真努力而自己颓靡的时候,你有什么想法?
  9. android五角星图像识别,ImageFound
  10. 使用Tesseract+OpenCV+Python进行光学字符识别 (OCR)