工作流

大约 21 分钟

工作流

一、流程中心服务部署

部署文件结构目录

文件目录

初始化数据库

执行SQL脚本文件 /bpm/db/abps.sql

修改配置信息

配置文件地址/bpm/config/application-pro.yml

  • 更改数据库连接信息,如下图所示:
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://10.0.32.106:3306/abps?allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8&useLegacyDatetimeCode=false
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
  • 更改成流程引擎服务(本服务)部署后发布的地址
#统一权限登录后回转的地址
currentAppUrl: http://10.0.32.98:8200
  • 修改统一权限地址及流程服务应用id和私钥
drap_platform:
  sso_server:
    rootpath: http://10.0.34.3:9009
    rootpath_proxy: http://10.0.34.3:9009
#统一权限App_id
app_id: Q610c7e032e03000
#统一权限私钥
private_key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCoBlajHmeFF6G2JerWusDFEkfVDTR09MiM9A4S6jQD23uSiQv3TICtXPGIDmFMsWSZBwseCW6cCxsTj40mBiGPWTUA0/2kBEkkoaD5Zy/u8/6atRKnfR0Tf8WTuOXwIHhum8dCSbiB33Mq/VJUTO0RBTlG8XlHjVlzj9deRrguEF9pgy2bgEo3WuWFylWQjg86BYndEYB3/YXBhB0gGRtwdiOc2Pe0rUyjgfSgHKXU0wsTEhGY9+97iBmCkpABCCuemdchG5ALT/lq0mOxhCS/6+dannxDAGZ6NSiOIEq6RRHfnZxvzGb9ZqfHaLTLwq6kCaRCd8lDj1SmGdCmdW5PAgMBAAECggEAAv3x5v+wmjccgxDTyLUUn62+p7WPfJGrTI8//Og8uuDap3ZXRzUOiYfBKUoQQ3xZLTxp30QNuyubdNK2kbnEOTg+cGBWAOiuoL9cDXTf7qJbo0ecKG1a6jD5RLMjLQ529olBmBWV+oIPG/Hc2HFyOz5bkb7VCQgkUqF6FUyvFOrgQXVw5gll8y96mu+TaKLm/KHgHRLw0juMYVChhBYFOsfETdD5OEQWmALfD8FOgNp2XNFz4o+pyVY8gcRLj04vbqtsQwP2+NecV6750pW7Fq5zNMe4W11xNGAChJ317VO3FTtW2IfNWBCxIxP3FrQIQx5x22rDNYrPjEBzxIcHkQKBgQDvlrTulWw6BEgSA6vt7gP7WGJ/gnVzriA4AaOzcjUR1VElNI8yCOoOjNSDkQ6uCe3sTZKf/KB5y/IL4+/lhXmG3PFHthNSqBnBmsp8Pw3xiaNosEl+sogKPNVBYHLRv9kbBij0f0wHokf2m48GY9wVM/bP3i7G0gh9x9aKqgjGqQKBgQCziLn8c3oSQ97h5TuBQRKbHOVYPWwIJNH7TESzOpsjiPAbrKthzpMDRtYCJECVs24tMCZyRAlKCDR4OxYzPDdku8RvS2TQn9kqlgxmVkLwp1uasZZU2nDG5EPZAGIcV7sQvwoG9BaqaH5Kjvs1K1RKNqn6X1K+X4jLOmV9fXTANwKBgQDR7PvlnHkysHOxjRQFKqrEfSH41Ycx79z9FbqozaXgVUd/UPky/wqN6yl9igkRx1N33FRf6At4DJGth2+4bOYZm9exXMC7iNzgfU9z5A/EljPe06/h2m5Gghzc5rRUQkPpYNFbwXoNqkxhsNV15ON+lIRqiCP2Qyv7gbDi2K9N2QKBgDMXI6Y9zm1INzMdotNji0Hs9S8pO4cNw1u6ForSkLeKDpoxhwvsV1XFYL13R5HSX/YoD6jQx7vzncrhNa4a4sCd1oa9c9ESzCAcVycAQUhut9jL1LYM+6794njsbP8X0Doxw067Q3/3AImDKuW0kOYVrEV9vvRCB5Gd6qfNfd39AoGAeX1vfrGru/OzHij/D2614TCPMMWTaKB8frQc+thB2JeUN4VA6+iKRtRwnb312jBegD6yW0w147S0OEyN31P8a+/dkjiHcCwSzvic2pIIdwDZk3eyBT4tQHOxjDLzNtLug1iY1HDdCFvzmobpvqfaNvK9tveuy2n08s8sDSxViZg=
  • 启动流程服务

要求JDK>=1.8

启动:sh /bpm/start-bpm.sh start
停止:sh /bpm/start-bpm.sh stop

二、表单服务部署

  • 修改服务地址、数据库连接信息和统一权限配置
server:
  port: 9002
  servlet:
    context-path: /qdpm
