java代码制作activiti会签_activiti 动态自定义流程(包含会签流程)

1 packagecom.blk.back.service.impl;2

3 importjava.io.File;4 importjava.io.InputStream;5 import java.util.*;6

7 importjavax.transaction.Transactional;8

9 importcom.blk.integrated.pojo.SysUserRoleMappingPo;10 importlib.core.utils3.StringUtils;11 importlib.hibernate.dao.SimpleDao;12 importorg.activiti.bpmn.BpmnAutoLayout;13 import org.activiti.bpmn.model.*;14 importorg.activiti.bpmn.model.Process;15 importorg.activiti.engine.ActivitiException;16 importorg.activiti.engine.ProcessEngine;17 importorg.activiti.engine.ProcessEngines;18 importorg.activiti.engine.repository.Deployment;19 importorg.activiti.engine.runtime.ProcessInstance;20 importorg.activiti.engine.task.Task;21 importorg.apache.commons.io.FileUtils;22 importorg.springframework.beans.factory.annotation.Autowired;23 importorg.springframework.stereotype.Service;24

25 importcom.alibaba.fastjson.JSONArray;26 importcom.alibaba.fastjson.JSONObject;27 importcom.blk.back.service.SysWorkflowService;28 importcom.blk.core.util.RetKit;29 /**

30 *31 * @project cb-console-service32 *@authorsuruozhong33 * @description (工作流管理)34 * @date 2017年10月19日35 */

