combate activiti

Base de datos

  • 1. act_ge_ Tabla de datos generales, ge es la abreviatura de general
  • 2, tabla de datos históricos act_hi_, hola es la abreviatura de history, correspondiente a la interfaz HistoryService
  • 3. act_id_ Tabla de datos de identidad, id es la abreviatura de identidad, correspondiente a la interfaz IdentityService
  • 4, act_re_ tabla de almacenamiento de procesos, re es la abreviatura de repositorio, correspondiente a la interfaz RepositoryService, que almacena datos estáticos como la implementación del proceso y la definición del proceso
  • 5, tabla de datos de tiempo de ejecución act_ru_, ru es la abreviatura de tiempo de ejecución, correspondiente a la interfaz RuntimeService y la interfaz TaskService, que almacena datos dinámicos como instancias de proceso y tareas de usuario

Interfaz

Inserte la descripción de la imagen aquí

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
ManagementService managementService = processEngine.getManagementService();
IdentityService identityService = processEngine.getIdentityService();
HistoryService historyService = processEngine.getHistoryService();
FormService formService = processEngine.getFormService();
  • RepositoryService: proporciona una serie de API de implementación de procesos de gestión y definición de procesos.
  • RuntimeService: administre y controle instancias de proceso mientras el proceso se está ejecutando.
  • TaskService: administre tareas de proceso, como recordatorios de tareas, finalización de tareas y creación de tareas.
  • IdentityService: proporciona API para administrar datos de roles de proceso, que incluyen grupos de usuarios, usuarios y las relaciones entre ellos.
  • ManagementService: proporciona servicios para la gestión y el mantenimiento de motores de proceso.
  • HistoryService: opere sobre los datos históricos del proceso, incluidas las consultas y la eliminación de estos datos históricos.
  • FormService: servicio de formularios.

herramienta de diseño de procesos web

1. Implemente la aplicación de diseñador de procesos activiti-app.war proporcionada por Activiti en el directorio webapps de Tomcat.
2. Cree una nueva base de datos MySql. Modifique el archivo de configuración db.properties en el directorio activiti-app \ WEB-INF \ classes \ META-INF \ activiti-app para usar la base de datos MySql (la base de datos de memoria H2 se usa por defecto, y el modelo creado se perderá después del reinicio)
3. Abra el navegador e ingrese http: // localhost: 8080 / activiti-explorer, use el kermit del usuario y el kermit de la contraseña para iniciar sesión
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Diseñar un proceso de licencia

Creación e implementación del
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
proceso La información del proceso es la siguiente:
Inserte la descripción de la imagen aquí
Inicie la aplicación, que es de 1 día y 4 días respectivamente.
Inserte la descripción de la imagen aquí
Convierta a los usuarios del sistema en usuarios activos.

	User user=identityService.newUser(*sysUser.getLoginName()*);
				user.setLastName(*sysUser.getUserName()*);
				user.setFirstName*(sysUser.getUserName()*);
				user.setEmail(*sysUser.getEmail()*);
				identityService.saveUser(user);

Inserte la descripción de la imagen aquíCrear un grupo (correspondiente al grupo en el proceso de licencia)

	Group  group = identityService.newGroup(*idGroup.getId()*);
		group.setName(*idGroup.getName()*);
		group.setType(*idGroup.getType()*);
		identityService.saveGroup(group);

Inserte la descripción de la imagen aquí
Enlace de grupo de usuarios
Inserte la descripción de la imagen aquí
Ver tarea

	//查出当前登录用户所在的用户组
		List<Group> groups = identityService.createGroupQuery()
				.groupMember(String.valueOf(getLoginName())).list();
		List<String> groupNames = groups.stream()
				.map(group -> group.getId()).collect(Collectors.toList());
		  if (groups == null){
			return null;
		  }
//查询用户组的待审批请假流程列表
		List<Task> tasks = taskService.createTaskQuery()
				//指定任务
				//.processDefinitionKey(ActConstant.ProcessInstance_QingJia)
				.taskCandidateGroupIn(groupNames)
				.listPage(pageDomain.getPageNum() - 1, pageDomain.getPageSize());
  //获取下个节点 信息
		ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(newOaTask.getProcessInstanceId()).singleResult();
		if(pi==null){
			log.info("insertLeaveApply 流程 {} 结束" ,id);
		}else{
			Task nextTask = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
			log.info("insertLeaveApply 流程 {} 进行中 ,下个任务 {}",id,nextTask.getId());
		}

Inserte la descripción de la imagen aquí

(Aprobación del administrador): inicio de sesión del usuario para el rol de administrador [Esta ID de tarea es la primera vez que se aprueba, es diferente de la anterior, ignore]

//查询当前审批节点
        Task task = taskService.createTaskQuery().taskId(id).singleResult();
        if (ActConstant.ProcessResult_PASS.equals(auditResult)){  
           //通过
            //设置流程参数
            Map<String, Object> args = new HashMap<>();
            args.put("auditId", task.getId());
            //设置审批任务的执行人
            taskService.claim(task.getId(), getLoginName());
            //完成审批任务
            taskService.complete(task.getId(), args);
        }else{
          //  不通过
            runtimeService.deleteProcessInstance(task.getProcessInstanceId(), task.getId());
        }

