jeecg-boot集成工作流(官方画布)

1.引入maven依赖jar( jeecg-boot-module-system\pom.xml)

	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-spring-boot-starter-basic</artifactId>
		<version>${activiti.version}</version>
		<exclusions>
			<exclusion>
				<artifactId>mybatis</artifactId>
				<groupId>org.mybatis</groupId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-security</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-rest</artifactId>
		<version>${activiti.version}</version>
		<exclusions>
			<exclusion>
				<groupId>org.springframework.security</groupId>
				<artifactId>spring-security-config</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework.security</groupId>
				<artifactId>spring-security-crypto</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework.security</groupId>
				<artifactId>spring-security-web</artifactId>
			</exclusion>

			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-log4j12</artifactId>
			</exclusion>
		</exclusions>
	</dependency>

	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-diagram-rest</artifactId>
		<version>${activiti.version}</version>
		<exclusions>
			<exclusion>
				<groupId>org.springframework.security</groupId>
				<artifactId>spring-security-config</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework.security</groupId>
				<artifactId>spring-security-crypto</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework.security</groupId>
				<artifactId>spring-security-web</artifactId>
			</exclusion>

			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-log4j12</artifactId>
			</exclusion>

		</exclusions>
	</dependency>
	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-modeler</artifactId>
		<version>${activiti.version}</version>
		<exclusions>
			<exclusion>
				<groupId>org.springframework.security</groupId>
				<artifactId>spring-security-config</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework.security</groupId>
				<artifactId>spring-security-crypto</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework.security</groupId>
				<artifactId>spring-security-web</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-explorer</artifactId>
		<version>${activiti.version}</version>
		<exclusions>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-log4j12</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.vaadin.addons</groupId>
				<artifactId>dcharts-widget</artifactId>
			</exclusion>

		</exclusions>
	</dependency>

	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-json-converter</artifactId>
		<version>${activiti.version}</version>
	</dependency>

	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-spring</artifactId>
		<version>${activiti.version}</version>
		<exclusions>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-log4j12</artifactId>
			</exclusion>
		</exclusions>
	</dependency>

	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-engine</artifactId>
		<version>${activiti.version}</version>
		<exclusions>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-log4j12</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.mybatis</groupId>
				<artifactId>mybatis</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
<properties>
	<activiti.version>5.22.0</activiti.version>
</properties>

2.yml修改 application-dev.yml

spring:
  activiti:
    check-process-definitions: false
    #启用作业执行器
    async-executor-activate: false
    #启用异步执行器
    job-executor-activate: false
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure,org.activiti.spring.boot.SecurityAutoConfiguration
  shiro:
     excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/service/**,/act/model/graphHistoryProcessInstance,/act/model/graphProcessDiagram/**

3.修改启动类(JeecgApplication.java)

package org.jeecg;

import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.scan.StandardJarScanner;
import org.jeecg.common.util.oConvertUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * 单体启动类(采用此类启动项目为单体模式)
 */
@Slf4j
@SpringBootApplication
public class JeecgSystemApplication extends SpringBootServletInitializer {

    @Autowired
    private DataSource dataSource;


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(JeecgSystemApplication.class);
    }

    public static void main(String[] args) throws UnknownHostException {
        ConfigurableApplicationContext application = SpringApplication.run(JeecgSystemApplication.class, args);
        Environment env = application.getEnvironment();
        String ip = InetAddress.getLocalHost().getHostAddress();
        String port = env.getProperty("server.port");
        String path = oConvertUtils.getString(env.getProperty("server.servlet.context-path"));
        log.info("\n----------------------------------------------------------\n\t" +
                "Application Jeecg-Boot is running! Access URLs:\n\t" +
                "Local: \t\thttp://localhost:" + port + path + "/\n\t" +
                "External: \thttp://" + ip + ":" + port + path + "/\n\t" +
                "Swagger文档: \thttp://" + ip + ":" + port + path + "/doc.html\n" +
                "----------------------------------------------------------");

    }

    /**
     * tomcat-embed-jasper引用后提示jar找不到的问题
     */
    @Bean
    public TomcatServletWebServerFactory tomcatFactory() {

        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
            }
        };

        factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
            @Override
            public void customize(Connector connector) {
                connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
                connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
            }
        });

        return factory;
    }

    /*
        @AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE)
    */
    @Bean
    public SpringProcessEngineConfiguration springProcessEngineConfiguration() {
        SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();
        configuration.setDataSource(this.dataSource);
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        //作业执行器
        configuration.setJobExecutorActivate(false);
        configuration.setDbIdentityUsed(false);
        configuration.setTransactionManager(transactionManager());
        configuration.setLabelFontName("宋体");
        configuration.setActivityFontName("宋体");
        configuration.setAnnotationFontName("宋体");
/*        Map<Object, Object> beans = new HashMap<>();
        beans.put("sysBaseAPI", sysBaseAPI);
        configuration.setBeans(beans);*/
        configuration.getCommandExecutor();
        return configuration;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(this.dataSource);
    }


}

