activiti审批汇总流程

1147771213 贡献于2017-01-10

作者 刘洋老师  创建于2014-01-30 06:44:00   修改者刘洋老师  修改于2014-01-30 06:45:00字数11120

文档摘要:
关键词:

activiti5学习笔记(二)伪审批汇总流程 伪汇总审批,就是每一条流程都是独立的,这些独立的流程在走到某个节点的时候,这个节点的审批人可以一次性进行多个任务的审批。   开发环境 JDK1.6 Activiti5.13 Eclipse MYSQL5 简单起见,这里没有做一个web的项目,只是一个Java程序。   业务场景 预算填报员填写本单位的预算,预算提交到本单位的上级进行审批,上级审批后提交到总公司进行审批。 有多少个预算到了总公司审批人处,就可以对多少的预算同时进行审批,这些流程都是相对独立的。 业务数据存储在单独的报表系统中,节点可以配置打开报表的方式,表单ID,及节点是否汇总审批。   程序模拟 为方便起见 1)所有单位的预算员,审批人,汇总审批人都用三个人,kermit, fozzie,admin直接配在流程图中,实际上kermit和fozzie应会是不同的人,可以动态传入流程启动流程 2)节点是否需要汇总,可以根据在节点的参数isSum来进行动态的判定,是否执行汇总审批,程序只是展示效果,具体没有实现动态的,实现起来并不困难。 3)为了直观,节点参数都使用了中文,实际开发中肯定是编码形式   流程参数说明: 流程实例级别的参数有两个,一个填报期间period一个填报单位fillAccount 节点级别的配置参数有四个,三个固定的报表唯一编码sheetId,报表打开方式fillType和是否汇总isSum,一个在流程实例中动态生成的,当前节点的操作单位accountCode   1. 绘制流程图 总体配置   填写预算配置 审批预算配置 汇总审批预算配置   2. 测试程序 [java] view plaincopy 1. import java.util.ArrayList;   2. import java.util.HashMap;   3. import java.util.List;   4. import java.util.Map;   5. import org.activiti.engine.FormService;   6. import org.activiti.engine.ProcessEngine;   7. import org.activiti.engine.RepositoryService;   8. import org.activiti.engine.RuntimeService;   9. import org.activiti.engine.TaskService;   10. import org.activiti.engine.form.FormProperty;   11. import org.activiti.engine.task.Task;   12. import org.springframework.context.support.ClassPathXmlApplicationContext;   13. public class TestFormData {   14.     /**  15.      * @param args  16.      */   17.     public static void main(String[] args) {   18.         // 加载spring配置   19.         ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(   20.                 "applicationContext.xml");   21.         RuntimeService runtimeService = (RuntimeService) ctx   22.                 .getBean("runtimeService");   23.         ProcessEngine processEngine = (ProcessEngine) ctx   24.                 .getBean("processEngine");   25.         FormService formService = (FormService) ctx.getBean("formService");   26.         TaskService taskService = (TaskService) ctx.getBean("taskService");   27.         // 发布流程   28.         RepositoryService repositoryService = processEngine   29.                 .getRepositoryService();   30.         repositoryService.createDeployment()   31.                 .addClasspathResource("diagrams/formDataTest.bpmn").deploy();   32.         fill(runtimeService, formService, taskService);   33.         singleCheck(formService, taskService);   34.         sum(taskService, formService);   35.     }   36.     /**  37.      * 填报预算  38.      *  39.      * @param runtimeService  40.      * @param formService  41.      * @param taskService  42.      */   43.     private static void fill(RuntimeService runtimeService,   44.             FormService formService, TaskService taskService) {   45.         // 流程开始参数,设置填报期间   46.         Map p = new HashMap();   47.         p.put("period", "2013-07");   48.         // 生成3家单位填报   49.         for (int i = 0; i < 3; i++) {   50.             // 开始流程   51.             runtimeService.startProcessInstanceByKey("formDataTest", p);   52.             System.out   53.                     .println("=====================kermit开始填报=======================");   54.             // query kermit's tasks;   55.             List tasks = taskService.createTaskQuery()   56.                     .taskAssignee("kermit").list();   57.             for (Task task : tasks) {   58.                 if ("fill".equals(task.getTaskDefinitionKey())) {   59.                     // 设置填报人单位编码记录在节点   60.                     taskService.setVariableLocal(task.getId(), "accoutCode",   61.                             "A110" + i);   62.                     // 设置该流程实例的填报单位   63.                     taskService.setVariable(task.getId(), "fillAccount", "A110"   64.                             + i);   65.                     Map propMap = createMap(formService   66.                             .getTaskFormData(task.getId()).getFormProperties());   67.                     // 获取节点报表打开类型   68.                     String fillType = (String) propMap.get("fillType")   69.                             .getValue();   70.                     // 获取节点报表表单ID   71.                     String sheetId = (String) propMap.get("sheetId").getValue();   72.                     // 获取节点是否需要汇总参数   73.                     String isSum = (String) propMap.get("isSum").getValue();   74.                     // 获取节点填报单位编码   75.                     String accoutCode = (String) taskService.getVariableLocal(   76.                             task.getId(), "accoutCode");   77.                     // 获取流程填报单位编码   78.                     String fillAccount = (String) taskService.getVariable(   79.                             task.getId(), "fillAccount");   80.                     // 获取流程填报期间   81.                     String period = (String) taskService.getVariable(   82.                             task.getId(), "period");   83.                     // 打印填报信息   84.                     System.out.println("\t打开报表类型:" + fillType);   85.                     System.out.println("\t填报表单:" + sheetId);   86.                     System.out.println("\t填报期间:" + period);   87.                     System.out.println("\t是否汇总:" + isSum);   88.                     System.out.println("\t当前节点账号:" + accoutCode);   89.                     System.out.println("\t提交审批表单填报单位:" + fillAccount);   90.                     // 节点任务结束   91.                     taskService.complete(task.getId());   92.                     System.out   93.                             .println("=============kermit填写预算单任务已完成=====================");   94.                     System.out.println();   95.                 }   96.             }   97.         }   98.     }   99.     /**  100.      * 单个审核  101.      *  102.      * @param formService  103.      * @param taskService  104.      */   105.     private static void singleCheck(FormService formService,   106.             TaskService taskService) {   107.         System.out   108.                 .println("=====================fozzie开始单个审核=======================");   109.         // query fozzie's tasks;   110.         List tasks2 = taskService.createTaskQuery()   111.                 .taskAssignee("fozzie")   112.                 .processVariableValueEquals("period", "2013-07")   113.                 .processDefinitionKey("formDataTest").list();   114.         int count = 1;   115.         for (Task task : tasks2) {   116.             if ("check".equals(task.getTaskDefinitionKey())) {   117.                 System.out.println("\t审核第" + count + "个");   118.                 // 设置节点审批人单位编码   119.                 taskService.setVariableLocal(task.getId(), "accoutCode",   120.                         "A1199");   121.                 Map propMap = createMap(formService   122.                         .getTaskFormData(task.getId()).getFormProperties());   123.                 // 获取节点报表打开类型   124.                 String fillType = (String) propMap.get("fillType").getValue();   125.                 // 获取节点报表表单ID   126.                 String sheetId = (String) propMap.get("sheetId").getValue();   127.                 // 获取节点是否需要汇总参数   128.                 String isSum = (String) propMap.get("isSum").getValue();   129.                 // 获取节点填报单位编码   130.                 String accoutCode = (String) taskService.getVariableLocal(   131.                         task.getId(), "accoutCode");   132.                 // 获取流程填报单位编码   133.                 String fillAccount = (String) taskService.getVariable(   134.                         task.getId(), "fillAccount");   135.                 // 获取流程填报期间   136.                 String period = (String) taskService.getVariable(task.getId(),   137.                         "period");   138.                 // 打印填报信息   139.                 System.out.println("\t报表打开类型:" + fillType);   140.                 System.out.println("\t填报表单:" + sheetId);   141.                 System.out.println("\t填报期间:" + period);   142.                 System.out.println("\t是否汇总:" + isSum);   143.                 System.out.println("\t当前节点账号:" + accoutCode);   144.                 System.out.println("\t提交审批表单填报单位:" + fillAccount);   145.                 // 节点任务结束   146.                 taskService.complete(task.getId());   147.                 System.out.println("\t审核第" + count + "个完成");   148.                 System.out.println();   149.                 count++;   150.             }   151.         }   152.         System.out   153.                 .println("===================fozzie审批预算单任务已完成===================");   154.         System.out.println();   155.     }   156.     /**  157.      * 汇总审核  158.      *  159.      * @param taskService  160.      * @param formService  161.      */   162.     private static void sum(TaskService taskService, FormService formService) {   163.         System.out   164.                 .println("=======================admin开始汇总审核=====================");   165.         List tasks3 = taskService.createTaskQuery()   166.                 .taskAssignee("admin")   167.                 .processVariableValueEquals("period", "2013-07")   168.                 .processDefinitionKey("formDataTest").list();   169.         // 批量审批列表   170.         List completeTaskIdList = new ArrayList();   171.         // 获取节点报表打开类型   172.         String fillType = "";   173.         // 获取节点报表表单ID   174.         String sheetId = "";   175.         // 获取节点是否需要汇总参数   176.         String isSum = "";   177.         // 获取流程填报期间   178.         String period = "";   179.         for (Task task : tasks3) {   180.             if ("sum".equals(task.getTaskDefinitionKey())) {   181.                 // 设置节点审批人单位编码   182.                 taskService.setVariableLocal(task.getId(), "accoutCode",   183.                         "A1199");   184.                 // 获取流程填报单位编码   185.                 String fillAccount = (String) taskService.getVariable(   186.                         task.getId(), "fillAccount");   187.                 Map propMap = createMap(formService   188.                         .getTaskFormData(task.getId()).getFormProperties());   189.                 // 获取节点报表打开类型   190.                 fillType = (String) propMap.get("fillType").getValue();   191.                 // 获取节点报表表单ID   192.                 sheetId = (String) propMap.get("sheetId").getValue();   193.                 // 获取节点是否需要汇总参数   194.                 isSum = (String) propMap.get("isSum").getValue();   195.                 // 获取流程填报期间   196.                 period = (String) taskService.getVariable(task.getId(),   197.                         "period");   198.                 // 打印填报信息   199.                 System.out.println("\t提交汇总审批表单填报单位:" + fillAccount);   200.                 // 加入批量审批列表   201.                 completeTaskIdList.add(task.getId());   202.             }   203.         }   204.         System.out.println("\t报表打开类型:" + fillType);   205.         System.out.println("\t填报表单:" + sheetId);   206.         System.out.println("\t填报期间:" + period);   207.         System.out.println("\t是否汇总:" + isSum);   208.         System.out.println("\t全部审批通过");   209.         for (String t : completeTaskIdList) {   210.             taskService.complete(t);   211.         }   212.         System.out.println("=========admin汇总预算单任务已完成,汇总审批"   213.                 + completeTaskIdList.size() + "个单位=======");   214.     }   215.     private static Map createMap(List props) {   216.         Map re = new HashMap();   217.         for (FormProperty p : props) {   218.             re.put(p.getId(), p);   219.         }   220.         return re;   221.     }   222. }     3. 运行结果 =====================kermit开始填报=======================     打开报表类型:普通填报     填报表单:1     填报期间:2013-07     是否汇总:不汇总     当前节点账号:A1100     提交审批表单填报单位:A1100 =============kermit填写预算单任务已完成===================== =====================kermit开始填报=======================     打开报表类型:普通填报     填报表单:1     填报期间:2013-07     是否汇总:不汇总     当前节点账号:A1101     提交审批表单填报单位:A1101 =============kermit填写预算单任务已完成===================== =====================kermit开始填报=======================     打开报表类型:普通填报     填报表单:1     填报期间:2013-07     是否汇总:不汇总     当前节点账号:A1102     提交审批表单填报单位:A1102 =============kermit填写预算单任务已完成=====================   =====================fozzie开始单个审核=======================     审核第1个     报表打开类型:普通打开     填报表单:2     填报期间:2013-07     是否汇总:不汇总     当前节点账号:A1199     提交审批表单填报单位:A1100     审核第1个完成       审核第2个     报表打开类型:普通打开     填报表单:2     填报期间:2013-07     是否汇总:不汇总     当前节点账号:A1199     提交审批表单填报单位:A1101     审核第2个完成       审核第3个     报表打开类型:普通打开     填报表单:2     填报期间:2013-07     是否汇总:不汇总     当前节点账号:A1199     提交审批表单填报单位:A1102     审核第3个完成 ===================fozzie审批预算单任务已完成===================   =======================admin开始汇总审核=====================     提交汇总审批表单填报单位:A1100     提交汇总审批表单填报单位:A1101     提交汇总审批表单填报单位:A1102     报表打开类型:汇总到一张表打开     填报表单:3     填报期间:2013-07     是否汇总:汇总     全部审批通过 =========admin汇总预算单任务已完成,汇总审批3个单位=======   附applicationContext.xml,数据库使用MYSQL5 [html] view plaincopy 1.    2.    6.        8.            9.            10.            11.            12.        13.        15.            16.        17.        18.        19.            20.            21.            22.            23.            24.            25.        26.        27.            28.        29.        31.        33.        35.        37.        39.        41.        43.        44.     45.      项目引用jar包就是activiti-explorer里用的所有jar包+mysql的驱动   END

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档