Inserte la descripción de la imagen aquí

Después de eso, puede ver el flujo del proceso ...
Inserte la descripción de la imagen aquí
(Revisión del director) -Inicio de sesión del usuario del rol del director El
Inserte la descripción de la imagen aquí
proceso fluye a hr
Inserte la descripción de la imagen aquí
hr Inicie sesión para ver la tarea
Inserte la descripción de la imagen aquí
Revise un
Inserte la descripción de la imagen aquí

Springboot integrado

package com.platform.config;

import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.history.HistoryLevel;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

/**
 * 工作流相关配置   @author liuli
 * 7大接口
 * RepositoryService:提供一系列管理流程部署和流程定义的API。
 * RuntimeService:在流程运行时对流程实例进行管理与控制。
 * TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。
 * IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。
 * ManagementService:提供对流程引擎进行管理和维护的服务。
 * HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
 * FormService:表单服务。
 *
 * 1、act_ge_ 通用数据表,ge是general的缩写
 * 2、act_hi_ 历史数据表,hi是history的缩写,对应HistoryService接口
 * 3、act_id_ 身份数据表,id是identity的缩写,对应IdentityService接口
 * 4、act_re_ 流程存储表,re是repository的缩写,对应RepositoryService接口,存储流程部署和流程定义等静态数据
 * 5、act_ru_ 运行时数据表,ru是runtime的缩写,对应RuntimeService接口和TaskService接口,存储流程实例和用户任务等动态数据
 */
@Configuration
public class ActivitiConfig
{
    @Bean
    public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager)
    {
        SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration();
        processEngineConfiguration.setDataSource(dataSource);
        /**
         * false:false为默认值,设置为该值后,Activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配时,将在启动时抛出异常。
         * true:设置为该值后,Activiti会对数据库中所有的表进行更新,如果表不存在,则Activiti会自动创建。
         * create-drop:Activiti启动时,会执行数据库表的创建操作,在Activiti关闭时,执行数据库表的删除操作。
         * drop-create:Activiti启动时,执行数据库表的删除操作在Activiti关闭时,会执行数据库表的创建操作。
         */
        processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        processEngineConfiguration.setDatabaseType("mysql");
        processEngineConfiguration.setTransactionManager(transactionManager);
        // 流程图字体
        processEngineConfiguration.setActivityFontName("宋体");
        processEngineConfiguration.setAnnotationFontName("宋体");
        processEngineConfiguration.setLabelFontName("宋体");
        /**
         * 保存历史数据级别设置为full最高级别,便于历史数据的追溯
         * none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
         * activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
         * audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
         * full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
         */
        //使用系统业务自定义的
        processEngineConfiguration.setHistoryLevel(HistoryLevel.NONE);
        // 用户验证表改成使用视图
        processEngineConfiguration.setDbIdentityUsed(false);

        return processEngineConfiguration;
    }

    @Bean
    public ProcessEngineFactoryBean processEngine(ProcessEngineConfiguration processEngineConfiguration)
    {
        ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
        processEngineFactoryBean
                .setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration);
        return processEngineFactoryBean;
    }

    // 八大接口
    @Bean
    public RepositoryService repositoryService(ProcessEngine processEngine)
    {
        return processEngine.getRepositoryService();
    }

    @Bean
    public RuntimeService runtimeService(ProcessEngine processEngine)
    {
        return processEngine.getRuntimeService();
    }

    @Bean
    public TaskService taskService(ProcessEngine processEngine)
    {
        return processEngine.getTaskService();
    }

    @Bean
    public HistoryService historyService(ProcessEngine processEngine)
    {
        return processEngine.getHistoryService();
    }

    @Bean
    public FormService formService(ProcessEngine processEngine)
    {
        return processEngine.getFormService();
    }

    @Bean
    public IdentityService identityService(ProcessEngine processEngine)
    {
        return processEngine.getIdentityService();
    }

    @Bean
    public ManagementService managementService(ProcessEngine processEngine)
    {
        return processEngine.getManagementService();
    }

    @Bean
    public DynamicBpmnService dynamicBpmnService(ProcessEngine processEngine)
    {
        return processEngine.getDynamicBpmnService();
    }
}

Problemas de tiempo y espacio Este valor proporciona una idea aproximada y un código comercial clave; si no lo comprende, comuníquese conmigo para discutir

Materiales de referencia:
http://www.mossle.com/docs/activiti/index.html#activitiExplorer
https://juejin.im/post/5a4064365188252b145b4560
https://www.jianshu.com/p/701056e672a4

Publicado 51 artículos originales · ganado elogios 2 · Vistas 6374

Supongo que te gusta

Origin blog.csdn.net/wenwang3000/article/details/102859178
Recomendado
Clasificación