drap_platform:
    sso_server:
        #代理地址,默认同服务地址
        rootpath_proxy: http://10.0.34.3:9009
        rootpath: http://10.0.34.3:9009
        login_target: http://10.0.32.98:9002
        privatekey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCVBMFjGLrMvWyxoL9O9GhJYj1Q3x5dMLgFkwq0l0hfPYTlfRqewnDl42WjaxoCVNTAQcpDrW4Gxs17GoJnLiEAwsEPaLxLCyJPfDuvJKuLDHvL4KvhFncN40ZgXpMpLKfq2mR/tRGJj7tSizTIJoeIU0Eg+jUjXUgzEcVWUWZmhg1rcLAiKqatNqu1++1S37N+Jv61GOKusOurSgD2GHd6OPpUcNXZsPpNYgi/P0M2ZKw8w6kGs99AD6klp27gJX6XvMn5huNSUI8TNMVxRk9tjPvP8vBJoWWBdD0mNYdzbQfk8WVnccGyjRv+oU3NElq/D9cXsBnLwc9Y5ls0ZZURAgMBAAECggEARVN+CHUjykZBv+1RsxCfR6yNbAcw4BffNLCwpU1QHQbIwd7OuJcq4LhGu50C75y5kWvKBmwzqLFqPOAbVJcwQWNZX6rRFnRqlOHt/lAoAjtfiHzQWZoS7wIR5pl5Cwm8YNUTNhptuzqD4iXi+055dSGORiJBAF/QS/nzfXHHGuB/O/GOmylbP8kqFbzfuNiCv9UhWL/iJnK9MKGPsyGcbhJOP/OgAV17bm6P4ZxyxWfsWkP16LCaxqxBuz7GZsKeHXlPRrjPsCHC3RXjwttMXcWMPvQoBl+oNID4nFkGyJ327RInJK6PDgQbhJOlwCLE7DWAAPWVdtnj4pZwUgFgQQKBgQDtf1RNKkSbfjTzZWMBqAFbLkBAesHQ17gr0vkw3B/uQ0Lc2MpZc46otTfyS081zWzjCHjW4Z3iEwH5Jo/KHFmpWMdygAXNlA2at9Fg0CUJA1QY0er1VQAVJH3X4l7WBBGJJzxF9XudJZmib6dljpsCA6VaYv3HZqHx14isp6CkKQKBgQCgoMvZ9yseNXXLO5+RFI2Ougzv5wUe+BJNimx31Pl0c/BTygp0Za9Y+cGzPR1H7R9eczAGufwOh3dlSfFREp0dtxD6AT2oZ6PIXFsdji/iD0oGE7L3WVtbqdbOnOLiOLLQVnBLj8V+7wuxtVaZ+3mLxkCUHIFvHZ39qOkdSYZGqQKBgEtazSq2sJINl0tq7eEGp3eA004iJQDYkU0GYZ6JGXCF0t8zwfBj4+3PofK0xmsxxMy8UWsMpwWmNkgRXioomKJM0uuXhz/VLAPdMwfewwF7FuHRKRWyZJZQv8URxDlvjQjRdCRWYWRZG8gYWSq19qTK91oYcqEkBVowouL1RNkRAoGAaam8z1IXbBTQuvMqwT4a7IOY1QtMRBX9vEJNnfpcam2F7yhd/jmRwl7xO539L/5c/z2YnyQjGc+lC907QBCViCGPqlW8oJYkmD2gtm19NCDImfzFYo7GWSL9Kgbr/NI9Vm02C4605Q4MzEa0hDB3wSmV+5hQ0K5T6rP9PQXLrZkCgYBz/fj0dqi6MHCvbr4kveD2Howp+dTgVFswBnxIkyM/4L2BHPyawjO84Bw/3bT3OfIEeboIJO+1f3HQ4K93TKMedvTy60BFQJGFefHZoc4ctJ3zskguhZ09QoCD1odhmJGBo726XmX/rC8Bozc+g5HyM+Vh0h1v/WhGBchPmMDiPQ==
    auth:
        identity:
            serviceId: qdpm