4.启动后端项目后查看工作流表是否生成

act_**(共21个表)  如果启动报错需要在数据库链接的url 拼接&nullCatalogMeansCurrent=true

5.所需库表创建(库表创建sql文件夹下有对应的sql文件)

  1. act_expression 流程表达式
  2. act_listener 流程监听
  3. act_model_xml 流程模块相关
  4. act_leave 请假demo 相关
  5. bpmn_model_relation 流程业务关联
  6. base_check_record 流程审核记录(可自己封装)
  7. act_id_group (视图)
  8. act_id_membership(视图)
  9. act_id_user(视图)

至此 系统的工作流环境已经搭建完成


6.代码迁移–复制源码包中相应的文件至所需要集成的项目中

后端项目( jeecg-boot-module-sysytem)

  • org.jeecg.modules.act 包下的所有内容 工作流核心内容
  • org.jeecg.modules.base 工作流内容封装
  • -org.jeecg.modules.leave 开发工作流 demo
  • 添加代码(jeecg-boot-base-common)org.jeecg.common.constant.CommonConstant
    public static final String BPM_STATUS_1 = "1";
    public static final String BPM_STATUS_2 = "2";
  • 添加代码(jeecg-boot-base-common)org.jeecg.common.system.api.ISysBaseAPI
    List getRoleByCurrUser();
    String getRole();
    public List<ComboModel> queryAllUser();
  • 添加代码( jeecg-boot-module-sysytem)org.jeecg.modules.system.service.impl.SysBaseApiImpl.java
  @Override
    public List getRoleByCurrUser() {
        LoginUser loginUser = LoginUserUtil.getLoginUser();
        return sysUserRoleMapper.getRoleByCurrUser(loginUser.getId());
    }
        /**
     * 获取当前用户角色对应的flag
     * <p>
     * 具体对应关系  请查看RoleEnum类
     *
     * @return
     */
    @Override
    public String getRole() {
        LoginUser loginUser = LoginUserUtil.getLoginUser();
        List<String> roles = sysUserRoleMapper.getRoleByUserName(loginUser.getUsername());
        if (roles == null) {
            log.error("当前用户角色未设置");
        }
        String code = roles.get(0);
        return RoleEnum.getFlagByCode(code);
    }
    //注意这里是覆盖这个方法
	@Override
	public List<ComboModel> queryAllRole() {
		List<ComboModel> list = new ArrayList<ComboModel>();
		List<SysRole> roleList = roleMapper.selectList(new QueryWrapper<SysRole>());
		for(SysRole role : roleList){
			ComboModel model = new ComboModel();
			model.setTitle(role.getRoleName());
			model.setRoleCode(role.getRoleCode());
			model.setId(role.getId());
			list.add(model);
		}
		return list;
	}


  • 添加代码( jeecg-boot-module-sysytem)org.jeecg.modules.system.mapper.SysUserRoleMapper
	@Select("select * from sys_role where id in (select role_id from sys_user_role where user_id = #{id})")
	List<SysRole> getRoleByCurrUser(@Param("id") String id);

前端项目(ant-design-vue-jeecg)

  • ant-design-vue-jeecg\public\plug-in 下所有内容官方工作流画布(在线设计)
  • 画布需要调整glob.js 这是设置全局变量的地方 需要调整为自己的项目路径
  • ant-design-vue-jeecg\src\views\leave 工作流开发demo 前端项目内容
  • ant-design-vue-jeecg\src\views\act 流程设计器的前端内容
  • ant-design-vue-jeecg\src\views\base 封装内容页面

至此所以的代码部分已完成

