From d54772815bc34efc76112b5c22def86d3f45faa8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?=
<15040126243@163.com>
Date: Tue, 5 Mar 2024 14:57:39 +0000
Subject: [PATCH] =?UTF-8?q?!491=20=E5=90=88=E5=B9=B6flowable=E5=B7=A5?=
=?UTF-8?q?=E4=BD=9C=E6=B5=81=E5=8A=9F=E8=83=BD=20*=20update=20=E4=BC=98?=
=?UTF-8?q?=E5=8C=96=20=E8=A1=A8=E5=AD=97=E6=AE=B5=E6=98=A0=E5=B0=84?=
=?UTF-8?q?=E4=BA=8E=E6=95=B0=E6=8D=AE=E5=BA=93=E4=BF=9D=E6=8C=81=E4=B8=80?=
=?UTF-8?q?=E8=87=B4=20*=20remove=20=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?=
=?UTF-8?q?=E4=BB=A3=E7=A0=81=20*=20remove=20=E5=88=A0=E9=99=A4=E6=97=A0?=
=?UTF-8?q?=E7=94=A8=E4=BB=A3=E7=A0=81=20*=20fix=20=E4=BF=AE=E5=A4=8D=20?=
=?UTF-8?q?=E5=AE=9E=E4=BD=93=E7=B1=BB=E6=9C=AA=E5=AE=9E=E7=8E=B0=E5=BA=8F?=
=?UTF-8?q?=E5=88=97=E5=8C=96=E6=8E=A5=E5=8F=A3=E9=97=AE=E9=A2=98=20*=20up?=
=?UTF-8?q?date=20=E4=BC=98=E5=8C=96=20=E8=A1=A8=E5=AD=97=E6=AE=B5?=
=?UTF-8?q?=E6=98=A0=E5=B0=84=E4=BA=8E=E6=95=B0=E6=8D=AE=E5=BA=93=E4=BF=9D?=
=?UTF-8?q?=E6=8C=81=E4=B8=80=E8=87=B4=20*=20update=20=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=20=E7=BB=9F=E4=B8=80sql=E5=90=8D=E7=A7=B0=20*=20fix=20?=
=?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E6=8E=A5=E5=8F=A3=E5=90=8D=E7=A7=B0?=
=?UTF-8?q?=E7=BC=96=E5=86=99=E9=94=99=E8=AF=AF=20*=20merge=20dev=20*=20up?=
=?UTF-8?q?date=20=E8=B0=83=E6=95=B4sql=20=E6=B7=BB=E5=8A=A0=E6=8A=84?=
=?UTF-8?q?=E9=80=81=E6=9F=A5=E8=AF=A2=20*=20update=20=E8=B0=83=E6=95=B4?=
=?UTF-8?q?=E8=8F=9C=E5=8D=95=20*=20update=20=E8=B0=83=E6=95=B4sql?=
=?UTF-8?q?=E8=84=9A=E6=9C=AC=20*=20update=20=E8=B0=83=E6=95=B4=E4=BB=BB?=
=?UTF-8?q?=E5=8A=A1=E6=9F=A5=E8=AF=A2=20=E6=B7=BB=E5=8A=A0=E6=8A=84?=
=?UTF-8?q?=E9=80=81=20*=20add=20=E6=8A=84=E9=80=81=E4=BB=BB=E5=8A=A1=20*?=
=?UTF-8?q?=20remove=20=E5=88=A0=E9=99=A4=E9=94=99=E8=AF=AF=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81=20*=20remove=20=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?=
=?UTF-8?q?=E4=BB=A3=E7=A0=81=20*=20update=20=E8=B0=83=E6=95=B4=E4=BD=9C?=
=?UTF-8?q?=E5=BA=9F=EF=BC=8C=E6=92=A4=E9=94=80=E7=AD=89=E6=A0=A1=E9=AA=8C?=
=?UTF-8?q?=20*=20fix=20=E4=BF=AE=E5=A4=8D=20=E6=B5=81=E7=A8=8B=E4=BD=9C?=
=?UTF-8?q?=E5=BA=9F=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98=20*=20update=20?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=20flowable=20=E9=85=8D=E7=BD=AE=E5=88=B0?=
=?UTF-8?q?=E4=B8=BByml=E6=96=87=E4=BB=B6=20*=20update=20=E8=B0=83?=
=?UTF-8?q?=E6=95=B4=20=E6=95=B0=E6=8D=AE=E6=8E=92=E5=BA=8F=E8=A7=84?=
=?UTF-8?q?=E5=88=99=20*=20fix=20=E4=BF=AE=E5=A4=8D=20=E6=95=B0=E6=8D=AE?=
=?UTF-8?q?=E5=BA=93=E6=97=A0=E6=B3=95=E8=87=AA=E5=8A=A8=E6=89=A7=E8=A1=8C?=
=?UTF-8?q?=E5=BB=BA=E8=A1=A8sql=E9=97=AE=E9=A2=98=20*=20update=20?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=20=E5=B7=A5=E4=BD=9C=E6=B5=81id=E7=94=9F?=
=?UTF-8?q?=E6=88=90=E5=99=A8=E4=BF=9D=E6=8C=81=E5=85=A8=E5=B1=80=E7=BB=9F?=
=?UTF-8?q?=E4=B8=80=20*=20add=20=E6=B7=BB=E5=8A=A0=E9=99=84=E4=BB=B6?=
=?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=9F=A5=E8=AF=A2=20*=20add=20=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E5=AE=A1=E6=89=B9=E9=99=84=E4=BB=B6=E4=B8=8A=E4=BC=A0?=
=?UTF-8?q?=20*=20update=20=E8=B0=83=E6=95=B4bpmn=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A9=B3=E5=9B=9E=E5=A4=B1=E8=B4=A5=E9=97=AE?=
=?UTF-8?q?=E9=A2=98=20*=20update=20=E8=B0=83=E6=95=B4=E4=BC=9A=E7=AD=BE?=
=?UTF-8?q?=E7=B1=BB=E5=9E=8B=E8=BD=AC=E6=8D=A2=E5=BC=82=E5=B8=B8=20*=20ad?=
=?UTF-8?q?d=20=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96=E8=BF=90=E8=A1=8C?=
=?UTF-8?q?=E4=B8=AD=E6=B5=81=E7=A8=8B=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=B5=81?=
=?UTF-8?q?=E7=A8=8B=E6=89=A9=E5=B1=95=E4=BF=A1=E6=81=AF=EF=BC=8C=E8=A1=A5?=
=?UTF-8?q?=E5=85=85=E6=B3=A8=E8=A7=A3=EF=BC=8C=E5=88=A0=E9=99=A4=E6=97=A0?=
=?UTF-8?q?=E7=94=A8=E4=BB=A3=E7=A0=81=20*=20update=20=E8=B0=83=E6=95=B4?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=BD=AC=E6=8D=A2=EF=BC=8C=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=E5=90=AF=E5=8A=A8=EF=BC=8C=E4=B8=8A=E4=BC=A0=E6=96=B0bpmn?=
=?UTF-8?q?=E6=96=87=E4=BB=B6=20*=20update=20=E8=B0=83=E6=95=B4=E6=96=B9?=
=?UTF-8?q?=E6=B3=95=20*=20update=20=E8=B0=83=E6=95=B4=E6=A8=A1=E5=9E=8B?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=20*=20fix=20=E4=BF=AE=E5=A4=8D=20user?=
=?UTF-8?q?=E4=B8=8Edept=20xml=20=E7=BC=96=E5=86=99=E9=94=99=E8=AF=AF=20*?=
=?UTF-8?q?=20remove=20=E7=A7=BB=E9=99=A4=E5=8E=9F=E7=94=9Fui=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=96=B0ui=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=20*=20update=20=E4=BC=98=E5=8C=96=20=E4=B8=8B?=
=?UTF-8?q?=E6=8B=89=E9=80=89=E6=8E=A5=E5=8F=A3=E6=95=B0=E6=8D=AE=E6=9D=83?=
=?UTF-8?q?=E9=99=90=20*=20update=20=E4=BC=98=E5=8C=96=20=E5=88=A0?=
=?UTF-8?q?=E9=99=A4=E8=A7=82=E6=B5=8B=E7=94=A8=E6=97=A5=E5=BF=97=E8=AE=B0?=
=?UTF-8?q?=E5=BD=95=20*=20reset=20=E8=BF=98=E5=8E=9F=E4=BF=AE=E5=A4=8D?=
=?UTF-8?q?=E5=91=BD=E5=90=8D=20*=20update=20=E4=BF=AE=E5=A4=8D=E5=91=BD?=
=?UTF-8?q?=E5=90=8D=20*=20add=20=E6=96=B0=E5=A2=9E=20=E7=94=A8=E6=88=B7?=
=?UTF-8?q?=E3=80=81=E9=83=A8=E9=97=A8=E3=80=81=E8=A7=92=E8=89=B2=E3=80=81?=
=?UTF-8?q?=E5=B2=97=E4=BD=8D=20=E4=B8=8B=E6=8B=89=E9=80=89=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=E4=B8=8E=E4=BB=A3=E7=A0=81=E5=AE=9E=E7=8E=B0=E4=BC=98?=
=?UTF-8?q?=E5=8C=96=20*=20update=20=E8=B0=83=E6=95=B4=E4=BB=BB=E5=8A=A1?=
=?UTF-8?q?=E5=8A=9E=E7=90=86=E5=BC=82=E6=AD=A5=E6=97=B6=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=E7=8A=B6=E6=80=81=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98=20*=20ad?=
=?UTF-8?q?d=20=E5=B7=A5=E4=BD=9C=E6=B5=81=E7=94=A8=E6=88=B7=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2=20*=20remove=20=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?=
=?UTF-8?q?=E6=B3=A8=E9=87=8A=20=E6=B7=BB=E5=8A=A0=E9=9D=9E=E7=A9=BA?=
=?UTF-8?q?=E6=A0=A1=E9=AA=8C=20*=20update=20=E4=BC=98=E5=8C=96=E8=8E=B7?=
=?UTF-8?q?=E5=8F=96=E5=AE=A1=E6=89=B9=E8=AE=B0=E5=BD=95=20*=20update=20?=
=?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BA=8B=E4=BB=B6=E5=8A=9E=E7=90=86=20*=20up?=
=?UTF-8?q?date=20=E8=B0=83=E6=95=B4=E5=B7=A5=E4=BD=9C=E6=B5=81=E9=80=89?=
=?UTF-8?q?=E4=BA=BA=E6=8E=A5=E5=8F=A3=20*=20Merge=20branch=20'dev'=20into?=
=?UTF-8?q?=20future/flowable=20*=20update=20=E5=8A=9E=E7=90=86=E8=B0=83?=
=?UTF-8?q?=E6=95=B4=E6=89=A7=E8=A1=8C=E9=A1=BA=E5=BA=8F=20*=20update=20?=
=?UTF-8?q?=E8=B0=83=E6=95=B4=E6=B5=81=E7=A8=8B=E5=8A=9E=E7=90=86=E4=BC=98?=
=?UTF-8?q?=E5=8C=96=E6=92=A4=E9=94=80=EF=BC=8C=E9=A9=B3=E5=9B=9E=EF=BC=8C?=
=?UTF-8?q?=E8=8D=89=E7=A8=BF=E7=AD=89=E5=8A=A8=E4=BD=9C=20*=20fix=20?=
=?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=90=E6=B5=81=E7=A8=8B=E4=B8=AD=E8=AE=BE?=
=?UTF-8?q?=E7=BD=AE=E5=8F=91=E8=B5=B7=E4=BA=BA=E5=8F=98=E9=87=8F=E9=94=99?=
=?UTF-8?q?=E8=AF=AF=E9=97=AE=E9=A2=98=20*=20Merge=20branch=20'dev'=20into?=
=?UTF-8?q?=20future/flowable=20*=20update=20=E8=B0=83=E6=95=B4=E6=B5=81?=
=?UTF-8?q?=E7=A8=8B=E6=89=A7=E8=A1=8C=E9=9D=9E=E7=A9=BA=E6=A0=A1=E9=AA=8C?=
=?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E4=BB=BB=E5=8A=A1=E8=8A=82=E7=82=B9?=
=?UTF-8?q?=E6=89=A7=E8=A1=8C=20*=20update=20=E8=B0=83=E6=95=B4=E6=B3=A8?=
=?UTF-8?q?=E9=87=8A=20*=20add=20=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=AE=9A?=
=?UTF-8?q?=E4=B9=89=E4=BB=BB=E5=8A=A1=E7=9B=91=E5=90=AC=E7=AD=96=E7=95=A5?=
=?UTF-8?q?=20*=20!469=20update-=E5=AE=8C=E5=96=84=E5=AF=B9=E6=A8=A1?=
=?UTF-8?q?=E5=9E=8Bkey=E6=A0=A1=E9=AA=8C=E9=80=BB=E8=BE=91=20*=20update-?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B8=B8=E9=87=8F=E5=91=BD=E5=90=8D=20*=20up?=
=?UTF-8?q?date-=E5=AE=8C=E5=96=84=E5=AF=B9=E6=A8=A1=E5=9E=8Bkey=E6=A0=A1?=
=?UTF-8?q?=E9=AA=8C=E9=80=BB=E8=BE=91=20*=20add=20=E6=B7=BB=E5=8A=A0sql?=
=?UTF-8?q?=E8=84=9A=E6=9C=AC=20*=20Merge=20branch=20'dev'=20into=20future?=
=?UTF-8?q?/flowable=20*=20Merge=20branch=20'dev'=20into=20future/flowable?=
=?UTF-8?q?=20*=20Merge=20branch=20'future/flowable'=20of=20https://gitee.?=
=?UTF-8?q?com/dromara/RuoYi-Vue-=E2=80=A6=20*=20add=20=E6=B7=BB=E5=8A=A0S?=
=?UTF-8?q?QLserve=E8=84=9A=E6=9C=AC=20*=20add=20=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=9B=91=E5=90=AC=E7=A4=BA=E4=BE=8B=20*=20up?=
=?UTF-8?q?date=20=E8=B0=83=E6=95=B4=E8=8E=B7=E5=8F=96=E5=AE=A1=E6=89=B9?=
=?UTF-8?q?=E8=AE=B0=E5=BD=95=20*=20Merge=20branch=20'future/flowable'=20o?=
=?UTF-8?q?f=20https://gitee.com/dromara/RuoYi-Vue-=E2=80=A6=20*=20update?=
=?UTF-8?q?=20=20=E8=B0=83=E6=95=B4=E8=AF=B7=E5=81=87=E6=9F=A5=E8=AF=A2=20?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=81=E7=A8=8B=E5=AE=9A=E4=B9=89=E6=9F=A5?=
=?UTF-8?q?=E7=9C=8Bxml=20*=20update=20=E8=B0=83=E6=95=B4=E6=B5=81?=
=?UTF-8?q?=E7=A8=8B=E5=AE=9E=E4=BE=8B=E5=88=A0=E9=99=A4=20*=20update=20?=
=?UTF-8?q?=E8=B0=83=E6=95=B4sql=20*=20add=20=E6=B7=BB=E5=8A=A0sql?=
=?UTF-8?q?=E8=84=9A=E6=9C=AC=20*=20update=20=E8=B0=83=E6=95=B4sql=20*=20u?=
=?UTF-8?q?pdate=20=E8=B0=83=E6=95=B4=E8=AF=B7=E5=81=87=E7=94=B3=E8=AF=B7?=
=?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E8=8F=9C=E5=8D=95sql=20*=20update?=
=?UTF-8?q?=20=E8=B0=83=E6=95=B4=E8=AE=BE=E8=AE=A1=E5=99=A8=E4=BF=9D?=
=?UTF-8?q?=E5=AD=98=E5=8F=91=E8=B5=B7=E4=BA=BA=E5=8F=98=E9=87=8F=EF=BC=8C?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8F=9C=E5=8D=95sql=20*=20update=20?=
=?UTF-8?q?=E4=BE=9D=E8=B5=96=E8=B0=83=E6=95=B4=20*=20update=20=E8=B0=83?=
=?UTF-8?q?=E6=95=B4flw=E4=BE=9D=E8=B5=96=20*=20update=20=E5=8D=87?=
=?UTF-8?q?=E7=BA=A77.0=E5=90=8E=E7=A7=BB=E9=99=A4=E7=94=BB=E5=9B=BEmule?=
=?UTF-8?q?=E7=B1=BB=E5=9E=8B=20*=20update=20=E8=B0=83=E6=95=B4flw?=
=?UTF-8?q?=E4=BE=9D=E8=B5=96=20*=20update=20=E7=A7=BB=E5=8A=A8=E6=A8=A1?=
=?UTF-8?q?=E5=9E=8B=E8=AE=BE=E8=AE=A1=E5=99=A8=E7=BF=BB=E8=AF=91=E6=96=B9?=
=?UTF-8?q?=E6=B3=95=20*=20update=20=E8=B0=83=E6=95=B4flw=E4=BE=9D?=
=?UTF-8?q?=E8=B5=96=20*=20fix=20=E4=BF=AE=E5=A4=8D=20=E8=AF=AF=E5=88=A0?=
=?UTF-8?q?=E4=BE=9D=E8=B5=96=20*=20Merge=20remote-tracking=20branch=20'or?=
=?UTF-8?q?igin/dev'=20into=20future/flowable=20*=20remove=20=E7=A7=BB?=
=?UTF-8?q?=E9=99=A4=E5=8A=A8=E6=80=81=E8=A1=A8=E5=8D=95=20*=20Merge=20rem?=
=?UTF-8?q?ote-tracking=20branch=20'origin/dev'=20into=20future/flowable?=
=?UTF-8?q?=20*=20update=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E7=BB=93?=
=?UTF-8?q?=E6=9E=84=20*=20update=20=E8=B0=83=E6=95=B4=E8=AF=B7=E5=81=87?=
=?UTF-8?q?=E7=94=B3=E8=AF=B7=E5=8C=85=E7=BB=93=E6=9E=84=20*=20Merge=20bra?=
=?UTF-8?q?nch=20'dev'=20into=20future/flowable=20*=20add=20=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E6=96=87=E4=BB=B6=EF=BC=8C=E8=B0=83=E6=95=B4=E5=88=86?=
=?UTF-8?q?=E7=B1=BB=E6=9F=A5=E8=AF=A2=20*=20Merge=20branch=20'dev'=20into?=
=?UTF-8?q?=20future/flowable=20*=20Merge=20branch=20'future/flowable'=20o?=
=?UTF-8?q?f=20https://gitee.com/dromara/RuoYi-Vue-=E2=80=A6=20*=20add=20b?=
=?UTF-8?q?pmn=E6=96=87=E4=BB=B6=20=E8=B0=83=E6=95=B4=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=E5=8A=9E=E7=90=86=20*=20Merge=20branch=20'dev'=20into=20future?=
=?UTF-8?q?/flowable=20*=20Merge=20branch=20'future/flowable'=20of=20https?=
=?UTF-8?q?://gitee.com/dromara/RuoYi-Vue-=E2=80=A6=20*=20Merge=20branch?=
=?UTF-8?q?=20'5.X'=20into=20future/flowable=20*=20update=20=E8=B0=83?=
=?UTF-8?q?=E6=95=B4=E6=B6=88=E6=81=AF=E5=8F=91=E9=80=81=20*=20update=20?=
=?UTF-8?q?=E8=B0=83=E6=95=B4=E5=90=8D=E7=A7=B0=20*=20update=20=E8=B0=83?=
=?UTF-8?q?=E6=95=B4=E6=B5=81=E7=A8=8B=E5=AE=9E=E4=BE=8B=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=20*=20add=20=E6=B7=BB=E5=8A=A0=E4=BB=BB=E5=8A=A1=E5=82=AC?=
=?UTF-8?q?=E5=8A=9E=EF=BC=8C=E4=BB=BB=E5=8A=A1=E6=94=B9=E6=B4=BE=20*=20fi?=
=?UTF-8?q?x=20=E4=BF=AE=E5=A4=8D=20=E7=94=A8=E6=88=B7=E6=B3=A8=E5=86=8C?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=A0=A1=E9=AA=8C=E7=94=A8=E6=88=B7=E5=90=8D?=
=?UTF-8?q?=E4=B8=8D=E5=8C=BA=E5=88=86=E7=A7=9F=E6=88=B7=E9=97=AE=E9=A2=98?=
=?UTF-8?q?=20*=20update=20=E8=BF=98=E5=8E=9F=E5=BE=85=E5=8A=9E=E4=BB=BB?=
=?UTF-8?q?=E5=8A=A1=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=BE=85=E5=8A=9E=E6=B6=88?=
=?UTF-8?q?=E6=81=AF=E5=8F=91=E9=80=81=20*=20update=20=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=BE=85=E5=8A=9E=EF=BC=8C=E6=8E=92=E9=99=A4?=
=?UTF-8?q?=E9=9D=9E=E5=BE=85=E5=8A=9E=E4=BB=BB=E5=8A=A1=20*=20Merge=20bra?=
=?UTF-8?q?nch=20'5.X'=20into=20future/flowable=20*=20update=20=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=E6=B5=81=E7=A8=8B=E5=90=AF=E5=8A=A8=E5=90=8E=E9=87=8D?=
=?UTF-8?q?=E6=96=B0=E8=A6=86=E7=9B=96=E6=B5=81=E7=A8=8B=E5=8F=98=E9=87=8F?=
=?UTF-8?q?=EF=BC=8C=E5=88=A0=E9=99=A4=E5=B9=B6=E8=A1=8C=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=E9=A9=B3=E5=9B=9E=EF=BC=8C=E6=92=A4=E9=94=80=E5=90=8E=EF=BC=8C?=
=?UTF-8?q?=E5=9E=83=E5=9C=BE=E6=95=B0=E6=8D=AE=20*=20update=20=E5=8D=87?=
=?UTF-8?q?=E7=BA=A7flowable7.0,=E6=B7=BB=E5=8A=A0=E4=B8=9A=E5=8A=A1?=
=?UTF-8?q?=E5=8D=95=E6=8D=AE=E5=88=A0=E9=99=A4=E6=B5=81=E7=A8=8B=E4=BF=A1?=
=?UTF-8?q?=E6=81=AF=20*=20Merge=20branch=20'5.X'=20into=20future/flowable?=
=?UTF-8?q?=20*=20add=20=E6=B7=BB=E5=8A=A0=E5=8A=A8=E6=80=81=E8=A1=A8?=
=?UTF-8?q?=E5=8D=95=E6=8F=90=E4=BA=A4=E6=B5=81=E7=A8=8B=20*=20Merge=20bra?=
=?UTF-8?q?nch=20'future/flowable'=20of=20https://gitee.com/dromara/RuoYi-?=
=?UTF-8?q?Vue-=E2=80=A6=20*=20add=20=E6=B7=BB=E5=8A=A0=E5=8A=A8=E6=80=81?=
=?UTF-8?q?=E8=A1=A8=E5=8D=95=E5=8D=95=E6=8D=AE=20*=20update=20=E5=8D=87?=
=?UTF-8?q?=E7=BA=A7flowable=E5=88=B07.0.0.M2=EF=BC=8C=E8=B0=83=E6=95=B4?=
=?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E6=8F=90=E4=BA=A4=E6=A0=A1=E9=AA=8C?=
=?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E5=B7=A5=E4=BD=9C=E6=B5=81=E5=B7=A5?=
=?UTF-8?q?=E5=85=B7=E7=B1=BB=20*=20add=20=E6=96=B0=E5=A2=9E=E6=B5=81?=
=?UTF-8?q?=E7=A8=8B=E5=AE=9A=E4=B9=89=E4=B8=8E=E8=A1=A8=E5=8D=95=E5=85=B3?=
=?UTF-8?q?=E8=81=94=20*=20update=20=E8=B0=83=E6=95=B4=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=88=86=E7=B1=BB=E5=90=8E=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=88=86=E7=B1=BB=E7=BC=96=E7=A0=81=20*=20up?=
=?UTF-8?q?date=20=E8=B0=83=E6=95=B4=E6=B5=81=E7=A8=8B=E5=AE=9A=E4=B9=89?=
=?UTF-8?q?=E5=9B=BE=E7=89=87=E9=A2=84=E8=A7=88=20*=20update=20=E8=B0=83?=
=?UTF-8?q?=E6=95=B4=E4=BA=BA=E5=91=98=E6=9F=A5=E8=AF=A2=20*=20update=20?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BD=9C=E5=BA=9F=EF=BC=8C=E6=92=A4=E9=94=80?=
=?UTF-8?q?=E7=AD=89=E5=A4=87=E6=B3=A8=20*=20Merge=20branch=20'5.X'=20into?=
=?UTF-8?q?=20future/flowable=20*=20Merge=20branch=20'future/flowable'=20o?=
=?UTF-8?q?f=20https://gitee.com/dromara/RuoYi-Vue-=E2=80=A6=20*=20fix=20?=
=?UTF-8?q?=E8=A7=A3=E5=86=B3=E8=AE=BE=E8=AE=A1=E5=99=A8=E9=80=89=E6=8B=A9?=
=?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=B5=81=E7=A8=8B=E5=8F=91=E8=B5=B7=E4=BA=BA?=
=?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=8F=98=E9=87=8F=E6=9C=89=E9=97=AE=E9=A2=98?=
=?UTF-8?q?=20*=20add=20=E6=B7=BB=E5=8A=A0=E5=BC=95=E6=93=8E=E8=B0=83?=
=?UTF-8?q?=E5=BA=A6=E7=9B=91=E5=90=AC=20*=20merge=20=E5=90=88=E5=B9=B65.x?=
=?UTF-8?q?=E5=88=86=E6=94=AF=E4=BB=A3=E7=A0=81=20*=20remove=20=E7=A7=BB?=
=?UTF-8?q?=E9=99=A4flow-ui=20*=20update=20=E8=B0=83=E6=95=B4=E6=97=A5?=
=?UTF-8?q?=E5=BF=97=E6=89=93=E5=8D=B0=20*=20add=20=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E6=8C=89=E7=85=A7=E4=B8=9A=E5=8A=A1id=E5=88=A0=E9=99=A4?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=AE=B0=E5=BD=95=20*=20add=20=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E8=AF=B7=E5=81=87=E7=94=B3=E8=AF=B7=E7=A4=BA=E4=BE=8B?=
=?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B=E5=AE=9A=E4=B9=89?=
=?UTF-8?q?=E6=96=87=E4=BB=B6=E9=83=A8=E7=BD=B2=EF=BC=8C=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?sql=E8=8F=9C=E5=8D=95=20*=20update=20=E7=A7=BB=E9=99=A4?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=A1=A8=E5=8D=95=20formConfig=20=E5=B1=9E?=
=?UTF-8?q?=E6=80=A7=EF=BC=8C=E8=A1=A8=E5=8D=95=E9=85=8D=E7=BD=AE=E4=BF=A1?=
=?UTF-8?q?=E6=81=AF=E9=83=BD=E6=94=BE=E4=B8=80=E8=B5=B7=E4=BE=BF=E4=BA=8E?=
=?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=80=82=20*=20update=20=E8=B0=83=E6=95=B4?=
=?UTF-8?q?=E8=8F=9C=E5=8D=95=20*=20add=20=E6=B7=BB=E5=8A=A0mysql=E5=B7=A5?=
=?UTF-8?q?=E4=BD=9C=E6=B5=81=E8=8F=9C=E5=8D=95=20*=20update=20=E8=B0=83?=
=?UTF-8?q?=E6=95=B4=E8=8E=B7=E5=8F=96=E5=8A=A0=E7=AD=BE=E4=BA=BA=EF=BC=8C?=
=?UTF-8?q?=E5=AE=A1=E5=88=A4=E8=AE=B0=E5=BD=95=20*=20update=20=E8=B0=83?=
=?UTF-8?q?=E6=95=B4=E6=B5=81=E7=A8=8B=E4=BD=9C=E5=BA=9F=20*=20add=20?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BB=BB=E5=8A=A1=E5=AE=8C=E6=88=90=E7=8A=B6?=
=?UTF-8?q?=E6=80=81=20*=20add=20=E6=B7=BB=E5=8A=A0=E5=8A=A0=E7=AD=BE?=
=?UTF-8?q?=EF=BC=8C=E5=87=8F=E7=AD=BE=E4=BA=BA=E5=91=98=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=20*=20update=20=E8=B0=83=E6=95=B4=E4=BB=BB=E5=8A=A1=E9=A9=B3?=
=?UTF-8?q?=E5=9B=9E=E5=90=8E=E8=AE=BE=E7=BD=AE=E5=AE=A1=E6=89=B9=E4=BA=BA?=
=?UTF-8?q?=20*=20add=20=E6=B7=BB=E5=8A=A0=E9=A9=B3=E5=9B=9E=E7=94=B3?=
=?UTF-8?q?=E8=AF=B7=E4=BA=BA=20*=20add=20=E6=B7=BB=E5=8A=A0=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2=E5=BD=93=E5=89=8D=E7=A7=9F=E6=88=B7=E6=89=80=E6=9C=89?=
=?UTF-8?q?=E5=BE=85=E5=8A=9E=EF=BC=8C=E5=B7=B2=E5=8A=9E=E4=BB=BB=E5=8A=A1?=
=?UTF-8?q?=20*=20add=20=E6=B7=BB=E5=8A=A0=E4=BC=9A=E7=AD=BE=E4=BB=BB?=
=?UTF-8?q?=E5=8A=A1=E5=8A=A0=E7=AD=BE=E5=87=8F=E7=AD=BE=EF=BC=8C=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E4=BB=BB=E5=8A=A1=E4=BD=9C=E5=BA=9F=E7=90=86=E7=94=B1?=
=?UTF-8?q?=20*=20update=20=E8=B0=83=E6=95=B4=E6=B5=81=E7=A8=8B=E5=AE=9E?=
=?UTF-8?q?=E4=BE=8B=EF=BC=8C=E6=B5=81=E7=A8=8B=E5=AE=9A=E4=B9=89=E6=A3=80?=
=?UTF-8?q?=E7=B4=A2=20*=20update=20=E8=B0=83=E6=95=B4=E6=92=A4=E9=94=80?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=94=B3=E8=AF=B7=EF=BC=8C=E5=BD=93=E5=89=8D?=
=?UTF-8?q?=E7=99=BB=E5=BD=95=E4=BA=BA=E5=8D=95=E6=8D=AE=20*=20add=20?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9E=E7=90=86=E4=BA=BA=E5=90=8D=E7=A7=B0?=
=?UTF-8?q?=E7=BF=BB=E8=AF=91=20*=20add=20=E6=B7=BB=E5=8A=A0=E6=B5=81?=
=?UTF-8?q?=E7=A8=8B=E6=B5=81=E7=A8=8B=E5=AE=9E=E4=BE=8B=EF=BC=8C=E6=B5=81?=
=?UTF-8?q?=E7=A8=8B=E5=AE=9A=E4=B9=89=E5=88=86=E7=B1=BB=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=20*=20add=20=E6=B7=BB=E5=8A=A0=E6=A8=A1=E5=9E=8B=E5=88=86?=
=?UTF-8?q?=E7=B1=BB=E6=9F=A5=E8=AF=A2=20*=20add=20=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=88=86=E7=B1=BB=20*=20add=20=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E6=B5=81=E7=A8=8B=E8=A1=A8=E5=8D=95=E6=93=8D=E4=BD=9C?=
=?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=20*=20fix=20=E4=BF=AE?=
=?UTF-8?q?=E5=A4=8D=E4=BF=AE=E6=94=B9=E6=B5=81=E7=A8=8B=E5=8E=86=E5=8F=B2?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=AE=9E=E4=BE=8B=E9=94=99=E8=AF=AF=E9=97=AE?=
=?UTF-8?q?=E9=A2=98=20*=20update=20=E8=B0=83=E6=95=B4=E5=B7=B2=E5=8A=9E?=
=?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=8E=92=E5=BA=8F=EF=BC=8C=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E6=B3=A8=E9=87=8A=20*=20update=20=E8=B0=83=E6=95=B4=E7=94=A8?=
=?UTF-8?q?=E6=88=B7=EF=BC=8C=E7=94=A8=E6=88=B7=E7=BB=84=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=20*=20add=20=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96=E5=BD=93?=
=?UTF-8?q?=E5=89=8D=E4=BB=BB=E5=8A=A1=E5=8F=82=E4=B8=8E=E8=80=85=EF=BC=8C?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=BB=E5=8A=A1=E5=BE=85=E5=8A=9E=EF=BC=8C?=
=?UTF-8?q?=E5=B7=B2=E5=8A=9E=20*=20add=20=E6=B7=BB=E5=8A=A0=E5=BD=93?=
=?UTF-8?q?=E5=89=8D=E7=99=BB=E5=BD=95=E4=BA=BA=E5=8D=95=E6=8D=AE=E5=88=97?=
=?UTF-8?q?=E8=A1=A8,=E6=B7=BB=E5=8A=A0=E5=8D=95=E6=8D=AE=E7=8A=B6?=
=?UTF-8?q?=E6=80=81=20*=20update=20=E8=A1=A5=E5=85=85=E4=BB=BB=E5=8A=A1?=
=?UTF-8?q?=E6=92=A4=E9=94=80=E4=BA=8B=E5=8A=A1=20*=20add=20=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E6=92=A4=E9=94=80=E6=B5=81=E7=A8=8B=E7=94=B3=E8=AF=B7?=
=?UTF-8?q?=20*=20update=20=E4=BC=98=E5=8C=96=E6=B5=81=E7=A8=8B=E5=AE=9E?=
=?UTF-8?q?=E4=BE=8B=E5=88=A0=E9=99=A4=20*=20fix=20=E4=BF=AE=E5=A4=8D?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=AE=9E=E4=BE=8B=E6=9F=A5=E8=AF=A2=E6=8C=82?=
=?UTF-8?q?=E8=B5=B7=E7=8A=B6=E6=80=81=E9=94=99=E8=AF=AF=20*=20update=20?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B5=81=E7=A8=8B=E5=8A=9E=E7=90=86=20?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E6=8C=82=E8=B5=B7=E6=8A=9B=E5=87=BA=E5=BC=82?=
=?UTF-8?q?=E5=B8=B8=20*=20add=20=E6=B7=BB=E5=8A=A0=E4=B8=9A=E5=8A=A1?=
=?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9E=9A=E4=B8=BE=E3=80=82=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=90=AF=E5=8A=A8=EF=BC=8C=E5=AE=A1=E6=89=B9?=
=?UTF-8?q?=EF=BC=8C=E7=BB=88=E6=AD=A2=E7=AD=89=E7=8A=B6=E6=80=81=20*=20up?=
=?UTF-8?q?date=20=E4=BC=98=E5=8C=96=E6=B5=81=E7=A8=8B=E5=90=AF=E5=8A=A8?=
=?UTF-8?q?=20*=20add=20=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B=E5=AE=9E?=
=?UTF-8?q?=E4=BE=8B=E4=BD=9C=E5=BA=9F=EF=BC=8C=E8=BF=90=E8=A1=8C=E4=B8=AD?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=AE=9E=E4=BE=8B=E5=88=A0=E9=99=A4=EF=BC=8C?=
=?UTF-8?q?=E5=B7=B2=E5=AE=8C=E6=88=90=E6=B5=81=E7=A8=8B=E5=AE=9E=E4=BE=8B?=
=?UTF-8?q?=E5=88=A0=E9=99=A4=20*=20add=20=E6=B7=BB=E5=8A=A0=E8=8A=82?=
=?UTF-8?q?=E7=82=B9=E4=BF=A1=E6=81=AF=20*=20=E8=B0=83=E6=95=B4=E6=B5=81?=
=?UTF-8?q?=E7=A8=8B=E9=A2=84=E8=A7=88=20*=20add=20=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E5=AE=A1=E6=89=B9=E8=AE=B0=E5=BD=95=20*=20=E8=BF=98=E5=8E=9F?=
=?UTF-8?q?=E4=BB=A3=E7=A0=81=20*=20fix=20=E4=BF=AE=E5=A4=8D=E6=A8=A1?=
=?UTF-8?q?=E5=9E=8B=E5=AF=BC=E5=87=BA=E9=94=99=E8=AF=AF=20*=20add=20?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A7=94=E6=89=98=E5=8A=9E=E7=90=86=EF=BC=8C?=
=?UTF-8?q?=E8=B0=83=E6=95=B4=E6=B5=81=E7=A8=8B=E5=90=AF=E5=8A=A8=20*=20ad?=
=?UTF-8?q?d=20=E6=B7=BB=E5=8A=A0=E8=BD=AC=E5=8A=9E=E4=BB=BB=E5=8A=A1=20*?=
=?UTF-8?q?=20add=20=E6=B7=BB=E5=8A=A0=E4=BB=BB=E5=8A=A1=E6=8B=BE=E5=8F=96?=
=?UTF-8?q?=EF=BC=8C=E4=BB=BB=E5=8A=A1=E5=BD=92=E8=BF=98=EF=BC=8C=E4=BB=BB?=
=?UTF-8?q?=E5=8A=A1=E7=BB=88=E6=AD=A2=EF=BC=8C=E4=BB=BB=E5=8A=A1=E5=A7=94?=
=?UTF-8?q?=E6=89=98=20*=20fix=20=E4=BF=AE=E5=A4=8D=E4=BB=BB=E5=8A=A1?=
=?UTF-8?q?=EF=BC=8C=E6=B5=81=E7=A8=8B=E5=AE=9E=E4=BE=8B=E5=88=86=E9=A1=B5?=
=?UTF-8?q?=E6=A8=A1=E7=B3=8A=E6=9F=A5=E8=AF=A2=E5=A4=B1=E6=95=88=20*=20ad?=
=?UTF-8?q?d=20=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B=E5=AE=9E=E4=BE=8B?=
=?UTF-8?q?=E8=BF=90=E8=A1=8C=E4=B8=AD=EF=BC=8C=E5=B7=B2=E7=BB=93=E6=9D=9F?=
=?UTF-8?q?=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=20*=20add=20=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E9=80=9A=E8=BF=87=E6=B5=81=E7=A8=8B=E5=AE=9E=E4=BE=8B?=
=?UTF-8?q?id=E8=8E=B7=E5=8F=96=E5=8E=86=E5=8F=B2=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=E5=9B=BE=EF=BC=8C=E6=B7=BB=E5=8A=A0flowable=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E6=B5=81=E7=A8=8B=E5=8A=9E=E7=90=86?=
=?UTF-8?q?=20*=20add=20=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B=E5=8A=9E?=
=?UTF-8?q?=E7=90=86=EF=BC=8C=E6=B5=81=E7=A8=8B=E5=BE=85=E5=8A=9E=EF=BC=8C?=
=?UTF-8?q?=E5=B7=B2=E5=8A=9E=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=20*=20?=
=?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8=E5=AF=BC=E5=85=A5=20*=20?=
=?UTF-8?q?=E8=B0=83=E6=95=B4=E6=B5=81=E7=A8=8B=E6=9F=A5=E8=AF=A2=E7=A7=9F?=
=?UTF-8?q?=E6=88=B7id=20*=20add=20=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=E5=90=AF=E5=8A=A8=20*=20=E6=B7=BB=E5=8A=A0=E6=A8=A1=E5=9E=8B?=
=?UTF-8?q?=E4=BA=BA=E5=91=98=E7=94=A8=E6=88=B7=EF=BC=8C=E7=BB=84=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2=20*=20add=20=E6=B7=BB=E5=8A=A0=E6=A8=A1=E5=9E=8B?=
=?UTF-8?q?=E9=83=A8=E7=BD=B2=E6=A8=A1=E5=9E=8B=E6=A0=A1=E9=AA=8C=20*=20?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A8=A1=E5=9E=8B=E9=83=A8=E7=BD=B2=E5=AF=BC?=
=?UTF-8?q?=E5=87=BA=E6=A0=A1=E9=AA=8C=20*=20fix=20=E4=BF=AE=E5=A4=8D?=
=?UTF-8?q?=E6=A8=A1=E5=9E=8B=E7=94=BB=E5=9B=BE=E4=BF=9D=E5=AD=98=E6=97=B6?=
=?UTF-8?q?key=E4=B8=8D=E5=9B=9E=E6=98=BE=E9=97=AE=E9=A2=98=20*=20add=20?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B=E5=AE=9A=E4=B9=89=E8=BD=AC?=
=?UTF-8?q?=E6=8D=A2=E4=B8=BA=E6=A8=A1=E5=9E=8B=20*=20=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=E6=A8=A1=E5=9E=8B=E7=BC=96=E8=BE=91=E6=A0=A1=E9=AA=8C=EF=BC=8C?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=AE=9A=E4=B9=89=E5=88=A0=E9=99=A4=EF=BC=8C?=
=?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=AE=9A=E4=B9=89=E6=BF=80=E6=B4=BB=E6=8C=82?=
=?UTF-8?q?=E8=B5=B7=E7=AD=89=20*=20add=20=E6=B7=BB=E5=8A=A0=E6=B5=81?=
=?UTF-8?q?=E7=A8=8B=E5=AE=9A=E4=B9=89=E5=88=A0=E9=99=A4=EF=BC=8C=E6=B5=81?=
=?UTF-8?q?=E7=A8=8B=E5=AE=9A=E4=B9=89=E6=8C=82=E8=B5=B7=E6=BF=80=E6=B4=BB?=
=?UTF-8?q?=EF=BC=8C=E6=B5=81=E7=A8=8B=E5=AE=9A=E4=B9=89=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=E8=BF=81=E7=A7=BB=20*=20=E8=B0=83=E6=95=B4ObjectNode.put?=
=?UTF-8?q?=E8=AD=A6=E5=91=8A=20*=20=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?=
=?UTF-8?q?=E4=BE=9D=E8=B5=96=EF=BC=8C=E4=BC=98=E5=8C=96=E6=A8=A1=E5=9E=8B?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=AF=BC=E5=87=BA=EF=BC=8C=E9=83=A8?=
=?UTF-8?q?=E7=BD=B2=E9=9D=9E=E7=A9=BA=E6=A0=A1=E9=AA=8C=20*=20=E5=88=A0?=
=?UTF-8?q?=E9=99=A4=E6=97=A0=E7=94=A8=E5=AF=BC=E5=85=A5=20*=20=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E6=B5=81=E7=A8=8B=E5=AE=9A=E4=B9=89=E5=88=86=E9=A1=B5?=
=?UTF-8?q?=EF=BC=8C=E6=9F=A5=E7=9C=8B=E5=9B=BE=E7=89=87=EF=BC=8C=E6=9F=A5?=
=?UTF-8?q?=E7=9C=8Bxml=20*=20=E6=B7=BB=E5=8A=A0=E6=A8=A1=E5=9E=8B?=
=?UTF-8?q?=E9=83=A8=E7=BD=B2=EF=BC=8C=E5=AF=BC=E5=87=BA=E6=A8=A1=E5=9E=8B?=
=?UTF-8?q?=20*=20=E4=BF=AE=E6=94=B9=E7=94=BB=E5=9B=BE=E8=B4=A6=E6=88=B7?=
=?UTF-8?q?=E7=99=BB=E5=BD=95=E4=BF=A1=E6=81=AF=20*=20=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E6=A8=A1=E5=9E=8B=E7=BC=96=E8=BE=91key=E9=87=8D=E5=A4=8D?=
=?UTF-8?q?=E6=A0=A1=E9=AA=8C=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=A7=9F=E6=88=B7?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=EF=BC=8C=E5=88=A0=E9=99=A4=E5=BF=BD=E7=95=A5?=
=?UTF-8?q?token=E6=B3=A8=E8=A7=A3=20*=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?=
=?UTF-8?q?=E5=9E=8B=E6=96=B0=E5=A2=9E=E6=A0=A1=E9=AA=8C=20*=20=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E5=B7=A5=E4=BD=9C=E6=B5=81=E6=A8=A1=E5=9E=8B=E6=96=B0?=
=?UTF-8?q?=E5=A2=9E=EF=BC=8C=E4=BF=AE=E6=94=B9=EF=BC=8C=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=EF=BC=8C=E5=88=A0=E9=99=A4=20*=20=E3=80=90ADD=E3=80=91?=
=?UTF-8?q?=E9=9B=86=E6=88=90=E5=8E=9F=E7=94=9FFlowable-ui=20*=20=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0workflow=E6=A8=A1=E5=9D=97=EF=BC=8C=E6=B7=BB=E5=8A=A0f?=
=?UTF-8?q?lowable=E4=BE=9D=E8=B5=96=EF=BC=8Cyml=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 18 +
ruoyi-admin/pom.xml | 6 +
.../src/main/resources/application-dev.yml | 4 +-
.../src/main/resources/application-prod.yml | 4 +-
.../src/main/resources/application.yml | 18 +
ruoyi-modules/pom.xml | 1 +
ruoyi-modules/ruoyi-workflow/pom.xml | 93 ++
.../annotation/FlowListenerAnnotation.java | 27 +
.../dromara/workflow/common/PageEntity.java | 28 +
.../common/constant/FlowConstant.java | 92 ++
.../common/enums/BusinessStatusEnum.java | 93 ++
.../common/enums/MessageTypeEnum.java | 31 +
.../workflow/common/enums/TaskStatusEnum.java | 90 ++
.../controller/ActModelController.java | 135 ++
.../ActProcessDefinitionController.java | 146 +++
.../ActProcessInstanceController.java | 157 +++
.../controller/ActTaskController.java | 246 ++++
.../controller/TestLeaveController.java | 107 ++
.../controller/WfCategoryController.java | 106 ++
.../controller/WorkflowUserController.java | 72 ++
.../workflow/domain/ActHiProcinst.java | 152 +++
.../workflow/domain/ActHiTaskinst.java | 193 +++
.../dromara/workflow/domain/TestLeave.java | 58 +
.../dromara/workflow/domain/WfCategory.java | 52 +
.../workflow/domain/bo/AddMultiBo.java | 40 +
.../workflow/domain/bo/BackProcessBo.java | 43 +
.../workflow/domain/bo/CompleteTaskBo.java | 65 +
.../workflow/domain/bo/DelegateBo.java | 38 +
.../workflow/domain/bo/DeleteMultiBo.java | 52 +
.../dromara/workflow/domain/bo/ModelBo.java | 69 +
.../domain/bo/ProcessDefinitionBo.java | 37 +
.../workflow/domain/bo/ProcessInstanceBo.java | 46 +
.../workflow/domain/bo/ProcessInvalidBo.java | 31 +
.../workflow/domain/bo/StartProcessBo.java | 45 +
.../workflow/domain/bo/SysUserMultiBo.java | 34 +
.../dromara/workflow/domain/bo/TaskBo.java | 36 +
.../workflow/domain/bo/TaskUrgingBo.java | 34 +
.../workflow/domain/bo/TerminationBo.java | 37 +
.../workflow/domain/bo/TestLeaveBo.java | 75 ++
.../workflow/domain/bo/TransmitBo.java | 37 +
.../workflow/domain/bo/WfCategoryBo.java | 54 +
.../workflow/domain/vo/ActHistoryInfoVo.java | 89 ++
.../workflow/domain/vo/GraphicInfoVo.java | 47 +
.../domain/vo/GroupRepresentation.java | 27 +
.../dromara/workflow/domain/vo/ModelVo.java | 48 +
.../workflow/domain/vo/MultiInstanceVo.java | 33 +
.../workflow/domain/vo/ParticipantVo.java | 43 +
.../domain/vo/ProcessDefinitionVo.java | 65 +
.../workflow/domain/vo/ProcessInstanceVo.java | 95 ++
.../dromara/workflow/domain/vo/TaskVo.java | 143 +++
.../workflow/domain/vo/TestLeaveVo.java | 70 ++
.../workflow/domain/vo/WfCategoryVo.java | 58 +
.../dromara/workflow/domain/vo/WfCopy.java | 23 +
.../CustomDefaultProcessDiagramCanvas.java | 108 ++
.../CustomDefaultProcessDiagramGenerator.java | 1120 +++++++++++++++++
.../cmd/AddSequenceMultiInstanceCmd.java | 61 +
.../workflow/flowable/cmd/AttachmentCmd.java | 68 +
.../flowable/cmd/DeleteExecutionCmd.java | 36 +
.../cmd/DeleteSequenceMultiInstanceCmd.java | 82 ++
.../cmd/ExecutionChildByExecutionIdCmd.java | 39 +
.../flowable/cmd/UpdateBusinessStatusCmd.java | 37 +
.../flowable/cmd/UpdateHiTaskInstCmd.java | 51 +
.../flowable/config/FlowableConfig.java | 32 +
.../config/GlobalFlowableListener.java | 91 ++
.../flowable/strategy/FlowEventStrategy.java | 73 ++
.../strategy/FlowProcessEventHandler.java | 20 +
.../strategy/FlowTaskEventHandler.java | 20 +
.../listener/TestCustomProcessHandler.java | 24 +
.../listener/TestCustomTaskHandler.java | 24 +
.../listener/TestLeaveExecutionListener.java | 29 +
.../listener/TestLeaveTaskListener.java | 21 +
.../workflow/mapper/ActHiProcinstMapper.java | 16 +
.../workflow/mapper/ActHiTaskinstMapper.java | 16 +
.../workflow/mapper/ActTaskMapper.java | 38 +
.../workflow/mapper/TestLeaveMapper.java | 15 +
.../workflow/mapper/WfCategoryMapper.java | 15 +
.../service/IActHiProcinstService.java | 31 +
.../service/IActHiTaskinstService.java | 11 +
.../workflow/service/IActModelService.java | 71 ++
.../service/IActProcessDefinitionService.java | 90 ++
.../service/IActProcessInstanceService.java | 113 ++
.../workflow/service/IActTaskService.java | 129 ++
.../workflow/service/ITestLeaveService.java | 49 +
.../workflow/service/IWfCategoryService.java | 51 +
.../service/IWorkflowUserService.java | 60 +
.../impl/ActHiProcinstServiceImpl.java | 51 +
.../impl/ActHiTaskinstServiceImpl.java | 18 +
.../service/impl/ActModelServiceImpl.java | 334 +++++
.../impl/ActProcessDefinitionServiceImpl.java | 328 +++++
.../impl/ActProcessInstanceServiceImpl.java | 695 ++++++++++
.../service/impl/ActTaskServiceImpl.java | 708 +++++++++++
.../service/impl/TestLeaveServiceImpl.java | 124 ++
.../service/impl/WfCategoryServiceImpl.java | 128 ++
.../service/impl/WorkflowUserServiceImpl.java | 216 ++++
.../dromara/workflow/utils/ModelUtils.java | 220 ++++
.../dromara/workflow/utils/WorkflowUtils.java | 341 +++++
.../src/main/resources/mapper/package-info.md | 3 +
.../mapper/workflow/ActHiProcinstMapper.xml | 7 +
.../mapper/workflow/ActHiTaskinstMapper.xml | 7 +
.../mapper/workflow/ActTaskMapper.xml | 60 +
.../mapper/workflow/TestLeaveMapper.xml | 7 +
.../mapper/workflow/WfCategoryMapper.xml | 7 +
.../bpmn/请假流程(会签)-leave5.zip | Bin 0 -> 1342 bytes
.../请假流程(包容网关)-leave4.zip | Bin 0 -> 1590 bytes
.../请假流程(子流程)-leave6.zip | Bin 0 -> 1587 bytes
.../请假流程(并行网关)-leave3.zip | Bin 0 -> 1520 bytes
.../请假流程(排他网关)-leave2.zip | Bin 0 -> 1466 bytes
.../请假流程(普通流程)-leave1.zip | Bin 0 -> 1255 bytes
.../bpmn/请假流程(监听)-leave7.zip | Bin 0 -> 1232 bytes
script/sql/flowable.sql | 65 +
script/sql/oracle/flowable.sql | 93 ++
script/sql/postgres/flowable.sql | 122 ++
script/sql/sqlserver/flowable.sql | 155 +++
113 files changed, 9769 insertions(+), 4 deletions(-)
create mode 100644 ruoyi-modules/ruoyi-workflow/pom.xml
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/PageEntity.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/BusinessStatusEnum.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfCategoryController.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiProcinst.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiTaskinst.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/TestLeave.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfCategory.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/AddMultiBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/DelegateBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/DeleteMultiBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessDefinitionBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInstanceBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInvalidBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/SysUserMultiBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskUrgingBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TerminationBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TestLeaveBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TransmitBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfCategoryBo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/GraphicInfoVo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/GroupRepresentation.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ModelVo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/MultiInstanceVo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ParticipantVo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TestLeaveVo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfCategoryVo.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfCopy.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/CustomDefaultProcessDiagramCanvas.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/CustomDefaultProcessDiagramGenerator.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AddSequenceMultiInstanceCmd.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteExecutionCmd.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/ExecutionChildByExecutionIdCmd.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/UpdateBusinessStatusCmd.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/UpdateHiTaskInstCmd.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/FlowableConfig.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowEventStrategy.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowTaskEventHandler.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomProcessHandler.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomTaskHandler.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestLeaveExecutionListener.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestLeaveTaskListener.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiProcinstMapper.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiTaskinstMapper.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/TestLeaveMapper.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfCategoryMapper.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiProcinstService.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiTaskinstService.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActModelService.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ITestLeaveService.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfCategoryService.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiProcinstServiceImpl.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiTaskinstServiceImpl.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfCategoryServiceImpl.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/package-info.md
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActHiProcinstMapper.xml
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActHiTaskinstMapper.xml
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/TestLeaveMapper.xml
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfCategoryMapper.xml
create mode 100644 script/bpmn/请假流程(会签)-leave5.zip
create mode 100644 script/bpmn/请假流程(包容网关)-leave4.zip
create mode 100644 script/bpmn/请假流程(子流程)-leave6.zip
create mode 100644 script/bpmn/请假流程(并行网关)-leave3.zip
create mode 100644 script/bpmn/请假流程(排他网关)-leave2.zip
create mode 100644 script/bpmn/请假流程(普通流程)-leave1.zip
create mode 100644 script/bpmn/请假流程(监听)-leave7.zip
create mode 100644 script/sql/flowable.sql
create mode 100644 script/sql/oracle/flowable.sql
create mode 100644 script/sql/postgres/flowable.sql
create mode 100644 script/sql/sqlserver/flowable.sql
diff --git a/pom.xml b/pom.xml
index 1ce5af976..ba9ced2d7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,6 +57,9 @@
3.11.0
3.1.2
1.3.0
+
+
+ 7.0.0
@@ -111,6 +114,14 @@
import
+
+ org.flowable
+ flowable-bom
+ ${flowable.version}
+ pom
+ import
+
+
me.zhyd.oauth
@@ -353,6 +364,13 @@
${revision}
+
+
+ org.dromara
+ ruoyi-workflow
+ ${revision}
+
+
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 26cd02333..cbf03ce36 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -75,6 +75,12 @@
ruoyi-demo
+
+
+ org.dromara
+ ruoyi-workflow
+
+
de.codecentric
spring-boot-admin-starter-client
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index 847e4c2dd..5589e5864 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -43,7 +43,7 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
- url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+ url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: root
password: root
# 从库数据源
@@ -51,7 +51,7 @@ spring:
lazy: true
type: ${spring.datasource.type}
driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+ url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username:
password:
# oracle:
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index c8817aae6..b4f4040bd 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -46,7 +46,7 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
- url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+ url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: root
password: root
# 从库数据源
@@ -54,7 +54,7 @@ spring:
lazy: true
type: ${spring.datasource.type}
driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+ url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username:
password:
# oracle:
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 0d334a2d4..a3ea740be 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -266,3 +266,21 @@ websocket:
path: /resource/websocket
# 设置访问源地址
allowedOrigins: '*'
+
+--- #flowable配置
+flowable:
+ async-executor-activate: false #关闭定时任务JOB
+ # 将databaseSchemaUpdate设置为true。当Flowable发现库与数据库表结构不一致时,会自动将数据库表结构升级至新版本。
+ database-schema-update: true
+ activity-font-name: 宋体
+ label-font-name: 宋体
+ annotation-font-name: 宋体
+ # 关闭各个模块生成表,目前只使用工作流基础表
+ idm:
+ enabled: false
+ cmmn:
+ enabled: false
+ dmn:
+ enabled: false
+ app:
+ enabled: false
diff --git a/ruoyi-modules/pom.xml b/ruoyi-modules/pom.xml
index 4044916fb..daff497a0 100644
--- a/ruoyi-modules/pom.xml
+++ b/ruoyi-modules/pom.xml
@@ -14,6 +14,7 @@
ruoyi-generator
ruoyi-job
ruoyi-system
+ ruoyi-workflow
ruoyi-modules
diff --git a/ruoyi-modules/ruoyi-workflow/pom.xml b/ruoyi-modules/ruoyi-workflow/pom.xml
new file mode 100644
index 000000000..f0391e358
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/pom.xml
@@ -0,0 +1,93 @@
+
+
+
+ org.dromara
+ ruoyi-modules
+ ${revision}
+ ../pom.xml
+
+ 4.0.0
+ jar
+ ruoyi-workflow
+
+
+ 工作流模块
+
+
+
+
+
+
+ org.flowable
+ flowable-spring-boot-autoconfigure
+
+
+ org.flowable
+ flowable-spring-security
+
+
+
+
+
+ org.flowable
+ flowable-spring-configurator
+
+
+
+ org.flowable
+ flowable-spring-boot-starter-actuator
+
+
+
+
+ org.flowable
+ flowable-image-generator
+
+
+
+
+ org.flowable
+ flowable-json-converter
+ 6.8.0
+
+
+
+
+ org.apache.xmlgraphics
+ batik-all
+ 1.10
+
+
+ xalan
+ xalan
+
+
+
+
+
+
+ org.dromara
+ ruoyi-system
+
+
+
+ org.dromara
+ ruoyi-common-websocket
+
+
+
+ org.dromara
+ ruoyi-common-mail
+
+
+
+ org.dromara
+ ruoyi-common-sms
+
+
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java
new file mode 100644
index 000000000..5ea262d17
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java
@@ -0,0 +1,27 @@
+package org.dromara.workflow.annotation;
+
+
+import java.lang.annotation.*;
+
+/**
+ * 流程任务监听注解
+ *
+ * @author may
+ * @date 2023-12-27
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Inherited
+public @interface FlowListenerAnnotation {
+
+ /**
+ * 流程定义key
+ */
+ String processDefinitionKey();
+
+ /**
+ * 节点id
+ */
+ String taskDefId() default "";
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/PageEntity.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/PageEntity.java
new file mode 100644
index 000000000..cc8aaddd8
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/PageEntity.java
@@ -0,0 +1,28 @@
+package org.dromara.workflow.common;
+
+
+import lombok.Data;
+
+/**
+ * 分页参数
+ *
+ * @author may
+ */
+@Data
+public class PageEntity {
+
+ /**
+ * 当前页码
+ */
+ private Integer pageNum = 0;
+
+ /**
+ * 页容量
+ */
+ private Integer pageSize = 10;
+
+ public Integer getPageNum() {
+ return (pageNum - 1) * pageSize;
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java
new file mode 100644
index 000000000..614f9fffa
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java
@@ -0,0 +1,92 @@
+package org.dromara.workflow.common.constant;
+
+
+/**
+ * 工作流常量
+ *
+ * @author may
+ */
+public interface FlowConstant {
+
+ String MESSAGE_CURRENT_TASK_IS_NULL = "当前任务不存在或你不是任务办理人!";
+
+ String MESSAGE_SUSPENDED = "当前任务已挂起不可审批!";
+
+ /**
+ * 连线
+ */
+ String SEQUENCE_FLOW = "sequenceFlow";
+
+ /**
+ * 并行网关
+ */
+ String PARALLEL_GATEWAY = "parallelGateway";
+
+ /**
+ * 排它网关
+ */
+ String EXCLUSIVE_GATEWAY = "exclusiveGateway";
+
+ /**
+ * 包含网关
+ */
+ String INCLUSIVE_GATEWAY = "inclusiveGateway";
+
+ /**
+ * 结束节点
+ */
+ String END_EVENT = "endEvent";
+
+
+ /**
+ * 流程委派标识
+ */
+ String PENDING = "PENDING";
+
+ /**
+ * 候选人标识
+ */
+ String CANDIDATE = "candidate";
+
+ /**
+ * 会签任务总数
+ */
+ String NUMBER_OF_INSTANCES = "nrOfInstances";
+
+ /**
+ * 正在执行的会签总数
+ */
+ String NUMBER_OF_ACTIVE_INSTANCES = "nrOfActiveInstances";
+
+ /**
+ * 已完成的会签任务总数
+ */
+ String NUMBER_OF_COMPLETED_INSTANCES = "nrOfCompletedInstances";
+
+ /**
+ * 循环的索引值,可以使用elementIndexVariable属性修改loopCounter的变量名
+ */
+ String LOOP_COUNTER = "loopCounter";
+
+ String ZIP = "ZIP";
+
+ /**
+ * 流程实例对象
+ */
+ String PROCESS_INSTANCE_VO = "processInstanceVo";
+
+ /**
+ * 流程发起人
+ */
+ String INITIATOR = "initiator";
+
+ /**
+ * 开启跳过表达式变量
+ */
+ String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED";
+
+ /**
+ * 模型标识key命名规范正则表达式
+ */
+ String MODEL_KEY_PATTERN = "^[a-zA-Z][a-zA-Z0-9_]{0,254}$";
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/BusinessStatusEnum.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/BusinessStatusEnum.java
new file mode 100644
index 000000000..43204f542
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/BusinessStatusEnum.java
@@ -0,0 +1,93 @@
+package org.dromara.workflow.common.enums;
+
+import cn.hutool.core.util.StrUtil;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.StringUtils;
+
+import java.util.Arrays;
+
+/**
+ * 业务状态枚举
+ *
+ * @author may
+ */
+@Getter
+@AllArgsConstructor
+public enum BusinessStatusEnum {
+ /**
+ * 已撤销
+ */
+ CANCEL("cancel", "已撤销"),
+ /**
+ * 草稿
+ */
+ DRAFT("draft", "草稿"),
+ /**
+ * 待审核
+ */
+ WAITING("waiting", "待审核"),
+ /**
+ * 已完成
+ */
+ FINISH("finish", "已完成"),
+ /**
+ * 已作废
+ */
+ INVALID("invalid", "已作废"),
+ /**
+ * 已退回
+ */
+ BACK("back", "已退回"),
+ /**
+ * 已终止
+ */
+ TERMINATION("termination", "已终止");
+
+ /**
+ * 状态
+ */
+ private final String status;
+
+ /**
+ * 描述
+ */
+ private final String desc;
+
+ /**
+ * 获取业务状态
+ *
+ * @param status 状态
+ */
+ public static String findByStatus(String status) {
+ if (StringUtils.isBlank(status)) {
+ return StrUtil.EMPTY;
+ }
+ return Arrays.stream(BusinessStatusEnum.values())
+ .filter(statusEnum -> statusEnum.getStatus().equals(status))
+ .findFirst()
+ .map(BusinessStatusEnum::getDesc)
+ .orElse(StrUtil.EMPTY);
+ }
+
+ /**
+ * 启动流程校验
+ *
+ * @param status 状态
+ */
+ public static void checkStartStatus(String status) {
+ if (WAITING.getStatus().equals(status)) {
+ throw new ServiceException("该单据已提交过申请,正在审批中!");
+ } else if (FINISH.getStatus().equals(status)) {
+ throw new ServiceException("该单据已完成申请!");
+ } else if (INVALID.getStatus().equals(status)) {
+ throw new ServiceException("该单据已作废!");
+ } else if (TERMINATION.getStatus().equals(status)) {
+ throw new ServiceException("该单据已终止!");
+ } else if (StringUtils.isBlank(status)) {
+ throw new ServiceException("流程状态为空!");
+ }
+ }
+}
+
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java
new file mode 100644
index 000000000..d7ba1bf01
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java
@@ -0,0 +1,31 @@
+package org.dromara.workflow.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 消息类型枚举
+ *
+ * @author may
+ */
+@Getter
+@AllArgsConstructor
+public enum MessageTypeEnum {
+ /**
+ * 站内信
+ */
+ SYSTEM_MESSAGE("1", "站内信"),
+ /**
+ * 邮箱
+ */
+ EMAIL_MESSAGE("2", "邮箱"),
+ /**
+ * 短信
+ */
+ SMS_MESSAGE("3", "短信");
+
+ private final String code;
+
+ private final String desc;
+}
+
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java
new file mode 100644
index 000000000..03be8dc53
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java
@@ -0,0 +1,90 @@
+package org.dromara.workflow.common.enums;
+
+import cn.hutool.core.util.StrUtil;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+
+/**
+ * 任务状态枚举
+ *
+ * @author may
+ */
+@Getter
+@AllArgsConstructor
+public enum TaskStatusEnum {
+ /**
+ * 撤销
+ */
+ CANCEL("cancel", "撤销"),
+ /**
+ * 通过
+ */
+ PASS("pass", "通过"),
+ /**
+ * 待审核
+ */
+ WAITING("waiting", "待审核"),
+ /**
+ * 作废
+ */
+ INVALID("invalid", "作废"),
+ /**
+ * 退回
+ */
+ BACK("back", "退回"),
+ /**
+ * 终止
+ */
+ TERMINATION("termination", "终止"),
+ /**
+ * 转办
+ */
+ TRANSFER("transfer", "转办"),
+ /**
+ * 委托
+ */
+ PENDING("pending", "委托"),
+ /**
+ * 抄送
+ */
+ COPY("copy", "抄送"),
+ /**
+ * 加签
+ */
+ SIGN("sign", "加签"),
+ /**
+ * 减签
+ */
+ SIGN_OFF("sign_off", "减签");
+
+ /**
+ * 状态
+ */
+ private final String status;
+
+ /**
+ * 描述
+ */
+ private final String desc;
+
+ /**
+ * 任务业务状态
+ *
+ * @param status 状态
+ */
+ public static String findByStatus(String status) {
+ if (StringUtils.isBlank(status)) {
+ return StrUtil.EMPTY;
+ }
+
+ return Arrays.stream(TaskStatusEnum.values())
+ .filter(statusEnum -> statusEnum.getStatus().equals(status))
+ .findFirst()
+ .map(TaskStatusEnum::getDesc)
+ .orElse(StrUtil.EMPTY);
+ }
+}
+
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java
new file mode 100644
index 000000000..31e31e6eb
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java
@@ -0,0 +1,135 @@
+package org.dromara.workflow.controller;
+
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.workflow.domain.bo.ModelBo;
+import org.dromara.workflow.domain.vo.ModelVo;
+import org.dromara.workflow.service.IActModelService;
+import org.flowable.engine.RepositoryService;
+import org.flowable.engine.repository.Model;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+
+/**
+ * 模型管理 控制层
+ *
+ * @author may
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/workflow/model")
+public class ActModelController extends BaseController {
+
+ private final RepositoryService repositoryService;
+
+ private final IActModelService actModelService;
+
+
+ /**
+ * 分页查询模型
+ *
+ * @param modelBo 模型参数
+ */
+ @GetMapping("/list")
+ public TableDataInfo page(ModelBo modelBo) {
+ return actModelService.page(modelBo);
+ }
+
+ /**
+ * 新增模型
+ *
+ * @param modelBo 模型请求对象
+ */
+ @Log(title = "模型管理", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping("/save")
+ public R saveNewModel(@Validated(AddGroup.class) @RequestBody ModelBo modelBo) {
+ return toAjax(actModelService.saveNewModel(modelBo));
+ }
+
+ /**
+ * 查询模型
+ *
+ * @param id 模型id
+ */
+ @GetMapping("/getInfo/{id}")
+ public R getInfo(@NotBlank(message = "模型id不能为空") @PathVariable String id) {
+ return R.ok(actModelService.getInfo(id));
+ }
+
+ /**
+ * 修改模型信息
+ *
+ * @param modelBo 模型数据
+ */
+ @Log(title = "模型管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping(value = "/update")
+ public R update(@RequestBody ModelBo modelBo) {
+ return toAjax(actModelService.update(modelBo));
+ }
+
+ /**
+ * 编辑XMl模型
+ *
+ * @param modelBo 模型数据
+ */
+ @Log(title = "模型管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping(value = "/editModelXml")
+ public R editModel(@Validated(EditGroup.class) @RequestBody ModelBo modelBo) {
+ return toAjax(actModelService.editModelXml(modelBo));
+ }
+
+ /**
+ * 删除流程模型
+ *
+ * @param ids 模型id
+ */
+ @Log(title = "模型管理", businessType = BusinessType.DELETE)
+ @RepeatSubmit()
+ @DeleteMapping("/{ids}")
+ @Transactional(rollbackFor = Exception.class)
+ public R delete(@NotEmpty(message = "主键不能为空") @PathVariable String[] ids) {
+ Arrays.stream(ids).parallel().forEachOrdered(repositoryService::deleteModel);
+ return R.ok();
+ }
+
+ /**
+ * 模型部署
+ *
+ * @param id 模型id
+ */
+ @Log(title = "模型管理", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping("/modelDeploy/{id}")
+ public R deploy(@NotBlank(message = "模型id不能为空") @PathVariable("id") String id) {
+ return toAjax(actModelService.modelDeploy(id));
+ }
+
+ /**
+ * 导出模型zip压缩包
+ *
+ * @param modelId 模型id
+ * @param response 相应
+ */
+ @GetMapping("/export/zip/{modelId}")
+ public void exportZip(@NotEmpty(message = "模型id不能为空") @PathVariable String modelId,
+ HttpServletResponse response) {
+ actModelService.exportZip(modelId, response);
+ }
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java
new file mode 100644
index 000000000..a19cba152
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java
@@ -0,0 +1,146 @@
+package org.dromara.workflow.controller;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.workflow.domain.bo.ProcessDefinitionBo;
+import org.dromara.workflow.domain.vo.ProcessDefinitionVo;
+import org.dromara.workflow.service.IActProcessDefinitionService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 流程定义管理 控制层
+ *
+ * @author may
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/workflow/processDefinition")
+public class ActProcessDefinitionController extends BaseController {
+
+ private final IActProcessDefinitionService actProcessDefinitionService;
+
+ /**
+ * 分页查询
+ *
+ * @param processDefinitionBo 参数
+ */
+ @GetMapping("/list")
+ public TableDataInfo page(ProcessDefinitionBo processDefinitionBo) {
+ return actProcessDefinitionService.page(processDefinitionBo);
+ }
+
+ /**
+ * 查询历史流程定义列表
+ *
+ * @param key 流程定义key
+ */
+ @GetMapping("/getProcessDefinitionListByKey/{key}")
+ public R> getProcessDefinitionListByKey(@NotEmpty(message = "流程定义key不能为空") @PathVariable String key) {
+ return R.ok("操作成功", actProcessDefinitionService.getProcessDefinitionListByKey(key));
+ }
+
+ /**
+ * 查看流程定义图片
+ *
+ * @param processDefinitionId 流程定义id
+ */
+ @GetMapping("/processDefinitionImage/{processDefinitionId}")
+ public R processDefinitionImage(@PathVariable String processDefinitionId) {
+ return R.ok("操作成功", actProcessDefinitionService.processDefinitionImage(processDefinitionId));
+ }
+
+ /**
+ * 查看流程定义xml文件
+ *
+ * @param processDefinitionId 流程定义id
+ */
+ @GetMapping("/processDefinitionXml/{processDefinitionId}")
+ public R