spring:
    drap_platform:
        sso_server:
            #代理地址,默认同服务地址
            rootpath_proxy: http://10.0.34.3:9009
            rootpath: http://10.0.34.3:9009
            login_target: http://10.0.32.98:9002
            privatekey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCVBMFjGLrMvWyxoL9O9GhJYj1Q3x5dMLgFkwq0l0hfPYTlfRqewnDl42WjaxoCVNTAQcpDrW4Gxs17GoJnLiEAwsEPaLxLCyJPfDuvJKuLDHvL4KvhFncN40ZgXpMpLKfq2mR/tRGJj7tSizTIJoeIU0Eg+jUjXUgzEcVWUWZmhg1rcLAiKqatNqu1++1S37N+Jv61GOKusOurSgD2GHd6OPpUcNXZsPpNYgi/P0M2ZKw8w6kGs99AD6klp27gJX6XvMn5huNSUI8TNMVxRk9tjPvP8vBJoWWBdD0mNYdzbQfk8WVnccGyjRv+oU3NElq/D9cXsBnLwc9Y5ls0ZZURAgMBAAECggEARVN+CHUjykZBv+1RsxCfR6yNbAcw4BffNLCwpU1QHQbIwd7OuJcq4LhGu50C75y5kWvKBmwzqLFqPOAbVJcwQWNZX6rRFnRqlOHt/lAoAjtfiHzQWZoS7wIR5pl5Cwm8YNUTNhptuzqD4iXi+055dSGORiJBAF/QS/nzfXHHGuB/O/GOmylbP8kqFbzfuNiCv9UhWL/iJnK9MKGPsyGcbhJOP/OgAV17bm6P4ZxyxWfsWkP16LCaxqxBuz7GZsKeHXlPRrjPsCHC3RXjwttMXcWMPvQoBl+oNID4nFkGyJ327RInJK6PDgQbhJOlwCLE7DWAAPWVdtnj4pZwUgFgQQKBgQDtf1RNKkSbfjTzZWMBqAFbLkBAesHQ17gr0vkw3B/uQ0Lc2MpZc46otTfyS081zWzjCHjW4Z3iEwH5Jo/KHFmpWMdygAXNlA2at9Fg0CUJA1QY0er1VQAVJH3X4l7WBBGJJzxF9XudJZmib6dljpsCA6VaYv3HZqHx14isp6CkKQKBgQCgoMvZ9yseNXXLO5+RFI2Ougzv5wUe+BJNimx31Pl0c/BTygp0Za9Y+cGzPR1H7R9eczAGufwOh3dlSfFREp0dtxD6AT2oZ6PIXFsdji/iD0oGE7L3WVtbqdbOnOLiOLLQVnBLj8V+7wuxtVaZ+3mLxkCUHIFvHZ39qOkdSYZGqQKBgEtazSq2sJINl0tq7eEGp3eA004iJQDYkU0GYZ6JGXCF0t8zwfBj4+3PofK0xmsxxMy8UWsMpwWmNkgRXioomKJM0uuXhz/VLAPdMwfewwF7FuHRKRWyZJZQv8URxDlvjQjRdCRWYWRZG8gYWSq19qTK91oYcqEkBVowouL1RNkRAoGAaam8z1IXbBTQuvMqwT4a7IOY1QtMRBX9vEJNnfpcam2F7yhd/jmRwl7xO539L/5c/z2YnyQjGc+lC907QBCViCGPqlW8oJYkmD2gtm19NCDImfzFYo7GWSL9Kgbr/NI9Vm02C4605Q4MzEa0hDB3wSmV+5hQ0K5T6rP9PQXLrZkCgYBz/fj0dqi6MHCvbr4kveD2Howp+dTgVFswBnxIkyM/4L2BHPyawjO84Bw/3bT3OfIEeboIJO+1f3HQ4K93TKMedvTy60BFQJGFefHZoc4ctJ3zskguhZ09QoCD1odhmJGBo726XmX/rC8Bozc+g5HyM+Vh0h1v/WhGBchPmMDiPQ==
        auth:
            identity:
                serviceId: qdpm
  • 启动web服务,访问http://10.0.32.98:8200/pagesIndex?businessSystemId=Q5dc0a2dd21de000

注意:businessSystemId值为当前系统应用id

三、工作流相关集成

  • 在主项目中添加流程相关依赖
<!-- 工作流 -->
<dependency>
    <groupId>com.bjsasc.platform.adpFormCenter</groupId>
    <artifactId>workflow</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/workflow-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
    <groupId>com.bjsasc.platform.adpFormCenter</groupId>
    <artifactId>uiutils</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/uiutils-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>
<!-- 表单客户端 -->
<dependency>
    <groupId>com.bjsasc.formengine_client.adapter</groupId>
    <artifactId>ptformclientnoadpadapter</artifactId>
    <version>1.1.0-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/ptformclientnoadpadapter-1.1.0-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
    <groupId>com.bjsasc.platform.adpFormCenter</groupId>
    <artifactId>ptformclientspringmvc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/ptformclientspringmvc-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
    <groupId>com.bjsasc.formengine_client.adpFormCenter</groupId>
    <artifactId>ptformengineclient</artifactId>
    <version>1.1.0-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/ptformengineclient-1.1.0-SNAPSHOT.jar</systemPath>
</dependency>
  • 修改主项目配置文件application.yml