系统菜单配置sql

INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1263284789228634114', '1258947305950683137', '流程表达式', '/act/actExpression', 'act/ActExpressionList', NULL, NULL, 1, NULL, '1', 3.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-05-21 09:45:39', 'admin', '2020-06-10 15:20:59', 0, 0, '1', 0);
INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1263284529450221570', '1258947305950683137', '流程监听', '/act/actListener', 'act/ActListenerList', NULL, NULL, 1, NULL, '1', 2.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-05-21 09:44:37', 'admin', '2020-06-10 15:20:50', 0, 0, '1', 0);
INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1258947496657297409', '1258947305950683137', '流程模型', '/act/actEesModel', 'act/ActEesModelList', NULL, NULL, 1, NULL, '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-05-09 10:30:48', NULL, NULL, 0, 0, '1', 0);
INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1258947305950683137', '', '流程设计', '/act', 'layouts/RouteView', NULL, NULL, 0, NULL, '1', 0.10, 0, 'cluster', 1, 0, 0, 0, NULL, 'admin', '2020-05-09 10:30:02', 'admin', '2020-06-10 15:20:32', 0, 0, '1', 0);
INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1251893935704489985', '1251806894186639361', '任务待办', '/leave/actLeave/taskList', 'leave/ActLeaveListTasks', NULL, NULL, 1, NULL, '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-04-19 23:22:28', 'admin', '2020-04-19 23:27:53', 0, 0, '1', 0);
INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1251807473092866049', '1251806894186639361', '请假申请', '/leave/actLeave', 'leave/ActLeaveList', NULL, NULL, 1, NULL, '1', 1.00, 0, '', 1, 1, 0, 0, NULL, 'admin', '2020-04-19 17:38:54', 'admin', '2020-04-19 17:46:12', 0, 1, '1', 0);
INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1251806894186639361', NULL, '员工请假', '/leave', 'layouts/RouteView', NULL, NULL, 0, NULL, '1', 1.00, 0, 'dashboard', 1, 0, 0, 0, NULL, 'admin', '2020-04-19 17:36:36', NULL, NULL, 0, 0, '1', 0);
 
INSERT INTO sys_role(id, role_name, role_code, description, create_by, create_time, update_by, update_time) VALUES ('1263727231761461249', '部门领导', 'leader', NULL, 'admin', '2020-05-22 15:03:46', NULL, NULL);
INSERT INTO  sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type) VALUES ('1263026704463478785', '监听类型', 'listener_type', '', 0, 'admin', '2020-05-20 16:40:06', NULL, NULL, 0);
INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263026795177885697', '1263026704463478785', '执行监听', '1', '', 1, 1, 'admin', '2020-05-20 16:40:29', NULL, NULL);
INSERT INTO  sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263026832704323585', '1263026704463478785', '任务监听', '2', '', 1, 1, 'admin', '2020-05-20 16:40:37', NULL, NULL);

INSERT INTO  sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type) VALUES ('1263027621074092033', '值类型', 'listener_value_type', '', 0, 'admin', '2020-05-20 16:43:45', NULL, NULL, 0);



INSERT INTO  sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263027979271847937', '1263027621074092033', 'Java类', '1', '', 1, 1, 'admin', '2020-05-20 16:45:11', NULL, NULL);
INSERT INTO  sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263028024931041281', '1263027621074092033', '表达式', '2', '', 1, 1, 'admin', '2020-05-20 16:45:22', NULL, NULL);
INSERT INTO  sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263028077640859649', '1263027621074092033', 'Spring表达式', '3', '', 1, 1, 'admin', '2020-05-20 16:45:34', NULL, NULL);

INSERT INTO  sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type) VALUES ('1263027054192934913', 'Event属性', 'listener_event', '', 0, 'admin', '2020-05-20 16:41:30', NULL, NULL, 0);


INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263027127576477697', '1263027054192934913', 'start', 'start', '', 1, 1, 'admin', '2020-05-20 16:41:48', NULL, NULL);
INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263027156718501890', '1263027054192934913', 'end', 'end', '', 1, 1, 'admin', '2020-05-20 16:41:55', NULL, NULL);
INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263027203778592769', '1263027054192934913', 'take', 'take', '', 1, 1, 'admin', '2020-05-20 16:42:06', NULL, NULL);
INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263027256421302274', '1263027054192934913', 'create', 'create', '', 1, 1, 'admin', '2020-05-20 16:42:18', NULL, NULL);
INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263027429314707457', '1263027054192934913', 'assignment', 'assignment', '', 1, 1, 'admin', '2020-05-20 16:43:00', NULL, NULL);
INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263027506066276354', '1263027054192934913', 'complete', 'complete', '', 1, 1, 'admin', '2020-05-20 16:43:18', NULL, NULL);




