123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- package com.ruoyi.project.activiti.service.impl;
- import com.ruoyi.common.utils.StringUtils;
- import com.ruoyi.project.activiti.domain.MyProcessDefinition;
- import com.ruoyi.project.activiti.domain.MyTask;
- import com.ruoyi.project.activiti.domain.SelectVo;
- import org.activiti.bpmn.model.BpmnModel;
- import org.activiti.engine.*;
- import org.activiti.engine.form.FormProperty;
- import org.activiti.engine.form.TaskFormData;
- import org.activiti.engine.identity.Group;
- import org.activiti.engine.identity.User;
- import org.activiti.engine.repository.DeploymentBuilder;
- import org.activiti.engine.repository.Model;
- import org.activiti.engine.repository.ProcessDefinition;
- import org.activiti.engine.repository.ProcessDefinitionQuery;
- import org.activiti.engine.runtime.ProcessInstance;
- import org.activiti.engine.task.Task;
- import org.apache.commons.lang3.builder.ToStringBuilder;
- import org.apache.commons.lang3.builder.ToStringStyle;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.util.CollectionUtils;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.*;
- import java.util.stream.Collectors;
- import java.util.zip.ZipInputStream;
- @Service
- public class ProcessDefinitionServiceImpl {
- private static final Logger LOGGER = LoggerFactory.getLogger(ProcessDefinitionServiceImpl.class);
- @Autowired
- private RuntimeService runtimeService;
- @Autowired
- private TaskService taskService;
- @Autowired
- private FormService formService;
- @Autowired
- private RepositoryService repositoryService;
- @Autowired
- private IdentityService identityService;
- @Transactional
- public void startProcess(String assignee) {
- runtimeService.startProcessInstanceByKey("oneTaskProcess");
- }
- public List<Task> getTasks(String assignee) {
- return taskService.createTaskQuery().taskAssignee(assignee).list();
- }
- /**
- * 分页查询流程定义文件
- *
- * @return
- */
- public List<ProcessDefinition> listProcessDefinition() {
- ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
- List<ProcessDefinition> processDefinitions = processDefinitionQuery.listPage(0, 100);
- return processDefinitions;
- }
- @Transactional
- public void deployProcessDefinition(String filePath) throws FileNotFoundException {
- if (StringUtils.isNotBlank(filePath)) {
- if (filePath.endsWith(".zip")) {
- ZipInputStream inputStream = new ZipInputStream(new FileInputStream(filePath));
- repositoryService.createDeployment()
- .addZipInputStream(inputStream)
- .deploy();
- } else if (filePath.endsWith(".bpmn") || filePath.endsWith(".bpmn20.xml")) {
- repositoryService.createDeployment()
- .addInputStream(filePath, new FileInputStream(filePath))
- .deploy();
- }
- }
- }
- /**
- * 部署流程文件
- *
- * @param file
- * @throws IOException
- */
- @Transactional
- public void deployProcessDefinition(MultipartFile file) throws IOException {
- InputStream inputStream = file.getInputStream();
- String originalFilename = file.getOriginalFilename();
- DeploymentBuilder deployment = repositoryService.createDeployment();
- deployment.addInputStream(originalFilename, inputStream).deploy();
- }
- @Transactional
- public int deleteProcessDeploymentByIds(List<String> deploymentIds) {
- int counter = 0;
- for (String deploymentId : deploymentIds) {
- List<ProcessInstance> instanceList = runtimeService.createProcessInstanceQuery()
- .deploymentId(deploymentId)
- .list();
- if (!CollectionUtils.isEmpty(instanceList)) {
- // 跳过存在流程实例的流程定义
- continue;
- }
- // true 表示级联删除引用,比如 act_ru_execution 数据
- repositoryService.deleteDeployment(deploymentId, true);
- counter++;
- }
- return counter;
- }
- public List<MyProcessDefinition> list(Integer pageNum, Integer pageSize) {
- List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().listPage((pageNum - 1) * pageSize, pageSize);
- List<MyProcessDefinition> collect = list.stream().map(x -> {
- MyProcessDefinition myProcessDefinition = new MyProcessDefinition();
- myProcessDefinition.setId(x.getDeploymentId());
- myProcessDefinition.setProcessId(x.getId());
- myProcessDefinition.setKey(x.getKey());
- myProcessDefinition.setName(x.getName());
- myProcessDefinition.setVersion(x.getVersion());
- myProcessDefinition.setDescription(x.getDescription());
- return myProcessDefinition;
- }).collect(Collectors.toList());
- return collect;
- }
- public void start() {
- startModel();
- // testUserAndGroup();
- }
- private void testUserAndGroup() {
- User user1 = identityService.newUser("user1"); //初始化用户user1
- user1.setEmail("user1@111.com");
- User user2 = identityService.newUser("user2");
- user2.setEmail("user2@111.com");
- identityService.saveUser(user1); //将用户保存
- identityService.saveUser(user2);
- Group group1 = identityService.newGroup("group1"); //初始化用户组group1
- identityService.saveGroup(group1);
- Group group2 = identityService.newGroup("group2");
- identityService.saveGroup(group2);
- identityService.createMembership("user1", "group1"); //构建用户与用户组的关系
- identityService.createMembership("user2", "group1");
- identityService.createMembership("user1", "group2");
- User user1_2 = identityService.createUserQuery().userId("user1").singleResult(); //将用户名修改,版本号改为2
- user1_2.setLastName("user1_2");
- identityService.saveUser(user1_2);
- List<User> userList = identityService.createUserQuery().memberOfGroup("group1").listPage(0, 100);//查询用户列表
- for (User user : userList) { //查询group1组中的所有用户
- LOGGER.info("group1的user : [{}]", ToStringBuilder.reflectionToString(user, ToStringStyle.JSON_STYLE)); //按照json格式输出
- }
- List<Group> groupList = identityService.createGroupQuery().groupMember("user1").listPage(0, 100);
- for (Group group : groupList) { //查询user1用户所属的组
- LOGGER.info("user1的group : [{}]", ToStringBuilder.reflectionToString(group, ToStringStyle.JSON_STYLE));
- }
- }
- private void startModel() {
- //获取流程定义对象
- ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();
- //启动运行流程
- ProcessInstance taskService = getTaskService(processDefinition);
- //处理流程
- runProcess(taskService);
- }
- private ProcessInstance getTaskService(ProcessDefinition processDefinition) {
- ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId());
- LOGGER.info("流程启动 {}", processInstance);
- return processInstance;
- }
- private void runProcess(ProcessInstance processInstance) {
- //部署结束继续输入
- while (processInstance != null && !processInstance.isEnded()) {
- Scanner scanner = new Scanner(System.in);
- List<Task> list = taskService.createTaskQuery().list();
- for (Task task : list) {
- LOGGER.info("待处理任务[{}]", task.getName());
- //获取表单数据
- TaskFormData taskFormData = formService.getTaskFormData(task.getId());
- List<FormProperty> formProperties = taskFormData.getFormProperties();
- Map<String, Object> inparms = new HashMap<String, Object>();
- String s = null;
- for (FormProperty formProperty : formProperties) {
- String name = formProperty.getName();
- LOGGER.info("请输入[{}]", name);
- s = scanner.nextLine();
- inparms.put(formProperty.getId(), s);
- LOGGER.info("你输入的是[{}]", s);
- }
- //将参数提交到userTask的表单中
- taskService.complete(task.getId(), inparms);
- //同步流程状态
- processInstance = runtimeService
- .createProcessInstanceQuery()
- .processInstanceId(processInstance.getId())
- .singleResult();
- }
- LOGGER.info("待处理任务数[{}]", list.size());
- }
- }
- public List<SelectVo> select() {
- List<SelectVo> collect=new ArrayList<>();
- List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
- if(!StringUtils.isNull(list)){
- collect = list.stream().map(x -> {
- SelectVo selectVo = new SelectVo();
- int version = x.getVersion();
- String id = x.getId();
- selectVo.setText(x.getName()+" v"+version);
- selectVo.setValue(id);
- return selectVo;
- }).collect(Collectors.toList());
- }
- return collect;
- }
- public BpmnModel get(String id) {
- ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(id).singleResult();
- BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
- return bpmnModel;
- }
- }
|