1、添加流程相关资源到白名单: /clientrest/**

drap_platform:
  sso_server:
    rootpath_proxy: http://10.0.34.3:9009
    rootpath: http://10.0.34.3:9009
    frontpath: http://10.0.37.174:8085
    app_id: Q6095fe95e203000
    login_target: http://10.0.37.173:2025/avfms/login1
    privatekey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQChi3g7LwHoFI5c7LUTyBdUWqpA7xqED9+9RPa+KKiiHGb3fBb3yINWMJD/FMd24Bw5AC9Eqy8IyB+9ubeGuSPWgYfWHT4WuU8V3BbvC6p0VPtOz+Lb/RClqCw73E9+wLT/9R9ioEGn1pKjjYiyefhEh/QpBEpytDaJGzQO1uXCWusQ+QlZT1LUiUMSGXcPCKb4nFZAokNJD878JW4bHr+9oqA9t49TOiUBxvkxmjR8QvTcJQF+hGSFU+5/PzJWhf7vv+RYnI0C2hoH/lwDu5Y+C5IN4b4vRcdodQZDkCLJW0shYeKgHdZY/GpWlu/LY4BBB1x4HCaSost0atoQmMDJAgMBAAECggEAHAbAYzQylnsKf+CpQbdTJNVd+EoDRaojXQjb7f3L0+QtkP48Vdy5vHhMj5ShTmRvQQxhJv6z+EgQCbBwwLTaHNr4IBOOtA6OQ/KdH/fcKLadqvyyFQyAmNzmX7RHLmxseoOiYFABVAcMBcgGUUCL7AfSOlN+Pww48eyASZrK3b71k3elN+Zkhfghjhe5GhNl54T7OAzk78Los36y3yV008OcChdCUOugtcgQKOu/h3UoUrMuZiWWslvkL0PqSKM0ZKfVarcSiS31hZnbh3KhRFzMTAnzu5JTp/b0DMmM8eUP4U3JG8kQnNrK7/oqTjy9+2hH2zhJBEN0MZLw0A4QqQKBgQDZp63Rjy41h26FYkqDmOePCkvytIAHOPUygOKWBx60pzplKkIp7Aulpfi0ojes3anO3m1ymr+QNkgkpB+u0xQjkU1/RtPQezFOhC/y7GTqEVm2aROwpXsOoVTN4fOwQjGvUVuSzJ9pmqZgoexURRjgVmuJswxYxPJge2CeqvibkwKBgQC+ATM/ATX0RR6IxUJiD8NW/5X9ZPRTdtKYvB5zcBSrAmdVpqKNhX0Vo79dK3axhBrMBdVvEW4rzgUFimz6ESsLmZy43AGgj2S82EDDZL4upsWRDc+iVKd65iNqxs3lryZTkzISjIV8U3JG4p43ujA7UHZf0UMLKwcAc62j2JHDswKBgQDOV+Q2vqoNP2bs90EzP1uPxTA5WRvjPQFgLsYhe4CFveBjlkuBmPF1ykJdZUipDsB0iXRzaPfhTUTZz+rlf+Eg0xkIZ+pZROF60WDvyWLmcSp+/2EWX9upBBP015iCak7WKahKJMmggWfoRrpZLeSmkeeDdQZohdZO18jCw83LFwKBgD5EHGwoVGshf5kos9F5AvXuulOZEuyLQwakl4ITF+LW3dBW1Gx2c4B08hBxXutbtIBp5QEKAEXAtSqUq5PjrmyVwaNfDfV1KHkukUK3MBAPvS0FDqdPALeo1bB3SCBeHrxCv6UOgew1WHzcZSc0D/xQKQrLhCITzq6aOiw4m8Q7AoGBALaKQe0vMqOOShTCcT0beWfbsruK6LSGQflgWlvZNS+pjeqlX1wNxolCyLHtlLKE1+1o/yEokWacrqQc/67ZDQFHOtvtWguUYrRf4srZsXKvU+Jz2rZRT+CeUQZHDap2sFtBMC1c06Y5fVw/wgGAMeM5YBO7vEEiVpL22xkf5ctH
    public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoYt4Oy8B6BSOXOy1E8gXVFqqQO8ahA/fvUT2viioohxm93wW98iDVjCQ/xTHduAcOQAvRKsvCMgfvbm3hrkj1oGH1h0+FrlPFdwW7wuqdFT7Ts/i2/0QpagsO9xPfsC0//UfYqBBp9aSo42Isnn4RIf0KQRKcrQ2iRs0DtblwlrrEPkJWU9S1IlDEhl3Dwim+JxWQKJDSQ/O/CVuGx6/vaKgPbePUzolAcb5MZo0fEL03CUBfoRkhVPufz8yVoX+77/kWJyNAtoaB/5cA7uWPguSDeG+L0XHaHUGQ5AiyVtLIWHioB3WWPxqVpbvy2OAQQdceBwmkqLLdGraEJjAyQIDAQAB
    #拦截器白名单
    interceptorsb: /login1,/logout,/dev/1.0/**,/notoken/**,/core/**,/search/**,/swagger-ui.html,/webjars/**,/swagger-resources/**,/clientrest/**,/flow/**

2、修改流程服务url

workflow:
    ancsapihost: http://10.0.32.98:8200 
  • 修改主项目启动类配置,扫描流程客户端相关资源:com.bjsasc.platform.**
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@ComponentScan({"com.bjsasc.drap.sso", "com.bjsasc.asp.**","com.bjsasc.platform.**", "com.bjsasc.avfms.**"})
@MapperScan("com.bjsasc.avfms.*.mapper")
public class AvfmsCoreApplication {
    public static void main(String[] args) {
        System.setProperty("es.set.netty.runtime.available.processors", "false");
        System.setProperty("spring.devtools.restart.enabled", "false");
        SpringApplication.run(AvfmsCoreApplication.class, args);
        System.out.println("=====================avfmsCore启动成功========================゙\n");
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

四、配置相关菜单

菜单地址
待办列表http://10.0.37.223:2026/aspDev/static/workflow/workflowlist.html?businessSystemId=Q5dc0a2dd21de000
流程中心http://10.0.32.98:8200/pagesIndex?businessSystemId=Q5dc0a2dd21de000
表单中心http://10.0.32.98:9002/qdpm/index

统一权限菜单配置

aspdev开发平台菜单

五、流程中心操作指南

  • 通过菜单:流程管理进入流程中心; 或通过流程服务地址进入:http://10.0.32.98:8200/pagesIndex?businessSystemId=Q5dc0a2dd21de000

流程管理

  • 流程中心的用户操作功能包含web流程设计器和流程信息定义界面。开发者利用流程中心设计和定义工作流时大致步骤如下:

流程定义步骤图

5.1 模板定义

5.1.1 流程图绘制

  • 进入流程中心定义页面后,点击“在线流程设计”按钮绘制流程图。此为新建一个流程模板的入口。若是编辑一个已有流程模板,则点击该条模板信息中的“设计”按钮进入流程设计器。如下图:
    流程设计
  • 点击后打开流程设计器,展开左侧“开始事件”节点,拖拽“开始”节点到右侧设计区,以此开始一个流程图的绘制。如下图: 流程设计开始事件
  • 上图中,点击选中设计区内的流程节点可以快速添加后续节点。如:任务节点、结束节点。也可以在左侧树中展开“活动”节点,拖拽“人工任务”到设计区进行后续节点的添加。双击“任务节点”图标可以为节点填写名称。如下图:
    流程设计添加人工任务节点
  • 添加完成后,点击图中“开始节点”图标,拖拽“跳转线”图标到“任务节点”区域,当“任务节点”图标出现绿色外框松开鼠标左键,即可完成连接线的添加。后续节点亦如此操作。如下图:
    连接线的添加
  • 如上述过程反复操作,完成流程图的绘制,如下图: 完成的流程图
  • 在本系统中,目前大多数情况下只是使用了:开始事件、结束事件、人工任务等几个常用的流程元素。
    本系统使用的流程元素
  • 各元素说明如下表:
    流程元素说明表
  • 控件功能模块用来协助用户编辑流程图,空间图展示与说明如下:
    控件功能模块
  • 在本系统中,主要用到了以下控件: 流程绘制工具控件
  • 设置流程key,点击保存图表,输入流程定义名称完成流程图绘制 设置流程key

5.1.2 流程模板设置

  • 流程模板设置中可以进行流程基本信息的定义以及一些全局范围的设置。流程模板设置包含四个部分:流程定义设置、表单设置、功能配置和流程事件设置。

  • 流程定义设置可以修改流程模板名称和备注信息,流程标识、版本号等为系统自动生成和维护,不支持手动修改。如下图:
    流程定义设置

  • 表单设置可以为流程模板内的节点统一设置绑定的表单。绑定表单支持两种场景:从列表中选择表单、自定义表单URL。列表中选择的表单来源于表单中心定义的表单页面。自定义表单URL为开发者手工编写的页面地址。由于此设置应用在流程客户端内的通用流程办理页面中,所以此URL从web应用名之后开始编写即可。当设置完表单信息后,点击“同步表单设置到节点”即可将该设置应用到每个节点定义中。如果某个节点需要特殊定义,则在节点设置环节单独修改。如下图:

表单设置-从列表中选择(用表单中心绘制表单)

表单设置-从列表中选择

表单设置-自定义表单URL(自定义表单,绝对路径或相对路径均可)

表单设置-自定义表单URL

  • 接下来是功能配置。在此配置项中,开发者可以定义流程运行到节点时打开的通用办理页面中按钮。目前支持:提交、直接提交、取回、退回、退回发起人。开发者可进行勾选,选中的按钮和对应的处理逻辑功能会出现在通用办理页面的工具栏内。如开发者需要调整按钮显示名称和按钮的执行逻辑,在对应按钮后的输入框中修改调整即可。调整按钮的执行逻辑即修改按钮执行的JavaScript方法名,此方法名对应的JavaScript方法实现必须在上方录入的“按钮策略JS路径”的JavaScript文件中。如下图:

流程功能配置

  • 最后是流程事件设置。目前流程级事件支持四种: 流程启动前/后、流程结束前/后。开发者在此设置需要执行的业务服务地址(接口为post)。如下图:

 流程事件设置

5.1.3 流程事件示例

  • 在业务接口里可以通过平台提供的工具类获取流程相关业务数据
package com.bjsasc.avfms.util;

import com.alibaba.fastjson.JSON;
import com.bjsasc.avfms.vo.BpmTaskVO;
import org.apache.http.protocol.HTTP;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLDecoder;

/**
 * @ClassName BpmTaskUtil
 * @Description 流程相关工具类
 * @Author admin
 * @Date 2020/4/26 18:55
 * @Version 1.0
 */