36 importcom.blk.integrated.dao.SysRoleDao;37 importcom.blk.integrated.dao.SysWorkflowDao;38 importcom.blk.integrated.dao.SysWorkflowStepDao;39 importcom.blk.integrated.pojo.SysRolePo;40 importcom.blk.integrated.pojo.SysWorkflow;41 importcom.blk.integrated.pojo.SysWorkflowStep;42 @Service43 @Transactional44 public class SysWorkflowServiceImpl implementsSysWorkflowService {45

46 @Autowired47 privateSysRoleDao sysRoleDao;48 @Autowired49 privateSysWorkflowDao sysWorkflowDao;50 @Autowired51 privateSysWorkflowStepDao sysWorkflowStepDao;52 @Autowired53 privateSimpleDao simpleDao;54    //获取角色下所有用户

55 private ListgetUserRole(String rolePkno){56 List list = simpleDao.getDelegate().createSQLQuery("select user_pkno from sys_user_role_mapping where role_pkno=:rolePkno").setParameter("rolePkno",rolePkno).list();57 returnlist;58 }59

60 @Override61 publicRetKit save(SysWorkflow model,String stepArr) {62

63 model.setCreateTime(newDate());64 sysWorkflowDao.getDelegate().save(model);65 JSONArray arr =JSONObject.parseArray(stepArr);66 List stepList = new ArrayList();67 for(int i=0; i

79 addFlowDeployment(model,stepList);80 returnRetKit.ok();81 }82

83 /**

84 *@Date:2017/11/2485 *@Description:创建流程并部署86 *87 */

88 protected void addFlowDeployment(SysWorkflow workflow,ListstepList){89 System.out.println(".........start...");90 ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();91

92 //1. 建立模型

93 BpmnModel model = newBpmnModel();94 Process process=newProcess();95 model.addProcess(process);96 process.setId("news");97 process.setName(workflow.getName());98 process.setDocumentation(workflow.getContent());99 //添加流程100 //开始节点

101 process.addFlowElement(createStartEvent());102 for(int i=0; i

105 if(step.getType()==1){106 //会签107 //加入并行网关-分支

108 process.addFlowElement(createParallelGateway("parallelGateway-fork"+i,"并行网关-分支"+i));109 //获取角色下所有用户

110 List userList =getUserRole(step.getRolePkno());111 for(int u=0; u

113 process.addFlowElement(createUserTask("userTask"+i+u,"并行网关分支用户审核节点"+i+u,userList.get(u)));114 }115 //并行网关-汇聚

116 process.addFlowElement(createParallelGateway("parallelGateway-join"+i,"并行网关到-汇聚"+i));117

118 }else{119 //普通流转120 //审核节点

121 process.addFlowElement(createGroupTask("task"+i,"组审核节点"+i,step.getRolePkno()));122 //回退节点

123 process.addFlowElement(createUserTask("repulse"+i,"回退节点"+i,"${startUserId}"));124 }125 }126 //结束节点

127 process.addFlowElement(createEndEvent());128

129 //连线

130 for(int y=0; y

133 if(step.getType()==1){134 //会签135 //判断是否第一个节点

136 if(y==0){137 //开始节点和并行网关-分支连线

138 process.addFlowElement(createSequenceFlow("startEvent", "parallelGateway-fork"+y, "开始节点到并行网关-分支"+y, ""));139 }else{140 //审核节点或者并行网关-汇聚到并行网关-分支141 //判断上一个节点是否是会签

142 if(stepList.get(y-1).getType()==1){143 process.addFlowElement(createSequenceFlow("parallelGateway-join"+(y-1),"parallelGateway-fork"+y,"并行网关-汇聚到并行网关-分支"+y,""));144 }else{145 process.addFlowElement(createSequenceFlow("task"+(y-1),"parallelGateway-fork"+y,"上一个审核节点到并行网关-分支"+y,""));146 }147 }148 //并行网关-分支和会签用户连线,会签用户和并行网关-汇聚连线

149 List userList =getUserRole(step.getRolePkno());150 for(int u=0; u

155 if(y==(stepList.size()-1)){156 process.addFlowElement(createSequenceFlow("parallelGateway-join"+y,"endEvent","并行网关-汇聚到结束节点",""));157 }158 }else{159 //普通流转160 //第一个节点

161 if(y==0){162 //开始节点和审核节点1

163 process.addFlowElement(createSequenceFlow("startEvent", "task"+y, "开始节点到审核节点"+y, ""));164 }else{165 //判断上一个节点是否会签

166 if(stepList.get(y-1).getType()==1){167 //会签168 //并行网关-汇聚到审核节点

169 process.addFlowElement(createSequenceFlow("parallelGateway-join"+(y-1),"task"+y,"并行网关-汇聚到审核节点"+y,""));170 }else{171 //普通

172 process.addFlowElement(createSequenceFlow("task"+(y-1),"task"+y,"审核节点"+(y-1)+"到审核节点"+y,"${flag=='true'}"));173 }174 }175 //是否最后一个节点

176 if(y==(stepList.size()-1)){177 //审核节点到结束节点

178 process.addFlowElement(createSequenceFlow("task"+y,"endEvent","审核节点"+y+"到结束节点","${flag=='true'}"));179 }180 //审核节点到回退节点

181 process.addFlowElement(createSequenceFlow("task"+y,"repulse"+y,"审核不通过-打回"+y,"${flag=='false'}"));182 process.addFlowElement(createSequenceFlow("repulse"+y,"task"+y,"回退节点到审核节点"+y,""));183 }184 }185

186 //2. 生成的图形信息

187 newBpmnAutoLayout(model).execute();188

189 //3. 部署流程

190 Deployment deployment = processEngine.getRepositoryService().createDeployment().addBpmnModel(process.getId()+".bpmn", model).name(process.getId()+"_deployment").deploy();191

192 // //4. 启动一个流程实例193 //ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(process.getId());194 //

195 // //5. 获取流程任务196 //List tasks = processEngine.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).list();197 //try{198 // //6. 将流程图保存到本地文件199 //InputStream processDiagram = processEngine.getRepositoryService().getProcessDiagram(processInstance.getProcessDefinitionId());200 //FileUtils.copyInputStreamToFile(processDiagram, new File("/deployments/"+process.getId()+".png"));201 //

202 // //7. 保存BPMN.xml到本地文件203 //InputStream processBpmn = processEngine.getRepositoryService().getResourceAsStream(deployment.getId(), process.getId()+".bpmn");204 //FileUtils.copyInputStreamToFile(processBpmn,new File("/deployments/"+process.getId()+".bpmn"));205 //}catch (Exception e){206 //e.printStackTrace();207 //}

208

209 System.out.println(".........end...");210 }211

212

213 //任务节点-组

214 protectedUserTask createGroupTask(String id, String name, String candidateGroup) {215 List candidateGroups=new ArrayList();216 candidateGroups.add(candidateGroup);217 UserTask userTask = newUserTask();218 userTask.setName(name);219 userTask.setId(id);220 userTask.setCandidateGroups(candidateGroups);221 returnuserTask;222 }223

224 //任务节点-用户

225 protectedUserTask createUserTask(String id, String name, String userPkno) {226 List candidateUsers=new ArrayList();227 candidateUsers.add(userPkno);228 UserTask userTask = newUserTask();229 userTask.setName(name);230 userTask.setId(id);231 userTask.setCandidateUsers(candidateUsers);232 returnuserTask;233 }234

235 //任务节点-锁定者

236 protectedUserTask createAssigneeTask(String id, String name, String assignee) {237 UserTask userTask = newUserTask();238 userTask.setName(name);239 userTask.setId(id);240 userTask.setAssignee(assignee);241 returnuserTask;242 }243

244 /*连线*/

245 protectedSequenceFlow createSequenceFlow(String from, String to,String name,String conditionExpression) {246 SequenceFlow flow = newSequenceFlow();247 flow.setSourceRef(from);248 flow.setTargetRef(to);249 flow.setName(name);250 if(StringUtils.isNotEmpty(conditionExpression)){251 flow.setConditionExpression(conditionExpression);252 }253 returnflow;254 }255

256 //排他网关

257 protectedExclusiveGateway createExclusiveGateway(String id,String name) {258 ExclusiveGateway exclusiveGateway = newExclusiveGateway();259 exclusiveGateway.setId(id);260 exclusiveGateway.setName(name);261 returnexclusiveGateway;262 }263

264 //并行网关

265 protectedParallelGateway createParallelGateway(String id,String name){266 ParallelGateway gateway = newParallelGateway();267 gateway.setId(id);268 gateway.setName(name);269 returngateway;270 }271

272 //开始节点

273 protectedStartEvent createStartEvent() {274 StartEvent startEvent = newStartEvent();275 startEvent.setId("startEvent");276 returnstartEvent;277 }278

279 /*结束节点*/

280 protectedEndEvent createEndEvent() {281 EndEvent endEvent = newEndEvent();282 endEvent.setId("endEvent");283 returnendEvent;284 }285

286 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值