INSERT INTO   onl_cgreport_head ( id ,  code ,  name ,  cgr_sql ,  return_val_field ,  return_txt_field ,  return_type ,  db_source ,  content ,  update_time ,  update_by ,  create_time ,  create_by ) VALUES ('1263724407833047041', 'models', '工作流模块', 'SELECT table_name,table_txt FROM onl_cgform_head', NULL, NULL, '1', '', NULL, '2020-06-19 15:55:34', 'admin', '2020-05-22 14:52:32', 'admin');
INSERT INTO  onl_cgreport_item(id, cgrhead_id, field_name, field_txt, field_width, field_type, search_mode, is_order, is_search, dict_code, field_href, is_show, order_num, replace_val, create_by, create_time, update_by, update_time) VALUES ('1263724408176979969', '1263724407833047041', 'table_name', 'table_name', NULL, 'String', NULL, 0, 1, '', '', 1, 1, '', 'admin', '2020-06-19 15:55:34', NULL, NULL);
INSERT INTO  onl_cgreport_item(id, cgrhead_id, field_name, field_txt, field_width, field_type, search_mode, is_order, is_search, dict_code, field_href, is_show, order_num, replace_val, create_by, create_time, update_by, update_time) VALUES ('1263724408197951489', '1263724407833047041', 'table_txt', 'table_txt', NULL, 'String', NULL, 0, 1, '', '', 1, 2, '', 'admin', '2020-06-19 15:55:34', NULL, NULL);


INSERT INTO onl_cgform_head(id,table_name,table_type,table_version,table_txt,is_checkbox,is_db_synch,is_page,is_tree,id_sequence,id_type,query_mode,relation_type,sub_table_str,tab_order_num,tree_parent_id_field,tree_id_field,tree_fieldname,form_category,form_template,form_template_mobile,scroll,copy_version,copy_type,physic_id,update_by,update_time,create_by,create_time,theme_template) VALUES ('7f8f9836289d41eb826a39c60b179e56', 'act_leave', 1, 4, '员工请假', 'Y', 'Y', 'Y', 'N', NULL, 'UUID', 'single', NULL, NULL, NULL, NULL, NULL, NULL, 'bdfl_ptbd', '1', NULL, 0, NULL, 0, NULL, 'admin', '2020-04-19 17:58:19', 'admin', '2020-04-17 19:41:47', 'normal');


INSERT INTO sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type) VALUES ('1263763489367830529', '请假类型', 'leave_type', '', 0, 'admin', '2020-05-22 17:27:50', NULL, NULL, 0);


INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263763560083795969', '1263763489367830529', '事假', '3', '3', 3, 1, 'admin', '2020-05-22 17:28:07', 'admin', '2020-06-02 15:28:28');
INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1263763589448118273', '1263763489367830529', '婚嫁', '2', '', 2, 1, 'admin', '2020-05-22 17:28:14', 'admin', '2020-06-02 15:28:21');
INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1267719362613227521', '1263763489367830529', '病假', '1', '', 1, 1, 'admin', '2020-06-02 15:27:04', 'admin', '2020-06-02 15:28:04');
INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1267719763710324737', '1263763489367830529', '产假', '4', '', 4, 1, 'admin', '2020-06-02 15:28:39', NULL, NULL);


启动项目 给相应的角色配置完成 菜单 就可以看到 在线流程设计器了

  • 导入流程模型 leavebmn.xml
  • 发布&配置流程 然后就可以试试demo流程咯 (另外注意 sql中没有对应的角色 请根据流程图自行添加哦)

至此全部结束
下面介绍一下开发过程中的使用
WorkFlow* 对应开头的是进行了封 要使用此封装请在对应实体继承WorkFlowEntity
使用自定义表达式时请在springboot入口注入使用的springbean 监听这里没有封装(还请自行封装)

演示地址

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞侠a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值