public class BpmTaskUtil {
    private static final Logger logger = LoggerFactory.getLogger(BpmTaskUtil.class);
    
    /**
     * 获取流程相关业务数据,用在流程事件中
     * @param request
     * @return
     * @throws IOException
     */
    public static BpmTaskVO getBpmInfo(HttpServletRequest request) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
        String line = null;
        StringBuilder sb = new StringBuilder();
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        String bodystr = URLDecoder.decode(sb.toString(), HTTP.UTF_8);
        return JSON.parseObject(bodystr, BpmTaskVO.class);
    }
}
  • 返回数据如下
@ApiModel(description="流程任务相关数据")
public class BpmTaskVO {
    @ApiModelProperty("流程任务ID")
    private String taskId;
    @ApiModelProperty("流程节点ID")
    private String nodeId;
    @ApiModelProperty("流程任务名称")
    private String name;
    @ApiModelProperty("流程实例ID")
    private String processInstanceId;
    @ApiModelProperty("流程实例名称")
    private String processInstanceName;
    @ApiModelProperty("流程定义ID")
    private String processDefinitionId;
    @ApiModelProperty("流程定义名称")
    private String processDefinitionName;
    @ApiModelProperty("流程任务定义key")
    private String taskDefinitionKey;
    @ApiModelProperty("业务ID")
    private String businessKey;
    @ApiModelProperty("流程发起人ID")
    private String startUserId;
    @ApiModelProperty("流程发起人名称")
    private String startUserName;
    @ApiModelProperty("处理人ID")
    private String assignee;
    @ApiModelProperty("处理人名称")
    private String assigneeName;
    @ApiModelProperty("上一处理人ID")
    private String lastAssignee;
    @ApiModelProperty("上一处理人名称")
    private String lastAssigneeName;
    @ApiModelProperty("父级任务ID")
    private String parentTaskId;
    @ApiModelProperty("任务创建时间")
    private Date createTime;
    @ApiModelProperty("任务结束时间")
    private Date endTime;
    @ApiModelProperty("首次查看时间")
    private Date claimTime;
    @ApiModelProperty("任务创建时间")
    private Date startDate;
    @ApiModelProperty("实例执行ID")
    private String executionId;
    @ApiModelProperty("描述")
    private String description;
    @ApiModelProperty("dueDate")
    private Date dueDate;
    @ApiModelProperty("任务节点类型")
    private String type;
    @ApiModelProperty("任务归属者,代理时使用")
    private String owner;
    @ApiModelProperty("任务归属者ID,代理时使用")
    private String ownerid;
    @ApiModelProperty("delegation")
    private String delegation;
    @ApiModelProperty("权重")
    private int priority;
    @ApiModelProperty("suspensionState")
    private int suspensionState;
    @ApiModelProperty("tenantId")
    private String tenantId;
    @ApiModelProperty("formKey")
    private String formKey;
    @ApiModelProperty("持续时间")
    private Long durationInMillis;
    @ApiModelProperty("持续时间文本")
    private String durationString;
    @ApiModelProperty("意见类型名称")
    private String commentTypeName;
    @ApiModelProperty("意见")
    private String comment;
    @ApiModelProperty("流程变量")
    private String procinstType;
    @ApiModelProperty("流程变量值")
    private String procinstTypeValue;
    @ApiModelProperty("表单ID")
    private String formId;
    @ApiModelProperty("是否是子流程,1:子流程,0:主流程任务")
    private String isSubProcessTask;
    、、、
}

  • 流程事件示例,修改业务状态值
    @ApiOperation(value = "修改专利管理状态", nickname = "updateStatus")
    @Log(title = "专利管理", businessType = BusinessType.UPDATE)
    @PostMapping("/status2")
    public AjaxResult updateStatus2(@RequestParam String status, HttpServletRequest request) {
        logger.info("改专利管理状态: {}" ,status);
        Map<String, Object> paramMap = new HashMap<>();
        List<String> ids = new ArrayList<>();
        String dbStatus = "";
        BpmTaskVO vo = new BpmTaskVO();
        switch (status) {
            case "1":
                dbStatus = "1";
                break;
            case "2":
                dbStatus = "2";
                break;
            case "3":
                dbStatus = "3";
                break;
            default:
                logger.info("操作失败!业务状态不符合要求。");
                return AjaxResult.error(HttpStatus.SC_NO_CONTENT, "操作失败!业务状态不符合要求");
        }

        try {
            vo = BpmTaskUtil.getBpmInfo(request);
            String businessKey = vo.getBusinessKey();
            logger.info("流程相关businessKey =" + businessKey);
            if (StringUtils.isNotBlank(businessKey)) {
                ids.add(businessKey);
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        paramMap.put("ids", ids);
        paramMap.put("state", dbStatus);
        if (ids.size() < 1) {
            logger.info("操作失败!业务id为空");
            return AjaxResult.error(HttpStatus.SC_NO_CONTENT, "操作失败!业务id为空");
        } else {
            logger.info("流程事件触发操作成功!修改的业务id={},状态={},流程信息:{}", ids, status,vo);
            return toAjax(buPatentService.updateStatus(paramMap));
        }

    }

5.1.4 流程发布

  • 在开发者修改流程图并保存后,流程中心自动为流程模板更新版本号,禁止手工调整。版本号更新后启动流程使用最新版本流程模板,原有实例和历史流程仍使用启动时的版本号。

5.2 节点设置

  • 节点设置包含六部分功能:节点设置、人员设置、流程控制设置、表单设置、路由设置和节点事件设置。

5.2.1 节点设置

  • 节点设置中,开发者可以配置当前节点审批时,通用办理页面的工具栏展示哪些按钮(功能)。目前包含:提交、直接提交、取回、退回和直接退回发起人。其中,取回是出现在已办列表中打开的通用办理页面内,其余为待办列表中的功能。在勾选当前节点审批时所需的功能外,开发者可以根据需求调整按钮显示的中文名以及执行的JavaScript方法。同3.1.2流程模板设置中功能配置的逻辑,当开发者配置了对应按钮执行的自定义JavaScript方法名,通用办理页面会引入注册的JavaScript文件,并调用该方法。如下图:

节点设置

5.2.2 人员设置

  • 人员设置是为流程节点配置执行人。如下图:

人员设置

  • 如图所示,点击“添加”按钮为当前节点配置执行人信息。如下图:

人员设置-添加人员

  • 添加人员说明:首先录入执行人条件的名称,然后点击“添加”按钮设置执行人来源,目前支持:用户、部门、角色、流程发起人、上一节点执行人、流程发起人所在机构和提交人所在机构。其中用户、部门和角色的数据均来自于统一权限管理系统。添加结束后,点击“保存条件”即可。条件内的人员过滤条件为“与”的关系,例如:添加一个部门“财务部”,即为整个财务部人员作为执行人,继续添加一个角色“部长”,即为“财务部”and“部长”,即 “财务部下的部长”。条件与条件之间为“或”的关系,以满足复杂场景下的执行人配置需求。

5.2.3 流程控制设置

  • 可设置节点类型,节点类型分为普通节点、会签节点和子流程节点三种类型。
5.2.3.1 普通节点
  • 普通节点类型需要设置的内容如下图:

普通节点设置

  1. 是否允许多人处理:
    • 如果选择“是”,那么当前节点可以选择多人为下一节点办理人,下一节点办理人谁先签收,谁就是下一节点的待办人。
    • 如果选择“否”,那么当前节点只会有一个下一节点办理人。
  2. 候选人直入结果集:
    • 如果选择“可以”,那么当前节点的候选人将直接显示在下一节点办理人的已选列表中。
  3. 下一节点列表显示:
    • 如果选择“不按路由检查过滤”,那么在下一节点的列表,将显示流程图中的当前节点连线的所有节点。
    • 如果选择“按路由检查过滤”,那么在下一节点的列表,将按照“路由检查”模块中配置的条件进行节点过滤。
5.2.3.2 会签节点
  • 会签节点类型需要设置的内容如下图:

会签节点设置

  1. 是否允许多人处理:
    • 如果选择“是”,那么当前节点可以选择多人为下一节点候选办理人,下一节点候选办理人在自己的待办列表均可收到这条任务。谁先签收,谁就是下一节点的待办人。签收后如不想办理,待办人可撤销签收,任务会回到所有候选办理人的待办列表中
    • 如果选择“否”,那么当前节点只会有一个下一节点办理人。
  2. 候选人直入结果集:
    • 如果选择“可以”,那么当前节点的候选人将直接显示再下一节点办理人的已选列表中。
  3. 下一节点列表显示:
    • 如果选择“不按路由检查过滤”,那么在下一节点的列表,将显示流程图中的当前节点连线的所有节点。
    • 如果选择“按路由检查过滤”,那么在下一节点的列表,将按照“路由检查”模块中配置的条件进行节点过滤。
  4. 会签执行规则:
    • 如果选择“并行会签”,那么在选择多个办理人提交到下一节点后,所选择的多个办理人都会同时收到一条节点任务待办。
    • 如果选择“串行会签”,那么在选择多个办理人提交到下一节点后,所选择的多个办理人中,只有排序第一个的办理人会收到一条节点任务待办,等第一个办理人办理完会签任务后,第二个人才会收到节点任务待办,以此类推。
5.2.3.3 子流程节点
  • 子流程节点类型需要设置的内容如下图:

子流程节点设置

  1. 是否允许多人处理:
    • 如果选择“是”,那么当前节点可以选择多人发起多条子流程。
    • 如果选择“否”,那么当前节点只会发起一个子流程。
  2. 候选人直入结果集:
    • 如果选择“可以”,那么当前节点的候选人将直接显示再下一节点办理人的已选列表中。
  3. 下一节点列表显示:
    • 如果选择“不按路由检查过滤”,那么在下一节点的列表,将显示流程图中的当前节点连线的所有节点。
    • 如果选择“按路由检查过滤”,那么在下一节点的列表,将按照“路由检查”模块中配置的条件进行节点过滤。
  4. 子流程:
    • 选择当前节点会发起的子流程定义,如下图所示: 选择子流程定义
  5. 子流程结束方式:
    • 如果选择“需等全部参与人结束”,那么系统会等待子流程内全部参与人结束子流程内的审批任务后结束子流程。
    • 如果选择“只需一人就可依据路由结束”,那么仅需子流程内一个参与人结束子流程内的审批任务后结束子流程,并根据路由条件跳转下一节点。
  6. 子流程结束时跳转方式:
    • 如果选择“自动”,那么系统会根据当前节点在“路由检查”的“按决策方式”模块中的设置进行自动跳转。
    • 如果选择“手动”,那么当所有子流程都结束后,流程将回到当前节点,让用户自己去选择流程走向。

5.2.4 表单设置

  • 表单设置为流程节点设置表单,如下图所示:

表单设置:表单中心表单

  • 流程节点中设置表单支持两种,一种是从列表中选择表单,一种是配置自定义表单URL。

  • 列表中选择表单,是表单中心配置的表单页面。自定配置URL,自己环境中contextPath之后开始配置或者是页面的绝对路径。

  • 除此之外,还支持表单权限配置。按照表单配置方式不同,权限配置方式也稍有差异。首先选择表单的权限配置,页面如上图所示。

  • 这种情况下,权限配置页面可以自动识别出页面所有控件标识及其类型,点击权限列可以进行设置,设置项包含缺省,只读和隐藏。配置好之后,在流程实例运行到此节点,此流程节点的表单就可以按照配置的进行展示。

  • 再次是自定义表单URL权限配置,如下图所示。 表单设置:自定义url

  • 自定义表单配置需要用户自己添加控件标识,然后配置权限,然后进行保存。权限列的内容也是包含缺省,只读和隐藏。设置之后,用户自己负责进行权限解释。

5.2.5 路由设置

  • 路由规则设置支持四种方法:按角色路由、按决策路由、按表单路由、按脚本路由。
5.2.5.1 按角色添加
  • 按角色添加路由即根据当前节点审批人的角色作为路由条件,在设定中,选定某一个角色路由到某个节点 路由设置:按角色添加
5.2.5.2 按决策方式添加
  • 按决策方式即,当多人参与审批时,根据执行人决策结果判定路由路线。决策可设置同意、不同意的票数或百分比,当票数满足多少或百分比达到多少时路由到哪个节点。按决策方式的路由检查仅适用于子流程节点。如下图:

路由设置:按决策方式添加

5.2.5.3 按表单对象添加
  • 按表单对象即根据绑定表单中的某个字段的值进行路由跳转。首先选择表单的某个字段并设置表达式作为路由条件,当任务提交时,流程引擎根据表单中该字段的数值进行条件计算,最终路由到指定后续节点。条件支持多条的“与/或”关系运算,如下图:

路由设置:按表单对象添加

5.2.5.4 按脚本方式添加
  • 按脚本方式即开发者自定义路由条件,并将条件关键字对应到指定节点,当节点执行下一步时将关键字作为参数传入流程引擎,引擎根据配置好的路由规则进行后续节点路由。如下图:

路由设置:按脚本方式添加

5.2.6 节点事件设置
  • 节点事件设置是为流程运转到当前节点时,所触发的事件逻辑配置。目前支持四种:任务提交前/后,任务完成前/后。配置规则同3.1.2流程模板设置中的事件配置,目前提供Rest形式,在事件触发时调用业务服务URL。如下图:

节点事件设置

六、流程客户端操作指南

6.1 待办列表

  • 待办列表页地址:http://10.0.37.223:2026/aspDev/static/workflow/workflowlist.html?businessSystemId=Q5dc0a2dd21de000
  • 在统一权限中配置"system/process/index"自动跳转待办列表页 统一权限中配置
  • 配置后效果 待办列表

6.2 已办列表

  • 同待办列表,切换tab查看

6.3 通用代办页面

  • 通用待办页为流程客户端提供的通用流程节点任务办理页面,包含工具栏、表单区、意见填写和历史审批信息列表四部分。如下图:

通用代办页面

6.3.1 默认功能

  1. 工具栏
    • 工具栏位于页面上方,内部按钮来自于5.2.1 节点设置小节描述的节点设置中勾选的功能,当流程运转到该节点时,通用办理页根据勾选情况显示指定的按钮、执行对应按钮逻辑。
  2. 表单区域
    • 表单区域为5.2.4 表单设置小节绑定的表单所展示的区域。表单内控件元素的权限控制在表单设置中完成。
  3. 意见填写
    • 通用办理页面右上方为意见输入框,节点任务执行人在此填写审批意见。
  4. 历史审批查看
    • 历史审批信息列表在页面右下方,可以查询此流程过往审批情况。

七、相关API

7.1 流程管理API

  • swagger地址:http://ip:port/swagger-ui.html
    • 例:http://10.0.32.98:2026/aspDev/swagger-ui.html

流程客户端提供的API

  • 接口说明

接口说明接口说明接口说明接口说明

八、表单中心使用说明

8.1 表单中心创建应用,并与统一权限绑定

接口说明

8.2 表单中心填写数据源信息

表单中心填写数据源信息

8.3 创建客户端连接

  • 客户端url为流程客户端所在的系统应用地址

客户端连接

8.4 创建数据模型

表单中心填写数据源信息

  • 点击新建按钮,选择绑定的数据库,选择需要创建数据模型的数据表

新建数据模型

8.5 创建功能菜单

  • 可按业务模块分类创建菜单

可按业务模块创建菜单

上次编辑于: