[22] springboot統合活動7 (1) 実践的なデモンストレーション

        この章の次の章では、springboot+activiti7 を統合して、自分の学習プロセスを記録します。デモは長すぎるため、いくつかの章に分けて説明します。書き終えたら、次の章へのリンクが末尾に添付されます。この章では主にデモの要件と最終的な効果のデモンストレーションについて説明し、具体的な構築と実装については次の章で順番に説明します。

QQ 交換グループ ナビゲーション ——> 231378628

目次

1. デモの説明

2. 準備

3.エフェクト表示


 Springboot の章の全体的なコラム: 


[1] springboot は Swagger を統合します (非常に詳細な

[2] springboot は swagger (カスタム) を統合します (非常に詳細)

[3] springboot 統合トークン (超詳細)

[4] springboot は mybatis-plus を統合します (非常に詳細) (オン)

[5] springboot は mybatis-plus を統合します (非常に詳細) (下記)

[6] springboot はカスタムのグローバル例外処理を統合します

[7] springboot は redis を統合します (非常に詳細)

[8] springbootはAOPを統合してログ操作を実現します(超詳細)

[9] springboot 統合タイミング タスク (超詳細)

[10] springboot は redis を統合してスタートアップ サービスを実現します。つまり、ホットスポット データをグローバルと redis に保存します (超詳細)

[イレブン] スプリングブートはクォーツを統合してタイミングタスクの最適化を実現します(超詳細)

[12] springboot はスレッド プールを統合して高い同時実行性を解決します (非常に詳細で、理解が容易です)

【その13】springbootは非同期呼び出しを統合して戻り値を取得する(超詳細)

[14] springboot は WebService を統合します (超詳細)

[15] springboot は WebService を統合します (パラメーターの受け渡しについて) (超詳細)

[16] springboot は WebSocket を統合します (超詳細)

[Seventeen] springboot が WebSocket を統合してチャット ルームを実現 (超詳細)

[18] springboot はカスタムのグローバル例外処理を実装します

[Nineteen] springboot は ElasticSearch の実戦を統合します (1 万文字)

[Twenty] スプリングブート統合フィルター戦闘

[21] springboot は実戦でのインターセプターを統合し、フィルターを比較します

[22] springboot統合活動7 (1) 実践的なデモンストレーション

【23】springboot統合スプリングビジネスの詳細説明と実戦

[24] springbootはEasyExcelとスレッドプールを使用してExcelデータのマルチスレッドインポートを実現します

[25] springboot は、キャッシュの侵入を処理するために jedis および redisson Bloom フィルターを統合します

[26] springboot はマルチスレッド トランザクション処理を実装します_springboot マルチスレッド トランザクション

[27] springbootはthreadLocal+パラメータパーサーを通じて現在のログイン情報をセッションと同様に保存する機能を実現します


1. デモの説明

         シナリオ:ある企業が経営再建中であるとします。プロダクト マネージャーが要求を上げたい場合、A 社の満足に加えて、コーダーの満足も得る必要があります。このとき、承認プロセスが存在する可能性があります。次のように:

ae1fed7d41ec4f828b47ade851c405b7.png        その後、上記の承認プロセスはアクティビティを統合することで実現されます。

        達成される効果は次のとおりです。プロセスを開始するプロダクト マネージャーから、後続の各ノードを渡すか返すことができ、リターンはプロダクト マネージャーのステップに戻ります。次に、プロセス記録追跡とフローチャート追跡機能を実装します。承認と最初のノードに戻ることを除いて、他の操作は後で空になり、ゆっくりと学習します。


2. 準備

1. 最初のステップ

        データベースを準備します。

Activiti のテーブルと独自のビジネス テーブルが必要です。Activiti のテーブルはデプロイ時に自動的に作成されます。現時点では、このデモに含まれるビジネス テーブルは次のとおりです:

テーブル名 説明する
ユーザー ユーザーテーブル
役割 ロールテーブル
ユーザーの役割 ユーザー役割関連付けテーブル
要求 リクエストフォーム
CREATE TABLE `demand` (
  `id` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主键',
  `status` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '流程状态,-1是未启动,0是填写表单,1是组长审批,2是开发经理审批,3是项目经理审批,4是结束',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '需求名称',
  `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '需求具体内容',
  `salt` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '盐字段',
  `taskid` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '任务id',
  `createuser` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '发起人',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin;
CREATE TABLE `role` (
  `id` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '主键',
  `role` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '角色名称'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin;

1f85600967674a1480133b5bbd2999b0.png

CREATE TABLE `user` (
  `id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '主键',
  `username` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '用户名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin;

c39ef4c1ea3749c88dbbd342f6b5b4cb.png

CREATE TABLE `user_role` (
  `id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '主键',
  `userid` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '用户id',
  `roleid` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '角色id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin;

 e635816df9f84d09a7f6c4fc8892daea.png

2. 第二段階

        このアイデアでは、プラグインをインストールし、フローチャートを描画します。

Activiti が認識してデプロイメントを実装できるフローチャートを描画します。デフォルトでは、Activiti は .bpmn および **.bpmn20.xml で終わるファイルをデプロイできます。

idea には BPMN ダイアグラムを描画するためのプラグインが多数あり、私は activiti BPMN Visualizer を選択しました。

a9e728971b2c481683d934690c9dd523.png

インストールが完了したら、アイデアを再起動し、右クリックして、作成した springboot プロジェクトのリソース リソース ディレクトリに次のファイルを作成します。

d84b89221fe84608a4cb35f2e27df6de.png

 73d375cb201a44f59471949acc48967d.png

作成が完了するとxmlファイルが生成されるので、このファイルを右クリックして表示...を選択するとフローチャートが開きます。

5e91ea8ffe674542b608582a4d617eb2.png

グラフ内を右クリックして描画に追加します。

8f9575002cd84fc6862391ddd91fdf12.png

最後に、デモの需要シナリオに従って上記のフローチャートを作成しました。ひし形は排他的なゲートウェイ、四角形はユーザー イベントです。

各ノードとラインの具体的なパラメータについては後ほど説明しますが、ここではパラメータについて説明します同じ名前を使用しないのが最善です。そうしないと問題が発生します。 

3. 第三段階

        プロジェクトを作成し、必要な依存関係をインポートします。

私のプロジェクトのディレクトリ構造は次のとおりです

ba719a1dbebc4ec4bc0e99b94f835c3c.png

次に、次のように、このデモで必要な依存関係をインポートします

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--    工作流依赖    -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>7.1.0.M3.1</version>
            <exclusions>
                <exclusion><!-- 排除activiti的mybatis,避免和外面的mybatis-plus冲突 -->
                    <!-- 重点坑,不然启动项目会报错mybatisplus缺少类   -->
                    <artifactId>mybatis</artifactId>
                    <groupId>org.mybatis</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.22</version>
        </dependency>

        <!--   数据依赖     -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--流程图依赖-->
        <!--  试了几个版本的,有些版本的会导致图片展示不全,注意  -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-image-generator</artifactId>
            <version>5.20.0</version>
        </dependency>

    </dependencies>

上記の注意事項にも記載されているように、mybatisplus と activiti の競合や、後続のプレビュー フローチャート機能の依存関係により表示が不完全になるなど、注意が必要な落とし穴がいくつかあり ます

4. 設定ファイルを変更する

989c35d040f0480b8ffbee15c4e5af79.png


server:
  port: 8080

spring:
  datasource:
    username: root
    password: 123456
    #    加上nullCatalogMeansCurrent=true才能自动创建activiti需要的表
    url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true

  activiti:
    database-schema-update: true
    check-process-definitions: true
    #  注意,如果activiti后面加上了/,就要求启动的时候process文件夹中需要有流程定义文件
    #  是指定activiti流程描述文件的前缀(路径),启动时,activiti就会去寻找此路径下的流程描述文件,并且自动部署
    process-definition-location-prefix: classpath:/activiti/
    #  suffix 是一个String数组,表示描述文件的默认后缀名,默认**.bpmn和**.bpmn20.xml
    #    process-definition-location-suffixes:
    #      - **.bpmn
    #      - **.bpmn20.xml
    #  Activiti7历史数据无法自动插入,开启下面两个配置
    history-level: audit
    db-history-used: true
#  mapper.xml文件所在路径
mybatis-plus:
  mapper-locations: classpath*:mapper/**/*Mapper.xml
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志

コメントに具体的な説明を書きました。


3.エフェクト表示

        準備作業が完了したら、コーディングを開始できます。デモコードが多いので、以下では効果のみを紹介します。

1. まず、模擬的に Zhang San (プロダクト マネージャー、ID は 1) にログインし、My Requirements インターフェイスに入ってリクエストを行います。

a5f513d47f4041408d6f62379b651632.png

6aadfc91921d4fbd9bbe77fb7a844891.png

9d4f9ac5da0b45bdb1c4473b60672e9f.png

2. 追加が完了した後、プロセスは開始されません。Zhang San はクリックしてプロセスを開始し、「レビュー用に送信」ボタンをクリックし、承認者を選択して「保存」をクリックします。

f9e48bef6e3b46c482b5e89e72e7b1bb.png

9a48f4447e964f85857e1123bc71c446.pngb0a50bded19843a08d675a0e6afcb06b.png

3. ここで、「プロセスの表示」ボタンをクリックします。5dc4f48d8b7c4a7291be3bf470a36bdf.png

4. プロセスがチーム リーダーの場所、つまりデータベース構成内の Li Si にあることがわかります。Li Si のアカウントにログインし、ToDo インターフェイスに入り、ToDo リストを表示します。680e3c3045664243b0e3cbe6ef878b39.png9110ef8dd48b477da0f63dc0160daa62.png 5. [戻る] ボタンをクリックして Zhang San に戻り、要件を書き直します。

fe1a95835ddf45d59d26969af81eacc2.png0a6500ba5a3942be9e3dfed297e0cef0.png

6. Zhang San (ID: 1) のアカウントにログインし、リクエストを再送信します。125ae210306b4fd49ea76a789f54dbce.pngb752efe68075425c95967d53bb61e2aa.png44969aab6bd54f79b26e5026f3d2ba32.png 7. [レビューのために送信] をクリックし、承認者の選択を続けます。

0f8ebfd719a74cd5baa9745599e56f05.png800325c9d83b4c23b1​​00d38347ca2e4a.png

8. Li Si のアカウントにログインし、再承認します (ID: 2)  38df6137f3b34dbb8fdc775aecf2b475.pnge1e0168c04454092857e458c9bfeb314.png 9. 今回は同意することを選択しますa305f976a29c4d76855ad289b71e5047.png195d2f14cfc6468683bd65331f329b96.png

10. フローチャートを再度確認するd6473af806db450188d9fdf1c6f974ed.png

11. Wang Wu のアカウントにログインします (id: 3)a988f3cdb12247dd96bc32cf6d567130.png

6a8ee90536824bda8d0e9c656d06688b.png

12. [同意する] をクリックします。3cebf0d76a58402fb9b70157ce62878a.png0114d147711d48ada650966df9e84faf.png13. フローチャートを表示します。39d42a8467154675a8ac2e900d1774dd.png

14. Zhao Liu のアカウントにログインして承認を得る (ID: 4)9df57d83178c4249adaa91ebff1cc498.png724347a1ad6147aba409b44daa5e2052.png

15.クリックスルー2c11ead80f2c40cdb3dd1642e37b466a.pngdf4566d13ee349bb87d2820c647634da.png

16. 再び張三の要求リストに戻り、プロセスステータスは終了しました67ed7ee39843424cb354c138d2171811.png1dd7bf2f4b7a4509906766c04cfa8578.png

大まかな効果はこんな感じです。次の章では、各関数のコードを表示して説明します。時間があるときにゆっくりと書いてください。

-------------------------------------------------- - 終わり - - - - - - - - - - - - - - - - - - - - - - - - -----------


おすすめ

転載: blog.csdn.net/weixin_56995925/article/details/124530843