基于springboot的activiti 工作流后台管理系统

发布时间:2019-11-11
技术:springboot2.0.6 apache-maven-3.5.4 activiti5.22 jdk 1.8.0 mysql5.7.19 bootstrap3.3.7 layer3.3.1

概述

springboot 整合 activiti5.22 实现工作流的统一后台管理 提供流程定义的增删改查导入导出等功能,流程实例的运行状态查询。整合了 activiti-explore项目的流程编辑器,支持图形化的流程绘制。提供流程操作rest 接口 便于后期springcloud微服务改造以后通过http调用开启流程和获取流程实例信息等操作。

详细

1.运行效果:

登录界面:

捕获.png


流程定义管理页面:

image.png


流程实例管理页面:

image.png

流程编辑页面:

image.png


流程实例状态页面,支持当前审批节点高亮,并显示流程历史审批信息:image.png


2.实现步骤

确保本地安装jdk1.8.0 环境 以及 mysql5.7.19 利用mysqlworkbench 创建本地数据库,运行activiti5.22 database-create目录中的三个sql 创建activiti 默认的表结构:

image.png

再运行项目resources->sql目录下的sql语句创建其余的项目中必须的数据库表:

包括:act_hi_ispass,act_system,model_detail,sa_user,system_model 五个表


数据库创建完成后,打开intellij idea 导入项目文件 file->open

image.png


打开application.yml文件修改你的数据库连接用户名和密码:

image.png


在sa_user表中创建一个测试用户便于登录,等待maven 依赖下载完毕以后 启动项目 访问localhost:8889/login 即可进入登录界面。


3.项目主要配置:

1.maven依赖:

image.pngimage.png


image.png

image.png

image.png


2.springboot配置:

debug: true
#前缀相同的配置项,idea会自动进行归纳
server:
 port: 8889
 servlet:
   context-path: /
 tomcat:
   basedir: /tmp/tomcat


spring:
  application:
    name: activitiservice
  mvc:
    date-format: yyyy-MM-dd
#    static-path-pattern: /static/**
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/activitiservice?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
    password: 1
#    type: com.alibaba.druid.pool.DruidDataSource

  activiti:
    database-schema-update: true
    check-process-definitions: false
    process-definition-location-prefix: classpath:/processes/
#    process-definition-location-suffixes:
#      - **.bpmn
#      - **.bpmn20.xml
    history-level: full
    async-executor-activate: false

  thymeleaf:
    cache: false
  transaction:
    rollback-on-commit-failure: true
  servlet:
    multipart:
      max-file-size: -1
      max-request-size: -1

mybatis:
  mapper-locations: classpath:mybatis/mapper/*.xml
  type-aliases-package: com.xyc.entity,com.xyc.vo
  config-location: classpath:mybatis/mybatis-config.xml

logging:
#  level:
#   com.xyc.dao.mapper: debug
#   org.activiti.engine.impl.persistence.entity: trace
  config: classpath:logback-spring.xml
#  path: d:/log/activitiService.log

pagehelper:
  helper-dialect: mysql
  reasonable: true

3.mybatis配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="logImpl" value="slf4j"/>
        <setting name="cacheEnabled" value="true"/>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>
</configuration>

4.slf4j配置:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
    <!-- appender是configuration的子节点,是负责写日志的组件。 -->
    <!-- ConsoleAppender:把日志输出到控制台 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
        <encoder>
            <pattern>%d %p (%file:%line\)- %m%n</pattern>
            <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="STDOUT2" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <pattern>%d %p (%file:%line\)- %m%n</pattern>
            <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
    <!-- 1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是 activitiService.log -->
    <!--             2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--<File>d:/activitiLog/activitiService.log</File>-->
        <File>activitiLog/activitiService.log</File>
        <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
        <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
            <!-- 文件名:log/sys.2017-12-05.0.log -->
            <fileNamePattern>log/activitiService.%d.%i.log</fileNamePattern>
            <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- maxFileSize:这是活动文件的大小,默认值是10MB -->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <!-- pattern节点,用来设置日志的输入格式 -->
            <pattern>%d %p (%file:%line\)- %m%n</pattern>
            <!-- 记录日志的编码 -->
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 输出的日志级别是大于或等于info级别的日志信息- -->
            <level>info</level>
        </filter>
    </appender>

    <appender name="FILE2" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--<File>d:/activitiLog/activitiService2.log</File>-->
        <File>activitiLog/activitiService2.log</File>
        <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
        <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
            <!-- 文件名:log/sys.2017-12-05.0.log -->
            <fileNamePattern>log/activitiService2.%d.%i.log</fileNamePattern>
            <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- maxFileSize:这是活动文件的大小,默认值是10MB -->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <!-- pattern节点,用来设置日志的输入格式 -->
            <pattern>%d %p (%file:%line\)- %m%n</pattern>
            <!-- 记录日志的编码 -->
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 输出的日志级别是大于或等于debug级别的日志信息- -->
            <level>debug</level>
        </filter>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT2" />
        <appender-ref ref="FILE2" />
        <!--<appender-ref ref="STDOUT" />-->
        <!--<appender-ref ref="FILE" />-->
    </root>

    <logger name="com.xyc" level="debug" additivity="false">
        <appender-ref ref="STDOUT2" />
        <appender-ref ref="FILE2" />
    </logger>

    <logger name="org.activiti.engine.impl.persistence.entity" level="trace" additivity="false">
        <appender-ref ref="STDOUT2" />
        <appender-ref ref="FILE2" />
    </logger>

    <!--com.xyc.dao.mapper: debug-->
    <!--org.activiti.engine.impl.persistence.entity: trace-->
    <!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
    <!-- com.appley为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
    <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->
    <!--<logger name="com.appleyk" level="DEBUG">-->
        <!--<appender-ref ref="syslog" />-->
    <!--</logger>-->
</configuration>

4.项目目录结构

image.png

image.png

具体功能实现代码就不粘贴了,可以自己看项目文件


本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
手机上随时阅读、收藏该文章 ?请扫下方二维码