From c38c414fbb1b33c04f03d596cbfbcc58a0ee02d2 Mon Sep 17 00:00:00 2001 From: xsx <825657193@qq.com> Date: Sat, 21 Dec 2024 18:19:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sql/ry_vue_5.X.sql => db/im-admin.sql | 0 im-admin/.run/ruoyi-monitor-admin.run.xml | 12 - im-admin/.run/ruoyi-server.run.xml | 12 - im-admin/.run/ruoyi-snailjob-server.run.xml | 12 - im-admin/LICENSE | 20 - im-admin/pom.xml | 24 +- im-admin/ruoyi-admin/pom.xml | 61 +- .../java/org/dromara/DromaraApplication.java | 2 +- .../src/main/resources/application-dev.yml | 193 +- .../src/main/resources/application-prod.yml | 2 +- .../src/main/resources/application.yml | 74 +- .../ruoyi-admin/src/main/resources/banner.txt | 8 - im-admin/ruoyi-common/pom.xml | 3 +- .../common/core/config/RuoYiConfig.java | 2 +- .../ruoyi-common/ruoyi-common-job/pom.xml | 46 - .../common/job/config/SnailJobConfig.java | 37 - ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../common/redis/config/RedisConfig.java | 46 - im-admin/ruoyi-extend/pom.xml | 19 - .../ruoyi-monitor-admin/Dockerfile | 20 - .../ruoyi-extend/ruoyi-monitor-admin/pom.xml | 76 - .../admin/MonitorAdminApplication.java | 19 - .../admin/config/AdminServerConfig.java | 31 - .../monitor/admin/config/SecurityConfig.java | 54 - .../admin/notifier/CustomNotifier.java | 55 - .../src/main/resources/application.yml | 48 - .../src/main/resources/banner.txt | 8 - .../src/main/resources/logback-plus.xml | 34 - .../ruoyi-snailjob-server/Dockerfile | 21 - .../ruoyi-snailjob-server/pom.xml | 58 - .../starter/filter/ActuatorAuthFilter.java | 64 - .../server/starter/filter/SecurityConfig.java | 29 - .../snailjob/SnailJobServerApplication.java | 19 - .../src/main/resources/application-dev.yml | 50 - .../src/main/resources/application-prod.yml | 50 - .../src/main/resources/application.yml | 39 - .../src/main/resources/banner.txt | 11 - .../src/main/resources/logback-plus.xml | 92 - im-admin/ruoyi-modules/pom.xml | 5 +- im-admin/ruoyi-modules/ruoyi-demo/pom.xml | 108 - .../demo/controller/MailController.java | 52 - .../demo/controller/RedisCacheController.java | 95 - .../demo/controller/RedisLockController.java | 71 - .../controller/RedisPubSubController.java | 47 - .../RedisRateLimiterController.java | 64 - .../demo/controller/SmsController.java | 82 - .../controller/Swagger3DemoController.java | 31 - .../demo/controller/TestBatchController.java | 90 - .../demo/controller/TestDemoController.java | 147 - .../controller/TestEncryptController.java | 55 - .../demo/controller/TestExcelController.java | 160 - .../demo/controller/TestI18nController.java | 71 - .../controller/TestSensitiveController.java | 76 - .../demo/controller/TestTreeController.java | 107 - .../demo/controller/WeSocketController.java | 33 - .../dromara/demo/controller/package-info.java | 1 - .../queue/BoundedQueueController.java | 92 - .../queue/DelayedQueueController.java | 97 - .../demo/controller/queue/PriorityDemo.java | 22 - .../queue/PriorityQueueController.java | 89 - .../org/dromara/demo/domain/TestDemo.java | 68 - .../dromara/demo/domain/TestDemoEncrypt.java | 29 - .../org/dromara/demo/domain/TestTree.java | 65 - .../dromara/demo/domain/bo/TestDemoBo.java | 62 - .../demo/domain/bo/TestDemoImportVo.java | 53 - .../dromara/demo/domain/bo/TestTreeBo.java | 54 - .../org/dromara/demo/domain/package-info.java | 1 - .../dromara/demo/domain/vo/ExportDemoVo.java | 118 - .../dromara/demo/domain/vo/TestDemoVo.java | 104 - .../dromara/demo/domain/vo/TestTreeVo.java | 64 - .../demo/listener/ExportDemoListener.java | 68 - .../demo/mapper/TestDemoEncryptMapper.java | 13 - .../dromara/demo/mapper/TestDemoMapper.java | 60 - .../dromara/demo/mapper/TestTreeMapper.java | 21 - .../org/dromara/demo/mapper/package-info.java | 1 - .../demo/service/IExportExcelService.java | 18 - .../demo/service/ITestDemoService.java | 71 - .../demo/service/ITestTreeService.java | 52 - .../service/impl/ExportExcelServiceImpl.java | 222 -- .../service/impl/TestDemoServiceImpl.java | 116 - .../service/impl/TestTreeServiceImpl.java | 88 - .../demo/service/impl/package-info.java | 1 - .../dromara/demo/service/package-info.java | 1 - .../src/main/resources/excel/单列表.xlsx | Bin 10787 -> 0 bytes .../main/resources/excel/多sheet列表.xlsx | Bin 13359 -> 0 bytes .../src/main/resources/excel/多列表.xlsx | Bin 10761 -> 0 bytes .../resources/mapper/demo/TestDemoMapper.xml | 11 - .../resources/mapper/demo/TestTreeMapper.xml | 7 - .../src/main/resources/mapper/package-info.md | 3 - im-admin/ruoyi-modules/ruoyi-job/pom.xml | 34 - .../java/org/dromara/job/package-info.java | 1 - .../job/snailjob/TestAnnoJobExecutor.java | 23 - .../job/snailjob/TestClassJobExecutor.java | 19 - .../ruoyi-modules/ruoyi-workflow/README.md | 3 - im-admin/ruoyi-modules/ruoyi-workflow/pom.xml | 119 - .../common/constant/FlowConstant.java | 137 - .../workflow/common/enums/FormTypeEnum.java | 54 - .../common/enums/MessageTypeEnum.java | 51 - .../workflow/common/enums/TaskStatusEnum.java | 94 - .../controller/ActModelController.java | 148 - .../ActProcessDefinitionController.java | 147 - .../ActProcessInstanceController.java | 160 - .../controller/ActTaskController.java | 295 -- .../controller/TestLeaveController.java | 106 - .../controller/WfCategoryController.java | 106 - .../WfDefinitionConfigController.java | 79 - .../controller/WfFormManageController.java | 114 - .../workflow/domain/ActHiProcinst.java | 152 - .../workflow/domain/ActHiTaskinst.java | 193 - .../dromara/workflow/domain/TestLeave.java | 63 - .../dromara/workflow/domain/WfCategory.java | 52 - .../workflow/domain/WfDefinitionConfig.java | 56 - .../dromara/workflow/domain/WfFormManage.java | 51 - .../dromara/workflow/domain/WfNodeConfig.java | 61 - .../workflow/domain/WfTaskBackNode.java | 61 - .../workflow/domain/bo/AddMultiBo.java | 40 - .../workflow/domain/bo/BackProcessBo.java | 44 - .../workflow/domain/bo/CompleteTaskBo.java | 65 - .../workflow/domain/bo/DelegateBo.java | 38 - .../workflow/domain/bo/DeleteMultiBo.java | 52 - .../dromara/workflow/domain/bo/ModelBo.java | 66 - .../domain/bo/ProcessDefinitionBo.java | 34 - .../workflow/domain/bo/ProcessInstanceBo.java | 43 - .../workflow/domain/bo/ProcessInvalidBo.java | 31 - .../workflow/domain/bo/StartProcessBo.java | 49 - .../workflow/domain/bo/SysUserMultiBo.java | 39 - .../dromara/workflow/domain/bo/TaskBo.java | 33 - .../workflow/domain/bo/TaskUrgingBo.java | 34 - .../workflow/domain/bo/TerminationBo.java | 31 - .../workflow/domain/bo/TestLeaveBo.java | 80 - .../workflow/domain/bo/TransmitBo.java | 37 - .../workflow/domain/bo/WfCategoryBo.java | 54 - .../domain/bo/WfDefinitionConfigBo.java | 59 - .../workflow/domain/bo/WfFormManageBo.java | 53 - .../workflow/domain/bo/WfNodeConfigBo.java | 63 - .../workflow/domain/vo/ActHistoryInfoVo.java | 93 - .../workflow/domain/vo/GraphicInfoVo.java | 47 - .../dromara/workflow/domain/vo/ModelVo.java | 48 - .../workflow/domain/vo/MultiInstanceVo.java | 33 - .../workflow/domain/vo/ParticipantVo.java | 43 - .../domain/vo/ProcessDefinitionVo.java | 70 - .../workflow/domain/vo/ProcessInstanceVo.java | 100 - .../dromara/workflow/domain/vo/TaskVo.java | 173 - .../workflow/domain/vo/TestLeaveVo.java | 70 - .../workflow/domain/vo/VariableVo.java | 28 - .../workflow/domain/vo/WfCategoryVo.java | 58 - .../dromara/workflow/domain/vo/WfCopy.java | 29 - .../domain/vo/WfDefinitionConfigVo.java | 70 - .../workflow/domain/vo/WfFormManageVo.java | 63 - .../workflow/domain/vo/WfNodeConfigVo.java | 75 - .../CustomDefaultProcessDiagramCanvas.java | 108 - .../CustomDefaultProcessDiagramGenerator.java | 1120 ------ .../cmd/AddSequenceMultiInstanceCmd.java | 61 - .../workflow/flowable/cmd/AttachmentCmd.java | 66 - .../flowable/cmd/DeleteExecutionCmd.java | 36 - .../cmd/DeleteSequenceMultiInstanceCmd.java | 83 - .../cmd/ExecutionChildByExecutionIdCmd.java | 39 - .../flowable/cmd/UpdateBusinessStatusCmd.java | 37 - .../flowable/cmd/UpdateHiTaskInstCmd.java | 51 - .../flowable/config/FlowableConfig.java | 32 - .../config/GlobalFlowableListener.java | 139 - .../handler/FlowProcessEventHandler.java | 50 - .../handler/TaskTimeoutJobHandler.java | 37 - .../workflow/mapper/ActHiProcinstMapper.java | 16 - .../workflow/mapper/ActHiTaskinstMapper.java | 16 - .../workflow/mapper/ActTaskMapper.java | 47 - .../workflow/mapper/TestLeaveMapper.java | 15 - .../workflow/mapper/WfCategoryMapper.java | 15 - .../mapper/WfDefinitionConfigMapper.java | 15 - .../workflow/mapper/WfFormManageMapper.java | 15 - .../workflow/mapper/WfNodeConfigMapper.java | 15 - .../workflow/mapper/WfTaskBackNodeMapper.java | 13 - .../service/IActHiProcinstService.java | 31 - .../service/IActHiTaskinstService.java | 11 - .../workflow/service/IActModelService.java | 83 - .../service/IActProcessDefinitionService.java | 91 - .../service/IActProcessInstanceService.java | 110 - .../workflow/service/IActTaskService.java | 161 - .../workflow/service/ITestLeaveService.java | 48 - .../workflow/service/IWfCategoryService.java | 51 - .../service/IWfDefinitionConfigService.java | 83 - .../service/IWfFormManageService.java | 81 - .../service/IWfNodeConfigService.java | 56 - .../service/IWfTaskBackNodeService.java | 65 - .../impl/ActHiProcinstServiceImpl.java | 51 - .../impl/ActHiTaskinstServiceImpl.java | 18 - .../service/impl/ActModelServiceImpl.java | 431 -- .../impl/ActProcessDefinitionServiceImpl.java | 444 --- .../impl/ActProcessInstanceServiceImpl.java | 691 ---- .../service/impl/ActTaskServiceImpl.java | 861 ---- .../service/impl/TestLeaveServiceImpl.java | 157 - .../service/impl/WfCategoryServiceImpl.java | 130 - .../impl/WfDefinitionConfigServiceImpl.java | 117 - .../service/impl/WfFormManageServiceImpl.java | 111 - .../service/impl/WfNodeConfigServiceImpl.java | 75 - .../impl/WfTaskBackNodeServiceImpl.java | 144 - .../service/impl/WorkflowServiceImpl.java | 121 - .../dromara/workflow/utils/ModelUtils.java | 289 -- .../dromara/workflow/utils/QueryUtils.java | 169 - .../dromara/workflow/utils/WorkflowUtils.java | 295 -- .../src/main/resources/mapper/package-info.md | 3 - .../mapper/workflow/ActHiProcinstMapper.xml | 7 - .../mapper/workflow/ActHiTaskinstMapper.xml | 7 - .../mapper/workflow/ActTaskMapper.xml | 77 - .../mapper/workflow/TestLeaveMapper.xml | 7 - .../mapper/workflow/WfCategoryMapper.xml | 7 - .../workflow/WfDefinitionConfigMapper.xml | 7 - .../mapper/workflow/WfFormManageMapper.xml | 7 - .../mapper/workflow/WfNodeConfigMapper.xml | 7 - .../mapper/workflow/WfTaskBackNodeMapper.xml | 7 - im-admin/script/bin/ry.bat | 68 - im-admin/script/bin/ry.sh | 86 - im-admin/script/bpmn/模型.zip | Bin 8543 -> 0 bytes im-admin/script/docker/database.yml | 61 - im-admin/script/docker/docker-compose.yml | 156 - im-admin/script/docker/nginx/conf/nginx.conf | 115 - im-admin/script/docker/redis/conf/redis.conf | 28 - im-admin/script/docker/redis/data/README.md | 1 - im-admin/script/sql/oracle/oracle_ry_job.sql | 906 ----- .../script/sql/oracle/oracle_ry_vue_5.X.sql | 1364 ------- .../script/sql/oracle/oracle_ry_workflow.sql | 261 -- .../script/sql/postgres/postgres_ry_job.sql | 837 ---- .../sql/postgres/postgres_ry_vue_5.X.sql | 1356 ------- .../sql/postgres/postgres_ry_workflow.sql | 275 -- im-admin/script/sql/ry_job.sql | 515 --- im-admin/script/sql/ry_workflow.sql | 176 - .../script/sql/sqlserver/sqlserver_ry_job.sql | 2747 ------------- .../sql/sqlserver/sqlserver_ry_vue_5.X.sql | 3549 ----------------- .../sql/sqlserver/sqlserver_ry_workflow.sql | 456 --- .../sql/update/oracle/update_5.0-5.1.sql | 151 - .../sql/update/oracle/update_5.1.0-5.1.1.sql | 5 - .../sql/update/oracle/update_5.1.1-5.1.2.sql | 6 - .../sql/update/oracle/update_5.1.2-5.2.0.sql | 9 - .../sql/update/postgres/update_5.0-5.1.sql | 150 - .../update/postgres/update_5.1.0-5.1.1.sql | 5 - .../update/postgres/update_5.1.1-5.1.2.sql | 5 - .../update/postgres/update_5.1.2-5.2.0.sql | 9 - .../sql/update/sqlserver/update_5.0-5.1.sql | 409 -- .../update/sqlserver/update_5.1.0-5.1.1.sql | 19 - .../update/sqlserver/update_5.1.1-5.1.2.sql | 10 - .../update/sqlserver/update_5.1.2-5.2.0.sql | 29 - im-admin/script/sql/update/update_5.0-5.1.sql | 101 - .../script/sql/update/update_5.1.0-5.1.1.sql | 3 - .../script/sql/update/update_5.1.1-5.1.2.sql | 5 - .../script/sql/update/update_5.1.2-5.2.0.sql | 5 - 245 files changed, 20 insertions(+), 29637 deletions(-) rename im-admin/script/sql/ry_vue_5.X.sql => db/im-admin.sql (100%) delete mode 100644 im-admin/.run/ruoyi-monitor-admin.run.xml delete mode 100644 im-admin/.run/ruoyi-server.run.xml delete mode 100644 im-admin/.run/ruoyi-snailjob-server.run.xml delete mode 100644 im-admin/LICENSE delete mode 100644 im-admin/ruoyi-admin/src/main/resources/banner.txt delete mode 100644 im-admin/ruoyi-common/ruoyi-common-job/pom.xml delete mode 100644 im-admin/ruoyi-common/ruoyi-common-job/src/main/java/org/dromara/common/job/config/SnailJobConfig.java delete mode 100644 im-admin/ruoyi-common/ruoyi-common-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports delete mode 100644 im-admin/ruoyi-extend/pom.xml delete mode 100644 im-admin/ruoyi-extend/ruoyi-monitor-admin/Dockerfile delete mode 100644 im-admin/ruoyi-extend/ruoyi-monitor-admin/pom.xml delete mode 100644 im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/MonitorAdminApplication.java delete mode 100644 im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/config/AdminServerConfig.java delete mode 100644 im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/config/SecurityConfig.java delete mode 100644 im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/notifier/CustomNotifier.java delete mode 100644 im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml delete mode 100644 im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/banner.txt delete mode 100644 im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/logback-plus.xml delete mode 100644 im-admin/ruoyi-extend/ruoyi-snailjob-server/Dockerfile delete mode 100644 im-admin/ruoyi-extend/ruoyi-snailjob-server/pom.xml delete mode 100644 im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/com/aizuda/snailjob/server/starter/filter/ActuatorAuthFilter.java delete mode 100644 im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/com/aizuda/snailjob/server/starter/filter/SecurityConfig.java delete mode 100644 im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/org/dromara/snailjob/SnailJobServerApplication.java delete mode 100644 im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml delete mode 100644 im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml delete mode 100644 im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application.yml delete mode 100644 im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/banner.txt delete mode 100644 im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/logback-plus.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/pom.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/MailController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisCacheController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisLockController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisPubSubController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisRateLimiterController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/Swagger3DemoController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestBatchController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestDemoController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestEncryptController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestExcelController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestI18nController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestSensitiveController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestTreeController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/WeSocketController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/package-info.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/BoundedQueueController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityDemo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityQueueController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestDemo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestDemoEncrypt.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestTree.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoImportVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestTreeBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/package-info.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/ExportDemoVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestTreeVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/listener/ExportDemoListener.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoEncryptMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestTreeMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/package-info.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IExportExcelService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/ITestDemoService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/ITestTreeService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ExportExcelServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestTreeServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/package-info.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/package-info.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/excel/单列表.xlsx delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/excel/多sheet列表.xlsx delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/excel/多列表.xlsx delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/demo/TestDemoMapper.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/demo/TestTreeMapper.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/package-info.md delete mode 100644 im-admin/ruoyi-modules/ruoyi-job/pom.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/package-info.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestAnnoJobExecutor.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestClassJobExecutor.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/README.md delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/pom.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/FormTypeEnum.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfCategoryController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormManageController.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiProcinst.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiTaskinst.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/TestLeave.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfCategory.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormManage.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfNodeConfig.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfTaskBackNode.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/AddMultiBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/DelegateBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/DeleteMultiBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessDefinitionBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInstanceBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInvalidBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/SysUserMultiBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskUrgingBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TerminationBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TestLeaveBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TransmitBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfCategoryBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormManageBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfNodeConfigBo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/GraphicInfoVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ModelVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/MultiInstanceVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ParticipantVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TestLeaveVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/VariableVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfCategoryVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfCopy.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormManageVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfNodeConfigVo.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/CustomDefaultProcessDiagramCanvas.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/CustomDefaultProcessDiagramGenerator.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AddSequenceMultiInstanceCmd.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteExecutionCmd.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/ExecutionChildByExecutionIdCmd.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/UpdateBusinessStatusCmd.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/UpdateHiTaskInstCmd.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/FlowableConfig.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/TaskTimeoutJobHandler.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiProcinstMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiTaskinstMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/TestLeaveMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfCategoryMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfDefinitionConfigMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormManageMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfNodeConfigMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfTaskBackNodeMapper.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiProcinstService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiTaskinstService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActModelService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ITestLeaveService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfCategoryService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormManageService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfNodeConfigService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfTaskBackNodeService.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiProcinstServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiTaskinstServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfCategoryServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/QueryUtils.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/package-info.md delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActHiProcinstMapper.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActHiTaskinstMapper.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/TestLeaveMapper.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfCategoryMapper.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfDefinitionConfigMapper.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormManageMapper.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfNodeConfigMapper.xml delete mode 100644 im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfTaskBackNodeMapper.xml delete mode 100644 im-admin/script/bin/ry.bat delete mode 100644 im-admin/script/bin/ry.sh delete mode 100644 im-admin/script/bpmn/模型.zip delete mode 100644 im-admin/script/docker/database.yml delete mode 100644 im-admin/script/docker/docker-compose.yml delete mode 100644 im-admin/script/docker/nginx/conf/nginx.conf delete mode 100644 im-admin/script/docker/redis/conf/redis.conf delete mode 100644 im-admin/script/docker/redis/data/README.md delete mode 100644 im-admin/script/sql/oracle/oracle_ry_job.sql delete mode 100644 im-admin/script/sql/oracle/oracle_ry_vue_5.X.sql delete mode 100644 im-admin/script/sql/oracle/oracle_ry_workflow.sql delete mode 100644 im-admin/script/sql/postgres/postgres_ry_job.sql delete mode 100644 im-admin/script/sql/postgres/postgres_ry_vue_5.X.sql delete mode 100644 im-admin/script/sql/postgres/postgres_ry_workflow.sql delete mode 100644 im-admin/script/sql/ry_job.sql delete mode 100644 im-admin/script/sql/ry_workflow.sql delete mode 100644 im-admin/script/sql/sqlserver/sqlserver_ry_job.sql delete mode 100644 im-admin/script/sql/sqlserver/sqlserver_ry_vue_5.X.sql delete mode 100644 im-admin/script/sql/sqlserver/sqlserver_ry_workflow.sql delete mode 100644 im-admin/script/sql/update/oracle/update_5.0-5.1.sql delete mode 100644 im-admin/script/sql/update/oracle/update_5.1.0-5.1.1.sql delete mode 100644 im-admin/script/sql/update/oracle/update_5.1.1-5.1.2.sql delete mode 100644 im-admin/script/sql/update/oracle/update_5.1.2-5.2.0.sql delete mode 100644 im-admin/script/sql/update/postgres/update_5.0-5.1.sql delete mode 100644 im-admin/script/sql/update/postgres/update_5.1.0-5.1.1.sql delete mode 100644 im-admin/script/sql/update/postgres/update_5.1.1-5.1.2.sql delete mode 100644 im-admin/script/sql/update/postgres/update_5.1.2-5.2.0.sql delete mode 100644 im-admin/script/sql/update/sqlserver/update_5.0-5.1.sql delete mode 100644 im-admin/script/sql/update/sqlserver/update_5.1.0-5.1.1.sql delete mode 100644 im-admin/script/sql/update/sqlserver/update_5.1.1-5.1.2.sql delete mode 100644 im-admin/script/sql/update/sqlserver/update_5.1.2-5.2.0.sql delete mode 100644 im-admin/script/sql/update/update_5.0-5.1.sql delete mode 100644 im-admin/script/sql/update/update_5.1.0-5.1.1.sql delete mode 100644 im-admin/script/sql/update/update_5.1.1-5.1.2.sql delete mode 100644 im-admin/script/sql/update/update_5.1.2-5.2.0.sql diff --git a/im-admin/script/sql/ry_vue_5.X.sql b/db/im-admin.sql similarity index 100% rename from im-admin/script/sql/ry_vue_5.X.sql rename to db/im-admin.sql diff --git a/im-admin/.run/ruoyi-monitor-admin.run.xml b/im-admin/.run/ruoyi-monitor-admin.run.xml deleted file mode 100644 index bcac3d5..0000000 --- a/im-admin/.run/ruoyi-monitor-admin.run.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/im-admin/.run/ruoyi-server.run.xml b/im-admin/.run/ruoyi-server.run.xml deleted file mode 100644 index 57b0fb8..0000000 --- a/im-admin/.run/ruoyi-server.run.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/im-admin/.run/ruoyi-snailjob-server.run.xml b/im-admin/.run/ruoyi-snailjob-server.run.xml deleted file mode 100644 index f1d3447..0000000 --- a/im-admin/.run/ruoyi-snailjob-server.run.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/im-admin/LICENSE b/im-admin/LICENSE deleted file mode 100644 index 32b3071..0000000 --- a/im-admin/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019 RuoYi-Vue-Plus - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/im-admin/pom.xml b/im-admin/pom.xml index 7b92aa7..c4d24ee 100644 --- a/im-admin/pom.xml +++ b/im-admin/pom.xml @@ -5,12 +5,10 @@ 4.0.0 org.dromara - ruoyi-vue-plus + im-admin ${revision} - - RuoYi-Vue-Plus - https://gitee.com/dromara/RuoYi-Vue-Plus - RuoYi-Vue-Plus多租户管理系统 + im-admin + 盒子IM后台管理系统 5.2.3 @@ -49,8 +47,6 @@ 1.2.83 8.7.2-20241022 - - 7.0.1 3.2.2 @@ -67,8 +63,6 @@ local info - ruoyi - 123456 @@ -77,8 +71,6 @@ dev info - ruoyi - 123456 @@ -90,8 +82,6 @@ prod warn - ruoyi - 123456 @@ -118,13 +108,6 @@ import - - org.flowable - flowable-bom - ${flowable.version} - pom - import - @@ -359,7 +342,6 @@ ruoyi-admin ruoyi-common - ruoyi-extend ruoyi-modules pom diff --git a/im-admin/ruoyi-admin/pom.xml b/im-admin/ruoyi-admin/pom.xml index 9e97804..1f756f3 100644 --- a/im-admin/ruoyi-admin/pom.xml +++ b/im-admin/ruoyi-admin/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - ruoyi-vue-plus + im-admin org.dromara ${revision} @@ -22,29 +22,6 @@ com.mysql mysql-connector-j - - - - - - - - - - - - - - - - - - - - - - - org.dromara ruoyi-common-doc @@ -69,53 +46,17 @@ org.dromara ruoyi-system - - - org.dromara - ruoyi-job - - org.dromara ruoyi-generator - - - org.dromara - ruoyi-demo - - - - - org.dromara - ruoyi-workflow - - - - de.codecentric - spring-boot-admin-starter-client - - org.springframework.boot spring-boot-starter-test test - - - - - - - - - - - - - diff --git a/im-admin/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java b/im-admin/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java index 8ef33fe..afe4349 100644 --- a/im-admin/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java +++ b/im-admin/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java @@ -17,7 +17,7 @@ public class DromaraApplication { SpringApplication application = new SpringApplication(DromaraApplication.class); application.setApplicationStartup(new BufferingApplicationStartup(2048)); application.run(args); - System.out.println("(♥◠‿◠)ノ゙ RuoYi-Vue-Plus启动成功 ლ(´ڡ`ლ)゙"); + System.out.println("盒子IM后台管理服务启动成功"); } } diff --git a/im-admin/ruoyi-admin/src/main/resources/application-dev.yml b/im-admin/ruoyi-admin/src/main/resources/application-dev.yml index 4410ab5..feee579 100644 --- a/im-admin/ruoyi-admin/src/main/resources/application-dev.yml +++ b/im-admin/ruoyi-admin/src/main/resources/application-dev.yml @@ -1,33 +1,3 @@ ---- # 监控中心配置 -spring.boot.admin.client: - # 增加客户端开关 - enabled: true - url: http://localhost:9090/admin - instance: - service-host-type: IP - metadata: - username: ${spring.boot.admin.client.username} - userpassword: ${spring.boot.admin.client.password} - username: @monitor.username@ - password: @monitor.password@ - ---- # snail-job 配置 -snail-job: - enabled: true - # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 - group: "ruoyi_group" - # SnailJob 接入验证令牌 详见 script/sql/snail_job.sql `sj_group_config` 表 - token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" - server: - host: 127.0.0.1 - port: 17888 - # 详见 script/sql/snail_job.sql `sj_namespace` 表 - namespace: ${spring.profiles.active} - # 随主应用端口飘逸 - port: 2${server.port} - # 客户端ip指定 - host: - --- # 数据源配置 spring: datasource: @@ -56,26 +26,8 @@ spring: 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&nullCatalogMeansCurrent=true - username: - password: -# oracle: -# type: ${spring.datasource.type} -# driverClassName: oracle.jdbc.OracleDriver -# url: jdbc:oracle:thin:@//localhost:1521/XE -# username: ROOT -# password: root -# postgres: -# type: ${spring.datasource.type} -# driverClassName: org.postgresql.Driver -# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true -# username: root -# password: root -# sqlserver: -# type: ${spring.datasource.type} -# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver -# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true -# username: SA -# password: root + username: root + password: root hikari: # 最大连接池数量 maxPoolSize: 20 @@ -100,13 +52,7 @@ spring.data: # 端口,默认为6379 port: 6379 # 数据库索引 - database: 0 - # redis 密码必须配置 - password: ruoyi123 - # 连接超时时间 - timeout: 10s - # 是否开启ssl - ssl.enabled: false + database: 4 # redisson 配置 redisson: @@ -119,7 +65,7 @@ redisson: # 单节点配置 singleServerConfig: # 客户端名称 - clientName: ${ruoyi.name} + clientName: im-admin # 最小空闲连接数 connectionMinimumIdleSize: 8 # 连接池大小 @@ -130,134 +76,3 @@ redisson: timeout: 3000 # 发布和订阅连接池大小 subscriptionConnectionPoolSize: 50 - ---- # mail 邮件发送 -mail: - enabled: false - host: smtp.163.com - port: 465 - # 是否需要用户名密码验证 - auth: true - # 发送方,遵循RFC-822标准 - from: xxx@163.com - # 用户名(注意:如果使用foxmail邮箱,此处user为qq号) - user: xxx@163.com - # 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助) - pass: xxxxxxxxxx - # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。 - starttlsEnable: true - # 使用SSL安全连接 - sslEnable: true - # SMTP超时时长,单位毫秒,缺省值不超时 - timeout: 0 - # Socket连接超时值,单位毫秒,缺省值不超时 - connectionTimeout: 0 - ---- # sms 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商 -# https://sms4j.com/doc3/ 差异配置文档地址 支持单厂商多配置,可以配置多个同时使用 -sms: - # 配置源类型用于标定配置来源(interface,yaml) - config-type: yaml - # 用于标定yml中的配置是否开启短信拦截,接口配置不受此限制 - restricted: true - # 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效 - minute-max: 1 - # 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效 - account-max: 30 - # 以下配置来自于 org.dromara.sms4j.provider.config.BaseConfig类中 - blends: - # 唯一ID 用于发送短信寻找具体配置 随便定义别用中文即可 - # 可以同时存在两个相同厂商 例如: ali1 ali2 两个不同的阿里短信账号 也可用于区分租户 - config1: - # 框架定义的厂商名称标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 - supplier: alibaba - # 有些称为accessKey有些称之为apiKey,也有称为sdkKey或者appId。 - access-key-id: 您的accessKey - # 称为accessSecret有些称之为apiSecret - access-key-secret: 您的accessKeySecret - signature: 您的短信签名 - sdk-app-id: 您的sdkAppId - config2: - # 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 - supplier: tencent - access-key-id: 您的accessKey - access-key-secret: 您的accessKeySecret - signature: 您的短信签名 - sdk-app-id: 您的sdkAppId - - ---- # 三方授权 -justauth: - # 前端外网访问地址 - address: http://localhost:80 - type: - maxkey: - # maxkey 服务器地址 - # 注意 如下均配置均不需要修改 maxkey 已经内置好了数据 - server-url: http://sso.maxkey.top - client-id: 876892492581044224 - client-secret: x1Y5MTMwNzIwMjMxNTM4NDc3Mzche8 - redirect-uri: ${justauth.address}/social-callback?source=maxkey - topiam: - # topiam 服务器地址 - server-url: http://127.0.0.1:1989/api/v1/authorize/y0q************spq***********8ol - client-id: 449c4*********937************759 - client-secret: ac7***********1e0************28d - redirect-uri: ${justauth.address}/social-callback?source=topiam - scopes: [openid, email, phone, profile] - qq: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=qq - union-id: false - weibo: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=weibo - gitee: - client-id: 91436b7940090d09c72c7daf85b959cfd5f215d67eea73acbf61b6b590751a98 - client-secret: 02c6fcfd70342980cd8dd2f2c06c1a350645d76c754d7a264c4e125f9ba915ac - redirect-uri: ${justauth.address}/social-callback?source=gitee - dingtalk: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=dingtalk - baidu: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=baidu - csdn: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=csdn - coding: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=coding - coding-group-name: xx - oschina: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=oschina - alipay_wallet: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet - alipay-public-key: MIIB**************DAQAB - wechat_open: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=wechat_open - wechat_mp: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=wechat_mp - wechat_enterprise: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=wechat_enterprise - agent-id: 1000002 - gitlab: - client-id: 10**********6 - client-secret: 1f7d08**********5b7**********29e - redirect-uri: ${justauth.address}/social-callback?source=gitlab diff --git a/im-admin/ruoyi-admin/src/main/resources/application-prod.yml b/im-admin/ruoyi-admin/src/main/resources/application-prod.yml index d261118..f350544 100644 --- a/im-admin/ruoyi-admin/src/main/resources/application-prod.yml +++ b/im-admin/ruoyi-admin/src/main/resources/application-prod.yml @@ -122,7 +122,7 @@ redisson: # 单节点配置 singleServerConfig: # 客户端名称 - clientName: ${ruoyi.name} + clientName: im-admin # 最小空闲连接数 connectionMinimumIdleSize: 32 # 连接池大小 diff --git a/im-admin/ruoyi-admin/src/main/resources/application.yml b/im-admin/ruoyi-admin/src/main/resources/application.yml index 82d0f1e..80083aa 100644 --- a/im-admin/ruoyi-admin/src/main/resources/application.yml +++ b/im-admin/ruoyi-admin/src/main/resources/application.yml @@ -1,9 +1,9 @@ # 项目相关配置 -ruoyi: +app: # 名称 - name: RuoYi-Vue-Plus + name: 盒子IM # 版本 - version: ${revision} + version: 3.1 # 版权年份 copyrightYear: 2024 @@ -22,7 +22,7 @@ captcha: # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 - port: 8080 + port: 8889 servlet: # 应用的访问路径 context-path: / @@ -60,7 +60,7 @@ user: # Spring配置 spring: application: - name: ${ruoyi.name} + name: im-admin threads: # 开启虚拟线程 仅jdk21可用 virtual: @@ -122,21 +122,6 @@ security: - /*/api-docs - /*/api-docs/** -# 多租户配置 -tenant: - # 是否开启 - enable: true - # 排除表 - excludes: - - sys_menu - - sys_tenant - - sys_tenant_package - - sys_role_dept - - sys_role_menu - - sys_user_post - - sys_user_role - - sys_client - - sys_oss_config # MyBatisPlus配置 # https://baomidou.com/config/ @@ -185,21 +170,11 @@ springdoc: api-docs: # 是否开启接口文档 enabled: true -# swagger-ui: -# # 持久化认证数据 -# persistAuthorization: true info: # 标题 - title: '标题:${ruoyi.name}多租户管理系统_接口文档' - # 描述 - description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...' + title: '标题:${app.name}后台管理系统' # 版本 - version: '版本号: ${ruoyi.version}' - # 作者信息 - contact: - name: Lion Li - email: crazylionli@163.com - url: https://gitee.com/dromara/RuoYi-Vue-Plus + version: '版本号: ${app.version}' components: # 鉴权方式配置 security-schemes: @@ -225,8 +200,6 @@ xss: # 排除链接(多个用逗号分隔) excludeUrls: - /system/notice - - /workflow/model/save - - /workflow/model/editModelXml # 全局线程池相关配置 # 如使用JDK21请直接使用虚拟线程 不要开启此配置 @@ -245,17 +218,6 @@ lock4j: # 分布式锁的超时时间,默认为 30 秒 expire: 30000 ---- # Actuator 监控端点的配置项 -management: - endpoints: - web: - exposure: - include: '*' - endpoint: - health: - show-details: ALWAYS - logfile: - external-file: ./logs/sys-console.log --- # 默认/推荐使用sse推送 sse: @@ -270,25 +232,3 @@ websocket: path: /resource/websocket # 设置访问源地址 allowedOrigins: '*' - ---- #flowable配置 -flowable: - # 开关 用于启动/停用工作流 - enabled: true - process.enabled: ${flowable.enabled} - eventregistry.enabled: ${flowable.enabled} - 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/im-admin/ruoyi-admin/src/main/resources/banner.txt b/im-admin/ruoyi-admin/src/main/resources/banner.txt deleted file mode 100644 index 21b1126..0000000 --- a/im-admin/ruoyi-admin/src/main/resources/banner.txt +++ /dev/null @@ -1,8 +0,0 @@ -Application Version: ${revision} -Spring Boot Version: ${spring-boot.version} -__________ _____.___.__ ____ ____ __________.__ -\______ \__ __ ____\__ | |__| \ \ / /_ __ ____ \______ \ | __ __ ______ - | _/ | \/ _ \/ | | | ______ \ Y / | \_/ __ \ ______ | ___/ | | | \/ ___/ - | | \ | ( <_> )____ | | /_____/ \ /| | /\ ___/ /_____/ | | | |_| | /\___ \ - |____|_ /____/ \____// ______|__| \___/ |____/ \___ > |____| |____/____//____ > - \/ \/ \/ \/ diff --git a/im-admin/ruoyi-common/pom.xml b/im-admin/ruoyi-common/pom.xml index 2930fd0..d6b5d54 100644 --- a/im-admin/ruoyi-common/pom.xml +++ b/im-admin/ruoyi-common/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - ruoyi-vue-plus + im-admin org.dromara ${revision} @@ -16,7 +16,6 @@ ruoyi-common-doc ruoyi-common-excel ruoyi-common-idempotent - ruoyi-common-job ruoyi-common-log ruoyi-common-mail ruoyi-common-mybatis diff --git a/im-admin/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/RuoYiConfig.java b/im-admin/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/RuoYiConfig.java index cc0d2df..2a2afcf 100644 --- a/im-admin/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/RuoYiConfig.java +++ b/im-admin/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/RuoYiConfig.java @@ -12,7 +12,7 @@ import org.springframework.stereotype.Component; @Data @Component -@ConfigurationProperties(prefix = "ruoyi") +@ConfigurationProperties(prefix = "app") public class RuoYiConfig { /** diff --git a/im-admin/ruoyi-common/ruoyi-common-job/pom.xml b/im-admin/ruoyi-common/ruoyi-common-job/pom.xml deleted file mode 100644 index 3a4a0cb..0000000 --- a/im-admin/ruoyi-common/ruoyi-common-job/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - org.dromara - ruoyi-common - ${revision} - - 4.0.0 - - ruoyi-common-job - - - ruoyi-common-job 定时任务 - - - - - - org.springframework.boot - spring-boot-autoconfigure - - - - - com.aizuda - snail-job-client-starter - - - com.aizuda - snail-job-client-job-core - - - - org.projectlombok - lombok - - - - org.dromara - ruoyi-common-core - - - - diff --git a/im-admin/ruoyi-common/ruoyi-common-job/src/main/java/org/dromara/common/job/config/SnailJobConfig.java b/im-admin/ruoyi-common/ruoyi-common-job/src/main/java/org/dromara/common/job/config/SnailJobConfig.java deleted file mode 100644 index cba3753..0000000 --- a/im-admin/ruoyi-common/ruoyi-common-job/src/main/java/org/dromara/common/job/config/SnailJobConfig.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.dromara.common.job.config; - -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.spi.ILoggingEvent; -import com.aizuda.snailjob.client.common.appender.SnailLogbackAppender; -import com.aizuda.snailjob.client.common.event.SnailClientStartingEvent; -import com.aizuda.snailjob.client.starter.EnableSnailJob; -import org.slf4j.LoggerFactory; -import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.event.EventListener; -import org.springframework.scheduling.annotation.EnableScheduling; - -/** - * 启动定时任务 - * - * @author opensnail - * @date 2024-05-17 - */ -@AutoConfiguration -@ConditionalOnProperty(prefix = "snail-job", name = "enabled", havingValue = "true") -@EnableScheduling -@EnableSnailJob -public class SnailJobConfig { - - @EventListener(SnailClientStartingEvent.class) - public void onStarting(SnailClientStartingEvent event) { - LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); - SnailLogbackAppender ca = new SnailLogbackAppender<>(); - ca.setName("snail_log_appender"); - ca.start(); - Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME); - rootLogger.addAppender(ca); - } - -} diff --git a/im-admin/ruoyi-common/ruoyi-common-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/im-admin/ruoyi-common/ruoyi-common-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 3aa1881..0000000 --- a/im-admin/ruoyi-common/ruoyi-common-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -org.dromara.common.job.config.SnailJobConfig diff --git a/im-admin/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java b/im-admin/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java index f8fe79a..aa00233 100644 --- a/im-admin/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java +++ b/im-admin/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java @@ -106,51 +106,5 @@ public class RedisConfig { return new RedisExceptionHandler(); } - /** - * redis集群配置 yml - * - * --- # redis 集群配置(单机与集群只能开启一个另一个需要注释掉) - * spring.data: - * redis: - * cluster: - * nodes: - * - 192.168.0.100:6379 - * - 192.168.0.101:6379 - * - 192.168.0.102:6379 - * # 密码 - * password: - * # 连接超时时间 - * timeout: 10s - * # 是否开启ssl - * ssl.enabled: false - * - * redisson: - * # 线程池数量 - * threads: 16 - * # Netty线程池数量 - * nettyThreads: 32 - * # 集群配置 - * clusterServersConfig: - * # 客户端名称 - * clientName: ${ruoyi.name} - * # master最小空闲连接数 - * masterConnectionMinimumIdleSize: 32 - * # master连接池大小 - * masterConnectionPoolSize: 64 - * # slave最小空闲连接数 - * slaveConnectionMinimumIdleSize: 32 - * # slave连接池大小 - * slaveConnectionPoolSize: 64 - * # 连接空闲超时,单位:毫秒 - * idleConnectionTimeout: 10000 - * # 命令等待超时,单位:毫秒 - * timeout: 3000 - * # 发布和订阅连接池大小 - * subscriptionConnectionPoolSize: 50 - * # 读取模式 - * readMode: "SLAVE" - * # 订阅模式 - * subscriptionMode: "MASTER" - */ } diff --git a/im-admin/ruoyi-extend/pom.xml b/im-admin/ruoyi-extend/pom.xml deleted file mode 100644 index d7280ce..0000000 --- a/im-admin/ruoyi-extend/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - ruoyi-vue-plus - org.dromara - ${revision} - - 4.0.0 - ruoyi-extend - pom - - - ruoyi-monitor-admin - ruoyi-snailjob-server - - - diff --git a/im-admin/ruoyi-extend/ruoyi-monitor-admin/Dockerfile b/im-admin/ruoyi-extend/ruoyi-monitor-admin/Dockerfile deleted file mode 100644 index 99aaa74..0000000 --- a/im-admin/ruoyi-extend/ruoyi-monitor-admin/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/ -FROM bellsoft/liberica-openjdk-debian:17.0.11-cds -#FROM bellsoft/liberica-openjdk-debian:21.0.3-cds -#FROM findepi/graalvm:java17-native - -LABEL maintainer="Lion Li" - -RUN mkdir -p /ruoyi/monitor/logs - -WORKDIR /ruoyi/monitor - -ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="" - -EXPOSE 9090 - -ADD ./target/ruoyi-monitor-admin.jar ./app.jar - -ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom \ - -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \ - -jar app.jar diff --git a/im-admin/ruoyi-extend/ruoyi-monitor-admin/pom.xml b/im-admin/ruoyi-extend/ruoyi-monitor-admin/pom.xml deleted file mode 100644 index 77c9eb7..0000000 --- a/im-admin/ruoyi-extend/ruoyi-monitor-admin/pom.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - ruoyi-extend - org.dromara - ${revision} - - 4.0.0 - jar - ruoyi-monitor-admin - - - - - org.springframework.boot - spring-boot-starter-web - - - spring-boot-starter-tomcat - org.springframework.boot - - - - - - org.springframework.boot - spring-boot-starter-undertow - - - - - org.springframework.boot - spring-boot-starter-security - - - - de.codecentric - spring-boot-admin-starter-server - - - - de.codecentric - spring-boot-admin-starter-client - - - - org.projectlombok - lombok - - - - - - ${project.artifactId} - - - org.springframework.boot - spring-boot-maven-plugin - ${spring-boot.version} - - - - - - - repackage - - - - - - - - diff --git a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/MonitorAdminApplication.java b/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/MonitorAdminApplication.java deleted file mode 100644 index 0339ebb..0000000 --- a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/MonitorAdminApplication.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.dromara.monitor.admin; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * Admin 监控启动程序 - * - * @author Lion Li - */ -@SpringBootApplication -public class MonitorAdminApplication { - - public static void main(String[] args) { - SpringApplication.run(MonitorAdminApplication.class, args); - System.out.println("Admin 监控启动成功"); - } - -} diff --git a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/config/AdminServerConfig.java b/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/config/AdminServerConfig.java deleted file mode 100644 index 53d248e..0000000 --- a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/config/AdminServerConfig.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.dromara.monitor.admin.config; - -import de.codecentric.boot.admin.server.config.EnableAdminServer; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; -import org.springframework.boot.task.ThreadPoolTaskExecutorBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Lazy; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; - -import java.util.concurrent.Executor; - -/** - * springboot-admin server配置类 - * - * @author Lion Li - */ -@Configuration -@EnableAdminServer -public class AdminServerConfig { - - @Lazy - @Bean(name = TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME) - @ConditionalOnMissingBean(Executor.class) - public ThreadPoolTaskExecutor applicationTaskExecutor(ThreadPoolTaskExecutorBuilder builder) { - return builder.build(); - } - - -} diff --git a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/config/SecurityConfig.java b/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/config/SecurityConfig.java deleted file mode 100644 index 3458cc9..0000000 --- a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/config/SecurityConfig.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.dromara.monitor.admin.config; - -import de.codecentric.boot.admin.server.config.AdminServerProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.Customizer; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; -import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; - -/** - * admin 监控 安全配置 - * - * @author Lion Li - */ -@EnableWebSecurity -@Configuration -public class SecurityConfig { - - private final String adminContextPath; - - public SecurityConfig(AdminServerProperties adminServerProperties) { - this.adminContextPath = adminServerProperties.getContextPath(); - } - - @Bean - public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { - SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); - successHandler.setTargetUrlParameter("redirectTo"); - successHandler.setDefaultTargetUrl(adminContextPath + "/"); - - return httpSecurity - .headers((header) -> - header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)) - .authorizeHttpRequests((authorize) -> - authorize.requestMatchers( - new AntPathRequestMatcher(adminContextPath + "/assets/**"), - new AntPathRequestMatcher(adminContextPath + "/login") - ).permitAll() - .anyRequest().authenticated()) - .formLogin((formLogin) -> - formLogin.loginPage(adminContextPath + "/login").successHandler(successHandler)) - .logout((logout) -> - logout.logoutUrl(adminContextPath + "/logout")) - .httpBasic(Customizer.withDefaults()) - .csrf(AbstractHttpConfigurer::disable) - .build(); - } - -} diff --git a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/notifier/CustomNotifier.java b/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/notifier/CustomNotifier.java deleted file mode 100644 index 838eefc..0000000 --- a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/java/org/dromara/monitor/admin/notifier/CustomNotifier.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.dromara.monitor.admin.notifier; - -import de.codecentric.boot.admin.server.domain.entities.Instance; -import de.codecentric.boot.admin.server.domain.entities.InstanceRepository; -import de.codecentric.boot.admin.server.domain.events.InstanceEvent; -import de.codecentric.boot.admin.server.domain.events.InstanceStatusChangedEvent; -import de.codecentric.boot.admin.server.notify.AbstractEventNotifier; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; -import reactor.core.publisher.Mono; - -import static de.codecentric.boot.admin.server.domain.values.StatusInfo.*; - -/** - * 自定义事件通知处理 - * - * @author Lion Li - */ -@Slf4j -@Component -public class CustomNotifier extends AbstractEventNotifier { - - protected CustomNotifier(InstanceRepository repository) { - super(repository); - } - - @Override - @SuppressWarnings("all") - protected Mono doNotify(InstanceEvent event, Instance instance) { - return Mono.fromRunnable(() -> { - // 实例状态改变事件 - if (event instanceof InstanceStatusChangedEvent) { - // 获取实例注册名称 - String registName = instance.getRegistration().getName(); - // 获取实例ID - String instanceId = event.getInstance().getValue(); - // 获取实例状态 - String status = ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus(); - // 获取服务URL - String serviceUrl = instance.getRegistration().getServiceUrl(); - String statusName = switch (status) { - case STATUS_UP -> "服务上线"; // 实例成功启动并可以正常处理请求 - case STATUS_OFFLINE -> "服务离线"; //实例被手动或自动地从服务中移除 - case STATUS_RESTRICTED -> "服务受限"; //表示实例在某些方面受限,可能无法完全提供所有服务 - case STATUS_OUT_OF_SERVICE -> "停止服务状态"; //表示实例已被标记为停止提供服务,可能是计划内维护或测试 - case STATUS_DOWN -> "服务下线"; //实例因崩溃、错误或其他原因停止运行 - case STATUS_UNKNOWN -> "服务未知异常"; //监控系统无法确定实例的当前状态 - default -> "未知状态"; //没有匹配的状态 - }; - log.info("Instance Status Change: 状态名称【{}】, 注册名称【{}】, 实例ID【{}】, 状态【{}】, 服务URL【{}】", - statusName, registName, instanceId, status, serviceUrl); - } - }); - } -} diff --git a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml b/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml deleted file mode 100644 index 622c93d..0000000 --- a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml +++ /dev/null @@ -1,48 +0,0 @@ -server: - port: 9090 -spring: - application: - name: ruoyi-monitor-admin - profiles: - active: @profiles.active@ - -logging: - config: classpath:logback-plus.xml - ---- # 监控中心服务端配置 -spring: - security: - user: - name: @monitor.username@ - password: @monitor.password@ - boot: - admin: - ui: - title: RuoYi-Vue-Plus服务监控中心 - context-path: /admin - ---- # Actuator 监控端点的配置项 -management: - endpoints: - web: - exposure: - include: '*' - endpoint: - health: - show-details: ALWAYS - logfile: - external-file: ./logs/ruoyi-monitor-admin.log - ---- # 监控配置 -spring.boot.admin.client: - # 增加客户端开关 - enabled: true - # 设置 Spring Boot Admin Server 地址 - url: http://localhost:9090/admin - instance: - service-host-type: IP - metadata: - username: ${spring.boot.admin.client.username} - userpassword: ${spring.boot.admin.client.password} - username: @monitor.username@ - password: @monitor.password@ diff --git a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/banner.txt b/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/banner.txt deleted file mode 100644 index 5d24152..0000000 --- a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/banner.txt +++ /dev/null @@ -1,8 +0,0 @@ -Application Version: ${revision} -Spring Boot Version: ${spring-boot.version} - __ __ _ _ _ _ -| \/ | (_) | /\ | | (_) -| \ / | ___ _ __ _| |_ ___ _ __ ______ / \ __| |_ __ ___ _ _ __ -| |\/| |/ _ \| '_ \| | __/ _ \| '__|______/ /\ \ / _` | '_ ` _ \| | '_ \ -| | | | (_) | | | | | || (_) | | / ____ \ (_| | | | | | | | | | | -|_| |_|\___/|_| |_|_|\__\___/|_| /_/ \_\__,_|_| |_| |_|_|_| |_| diff --git a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/logback-plus.xml b/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/logback-plus.xml deleted file mode 100644 index 16bb937..0000000 --- a/im-admin/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/logback-plus.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - logback - - - - - - - ${console.log.pattern} - utf-8 - - - - - ${log.path}.log - - ${log.path}.%d{yyyy-MM-dd}.log - - 60 - - - ${log.pattern} - - - - - - - - - \ No newline at end of file diff --git a/im-admin/ruoyi-extend/ruoyi-snailjob-server/Dockerfile b/im-admin/ruoyi-extend/ruoyi-snailjob-server/Dockerfile deleted file mode 100644 index a66ca66..0000000 --- a/im-admin/ruoyi-extend/ruoyi-snailjob-server/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/ -FROM bellsoft/liberica-openjdk-debian:17.0.11-cds -#FROM bellsoft/liberica-openjdk-debian:21.0.3-cds -#FROM findepi/graalvm:java17-native - -LABEL maintainer="Lion Li" - -RUN mkdir -p /ruoyi/snailjob/logs - -WORKDIR /ruoyi/snailjob - -ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="-Xms512m -Xmx1024m" - -EXPOSE 8800 -EXPOSE 17888 - -ADD ./target/ruoyi-snailjob-server.jar ./app.jar - -ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom \ - -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \ - -jar app.jar diff --git a/im-admin/ruoyi-extend/ruoyi-snailjob-server/pom.xml b/im-admin/ruoyi-extend/ruoyi-snailjob-server/pom.xml deleted file mode 100644 index 0b3afd3..0000000 --- a/im-admin/ruoyi-extend/ruoyi-snailjob-server/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - org.dromara - ruoyi-extend - ${revision} - - 4.0.0 - jar - ruoyi-snailjob-server - - - - com.aizuda - snail-job-server-starter - ${snailjob.version} - - - org.scala-lang - scala-library - - - - - - org.scala-lang - scala-library - 2.13.9 - - - - de.codecentric - spring-boot-admin-starter-client - ${spring-boot-admin.version} - - - - - ${project.artifactId} - - - org.springframework.boot - spring-boot-maven-plugin - ${spring-boot.version} - - - - repackage - - - - - - - - diff --git a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/com/aizuda/snailjob/server/starter/filter/ActuatorAuthFilter.java b/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/com/aizuda/snailjob/server/starter/filter/ActuatorAuthFilter.java deleted file mode 100644 index e3a6892..0000000 --- a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/com/aizuda/snailjob/server/starter/filter/ActuatorAuthFilter.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.aizuda.snailjob.server.starter.filter; - -import jakarta.servlet.*; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.Base64; - -public class ActuatorAuthFilter implements Filter { - - private final String username; - private final String password; - - public ActuatorAuthFilter(String username, String password) { - this.username = username; - this.password = password; - } - - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - HttpServletRequest request = (HttpServletRequest) servletRequest; - HttpServletResponse response = (HttpServletResponse) servletResponse; - - // 获取 Authorization 头 - String authHeader = request.getHeader("Authorization"); - - if (authHeader == null || !authHeader.startsWith("Basic ")) { - // 如果没有提供 Authorization 或者格式不对,则返回 401 - response.setHeader("WWW-Authenticate", "Basic realm=\"realm\""); - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"); - return; - } - - // 解码 Base64 编码的用户名和密码 - String base64Credentials = authHeader.substring("Basic ".length()); - byte[] credDecoded = Base64.getDecoder().decode(base64Credentials); - String credentials = new String(credDecoded, StandardCharsets.UTF_8); - String[] split = credentials.split(":"); - if (split.length != 2) { - response.setHeader("WWW-Authenticate", "Basic realm=\"realm\""); - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"); - return; - } - // 验证用户名和密码 - if (!username.equals(split[0]) && password.equals(split[1])) { - response.setHeader("WWW-Authenticate", "Basic realm=\"realm\""); - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"); - return; - } - // 如果认证成功,继续处理请求 - filterChain.doFilter(request, response); - } - - @Override - public void init(FilterConfig filterConfig) { - } - - @Override - public void destroy() { - } - -} diff --git a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/com/aizuda/snailjob/server/starter/filter/SecurityConfig.java b/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/com/aizuda/snailjob/server/starter/filter/SecurityConfig.java deleted file mode 100644 index 3cae8f5..0000000 --- a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/com/aizuda/snailjob/server/starter/filter/SecurityConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.aizuda.snailjob.server.starter.filter; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * 权限安全配置 - * - * @author Lion Li - */ -@Configuration -public class SecurityConfig { - - @Value("${spring.boot.admin.client.username}") - private String username; - @Value("${spring.boot.admin.client.password}") - private String password; - - @Bean - public FilterRegistrationBean actuatorFilterRegistrationBean() { - FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); - registrationBean.setFilter(new ActuatorAuthFilter(username, password)); - registrationBean.addUrlPatterns("/actuator", "/actuator/**"); - return registrationBean; - } - -} diff --git a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/org/dromara/snailjob/SnailJobServerApplication.java b/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/org/dromara/snailjob/SnailJobServerApplication.java deleted file mode 100644 index dfab068..0000000 --- a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/java/org/dromara/snailjob/SnailJobServerApplication.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.dromara.snailjob; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * SnailJob Server 启动程序 - * - * @author opensnail - * @date 2024-05-17 - */ -@SpringBootApplication -public class SnailJobServerApplication { - - public static void main(String[] args) { - SpringApplication.run(com.aizuda.snailjob.server.SnailJobServerApplication.class, args); - } - -} diff --git a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml b/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml deleted file mode 100644 index 3ed797c..0000000 --- a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml +++ /dev/null @@ -1,50 +0,0 @@ -spring: - datasource: - type: com.zaxxer.hikari.HikariDataSource - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - username: root - password: root - hikari: - connection-timeout: 30000 - validation-timeout: 5000 - minimum-idle: 10 - maximum-pool-size: 20 - idle-timeout: 600000 - max-lifetime: 900000 - keepaliveTime: 30000 - ---- # snail-job 服务端配置 -snail-job: - # 拉取重试数据的每批次的大小 - retry-pull-page-size: 1000 - # 拉取重试数据的每批次的大小 - job-pull-page-size: 1000 - # 服务端netty端口 - netty-port: 17888 - # 一个客户端每秒最多接收的重试数量指令 - limiter: 1000 - # 号段模式下步长配置 - step: 100 - # 日志保存时间(单位: day) - log-storage: 90 - # 回调配置 - callback: - #回调最大执行次数 - max-count: 288 - #间隔时间 - trigger-interval: 900 - retry-max-pull-count: 10 - ---- # 监控中心配置 -spring.boot.admin.client: - # 增加客户端开关 - enabled: true - url: http://localhost:9090/admin - instance: - service-host-type: IP - metadata: - username: ${spring.boot.admin.client.username} - userpassword: ${spring.boot.admin.client.password} - username: @monitor.username@ - password: @monitor.password@ diff --git a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml b/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml deleted file mode 100644 index 1d830db..0000000 --- a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml +++ /dev/null @@ -1,50 +0,0 @@ -spring: - datasource: - type: com.zaxxer.hikari.HikariDataSource - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - username: root - password: root - hikari: - connection-timeout: 30000 - validation-timeout: 5000 - minimum-idle: 10 - maximum-pool-size: 20 - idle-timeout: 600000 - max-lifetime: 900000 - keepaliveTime: 30000 - ---- # snail-job 服务端配置 -snail-job: - # 拉取重试数据的每批次的大小 - retry-pull-page-size: 1000 - # 拉取重试数据的每批次的大小 - job-pull-page-size: 1000 - # 服务端 netty 端口 - netty-port: 17888 - # 一个客户端每秒最多接收的重试数量指令 - limiter: 1000 - # 号段模式下步长配置 - step: 100 - # 日志保存时间(单位: day) - log-storage: 90 - # 回调配置 - callback: - #回调最大执行次数 - max-count: 288 - #间隔时间 - trigger-interval: 900 - retry-max-pull-count: 10 - ---- # 监控中心配置 -spring.boot.admin.client: - # 增加客户端开关 - enabled: true - url: http://localhost:9090/admin - instance: - service-host-type: IP - metadata: - username: ${spring.boot.admin.client.username} - userpassword: ${spring.boot.admin.client.password} - username: @monitor.username@ - password: @monitor.password@ diff --git a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application.yml b/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application.yml deleted file mode 100644 index ba6df45..0000000 --- a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application.yml +++ /dev/null @@ -1,39 +0,0 @@ -server: - port: 8800 - servlet: - context-path: /snail-job - -spring: - application: - name: ruoyi-snailjob-server - profiles: - active: @profiles.active@ - web: - resources: - static-locations: classpath:admin/ - -mybatis-plus: - typeAliasesPackage: com.aizuda.snailjob.template.datasource.persistence.po - global-config: - db-config: - where-strategy: NOT_EMPTY - capital-mode: false - logic-delete-value: 1 - logic-not-delete-value: 0 - configuration: - map-underscore-to-camel-case: true - cache-enabled: true - -logging: - config: classpath:logback-plus.xml - -management: - endpoints: - web: - exposure: - include: '*' - endpoint: - health: - show-details: ALWAYS - logfile: - external-file: ./logs/ruoyi-snailjob-server/console.log diff --git a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/banner.txt b/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/banner.txt deleted file mode 100644 index adb96c5..0000000 --- a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/banner.txt +++ /dev/null @@ -1,11 +0,0 @@ -Application Version: ${revision} -Spring Boot Version: ${spring-boot.version} - _ _ _ _ - (_) (_) | | - ___ _ __ __ _ _| |_ ___ | |__ ______ ___ ___ _ ____ _____ _ __ -/ __| '_ \ / _` | | | |/ _ \| '_ \______/ __|/ _ \ '__\ \ / / _ \ '__| -\__ \ | | | (_| | | | | (_) | |_) | \__ \ __/ | \ V / __/ | -|___/_| |_|\__,_|_|_| |\___/|_.__/ |___/\___|_| \_/ \___|_| - _/ | - |__/ - diff --git a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/logback-plus.xml b/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/logback-plus.xml deleted file mode 100644 index a40262c..0000000 --- a/im-admin/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/logback-plus.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - ${console.log.pattern} - utf-8 - - - - - - ${log.path}/console.log - - - ${log.path}/console.%d{yyyy-MM-dd}.log - - 1 - - - ${log.pattern} - utf-8 - - - - INFO - - - - - ${log.path}/info.log - - ${log.path}/info.%d{yyyy-MM-dd}.log - 60 - - - ${log.pattern} - - - INFO - ACCEPT - DENY - - - - - ${log.path}/error.log - - ${log.path}/error.%d{yyyy-MM-dd}.log - - 60 - - - ${log.pattern} - - - ERROR - ACCEPT - DENY - - - - - 100 - 1024 - - - - - 100 - 1024 - - - - - - - - - - - - - - - diff --git a/im-admin/ruoyi-modules/pom.xml b/im-admin/ruoyi-modules/pom.xml index daff497..edcc77e 100644 --- a/im-admin/ruoyi-modules/pom.xml +++ b/im-admin/ruoyi-modules/pom.xml @@ -3,18 +3,15 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - ruoyi-vue-plus + im-admin org.dromara ${revision} 4.0.0 - ruoyi-demo ruoyi-generator - ruoyi-job ruoyi-system - ruoyi-workflow ruoyi-modules diff --git a/im-admin/ruoyi-modules/ruoyi-demo/pom.xml b/im-admin/ruoyi-modules/ruoyi-demo/pom.xml deleted file mode 100644 index 119fe61..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/pom.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - - org.dromara - ruoyi-modules - ${revision} - - 4.0.0 - - ruoyi-demo - - - demo模块 - - - - - - - org.dromara - ruoyi-common-core - - - - org.dromara - ruoyi-common-doc - - - - org.dromara - ruoyi-common-sms - - - - org.dromara - ruoyi-common-mail - - - - org.dromara - ruoyi-common-redis - - - - org.dromara - ruoyi-common-idempotent - - - - org.dromara - ruoyi-common-mybatis - - - - org.dromara - ruoyi-common-log - - - - org.dromara - ruoyi-common-excel - - - - org.dromara - ruoyi-common-security - - - - org.dromara - ruoyi-common-web - - - - org.dromara - ruoyi-common-ratelimiter - - - - org.dromara - ruoyi-common-translation - - - - org.dromara - ruoyi-common-sensitive - - - - org.dromara - ruoyi-common-encrypt - - - - org.dromara - ruoyi-common-tenant - - - - org.dromara - ruoyi-common-websocket - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/MailController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/MailController.java deleted file mode 100644 index 47b4349..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/MailController.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.dromara.demo.controller; - -import org.dromara.common.core.domain.R; -import org.dromara.common.mail.utils.MailUtils; -import lombok.RequiredArgsConstructor; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.io.File; - - -/** - * 邮件发送案例 - * - * @author Michelle.Chung - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/mail") -public class MailController { - - /** - * 发送邮件 - * - * @param to 接收人 - * @param subject 标题 - * @param text 内容 - */ - @GetMapping("/sendSimpleMessage") - public R sendSimpleMessage(String to, String subject, String text) { - MailUtils.sendText(to, subject, text); - return R.ok(); - } - - /** - * 发送邮件(带附件) - * - * @param to 接收人 - * @param subject 标题 - * @param text 内容 - * @param filePath 附件路径 - */ - @GetMapping("/sendMessageWithAttachment") - public R sendMessageWithAttachment(String to, String subject, String text, String filePath) { - MailUtils.sendText(to, subject, text, new File(filePath)); - return R.ok(); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisCacheController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisCacheController.java deleted file mode 100644 index 341880c..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisCacheController.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.dromara.demo.controller; - -import org.dromara.common.core.constant.CacheNames; -import org.dromara.common.core.domain.R; -import org.dromara.common.redis.utils.RedisUtils; -import lombok.RequiredArgsConstructor; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.CachePut; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.time.Duration; - -/** - * spring-cache 演示案例 - * - * @author Lion Li - */ -// 类级别 缓存统一配置 -//@CacheConfig(cacheNames = CacheNames.DEMO_CACHE) -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/cache") -public class RedisCacheController { - - /** - * 测试 @Cacheable - *

- * 表示这个方法有了缓存的功能,方法的返回值会被缓存下来 - * 下一次调用该方法前,会去检查是否缓存中已经有值 - * 如果有就直接返回,不调用方法 - * 如果没有,就调用方法,然后把结果缓存起来 - * 这个注解「一般用在查询方法上」 - *

- * 重点说明: 缓存注解严谨与其他筛选数据功能一起使用 - * 例如: 数据权限注解 会造成 缓存击穿 与 数据不一致问题 - *

- * cacheNames 命名规则 查看 {@link CacheNames} 注释 支持多参数 - */ - @Cacheable(cacheNames = "demo:cache#60s#10m#20", key = "#key", condition = "#key != null") - @GetMapping("/test1") - public R test1(String key, String value) { - return R.ok("操作成功", value); - } - - /** - * 测试 @CachePut - *

- * 加了@CachePut注解的方法,会把方法的返回值put到缓存里面缓存起来,供其它地方使用 - * 它「通常用在新增或者实时更新方法上」 - *

- * cacheNames 命名规则 查看 {@link CacheNames} 注释 支持多参数 - */ - @CachePut(cacheNames = CacheNames.DEMO_CACHE, key = "#key", condition = "#key != null") - @GetMapping("/test2") - public R test2(String key, String value) { - return R.ok("操作成功", value); - } - - /** - * 测试 @CacheEvict - *

- * 使用了CacheEvict注解的方法,会清空指定缓存 - * 「一般用在删除的方法上」 - *

- * cacheNames 命名规则 查看 {@link CacheNames} 注释 支持多参数 - */ - @CacheEvict(cacheNames = CacheNames.DEMO_CACHE, key = "#key", condition = "#key != null") - @GetMapping("/test3") - public R test3(String key, String value) { - return R.ok("操作成功", value); - } - - /** - * 测试设置过期时间 - * 手动设置过期时间10秒 - * 11秒后获取 判断是否相等 - */ - @GetMapping("/test6") - public R test6(String key, String value) { - RedisUtils.setCacheObject(key, value); - boolean flag = RedisUtils.expire(key, Duration.ofSeconds(10)); - System.out.println("***********" + flag); - try { - Thread.sleep(11 * 1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - Object obj = RedisUtils.getCacheObject(key); - return R.ok(value.equals(obj)); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisLockController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisLockController.java deleted file mode 100644 index b7e0962..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisLockController.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.dromara.demo.controller; - -import com.baomidou.lock.LockInfo; -import com.baomidou.lock.LockTemplate; -import com.baomidou.lock.annotation.Lock4j; -import com.baomidou.lock.executor.RedissonLockExecutor; -import org.dromara.common.core.domain.R; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.time.LocalTime; - - -/** - * 测试分布式锁的样例 - * - * @author shenxinquan - */ -@Slf4j -@RestController -@RequestMapping("/demo/redisLock") -public class RedisLockController { - - @Autowired - private LockTemplate lockTemplate; - - /** - * 测试lock4j 注解 - */ - @Lock4j(keys = {"#key"}) - @GetMapping("/testLock4j") - public R testLock4j(String key, String value) { - System.out.println("start:" + key + ",time:" + LocalTime.now().toString()); - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println("end :" + key + ",time:" + LocalTime.now().toString()); - return R.ok("操作成功", value); - } - - /** - * 测试lock4j 工具 - */ - @GetMapping("/testLock4jLockTemplate") - public R testLock4jLockTemplate(String key, String value) { - final LockInfo lockInfo = lockTemplate.lock(key, 30000L, 5000L, RedissonLockExecutor.class); - if (null == lockInfo) { - throw new RuntimeException("业务处理中,请稍后再试"); - } - // 获取锁成功,处理业务 - try { - try { - Thread.sleep(8000); - } catch (InterruptedException e) { - // - } - System.out.println("执行简单方法1 , 当前线程:" + Thread.currentThread().getName()); - } finally { - //释放锁 - lockTemplate.releaseLock(lockInfo); - } - //结束 - return R.ok("操作成功", value); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisPubSubController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisPubSubController.java deleted file mode 100644 index bdbf033..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisPubSubController.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.dromara.demo.controller; - -import org.dromara.common.core.domain.R; -import org.dromara.common.redis.utils.RedisUtils; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * Redis 发布订阅 演示案例 - * - * @author Lion Li - */ -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/redis/pubsub") -public class RedisPubSubController { - - /** - * 发布消息 - * - * @param key 通道Key - * @param value 发送内容 - */ - @GetMapping("/pub") - public R pub(String key, String value) { - RedisUtils.publish(key, value, consumer -> { - System.out.println("发布通道 => " + key + ", 发送值 => " + value); - }); - return R.ok("操作成功"); - } - - /** - * 订阅消息 - * - * @param key 通道Key - */ - @GetMapping("/sub") - public R sub(String key) { - RedisUtils.subscribe(key, String.class, msg -> { - System.out.println("订阅通道 => " + key + ", 接收值 => " + msg); - }); - return R.ok("操作成功"); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisRateLimiterController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisRateLimiterController.java deleted file mode 100644 index f8adf7d..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisRateLimiterController.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.dromara.demo.controller; - -import org.dromara.common.core.domain.R; -import org.dromara.common.ratelimiter.annotation.RateLimiter; -import org.dromara.common.ratelimiter.enums.LimitType; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - - -/** - * 测试分布式限流样例 - * - * @author Lion Li - */ -@Slf4j -@RestController -@RequestMapping("/demo/rateLimiter") -public class RedisRateLimiterController { - - /** - * 测试全局限流 - * 全局影响 - */ - @RateLimiter(count = 2, time = 10) - @GetMapping("/test") - public R test(String value) { - return R.ok("操作成功", value); - } - - /** - * 测试请求IP限流 - * 同一IP请求受影响 - */ - @RateLimiter(count = 2, time = 10, limitType = LimitType.IP) - @GetMapping("/testip") - public R testip(String value) { - return R.ok("操作成功", value); - } - - /** - * 测试集群实例限流 - * 启动两个后端服务互不影响 - */ - @RateLimiter(count = 2, time = 10, limitType = LimitType.CLUSTER) - @GetMapping("/testcluster") - public R testcluster(String value) { - return R.ok("操作成功", value); - } - - /** - * 测试请求IP限流(key基于参数获取) - * 同一IP请求受影响 - * - * 简单变量获取 #变量 复杂表达式 #{#变量 != 1 ? 1 : 0} - */ - @RateLimiter(count = 2, time = 10, limitType = LimitType.IP, key = "#value") - @GetMapping("/testObj") - public R testObj(String value) { - return R.ok("操作成功", value); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java deleted file mode 100644 index b993f60..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.dromara.demo.controller; - -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.domain.R; -import org.dromara.sms4j.api.SmsBlend; -import org.dromara.sms4j.api.entity.SmsResponse; -import org.dromara.sms4j.core.factory.SmsFactory; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.LinkedHashMap; - -/** - * 短信演示案例 - * 请先阅读文档 否则无法使用 - * - * @author Lion Li - * @version 4.2.0 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/sms") -public class SmsController { - /** - * 发送短信Aliyun - * - * @param phones 电话号 - * @param templateId 模板ID - */ - @GetMapping("/sendAliyun") - public R sendAliyun(String phones, String templateId) { - LinkedHashMap map = new LinkedHashMap<>(1); - map.put("code", "1234"); - SmsBlend smsBlend = SmsFactory.getSmsBlend("config1"); - SmsResponse smsResponse = smsBlend.sendMessage(phones, templateId, map); - return R.ok(smsResponse); - } - - /** - * 发送短信Tencent - * - * @param phones 电话号 - * @param templateId 模板ID - */ - @GetMapping("/sendTencent") - public R sendTencent(String phones, String templateId) { - LinkedHashMap map = new LinkedHashMap<>(1); -// map.put("2", "测试测试"); - map.put("1", "1234"); - SmsBlend smsBlend = SmsFactory.getSmsBlend("config2"); - SmsResponse smsResponse = smsBlend.sendMessage(phones, templateId, map); - return R.ok(smsResponse); - } - - /** - * 添加黑名单 - * - * @param phone 手机号 - */ - @GetMapping("/addBlacklist") - public R addBlacklist(String phone){ - SmsBlend smsBlend = SmsFactory.getSmsBlend("config1"); - smsBlend.joinInBlacklist(phone); - return R.ok(); - } - - /** - * 移除黑名单 - * - * @param phone 手机号 - */ - @GetMapping("/removeBlacklist") - public R removeBlacklist(String phone){ - SmsBlend smsBlend = SmsFactory.getSmsBlend("config1"); - smsBlend.removeFromBlacklist(phone); - return R.ok(); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/Swagger3DemoController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/Swagger3DemoController.java deleted file mode 100644 index bb02f98..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/Swagger3DemoController.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.dromara.demo.controller; - -import org.dromara.common.core.domain.R; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestPart; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; - -/** - * swagger3 用法示例 - * - * @author Lion Li - */ -@RestController -@RequestMapping("/swagger/demo") -public class Swagger3DemoController { - - /** - * 上传请求 - * 必须使用 @RequestPart 注解标注为文件 - * - * @param file 文件 - */ - @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public R upload(@RequestPart("file") MultipartFile file) { - return R.ok("操作成功", file.getOriginalFilename()); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestBatchController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestBatchController.java deleted file mode 100644 index af8c77b..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestBatchController.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.dromara.demo.controller; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.dromara.common.core.domain.R; -import org.dromara.common.web.core.BaseController; -import org.dromara.demo.domain.TestDemo; -import org.dromara.demo.mapper.TestDemoMapper; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.ArrayList; -import java.util.List; - -/** - * 测试批量方法 - * - * @author Lion Li - * @date 2021-05-30 - */ -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/batch") -public class TestBatchController extends BaseController { - - /** - * 为了便于测试 直接引入mapper - */ - private final TestDemoMapper testDemoMapper; - - /** - * 新增批量方法 可完美替代 saveBatch 秒级插入上万数据 (对mysql负荷较大) - *

- * 3.5.0 版本 增加 rewriteBatchedStatements=true 批处理参数 使 MP 原生批处理可以达到同样的速度 - */ - @PostMapping("/add") -// @DS("slave") - public R add() { - List list = new ArrayList<>(); - for (int i = 0; i < 1000; i++) { - TestDemo testDemo = new TestDemo(); - testDemo.setOrderNum(-1); - testDemo.setTestKey("批量新增"); - testDemo.setValue("测试新增"); - list.add(testDemo); - } - return toAjax(testDemoMapper.insertBatch(list)); - } - - /** - * 新增或更新 可完美替代 saveOrUpdateBatch 高性能 - *

- * 3.5.0 版本 增加 rewriteBatchedStatements=true 批处理参数 使 MP 原生批处理可以达到同样的速度 - */ - @PostMapping("/addOrUpdate") -// @DS("slave") - public R addOrUpdate() { - List list = new ArrayList<>(); - for (int i = 0; i < 1000; i++) { - TestDemo testDemo = new TestDemo(); - testDemo.setOrderNum(-1); - testDemo.setTestKey("批量新增"); - testDemo.setValue("测试新增"); - list.add(testDemo); - } - testDemoMapper.insertBatch(list); - for (int i = 0; i < list.size(); i++) { - TestDemo testDemo = list.get(i); - testDemo.setTestKey("批量新增或修改"); - testDemo.setValue("批量新增或修改"); - if (i % 2 == 0) { - testDemo.setId(null); - } - } - return toAjax(testDemoMapper.insertOrUpdateBatch(list)); - } - - /** - * 删除批量方法 - */ - @DeleteMapping() -// @DS("slave") - public R remove() { - return toAjax(testDemoMapper.delete(new LambdaQueryWrapper() - .eq(TestDemo::getOrderNum, -1L))); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestDemoController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestDemoController.java deleted file mode 100644 index f31c540..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestDemoController.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.dromara.demo.controller; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.ValidatorUtils; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.core.validate.QueryGroup; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.excel.core.ExcelResult; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.demo.domain.TestDemo; -import org.dromara.demo.domain.bo.TestDemoBo; -import org.dromara.demo.domain.bo.TestDemoImportVo; -import org.dromara.demo.domain.vo.TestDemoVo; -import org.dromara.demo.service.ITestDemoService; -import lombok.RequiredArgsConstructor; -import org.springframework.http.MediaType; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; - -import java.util.*; -import java.util.concurrent.TimeUnit; - -/** - * 测试单表Controller - * - * @author Lion Li - * @date 2021-07-26 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/demo") -public class TestDemoController extends BaseController { - - private final ITestDemoService testDemoService; - - /** - * 查询测试单表列表 - */ - @SaCheckPermission("demo:demo:list") - @GetMapping("/list") - public TableDataInfo list(@Validated(QueryGroup.class) TestDemoBo bo, PageQuery pageQuery) { - return testDemoService.queryPageList(bo, pageQuery); - } - - /** - * 自定义分页查询 - */ - @SaCheckPermission("demo:demo:list") - @GetMapping("/page") - public TableDataInfo page(@Validated(QueryGroup.class) TestDemoBo bo, PageQuery pageQuery) { - return testDemoService.customPageList(bo, pageQuery); - } - - /** - * 导入数据 - * - * @param file 导入文件 - */ - @Log(title = "测试单表", businessType = BusinessType.IMPORT) - @SaCheckPermission("demo:demo:import") - @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public R importData(@RequestPart("file") MultipartFile file) throws Exception { - ExcelResult excelResult = ExcelUtil.importExcel(file.getInputStream(), TestDemoImportVo.class, true); - List list = MapstructUtils.convert(excelResult.getList(), TestDemo.class); - testDemoService.saveBatch(list); - return R.ok(excelResult.getAnalysis()); - } - - /** - * 导出测试单表列表 - */ - @SaCheckPermission("demo:demo:export") - @Log(title = "测试单表", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(@Validated TestDemoBo bo, HttpServletResponse response) { - List list = testDemoService.queryList(bo); - // 测试雪花id导出 -// for (TestDemoVo vo : list) { -// vo.setId(1234567891234567893L); -// } - ExcelUtil.exportExcel(list, "测试单表", TestDemoVo.class, response); - } - - /** - * 获取测试单表详细信息 - * - * @param id 测试ID - */ - @SaCheckPermission("demo:demo:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable("id") Long id) { - return R.ok(testDemoService.queryById(id)); - } - - /** - * 新增测试单表 - */ - @SaCheckPermission("demo:demo:add") - @Log(title = "测试单表", businessType = BusinessType.INSERT) - @RepeatSubmit(interval = 2, timeUnit = TimeUnit.SECONDS, message = "{repeat.submit.message}") - @PostMapping() - public R add(@RequestBody TestDemoBo bo) { - // 使用校验工具对标 @Validated(AddGroup.class) 注解 - // 用于在非 Controller 的地方校验对象 - ValidatorUtils.validate(bo, AddGroup.class); - return toAjax(testDemoService.insertByBo(bo)); - } - - /** - * 修改测试单表 - */ - @SaCheckPermission("demo:demo:edit") - @Log(title = "测试单表", businessType = BusinessType.UPDATE) - @RepeatSubmit - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody TestDemoBo bo) { - return toAjax(testDemoService.updateByBo(bo)); - } - - /** - * 删除测试单表 - * - * @param ids 测试ID串 - */ - @SaCheckPermission("demo:demo:remove") - @Log(title = "测试单表", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { - return toAjax(testDemoService.deleteWithValidByIds(Arrays.asList(ids), true)); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestEncryptController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestEncryptController.java deleted file mode 100644 index 2b6886d..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestEncryptController.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.dromara.demo.controller; - -import org.dromara.common.core.domain.R; -import org.dromara.demo.domain.TestDemoEncrypt; -import org.dromara.demo.mapper.TestDemoEncryptMapper; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.HashMap; -import java.util.Map; - - -/** - * 测试数据库加解密功能 - * - * @author Lion Li - */ -@Validated -@RestController -@RequestMapping("/demo/encrypt") -public class TestEncryptController { - - @Autowired - private TestDemoEncryptMapper mapper; - @Value("${mybatis-encryptor.enable}") - private Boolean encryptEnable; - - /** - * 测试数据库加解密 - * - * @param key 测试key - * @param value 测试value - */ - @GetMapping() - public R> test(String key, String value) { - if (!encryptEnable) { - throw new RuntimeException("加密功能未开启!"); - } - Map map = new HashMap<>(2); - TestDemoEncrypt demo = new TestDemoEncrypt(); - demo.setTestKey(key); - demo.setValue(value); - mapper.insert(demo); - map.put("加密", demo); - TestDemoEncrypt testDemo = mapper.selectById(demo.getId()); - map.put("解密", testDemo); - return R.ok(map); - } - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestExcelController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestExcelController.java deleted file mode 100644 index 3fd124c..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestExcelController.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.dromara.demo.controller; - -import cn.hutool.core.collection.CollUtil; -import jakarta.servlet.http.HttpServletResponse; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.RequiredArgsConstructor; -import org.dromara.common.excel.core.ExcelResult; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.demo.domain.vo.ExportDemoVo; -import org.dromara.demo.listener.ExportDemoListener; -import org.dromara.demo.service.IExportExcelService; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 测试Excel功能 - * - * @author Lion Li - */ -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/excel") -public class TestExcelController { - - private final IExportExcelService exportExcelService; - - /** - * 单列表多数据 - */ - @GetMapping("/exportTemplateOne") - public void exportTemplateOne(HttpServletResponse response) { - Map map = new HashMap<>(); - map.put("title", "单列表多数据"); - map.put("test1", "数据测试1"); - map.put("test2", "数据测试2"); - map.put("test3", "数据测试3"); - map.put("test4", "数据测试4"); - map.put("testTest", "666"); - List list = new ArrayList<>(); - list.add(new TestObj("单列表测试1", "列表测试1", "列表测试2", "列表测试3", "列表测试4")); - list.add(new TestObj("单列表测试2", "列表测试5", "列表测试6", "列表测试7", "列表测试8")); - list.add(new TestObj("单列表测试3", "列表测试9", "列表测试10", "列表测试11", "列表测试12")); - ExcelUtil.exportTemplate(CollUtil.newArrayList(map, list), "单列表.xlsx", "excel/单列表.xlsx", response); - } - - /** - * 多列表多数据 - */ - @GetMapping("/exportTemplateMuliti") - public void exportTemplateMuliti(HttpServletResponse response) { - Map map = new HashMap<>(); - map.put("title1", "标题1"); - map.put("title2", "标题2"); - map.put("title3", "标题3"); - map.put("title4", "标题4"); - map.put("author", "Lion Li"); - List list1 = new ArrayList<>(); - list1.add(new TestObj1("list1测试1", "list1测试2", "list1测试3")); - list1.add(new TestObj1("list1测试4", "list1测试5", "list1测试6")); - list1.add(new TestObj1("list1测试7", "list1测试8", "list1测试9")); - List list2 = new ArrayList<>(); - list2.add(new TestObj1("list2测试1", "list2测试2", "list2测试3")); - list2.add(new TestObj1("list2测试4", "list2测试5", "list2测试6")); - List list3 = new ArrayList<>(); - list3.add(new TestObj1("list3测试1", "list3测试2", "list3测试3")); - List list4 = new ArrayList<>(); - list4.add(new TestObj1("list4测试1", "list4测试2", "list4测试3")); - list4.add(new TestObj1("list4测试4", "list4测试5", "list4测试6")); - list4.add(new TestObj1("list4测试7", "list4测试8", "list4测试9")); - list4.add(new TestObj1("list4测试10", "list4测试11", "list4测试12")); - Map multiListMap = new HashMap<>(); - multiListMap.put("map", map); - multiListMap.put("data1", list1); - multiListMap.put("data2", list2); - multiListMap.put("data3", list3); - multiListMap.put("data4", list4); - ExcelUtil.exportTemplateMultiList(multiListMap, "多列表.xlsx", "excel/多列表.xlsx", response); - } - - /** - * 导出下拉框 - * - * @param response / - */ - @GetMapping("/exportWithOptions") - public void exportWithOptions(HttpServletResponse response) { - exportExcelService.exportWithOptions(response); - } - - /** - * 多个sheet导出 - */ - @GetMapping("/exportTemplateMultiSheet") - public void exportTemplateMultiSheet(HttpServletResponse response) { - List list1 = new ArrayList<>(); - list1.add(new TestObj1("list1测试1", "list1测试2", "list1测试3")); - list1.add(new TestObj1("list1测试4", "list1测试5", "list1测试6")); - List list2 = new ArrayList<>(); - list2.add(new TestObj1("list2测试1", "list2测试2", "list2测试3")); - list2.add(new TestObj1("list2测试4", "list2测试5", "list2测试6")); - List list3 = new ArrayList<>(); - list3.add(new TestObj1("list3测试1", "list3测试2", "list3测试3")); - list3.add(new TestObj1("list3测试4", "list3测试5", "list3测试6")); - List list4 = new ArrayList<>(); - list4.add(new TestObj1("list4测试1", "list4测试2", "list4测试3")); - list4.add(new TestObj1("list4测试4", "list4测试5", "list4测试6")); - - List> list = new ArrayList<>(); - Map sheetMap1 = new HashMap<>(); - sheetMap1.put("data1", list1); - Map sheetMap2 = new HashMap<>(); - sheetMap2.put("data2", list2); - Map sheetMap3 = new HashMap<>(); - sheetMap3.put("data3", list3); - Map sheetMap4 = new HashMap<>(); - sheetMap4.put("data4", list4); - - list.add(sheetMap1); - list.add(sheetMap2); - list.add(sheetMap3); - list.add(sheetMap4); - ExcelUtil.exportTemplateMultiSheet(list, "多sheet列表", "excel/多sheet列表.xlsx", response); - } - - /** - * 导入表格 - */ - @PostMapping(value = "/importWithOptions", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public List importWithOptions(@RequestPart("file") MultipartFile file) throws Exception { - // 处理解析结果 - ExcelResult excelResult = ExcelUtil.importExcel(file.getInputStream(), ExportDemoVo.class, new ExportDemoListener()); - return excelResult.getList(); - } - - @Data - @AllArgsConstructor - static class TestObj1 { - private String test1; - private String test2; - private String test3; - } - - @Data - @AllArgsConstructor - static class TestObj { - private String name; - private String list1; - private String list2; - private String list3; - private String list4; - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestI18nController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestI18nController.java deleted file mode 100644 index 40393c5..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestI18nController.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.dromara.demo.controller; - -import org.dromara.common.core.domain.R; -import org.dromara.common.core.utils.MessageUtils; -import lombok.Data; -import org.hibernate.validator.constraints.Range; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; - - -/** - * 测试国际化 - * - * @author Lion Li - */ -@Validated -@RestController -@RequestMapping("/demo/i18n") -public class TestI18nController { - - /** - * 通过code获取国际化内容 - * code为 messages.properties 中的 key - *

- * 测试使用 user.register.success - * - * @param code 国际化code - */ - @GetMapping() - public R get(String code) { - return R.ok(MessageUtils.message(code)); - } - - /** - * Validator 校验国际化 - * 不传值 分别查看异常返回 - *

- * 测试使用 not.null - */ - @GetMapping("/test1") - public R test1(@NotBlank(message = "{not.null}") String str) { - return R.ok(str); - } - - /** - * Bean 校验国际化 - * 不传值 分别查看异常返回 - *

- * 测试使用 not.null - */ - @GetMapping("/test2") - public R test2(@Validated TestI18nBo bo) { - return R.ok(bo); - } - - @Data - public static class TestI18nBo { - - @NotBlank(message = "{not.null}") - private String name; - - @NotNull(message = "{not.null}") - @Range(min = 0, max = 100, message = "{length.not.valid}") - private Integer age; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestSensitiveController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestSensitiveController.java deleted file mode 100644 index eba0552..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestSensitiveController.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.dromara.demo.controller; - -import org.dromara.common.core.domain.R; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.sensitive.annotation.Sensitive; -import org.dromara.common.sensitive.core.SensitiveStrategy; -import lombok.Data; -import org.dromara.common.sensitive.core.SensitiveService; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 测试数据脱敏控制器 - *

- * 默认管理员不过滤 - * 需自行根据业务重写实现 - * - * @author Lion Li - * @version 3.6.0 - * @see SensitiveService - */ -@RestController -@RequestMapping("/demo/sensitive") -public class TestSensitiveController extends BaseController { - - /** - * 测试数据脱敏 - */ - @GetMapping("/test") - public R test() { - TestSensitive testSensitive = new TestSensitive(); - testSensitive.setIdCard("210397198608215431"); - testSensitive.setPhone("17640125371"); - testSensitive.setAddress("北京市朝阳区某某四合院1203室"); - testSensitive.setEmail("17640125371@163.com"); - testSensitive.setBankCard("6226456952351452853"); - return R.ok(testSensitive); - } - - @Data - static class TestSensitive { - - /** - * 身份证 - */ - @Sensitive(strategy = SensitiveStrategy.ID_CARD) - private String idCard; - - /** - * 电话 - */ - @Sensitive(strategy = SensitiveStrategy.PHONE, roleKey = "common") - private String phone; - - /** - * 地址 - */ - @Sensitive(strategy = SensitiveStrategy.ADDRESS, perms = "system:user:query") - private String address; - - /** - * 邮箱 - */ - @Sensitive(strategy = SensitiveStrategy.EMAIL, roleKey = "common", perms = "system:user:query1") - private String email; - - /** - * 银行卡 - */ - @Sensitive(strategy = SensitiveStrategy.BANK_CARD, roleKey = "common1", perms = "system:user:query") - private String bankCard; - - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestTreeController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestTreeController.java deleted file mode 100644 index 5c55205..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestTreeController.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.dromara.demo.controller; - -import cn.dev33.satoken.annotation.SaCheckPermission; -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.core.validate.QueryGroup; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.demo.domain.bo.TestTreeBo; -import org.dromara.demo.domain.vo.TestTreeVo; -import org.dromara.demo.service.ITestTreeService; -import lombok.RequiredArgsConstructor; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import java.util.Arrays; -import java.util.List; - -/** - * 测试树表Controller - * - * @author Lion Li - * @date 2021-07-26 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/tree") -public class TestTreeController extends BaseController { - - private final ITestTreeService testTreeService; - - /** - * 查询测试树表列表 - */ - @SaCheckPermission("demo:tree:list") - @GetMapping("/list") - public R> list(@Validated(QueryGroup.class) TestTreeBo bo) { - List list = testTreeService.queryList(bo); - return R.ok(list); - } - - /** - * 导出测试树表列表 - */ - @SaCheckPermission("demo:tree:export") - @Log(title = "测试树表", businessType = BusinessType.EXPORT) - @GetMapping("/export") - public void export(@Validated TestTreeBo bo, HttpServletResponse response) { - List list = testTreeService.queryList(bo); - ExcelUtil.exportExcel(list, "测试树表", TestTreeVo.class, response); - } - - /** - * 获取测试树表详细信息 - * - * @param id 测试树ID - */ - @SaCheckPermission("demo:tree:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable("id") Long id) { - return R.ok(testTreeService.queryById(id)); - } - - /** - * 新增测试树表 - */ - @SaCheckPermission("demo:tree:add") - @Log(title = "测试树表", businessType = BusinessType.INSERT) - @RepeatSubmit - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody TestTreeBo bo) { - return toAjax(testTreeService.insertByBo(bo)); - } - - /** - * 修改测试树表 - */ - @SaCheckPermission("demo:tree:edit") - @Log(title = "测试树表", businessType = BusinessType.UPDATE) - @RepeatSubmit - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody TestTreeBo bo) { - return toAjax(testTreeService.updateByBo(bo)); - } - - /** - * 删除测试树表 - * - * @param ids 测试树ID串 - */ - @SaCheckPermission("demo:tree:remove") - @Log(title = "测试树表", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { - return toAjax(testTreeService.deleteWithValidByIds(Arrays.asList(ids), true)); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/WeSocketController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/WeSocketController.java deleted file mode 100644 index 699a5e6..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/WeSocketController.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.dromara.demo.controller; - -import org.dromara.common.core.domain.R; -import org.dromara.common.websocket.dto.WebSocketMessageDto; -import org.dromara.common.websocket.utils.WebSocketUtils; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * WebSocket 演示案例 - * - * @author zendwang - */ -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/websocket") -@Slf4j -public class WeSocketController { - - /** - * 发布消息 - * - * @param dto 发送内容 - */ - @GetMapping("/send") - public R send(WebSocketMessageDto dto) throws InterruptedException { - WebSocketUtils.publishMessage(dto); - return R.ok("操作成功"); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/package-info.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/package-info.java deleted file mode 100644 index 16c30f8..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package org.dromara.demo.controller; diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/BoundedQueueController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/BoundedQueueController.java deleted file mode 100644 index 30ec27f..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/BoundedQueueController.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.dromara.demo.controller.queue; - -import cn.dev33.satoken.annotation.SaIgnore; -import org.dromara.common.core.domain.R; -import org.dromara.common.redis.utils.QueueUtils; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.redisson.api.RBoundedBlockingQueue; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 有界队列 演示案例 - *

- * 轻量级队列 重量级数据量 请使用 MQ - *

- * 集群测试通过 同一个数据只会被消费一次 做好事务补偿 - * 集群测试流程 在其中一台发送数据 两端分别调用获取接口 一次获取一条 - * - * @author Lion Li - * @version 3.6.0 - */ -@Slf4j -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/queue/bounded") -public class BoundedQueueController { - - - /** - * 添加队列数据 - * - * @param queueName 队列名 - * @param capacity 容量 - */ - @GetMapping("/add") - public R add(String queueName, int capacity) { - // 用完了一定要销毁 否则会一直存在 - boolean b = QueueUtils.destroyBoundedQueue(queueName); - log.info("通道: {} , 删除: {}", queueName, b); - // 初始化设置一次即可 - if (QueueUtils.trySetBoundedQueueCapacity(queueName, capacity)) { - log.info("通道: {} , 设置容量: {}", queueName, capacity); - } else { - log.info("通道: {} , 设置容量失败", queueName); - return R.fail("操作失败"); - } - for (int i = 0; i < 11; i++) { - String data = "data-" + i; - boolean flag = QueueUtils.addBoundedQueueObject(queueName, data); - if (flag == false) { - log.info("通道: {} , 发送数据: {} 失败, 通道已满", queueName, data); - } else { - log.info("通道: {} , 发送数据: {}", queueName, data); - } - } - return R.ok("操作成功"); - } - - /** - * 删除队列数据 - * - * @param queueName 队列名 - */ - @GetMapping("/remove") - public R remove(String queueName) { - String data = "data-" + 5; - if (QueueUtils.removeBoundedQueueObject(queueName, data)) { - log.info("通道: {} , 删除数据: {}", queueName, data); - } else { - return R.fail("操作失败"); - } - return R.ok("操作成功"); - } - - /** - * 获取队列数据 - * - * @param queueName 队列名 - */ - @GetMapping("/get") - public R get(String queueName) { - String data; - do { - data = QueueUtils.getBoundedQueueObject(queueName); - log.info("通道: {} , 获取数据: {}", queueName, data); - } while (data != null); - return R.ok("操作成功"); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java deleted file mode 100644 index b6e51d3..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.dromara.demo.controller.queue; - -import cn.dev33.satoken.annotation.SaIgnore; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.domain.R; -import org.dromara.common.redis.utils.QueueUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; - -/** - * 延迟队列 演示案例 - *

- * 轻量级队列 重量级数据量 请使用 MQ - * 例如: 创建订单30分钟后过期处理 - *

- * 集群测试通过 同一个数据只会被消费一次 做好事务补偿 - * 集群测试流程 两台集群分别开启订阅 在其中一台发送数据 观察接收消息的规律 - * - * @author Lion Li - * @version 3.6.0 - */ -@SaIgnore -@Slf4j -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/queue/delayed") -public class DelayedQueueController { - - /** - * 订阅队列 - * - * @param queueName 队列名 - */ - @GetMapping("/subscribe") - public R subscribe(String queueName) { - log.info("通道: {} 监听中......", queueName); - // 项目初始化设置一次即可 - QueueUtils.subscribeBlockingQueue(queueName, (String orderNum) -> { - // 观察接收时间 - log.info("通道: {}, 收到数据: {}", queueName, orderNum); - return CompletableFuture.runAsync(() -> { - // 异步处理数据逻辑 不要在上方处理业务逻辑 - log.info("数据处理: {}", orderNum); - }); - }, true); - return R.ok("操作成功"); - } - - /** - * 添加队列数据 - * - * @param queueName 队列名 - * @param orderNum 订单号 - * @param time 延迟时间(秒) - */ - @GetMapping("/add") - public R add(String queueName, String orderNum, Long time) { - QueueUtils.addDelayedQueueObject(queueName, orderNum, time, TimeUnit.SECONDS); - // 观察发送时间 - log.info("通道: {} , 发送数据: {}", queueName, orderNum); - return R.ok("操作成功"); - } - - /** - * 删除队列数据 - * - * @param queueName 队列名 - * @param orderNum 订单号 - */ - @GetMapping("/remove") - public R remove(String queueName, String orderNum) { - if (QueueUtils.removeDelayedQueueObject(queueName, orderNum)) { - log.info("通道: {} , 删除数据: {}", queueName, orderNum); - } else { - return R.fail("操作失败"); - } - return R.ok("操作成功"); - } - - /** - * 销毁队列 - * - * @param queueName 队列名 - */ - @GetMapping("/destroy") - public R destroy(String queueName) { - // 用完了一定要销毁 否则会一直存在 - QueueUtils.destroyDelayedQueue(queueName); - return R.ok("操作成功"); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityDemo.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityDemo.java deleted file mode 100644 index e2449b5..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityDemo.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.dromara.demo.controller.queue; - -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * 实体类 注意不允许使用内部类 否则会找不到类 - * - * @author Lion Li - * @version 3.6.0 - */ -@Data -@NoArgsConstructor -public class PriorityDemo implements Comparable { - private String name; - private Integer orderNum; - - @Override - public int compareTo(PriorityDemo other) { - return Integer.compare(getOrderNum(), other.getOrderNum()); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityQueueController.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityQueueController.java deleted file mode 100644 index 02c7396..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityQueueController.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.dromara.demo.controller.queue; - -import cn.hutool.core.util.RandomUtil; -import org.dromara.common.core.domain.R; -import org.dromara.common.redis.utils.QueueUtils; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 优先队列 演示案例 - *

- * 轻量级队列 重量级数据量 请使用 MQ - *

- * 集群测试通过 同一个消息只会被消费一次 做好事务补偿 - * 集群测试流程 在其中一台发送数据 两端分别调用获取接口 一次获取一条 - * - * @author Lion Li - * @version 3.6.0 - */ -@Slf4j -@RequiredArgsConstructor -@RestController -@RequestMapping("/demo/queue/priority") -public class PriorityQueueController { - - /** - * 添加队列数据 - * - * @param queueName 队列名 - */ - @GetMapping("/add") - public R add(String queueName) { - // 用完了一定要销毁 否则会一直存在 - boolean b = QueueUtils.destroyPriorityQueue(queueName); - log.info("通道: {} , 删除: {}", queueName, b); - - for (int i = 0; i < 10; i++) { - int randomNum = RandomUtil.randomInt(10); - PriorityDemo data = new PriorityDemo(); - data.setName("data-" + i); - data.setOrderNum(randomNum); - if (QueueUtils.addPriorityQueueObject(queueName, data)) { - log.info("通道: {} , 发送数据: {}", queueName, data); - } else { - log.info("通道: {} , 发送数据: {}, 发送失败", queueName, data); - } - } - return R.ok("操作成功"); - } - - /** - * 删除队列数据 - * - * @param queueName 队列名 - * @param name 对象名 - * @param orderNum 排序号 - */ - @GetMapping("/remove") - public R remove(String queueName, String name, Integer orderNum) { - PriorityDemo data = new PriorityDemo(); - data.setName(name); - data.setOrderNum(orderNum); - if (QueueUtils.removePriorityQueueObject(queueName, data)) { - log.info("通道: {} , 删除数据: {}", queueName, data); - } else { - return R.fail("操作失败"); - } - return R.ok("操作成功"); - } - - /** - * 获取队列数据 - * - * @param queueName 队列名 - */ - @GetMapping("/get") - public R get(String queueName) { - PriorityDemo data; - do { - data = QueueUtils.getPriorityQueueObject(queueName); - log.info("通道: {} , 获取数据: {}", queueName, data); - } while (data != null); - return R.ok("操作成功"); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestDemo.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestDemo.java deleted file mode 100644 index d3af0c9..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestDemo.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.dromara.demo.domain; - -import com.baomidou.mybatisplus.annotation.*; -import org.dromara.common.tenant.core.TenantEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.io.Serial; - -/** - * 测试单表对象 test_demo - * - * @author Lion Li - * @date 2021-07-26 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("test_demo") -public class TestDemo extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id") - private Long id; - - /** - * 部门id - */ - private Long deptId; - - /** - * 用户id - */ - private Long userId; - - /** - * 排序号 - */ - @OrderBy(asc = false, sort = 1) - private Integer orderNum; - - /** - * key键 - */ - private String testKey; - - /** - * 值 - */ - private String value; - - /** - * 版本 - */ - @Version - private Long version; - - /** - * 删除标志 - */ - @TableLogic - private Long delFlag; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestDemoEncrypt.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestDemoEncrypt.java deleted file mode 100644 index bdcd596..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestDemoEncrypt.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.dromara.demo.domain; - -import com.baomidou.mybatisplus.annotation.TableName; -import org.dromara.common.encrypt.annotation.EncryptField; -import org.dromara.common.encrypt.enumd.AlgorithmType; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("test_demo") -public class TestDemoEncrypt extends TestDemo { - - /** - * key键 - */ - // @EncryptField(algorithm=AlgorithmType.SM2, privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgZSlOvw8FBiH+aFJWLYZP/VRjg9wjfRarTkGBZd/T3N+gCgYIKoEcz1UBgi2hRANCAAR5DGuQwJqkxnbCsP+iPSDoHWIF4RwcR5EsSvT8QPxO1wRkR2IhCkzvRb32x2CUgJFdvoqVqfApFDPZzShqzBwX", publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEeQxrkMCapMZ2wrD/oj0g6B1iBeEcHEeRLEr0/ED8TtcEZEdiIQpM70W99sdglICRXb6KlanwKRQz2c0oaswcFw==") - @EncryptField(algorithm = AlgorithmType.RSA, privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBANBBEeueWlXlkkj2+WY5l+IWe42d8b5K28g+G/CFKC/yYAEHtqGlCsBOrb+YBkG9mPzmuYA/n9k0NFIc8E8yY5vZQaroyFBrTTWEzG9RY2f7Y3svVyybs6jpXSUs4xff8abo7wL1Y/wUaeatTViamxYnyTvdTmLm3d+JjRij68rxAgMBAAECgYAB0TnhXraSopwIVRfmboea1b0upl+BUdTJcmci412UjrKr5aE695ZLPkXbFXijVu7HJlyyv94NVUdaMACV7Ku/S2RuNB70M7YJm8rAjHFC3/i2ZeIM60h1Ziy4QKv0XM3pRATlDCDNhC1WUrtQCQSgU8kcp6eUUppruOqDzcY04QJBAPm9+sBP9CwDRgy3e5+V8aZtJkwDstb0lVVV/KY890cydVxiCwvX3fqVnxKMlb+x0YtH0sb9v+71xvK2lGobaRECQQDVePU6r/cCEfpc+nkWF6osAH1f8Mux3rYv2DoBGvaPzV2BGfsLed4neRfCwWNCKvGPCdW+L0xMJg8+RwaoBUPhAkAT5kViqXxFPYWJYd1h2+rDXhMdH3ZSlm6HvDBDdrwlWinr0Iwcx3iSjPV93uHXwm118aUj4fg3LDJMCKxOwBxhAkByrQXfvwOMYygBprRBf/j0plazoWFrbd6lGR0f1uI5IfNnFRPdeFw1DEINZ2Hw+6zEUF44SqRMC+4IYJNc02dBAkBCgy7RvfyV/A7N6kKXxTHauY0v6XwSSvpeKtRJkbIcRWOdIYvaHO9L7cklj3vIEdwjSUp9K4VTBYYlmAz1xh03", publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQQRHrnlpV5ZJI9vlmOZfiFnuNnfG+StvIPhvwhSgv8mABB7ahpQrATq2/mAZBvZj85rmAP5/ZNDRSHPBPMmOb2UGq6MhQa001hMxvUWNn+2N7L1csm7Oo6V0lLOMX3/Gm6O8C9WP8FGnmrU1YmpsWJ8k73U5i5t3fiY0Yo+vK8QIDAQAB") - private String testKey; - - /** - * 值 - */ - // @EncryptField // 什么也不写走默认yml配置 - // @EncryptField(algorithm = AlgorithmType.SM4, password = "10rfylhtccpuyke5") - @EncryptField(algorithm = AlgorithmType.AES, password = "10rfylhtccpuyke5") - private String value; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestTree.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestTree.java deleted file mode 100644 index fd68253..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/TestTree.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.dromara.demo.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableLogic; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.Version; -import org.dromara.common.tenant.core.TenantEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.io.Serial; - -/** - * 测试树表对象 test_tree - * - * @author Lion Li - * @date 2021-07-26 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("test_tree") -public class TestTree extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id") - private Long id; - - /** - * 父ID - */ - private Long parentId; - - /** - * 部门id - */ - private Long deptId; - - /** - * 用户id - */ - private Long userId; - - /** - * 树节点名 - */ - private String treeName; - - /** - * 版本 - */ - @Version - private Long version; - - /** - * 删除标志 - */ - @TableLogic - private Long delFlag; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoBo.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoBo.java deleted file mode 100644 index 8134677..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoBo.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.dromara.demo.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.demo.domain.TestDemo; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; - -/** - * 测试单表业务对象 test_demo - * - * @author Lion Li - * @date 2021-07-26 - */ - -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = TestDemo.class, reverseConvertGenerate = false) -public class TestDemoBo extends BaseEntity { - - /** - * 主键 - */ - @NotNull(message = "主键不能为空", groups = {EditGroup.class}) - private Long id; - - /** - * 部门id - */ - @NotNull(message = "部门id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long deptId; - - /** - * 用户id - */ - @NotNull(message = "用户id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long userId; - - /** - * 排序号 - */ - @NotNull(message = "排序号不能为空", groups = {AddGroup.class, EditGroup.class}) - private Integer orderNum; - - /** - * key键 - */ - @NotBlank(message = "key键不能为空", groups = {AddGroup.class, EditGroup.class}) - private String testKey; - - /** - * 值 - */ - @NotBlank(message = "值不能为空", groups = {AddGroup.class, EditGroup.class}) - private String value; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoImportVo.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoImportVo.java deleted file mode 100644 index c066118..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoImportVo.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.dromara.demo.domain.bo; - -import com.alibaba.excel.annotation.ExcelProperty; -import lombok.Data; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; - -/** - * 测试单表业务对象 test_demo - * - * @author Lion Li - * @date 2021-07-26 - */ -@Data -public class TestDemoImportVo { - - /** - * 部门id - */ - @NotNull(message = "部门id不能为空") - @ExcelProperty(value = "部门id") - private Long deptId; - - /** - * 用户id - */ - @NotNull(message = "用户id不能为空") - @ExcelProperty(value = "用户id") - private Long userId; - - /** - * 排序号 - */ - @NotNull(message = "排序号不能为空") - @ExcelProperty(value = "排序号") - private Long orderNum; - - /** - * key键 - */ - @NotBlank(message = "key键不能为空") - @ExcelProperty(value = "key键") - private String testKey; - - /** - * 值 - */ - @NotBlank(message = "值不能为空") - @ExcelProperty(value = "值") - private String value; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestTreeBo.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestTreeBo.java deleted file mode 100644 index 1bbac0e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestTreeBo.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.dromara.demo.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.demo.domain.TestTree; -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 测试树表业务对象 test_tree - * - * @author Lion Li - * @date 2021-07-26 - */ - -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = TestTree.class, reverseConvertGenerate = false) -public class TestTreeBo extends BaseEntity { - - /** - * 主键 - */ - @NotNull(message = "主键不能为空", groups = {EditGroup.class}) - private Long id; - - /** - * 父ID - */ - private Long parentId; - - /** - * 部门id - */ - @NotNull(message = "部门id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long deptId; - - /** - * 用户id - */ - @NotNull(message = "用户id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long userId; - - /** - * 树节点名 - */ - @NotBlank(message = "树节点名不能为空", groups = {AddGroup.class, EditGroup.class}) - private String treeName; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/package-info.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/package-info.java deleted file mode 100644 index cb7d83f..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package org.dromara.demo.domain; diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/ExportDemoVo.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/ExportDemoVo.java deleted file mode 100644 index 95fa0d1..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/ExportDemoVo.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.dromara.demo.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.dromara.common.core.enums.UserStatus; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.annotation.ExcelEnumFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import org.dromara.common.excel.convert.ExcelEnumConvert; - -/** - * 带有下拉选的Excel导出 - * - * @author Emil.Zhang - */ -@Data -@ExcelIgnoreUnannotated -@AllArgsConstructor -@NoArgsConstructor -public class ExportDemoVo { - - private static final long serialVersionUID = 1L; - - /** - * 用户昵称 - */ - @ExcelProperty(value = "用户名", index = 0) - @NotEmpty(message = "用户名不能为空", groups = AddGroup.class) - private String nickName; - - /** - * 用户类型 - *

- * 使用ExcelEnumFormat注解需要进行下拉选的部分 - */ - @ExcelProperty(value = "用户类型", index = 1, converter = ExcelEnumConvert.class) - @ExcelEnumFormat(enumClass = UserStatus.class, textField = "info") - @NotEmpty(message = "用户类型不能为空", groups = AddGroup.class) - private String userStatus; - - /** - * 性别 - *

- * 使用ExcelDictFormat注解需要进行下拉选的部分 - */ - @ExcelProperty(value = "性别", index = 2, converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_user_sex") - @NotEmpty(message = "性别不能为空", groups = AddGroup.class) - private String gender; - - /** - * 手机号 - */ - @ExcelProperty(value = "手机号", index = 3) - @NotEmpty(message = "手机号不能为空", groups = AddGroup.class) - private String phoneNumber; - - /** - * Email - */ - @ExcelProperty(value = "Email", index = 4) - @NotEmpty(message = "Email不能为空", groups = AddGroup.class) - private String email; - - /** - * 省 - *

- * 级联下拉,仅判断是否选了 - */ - @ExcelProperty(value = "省", index = 5) - @NotNull(message = "省不能为空", groups = AddGroup.class) - private String province; - - /** - * 数据库中的省ID - *

- * 处理完毕后再判断是否市正确的值 - */ - @NotNull(message = "请勿手动输入", groups = EditGroup.class) - private Integer provinceId; - - /** - * 市 - *

- * 级联下拉 - */ - @ExcelProperty(value = "市", index = 6) - @NotNull(message = "市不能为空", groups = AddGroup.class) - private String city; - - /** - * 数据库中的市ID - */ - @NotNull(message = "请勿手动输入", groups = EditGroup.class) - private Integer cityId; - - /** - * 县 - *

- * 级联下拉 - */ - @ExcelProperty(value = "县", index = 7) - @NotNull(message = "县不能为空", groups = AddGroup.class) - private String area; - - /** - * 数据库中的县ID - */ - @NotNull(message = "请勿手动输入", groups = EditGroup.class) - private Integer areaId; -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java deleted file mode 100644 index 016c2f7..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.dromara.demo.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import org.dromara.common.translation.annotation.Translation; -import org.dromara.common.translation.constant.TransConstant; -import org.dromara.demo.domain.TestDemo; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; - - -/** - * 测试单表视图对象 test_demo - * - * @author Lion Li - * @date 2021-07-26 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = TestDemo.class) -public class TestDemoVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @ExcelProperty(value = "主键") - private Long id; - - /** - * 部门id - */ - @ExcelProperty(value = "部门id") - private Long deptId; - - /** - * 用户id - */ - @ExcelProperty(value = "用户id") - private Long userId; - - /** - * 排序号 - */ - @ExcelProperty(value = "排序号") - private Integer orderNum; - - /** - * key键 - */ - @ExcelProperty(value = "key键") - private String testKey; - - /** - * 值 - */ - @ExcelProperty(value = "值") - private String value; - - /** - * 创建时间 - */ - @ExcelProperty(value = "创建时间") - private Date createTime; - - /** - * 创建人 - */ - @ExcelProperty(value = "创建人") - private Long createBy; - - /** - * 创建人账号 - */ - @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy") - @ExcelProperty(value = "创建人账号") - private String createByName; - - /** - * 更新时间 - */ - @ExcelProperty(value = "更新时间") - private Date updateTime; - - /** - * 更新人 - */ - @ExcelProperty(value = "更新人") - private Long updateBy; - - /** - * 更新人账号 - */ - @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "updateBy") - @ExcelProperty(value = "更新人账号") - private String updateByName; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestTreeVo.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestTreeVo.java deleted file mode 100644 index 58b4bdb..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestTreeVo.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.dromara.demo.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import org.dromara.demo.domain.TestTree; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; - - -/** - * 测试树表视图对象 test_tree - * - * @author Lion Li - * @date 2021-07-26 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = TestTree.class) -public class TestTreeVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - private Long id; - - /** - * 父id - */ - @ExcelProperty(value = "父id") - private Long parentId; - - /** - * 部门id - */ - @ExcelProperty(value = "部门id") - private Long deptId; - - /** - * 用户id - */ - @ExcelProperty(value = "用户id") - private Long userId; - - /** - * 树节点名 - */ - @ExcelProperty(value = "树节点名") - private String treeName; - - /** - * 创建时间 - */ - @ExcelProperty(value = "创建时间") - private Date createTime; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/listener/ExportDemoListener.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/listener/ExportDemoListener.java deleted file mode 100644 index 7bd4e1e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/listener/ExportDemoListener.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.dromara.demo.listener; - -import cn.hutool.core.util.NumberUtil; -import com.alibaba.excel.context.AnalysisContext; -import org.dromara.common.core.utils.ValidatorUtils; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.excel.core.DefaultExcelListener; -import org.dromara.common.excel.core.DropDownOptions; -import org.dromara.demo.domain.vo.ExportDemoVo; - -import java.util.List; - -/** - * Excel带下拉框的解析处理器 - * - * @author Emil.Zhang - */ -public class ExportDemoListener extends DefaultExcelListener { - - public ExportDemoListener() { - // 显示使用构造函数,否则将导致空指针 - super(true); - } - - @Override - public void invoke(ExportDemoVo data, AnalysisContext context) { - // 先校验必填 - ValidatorUtils.validate(data, AddGroup.class); - - // 处理级联下拉的部分 - String province = data.getProvince(); - String city = data.getCity(); - String area = data.getArea(); - // 本行用户选择的省 - List thisRowSelectedProvinceOption = DropDownOptions.analyzeOptionValue(province); - if (thisRowSelectedProvinceOption.size() == 2) { - String provinceIdStr = thisRowSelectedProvinceOption.get(1); - if (NumberUtil.isNumber(provinceIdStr)) { - // 严格要求数据的话可以在这里做与数据库相关的判断 - // 例如判断省信息是否在数据库中存在等,建议结合RedisCache做缓存10s,减少数据库调用 - data.setProvinceId(Integer.parseInt(provinceIdStr)); - } - } - // 本行用户选择的市 - List thisRowSelectedCityOption = DropDownOptions.analyzeOptionValue(city); - if (thisRowSelectedCityOption.size() == 2) { - String cityIdStr = thisRowSelectedCityOption.get(1); - if (NumberUtil.isNumber(cityIdStr)) { - data.setCityId(Integer.parseInt(cityIdStr)); - } - } - // 本行用户选择的县 - List thisRowSelectedAreaOption = DropDownOptions.analyzeOptionValue(area); - if (thisRowSelectedAreaOption.size() == 2) { - String areaIdStr = thisRowSelectedAreaOption.get(1); - if (NumberUtil.isNumber(areaIdStr)) { - data.setAreaId(Integer.parseInt(areaIdStr)); - } - } - - // 处理完毕以后判断是否符合规则 - ValidatorUtils.validate(data, EditGroup.class); - - // 添加到处理结果中 - getExcelResult().getList().add(data); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoEncryptMapper.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoEncryptMapper.java deleted file mode 100644 index 601f97a..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoEncryptMapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.dromara.demo.mapper; - -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.dromara.demo.domain.TestDemoEncrypt; - -/** - * 测试加密功能 - * - * @author Lion Li - */ -public interface TestDemoEncryptMapper extends BaseMapperPlus { - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java deleted file mode 100644 index 57efdc7..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.dromara.demo.mapper; - -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.apache.ibatis.annotations.Param; -import org.dromara.common.mybatis.annotation.DataColumn; -import org.dromara.common.mybatis.annotation.DataPermission; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.dromara.demo.domain.TestDemo; -import org.dromara.demo.domain.vo.TestDemoVo; - -import java.io.Serializable; -import java.util.Collection; -import java.util.List; - -/** - * 测试单表Mapper接口 - * - * @author Lion Li - * @date 2021-07-26 - */ -public interface TestDemoMapper extends BaseMapperPlus { - - @DataPermission({ - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") - }) - Page customPageList(@Param("page") Page page, @Param("ew") Wrapper wrapper); - - @Override - @DataPermission({ - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") - }) - List selectList(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); - - @Override - @DataPermission({ - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") - }) - List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper); - - @Override - @DataPermission(value = { - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") - }, joinStr = "AND") - List selectByIds(@Param(Constants.COLL) Collection idList); - - @Override - @DataPermission({ - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") - }) - int updateById(@Param(Constants.ENTITY) TestDemo entity); - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestTreeMapper.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestTreeMapper.java deleted file mode 100644 index e5f4c44..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestTreeMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.dromara.demo.mapper; - -import org.dromara.common.mybatis.annotation.DataColumn; -import org.dromara.common.mybatis.annotation.DataPermission; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.dromara.demo.domain.TestTree; -import org.dromara.demo.domain.vo.TestTreeVo; - -/** - * 测试树表Mapper接口 - * - * @author Lion Li - * @date 2021-07-26 - */ -@DataPermission({ - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") -}) -public interface TestTreeMapper extends BaseMapperPlus { - -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/package-info.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/package-info.java deleted file mode 100644 index ff1c4df..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package org.dromara.demo.mapper; diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IExportExcelService.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IExportExcelService.java deleted file mode 100644 index 4dfa5ef..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IExportExcelService.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.dromara.demo.service; - -import jakarta.servlet.http.HttpServletResponse; - -/** - * 导出下拉框Excel示例 - * - * @author Emil.Zhang - */ -public interface IExportExcelService { - - /** - * 导出下拉框 - * - * @param response / - */ - void exportWithOptions(HttpServletResponse response); -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/ITestDemoService.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/ITestDemoService.java deleted file mode 100644 index bca4192..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/ITestDemoService.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.dromara.demo.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.demo.domain.TestDemo; -import org.dromara.demo.domain.bo.TestDemoBo; -import org.dromara.demo.domain.vo.TestDemoVo; - -import java.util.Collection; -import java.util.List; - -/** - * 测试单表Service接口 - * - * @author Lion Li - * @date 2021-07-26 - */ -public interface ITestDemoService { - - /** - * 查询单个 - * - * @return - */ - TestDemoVo queryById(Long id); - - /** - * 查询列表 - */ - TableDataInfo queryPageList(TestDemoBo bo, PageQuery pageQuery); - - /** - * 自定义分页查询 - */ - TableDataInfo customPageList(TestDemoBo bo, PageQuery pageQuery); - - /** - * 查询列表 - */ - List queryList(TestDemoBo bo); - - /** - * 根据新增业务对象插入测试单表 - * - * @param bo 测试单表新增业务对象 - * @return - */ - Boolean insertByBo(TestDemoBo bo); - - /** - * 根据编辑业务对象修改测试单表 - * - * @param bo 测试单表编辑业务对象 - * @return - */ - Boolean updateByBo(TestDemoBo bo); - - /** - * 校验并删除数据 - * - * @param ids 主键集合 - * @param isValid 是否校验,true-删除前校验,false-不校验 - * @return - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - /** - * 批量保存 - */ - Boolean saveBatch(List list); -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/ITestTreeService.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/ITestTreeService.java deleted file mode 100644 index 9155201..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/ITestTreeService.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.dromara.demo.service; - -import org.dromara.demo.domain.bo.TestTreeBo; -import org.dromara.demo.domain.vo.TestTreeVo; - -import java.util.Collection; -import java.util.List; - -/** - * 测试树表Service接口 - * - * @author Lion Li - * @date 2021-07-26 - */ -public interface ITestTreeService { - /** - * 查询单个 - * - * @return - */ - TestTreeVo queryById(Long id); - - /** - * 查询列表 - */ - List queryList(TestTreeBo bo); - - /** - * 根据新增业务对象插入测试树表 - * - * @param bo 测试树表新增业务对象 - * @return - */ - Boolean insertByBo(TestTreeBo bo); - - /** - * 根据编辑业务对象修改测试树表 - * - * @param bo 测试树表编辑业务对象 - * @return - */ - Boolean updateByBo(TestTreeBo bo); - - /** - * 校验并删除数据 - * - * @param ids 主键集合 - * @param isValid 是否校验,true-删除前校验,false-不校验 - * @return - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ExportExcelServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ExportExcelServiceImpl.java deleted file mode 100644 index 0240e02..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ExportExcelServiceImpl.java +++ /dev/null @@ -1,222 +0,0 @@ -package org.dromara.demo.service.impl; - -import cn.hutool.core.util.StrUtil; -import jakarta.servlet.http.HttpServletResponse; -import lombok.Data; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.enums.UserStatus; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.excel.core.DropDownOptions; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.demo.domain.vo.ExportDemoVo; -import org.dromara.demo.service.IExportExcelService; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 导出下拉框Excel示例 - * - * @author Emil.Zhang - */ -@Service -@RequiredArgsConstructor -public class ExportExcelServiceImpl implements IExportExcelService { - - @Override - public void exportWithOptions(HttpServletResponse response) { - // 创建表格数据,业务中一般通过数据库查询 - List excelDataList = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - // 模拟数据库中的一条数据 - ExportDemoVo everyRowData = new ExportDemoVo(); - everyRowData.setNickName("用户-" + i); - everyRowData.setUserStatus(UserStatus.OK.getCode()); - everyRowData.setGender("1"); - everyRowData.setPhoneNumber(String.format("175%08d", i)); - everyRowData.setEmail(String.format("175%08d", i) + "@163.com"); - everyRowData.setProvinceId(i); - everyRowData.setCityId(i); - everyRowData.setAreaId(i); - excelDataList.add(everyRowData); - } - - // 通过@ExcelIgnoreUnannotated配合@ExcelProperty合理显示需要的列 - // 并通过@DropDown注解指定下拉值,或者通过创建ExcelOptions来指定下拉框 - // 使用ExcelOptions时建议指定列index,防止出现下拉列解析不对齐 - - // 首先从数据库中查询下拉框内的可选项 - // 这里模拟查询结果 - List provinceList = getProvinceList(), - cityList = getCityList(provinceList), - areaList = getAreaList(cityList); - int provinceIndex = 5, cityIndex = 6, areaIndex = 7; - - DropDownOptions provinceToCity = DropDownOptions.buildLinkedOptions( - provinceList, - provinceIndex, - cityList, - cityIndex, - DemoCityData::getId, - DemoCityData::getPid, - everyOptions -> DropDownOptions.createOptionValue( - everyOptions.getName(), - everyOptions.getId() - ) - ); - - DropDownOptions cityToArea = DropDownOptions.buildLinkedOptions( - cityList, - cityIndex, - areaList, - areaIndex, - DemoCityData::getId, - DemoCityData::getPid, - everyOptions -> DropDownOptions.createOptionValue( - everyOptions.getName(), - everyOptions.getId() - ) - ); - - // 把所有的下拉框存储 - List options = new ArrayList<>(); - options.add(provinceToCity); - options.add(cityToArea); - - // 到此为止所有的下拉框可选项已全部配置完毕 - - // 接下来需要将Excel中的展示数据转换为对应的下拉选 - List outList = StreamUtils.toList(excelDataList, everyRowData -> { - // 只需要处理没有使用@ExcelDictFormat注解的下拉框 - // 一般来说,可以直接在数据库查询即查询出省市县信息,这里通过模拟操作赋值 - everyRowData.setProvince(buildOptions(provinceList, everyRowData.getProvinceId())); - everyRowData.setCity(buildOptions(cityList, everyRowData.getCityId())); - everyRowData.setArea(buildOptions(areaList, everyRowData.getAreaId())); - return everyRowData; - }); - - ExcelUtil.exportExcel(outList, "下拉框示例", ExportDemoVo.class, response, options); - } - - private String buildOptions(List cityDataList, Integer id) { - Map> groupByIdMap = - cityDataList.stream().collect(Collectors.groupingBy(DemoCityData::getId)); - if (groupByIdMap.containsKey(id)) { - DemoCityData demoCityData = groupByIdMap.get(id).get(0); - return DropDownOptions.createOptionValue(demoCityData.getName(), demoCityData.getId()); - } else { - return StrUtil.EMPTY; - } - } - - /** - * 模拟查询数据库操作 - * - * @return / - */ - private List getProvinceList() { - List provinceList = new ArrayList<>(); - - // 实际业务中一般采用数据库读取的形式,这里直接拼接创建 - provinceList.add(new DemoCityData(0, null, "安徽省")); - provinceList.add(new DemoCityData(1, null, "江苏省")); - - return provinceList; - } - - /** - * 模拟查找数据库操作,需要连带查询出省的数据 - * - * @param provinceList 模拟的父省数据 - * @return / - */ - private List getCityList(List provinceList) { - List cityList = new ArrayList<>(); - - // 实际业务中一般采用数据库读取的形式,这里直接拼接创建 - cityList.add(new DemoCityData(0, 0, "合肥市")); - cityList.add(new DemoCityData(1, 0, "芜湖市")); - cityList.add(new DemoCityData(2, 1, "南京市")); - cityList.add(new DemoCityData(3, 1, "无锡市")); - cityList.add(new DemoCityData(4, 1, "徐州市")); - - selectParentData(provinceList, cityList); - - return cityList; - } - - /** - * 模拟查找数据库操作,需要连带查询出市的数据 - * - * @param cityList 模拟的父市数据 - * @return / - */ - private List getAreaList(List cityList) { - List areaList = new ArrayList<>(); - - // 实际业务中一般采用数据库读取的形式,这里直接拼接创建 - areaList.add(new DemoCityData(0, 0, "瑶海区")); - areaList.add(new DemoCityData(1, 0, "庐江区")); - areaList.add(new DemoCityData(2, 1, "南宁县")); - areaList.add(new DemoCityData(3, 1, "镜湖区")); - areaList.add(new DemoCityData(4, 2, "玄武区")); - areaList.add(new DemoCityData(5, 2, "秦淮区")); - areaList.add(new DemoCityData(6, 3, "宜兴市")); - areaList.add(new DemoCityData(7, 3, "新吴区")); - areaList.add(new DemoCityData(8, 4, "鼓楼区")); - areaList.add(new DemoCityData(9, 4, "丰县")); - - selectParentData(cityList, areaList); - - return areaList; - } - - /** - * 模拟数据库的查询父数据操作 - * - * @param parentList / - * @param sonList / - */ - private void selectParentData(List parentList, List sonList) { - Map> parentGroupByIdMap = - parentList.stream().collect(Collectors.groupingBy(DemoCityData::getId)); - - sonList.forEach(everySon -> { - if (parentGroupByIdMap.containsKey(everySon.getPid())) { - everySon.setPData(parentGroupByIdMap.get(everySon.getPid()).get(0)); - } - }); - } - - /** - * 模拟的数据库省市县 - */ - @Data - private static class DemoCityData { - /** - * 数据库id字段 - */ - private Integer id; - /** - * 数据库pid字段 - */ - private Integer pid; - /** - * 数据库name字段 - */ - private String name; - /** - * MyBatisPlus连带查询父数据 - */ - private DemoCityData pData; - - public DemoCityData(Integer id, Integer pid, String name) { - this.id = id; - this.pid = pid; - this.name = name; - } - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java deleted file mode 100644 index ced141e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.dromara.demo.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.demo.domain.TestDemo; -import org.dromara.demo.domain.bo.TestDemoBo; -import org.dromara.demo.domain.vo.TestDemoVo; -import org.dromara.demo.mapper.TestDemoMapper; -import org.dromara.demo.service.ITestDemoService; -import org.springframework.stereotype.Service; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * 测试单表Service业务层处理 - * - * @author Lion Li - * @date 2021-07-26 - */ -@RequiredArgsConstructor -@Service -public class TestDemoServiceImpl implements ITestDemoService { - - private final TestDemoMapper baseMapper; - - @Override - public TestDemoVo queryById(Long id) { - return baseMapper.selectVoById(id); - } - - @Override - public TableDataInfo queryPageList(TestDemoBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 自定义分页查询 - */ - @Override - public TableDataInfo customPageList(TestDemoBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.customPageList(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - @Override - public List queryList(TestDemoBo bo) { - return baseMapper.selectVoList(buildQueryWrapper(bo)); - } - - private LambdaQueryWrapper buildQueryWrapper(TestDemoBo bo) { - Map params = bo.getParams(); - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getTestKey()), TestDemo::getTestKey, bo.getTestKey()); - lqw.eq(StringUtils.isNotBlank(bo.getValue()), TestDemo::getValue, bo.getValue()); - lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, - TestDemo::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); - lqw.orderByAsc(TestDemo::getId); - return lqw; - } - - @Override - public Boolean insertByBo(TestDemoBo bo) { - TestDemo add = MapstructUtils.convert(bo, TestDemo.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - @Override - public Boolean updateByBo(TestDemoBo bo) { - TestDemo update = MapstructUtils.convert(bo, TestDemo.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - * - * @param entity 实体类数据 - */ - private void validEntityBeforeSave(TestDemo entity) { - //TODO 做一些数据校验,如唯一约束 - } - - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - // 做一些业务上的校验,判断是否需要校验 - List list = baseMapper.selectByIds(ids); - if (list.size() != ids.size()) { - throw new ServiceException("您没有删除权限!"); - } - } - return baseMapper.deleteByIds(ids) > 0; - } - - @Override - public Boolean saveBatch(List list) { - return baseMapper.insertBatch(list); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestTreeServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestTreeServiceImpl.java deleted file mode 100644 index e4e548b..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestTreeServiceImpl.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.dromara.demo.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.demo.domain.TestTree; -import org.dromara.demo.domain.bo.TestTreeBo; -import org.dromara.demo.domain.vo.TestTreeVo; -import org.dromara.demo.mapper.TestTreeMapper; -import org.dromara.demo.service.ITestTreeService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * 测试树表Service业务层处理 - * - * @author Lion Li - * @date 2021-07-26 - */ -// @DS("slave") // 切换从库查询 -@RequiredArgsConstructor -@Service -public class TestTreeServiceImpl implements ITestTreeService { - - private final TestTreeMapper baseMapper; - - @Override - public TestTreeVo queryById(Long id) { - return baseMapper.selectVoById(id); - } - - // @DS("slave") // 切换从库查询 - @Override - public List queryList(TestTreeBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(TestTreeBo bo) { - Map params = bo.getParams(); - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getTreeName()), TestTree::getTreeName, bo.getTreeName()); - lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, - TestTree::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); - lqw.orderByAsc(TestTree::getId); - return lqw; - } - - @Override - public Boolean insertByBo(TestTreeBo bo) { - TestTree add = MapstructUtils.convert(bo, TestTree.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - @Override - public Boolean updateByBo(TestTreeBo bo) { - TestTree update = MapstructUtils.convert(bo, TestTree.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - * - * @param entity 实体类数据 - */ - private void validEntityBeforeSave(TestTree entity) { - //TODO 做一些数据校验,如唯一约束 - } - - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 - } - return baseMapper.deleteByIds(ids) > 0; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/package-info.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/package-info.java deleted file mode 100644 index 7011984..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package org.dromara.demo.service.impl; diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/package-info.java b/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/package-info.java deleted file mode 100644 index 16727ff..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package org.dromara.demo.service; diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/excel/单列表.xlsx b/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/excel/单列表.xlsx deleted file mode 100644 index 0f7347d652c06ae29eca9fa6cd1055ec6ae6c6e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10787 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 GzyAY;y@`_m diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/demo/TestDemoMapper.xml b/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/demo/TestDemoMapper.xml deleted file mode 100644 index dbf89a3..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/demo/TestDemoMapper.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/demo/TestTreeMapper.xml b/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/demo/TestTreeMapper.xml deleted file mode 100644 index d7975ec..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/demo/TestTreeMapper.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/package-info.md b/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/package-info.md deleted file mode 100644 index c938b1e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/package-info.md +++ /dev/null @@ -1,3 +0,0 @@ -java包使用 `.` 分割 resource 目录使用 `/` 分割 -
-此文件目的 防止文件夹粘连找不到 `xml` 文件 \ No newline at end of file diff --git a/im-admin/ruoyi-modules/ruoyi-job/pom.xml b/im-admin/ruoyi-modules/ruoyi-job/pom.xml deleted file mode 100644 index 2431a1c..0000000 --- a/im-admin/ruoyi-modules/ruoyi-job/pom.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - org.dromara - ruoyi-modules - ${revision} - - 4.0.0 - jar - ruoyi-job - - - 任务调度 - - - - - - - org.dromara - ruoyi-common-json - - - - org.dromara - ruoyi-common-job - - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/package-info.java b/im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/package-info.java deleted file mode 100644 index 2f118b0..0000000 --- a/im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package org.dromara.job; diff --git a/im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestAnnoJobExecutor.java b/im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestAnnoJobExecutor.java deleted file mode 100644 index 5bea9da..0000000 --- a/im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestAnnoJobExecutor.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.dromara.job.snailjob; - -import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; -import com.aizuda.snailjob.client.job.core.dto.JobArgs; -import com.aizuda.snailjob.client.model.ExecuteResult; -import com.aizuda.snailjob.common.core.util.JsonUtil; -import com.aizuda.snailjob.common.log.SnailJobLog; -import org.springframework.stereotype.Component; - -/** - * @author opensnail - * @date 2024-05-17 - */ -@Component -@JobExecutor(name = "testJobExecutor") -public class TestAnnoJobExecutor { - - public ExecuteResult jobExecute(JobArgs jobArgs) { - SnailJobLog.LOCAL.info("testJobExecutor. jobArgs:{}", JsonUtil.toJsonString(jobArgs)); - SnailJobLog.REMOTE.info("testJobExecutor. jobArgs:{}", JsonUtil.toJsonString(jobArgs)); - return ExecuteResult.success("测试成功"); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestClassJobExecutor.java b/im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestClassJobExecutor.java deleted file mode 100644 index 6f7c21f..0000000 --- a/im-admin/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestClassJobExecutor.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.dromara.job.snailjob; - -import com.aizuda.snailjob.client.job.core.dto.JobArgs; -import com.aizuda.snailjob.client.job.core.executor.AbstractJobExecutor; -import com.aizuda.snailjob.client.model.ExecuteResult; -import org.springframework.stereotype.Component; - -/** - * @author opensnail - * @date 2024-05-17 - */ -@Component -public class TestClassJobExecutor extends AbstractJobExecutor { - - @Override - protected ExecuteResult doJobExecute(JobArgs jobArgs) { - return ExecuteResult.success("TestJobExecutor测试成功"); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/README.md b/im-admin/ruoyi-modules/ruoyi-workflow/README.md deleted file mode 100644 index 59096b1..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# 工作流说明 - -工作流目前在未成熟阶段 后续仍会经历重构 甚至重写(生产使用前请慎重考虑后续是否要更新维护) \ No newline at end of file diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/pom.xml b/im-admin/ruoyi-modules/ruoyi-workflow/pom.xml deleted file mode 100644 index e55839e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/pom.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - 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.17 - - - xalan - xalan - - - - - - org.dromara - ruoyi-common-websocket - - - - org.dromara - ruoyi-common-mail - - - - org.dromara - ruoyi-common-sms - - - - org.dromara - ruoyi-common-mybatis - - - org.dromara - ruoyi-common-web - - - org.dromara - ruoyi-common-log - - - org.dromara - ruoyi-common-idempotent - - - org.dromara - ruoyi-common-excel - - - org.dromara - ruoyi-common-translation - - - org.dromara - ruoyi-common-tenant - - - org.dromara - ruoyi-common-security - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java deleted file mode 100644 index c3fcafa..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java +++ /dev/null @@ -1,137 +0,0 @@ -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 BUSINESS_INSTANCE_DTO = "businessInstanceDTO"; - - /** - * 流程定义配置 - */ - String WF_DEFINITION_CONFIG_VO = "wfDefinitionConfigVo"; - - /** - * 节点配置 - */ - String WF_NODE_CONFIG_VO = "wfNodeConfigVo"; - - /** - * 流程发起人 - */ - String INITIATOR = "initiator"; - - /** - * 流程实例id - */ - String PROCESS_INSTANCE_ID = "processInstanceId"; - - /** - * 业务id - */ - String BUSINESS_KEY = "businessKey"; - - /** - * 流程定义id - */ - String PROCESS_DEFINITION_ID = "processDefinitionId"; - - /** - * 开启跳过表达式变量 - */ - String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED"; - - /** - * 模型标识key命名规范正则表达式 - */ - String MODEL_KEY_PATTERN = "^[a-zA-Z][a-zA-Z0-9_]{0,254}$"; - - /** - * 用户任务 - */ - String USER_TASK = "userTask"; - - /** - * 会签 - */ - String MULTI_INSTANCE = "multiInstance"; - - /** - * 是 - */ - String TRUE = "0"; - - /** - * 否 - */ - String FALSE = "1"; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/FormTypeEnum.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/FormTypeEnum.java deleted file mode 100644 index 083ab7b..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/FormTypeEnum.java +++ /dev/null @@ -1,54 +0,0 @@ -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 FormTypeEnum { - /** - * 自定义表单 - */ - STATIC("static", "自定义表单"), - /** - * 动态表单 - */ - DYNAMIC("dynamic", "动态表单"); - - /** - * 类型 - */ - private final String type; - - /** - * 描述 - */ - private final String desc; - - /** - * 表单类型 - * - * @param formType 表单类型 - */ - public static String findByType(String formType) { - if (StringUtils.isBlank(formType)) { - return StrUtil.EMPTY; - } - - return Arrays.stream(FormTypeEnum.values()) - .filter(statusEnum -> statusEnum.getType().equals(formType)) - .findFirst() - .map(FormTypeEnum::getDesc) - .orElse(StrUtil.EMPTY); - } -} - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java deleted file mode 100644 index a282958..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.dromara.workflow.common.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 消息类型枚举 - * - * @author may - */ -@Getter -@AllArgsConstructor -public enum MessageTypeEnum { - /** - * 站内信 - */ - SYSTEM_MESSAGE("1", "站内信"), - /** - * 邮箱 - */ - EMAIL_MESSAGE("2", "邮箱"), - /** - * 短信 - */ - SMS_MESSAGE("3", "短信"); - - private final String code; - - private final String desc; - - private final static Map MESSAGE_TYPE_ENUM_MAP = new ConcurrentHashMap<>(MessageTypeEnum.values().length); - - static { - for (MessageTypeEnum messageType : MessageTypeEnum.values()) { - MESSAGE_TYPE_ENUM_MAP.put(messageType.code, messageType); - } - } - - /** - * 根据消息类型 code 获取 MessageTypeEnum - * @param code 消息类型code - * @return MessageTypeEnum - */ - public static MessageTypeEnum getByCode(String code) { - return MESSAGE_TYPE_ENUM_MAP.get(code); - } -} - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java deleted file mode 100644 index 7b2f55c..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java +++ /dev/null @@ -1,94 +0,0 @@ -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", "减签"), - /** - * 超时 - */ - TIMEOUT("timeout", "超时"); - - /** - * 状态 - */ - 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/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java deleted file mode 100644 index 842d3d6..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java +++ /dev/null @@ -1,148 +0,0 @@ -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.PageQuery; -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.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Arrays; -import java.util.List; - -/** - * 模型管理 控制层 - * - * @author may - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/workflow/model") -public class ActModelController extends BaseController { - - @Autowired(required = false) - private RepositoryService repositoryService; - private final IActModelService actModelService; - - - /** - * 分页查询模型 - * - * @param modelBo 模型参数 - */ - @GetMapping("/list") - public TableDataInfo page(ModelBo modelBo, PageQuery pageQuery) { - return actModelService.page(modelBo, pageQuery); - } - - /** - * 新增模型 - * - * @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 modelIds 模型id - * @param response 相应 - */ - @GetMapping("/export/zip/{modelIds}") - public void exportZip(@NotEmpty(message = "模型id不能为空") @PathVariable List modelIds, - HttpServletResponse response) { - actModelService.exportZip(modelIds, response); - } - - /** - * 复制模型 - * - * @param modelBo 模型数据 - */ - @PostMapping("/copyModel") - public R copyModel(@RequestBody ModelBo modelBo) { - return toAjax(actModelService.copyModel(modelBo)); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java deleted file mode 100644 index 5198bd1..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.dromara.workflow.controller; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -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.PageQuery; -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 bo 参数 - */ - @GetMapping("/list") - public TableDataInfo page(ProcessDefinitionBo bo, PageQuery pageQuery) { - return actProcessDefinitionService.page(bo, pageQuery); - } - - /** - * 查询历史流程定义列表 - * - * @param key 流程定义key - */ - @GetMapping("/getListByKey/{key}") - public R> getListByKey(@NotEmpty(message = "流程定义key不能为空") @PathVariable String key) { - return R.ok("操作成功", actProcessDefinitionService.getListByKey(key)); - } - - /** - * 查看流程定义图片 - * - * @param processDefinitionId 流程定义id - */ - @GetMapping("/definitionImage/{processDefinitionId}") - public R definitionImage(@PathVariable String processDefinitionId) { - return R.ok("操作成功", actProcessDefinitionService.definitionImage(processDefinitionId)); - } - - /** - * 查看流程定义xml文件 - * - * @param processDefinitionId 流程定义id - */ - @GetMapping("/definitionXml/{processDefinitionId}") - public R> definitionXml(@NotBlank(message = "流程定义id不能为空") @PathVariable String processDefinitionId) { - Map map = new HashMap<>(); - String xmlStr = actProcessDefinitionService.definitionXml(processDefinitionId); - map.put("xml", Arrays.asList(xmlStr.split("\n"))); - map.put("xmlStr", xmlStr); - return R.ok(map); - } - - /** - * 删除流程定义 - * - * @param deploymentIds 部署id - * @param processDefinitionIds 流程定义id - */ - @Log(title = "流程定义管理", businessType = BusinessType.DELETE) - @DeleteMapping("/{deploymentIds}/{processDefinitionIds}") - public R deleteDeployment(@NotNull(message = "流程部署id不能为空") @PathVariable List deploymentIds, - @NotNull(message = "流程定义id不能为空") @PathVariable List processDefinitionIds) { - return toAjax(actProcessDefinitionService.deleteDeployment(deploymentIds, processDefinitionIds)); - } - - /** - * 激活或者挂起流程定义 - * - * @param processDefinitionId 流程定义id - */ - @Log(title = "流程定义管理", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/updateDefinitionState/{processDefinitionId}") - public R updateDefinitionState(@NotBlank(message = "流程定义id不能为空") @PathVariable String processDefinitionId) { - return toAjax(actProcessDefinitionService.updateDefinitionState(processDefinitionId)); - } - - /** - * 迁移流程定义 - * - * @param currentProcessDefinitionId 当前流程定义id - * @param fromProcessDefinitionId 需要迁移到的流程定义id - */ - @Log(title = "流程定义管理", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/migrationDefinition/{currentProcessDefinitionId}/{fromProcessDefinitionId}") - public R migrationDefinition(@NotBlank(message = "当前流程定义id") @PathVariable String currentProcessDefinitionId, - @NotBlank(message = "需要迁移到的流程定义id") @PathVariable String fromProcessDefinitionId) { - return toAjax(actProcessDefinitionService.migrationDefinition(currentProcessDefinitionId, fromProcessDefinitionId)); - } - - /** - * 流程定义转换为模型 - * - * @param processDefinitionId 流程定义id - */ - @Log(title = "流程定义管理", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/convertToModel/{processDefinitionId}") - public R convertToModel(@NotEmpty(message = "流程定义id不能为空") @PathVariable String processDefinitionId) { - return toAjax(actProcessDefinitionService.convertToModel(processDefinitionId)); - } - - /** - * 通过zip或xml部署流程定义 - * - * @param file 文件 - * @param categoryCode 分类 - */ - @Log(title = "流程定义管理", businessType = BusinessType.INSERT) - @PostMapping("/deployByFile") - public void deployByFile(@RequestParam("file") MultipartFile file, @RequestParam("categoryCode") String categoryCode) { - actProcessDefinitionService.deployByFile(file, categoryCode); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java deleted file mode 100644 index 931b9f5..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.dromara.workflow.controller; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -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.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.web.core.BaseController; -import org.dromara.workflow.domain.bo.ProcessInstanceBo; -import org.dromara.workflow.domain.bo.ProcessInvalidBo; -import org.dromara.workflow.domain.bo.TaskUrgingBo; -import org.dromara.workflow.domain.vo.ActHistoryInfoVo; -import org.dromara.workflow.domain.vo.ProcessInstanceVo; -import org.dromara.workflow.service.IActProcessInstanceService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -/** - * 流程实例管理 控制层 - * - * @author may - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/workflow/processInstance") -public class ActProcessInstanceController extends BaseController { - - private final IActProcessInstanceService actProcessInstanceService; - - /** - * 分页查询正在运行的流程实例 - * - * @param bo 参数 - */ - @GetMapping("/getPageByRunning") - public TableDataInfo getPageByRunning(ProcessInstanceBo bo, PageQuery pageQuery) { - return actProcessInstanceService.getPageByRunning(bo, pageQuery); - } - - /** - * 分页查询已结束的流程实例 - * - * @param bo 参数 - */ - @GetMapping("/getPageByFinish") - public TableDataInfo getPageByFinish(ProcessInstanceBo bo, PageQuery pageQuery) { - return actProcessInstanceService.getPageByFinish(bo, pageQuery); - } - - /** - * 通过业务id获取历史流程图 - * - * @param businessKey 业务id - */ - @GetMapping("/getHistoryImage/{businessKey}") - public R getHistoryImage(@NotBlank(message = "业务id不能为空") @PathVariable String businessKey) { - return R.ok("操作成功", actProcessInstanceService.getHistoryImage(businessKey)); - } - - /** - * 通过业务id获取历史流程图运行中,历史等节点 - * - * @param businessKey 业务id - */ - @GetMapping("/getHistoryList/{businessKey}") - public R> getHistoryList(@NotBlank(message = "业务id不能为空") @PathVariable String businessKey) { - return R.ok("操作成功", actProcessInstanceService.getHistoryList(businessKey)); - } - - /** - * 获取审批记录 - * - * @param businessKey 业务id - */ - @GetMapping("/getHistoryRecord/{businessKey}") - public R> getHistoryRecord(@NotBlank(message = "业务id不能为空") @PathVariable String businessKey) { - return R.ok(actProcessInstanceService.getHistoryRecord(businessKey)); - } - - /** - * 作废流程实例,不会删除历史记录(删除运行中的实例) - * - * @param processInvalidBo 参数 - */ - @Log(title = "流程实例管理", businessType = BusinessType.DELETE) - @RepeatSubmit() - @PostMapping("/deleteRunInstance") - public R deleteRunInstance(@Validated(AddGroup.class) @RequestBody ProcessInvalidBo processInvalidBo) { - return toAjax(actProcessInstanceService.deleteRunInstance(processInvalidBo)); - } - - /** - * 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息 - * - * @param businessKeys 业务id - */ - @Log(title = "流程实例管理", businessType = BusinessType.DELETE) - @RepeatSubmit() - @DeleteMapping("/deleteRunAndHisInstance/{businessKeys}") - public R deleteRunAndHisInstance(@NotNull(message = "业务id不能为空") @PathVariable String[] businessKeys) { - return toAjax(actProcessInstanceService.deleteRunAndHisInstance(Arrays.asList(businessKeys))); - } - - /** - * 已完成的实例 删除程实例,删除历史记录,删除业务与流程关联信息 - * - * @param businessKeys 业务id - */ - @Log(title = "流程实例管理", businessType = BusinessType.DELETE) - @RepeatSubmit() - @DeleteMapping("/deleteFinishAndHisInstance/{businessKeys}") - public R deleteFinishAndHisInstance(@NotNull(message = "业务id不能为空") @PathVariable String[] businessKeys) { - return toAjax(actProcessInstanceService.deleteFinishAndHisInstance(Arrays.asList(businessKeys))); - } - - /** - * 撤销流程申请 - * - * @param businessKey 业务id - */ - @Log(title = "流程实例管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/cancelProcessApply/{businessKey}") - public R cancelProcessApply(@NotBlank(message = "业务id不能为空") @PathVariable String businessKey) { - return toAjax(actProcessInstanceService.cancelProcessApply(businessKey)); - } - - /** - * 分页查询当前登录人单据 - * - * @param bo 参数 - */ - @GetMapping("/getPageByCurrent") - public TableDataInfo getPageByCurrent(ProcessInstanceBo bo, PageQuery pageQuery) { - return actProcessInstanceService.getPageByCurrent(bo, pageQuery); - } - - /** - * 任务催办(给当前任务办理人发送站内信,邮件,短信等) - * - * @param taskUrgingBo 任务催办 - */ - @Log(title = "流程实例管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/taskUrging") - public R taskUrging(@RequestBody TaskUrgingBo taskUrgingBo) { - return toAjax(actProcessInstanceService.taskUrging(taskUrgingBo)); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java deleted file mode 100644 index 25724b6..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java +++ /dev/null @@ -1,295 +0,0 @@ -package org.dromara.workflow.controller; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.convert.Convert; -import jakarta.validation.constraints.NotBlank; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -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.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.common.web.core.BaseController; -import org.dromara.workflow.domain.WfTaskBackNode; -import org.dromara.workflow.domain.bo.*; -import org.dromara.workflow.domain.vo.TaskVo; -import org.dromara.workflow.domain.vo.VariableVo; -import org.dromara.workflow.service.IActTaskService; -import org.dromara.workflow.service.IWfTaskBackNodeService; -import org.dromara.workflow.utils.QueryUtils; -import org.flowable.engine.TaskService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * 任务管理 控制层 - * - * @author may - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/workflow/task") -public class ActTaskController extends BaseController { - - @Autowired(required = false) - private TaskService taskService; - private final IActTaskService actTaskService; - private final IWfTaskBackNodeService wfTaskBackNodeService; - - - /** - * 启动任务 - * - * @param startProcessBo 启动流程参数 - */ - @Log(title = "任务管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/startWorkFlow") - public R> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) { - Map map = actTaskService.startWorkFlow(startProcessBo); - return R.ok("提交成功", map); - } - - /** - * 办理任务 - * - * @param completeTaskBo 办理任务参数 - */ - @Log(title = "任务管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/completeTask") - public R completeTask(@Validated(AddGroup.class) @RequestBody CompleteTaskBo completeTaskBo) { - return toAjax(actTaskService.completeTask(completeTaskBo)); - } - - /** - * 查询当前用户的待办任务 - * - * @param taskBo 参数 - */ - @GetMapping("/getPageByTaskWait") - public TableDataInfo getPageByTaskWait(TaskBo taskBo, PageQuery pageQuery) { - return actTaskService.getPageByTaskWait(taskBo, pageQuery); - } - - /** - * 查询当前租户所有待办任务 - * - * @param taskBo 参数 - */ - @GetMapping("/getPageByAllTaskWait") - public TableDataInfo getPageByAllTaskWait(TaskBo taskBo, PageQuery pageQuery) { - return actTaskService.getPageByAllTaskWait(taskBo, pageQuery); - } - - /** - * 查询当前用户的已办任务 - * - * @param taskBo 参数 - */ - @GetMapping("/getPageByTaskFinish") - public TableDataInfo getPageByTaskFinish(TaskBo taskBo, PageQuery pageQuery) { - return actTaskService.getPageByTaskFinish(taskBo, pageQuery); - } - - /** - * 查询当前用户的抄送 - * - * @param taskBo 参数 - */ - @GetMapping("/getPageByTaskCopy") - public TableDataInfo getPageByTaskCopy(TaskBo taskBo, PageQuery pageQuery) { - return actTaskService.getPageByTaskCopy(taskBo, pageQuery); - } - - /** - * 查询当前租户所有已办任务 - * - * @param taskBo 参数 - */ - @GetMapping("/getPageByAllTaskFinish") - public TableDataInfo getPageByAllTaskFinish(TaskBo taskBo, PageQuery pageQuery) { - return actTaskService.getPageByAllTaskFinish(taskBo, pageQuery); - } - - /** - * 签收(拾取)任务 - * - * @param taskId 任务id - */ - @Log(title = "任务管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/claim/{taskId}") - public R claimTask(@NotBlank(message = "任务id不能为空") @PathVariable String taskId) { - try { - taskService.claim(taskId, Convert.toStr(LoginHelper.getUserId())); - return R.ok(); - } catch (Exception e) { - e.printStackTrace(); - return R.fail("签收任务失败:" + e.getMessage()); - } - } - - /** - * 归还(拾取的)任务 - * - * @param taskId 任务id - */ - @Log(title = "任务管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/returnTask/{taskId}") - public R returnTask(@NotBlank(message = "任务id不能为空") @PathVariable String taskId) { - try { - taskService.setAssignee(taskId, null); - return R.ok(); - } catch (Exception e) { - e.printStackTrace(); - return R.fail("归还任务失败:" + e.getMessage()); - } - } - - /** - * 委派任务 - * - * @param delegateBo 参数 - */ - @Log(title = "任务管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/delegateTask") - public R delegateTask(@Validated({AddGroup.class}) @RequestBody DelegateBo delegateBo) { - return toAjax(actTaskService.delegateTask(delegateBo)); - } - - /** - * 终止任务 - * - * @param terminationBo 参数 - */ - @Log(title = "任务管理", businessType = BusinessType.DELETE) - @RepeatSubmit() - @PostMapping("/terminationTask") - public R terminationTask(@RequestBody TerminationBo terminationBo) { - return toAjax(actTaskService.terminationTask(terminationBo)); - } - - /** - * 转办任务 - * - * @param transmitBo 参数 - */ - @Log(title = "任务管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/transferTask") - public R transferTask(@Validated({AddGroup.class}) @RequestBody TransmitBo transmitBo) { - return toAjax(actTaskService.transferTask(transmitBo)); - } - - /** - * 会签任务加签 - * - * @param addMultiBo 参数 - */ - @Log(title = "任务管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/addMultiInstanceExecution") - public R addMultiInstanceExecution(@Validated({AddGroup.class}) @RequestBody AddMultiBo addMultiBo) { - return toAjax(actTaskService.addMultiInstanceExecution(addMultiBo)); - } - - /** - * 会签任务减签 - * - * @param deleteMultiBo 参数 - */ - @Log(title = "任务管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/deleteMultiInstanceExecution") - public R deleteMultiInstanceExecution(@Validated({AddGroup.class}) @RequestBody DeleteMultiBo deleteMultiBo) { - return toAjax(actTaskService.deleteMultiInstanceExecution(deleteMultiBo)); - } - - /** - * 驳回审批 - * - * @param backProcessBo 参数 - */ - @Log(title = "任务管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/backProcess") - public R backProcess(@Validated({AddGroup.class}) @RequestBody BackProcessBo backProcessBo) { - return R.ok("操作成功", actTaskService.backProcess(backProcessBo)); - } - - /** - * 获取当前任务 - * - * @param taskId 任务id - */ - @GetMapping("/getTaskById/{taskId}") - public R getTaskById(@PathVariable String taskId) { - return R.ok(QueryUtils.getTask(taskId)); - } - - - /** - * 修改任务办理人 - * - * @param taskIds 任务id - * @param userId 办理人id - */ - @Log(title = "任务管理", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping("/updateAssignee/{taskIds}/{userId}") - public R updateAssignee(@PathVariable String[] taskIds, @PathVariable String userId) { - return toAjax(actTaskService.updateAssignee(taskIds, userId)); - } - - /** - * 查询流程变量 - * - * @param taskId 任务id - */ - @GetMapping("/getInstanceVariable/{taskId}") - public R> getProcessInstVariable(@PathVariable String taskId) { - return R.ok(actTaskService.getInstanceVariable(taskId)); - } - - /** - * 获取可驳回得任务节点 - * - * @param processInstanceId 流程实例id - */ - @GetMapping("/getTaskNodeList/{processInstanceId}") - public R> getNodeList(@PathVariable String processInstanceId) { - return R.ok(CollUtil.reverse(wfTaskBackNodeService.getListByInstanceId(processInstanceId))); - } - - /** - * 查询工作流任务用户选择加签人员 - * - * @param taskId 任务id - */ - @GetMapping("/getTaskUserIdsByAddMultiInstance/{taskId}") - public R getTaskUserIdsByAddMultiInstance(@PathVariable String taskId) { - return R.ok("操作成功", actTaskService.getTaskUserIdsByAddMultiInstance(taskId)); - } - - /** - * 查询工作流选择减签人员 - * - * @param taskId 任务id - */ - @GetMapping("/getListByDeleteMultiInstance/{taskId}") - public R> getListByDeleteMultiInstance(@PathVariable String taskId) { - return R.ok(actTaskService.getListByDeleteMultiInstance(taskId)); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java deleted file mode 100644 index e1c246f..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.dromara.workflow.controller; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -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.excel.utils.ExcelUtil; -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.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.web.core.BaseController; -import org.dromara.workflow.domain.bo.TestLeaveBo; -import org.dromara.workflow.domain.vo.TestLeaveVo; -import org.dromara.workflow.service.ITestLeaveService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 请假 - * - * @author may - * @date 2023-07-21 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/workflow/leave") -public class TestLeaveController extends BaseController { - - private final ITestLeaveService testLeaveService; - - /** - * 查询请假列表 - */ - @SaCheckPermission("workflow:leave:list") - @GetMapping("/list") - public TableDataInfo list(TestLeaveBo bo, PageQuery pageQuery) { - return testLeaveService.queryPageList(bo, pageQuery); - } - - /** - * 导出请假列表 - */ - @SaCheckPermission("workflow:leave:export") - @Log(title = "请假", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(TestLeaveBo bo, HttpServletResponse response) { - List list = testLeaveService.queryList(bo); - ExcelUtil.exportExcel(list, "请假", TestLeaveVo.class, response); - } - - /** - * 获取请假详细信息 - * - * @param id 主键 - */ - @SaCheckPermission("workflow:leave:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { - return R.ok(testLeaveService.queryById(id)); - } - - /** - * 新增请假 - */ - @SaCheckPermission("workflow:leave:add") - @Log(title = "请假", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody TestLeaveBo bo) { - return R.ok(testLeaveService.insertByBo(bo)); - } - - /** - * 修改请假 - */ - @SaCheckPermission("workflow:leave:edit") - @Log(title = "请假", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody TestLeaveBo bo) { - return R.ok(testLeaveService.updateByBo(bo)); - } - - /** - * 删除请假 - * - * @param ids 主键串 - */ - @SaCheckPermission("workflow:leave:remove") - @Log(title = "请假", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { - return toAjax(testLeaveService.deleteWithValidByIds(List.of(ids))); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfCategoryController.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfCategoryController.java deleted file mode 100644 index 8dced89..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfCategoryController.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.dromara.workflow.controller; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -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.excel.utils.ExcelUtil; -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.web.core.BaseController; -import org.dromara.workflow.domain.bo.WfCategoryBo; -import org.dromara.workflow.domain.vo.WfCategoryVo; -import org.dromara.workflow.service.IWfCategoryService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 流程分类 - * - * @author may - * @date 2023-06-28 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/workflow/category") -public class WfCategoryController extends BaseController { - - private final IWfCategoryService wfCategoryService; - - /** - * 查询流程分类列表 - */ - @SaCheckPermission("workflow:category:list") - @GetMapping("/list") - public R> list(WfCategoryBo bo) { - List list = wfCategoryService.queryList(bo); - return R.ok(list); - - } - - /** - * 导出流程分类列表 - */ - @SaCheckPermission("workflow:category:export") - @Log(title = "流程分类", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(WfCategoryBo bo, HttpServletResponse response) { - List list = wfCategoryService.queryList(bo); - ExcelUtil.exportExcel(list, "流程分类", WfCategoryVo.class, response); - } - - /** - * 获取流程分类详细信息 - * - * @param id 主键 - */ - @SaCheckPermission("workflow:category:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { - return R.ok(wfCategoryService.queryById(id)); - } - - /** - * 新增流程分类 - */ - @SaCheckPermission("workflow:category:add") - @Log(title = "流程分类", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody WfCategoryBo bo) { - return toAjax(wfCategoryService.insertByBo(bo)); - } - - /** - * 修改流程分类 - */ - @SaCheckPermission("workflow:category:edit") - @Log(title = "流程分类", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody WfCategoryBo bo) { - return toAjax(wfCategoryService.updateByBo(bo)); - } - - /** - * 删除流程分类 - * - * @param ids 主键串 - */ - @SaCheckPermission("workflow:category:remove") - @Log(title = "流程分类", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { - return toAjax(wfCategoryService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java deleted file mode 100644 index 176aba2..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.dromara.workflow.controller; - -import java.util.List; - -import lombok.RequiredArgsConstructor; -import jakarta.validation.constraints.*; -import org.dromara.workflow.domain.bo.WfDefinitionConfigBo; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; -import org.dromara.workflow.service.IWfDefinitionConfigService; - -/** - * 流程定义配置 - * - * @author may - * @date 2024-03-18 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/workflow/definitionConfig") -public class WfDefinitionConfigController extends BaseController { - - private final IWfDefinitionConfigService wfDefinitionConfigService; - - - /** - * 获取流程定义配置详细信息 - * - * @param definitionId 主键 - */ - @GetMapping("/getByDefId/{definitionId}") - public R getByDefId(@NotBlank(message = "流程定义ID不能为空") - @PathVariable String definitionId) { - return R.ok(wfDefinitionConfigService.getByDefId(definitionId)); - } - - /** - * 新增流程定义配置 - */ - @Log(title = "流程定义配置", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/saveOrUpdate") - public R saveOrUpdate(@Validated(AddGroup.class) @RequestBody WfDefinitionConfigBo bo) { - return toAjax(wfDefinitionConfigService.saveOrUpdate(bo)); - } - - /** - * 删除流程定义配置 - * - * @param ids 主键串 - */ - @Log(title = "流程定义配置", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { - return toAjax(wfDefinitionConfigService.deleteByIds(List.of(ids))); - } - - /** - * 查询流程定义配置排除当前查询的流程定义 - * - * @param tableName 表名 - * @param definitionId 流程定义id - */ - @GetMapping("/getByTableNameNotDefId/{tableName}/{definitionId}") - public R> getByTableNameNotDefId(@NotBlank(message = "表名不能为空") @PathVariable String tableName, - @NotBlank(message = "流程定义ID不能为空") @PathVariable String definitionId) { - return R.ok(wfDefinitionConfigService.getByTableNameNotDefId(tableName, definitionId)); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormManageController.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormManageController.java deleted file mode 100644 index 198e233..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormManageController.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.dromara.workflow.controller; - -import java.util.List; - -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.mybatis.core.page.PageQuery; -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.log.enums.BusinessType; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.workflow.domain.vo.WfFormManageVo; -import org.dromara.workflow.domain.bo.WfFormManageBo; -import org.dromara.workflow.service.IWfFormManageService; -import org.dromara.common.mybatis.core.page.TableDataInfo; - -/** - * 表单管理 - * - * @author may - * @date 2024-03-29 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/workflow/formManage") -public class WfFormManageController extends BaseController { - - private final IWfFormManageService wfFormManageService; - - /** - * 查询表单管理列表 - */ - @SaCheckPermission("workflow:formManage:list") - @GetMapping("/list") - public TableDataInfo list(WfFormManageBo bo, PageQuery pageQuery) { - return wfFormManageService.queryPageList(bo, pageQuery); - } - - /** - * 查询表单管理列表 - */ - @SaCheckPermission("workflow:formManage:list") - @GetMapping("/list/selectList") - public R> selectList() { - return R.ok(wfFormManageService.selectList()); - } - - /** - * 导出表单管理列表 - */ - @SaCheckPermission("workflow:formManage:export") - @Log(title = "表单管理", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(WfFormManageBo bo, HttpServletResponse response) { - List list = wfFormManageService.queryList(bo); - ExcelUtil.exportExcel(list, "表单管理", WfFormManageVo.class, response); - } - - /** - * 获取表单管理详细信息 - * - * @param id 主键 - */ - @SaCheckPermission("workflow:formManage:query") - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { - return R.ok(wfFormManageService.queryById(id)); - } - - /** - * 新增表单管理 - */ - @SaCheckPermission("workflow:formManage:add") - @Log(title = "表单管理", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody WfFormManageBo bo) { - return toAjax(wfFormManageService.insertByBo(bo)); - } - - /** - * 修改表单管理 - */ - @SaCheckPermission("workflow:formManage:edit") - @Log(title = "表单管理", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody WfFormManageBo bo) { - return toAjax(wfFormManageService.updateByBo(bo)); - } - - /** - * 删除表单管理 - * - * @param ids 主键串 - */ - @SaCheckPermission("workflow:formManage:remove") - @Log(title = "表单管理", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { - return toAjax(wfFormManageService.deleteByIds(List.of(ids))); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiProcinst.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiProcinst.java deleted file mode 100644 index e87fb92..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiProcinst.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.dromara.workflow.domain; - -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; - -/** - * 流程实例对象 act_hi_procinst - * - * @author may - * @date 2023-07-22 - */ -@Data -@TableName("act_hi_procinst") -public class ActHiProcinst implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * - */ - @TableId(value = "ID_") - private String id; - - /** - * - */ - @TableField(value = "REV_") - private Long rev; - - /** - * - */ - @TableField(value = "PROC_INST_ID_") - private String procInstId; - - /** - * - */ - @TableField(value = "BUSINESS_KEY_") - private String businessKey; - - /** - * - */ - @TableField(value = "PROC_DEF_ID_") - private String procDefId; - - /** - * - */ - @TableField(value = "START_TIME_") - private Date startTime; - - /** - * - */ - @TableField(value = "END_TIME_") - private Date endTime; - - /** - * - */ - @TableField(value = "DURATION_") - private Long duration; - - /** - * - */ - @TableField(value = "START_USER_ID_") - private String startUserId; - - /** - * - */ - @TableField(value = "START_ACT_ID_") - private String startActId; - - /** - * - */ - @TableField(value = "END_ACT_ID_") - private String endActId; - - /** - * - */ - @TableField(value = "SUPER_PROCESS_INSTANCE_ID_") - private String superProcessInstanceId; - - /** - * - */ - @TableField(value = "DELETE_REASON_") - private String deleteReason; - - /** - * - */ - @TableField(value = "TENANT_ID_") - private String tenantId; - - /** - * - */ - @TableField(value = "NAME_") - private String name; - - /** - * - */ - @TableField(value = "CALLBACK_ID_") - private String callbackId; - - /** - * - */ - @TableField(value = "CALLBACK_TYPE_") - private String callbackType; - - /** - * - */ - @TableField(value = "REFERENCE_ID_") - private String referenceId; - - /** - * - */ - @TableField(value = "REFERENCE_TYPE_") - private String referenceType; - - /** - * - */ - @TableField(value = "PROPAGATED_STAGE_INST_ID_") - private String propagatedStageInstId; - - /** - * - */ - @TableField(value = "BUSINESS_STATUS_") - private String businessStatus; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiTaskinst.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiTaskinst.java deleted file mode 100644 index abc17b5..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiTaskinst.java +++ /dev/null @@ -1,193 +0,0 @@ -package org.dromara.workflow.domain; - -import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -import java.io.Serial; - -/** - * 流程历史任务对象 act_hi_taskinst - * - * @author may - * @date 2024-03-02 - */ -@Data -@TableName("act_hi_taskinst") -public class ActHiTaskinst implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * - */ - @TableId(value = "ID_") - private String id; - - /** - * 版本 - */ - @TableField(value = "REV_") - private Long rev; - - /** - * 流程定义id - */ - @TableField(value = "PROC_DEF_ID_") - private String procDefId; - - /** - * - */ - @TableField(value = "TASK_DEF_ID_") - private String taskDefId; - - /** - * 任务节点id - */ - @TableField(value = "TASK_DEF_KEY_") - private String taskDefKey; - - /** - * 流程实例id - */ - @TableField(value = "PROC_INST_ID_") - private String procInstId; - - /** - * 流程执行id - */ - @TableField(value = "EXECUTION_ID") - private String executionId; - - /** - * - */ - @TableField(value = "SCOPE_ID_") - private String scopeId; - - /** - * - */ - @TableField(value = "SUB_SCOPE_ID_") - private String subScopeId; - - /** - * 先用当前字段标识抄送类型 - */ - @TableField(value = "SCOPE_TYPE_") - private String scopeType; - - /** - * - */ - @TableField(value = "SCOPE_DEFINITION_ID_") - private String scopeDefinitionId; - - /** - * - */ - @TableField(value = "PROPAGATED_STAGE_INST_ID_") - private String propagatedStageInstId; - - /** - * 任务名称 - */ - @TableField(value = "NAME_") - private String name; - - /** - * 父级id - */ - @TableField(value = "PARENT_TASK_ID_") - private String parentTaskId; - - /** - * 描述 - */ - @TableField(value = "DESCRIPTION_") - private String description; - - /** - * 办理人 - */ - @TableField(value = "OWNER_") - private String owner; - - /** - * 办理人 - */ - @TableField(value = "ASSIGNEE_") - private String assignee; - - /** - * 开始事件 - */ - @TableField(value = "START_TIME_") - private Date startTime; - - /** - * 认领时间 - */ - @TableField(value = "CLAIM_TIME_") - private Date claimTime; - - /** - * 结束时间 - */ - @TableField(value = "END_TIME_") - private Date endTime; - - /** - * 持续时间 - */ - @TableField(value = "DURATION_") - private Long duration; - - /** - * 删除原因 - */ - @TableField(value = "DELETE_REASON_") - private String deleteReason; - - /** - * 优先级 - */ - @TableField(value = "PRIORITY_") - private Long priority; - - /** - * 到期时间 - */ - @TableField(value = "DUE_DATE_") - private Date dueDate; - - /** - * - */ - @TableField(value = "FORM_KEY_") - private String formKey; - - /** - * 分类 - */ - @TableField(value = "CATEGORY_") - private String category; - - /** - * 最后修改时间 - */ - @TableField(value = "LAST_UPDATED_TIME_") - private Date lastUpdatedTime; - - /** - * 租户id - */ - @TableField(value = "TENANT_ID_") - private String tenantId; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/TestLeave.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/TestLeave.java deleted file mode 100644 index 7d42a9b..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/TestLeave.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.dromara.workflow.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.util.Date; - -/** - * 请假对象 test_leave - * - * @author may - * @date 2023-07-21 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("test_leave") -public class TestLeave extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id") - private Long id; - - /** - * 请假类型 - */ - private String leaveType; - - /** - * 开始时间 - */ - private Date startDate; - - /** - * 结束时间 - */ - private Date endDate; - - /** - * 请假天数 - */ - private Integer leaveDays; - - /** - * 请假原因 - */ - private String remark; - - /** - * 状态 - */ - private String status; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfCategory.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfCategory.java deleted file mode 100644 index 94a7cf5..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfCategory.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.dromara.workflow.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.tenant.core.TenantEntity; - -import java.io.Serial; - -/** - * 流程分类对象 wf_category - * - * @author may - * @date 2023-06-27 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("wf_category") -public class WfCategory extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id") - private Long id; - - /** - * 分类名称 - */ - private String categoryName; - - /** - * 分类编码 - */ - private String categoryCode; - - /** - * 父级id - */ - private Long parentId; - - /** - * 排序 - */ - private Long sortNum; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java deleted file mode 100644 index 11dcaa0..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.dromara.workflow.domain; - -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.io.Serial; - -/** - * 流程定义配置对象 wf_definition_config - * - * @author may - * @date 2024-03-18 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("wf_definition_config") -public class WfDefinitionConfig extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id") - private Long id; - - /** - * 表名 - */ - private String tableName; - - /** - * 流程定义ID - */ - private String definitionId; - - /** - * 流程KEY - */ - private String processKey; - - /** - * 流程版本 - */ - private Integer version; - - /** - * 备注 - */ - private String remark; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormManage.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormManage.java deleted file mode 100644 index 47f0d7a..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormManage.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.dromara.workflow.domain; - -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.io.Serial; - -/** - * 表单管理对象 wf_form_manage - * - * @author may - * @date 2024-03-29 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("wf_form_manage") -public class WfFormManage extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id") - private Long id; - - /** - * 表单名称 - */ - private String formName; - - /** - * 表单类型 - */ - private String formType; - - /** - * 路由地址/表单ID - */ - private String router; - - /** - * 备注 - */ - private String remark; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfNodeConfig.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfNodeConfig.java deleted file mode 100644 index 999425f..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfNodeConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.dromara.workflow.domain; - -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.io.Serial; - -/** - * 节点配置对象 wf_node_config - * - * @author may - * @date 2024-03-30 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("wf_node_config") -public class WfNodeConfig extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id") - private Long id; - - /** - * 表单id - */ - private Long formId; - - /** - * 表单类型 - */ - private String formType; - - /** - * 节点名称 - */ - private String nodeName; - - /** - * 节点id - */ - private String nodeId; - - /** - * 流程定义id - */ - private String definitionId; - - /** - * 是否为申请人节点 (0是 1否) - */ - private String applyUserTask; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfTaskBackNode.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfTaskBackNode.java deleted file mode 100644 index 6f59727..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfTaskBackNode.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.dromara.workflow.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.tenant.core.TenantEntity; - -import java.io.Serial; - -/** - * 节点驳回记录 wf_task_back_node - * - * @author may - * @date 2024-03-13 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("wf_task_back_node") -public class WfTaskBackNode extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id") - private Long id; - - /** - * 实例id - */ - private String instanceId; - - /** - * 节点id - */ - private String nodeId; - - /** - * 节点名称 - */ - private String nodeName; - - /** - * 排序 - */ - private Integer orderNo; - - /** - * 节点类型 - */ - private String taskType; - - /** - * 办理人 - */ - private String assignee; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/AddMultiBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/AddMultiBo.java deleted file mode 100644 index 320ec64..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/AddMultiBo.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotEmpty; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; - -import java.io.Serial; -import java.io.Serializable; -import java.util.List; - -/** - * 加签参数请求 - * - * @author may - */ -@Data -public class AddMultiBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 任务ID - */ - @NotBlank(message = "任务ID不能为空", groups = AddGroup.class) - private String taskId; - - /** - * 加签人员id - */ - @NotEmpty(message = "加签人员不能为空", groups = AddGroup.class) - private List assignees; - - /** - * 加签人员名称 - */ - @NotEmpty(message = "加签人员不能为空", groups = AddGroup.class) - private List assigneeNames; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java deleted file mode 100644 index d0f4369..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import jakarta.validation.constraints.NotBlank; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; - -import java.io.Serial; -import java.io.Serializable; -import java.util.List; - - -/** - * 驳回参数请求 - * - * @author may - */ -@Data -public class BackProcessBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 任务ID - */ - @NotBlank(message = "任务ID不能为空", groups = AddGroup.class) - private String taskId; - - /** - * 消息类型 - */ - private List messageType; - - /** - * 驳回的节点id(目前未使用,直接驳回到申请人) - */ - @NotBlank(message = "驳回的节点不能为空", groups = AddGroup.class) - private String targetActivityId; - - /** - * 办理意见 - */ - private String message; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java deleted file mode 100644 index 0623905..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import jakarta.validation.constraints.NotBlank; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.workflow.domain.vo.WfCopy; - -import java.io.Serial; -import java.io.Serializable; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -/** - * 办理任务请求对象 - * - * @author may - */ -@Data -public class CompleteTaskBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 任务id - */ - @NotBlank(message = "任务id不能为空", groups = {AddGroup.class}) - private String taskId; - - /** - * 附件id - */ - private String fileId; - - /** - * 抄送人员 - */ - private List wfCopyList; - - /** - * 消息类型 - */ - private List messageType; - - /** - * 办理意见 - */ - private String message; - - /** - * 流程变量 - */ - private Map variables; - - public Map getVariables() { - if (variables == null) { - return new HashMap<>(16); - } - variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue())); - return variables; - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/DelegateBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/DelegateBo.java deleted file mode 100644 index a6846a6..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/DelegateBo.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import jakarta.validation.constraints.NotBlank; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 委派任务请求对象 - * - * @author may - */ -@Data -public class DelegateBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 委派人id - */ - @NotBlank(message = "委派人id不能为空", groups = {AddGroup.class}) - private String userId; - - /** - * 委派人名称 - */ - @NotBlank(message = "委派人名称不能为空", groups = {AddGroup.class}) - private String nickName; - - /** - * 任务id - */ - @NotBlank(message = "任务id不能为空", groups = {AddGroup.class}) - private String taskId; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/DeleteMultiBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/DeleteMultiBo.java deleted file mode 100644 index e533167..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/DeleteMultiBo.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotEmpty; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; - -import java.io.Serial; -import java.io.Serializable; -import java.util.List; - -/** - * 减签参数请求 - * - * @author may - */ -@Data -public class DeleteMultiBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 任务ID - */ - @NotBlank(message = "任务ID不能为空", groups = AddGroup.class) - private String taskId; - - /** - * 减签人员 - */ - @NotEmpty(message = "减签人员不能为空", groups = AddGroup.class) - private List taskIds; - - /** - * 执行id - */ - @NotEmpty(message = "执行id不能为空", groups = AddGroup.class) - private List executionIds; - - /** - * 人员id - */ - @NotEmpty(message = "减签人员id不能为空", groups = AddGroup.class) - private List assigneeIds; - - /** - * 人员名称 - */ - @NotEmpty(message = "减签人员不能为空", groups = AddGroup.class) - private List assigneeNames; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java deleted file mode 100644 index efe9acd..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Pattern; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.workflow.common.constant.FlowConstant; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 模型请求对象 - * - * @author may - */ -@Data -public class ModelBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 模型id - */ - @NotBlank(message = "模型ID不能为空", groups = {EditGroup.class}) - private String id; - - /** - * 模型名称 - */ - @NotBlank(message = "模型名称不能为空", groups = {AddGroup.class}) - private String name; - - /** - * 模型标识key - */ - @NotBlank(message = "模型标识key不能为空", groups = {AddGroup.class}) - @Pattern(regexp = FlowConstant.MODEL_KEY_PATTERN, message = "模型标识key只能字符或者下划线开头", groups = {AddGroup.class}) - private String key; - - /** - * 模型分类 - */ - @NotBlank(message = "模型分类不能为空", groups = {AddGroup.class}) - private String categoryCode; - - /** - * 模型XML - */ - @NotBlank(message = "模型XML不能为空", groups = {AddGroup.class}) - private String xml; - - /** - * 模型SVG图片 - */ - @NotBlank(message = "模型SVG不能为空", groups = {EditGroup.class}) - private String svg; - - /** - * 备注 - */ - private String description; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessDefinitionBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessDefinitionBo.java deleted file mode 100644 index 2025932..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessDefinitionBo.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 流程定义请求对象 - * - * @author may - */ -@Data -public class ProcessDefinitionBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 流程定义名称key - */ - private String key; - - /** - * 流程定义名称 - */ - private String name; - - /** - * 模型分类 - */ - private String categoryCode; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInstanceBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInstanceBo.java deleted file mode 100644 index 2833b3e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInstanceBo.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 流程实例请求对象 - * - * @author may - */ -@Data -public class ProcessInstanceBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 流程名称 - */ - private String name; - - /** - * 流程key - */ - private String key; - - /** - * 任务发起人 - */ - private String startUserId; - - /** - * 业务id - */ - private String businessKey; - - /** - * 模型分类 - */ - private String categoryCode; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInvalidBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInvalidBo.java deleted file mode 100644 index 41e51c2..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInvalidBo.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import jakarta.validation.constraints.NotBlank; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 流程实例作废请求对象 - * - * @author may - */ -@Data -public class ProcessInvalidBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 业务id - */ - @NotBlank(message = "业务id不能为空", groups = {AddGroup.class}) - private String businessKey; - - /** - * 作废原因 - */ - private String deleteReason; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java deleted file mode 100644 index 7af7935..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.dromara.workflow.domain.bo; - - -import jakarta.validation.constraints.NotBlank; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; - -import java.io.Serial; -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -/** - * 启动流程对象 - * - * @author may - */ -@Data -public class StartProcessBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 业务唯一值id - */ - @NotBlank(message = "业务ID不能为空", groups = {AddGroup.class}) - private String businessKey; - - /** - * 表名 - */ - @NotBlank(message = "表名不能为空", groups = {AddGroup.class}) - private String tableName; - - /** - * 流程变量,前端会提交一个元素{'entity': {业务详情数据对象}} - */ - private Map variables; - - public Map getVariables() { - if (variables == null) { - return new HashMap<>(16); - } - variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue())); - return variables; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/SysUserMultiBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/SysUserMultiBo.java deleted file mode 100644 index e4d99e4..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/SysUserMultiBo.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 用户加签查询 - * - * @author may - */ -@Data -public class SysUserMultiBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 人员名称 - */ - private String userName; - - /** - * 人员名称 - */ - private String nickName; - - /** - * 部门id - */ - private String deptId; - - /** - * 任务id - */ - private String taskId; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskBo.java deleted file mode 100644 index 3037479..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskBo.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 任务请求对象 - * - * @author may - */ -@Data -public class TaskBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 任务名称 - */ - private String name; - - /** - * 流程定义名称 - */ - private String processDefinitionName; - - /** - * 流程定义key - */ - private String processDefinitionKey; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskUrgingBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskUrgingBo.java deleted file mode 100644 index 20856ef..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskUrgingBo.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.util.List; - -/** - * 任务催办 - * - * @author may - */ -@Data -public class TaskUrgingBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 流程实例id - */ - private String processInstanceId; - - /** - * 消息类型 - */ - private List messageType; - - /** - * 催办内容(为空默认系统内置信息) - */ - private String message; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TerminationBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TerminationBo.java deleted file mode 100644 index 8f2206e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TerminationBo.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import jakarta.validation.constraints.NotBlank; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 终止任务请求对象 - * - * @author may - */ -@Data -public class TerminationBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 任务id - */ - @NotBlank(message = "任务id为空", groups = AddGroup.class) - private String taskId; - - /** - * 审批意见 - */ - private String comment; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TestLeaveBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TestLeaveBo.java deleted file mode 100644 index 877e981..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TestLeaveBo.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import com.fasterxml.jackson.annotation.JsonFormat; -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.workflow.domain.TestLeave; - -import java.util.Date; - -/** - * 请假业务对象 test_leave - * - * @author may - * @date 2023-07-21 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = TestLeave.class, reverseConvertGenerate = false) -public class TestLeaveBo extends BaseEntity { - - /** - * 主键 - */ - @NotNull(message = "主键不能为空", groups = {EditGroup.class}) - private Long id; - - /** - * 请假类型 - */ - @NotBlank(message = "请假类型不能为空", groups = {AddGroup.class, EditGroup.class}) - private String leaveType; - - /** - * 开始时间 - */ - @NotNull(message = "开始时间不能为空", groups = {AddGroup.class, EditGroup.class}) - @JsonFormat(pattern = "yyyy-MM-dd") - private Date startDate; - - /** - * 结束时间 - */ - @NotNull(message = "结束时间不能为空", groups = {AddGroup.class, EditGroup.class}) - @JsonFormat(pattern = "yyyy-MM-dd") - private Date endDate; - - /** - * 请假天数 - */ - @NotNull(message = "请假天数不能为空", groups = {AddGroup.class, EditGroup.class}) - private Integer leaveDays; - - /** - * 开始时间 - */ - private Integer startLeaveDays; - - /** - * 结束时间 - */ - private Integer endLeaveDays; - - /** - * 请假原因 - */ - private String remark; - - /** - * 状态 - */ - private String status; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TransmitBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TransmitBo.java deleted file mode 100644 index 3eb6609..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TransmitBo.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import jakarta.validation.constraints.NotBlank; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 终转办务请求对象 - * - * @author may - */ -@Data -public class TransmitBo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 任务id - */ - @NotBlank(message = "任务id为空", groups = AddGroup.class) - private String taskId; - - /** - * 转办人id - */ - @NotBlank(message = "转办人不能为空", groups = AddGroup.class) - private String userId; - - /** - * 审批意见 - */ - private String comment; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfCategoryBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfCategoryBo.java deleted file mode 100644 index 69608fd..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfCategoryBo.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.workflow.domain.WfCategory; - -/** - * 流程分类业务对象 wf_category - * - * @author may - * @date 2023-06-27 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = WfCategory.class, reverseConvertGenerate = false) -public class WfCategoryBo extends BaseEntity { - - /** - * 主键 - */ - @NotNull(message = "主键不能为空", groups = {EditGroup.class}) - private Long id; - - /** - * 分类名称 - */ - @NotBlank(message = "分类名称不能为空", groups = {AddGroup.class, EditGroup.class}) - private String categoryName; - - /** - * 分类编码 - */ - @NotBlank(message = "分类编码不能为空", groups = {AddGroup.class, EditGroup.class}) - private String categoryCode; - - /** - * 父级id - */ - @NotNull(message = "父级id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long parentId; - - /** - * 排序 - */ - private Long sortNum; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java deleted file mode 100644 index fac1770..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import org.dromara.workflow.domain.WfDefinitionConfig; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; - -/** - * 流程定义配置业务对象 wf_form_definition - * - * @author may - * @date 2024-03-18 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = WfDefinitionConfig.class, reverseConvertGenerate = false) -public class WfDefinitionConfigBo extends BaseEntity { - - /** - * 主键 - */ - @NotNull(message = "主键不能为空", groups = {EditGroup.class}) - private Long id; - - /** - * 表名 - */ - @NotBlank(message = "表名不能为空", groups = {AddGroup.class}) - private String tableName; - - /** - * 流程定义ID - */ - @NotBlank(message = "流程定义ID不能为空", groups = {AddGroup.class}) - private String definitionId; - - /** - * 流程KEY - */ - @NotBlank(message = "流程KEY不能为空", groups = {AddGroup.class}) - private String processKey; - - /** - * 流程版本 - */ - @NotNull(message = "流程版本不能为空", groups = {AddGroup.class}) - private Integer version; - - /** - * 备注 - */ - private String remark; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormManageBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormManageBo.java deleted file mode 100644 index 8afc286..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormManageBo.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import org.dromara.workflow.domain.WfFormManage; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; - -/** - * 表单管理业务对象 wf_form_manage - * - * @author may - * @date 2024-03-29 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = WfFormManage.class, reverseConvertGenerate = false) -public class WfFormManageBo extends BaseEntity { - - /** - * 主键 - */ - @NotNull(message = "主键不能为空", groups = { EditGroup.class }) - private Long id; - - /** - * 表单名称 - */ - @NotBlank(message = "表单名称不能为空", groups = { AddGroup.class, EditGroup.class }) - private String formName; - - /** - * 表单类型 - */ - @NotBlank(message = "表单类型不能为空", groups = { AddGroup.class, EditGroup.class }) - private String formType; - /** - * 路由地址/表单ID - */ - @NotBlank(message = "路由地址/表单ID不能为空", groups = { AddGroup.class, EditGroup.class }) - private String router; - - - /** - * 备注 - */ - private String remark; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfNodeConfigBo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfNodeConfigBo.java deleted file mode 100644 index de518d3..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfNodeConfigBo.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import org.dromara.workflow.domain.WfNodeConfig; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; - -/** - * 节点配置业务对象 wf_node_config - * - * @author may - * @date 2024-03-30 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = WfNodeConfig.class, reverseConvertGenerate = false) -public class WfNodeConfigBo extends BaseEntity { - - /** - * 主键 - */ - @NotNull(message = "主键不能为空", groups = {EditGroup.class}) - private Long id; - - /** - * 表单id - */ - private Long formId; - - /** - * 表单类型 - */ - private String formType; - - /** - * 节点名称 - */ - @NotBlank(message = "节点名称不能为空", groups = {AddGroup.class, EditGroup.class}) - private String nodeName; - - /** - * 节点id - */ - @NotBlank(message = "节点id不能为空", groups = {AddGroup.class, EditGroup.class}) - private String nodeId; - - /** - * 流程定义id - */ - @NotBlank(message = "流程定义id不能为空", groups = {AddGroup.class, EditGroup.class}) - private String definitionId; - - /** - * 是否为申请人节点 (0是 1否) - */ - @NotBlank(message = "是否为申请人节点不能为空", groups = {AddGroup.class, EditGroup.class}) - private String applyUserTask; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java deleted file mode 100644 index e4c1142..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import lombok.Data; -import org.dromara.common.translation.annotation.Translation; -import org.dromara.common.translation.constant.TransConstant; -import org.flowable.engine.task.Attachment; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; -import java.util.List; - -/** - * 流程审批记录视图 - * - * @author may - */ -@Data -public class ActHistoryInfoVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - /** - * 任务id - */ - private String id; - /** - * 节点id - */ - private String taskDefinitionKey; - /** - * 任务名称 - */ - private String name; - /** - * 流程实例id - */ - private String processInstanceId; - /** - * 版本 - */ - private Integer version; - /** - * 开始时间 - */ - private Date startTime; - /** - * 结束时间 - */ - private Date endTime; - /** - * 运行时长 - */ - private String runDuration; - /** - * 状态 - */ - private String status; - /** - * 状态 - */ - private String statusName; - /** - * 办理人id - */ - private String assignee; - - /** - * 办理人名称 - */ - @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "assignee") - private String nickName; - - /** - * 办理人id - */ - private String owner; - - /** - * 审批信息id - */ - private String commentId; - - /** - * 审批信息 - */ - private String comment; - - /** - * 审批附件 - */ - private List attachmentList; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/GraphicInfoVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/GraphicInfoVo.java deleted file mode 100644 index 7636131..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/GraphicInfoVo.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 节点图形信息 - * - * @author may - */ -@Data -public class GraphicInfoVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - /** - * x坐标 - */ - private double x; - - /** - * y坐标 - */ - private double y; - - /** - * 节点高度 - */ - private double height; - - /** - * 节点宽度 - */ - private double width; - - /** - * 节点id - */ - private String nodeId; - - /** - * 节点名称 - */ - private String nodeName; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ModelVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ModelVo.java deleted file mode 100644 index b2ce811..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ModelVo.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 模型视图对象 - * - * @author may - */ -@Data -public class ModelVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 模型id - */ - private String id; - - /** - * 模型名称 - */ - private String name; - - /** - * 模型标识key - */ - private String key; - - /** - * 模型分类 - */ - private String categoryCode; - - /** - * 模型XML - */ - private String xml; - - /** - * 备注 - */ - private String description; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/MultiInstanceVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/MultiInstanceVo.java deleted file mode 100644 index b998396..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/MultiInstanceVo.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 多实例信息 - * - * @author may - */ -@Data -public class MultiInstanceVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 会签类型(串行,并行) - */ - private Object type; - - /** - * 会签人员KEY - */ - private String assignee; - - /** - * 会签人员集合KEY - */ - private String assigneeList; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ParticipantVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ParticipantVo.java deleted file mode 100644 index c5876f6..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ParticipantVo.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.util.List; - -/** - * 参与者 - * - * @author may - */ -@Data -public class ParticipantVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 组id(角色id) - */ - private List groupIds; - - /** - * 候选人id(用户id) 当组id不为空时,将组内人员查出放入candidate - */ - private List candidate; - - /** - * 候选人名称(用户名称) 当组id不为空时,将组内人员查出放入candidateName - */ - private List candidateName; - - /** - * 是否认领标识 - * 当为空时默认当前任务不需要认领 - * 当为true时当前任务说明为候选模式并且有人已经认领了任务可以归还, - * 当为false时当前任务说明为候选模式该任务未认领, - */ - private Boolean claim; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java deleted file mode 100644 index 034adbb..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; - -/** - * 流程定义视图 - * - * @author may - */ -@Data -public class ProcessDefinitionVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 流程定义id - */ - private String id; - - /** - * 流程定义名称 - */ - private String name; - - /** - * 流程定义标识key - */ - private String key; - - /** - * 流程定义版本 - */ - private int version; - - /** - * 流程定义挂起或激活 1激活 2挂起 - */ - private int suspensionState; - - /** - * 流程xml名称 - */ - private String resourceName; - - /** - * 流程图片名称 - */ - private String diagramResourceName; - - /** - * 流程部署id - */ - private String deploymentId; - - /** - * 流程部署时间 - */ - private Date deploymentTime; - - /** - * 流程定义配置 - */ - private WfDefinitionConfigVo wfDefinitionConfigVo; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java deleted file mode 100644 index ab3e7a1..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; -import java.util.List; - -/** - * 流程实例视图 - * - * @author may - */ -@Data -public class ProcessInstanceVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 流程实例id - */ - private String id; - - /** - * 流程定义id - */ - private String processDefinitionId; - - /** - * 流程定义名称 - */ - private String processDefinitionName; - - /** - * 流程定义key - */ - private String processDefinitionKey; - - /** - * 流程定义版本 - */ - private Integer processDefinitionVersion; - - /** - * 部署id - */ - private String deploymentId; - - /** - * 业务id - */ - private String businessKey; - - /** - * 是否挂起 - */ - private Boolean isSuspended; - - /** - * 租户id - */ - private String tenantId; - - /** - * 启动时间 - */ - private Date startTime; - - /** - * 结束时间 - */ - private Date endTime; - - /** - * 启动人id - */ - private String startUserId; - - /** - * 流程状态 - */ - private String businessStatus; - - /** - * 流程状态 - */ - private String businessStatusName; - - /** - * 待办任务集合 - */ - private List taskVoList; - - /** - * 节点配置 - */ - private WfNodeConfigVo wfNodeConfigVo; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java deleted file mode 100644 index 466e776..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java +++ /dev/null @@ -1,173 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import lombok.Data; -import org.dromara.common.translation.annotation.Translation; -import org.dromara.common.translation.constant.TransConstant; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; - -/** - * 任务视图 - * - * @author may - */ -@Data -public class TaskVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 任务id - */ - private String id; - - /** - * 任务名称 - */ - private String name; - - /** - * 描述 - */ - private String description; - - /** - * 优先级 - */ - private Integer priority; - - /** - * 负责此任务的人员的用户id - */ - private String owner; - - /** - * 办理人id - */ - private Long assignee; - - /** - * 办理人 - */ - @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "assignee") - private String assigneeName; - - - /** - * 流程实例id - */ - private String processInstanceId; - - /** - * 执行id - */ - private String executionId; - - /** - * 无用 - */ - private String taskDefinitionId; - - /** - * 流程定义id - */ - private String processDefinitionId; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 已办任务-创建时间 - */ - private Date startTime; - - /** - * 结束时间 - */ - private Date endTime; - - /** - * 节点id - */ - private String taskDefinitionKey; - - /** - * 任务截止日期 - */ - private Date dueDate; - - /** - * 流程类别 - */ - private String category; - - /** - * 父级任务id - */ - private String parentTaskId; - - /** - * 租户id - */ - private String tenantId; - - /** - * 认领时间 - */ - private Date claimTime; - - /** - * 流程状态 - */ - private String businessStatus; - - /** - * 流程状态 - */ - private String businessStatusName; - - /** - * 流程定义名称 - */ - private String processDefinitionName; - - /** - * 流程定义key - */ - private String processDefinitionKey; - - /** - * 流程定义版本 - */ - private Integer processDefinitionVersion; - - /** - * 参与者 - */ - private ParticipantVo participantVo; - - /** - * 是否会签 - */ - private Boolean multiInstance; - - /** - * 业务id - */ - private String businessKey; - - /** - * 流程定义配置 - */ - private WfDefinitionConfigVo wfDefinitionConfigVo; - - /** - * 节点配置 - */ - private WfNodeConfigVo wfNodeConfigVo; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TestLeaveVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TestLeaveVo.java deleted file mode 100644 index 47886d7..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TestLeaveVo.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.dromara.workflow.domain.TestLeave; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; - - -/** - * 请假视图对象 test_leave - * - * @author may - * @date 2023-07-21 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = TestLeave.class) -public class TestLeaveVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @ExcelProperty(value = "主键") - private Long id; - - /** - * 请假类型 - */ - @ExcelProperty(value = "请假类型") - private String leaveType; - - /** - * 开始时间 - */ - @ExcelProperty(value = "开始时间") - private Date startDate; - - /** - * 结束时间 - */ - @ExcelProperty(value = "结束时间") - private Date endDate; - - /** - * 请假天数 - */ - @ExcelProperty(value = "请假天数") - private Integer leaveDays; - - /** - * 备注 - */ - @ExcelProperty(value = "请假原因") - private String remark; - - /** - * 状态 - */ - @ExcelProperty(value = "状态") - private String status; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/VariableVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/VariableVo.java deleted file mode 100644 index 6a26c82..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/VariableVo.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 流程变量 - * - * @author may - */ -@Data -public class VariableVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 变量key - */ - private String key; - - /** - * 变量值 - */ - private String value; -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfCategoryVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfCategoryVo.java deleted file mode 100644 index 362f646..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfCategoryVo.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.dromara.workflow.domain.WfCategory; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 流程分类视图对象 wf_category - * - * @author may - * @date 2023-06-27 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = WfCategory.class) -public class WfCategoryVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @ExcelProperty(value = "主键") - private Long id; - - /** - * 分类名称 - */ - @ExcelProperty(value = "分类名称") - private String categoryName; - - /** - * 分类编码 - */ - @ExcelProperty(value = "分类编码") - private String categoryCode; - - /** - * 父级id - */ - @ExcelProperty(value = "父级id") - private Long parentId; - - /** - * 排序 - */ - @ExcelProperty(value = "排序") - private Long sortNum; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfCopy.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfCopy.java deleted file mode 100644 index 88a5a21..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfCopy.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 抄送 - * - * @author may - */ -@Data -public class WfCopy implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 用户id - */ - private Long userId; - - /** - * 用户名称 - */ - private String userName; - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java deleted file mode 100644 index 9c7b0d7..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import org.dromara.workflow.domain.WfDefinitionConfig; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 流程定义配置视图对象 wf_definition_config - * - * @author may - * @date 2024-03-18 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = WfDefinitionConfig.class) -public class WfDefinitionConfigVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @ExcelProperty(value = "主键") - private Long id; - - /** - * 表名 - */ - @ExcelProperty(value = "表名") - private String tableName; - - /** - * 流程定义ID - */ - @ExcelProperty(value = "流程定义ID") - private String definitionId; - - /** - * 流程KEY - */ - @ExcelProperty(value = "流程KEY") - private String processKey; - - - /** - * 流程版本 - */ - @ExcelProperty(value = "流程版本") - private Integer version; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - /** - * 表单管理 - */ - private WfFormManageVo wfFormManageVo; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormManageVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormManageVo.java deleted file mode 100644 index 302df23..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormManageVo.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import org.dromara.workflow.domain.WfFormManage; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 表单管理视图对象 wf_form_manage - * - * @author may - * @date 2024-03-29 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = WfFormManage.class) -public class WfFormManageVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @ExcelProperty(value = "主键") - private Long id; - - /** - * 表单名称 - */ - @ExcelProperty(value = "表单名称") - private String formName; - - /** - * 表单类型 - */ - @ExcelProperty(value = "表单类型") - private String formType; - - /** - * 表单类型名称 - */ - private String formTypeName; - - /** - * 路由地址/表单ID - */ - @ExcelProperty(value = "路由地址/表单ID") - private String router; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfNodeConfigVo.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfNodeConfigVo.java deleted file mode 100644 index 89e9d9b..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfNodeConfigVo.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import org.dromara.workflow.domain.WfNodeConfig; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 节点配置视图对象 wf_node_config - * - * @author may - * @date 2024-03-30 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = WfNodeConfig.class) -public class WfNodeConfigVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @ExcelProperty(value = "主键") - private Long id; - - /** - * 表单id - */ - @ExcelProperty(value = "表单id") - private Long formId; - - /** - * 表单类型 - */ - @ExcelProperty(value = "表单类型") - private String formType; - - /** - * 节点名称 - */ - @ExcelProperty(value = "节点名称") - private String nodeName; - - /** - * 节点id - */ - @ExcelProperty(value = "节点id") - private String nodeId; - - /** - * 流程定义id - */ - @ExcelProperty(value = "流程定义id") - private String definitionId; - - /** - * 是否为申请人节点 (0是 1否) - */ - @ExcelProperty(value = "是否为申请人节点 (0是 1否)") - private String applyUserTask; - - /** - * 表单管理 - */ - private WfFormManageVo wfFormManageVo; - - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/CustomDefaultProcessDiagramCanvas.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/CustomDefaultProcessDiagramCanvas.java deleted file mode 100644 index 39fd9d3..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/CustomDefaultProcessDiagramCanvas.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.dromara.workflow.flowable; - -import org.flowable.bpmn.model.AssociationDirection; -import org.flowable.image.impl.DefaultProcessDiagramCanvas; - -import java.awt.*; -import java.awt.geom.Line2D; -import java.awt.geom.RoundRectangle2D; - -public class CustomDefaultProcessDiagramCanvas extends DefaultProcessDiagramCanvas { - //设置高亮线的颜色 这里我设置成绿色 - protected static Color HIGHLIGHT_SEQUENCEFLOW_COLOR = Color.GREEN; - - public CustomDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { - super(width, height, minX, minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); - } - - /** - * 画线颜色设置 - */ - public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType, - AssociationDirection associationDirection, boolean highLighted, double scaleFactor) { - - Paint originalPaint = g.getPaint(); - Stroke originalStroke = g.getStroke(); - - g.setPaint(CONNECTION_COLOR); - if (connectionType.equals("association")) { - g.setStroke(ASSOCIATION_STROKE); - } else if (highLighted) { - //设置线的颜色 - g.setPaint(HIGHLIGHT_SEQUENCEFLOW_COLOR); - g.setStroke(HIGHLIGHT_FLOW_STROKE); - } - - for (int i = 1; i < xPoints.length; i++) { - Integer sourceX = xPoints[i - 1]; - Integer sourceY = yPoints[i - 1]; - Integer targetX = xPoints[i]; - Integer targetY = yPoints[i]; - Line2D.Double line = new Line2D.Double(sourceX, sourceY, targetX, targetY); - g.draw(line); - } - - if (isDefault) { - Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]); - drawDefaultSequenceFlowIndicator(line, scaleFactor); - } - - if (conditional) { - Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]); - drawConditionalSequenceFlowIndicator(line, scaleFactor); - } - - if (associationDirection == AssociationDirection.ONE || associationDirection == AssociationDirection.BOTH) { - Line2D.Double line = new Line2D.Double(xPoints[xPoints.length - 2], yPoints[xPoints.length - 2], xPoints[xPoints.length - 1], yPoints[xPoints.length - 1]); - drawArrowHead(line, scaleFactor); - } - if (associationDirection == AssociationDirection.BOTH) { - Line2D.Double line = new Line2D.Double(xPoints[1], yPoints[1], xPoints[0], yPoints[0]); - drawArrowHead(line, scaleFactor); - } - g.setPaint(originalPaint); - g.setStroke(originalStroke); - } - - /** - * 高亮节点设置 - */ - public void drawHighLight(int x, int y, int width, int height) { - Paint originalPaint = g.getPaint(); - Stroke originalStroke = g.getStroke(); - //设置高亮节点的颜色 - g.setPaint(HIGHLIGHT_COLOR); - g.setStroke(THICK_TASK_BORDER_STROKE); - - RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); - g.draw(rect); - - g.setPaint(originalPaint); - g.setStroke(originalStroke); - } - - /** - * @description: 高亮节点红色 - * @param: x - * @param: y - * @param: width - * @param: height - * @return: void - * @author: gssong - * @date: 2022/4/12 - */ - public void drawHighLightRed(int x, int y, int width, int height) { - Paint originalPaint = g.getPaint(); - Stroke originalStroke = g.getStroke(); - //设置高亮节点的颜色 - g.setPaint(Color.green); - g.setStroke(THICK_TASK_BORDER_STROKE); - - RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); - g.draw(rect); - - g.setPaint(originalPaint); - g.setStroke(originalStroke); - } - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/CustomDefaultProcessDiagramGenerator.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/CustomDefaultProcessDiagramGenerator.java deleted file mode 100644 index e4793a2..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/CustomDefaultProcessDiagramGenerator.java +++ /dev/null @@ -1,1120 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.dromara.workflow.flowable; - -import org.flowable.bpmn.model.Event; -import org.flowable.bpmn.model.Process; -import org.flowable.bpmn.model.*; -import org.flowable.image.ProcessDiagramGenerator; - -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.InputStream; -import java.util.List; -import java.util.*; - -/** - * Class to generate an image based the diagram interchange information in a BPMN 2.0 process. - * - * @author Joram Barrez - * @author Tijs Rademakers - * @author Zheng Ji - */ -public class CustomDefaultProcessDiagramGenerator implements ProcessDiagramGenerator { - - protected Map, ActivityDrawInstruction> activityDrawInstructions = new HashMap<>(); - protected Map, ArtifactDrawInstruction> artifactDrawInstructions = new HashMap<>(); - - public CustomDefaultProcessDiagramGenerator() { - this(1.0); - } - - // The instructions on how to draw a certain construct is - // created statically and stored in a map for performance. - public CustomDefaultProcessDiagramGenerator(final double scaleFactor) { - // start event - activityDrawInstructions.put(StartEvent.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - StartEvent startEvent = (StartEvent) flowNode; - if (startEvent.getEventDefinitions() != null && !startEvent.getEventDefinitions().isEmpty()) { - EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); - if (eventDefinition instanceof TimerEventDefinition) { - processDiagramCanvas.drawTimerStartEvent(graphicInfo, scaleFactor); - } else if (eventDefinition instanceof ErrorEventDefinition) { - processDiagramCanvas.drawErrorStartEvent(graphicInfo, scaleFactor); - } else if (eventDefinition instanceof EscalationEventDefinition) { - processDiagramCanvas.drawEscalationStartEvent(graphicInfo, scaleFactor); - } else if (eventDefinition instanceof ConditionalEventDefinition) { - processDiagramCanvas.drawConditionalStartEvent(graphicInfo, scaleFactor); - } else if (eventDefinition instanceof SignalEventDefinition) { - processDiagramCanvas.drawSignalStartEvent(graphicInfo, scaleFactor); - } else if (eventDefinition instanceof MessageEventDefinition) { - processDiagramCanvas.drawMessageStartEvent(graphicInfo, scaleFactor); - } else { - processDiagramCanvas.drawNoneStartEvent(graphicInfo); - } - } else { - List eventTypeElements = startEvent.getExtensionElements().get("eventType"); - if (eventTypeElements != null && eventTypeElements.size() > 0) { - processDiagramCanvas.drawEventRegistryStartEvent(graphicInfo, scaleFactor); - - } else { - processDiagramCanvas.drawNoneStartEvent(graphicInfo); - } - } - } - }); - - // signal catch - activityDrawInstructions.put(IntermediateCatchEvent.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) flowNode; - if (intermediateCatchEvent.getEventDefinitions() != null && !intermediateCatchEvent.getEventDefinitions().isEmpty()) { - - if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { - processDiagramCanvas.drawCatchingSignalEvent(flowNode.getName(), graphicInfo, true, scaleFactor); - } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition) { - processDiagramCanvas.drawCatchingTimerEvent(flowNode.getName(), graphicInfo, true, scaleFactor); - } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) { - processDiagramCanvas.drawCatchingMessageEvent(flowNode.getName(), graphicInfo, true, scaleFactor); - } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof ConditionalEventDefinition) { - processDiagramCanvas.drawCatchingConditionalEvent(flowNode.getName(), graphicInfo, true, scaleFactor); - } - } - } - }); - - // signal throw - activityDrawInstructions.put(ThrowEvent.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - ThrowEvent throwEvent = (ThrowEvent) flowNode; - if (throwEvent.getEventDefinitions() != null && !throwEvent.getEventDefinitions().isEmpty()) { - if (throwEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { - processDiagramCanvas.drawThrowingSignalEvent(graphicInfo, scaleFactor); - } else if (throwEvent.getEventDefinitions().get(0) instanceof EscalationEventDefinition) { - processDiagramCanvas.drawThrowingEscalationEvent(graphicInfo, scaleFactor); - } else if (throwEvent.getEventDefinitions().get(0) instanceof CompensateEventDefinition) { - processDiagramCanvas.drawThrowingCompensateEvent(graphicInfo, scaleFactor); - } else { - processDiagramCanvas.drawThrowingNoneEvent(graphicInfo, scaleFactor); - } - } else { - processDiagramCanvas.drawThrowingNoneEvent(graphicInfo, scaleFactor); - } - } - }); - - // end event - activityDrawInstructions.put(EndEvent.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - EndEvent endEvent = (EndEvent) flowNode; - if (endEvent.getEventDefinitions() != null && !endEvent.getEventDefinitions().isEmpty()) { - if (endEvent.getEventDefinitions().get(0) instanceof ErrorEventDefinition) { - processDiagramCanvas.drawErrorEndEvent(flowNode.getName(), graphicInfo, scaleFactor); - } else if (endEvent.getEventDefinitions().get(0) instanceof EscalationEventDefinition) { - processDiagramCanvas.drawEscalationEndEvent(flowNode.getName(), graphicInfo, scaleFactor); - } else { - processDiagramCanvas.drawNoneEndEvent(graphicInfo, scaleFactor); - } - } else { - processDiagramCanvas.drawNoneEndEvent(graphicInfo, scaleFactor); - } - } - }); - - // task - activityDrawInstructions.put(Task.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // user task - activityDrawInstructions.put(UserTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawUserTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // script task - activityDrawInstructions.put(ScriptTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawScriptTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // service task - activityDrawInstructions.put(ServiceTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - ServiceTask serviceTask = (ServiceTask) flowNode; - if ("camel".equalsIgnoreCase(serviceTask.getType())) { - processDiagramCanvas.drawCamelTask(serviceTask.getName(), graphicInfo, scaleFactor); - }else if (ServiceTask.HTTP_TASK.equalsIgnoreCase(serviceTask.getType())) { - processDiagramCanvas.drawHttpTask(serviceTask.getName(), graphicInfo, scaleFactor); - } else if (ServiceTask.DMN_TASK.equalsIgnoreCase(serviceTask.getType())) { - processDiagramCanvas.drawDMNTask(serviceTask.getName(), graphicInfo, scaleFactor); - } else if (ServiceTask.SHELL_TASK.equalsIgnoreCase(serviceTask.getType())) { - processDiagramCanvas.drawShellTask(serviceTask.getName(), graphicInfo, scaleFactor); - } else { - processDiagramCanvas.drawServiceTask(serviceTask.getName(), graphicInfo, scaleFactor); - } - } - }); - - // http service task - activityDrawInstructions.put(HttpServiceTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawHttpTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // receive task - activityDrawInstructions.put(ReceiveTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawReceiveTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // send task - activityDrawInstructions.put(SendTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawSendTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // manual task - activityDrawInstructions.put(ManualTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawManualTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // send event service task - activityDrawInstructions.put(SendEventServiceTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawSendEventServiceTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // external worker service task - activityDrawInstructions.put(ExternalWorkerServiceTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - ServiceTask serviceTask = (ServiceTask) flowNode; - processDiagramCanvas.drawServiceTask(serviceTask.getName(), graphicInfo, scaleFactor); - } - }); - - // case service task - activityDrawInstructions.put(CaseServiceTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawCaseServiceTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // businessRuleTask task - activityDrawInstructions.put(BusinessRuleTask.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawBusinessRuleTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // exclusive gateway - activityDrawInstructions.put(ExclusiveGateway.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawExclusiveGateway(graphicInfo, scaleFactor); - } - }); - - // inclusive gateway - activityDrawInstructions.put(InclusiveGateway.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawInclusiveGateway(graphicInfo, scaleFactor); - } - }); - - // parallel gateway - activityDrawInstructions.put(ParallelGateway.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawParallelGateway(graphicInfo, scaleFactor); - } - }); - - // event based gateway - activityDrawInstructions.put(EventGateway.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawEventBasedGateway(graphicInfo, scaleFactor); - } - }); - - // Boundary timer - activityDrawInstructions.put(BoundaryEvent.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - BoundaryEvent boundaryEvent = (BoundaryEvent) flowNode; - if (boundaryEvent.getEventDefinitions() != null && !boundaryEvent.getEventDefinitions().isEmpty()) { - EventDefinition eventDefinition = boundaryEvent.getEventDefinitions().get(0); - if (eventDefinition instanceof TimerEventDefinition) { - processDiagramCanvas.drawCatchingTimerEvent(flowNode.getName(), graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - - } else if (eventDefinition instanceof ConditionalEventDefinition) { - processDiagramCanvas.drawCatchingConditionalEvent(graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - - } else if (eventDefinition instanceof ErrorEventDefinition) { - processDiagramCanvas.drawCatchingErrorEvent(graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - - } else if (eventDefinition instanceof EscalationEventDefinition) { - processDiagramCanvas.drawCatchingEscalationEvent(graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - - } else if (eventDefinition instanceof SignalEventDefinition) { - processDiagramCanvas.drawCatchingSignalEvent(flowNode.getName(), graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - - } else if (eventDefinition instanceof MessageEventDefinition) { - processDiagramCanvas.drawCatchingMessageEvent(flowNode.getName(), graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - - } else if (eventDefinition instanceof CompensateEventDefinition) { - processDiagramCanvas.drawCatchingCompensateEvent(graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - } - - } else { - List eventTypeElements = boundaryEvent.getExtensionElements().get("eventType"); - if (eventTypeElements != null && eventTypeElements.size() > 0) { - processDiagramCanvas.drawCatchingEventRegistryEvent(flowNode.getName(), graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - } - } - } - }); - - // subprocess - activityDrawInstructions.put(SubProcess.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { - processDiagramCanvas.drawCollapsedSubProcess(flowNode.getName(), graphicInfo, false, scaleFactor); - } else { - processDiagramCanvas.drawExpandedSubProcess(flowNode.getName(), graphicInfo, false, scaleFactor); - } - } - }); - - // transaction - activityDrawInstructions.put(Transaction.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { - processDiagramCanvas.drawCollapsedSubProcess(flowNode.getName(), graphicInfo, false, scaleFactor); - } else { - processDiagramCanvas.drawExpandedTransaction(flowNode.getName(), graphicInfo, scaleFactor); - } - } - }); - - // Event subprocess - activityDrawInstructions.put(EventSubProcess.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { - processDiagramCanvas.drawCollapsedSubProcess(flowNode.getName(), graphicInfo, true, scaleFactor); - } else { - processDiagramCanvas.drawExpandedSubProcess(flowNode.getName(), graphicInfo, true, scaleFactor); - } - } - }); - - // Adhoc subprocess - activityDrawInstructions.put(AdhocSubProcess.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { - processDiagramCanvas.drawCollapsedSubProcess(flowNode.getName(), graphicInfo, false, scaleFactor); - } else { - processDiagramCanvas.drawExpandedSubProcess(flowNode.getName(), graphicInfo, false, scaleFactor); - } - } - }); - - // call activity - activityDrawInstructions.put(CallActivity.class, new ActivityDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawCollapsedCallActivity(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // text annotation - artifactDrawInstructions.put(TextAnnotation.class, new ArtifactDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(artifact.getId()); - TextAnnotation textAnnotation = (TextAnnotation) artifact; - processDiagramCanvas.drawTextAnnotation(textAnnotation.getText(), graphicInfo, scaleFactor); - } - }); - - // association - artifactDrawInstructions.put(Association.class, new ArtifactDrawInstruction() { - - @Override - public void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { - Association association = (Association) artifact; - String sourceRef = association.getSourceRef(); - String targetRef = association.getTargetRef(); - - // source and target can be instance of FlowElement or Artifact - BaseElement sourceElement = bpmnModel.getFlowElement(sourceRef); - BaseElement targetElement = bpmnModel.getFlowElement(targetRef); - if (sourceElement == null) { - sourceElement = bpmnModel.getArtifact(sourceRef); - } - if (targetElement == null) { - targetElement = bpmnModel.getArtifact(targetRef); - } - List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId()); - graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); - int[] xPoints = new int[graphicInfoList.size()]; - int[] yPoints = new int[graphicInfoList.size()]; - for (int i = 1; i < graphicInfoList.size(); i++) { - GraphicInfo graphicInfo = graphicInfoList.get(i); - GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); - - if (i == 1) { - xPoints[0] = (int) previousGraphicInfo.getX(); - yPoints[0] = (int) previousGraphicInfo.getY(); - } - xPoints[i] = (int) graphicInfo.getX(); - yPoints[i] = (int) graphicInfo.getY(); - } - - AssociationDirection associationDirection = association.getAssociationDirection(); - processDiagramCanvas.drawAssociation(xPoints, yPoints, associationDirection, false, scaleFactor); - } - }); - } - - @Override - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { - - return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, - activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor, drawSequenceFlowNameWithNoLabelDI).generateImage(imageType); - } - - @Override - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, boolean drawSequenceFlowNameWithNoLabelDI) { - return generateDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, 1.0, drawSequenceFlowNameWithNoLabelDI); - } - - @Override - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, - List highLightedActivities, List highLightedFlows, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { - return generateDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, scaleFactor, drawSequenceFlowNameWithNoLabelDI); - } - - @Override - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, boolean drawSequenceFlowNameWithNoLabelDI) { - return generateDiagram(bpmnModel, imageType, highLightedActivities, Collections.emptyList(), drawSequenceFlowNameWithNoLabelDI); - } - - @Override - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { - return generateDiagram(bpmnModel, imageType, highLightedActivities, Collections.emptyList(), scaleFactor, drawSequenceFlowNameWithNoLabelDI); - } - - @Override - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, - String labelFontName, String annotationFontName, ClassLoader customClassLoader, boolean drawSequenceFlowNameWithNoLabelDI) { - - return generateDiagram(bpmnModel, imageType, Collections.emptyList(), Collections.emptyList(), - activityFontName, labelFontName, annotationFontName, customClassLoader, 1.0, drawSequenceFlowNameWithNoLabelDI); - } - - @Override - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, - String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { - - return generateDiagram(bpmnModel, imageType, Collections.emptyList(), Collections.emptyList(), - activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor, drawSequenceFlowNameWithNoLabelDI); - } - - @Override - public InputStream generatePngDiagram(BpmnModel bpmnModel, boolean drawSequenceFlowNameWithNoLabelDI) { - return generatePngDiagram(bpmnModel, 1.0, drawSequenceFlowNameWithNoLabelDI); - } - - @Override - public InputStream generatePngDiagram(BpmnModel bpmnModel, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { - return generateDiagram(bpmnModel, "png", Collections.emptyList(), Collections.emptyList(), scaleFactor, drawSequenceFlowNameWithNoLabelDI); - } - - @Override - public InputStream generateJpgDiagram(BpmnModel bpmnModel) { - return generateJpgDiagram(bpmnModel, 1.0, false); - } - - @Override - public InputStream generateJpgDiagram(BpmnModel bpmnModel, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { - return generateDiagram(bpmnModel, "jpg", Collections.emptyList(), Collections.emptyList(), drawSequenceFlowNameWithNoLabelDI); - } - - public BufferedImage generateImage(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { - - return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, - activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor, drawSequenceFlowNameWithNoLabelDI).generateBufferedImage(imageType); - } - - public BufferedImage generateImage(BpmnModel bpmnModel, String imageType, - List highLightedActivities, List highLightedFlows, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { - - return generateImage(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, scaleFactor, drawSequenceFlowNameWithNoLabelDI); - } - - @Override - public BufferedImage generatePngImage(BpmnModel bpmnModel, double scaleFactor) { - return generateImage(bpmnModel, "png", Collections.emptyList(), Collections.emptyList(), scaleFactor, false); - } - - protected CustomDefaultProcessDiagramCanvas generateProcessDiagram(BpmnModel bpmnModel, String imageType, - List highLightedActivities, List highLightedFlows, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { - - prepareBpmnModel(bpmnModel); - - CustomDefaultProcessDiagramCanvas processDiagramCanvas = initProcessDiagramCanvas(bpmnModel, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); - - // Draw pool shape, if process is participant in collaboration - for (Pool pool : bpmnModel.getPools()) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); - processDiagramCanvas.drawPoolOrLane(pool.getName(), graphicInfo, scaleFactor); - } - - // Draw lanes - for (Process process : bpmnModel.getProcesses()) { - for (Lane lane : process.getLanes()) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(lane.getId()); - processDiagramCanvas.drawPoolOrLane(lane.getName(), graphicInfo, scaleFactor); - } - } - - // Draw activities and their sequence-flows - for (Process process : bpmnModel.getProcesses()) { - for (FlowNode flowNode : process.findFlowElementsOfType(FlowNode.class)) { - if (!isPartOfCollapsedSubProcess(flowNode, bpmnModel)) { - drawActivity(processDiagramCanvas, bpmnModel, flowNode, highLightedActivities, highLightedFlows, scaleFactor, drawSequenceFlowNameWithNoLabelDI); - } - } - } - - // Draw artifacts - for (Process process : bpmnModel.getProcesses()) { - - for (Artifact artifact : process.getArtifacts()) { - drawArtifact(processDiagramCanvas, bpmnModel, artifact); - } - - List subProcesses = process.findFlowElementsOfType(SubProcess.class, true); - if (subProcesses != null) { - for (SubProcess subProcess : subProcesses) { - - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(subProcess.getId()); - if (graphicInfo != null && graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { - continue; - } - - if (!isPartOfCollapsedSubProcess(subProcess, bpmnModel)) { - for (Artifact subProcessArtifact : subProcess.getArtifacts()) { - drawArtifact(processDiagramCanvas, bpmnModel, subProcessArtifact); - } - } - } - } - } - - return processDiagramCanvas; - } - - protected void prepareBpmnModel(BpmnModel bpmnModel) { - - // Need to make sure all elements have positive x and y. - // Check all graphicInfo and update the elements accordingly - - List allGraphicInfos = new ArrayList<>(); - if (bpmnModel.getLocationMap() != null) { - allGraphicInfos.addAll(bpmnModel.getLocationMap().values()); - } - if (bpmnModel.getLabelLocationMap() != null) { - allGraphicInfos.addAll(bpmnModel.getLabelLocationMap().values()); - } - if (bpmnModel.getFlowLocationMap() != null) { - for (List flowGraphicInfos : bpmnModel.getFlowLocationMap().values()) { - allGraphicInfos.addAll(flowGraphicInfos); - } - } - - if (allGraphicInfos.size() > 0) { - - boolean needsTranslationX = false; - boolean needsTranslationY = false; - - double lowestX = 0.0; - double lowestY = 0.0; - - // Collect lowest x and y - for (GraphicInfo graphicInfo : allGraphicInfos) { - - double x = graphicInfo.getX(); - double y = graphicInfo.getY(); - - if (x < lowestX) { - needsTranslationX = true; - lowestX = x; - } - if (y < lowestY) { - needsTranslationY = true; - lowestY = y; - } - - } - - // Update all graphicInfo objects - if (needsTranslationX || needsTranslationY) { - - double translationX = Math.abs(lowestX); - double translationY = Math.abs(lowestY); - - for (GraphicInfo graphicInfo : allGraphicInfos) { - if (needsTranslationX) { - graphicInfo.setX(graphicInfo.getX() + translationX); - } - if (needsTranslationY) { - graphicInfo.setY(graphicInfo.getY() + translationY); - } - } - } - - } - - } - - protected void drawActivity(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, - FlowNode flowNode, List highLightedActivities, List highLightedFlows, double scaleFactor, Boolean drawSequenceFlowNameWithNoLabelDI) { - - ActivityDrawInstruction drawInstruction = activityDrawInstructions.get(flowNode.getClass()); - if (drawInstruction != null) { - - drawInstruction.draw(processDiagramCanvas, bpmnModel, flowNode); - - // Gather info on the multi instance marker - boolean multiInstanceSequential = false; - boolean multiInstanceParallel = false; - boolean collapsed = false; - if (flowNode instanceof Activity) { - Activity activity = (Activity) flowNode; - MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = activity.getLoopCharacteristics(); - if (multiInstanceLoopCharacteristics != null) { - multiInstanceSequential = multiInstanceLoopCharacteristics.isSequential(); - multiInstanceParallel = !multiInstanceSequential; - } - } - - // Gather info on the collapsed marker - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - if (flowNode instanceof SubProcess) { - collapsed = graphicInfo.getExpanded() != null && !graphicInfo.getExpanded(); - } else if (flowNode instanceof CallActivity) { - collapsed = true; - } - - if (scaleFactor == 1.0) { - // Actually draw the markers - processDiagramCanvas.drawActivityMarkers((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight(), - multiInstanceSequential, multiInstanceParallel, collapsed); - } - - // Draw highlighted activities - if (highLightedActivities.contains(flowNode.getId())) { - drawHighLightRed(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); - } else if (highLightedActivities.contains(Color.RED.toString() + flowNode.getId())) { - drawHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); - } - - } else if (flowNode instanceof Task) { - activityDrawInstructions.get(Task.class).draw(processDiagramCanvas, bpmnModel, flowNode); - - if (highLightedActivities.contains(flowNode.getId())) { - drawHighLightRed(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); - } else if (highLightedActivities.contains(Color.RED.toString() + flowNode.getId())) { - drawHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); - } - } - - // Outgoing transitions of activity - for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { - boolean highLighted = (highLightedFlows.contains(sequenceFlow.getId())); - String defaultFlow = null; - if (flowNode instanceof Activity) { - defaultFlow = ((Activity) flowNode).getDefaultFlow(); - } else if (flowNode instanceof Gateway) { - defaultFlow = ((Gateway) flowNode).getDefaultFlow(); - } - - boolean isDefault = false; - if (defaultFlow != null && defaultFlow.equalsIgnoreCase(sequenceFlow.getId())) { - isDefault = true; - } - boolean drawConditionalIndicator = sequenceFlow.getConditionExpression() != null && sequenceFlow.getConditionExpression().trim().length() > 0 && !(flowNode instanceof Gateway); - - String sourceRef = sequenceFlow.getSourceRef(); - String targetRef = sequenceFlow.getTargetRef(); - FlowElement sourceElement = bpmnModel.getFlowElement(sourceRef); - FlowElement targetElement = bpmnModel.getFlowElement(targetRef); - List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); - if (graphicInfoList != null && graphicInfoList.size() > 0) { - graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); - int[] xPoints = new int[graphicInfoList.size()]; - int[] yPoints = new int[graphicInfoList.size()]; - - for (int i = 1; i < graphicInfoList.size(); i++) { - GraphicInfo graphicInfo = graphicInfoList.get(i); - GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); - - if (i == 1) { - xPoints[0] = (int) previousGraphicInfo.getX(); - yPoints[0] = (int) previousGraphicInfo.getY(); - } - xPoints[i] = (int) graphicInfo.getX(); - yPoints[i] = (int) graphicInfo.getY(); - - } - - processDiagramCanvas.drawSequenceflow(xPoints, yPoints, drawConditionalIndicator, isDefault, highLighted, scaleFactor); - - // Draw sequenceflow label - GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId()); - if (labelGraphicInfo != null) { - processDiagramCanvas.drawLabel(sequenceFlow.getName(), labelGraphicInfo, false); - } else { - if (drawSequenceFlowNameWithNoLabelDI) { - GraphicInfo lineCenter = getLineCenter(graphicInfoList); - processDiagramCanvas.drawLabel(sequenceFlow.getName(), lineCenter, false); - } - - } - } - } - - // Nested elements - if (flowNode instanceof FlowElementsContainer) { - for (FlowElement nestedFlowElement : ((FlowElementsContainer) flowNode).getFlowElements()) { - if (nestedFlowElement instanceof FlowNode && !isPartOfCollapsedSubProcess(nestedFlowElement, bpmnModel)) { - drawActivity(processDiagramCanvas, bpmnModel, (FlowNode) nestedFlowElement, - highLightedActivities, highLightedFlows, scaleFactor, drawSequenceFlowNameWithNoLabelDI); - } - } - } - } - - /** - * This method makes coordinates of connection flow better. - * - * @param processDiagramCanvas - * @param bpmnModel - * @param sourceElement - * @param targetElement - * @param graphicInfoList - * @return - */ - protected static List connectionPerfectionizer(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, BaseElement sourceElement, BaseElement targetElement, List graphicInfoList) { - GraphicInfo sourceGraphicInfo = bpmnModel.getGraphicInfo(sourceElement.getId()); - GraphicInfo targetGraphicInfo = bpmnModel.getGraphicInfo(targetElement.getId()); - - CustomDefaultProcessDiagramCanvas.SHAPE_TYPE sourceShapeType = getShapeType(sourceElement); - CustomDefaultProcessDiagramCanvas.SHAPE_TYPE targetShapeType = getShapeType(targetElement); - - return processDiagramCanvas.connectionPerfectionizer(sourceShapeType, targetShapeType, sourceGraphicInfo, targetGraphicInfo, graphicInfoList); - } - - /** - * This method returns shape type of base element.
- * Each element can be presented as rectangle, rhombus, or ellipse. - * - * @param baseElement - * @return CustomDefaultProcessDiagramCanvas.SHAPE_TYPE - */ - protected static CustomDefaultProcessDiagramCanvas.SHAPE_TYPE getShapeType(BaseElement baseElement) { - if (baseElement instanceof Task || baseElement instanceof Activity || baseElement instanceof TextAnnotation) { - return CustomDefaultProcessDiagramCanvas.SHAPE_TYPE.Rectangle; - } else if (baseElement instanceof Gateway) { - return CustomDefaultProcessDiagramCanvas.SHAPE_TYPE.Rhombus; - } else if (baseElement instanceof Event) { - return CustomDefaultProcessDiagramCanvas.SHAPE_TYPE.Ellipse; - } else { - // unknown source element, just do not correct coordinates - } - return null; - } - - protected static GraphicInfo getLineCenter(List graphicInfoList) { - GraphicInfo gi = new GraphicInfo(); - - int[] xPoints = new int[graphicInfoList.size()]; - int[] yPoints = new int[graphicInfoList.size()]; - - double length = 0; - double[] lengths = new double[graphicInfoList.size()]; - lengths[0] = 0; - double m; - for (int i = 1; i < graphicInfoList.size(); i++) { - GraphicInfo graphicInfo = graphicInfoList.get(i); - GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); - - if (i == 1) { - xPoints[0] = (int) previousGraphicInfo.getX(); - yPoints[0] = (int) previousGraphicInfo.getY(); - } - xPoints[i] = (int) graphicInfo.getX(); - yPoints[i] = (int) graphicInfo.getY(); - - length += Math.sqrt( - Math.pow((int) graphicInfo.getX() - (int) previousGraphicInfo.getX(), 2) + - Math.pow((int) graphicInfo.getY() - (int) previousGraphicInfo.getY(), 2)); - lengths[i] = length; - } - m = length / 2; - int p1 = 0; - int p2 = 1; - for (int i = 1; i < lengths.length; i++) { - double len = lengths[i]; - p1 = i - 1; - p2 = i; - if (len > m) { - break; - } - } - - GraphicInfo graphicInfo1 = graphicInfoList.get(p1); - GraphicInfo graphicInfo2 = graphicInfoList.get(p2); - - double AB = (int) graphicInfo2.getX() - (int) graphicInfo1.getX(); - double OA = (int) graphicInfo2.getY() - (int) graphicInfo1.getY(); - double OB = lengths[p2] - lengths[p1]; - double ob = m - lengths[p1]; - double ab = AB * ob / OB; - double oa = OA * ob / OB; - - double mx = graphicInfo1.getX() + ab; - double my = graphicInfo1.getY() + oa; - - gi.setX(mx); - gi.setY(my); - return gi; - } - - protected void drawArtifact(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { - - ArtifactDrawInstruction drawInstruction = artifactDrawInstructions.get(artifact.getClass()); - if (drawInstruction != null) { - drawInstruction.draw(processDiagramCanvas, bpmnModel, artifact); - } - } - - private static void drawHighLight(CustomDefaultProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { - processDiagramCanvas.drawHighLight((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight()); - - } - - private static void drawHighLightRed(CustomDefaultProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { - processDiagramCanvas.drawHighLightRed((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight()); - - } - - protected static CustomDefaultProcessDiagramCanvas initProcessDiagramCanvas(BpmnModel bpmnModel, String imageType, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { - - // We need to calculate maximum values to know how big the image will be in its entirety - double minX = Double.MAX_VALUE; - double maxX = 0; - double minY = Double.MAX_VALUE; - double maxY = 0; - - for (Pool pool : bpmnModel.getPools()) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); - minX = graphicInfo.getX(); - maxX = graphicInfo.getX() + graphicInfo.getWidth(); - minY = graphicInfo.getY(); - maxY = graphicInfo.getY() + graphicInfo.getHeight(); - } - - List flowNodes = gatherAllFlowNodes(bpmnModel); - for (FlowNode flowNode : flowNodes) { - - GraphicInfo flowNodeGraphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - - // width - if (flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth() > maxX) { - maxX = flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth(); - } - if (flowNodeGraphicInfo.getX() < minX) { - minX = flowNodeGraphicInfo.getX(); - } - // height - if (flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight() > maxY) { - maxY = flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight(); - } - if (flowNodeGraphicInfo.getY() < minY) { - minY = flowNodeGraphicInfo.getY(); - } - - for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { - List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); - if (graphicInfoList != null) { - for (GraphicInfo graphicInfo : graphicInfoList) { - // width - if (graphicInfo.getX() > maxX) { - maxX = graphicInfo.getX(); - } - if (graphicInfo.getX() < minX) { - minX = graphicInfo.getX(); - } - // height - if (graphicInfo.getY() > maxY) { - maxY = graphicInfo.getY(); - } - if (graphicInfo.getY() < minY) { - minY = graphicInfo.getY(); - } - } - } - } - } - - List artifacts = gatherAllArtifacts(bpmnModel); - for (Artifact artifact : artifacts) { - - GraphicInfo artifactGraphicInfo = bpmnModel.getGraphicInfo(artifact.getId()); - - if (artifactGraphicInfo != null) { - // width - if (artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth() > maxX) { - maxX = artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth(); - } - if (artifactGraphicInfo.getX() < minX) { - minX = artifactGraphicInfo.getX(); - } - // height - if (artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight() > maxY) { - maxY = artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight(); - } - if (artifactGraphicInfo.getY() < minY) { - minY = artifactGraphicInfo.getY(); - } - } - - List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId()); - if (graphicInfoList != null) { - for (GraphicInfo graphicInfo : graphicInfoList) { - // width - if (graphicInfo.getX() > maxX) { - maxX = graphicInfo.getX(); - } - if (graphicInfo.getX() < minX) { - minX = graphicInfo.getX(); - } - // height - if (graphicInfo.getY() > maxY) { - maxY = graphicInfo.getY(); - } - if (graphicInfo.getY() < minY) { - minY = graphicInfo.getY(); - } - } - } - } - - int nrOfLanes = 0; - for (Process process : bpmnModel.getProcesses()) { - for (Lane l : process.getLanes()) { - - nrOfLanes++; - - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(l.getId()); - // // width - if (graphicInfo.getX() + graphicInfo.getWidth() > maxX) { - maxX = graphicInfo.getX() + graphicInfo.getWidth(); - } - if (graphicInfo.getX() < minX) { - minX = graphicInfo.getX(); - } - // height - if (graphicInfo.getY() + graphicInfo.getHeight() > maxY) { - maxY = graphicInfo.getY() + graphicInfo.getHeight(); - } - if (graphicInfo.getY() < minY) { - minY = graphicInfo.getY(); - } - } - } - - // Special case, see https://activiti.atlassian.net/browse/ACT-1431 - if (flowNodes.isEmpty() && bpmnModel.getPools().isEmpty() && nrOfLanes == 0) { - // Nothing to show - minX = 0; - minY = 0; - } - - return new CustomDefaultProcessDiagramCanvas((int) maxX + 10, (int) maxY + 10, (int) minX, (int) minY, - imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); - } - - protected static List gatherAllArtifacts(BpmnModel bpmnModel) { - List artifacts = new ArrayList<>(); - for (Process process : bpmnModel.getProcesses()) { - artifacts.addAll(process.getArtifacts()); - } - return artifacts; - } - - protected static List gatherAllFlowNodes(BpmnModel bpmnModel) { - List flowNodes = new ArrayList<>(); - for (Process process : bpmnModel.getProcesses()) { - flowNodes.addAll(gatherAllFlowNodes(process)); - } - return flowNodes; - } - - protected static List gatherAllFlowNodes(FlowElementsContainer flowElementsContainer) { - List flowNodes = new ArrayList<>(); - for (FlowElement flowElement : flowElementsContainer.getFlowElements()) { - if (flowElement instanceof FlowNode) { - flowNodes.add((FlowNode) flowElement); - } - if (flowElement instanceof FlowElementsContainer) { - flowNodes.addAll(gatherAllFlowNodes((FlowElementsContainer) flowElement)); - } - } - return flowNodes; - } - - protected boolean isPartOfCollapsedSubProcess(FlowElement flowElement, BpmnModel model) { - SubProcess subProcess = flowElement.getSubProcess(); - if (subProcess != null) { - GraphicInfo graphicInfo = model.getGraphicInfo(subProcess.getId()); - if (graphicInfo != null && graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { - return true; - } - - return isPartOfCollapsedSubProcess(subProcess, model); - } - - return false; - } - - public Map, ActivityDrawInstruction> getActivityDrawInstructions() { - return activityDrawInstructions; - } - - public void setActivityDrawInstructions( - Map, ActivityDrawInstruction> activityDrawInstructions) { - this.activityDrawInstructions = activityDrawInstructions; - } - - public Map, ArtifactDrawInstruction> getArtifactDrawInstructions() { - return artifactDrawInstructions; - } - - public void setArtifactDrawInstructions( - Map, ArtifactDrawInstruction> artifactDrawInstructions) { - this.artifactDrawInstructions = artifactDrawInstructions; - } - - protected interface ActivityDrawInstruction { - void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode); - } - - protected interface ArtifactDrawInstruction { - void draw(CustomDefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AddSequenceMultiInstanceCmd.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AddSequenceMultiInstanceCmd.java deleted file mode 100644 index 3cdfcf4..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AddSequenceMultiInstanceCmd.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.dromara.workflow.flowable.cmd; - -import cn.hutool.core.collection.CollUtil; -import org.flowable.common.engine.impl.interceptor.Command; -import org.flowable.common.engine.impl.interceptor.CommandContext; -import org.flowable.engine.impl.persistence.entity.ExecutionEntity; -import org.flowable.engine.impl.persistence.entity.ExecutionEntityManager; -import org.flowable.engine.impl.util.CommandContextUtil; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.dromara.workflow.common.constant.FlowConstant.NUMBER_OF_INSTANCES; - -/** - * 串行加签 - * - * @author may - */ -public class AddSequenceMultiInstanceCmd implements Command { - - /** - * 执行id - */ - private final String executionId; - - /** - * 会签人员集合KEY - */ - private final String assigneeList; - - /** - * 加签人员 - */ - private final List assignees; - - public AddSequenceMultiInstanceCmd(String executionId, String assigneeList, List assignees) { - this.executionId = executionId; - this.assigneeList = assigneeList; - this.assignees = assignees; - } - - @Override - public Void execute(CommandContext commandContext) { - ExecutionEntityManager executionEntityManager = CommandContextUtil.getExecutionEntityManager(); - ExecutionEntity entity = executionEntityManager.findById(executionId); - // 多实例任务总数加 assignees.size() - if (entity.getVariable(NUMBER_OF_INSTANCES) instanceof Integer nrOfInstances) { - entity.setVariable(NUMBER_OF_INSTANCES, nrOfInstances + assignees.size()); - } - // 设置流程变量 - if (entity.getVariable(assigneeList) instanceof List userIds) { - CollUtil.addAll(userIds, assignees); - Map variables = new HashMap<>(16); - variables.put(assigneeList, userIds); - entity.setVariables(variables); - } - return null; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java deleted file mode 100644 index 20a0a5f..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.dromara.workflow.flowable.cmd; - -import cn.hutool.core.collection.CollUtil; -import org.dromara.common.core.domain.dto.OssDTO; -import org.dromara.common.core.service.OssService; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.satoken.utils.LoginHelper; -import org.flowable.common.engine.impl.interceptor.Command; -import org.flowable.common.engine.impl.interceptor.CommandContext; -import org.flowable.engine.impl.persistence.entity.AttachmentEntity; -import org.flowable.engine.impl.persistence.entity.AttachmentEntityManager; -import org.flowable.engine.impl.util.CommandContextUtil; - -import java.util.Date; -import java.util.List; - -/** - * 附件上传 - * - * @author may - */ -public class AttachmentCmd implements Command { - - private final String fileId; - - private final String taskId; - - private final String processInstanceId; - - private final OssService ossService; - - public AttachmentCmd(String fileId, String taskId, String processInstanceId, OssService ossService) { - this.fileId = fileId; - this.taskId = taskId; - this.processInstanceId = processInstanceId; - this.ossService = ossService; - } - - @Override - public Boolean execute(CommandContext commandContext) { - try { - if (StringUtils.isNotBlank(fileId)) { - List ossList = ossService.selectByIds(fileId); - if (CollUtil.isNotEmpty(ossList)) { - for (OssDTO oss : ossList) { - AttachmentEntityManager attachmentEntityManager = CommandContextUtil.getAttachmentEntityManager(); - AttachmentEntity attachmentEntity = attachmentEntityManager.create(); - attachmentEntity.setRevision(1); - attachmentEntity.setUserId(LoginHelper.getUserId().toString()); - attachmentEntity.setName(oss.getOriginalName()); - attachmentEntity.setDescription(oss.getOriginalName()); - attachmentEntity.setType(oss.getFileSuffix()); - attachmentEntity.setTaskId(taskId); - attachmentEntity.setProcessInstanceId(processInstanceId); - attachmentEntity.setContentId(oss.getOssId().toString()); - attachmentEntity.setTime(new Date()); - attachmentEntityManager.insert(attachmentEntity); - } - } - } - } catch (Exception e) { - throw new RuntimeException(e); - } - return true; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteExecutionCmd.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteExecutionCmd.java deleted file mode 100644 index 215d310..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteExecutionCmd.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.dromara.workflow.flowable.cmd; - -import org.flowable.common.engine.impl.interceptor.Command; -import org.flowable.common.engine.impl.interceptor.CommandContext; -import org.flowable.engine.impl.persistence.entity.ExecutionEntity; -import org.flowable.engine.impl.persistence.entity.ExecutionEntityManager; -import org.flowable.engine.impl.util.CommandContextUtil; - -import java.io.Serializable; - -/** - * 删除执行数据 - * - * @author may - */ -public class DeleteExecutionCmd implements Command, Serializable { - - /** - * 执行id - */ - private final String executionId; - - public DeleteExecutionCmd(String executionId) { - this.executionId = executionId; - } - - @Override - public Void execute(CommandContext commandContext) { - ExecutionEntityManager executionEntityManager = CommandContextUtil.getExecutionEntityManager(); - ExecutionEntity entity = executionEntityManager.findById(executionId); - if (entity != null) { - executionEntityManager.deleteExecutionAndRelatedData(entity, "", false, false); - } - return null; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java deleted file mode 100644 index a61daeb..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.dromara.workflow.flowable.cmd; - -import cn.hutool.core.util.ObjectUtil; -import lombok.AllArgsConstructor; -import org.dromara.common.core.utils.StreamUtils; -import org.flowable.common.engine.impl.interceptor.Command; -import org.flowable.common.engine.impl.interceptor.CommandContext; -import org.flowable.engine.impl.persistence.entity.ExecutionEntity; -import org.flowable.engine.impl.persistence.entity.ExecutionEntityManager; -import org.flowable.engine.impl.util.CommandContextUtil; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.dromara.workflow.common.constant.FlowConstant.LOOP_COUNTER; -import static org.dromara.workflow.common.constant.FlowConstant.NUMBER_OF_INSTANCES; - - -/** - * 串行减签 - * - * @author may - */ -@AllArgsConstructor -public class DeleteSequenceMultiInstanceCmd implements Command { - - /** - * 当前节点审批人员id - */ - private final String currentUserId; - - /** - * 执行id - */ - private final String executionId; - - /** - * 会签人员集合KEY - */ - private final String assigneeList; - - /** - * 减签人员 - */ - private final List assignees; - - - @Override - @SuppressWarnings("unchecked") - public Void execute(CommandContext commandContext) { - ExecutionEntityManager executionEntityManager = CommandContextUtil.getExecutionEntityManager(); - ExecutionEntity entity = executionEntityManager.findById(executionId); - // 设置流程变量 - List userIds = new ArrayList<>(); - List variable = (List) entity.getVariable(assigneeList); - for (Object o : variable) { - userIds.add(Long.valueOf(o.toString())); - } - List userIdList = new ArrayList<>(); - userIds.forEach(e -> { - Long userId = StreamUtils.findFirst(assignees, id -> ObjectUtil.equals(id, e)); - if (userId == null) { - userIdList.add(e); - } - }); - // 当前任务执行位置 - int loopCounterIndex = -1; - for (int i = 0; i < userIdList.size(); i++) { - Long userId = userIdList.get(i); - if (currentUserId.equals(userId.toString())) { - loopCounterIndex = i; - } - } - Map variables = new HashMap<>(16); - variables.put(NUMBER_OF_INSTANCES, userIdList.size()); - variables.put(assigneeList, userIdList); - variables.put(LOOP_COUNTER, loopCounterIndex); - entity.setVariables(variables); - return null; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/ExecutionChildByExecutionIdCmd.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/ExecutionChildByExecutionIdCmd.java deleted file mode 100644 index 1f3088b..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/ExecutionChildByExecutionIdCmd.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.dromara.workflow.flowable.cmd; - -import org.dromara.common.core.utils.StreamUtils; -import org.flowable.common.engine.impl.interceptor.Command; -import org.flowable.common.engine.impl.interceptor.CommandContext; -import org.flowable.engine.impl.persistence.entity.ExecutionEntity; -import org.flowable.engine.impl.persistence.entity.ExecutionEntityManager; -import org.flowable.engine.impl.util.CommandContextUtil; - -import java.io.Serializable; -import java.util.List; - -/** - * 获取并行网关执行后保留的执行实例数据 - * - * @author may - */ -public class ExecutionChildByExecutionIdCmd implements Command>, Serializable { - - /** - * 当前任务执行实例id - */ - private final String executionId; - - public ExecutionChildByExecutionIdCmd(String executionId) { - this.executionId = executionId; - } - - @Override - public List execute(CommandContext commandContext) { - ExecutionEntityManager executionEntityManager = CommandContextUtil.getExecutionEntityManager(); - // 获取当前执行数据 - ExecutionEntity executionEntity = executionEntityManager.findById(executionId); - // 通过当前执行数据的父执行,查询所有子执行数据 - List allChildrenExecution = - executionEntityManager.collectChildren(executionEntity.getParent()); - return StreamUtils.filter(allChildrenExecution, e -> !e.isActive()); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/UpdateBusinessStatusCmd.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/UpdateBusinessStatusCmd.java deleted file mode 100644 index 3ba120a..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/UpdateBusinessStatusCmd.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.dromara.workflow.flowable.cmd; - -import org.dromara.common.core.exception.ServiceException; -import org.flowable.common.engine.impl.interceptor.Command; -import org.flowable.common.engine.impl.interceptor.CommandContext; -import org.flowable.engine.impl.persistence.entity.HistoricProcessInstanceEntity; -import org.flowable.engine.impl.persistence.entity.HistoricProcessInstanceEntityManager; -import org.flowable.engine.impl.util.CommandContextUtil; - -/** - * 修改流程状态 - * - * @author may - */ -public class UpdateBusinessStatusCmd implements Command { - - private final String processInstanceId; - private final String status; - - public UpdateBusinessStatusCmd(String processInstanceId, String status) { - this.processInstanceId = processInstanceId; - this.status = status; - } - - @Override - public Boolean execute(CommandContext commandContext) { - try { - HistoricProcessInstanceEntityManager manager = CommandContextUtil.getHistoricProcessInstanceEntityManager(); - HistoricProcessInstanceEntity processInstance = manager.findById(processInstanceId); - processInstance.setBusinessStatus(status); - manager.update(processInstance); - return true; - } catch (Exception e) { - throw new ServiceException(e.getMessage()); - } - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/UpdateHiTaskInstCmd.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/UpdateHiTaskInstCmd.java deleted file mode 100644 index 42f6d1c..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/UpdateHiTaskInstCmd.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.dromara.workflow.flowable.cmd; - -import org.dromara.common.core.exception.ServiceException; -import org.flowable.common.engine.impl.interceptor.Command; -import org.flowable.common.engine.impl.interceptor.CommandContext; -import org.flowable.engine.impl.util.CommandContextUtil; -import org.flowable.task.service.HistoricTaskService; -import org.flowable.task.service.impl.persistence.entity.HistoricTaskInstanceEntity; - -import java.util.Date; -import java.util.List; - - -/** - * 修改流程历史 - * - * @author may - */ -public class UpdateHiTaskInstCmd implements Command { - - private final List taskIds; - - private final String processDefinitionId; - - private final String processInstanceId; - - public UpdateHiTaskInstCmd(List taskIds, String processDefinitionId, String processInstanceId) { - this.taskIds = taskIds; - this.processDefinitionId = processDefinitionId; - this.processInstanceId = processInstanceId; - } - - @Override - public Boolean execute(CommandContext commandContext) { - try { - HistoricTaskService historicTaskService = CommandContextUtil.getHistoricTaskService(); - for (String taskId : taskIds) { - HistoricTaskInstanceEntity historicTask = historicTaskService.getHistoricTask(taskId); - if (historicTask != null) { - historicTask.setProcessDefinitionId(processDefinitionId); - historicTask.setProcessInstanceId(processInstanceId); - historicTask.setCreateTime(new Date()); - CommandContextUtil.getHistoricTaskService().updateHistoricTask(historicTask, true); - } - } - return true; - } catch (Exception e) { - throw new ServiceException(e.getMessage()); - } - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/FlowableConfig.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/FlowableConfig.java deleted file mode 100644 index 1494bf3..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/FlowableConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.dromara.workflow.flowable.config; - -import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; -import org.dromara.workflow.flowable.handler.TaskTimeoutJobHandler; -import org.flowable.spring.SpringProcessEngineConfiguration; -import org.flowable.spring.boot.EngineConfigurationConfigurer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; - -import java.util.Collections; - - -/** - * flowable配置 - * - * @author may - */ -@Configuration -public class FlowableConfig implements EngineConfigurationConfigurer { - - @Autowired - private GlobalFlowableListener globalFlowableListener; - @Autowired - private IdentifierGenerator identifierGenerator; - - @Override - public void configure(SpringProcessEngineConfiguration processEngineConfiguration) { - processEngineConfiguration.setIdGenerator(() -> identifierGenerator.nextId(null).toString()); - processEngineConfiguration.setEventListeners(Collections.singletonList(globalFlowableListener)); - processEngineConfiguration.addCustomJobHandler(new TaskTimeoutJobHandler()); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java deleted file mode 100644 index 9bb971a..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java +++ /dev/null @@ -1,139 +0,0 @@ -package org.dromara.workflow.flowable.config; - -import cn.hutool.core.collection.CollUtil; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.tenant.helper.TenantHelper; -import org.dromara.workflow.common.enums.TaskStatusEnum; -import org.dromara.workflow.flowable.handler.TaskTimeoutJobHandler; -import org.dromara.workflow.utils.QueryUtils; -import org.flowable.bpmn.model.BoundaryEvent; -import org.flowable.bpmn.model.BpmnModel; -import org.flowable.bpmn.model.FlowElement; -import org.flowable.common.engine.api.delegate.event.*; -import org.flowable.common.engine.impl.cfg.TransactionState; -import org.flowable.engine.RepositoryService; -import org.flowable.engine.RuntimeService; -import org.flowable.engine.TaskService; -import org.flowable.engine.impl.util.CommandContextUtil; -import org.flowable.engine.runtime.Execution; -import org.flowable.engine.task.Comment; -import org.flowable.job.service.TimerJobService; -import org.flowable.job.service.impl.persistence.entity.JobEntity; -import org.flowable.job.service.impl.persistence.entity.TimerJobEntity; -import org.flowable.task.api.Task; -import org.flowable.task.service.impl.persistence.entity.TaskEntity; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; - -import java.util.Date; -import java.util.List; - - -/** - * 引擎调度监听 - * - * @author may - */ -@Component -public class GlobalFlowableListener implements FlowableEventListener { - - @Autowired - @Lazy - private TaskService taskService; - - @Autowired - @Lazy - private RuntimeService runtimeService; - - @Autowired - @Lazy - private RepositoryService repositoryService; - - @Value("${flowable.async-executor-activate}") - private boolean asyncExecutorActivate; - - @Override - public void onEvent(FlowableEvent flowableEvent) { - if (flowableEvent instanceof FlowableEngineEvent flowableEngineEvent) { - FlowableEngineEventType engineEventType = (FlowableEngineEventType) flowableEvent.getType(); - switch (engineEventType) { - case JOB_EXECUTION_SUCCESS -> jobExecutionSuccess((FlowableEngineEntityEvent) flowableEngineEvent); - case TASK_DUEDATE_CHANGED, TASK_CREATED -> { - FlowableEntityEvent flowableEntityEvent = (FlowableEntityEvent) flowableEngineEvent; - Object entityObject = flowableEntityEvent.getEntity(); - TaskEntity task = (TaskEntity) entityObject; - if (asyncExecutorActivate && task.getDueDate() != null && task.getDueDate().after(new Date())) { - //删除之前已经存在的定时任务 - TimerJobService timerJobService = CommandContextUtil.getTimerJobService(); - List timerJobEntityList = timerJobService.findTimerJobsByProcessInstanceId(task.getProcessInstanceId()); - if (!CollUtil.isEmpty(timerJobEntityList)) { - for (TimerJobEntity timerJobEntity : timerJobEntityList) { - String taskId = timerJobEntity.getJobHandlerConfiguration(); - if (task.getId().equals(taskId)) { - timerJobService.deleteTimerJob(timerJobEntity); - } - } - } - //创建job对象 - TimerJobEntity timer = timerJobService.createTimerJob(); - timer.setTenantId(TenantHelper.getTenantId()); - //设置job类型 - timer.setJobType(JobEntity.JOB_TYPE_TIMER); - timer.setJobHandlerType(TaskTimeoutJobHandler.TYPE); - timer.setDuedate(task.getDueDate()); - timer.setProcessInstanceId(task.getProcessInstanceId()); - //设置任务id - timer.setJobHandlerConfiguration(task.getId()); - //保存并触发事件 - timerJobService.scheduleTimerJob(timer); - } - } - } - } - } - - @Override - public boolean isFailOnException() { - return true; - } - - @Override - public boolean isFireOnTransactionLifecycleEvent() { - return false; - } - - @Override - public String getOnTransaction() { - return TransactionState.COMMITTED.name(); - } - - /** - * 处理边界定时事件自动审批记录 - * - * @param event 事件 - */ - protected void jobExecutionSuccess(FlowableEngineEntityEvent event) { - if (event != null && StringUtils.isNotBlank(event.getExecutionId())) { - Execution execution = runtimeService.createExecutionQuery().executionId(event.getExecutionId()).singleResult(); - if (execution != null) { - BpmnModel bpmnModel = repositoryService.getBpmnModel(event.getProcessDefinitionId()); - FlowElement flowElement = bpmnModel.getFlowElement(execution.getActivityId()); - if (flowElement instanceof BoundaryEvent) { - String attachedToRefId = ((BoundaryEvent) flowElement).getAttachedToRefId(); - List list = runtimeService.createExecutionQuery().activityId(attachedToRefId).list(); - for (Execution ex : list) { - Task task = QueryUtils.taskQuery().executionId(ex.getId()).singleResult(); - if (task != null) { - List taskComments = taskService.getTaskComments(task.getId()); - if (CollUtil.isEmpty(taskComments)) { - taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), "超时自动审批!"); - } - } - } - } - } - } - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java deleted file mode 100644 index 69ae70a..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.dromara.workflow.flowable.handler; - -import org.dromara.common.core.domain.event.ProcessEvent; -import org.dromara.common.core.domain.event.ProcessTaskEvent; -import org.dromara.common.core.utils.SpringUtils; -import org.springframework.stereotype.Component; - -/** - * 流程监听服务 - * - * @author may - * @date 2024-06-02 - */ -@Component -public class FlowProcessEventHandler { - - /** - * 总体流程监听(例如: 提交 退回 撤销 终止 作废等) - * - * @param key 流程key - * @param businessKey 业务id - * @param status 状态 - * @param submit 当为true时为申请人节点办理 - */ - public void processHandler(String key, String businessKey, String status, boolean submit) { - ProcessEvent processEvent = new ProcessEvent(); - processEvent.setKey(key); - processEvent.setBusinessKey(businessKey); - processEvent.setStatus(status); - processEvent.setSubmit(submit); - SpringUtils.context().publishEvent(processEvent); - } - - /** - * 执行办理任务监听 - * - * @param key 流程key - * @param taskDefinitionKey 审批节点key - * @param taskId 任务id - * @param businessKey 业务id - */ - public void processTaskHandler(String key, String taskDefinitionKey, String taskId, String businessKey) { - ProcessTaskEvent processTaskEvent = new ProcessTaskEvent(); - processTaskEvent.setKey(key); - processTaskEvent.setTaskDefinitionKey(taskDefinitionKey); - processTaskEvent.setTaskId(taskId); - processTaskEvent.setBusinessKey(businessKey); - SpringUtils.context().publishEvent(processTaskEvent); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/TaskTimeoutJobHandler.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/TaskTimeoutJobHandler.java deleted file mode 100644 index 61c9388..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/TaskTimeoutJobHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.dromara.workflow.flowable.handler; - -import org.dromara.workflow.common.enums.TaskStatusEnum; -import org.flowable.common.engine.impl.interceptor.CommandContext; -import org.flowable.engine.TaskService; -import org.flowable.engine.impl.jobexecutor.TimerEventHandler; -import org.flowable.engine.impl.util.CommandContextUtil; -import org.flowable.job.service.JobHandler; -import org.flowable.job.service.impl.persistence.entity.JobEntity; -import org.flowable.task.api.Task; -import org.flowable.variable.api.delegate.VariableScope; - -/** - * 办理超时(过期)任务 - * - * @author may - */ -public class TaskTimeoutJobHandler extends TimerEventHandler implements JobHandler { - - public static final String TYPE = "taskTimeout"; - - @Override - public String getType() { - return TYPE; - } - - @Override - public void execute(JobEntity job, String configuration, VariableScope variableScope, CommandContext commandContext) { - TaskService taskService = CommandContextUtil.getProcessEngineConfiguration(commandContext) - .getTaskService(); - Task task = taskService.createTaskQuery().taskId(configuration).singleResult(); - if (task != null) { - taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.TIMEOUT.getStatus(), "超时自动审批!"); - taskService.complete(configuration); - } - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiProcinstMapper.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiProcinstMapper.java deleted file mode 100644 index a3a41c9..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiProcinstMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.dromara.workflow.mapper; - -import com.baomidou.mybatisplus.annotation.InterceptorIgnore; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.dromara.workflow.domain.ActHiProcinst; - -/** - * 流程实例Mapper接口 - * - * @author may - * @date 2023-07-22 - */ -@InterceptorIgnore(tenantLine = "true") -public interface ActHiProcinstMapper extends BaseMapperPlus { - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiTaskinstMapper.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiTaskinstMapper.java deleted file mode 100644 index 63b394b..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiTaskinstMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.dromara.workflow.mapper; - -import com.baomidou.mybatisplus.annotation.InterceptorIgnore; -import org.dromara.workflow.domain.ActHiTaskinst; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 流程历史任务Mapper接口 - * - * @author may - * @date 2024-03-02 - */ -@InterceptorIgnore(tenantLine = "true") -public interface ActHiTaskinstMapper extends BaseMapperPlus { - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java deleted file mode 100644 index 63c5ecb..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.dromara.workflow.mapper; - -import com.baomidou.mybatisplus.annotation.InterceptorIgnore; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.apache.ibatis.annotations.Param; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.dromara.workflow.domain.vo.TaskVo; - - -/** - * 任务信息Mapper接口 - * - * @author may - * @date 2024-03-02 - */ -@InterceptorIgnore(tenantLine = "true") -public interface ActTaskMapper extends BaseMapperPlus { - /** - * 获取待办信息 - * - * @param page 分页 - * @param queryWrapper 条件 - * @return 结果 - */ - Page getTaskWaitByPage(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); - - /** - * 获取已办 - * - * @param page 分页 - * @param queryWrapper 条件 - * @return 结果 - */ - Page getTaskFinishByPage(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); - - /** - * 查询当前用户的抄送 - * - * @param page 分页 - * @param queryWrapper 条件 - * @return 结果 - */ - Page getTaskCopyByPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/TestLeaveMapper.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/TestLeaveMapper.java deleted file mode 100644 index cd1edba..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/TestLeaveMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.workflow.mapper; - -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.dromara.workflow.domain.TestLeave; -import org.dromara.workflow.domain.vo.TestLeaveVo; - -/** - * 请假Mapper接口 - * - * @author may - * @date 2023-07-21 - */ -public interface TestLeaveMapper extends BaseMapperPlus { - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfCategoryMapper.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfCategoryMapper.java deleted file mode 100644 index 98aea02..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfCategoryMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.workflow.mapper; - -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.dromara.workflow.domain.WfCategory; -import org.dromara.workflow.domain.vo.WfCategoryVo; - -/** - * 流程分类Mapper接口 - * - * @author may - * @date 2023-06-27 - */ -public interface WfCategoryMapper extends BaseMapperPlus { - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfDefinitionConfigMapper.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfDefinitionConfigMapper.java deleted file mode 100644 index ee20882..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfDefinitionConfigMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.workflow.mapper; - -import org.dromara.workflow.domain.WfDefinitionConfig; -import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 流程定义配置Mapper接口 - * - * @author may - * @date 2024-03-18 - */ -public interface WfDefinitionConfigMapper extends BaseMapperPlus { - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormManageMapper.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormManageMapper.java deleted file mode 100644 index acf8111..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormManageMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.workflow.mapper; - -import org.dromara.workflow.domain.WfFormManage; -import org.dromara.workflow.domain.vo.WfFormManageVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 表单管理Mapper接口 - * - * @author may - * @date 2024-03-29 - */ -public interface WfFormManageMapper extends BaseMapperPlus { - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfNodeConfigMapper.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfNodeConfigMapper.java deleted file mode 100644 index d2aecac..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfNodeConfigMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.workflow.mapper; - -import org.dromara.workflow.domain.WfNodeConfig; -import org.dromara.workflow.domain.vo.WfNodeConfigVo; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 节点配置Mapper接口 - * - * @author may - * @date 2024-03-30 - */ -public interface WfNodeConfigMapper extends BaseMapperPlus { - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfTaskBackNodeMapper.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfTaskBackNodeMapper.java deleted file mode 100644 index 9b291fe..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfTaskBackNodeMapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.dromara.workflow.mapper; - -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.dromara.workflow.domain.WfTaskBackNode; - -/** - * 节点驳回记录Mapper接口 - * - * @author may - * @date 2024-03-13 - */ -public interface WfTaskBackNodeMapper extends BaseMapperPlus { -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiProcinstService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiProcinstService.java deleted file mode 100644 index e802c69..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiProcinstService.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.dromara.workflow.service; - - -import org.dromara.workflow.domain.ActHiProcinst; - -import java.util.List; - -/** - * 流程实例Service接口 - * - * @author may - * @date 2023-07-22 - */ -public interface IActHiProcinstService { - - /** - * 按照业务id查询 - * - * @param businessKeys 业务id - * @return 结果 - */ - List selectByBusinessKeyIn(List businessKeys); - - /** - * 按照业务id查询 - * - * @param businessKey 业务id - * @return 结果 - */ - ActHiProcinst selectByBusinessKey(String businessKey); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiTaskinstService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiTaskinstService.java deleted file mode 100644 index ad286e2..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiTaskinstService.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.dromara.workflow.service; - - -/** - * 流程历史任务Service接口 - * - * @author may - * @date 2024-03-02 - */ -public interface IActHiTaskinstService { -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActModelService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActModelService.java deleted file mode 100644 index 4a6d170..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActModelService.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.dromara.workflow.service; - -import jakarta.servlet.http.HttpServletResponse; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.workflow.domain.bo.ModelBo; -import org.dromara.workflow.domain.vo.ModelVo; -import org.flowable.engine.repository.Model; - -import java.util.List; - - -/** - * 模型管理 服务层 - * - * @author may - */ -public interface IActModelService { - /** - * 分页查询模型 - * - * @param modelBo 模型参数 - * @param pageQuery 参数 - * @return 返回分页列表 - */ - TableDataInfo page(ModelBo modelBo, PageQuery pageQuery); - - /** - * 新增模型 - * - * @param modelBo 模型请求对象 - * @return 结果 - */ - boolean saveNewModel(ModelBo modelBo); - - /** - * 查询模型 - * - * @param modelId 模型id - * @return 模型数据 - */ - ModelVo getInfo(String modelId); - - /** - * 修改模型信息 - * - * @param modelBo 模型数据 - * @return 结果 - */ - boolean update(ModelBo modelBo); - - /** - * 编辑模型XML - * - * @param modelBo 模型数据 - * @return 结果 - */ - boolean editModelXml(ModelBo modelBo); - - /** - * 模型部署 - * - * @param id 模型id - * @return 结果 - */ - boolean modelDeploy(String id); - - /** - * 导出模型zip压缩包 - * - * @param modelIds 模型id - * @param response 响应 - */ - void exportZip(List modelIds, HttpServletResponse response); - - /** - * 复制模型 - * - * @param modelBo 模型数据 - * @return 结果 - */ - boolean copyModel(ModelBo modelBo); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java deleted file mode 100644 index 5d00e41..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.workflow.domain.bo.ProcessDefinitionBo; -import org.dromara.workflow.domain.vo.ProcessDefinitionVo; -import org.springframework.web.multipart.MultipartFile; - -import java.util.List; - -/** - * 流程定义 服务层 - * - * @author may - */ -public interface IActProcessDefinitionService { - /** - * 分页查询 - * - * @param processDefinitionBo 参数 - * @param pageQuery 分页 - * @return 返回分页列表 - */ - TableDataInfo page(ProcessDefinitionBo processDefinitionBo, PageQuery pageQuery); - - /** - * 查询历史流程定义列表 - * - * @param key 流程定义key - * @return 结果 - */ - List getListByKey(String key); - - /** - * 查看流程定义图片 - * - * @param processDefinitionId 流程定义id - * @return 结果 - */ - String definitionImage(String processDefinitionId); - - /** - * 查看流程定义xml文件 - * - * @param processDefinitionId 流程定义id - * @return 结果 - */ - String definitionXml(String processDefinitionId); - - /** - * 删除流程定义 - * - * @param deploymentIds 部署id - * @param processDefinitionIds 流程定义id - * @return 结果 - */ - boolean deleteDeployment(List deploymentIds, List processDefinitionIds); - - /** - * 激活或者挂起流程定义 - * - * @param processDefinitionId 流程定义id - * @return 结果 - */ - boolean updateDefinitionState(String processDefinitionId); - - /** - * 迁移流程定义 - * - * @param currentProcessDefinitionId 当前流程定义id - * @param fromProcessDefinitionId 需要迁移到的流程定义id - * @return 结果 - */ - boolean migrationDefinition(String currentProcessDefinitionId, String fromProcessDefinitionId); - - /** - * 流程定义转换为模型 - * - * @param processDefinitionId 流程定义id - * @return 结果 - */ - boolean convertToModel(String processDefinitionId); - - /** - * 通过zip或xml部署流程定义 - * - * @param file 文件 - * @param categoryCode 分类 - */ - void deployByFile(MultipartFile file, String categoryCode); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java deleted file mode 100644 index ca3b6fb..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.workflow.domain.bo.ProcessInstanceBo; -import org.dromara.workflow.domain.bo.ProcessInvalidBo; -import org.dromara.workflow.domain.bo.TaskUrgingBo; -import org.dromara.workflow.domain.vo.ActHistoryInfoVo; -import org.dromara.workflow.domain.vo.ProcessInstanceVo; - -import java.util.List; -import java.util.Map; - -/** - * 流程实例 服务层 - * - * @author may - */ -public interface IActProcessInstanceService { - /** - * 通过流程实例id获取历史流程图 - * - * @param businessKey 流程实例id - * @return 结果 - */ - String getHistoryImage(String businessKey); - - /** - * 通过业务id获取历史流程图运行中,历史等节点 - * - * @param businessKey 业务id - * @return 结果 - */ - Map getHistoryList(String businessKey); - - /** - * 分页查询正在运行的流程实例 - * - * @param processInstanceBo 参数 - * @param pageQuery 分页 - * @return 结果 - */ - TableDataInfo getPageByRunning(ProcessInstanceBo processInstanceBo, PageQuery pageQuery); - - /** - * 分页查询已结束的流程实例 - * - * @param processInstanceBo 参数 - * @param pageQuery 分页 - * @return 结果 - */ - TableDataInfo getPageByFinish(ProcessInstanceBo processInstanceBo, PageQuery pageQuery); - - /** - * 获取审批记录 - * - * @param businessKey 业务id - * @return 结果 - */ - List getHistoryRecord(String businessKey); - - /** - * 作废流程实例,不会删除历史记录(删除运行中的实例) - * - * @param processInvalidBo 参数 - * @return 结果 - */ - boolean deleteRunInstance(ProcessInvalidBo processInvalidBo); - - /** - * 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息 - * - * @param businessKeys 业务id - * @return 结果 - */ - boolean deleteRunAndHisInstance(List businessKeys); - - /** - * 已完成的实例 删除程实例,删除历史记录,删除业务与流程关联信息 - * - * @param businessKeys 业务id - * @return 结果 - */ - boolean deleteFinishAndHisInstance(List businessKeys); - - /** - * 撤销流程申请 - * - * @param businessKey 业务id - * @return 结果 - */ - boolean cancelProcessApply(String businessKey); - - /** - * 分页查询当前登录人单据 - * - * @param processInstanceBo 参数 - * @param pageQuery 分页 - * @return 结果 - */ - TableDataInfo getPageByCurrent(ProcessInstanceBo processInstanceBo, PageQuery pageQuery); - - /** - * 任务催办(给当前任务办理人发送站内信,邮件,短信等) - * - * @param taskUrgingBo 任务催办 - * @return 结果 - */ - boolean taskUrging(TaskUrgingBo taskUrgingBo); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java deleted file mode 100644 index 8e9f763..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java +++ /dev/null @@ -1,161 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.workflow.domain.bo.*; -import org.dromara.workflow.domain.vo.TaskVo; -import org.dromara.workflow.domain.vo.VariableVo; - -import java.util.List; -import java.util.Map; - -/** - * 任务 服务层 - * - * @author may - */ -public interface IActTaskService { - /** - * 启动任务 - * - * @param startProcessBo 启动流程参数 - * @return 结果 - */ - Map startWorkFlow(StartProcessBo startProcessBo); - - - /** - * 办理任务 - * - * @param completeTaskBo 办理任务参数 - * @return 结果 - */ - boolean completeTask(CompleteTaskBo completeTaskBo); - - /** - * 查询当前用户的待办任务 - * - * @param taskBo 参数 - * @param pageQuery 分页 - * @return 结果 - */ - TableDataInfo getPageByTaskWait(TaskBo taskBo, PageQuery pageQuery); - - /** - * 查询当前租户所有待办任务 - * - * @param taskBo 参数 - * @param pageQuery 分页 - * @return 结果 - */ - TableDataInfo getPageByAllTaskWait(TaskBo taskBo, PageQuery pageQuery); - - - /** - * 查询当前用户的已办任务 - * - * @param taskBo 参数 - * @param pageQuery 参数 - * @return 结果 - */ - TableDataInfo getPageByTaskFinish(TaskBo taskBo, PageQuery pageQuery); - - /** - * 查询当前用户的抄送 - * - * @param taskBo 参数 - * @param pageQuery 参数 - * @return 结果 - */ - TableDataInfo getPageByTaskCopy(TaskBo taskBo, PageQuery pageQuery); - - /** - * 查询当前租户所有已办任务 - * - * @param taskBo 参数 - * @param pageQuery 参数 - * @return 结果 - */ - TableDataInfo getPageByAllTaskFinish(TaskBo taskBo, PageQuery pageQuery); - - /** - * 委派任务 - * - * @param delegateBo 参数 - * @return 结果 - */ - boolean delegateTask(DelegateBo delegateBo); - - /** - * 终止任务 - * - * @param terminationBo 参数 - * @return 结果 - */ - boolean terminationTask(TerminationBo terminationBo); - - /** - * 转办任务 - * - * @param transmitBo 参数 - * @return 结果 - */ - boolean transferTask(TransmitBo transmitBo); - - /** - * 会签任务加签 - * - * @param addMultiBo 参数 - * @return 结果 - */ - boolean addMultiInstanceExecution(AddMultiBo addMultiBo); - - /** - * 会签任务减签 - * - * @param deleteMultiBo 参数 - * @return 结果 - */ - boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo); - - /** - * 驳回审批 - * - * @param backProcessBo 参数 - * @return 流程实例id - */ - String backProcess(BackProcessBo backProcessBo); - - /** - * 修改任务办理人 - * - * @param taskIds 任务id - * @param userId 办理人id - * @return 结果 - */ - boolean updateAssignee(String[] taskIds, String userId); - - /** - * 查询流程变量 - * - * @param taskId 任务id - * @return 结果 - */ - List getInstanceVariable(String taskId); - - /** - * 查询工作流任务用户选择加签人员 - * - * @param taskId 任务id - * @return 结果 - */ - String getTaskUserIdsByAddMultiInstance(String taskId); - - /** - * 查询工作流选择减签人员 - * - * @param taskId 任务id - * @return 结果 - */ - List getListByDeleteMultiInstance(String taskId); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ITestLeaveService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ITestLeaveService.java deleted file mode 100644 index 943c919..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ITestLeaveService.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.workflow.domain.bo.TestLeaveBo; -import org.dromara.workflow.domain.vo.TestLeaveVo; - -import java.util.Collection; -import java.util.List; - -/** - * 请假Service接口 - * - * @author may - * @date 2023-07-21 - */ -public interface ITestLeaveService { - - /** - * 查询请假 - */ - TestLeaveVo queryById(Long id); - - /** - * 查询请假列表 - */ - TableDataInfo queryPageList(TestLeaveBo bo, PageQuery pageQuery); - - /** - * 查询请假列表 - */ - List queryList(TestLeaveBo bo); - - /** - * 新增请假 - */ - TestLeaveVo insertByBo(TestLeaveBo bo); - - /** - * 修改请假 - */ - TestLeaveVo updateByBo(TestLeaveBo bo); - - /** - * 校验并批量删除请假信息 - */ - Boolean deleteWithValidByIds(Collection ids); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfCategoryService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfCategoryService.java deleted file mode 100644 index acf0aa2..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfCategoryService.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.workflow.domain.WfCategory; -import org.dromara.workflow.domain.bo.WfCategoryBo; -import org.dromara.workflow.domain.vo.WfCategoryVo; - -import java.util.Collection; -import java.util.List; - -/** - * 流程分类Service接口 - * - * @author may - * @date 2023-06-28 - */ -public interface IWfCategoryService { - - /** - * 查询流程分类 - */ - WfCategoryVo queryById(Long id); - - - /** - * 查询流程分类列表 - */ - List queryList(WfCategoryBo bo); - - /** - * 新增流程分类 - */ - Boolean insertByBo(WfCategoryBo bo); - - /** - * 修改流程分类 - */ - Boolean updateByBo(WfCategoryBo bo); - - /** - * 校验并批量删除流程分类信息 - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - /** - * 按照类别编码查询 - * - * @param categoryCode 分类比吗 - * @return 结果 - */ - WfCategory queryByCategoryCode(String categoryCode); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java deleted file mode 100644 index fe5cf7a..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; -import org.dromara.workflow.domain.bo.WfDefinitionConfigBo; - -import java.util.Collection; -import java.util.List; - -/** - * 流程定义配置Service接口 - * - * @author may - * @date 2024-03-18 - */ -public interface IWfDefinitionConfigService { - - /** - * 查询流程定义配置 - * - * @param definitionId 流程定义id - * @return 结果 - */ - WfDefinitionConfigVo getByDefId(String definitionId); - - /** - * 查询流程定义配置 - * - * @param tableName 表名 - * @return 结果 - */ - WfDefinitionConfigVo getByTableNameLastVersion(String tableName); - - /** - * 查询流程定义配置 - * - * @param definitionId 流程定义id - * @param tableName 表名 - * @return 结果 - */ - WfDefinitionConfigVo getByDefIdAndTableName(String definitionId, String tableName); - - /** - * 查询流程定义配置排除当前查询的流程定义 - * - * @param definitionId 流程定义id - * @param tableName 表名 - * @return 结果 - */ - List getByTableNameNotDefId(String tableName, String definitionId); - - /** - * 查询流程定义配置列表 - * - * @param definitionIds 流程定义id - * @return 结果 - */ - List queryList(List definitionIds); - - - /** - * 新增流程定义配置 - * - * @param bo 参数 - * @return 结果 - */ - Boolean saveOrUpdate(WfDefinitionConfigBo bo); - - /** - * 删除 - * - * @param ids id - * @return 结果 - */ - Boolean deleteByIds(Collection ids); - - /** - * 按照流程定义id删除 - * - * @param ids 流程定义id - * @return 结果 - */ - Boolean deleteByDefIds(Collection ids); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormManageService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormManageService.java deleted file mode 100644 index 2ca2264..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormManageService.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.workflow.domain.vo.WfFormManageVo; -import org.dromara.workflow.domain.bo.WfFormManageBo; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; - -import java.util.Collection; -import java.util.List; - -/** - * 表单管理Service接口 - * - * @author may - * @date 2024-03-29 - */ -public interface IWfFormManageService { - - /** - * 查询表单管理 - * - * @param id 主键 - * @return 结果 - */ - WfFormManageVo queryById(Long id); - - /** - * 查询表单管理 - * - * @param ids 主键 - * @return 结果 - */ - List queryByIds(List ids); - - /** - * 查询表单管理列表 - * - * @param bo 参数 - * @param pageQuery 分页 - * @return 结果 - */ - TableDataInfo queryPageList(WfFormManageBo bo, PageQuery pageQuery); - - /** - * 查询表单管理列表 - * - * @return 结果 - */ - List selectList(); - /** - * 查询表单管理列表 - * - * @param bo 参数 - * @return 结果 - */ - List queryList(WfFormManageBo bo); - - /** - * 新增表单管理 - * - * @param bo 参数 - * @return 结果 - */ - Boolean insertByBo(WfFormManageBo bo); - - /** - * 修改表单管理 - * - * @param bo 参数 - * @return 结果 - */ - Boolean updateByBo(WfFormManageBo bo); - - /** - * 批量删除表单管理信息 - * - * @param ids 主键 - * @return 结果 - */ - Boolean deleteByIds(Collection ids); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfNodeConfigService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfNodeConfigService.java deleted file mode 100644 index 5e64d64..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfNodeConfigService.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.workflow.domain.WfNodeConfig; -import org.dromara.workflow.domain.vo.WfNodeConfigVo; - -import java.util.Collection; -import java.util.List; - -/** - * 节点配置Service接口 - * - * @author may - * @date 2024-03-30 - */ -public interface IWfNodeConfigService { - - /** - * 查询节点配置 - * - * @param id 主键 - * @return 结果 - */ - WfNodeConfigVo queryById(Long id); - - /** - * 保存节点配置 - * - * @param list 参数 - * @return 结果 - */ - Boolean saveOrUpdate(List list); - - /** - * 批量删除节点配置信息 - * - * @param ids 主键 - * @return 结果 - */ - Boolean deleteByIds(Collection ids); - - /** - * 按照流程定义id删除 - * - * @param ids 流程定义id - * @return 结果 - */ - Boolean deleteByDefIds(Collection ids); - - /** - * 按照流程定义id查询 - * - * @param ids 流程定义id - * @return 结果 - */ - List selectByDefIds(Collection ids); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfTaskBackNodeService.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfTaskBackNodeService.java deleted file mode 100644 index 97f9406..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfTaskBackNodeService.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.dromara.workflow.service; - - -import org.dromara.workflow.domain.WfTaskBackNode; -import org.flowable.task.api.Task; - -import java.util.List; - -/** - * 节点驳回记录Service接口 - * - * @author may - * @date 2024-03-13 - */ -public interface IWfTaskBackNodeService { - - /** - * 记录审批节点 - * - * @param task 任务 - */ - void recordExecuteNode(Task task); - - /** - * 按流程实例id查询 - * - * @param processInstanceId 流程实例id - * @return 结果 - */ - List getListByInstanceId(String processInstanceId); - - /** - * 按照流程实例id,节点id查询 - * - * @param processInstanceId 流程实例id - * @param nodeId 节点id - * @return 结果 - */ - WfTaskBackNode getListByInstanceIdAndNodeId(String processInstanceId, String nodeId); - - /** - * 删除驳回后的节点 - * - * @param processInstanceId 流程实例id - * @param targetActivityId 节点id - * @return 结果 - */ - boolean deleteBackTaskNode(String processInstanceId, String targetActivityId); - - /** - * 按流程实例id删除 - * - * @param processInstanceId 流程实例id - * @return 结果 - */ - boolean deleteByInstanceId(String processInstanceId); - - /** - * 按流程实例id删除 - * - * @param processInstanceIds 流程实例id - * @return 结果 - */ - boolean deleteByInstanceIds(List processInstanceIds); -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiProcinstServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiProcinstServiceImpl.java deleted file mode 100644 index 06d607b..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiProcinstServiceImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.dromara.workflow.service.impl; - - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.RequiredArgsConstructor; -import org.dromara.common.tenant.helper.TenantHelper; -import org.dromara.workflow.domain.ActHiProcinst; -import org.dromara.workflow.mapper.ActHiProcinstMapper; -import org.dromara.workflow.service.IActHiProcinstService; -import org.springframework.stereotype.Service; - -import java.util.List; - - -/** - * 流程实例Service业务层处理 - * - * @author may - * @date 2023-07-22 - */ -@RequiredArgsConstructor -@Service -public class ActHiProcinstServiceImpl implements IActHiProcinstService { - - private final ActHiProcinstMapper baseMapper; - - /** - * 按照业务id查询 - * - * @param businessKeys 业务id - */ - @Override - public List selectByBusinessKeyIn(List businessKeys) { - return baseMapper.selectList(new LambdaQueryWrapper() - .in(ActHiProcinst::getBusinessKey, businessKeys) - .eq(TenantHelper.isEnable(), ActHiProcinst::getTenantId, TenantHelper.getTenantId())); - } - - /** - * 按照业务id查询 - * - * @param businessKey 业务id - */ - @Override - public ActHiProcinst selectByBusinessKey(String businessKey) { - return baseMapper.selectOne(new LambdaQueryWrapper() - .eq(ActHiProcinst::getBusinessKey, businessKey) - .eq(TenantHelper.isEnable(), ActHiProcinst::getTenantId, TenantHelper.getTenantId())); - - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiTaskinstServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiTaskinstServiceImpl.java deleted file mode 100644 index 5548f22..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiTaskinstServiceImpl.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.dromara.workflow.service.impl; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.dromara.workflow.service.IActHiTaskinstService; - - -/** - * 流程历史任务Service业务层处理 - * - * @author may - * @date 2024-03-02 - */ -@RequiredArgsConstructor -@Service -public class ActHiTaskinstServiceImpl implements IActHiTaskinstService { - -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java deleted file mode 100644 index 217538e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java +++ /dev/null @@ -1,431 +0,0 @@ -package org.dromara.workflow.service.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.Validator; -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.ZipUtil; -import cn.hutool.json.JSONUtil; -import com.alibaba.excel.util.StringUtils; -import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.batik.transcoder.TranscoderInput; -import org.apache.batik.transcoder.TranscoderOutput; -import org.apache.batik.transcoder.image.PNGTranscoder; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.tenant.helper.TenantHelper; -import org.dromara.workflow.common.constant.FlowConstant; -import org.dromara.workflow.domain.WfNodeConfig; -import org.dromara.workflow.domain.bo.ModelBo; -import org.dromara.workflow.domain.bo.WfDefinitionConfigBo; -import org.dromara.workflow.domain.vo.ModelVo; -import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; -import org.dromara.workflow.service.IActModelService; -import org.dromara.workflow.service.IWfDefinitionConfigService; -import org.dromara.workflow.service.IWfNodeConfigService; -import org.dromara.workflow.utils.ModelUtils; -import org.dromara.workflow.utils.QueryUtils; -import org.flowable.bpmn.converter.BpmnXMLConverter; -import org.flowable.bpmn.model.BpmnModel; -import org.flowable.bpmn.model.Process; -import org.flowable.bpmn.model.UserTask; -import org.flowable.engine.RepositoryService; -import org.flowable.engine.repository.Deployment; -import org.flowable.engine.repository.Model; -import org.flowable.engine.repository.ModelQuery; -import org.flowable.engine.repository.ProcessDefinition; -import org.flowable.validation.ValidationError; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -/** - * 模型管理 服务层实现 - * - * @author may - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class ActModelServiceImpl implements IActModelService { - - @Autowired(required = false) - private RepositoryService repositoryService; - private final IWfNodeConfigService wfNodeConfigService; - private final IWfDefinitionConfigService wfDefinitionConfigService; - - /** - * 分页查询模型 - * - * @param modelBo 模型参数 - * @return 返回分页列表 - */ - @Override - public TableDataInfo page(ModelBo modelBo, PageQuery pageQuery) { - ModelQuery query = QueryUtils.modelQuery(); - if (StringUtils.isNotBlank(modelBo.getName())) { - query.modelNameLike("%" + modelBo.getName() + "%"); - } - if (StringUtils.isNotBlank(modelBo.getKey())) { - query.modelKey(modelBo.getKey()); - } - if (StringUtils.isNotBlank(modelBo.getCategoryCode())) { - query.modelCategory(modelBo.getCategoryCode()); - } - query.orderByLastUpdateTime().desc(); - // 创建时间降序排列 - query.orderByCreateTime().desc(); - // 分页查询 - List modelList = query.listPage(pageQuery.getFirstNum(), pageQuery.getPageSize()); - // 总记录数 - long total = query.count(); - TableDataInfo build = TableDataInfo.build(); - build.setRows(modelList); - build.setTotal(total); - return build; - } - - /** - * 新增模型 - * - * @param modelBo 模型请求对象 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean saveNewModel(ModelBo modelBo) { - try { - int version = 0; - String key = modelBo.getKey(); - String name = modelBo.getName(); - String description = modelBo.getDescription(); - String categoryCode = modelBo.getCategoryCode(); - String xml = modelBo.getXml(); - Model checkModel = QueryUtils.modelQuery().modelKey(key).singleResult(); - if (ObjectUtil.isNotNull(checkModel)) { - throw new ServiceException("模型key已存在!"); - } - //初始空的模型 - Model model = repositoryService.newModel(); - model.setKey(key); - model.setName(name); - model.setVersion(version); - model.setCategory(categoryCode); - model.setMetaInfo(description); - model.setTenantId(TenantHelper.getTenantId()); - //保存初始化的模型基本信息数据 - repositoryService.saveModel(model); - repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(xml)); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 查询模型 - * - * @param id 模型id - * @return 模型数据 - */ - @Override - public ModelVo getInfo(String id) { - ModelVo modelVo = new ModelVo(); - Model model = repositoryService.getModel(id); - if (model != null) { - try { - byte[] modelEditorSource = repositoryService.getModelEditorSource(model.getId()); - modelVo.setXml(StrUtil.utf8Str(modelEditorSource)); - modelVo.setId(model.getId()); - modelVo.setKey(model.getKey()); - modelVo.setName(model.getName()); - modelVo.setCategoryCode(model.getCategory()); - modelVo.setDescription(model.getMetaInfo()); - return modelVo; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - return modelVo; - } - - /** - * 修改模型信息 - * - * @param modelBo 模型数据 - * @return 结果 - */ - @Override - public boolean update(ModelBo modelBo) { - try { - Model model = repositoryService.getModel(modelBo.getId()); - List list = QueryUtils.modelQuery().modelKey(modelBo.getKey()).list(); - list.stream().filter(e -> !e.getId().equals(model.getId())).findFirst().ifPresent(e -> { - throw new ServiceException("模型KEY已存在!"); - }); - model.setCategory(modelBo.getCategoryCode()); - model.setMetaInfo(modelBo.getDescription()); - repositoryService.saveModel(model); - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - return true; - } - - /** - * 编辑模型XML - * - * @param modelBo 模型数据 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean editModelXml(ModelBo modelBo) { - try { - String xml = modelBo.getXml(); - String svg = modelBo.getSvg(); - String modelId = modelBo.getId(); - String key = modelBo.getKey(); - String name = modelBo.getName(); - BpmnModel bpmnModel = ModelUtils.xmlToBpmnModel(xml); - ModelUtils.checkBpmnModel(bpmnModel); - Model model = repositoryService.getModel(modelId); - List list = QueryUtils.modelQuery().modelKey(key).list(); - list.stream().filter(e -> !e.getId().equals(model.getId())).findFirst().ifPresent(e -> { - throw new ServiceException("模型KEY已存在!"); - }); - // 校验key命名规范 - if (!Validator.isMatchRegex(FlowConstant.MODEL_KEY_PATTERN, key)) { - throw new ServiceException("模型标识KEY只能字符或者下划线开头!"); - } - model.setKey(key); - model.setName(name); - model.setVersion(model.getVersion() + 1); - repositoryService.saveModel(model); - repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(xml)); - // 转换图片 - InputStream svgStream = new ByteArrayInputStream(StrUtil.utf8Bytes(svg)); - TranscoderInput input = new TranscoderInput(svgStream); - - PNGTranscoder transcoder = new PNGTranscoder(); - ByteArrayOutputStream outStream = new ByteArrayOutputStream(); - TranscoderOutput output = new TranscoderOutput(outStream); - - transcoder.transcode(input, output); - final byte[] result = outStream.toByteArray(); - repositoryService.addModelEditorSourceExtra(model.getId(), result); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 模型部署 - * - * @param id 模型id - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean modelDeploy(String id) { - try { - // 查询流程定义模型xml - byte[] xmlBytes = repositoryService.getModelEditorSource(id); - if (ArrayUtil.isEmpty(xmlBytes)) { - throw new ServiceException("模型数据为空,请先设计流程定义模型,再进行部署!"); - } - if (JSONUtil.isTypeJSON(new String(xmlBytes, StandardCharsets.UTF_8))) { - byte[] bytes = ModelUtils.bpmnJsonToXmlBytes(xmlBytes); - if (ArrayUtil.isEmpty(bytes)) { - throw new ServiceException("模型不能为空,请至少设计一条主线流程!"); - } - } - BpmnModel bpmnModel = ModelUtils.xmlToBpmnModel(xmlBytes); - // 校验模型 - ModelUtils.checkBpmnModel(bpmnModel); - List validationErrors = repositoryService.validateProcess(bpmnModel); - if (CollUtil.isNotEmpty(validationErrors)) { - String errorMsg = validationErrors.stream().map(ValidationError::getProblem).distinct().collect(Collectors.joining(",")); - throw new ServiceException(errorMsg); - } - // 查询模型的基本信息 - Model model = repositoryService.getModel(id); - ProcessDefinition processDefinition = QueryUtils.definitionQuery().processDefinitionKey(model.getKey()).latestVersion().singleResult(); - // xml资源的名称 ,对应act_ge_bytearray表中的name_字段 - String processName = model.getName() + ".bpmn20.xml"; - // 调用部署相关的api方法进行部署流程定义 - Deployment deployment = repositoryService.createDeployment() - // 部署名称 - .name(model.getName()) - // 部署标识key - .key(model.getKey()) - // 部署流程分类 - .category(model.getCategory()) - // bpmn20.xml资源 - .addBytes(processName, xmlBytes) - // 租户id - .tenantId(TenantHelper.getTenantId()) - .deploy(); - - // 更新 部署id 到流程定义模型数据表中 - model.setDeploymentId(deployment.getId()); - repositoryService.saveModel(model); - // 更新分类 - ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult(); - repositoryService.setProcessDefinitionCategory(definition.getId(), model.getCategory()); - //更新流程定义配置 - if (processDefinition != null) { - WfDefinitionConfigVo definitionVo = wfDefinitionConfigService.getByDefId(processDefinition.getId()); - if (definitionVo != null) { - wfDefinitionConfigService.deleteByDefIds(Collections.singletonList(processDefinition.getId())); - WfDefinitionConfigBo wfFormDefinition = new WfDefinitionConfigBo(); - wfFormDefinition.setDefinitionId(definition.getId()); - wfFormDefinition.setProcessKey(definition.getKey()); - wfFormDefinition.setTableName(definitionVo.getTableName()); - wfFormDefinition.setVersion(definition.getVersion()); - wfFormDefinition.setRemark(definitionVo.getRemark()); - wfDefinitionConfigService.saveOrUpdate(wfFormDefinition); - } - } - //更新流程节点配置表单 - List userTasks = ModelUtils.getUserTaskFlowElements(definition.getId()); - UserTask applyUserTask = ModelUtils.getApplyUserTask(definition.getId()); - List wfNodeConfigList = new ArrayList<>(); - for (UserTask userTask : userTasks) { - if (StringUtils.isNotBlank(userTask.getFormKey()) && userTask.getFormKey().contains(StrUtil.COLON)) { - WfNodeConfig wfNodeConfig = new WfNodeConfig(); - wfNodeConfig.setNodeId(userTask.getId()); - wfNodeConfig.setNodeName(userTask.getName()); - wfNodeConfig.setDefinitionId(definition.getId()); - String[] split = userTask.getFormKey().split(StrUtil.COLON); - wfNodeConfig.setFormType(split[0]); - wfNodeConfig.setFormId(Long.valueOf(split[1])); - wfNodeConfig.setApplyUserTask(applyUserTask.getId().equals(userTask.getId()) ? FlowConstant.TRUE : FlowConstant.FALSE); - wfNodeConfigList.add(wfNodeConfig); - } - } - if (CollUtil.isNotEmpty(wfNodeConfigList)) { - wfNodeConfigService.saveOrUpdate(wfNodeConfigList); - } - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 导出模型zip压缩包 - * - * @param modelIds 模型id - * @param response 相应 - */ - @Override - public void exportZip(List modelIds, HttpServletResponse response) { - try (ZipOutputStream zos = ZipUtil.getZipOutputStream(response.getOutputStream(), StandardCharsets.UTF_8)) { - // 压缩包文件名 - String zipName = "模型不存在"; - // 查询模型基本信息 - for (String modelId : modelIds) { - Model model = repositoryService.getModel(modelId); - byte[] xmlBytes = repositoryService.getModelEditorSource(modelId); - if (ObjectUtil.isNotNull(model)) { - if (JSONUtil.isTypeJSON(new String(xmlBytes, StandardCharsets.UTF_8)) && ArrayUtil.isEmpty(ModelUtils.bpmnJsonToXmlBytes(xmlBytes))) { - zipName = "模型不能为空,请至少设计一条主线流程!"; - zos.putNextEntry(new ZipEntry(zipName + ".txt")); - zos.write(zipName.getBytes(StandardCharsets.UTF_8)); - } else if (ArrayUtil.isEmpty(xmlBytes)) { - zipName = "模型数据为空,请先设计流程定义模型,再进行部署!"; - zos.putNextEntry(new ZipEntry(zipName + ".txt")); - zos.write(zipName.getBytes(StandardCharsets.UTF_8)); - } else { - String fileName = model.getName() + "-" + model.getKey(); - // 压缩包文件名 - zipName = fileName + ".zip"; - // 将xml添加到压缩包中(指定xml文件名:请假流程.bpmn20.xml - zos.putNextEntry(new ZipEntry(fileName + ".bpmn20.xml")); - zos.write(xmlBytes); - } - } - } - response.setHeader("Content-Disposition", - "attachment; filename=" + URLEncoder.encode(zipName, StandardCharsets.UTF_8) + ".zip"); - response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); - // 刷出响应流 - response.flushBuffer(); - } catch (IOException e) { - log.error(e.getMessage(), e); - } - } - - /** - * 复制模型 - * - * @param modelBo 模型数据 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean copyModel(ModelBo modelBo) { - try { - String key = modelBo.getKey(); - if (StringUtils.isNotBlank(key)) { - // 查询模型 - Model model = repositoryService.createModelQuery().modelId(modelBo.getId()).singleResult(); - if (ObjectUtil.isNotNull(model)) { - byte[] modelEditorSource = repositoryService.getModelEditorSource(model.getId()); - List list = QueryUtils.modelQuery().modelKey(key).list(); - if (CollUtil.isNotEmpty(list)) { - throw new ServiceException("模型KEY已存在!"); - } - // 校验key命名规范 - if (!Validator.isMatchRegex(FlowConstant.MODEL_KEY_PATTERN, key)) { - throw new ServiceException("模型标识KEY只能字符或者下划线开头!"); - } - // 复制模型数据 - Model newModel = repositoryService.newModel(); - newModel.setKey(modelBo.getKey()); - newModel.setName(modelBo.getName()); - newModel.setCategory(modelBo.getCategoryCode()); - newModel.setVersion(1); - newModel.setMetaInfo(modelBo.getDescription()); - newModel.setTenantId(TenantHelper.getTenantId()); - String xml = StrUtil.utf8Str(modelEditorSource); - BpmnModel bpmnModel = ModelUtils.xmlToBpmnModel(xml); - Process mainProcess = bpmnModel.getMainProcess(); - mainProcess.setId(modelBo.getKey()); - mainProcess.setName(modelBo.getName()); - byte[] xmlBytes = new BpmnXMLConverter().convertToXML(bpmnModel); - repositoryService.saveModel(newModel); - repositoryService.addModelEditorSource(newModel.getId(), xmlBytes); - } - } - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - return true; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java deleted file mode 100644 index 77fb257..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java +++ /dev/null @@ -1,444 +0,0 @@ -package org.dromara.workflow.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.codec.Base64; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.tenant.helper.TenantHelper; -import org.dromara.workflow.common.constant.FlowConstant; -import org.dromara.workflow.domain.WfCategory; -import org.dromara.workflow.domain.WfDefinitionConfig; -import org.dromara.workflow.domain.WfNodeConfig; -import org.dromara.workflow.domain.bo.ProcessDefinitionBo; -import org.dromara.workflow.domain.bo.WfDefinitionConfigBo; -import org.dromara.workflow.domain.vo.ProcessDefinitionVo; -import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; -import org.dromara.workflow.mapper.WfDefinitionConfigMapper; -import org.dromara.workflow.service.IActProcessDefinitionService; -import org.dromara.workflow.service.IWfCategoryService; -import org.dromara.workflow.service.IWfDefinitionConfigService; -import org.dromara.workflow.service.IWfNodeConfigService; -import org.dromara.workflow.utils.ModelUtils; -import org.dromara.workflow.utils.QueryUtils; -import org.flowable.bpmn.model.UserTask; -import org.flowable.engine.ProcessMigrationService; -import org.flowable.engine.RepositoryService; -import org.flowable.engine.history.HistoricProcessInstance; -import org.flowable.engine.impl.bpmn.deployer.ResourceNameUtil; -import org.flowable.engine.repository.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; - -/** - * 流程定义 服务层实现 - * - * @author may - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionService { - - @Autowired(required = false) - private RepositoryService repositoryService; - @Autowired(required = false) - private ProcessMigrationService processMigrationService; - private final IWfCategoryService wfCategoryService; - private final IWfDefinitionConfigService wfDefinitionConfigService; - private final WfDefinitionConfigMapper wfDefinitionConfigMapper; - private final IWfNodeConfigService wfNodeConfigService; - - /** - * 分页查询 - * - * @param bo 参数 - * @return 返回分页列表 - */ - @Override - public TableDataInfo page(ProcessDefinitionBo bo, PageQuery pageQuery) { - ProcessDefinitionQuery query = QueryUtils.definitionQuery(); - if (StringUtils.isNotEmpty(bo.getKey())) { - query.processDefinitionKey(bo.getKey()); - } - if (StringUtils.isNotEmpty(bo.getCategoryCode())) { - query.processDefinitionCategory(bo.getCategoryCode()); - } - if (StringUtils.isNotEmpty(bo.getName())) { - query.processDefinitionNameLike("%" + bo.getName() + "%"); - } - query.orderByDeploymentId().desc(); - // 分页查询 - List processDefinitionVoList = new ArrayList<>(); - List definitionList = query.latestVersion().listPage(pageQuery.getFirstNum(), pageQuery.getPageSize()); - List deploymentList = null; - if (CollUtil.isNotEmpty(definitionList)) { - List deploymentIds = StreamUtils.toList(definitionList, ProcessDefinition::getDeploymentId); - deploymentList = QueryUtils.deploymentQuery(deploymentIds).list(); - } - if (CollUtil.isNotEmpty(definitionList)) { - List ids = StreamUtils.toList(definitionList, ProcessDefinition::getId); - List wfDefinitionConfigVos = wfDefinitionConfigService.queryList(ids); - for (ProcessDefinition processDefinition : definitionList) { - ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); - if (CollUtil.isNotEmpty(deploymentList)) { - // 部署时间 - deploymentList.stream().filter(e -> e.getId().equals(processDefinition.getDeploymentId())).findFirst().ifPresent(e -> { - processDefinitionVo.setDeploymentTime(e.getDeploymentTime()); - }); - } - if (CollUtil.isNotEmpty(wfDefinitionConfigVos)) { - wfDefinitionConfigVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfDefinitionConfigVo); - } - processDefinitionVoList.add(processDefinitionVo); - } - } - // 总记录数 - long total = query.count(); - TableDataInfo build = TableDataInfo.build(); - build.setRows(processDefinitionVoList); - build.setTotal(total); - return build; - } - - /** - * 查询历史流程定义列表 - * - * @param key 流程定义key - */ - @Override - public List getListByKey(String key) { - List processDefinitionVoList = new ArrayList<>(); - ProcessDefinitionQuery query = QueryUtils.definitionQuery(); - List definitionList = query.processDefinitionKey(key).list(); - List deploymentList = null; - if (CollUtil.isNotEmpty(definitionList)) { - List deploymentIds = StreamUtils.toList(definitionList, ProcessDefinition::getDeploymentId); - deploymentList = QueryUtils.deploymentQuery(deploymentIds).list(); - } - if (CollUtil.isNotEmpty(definitionList)) { - List ids = StreamUtils.toList(definitionList, ProcessDefinition::getId); - List wfDefinitionConfigVos = wfDefinitionConfigService.queryList(ids); - for (ProcessDefinition processDefinition : definitionList) { - ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); - if (CollUtil.isNotEmpty(deploymentList)) { - // 部署时间 - deploymentList.stream().filter(e -> e.getId().equals(processDefinition.getDeploymentId())).findFirst().ifPresent(e -> { - processDefinitionVo.setDeploymentTime(e.getDeploymentTime()); - }); - if (CollUtil.isNotEmpty(wfDefinitionConfigVos)) { - wfDefinitionConfigVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfDefinitionConfigVo); - } - } - processDefinitionVoList.add(processDefinitionVo); - } - } - return CollUtil.reverse(processDefinitionVoList); - } - - /** - * 查看流程定义图片 - * - * @param processDefinitionId 流程定义id - */ - @SneakyThrows - @Override - public String definitionImage(String processDefinitionId) { - InputStream inputStream = repositoryService.getProcessDiagram(processDefinitionId); - return Base64.encode(IoUtil.readBytes(inputStream)); - } - - /** - * 查看流程定义xml文件 - * - * @param processDefinitionId 流程定义id - */ - @Override - public String definitionXml(String processDefinitionId) { - StringBuilder xml = new StringBuilder(); - ProcessDefinition processDefinition = repositoryService.getProcessDefinition(processDefinitionId); - InputStream inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName()); - xml.append(IoUtil.read(inputStream, StandardCharsets.UTF_8)); - return xml.toString(); - } - - /** - * 删除流程定义 - * - * @param deploymentIds 部署id - * @param processDefinitionIds 流程定义id - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean deleteDeployment(List deploymentIds, List processDefinitionIds) { - try { - List historicProcessInstances = QueryUtils.hisInstanceQuery().deploymentIdIn(deploymentIds).list(); - if (CollUtil.isNotEmpty(historicProcessInstances)) { - Set defIds = StreamUtils.toSet(historicProcessInstances, HistoricProcessInstance::getProcessDefinitionId); - List processDefinitions = QueryUtils.definitionQuery().processDefinitionIds(defIds).list(); - if (CollUtil.isNotEmpty(processDefinitions)) { - Set keys = StreamUtils.toSet(processDefinitions, ProcessDefinition::getKey); - throw new ServiceException("当前【" + String.join(",", keys) + "】流程定义已被使用不可删除!"); - } - } - //删除流程定义 - for (String deploymentId : deploymentIds) { - repositoryService.deleteDeployment(deploymentId); - } - //删除流程定义配置 - wfDefinitionConfigService.deleteByDefIds(processDefinitionIds); - //删除节点配置 - wfNodeConfigService.deleteByDefIds(processDefinitionIds); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 激活或者挂起流程定义 - * - * @param processDefinitionId 流程定义id - */ - @Override - public boolean updateDefinitionState(String processDefinitionId) { - try { - ProcessDefinition processDefinition = QueryUtils.definitionQuery() - .processDefinitionId(processDefinitionId).singleResult(); - //将当前为挂起状态更新为激活状态 - //参数说明:参数1:流程定义id,参数2:是否激活(true是否级联对应流程实例,激活了则对应流程实例都可以审批), - //参数3:什么时候激活,如果为null则立即激活,如果为具体时间则到达此时间后激活 - if (processDefinition.isSuspended()) { - repositoryService.activateProcessDefinitionById(processDefinitionId, true, null); - } else { - repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null); - } - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException("操作失败:" + e.getMessage()); - } - } - - /** - * 迁移流程定义 - * - * @param currentProcessDefinitionId 当前流程定义id - * @param fromProcessDefinitionId 需要迁移到的流程定义id - */ - - @Override - public boolean migrationDefinition(String currentProcessDefinitionId, String fromProcessDefinitionId) { - try { - // 迁移验证 - boolean migrationValid = processMigrationService.createProcessInstanceMigrationBuilder() - .migrateToProcessDefinition(currentProcessDefinitionId) - .validateMigrationOfProcessInstances(fromProcessDefinitionId) - .isMigrationValid(); - if (!migrationValid) { - throw new ServiceException("流程定义差异过大无法迁移,请修改流程图"); - } - // 已结束的流程实例不会迁移 - processMigrationService.createProcessInstanceMigrationBuilder() - .migrateToProcessDefinition(currentProcessDefinitionId) - .migrateProcessInstances(fromProcessDefinitionId); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 流程定义转换为模型 - * - * @param processDefinitionId 流程定义id - */ - @Override - public boolean convertToModel(String processDefinitionId) { - ProcessDefinition pd = QueryUtils.definitionQuery() - .processDefinitionId(processDefinitionId).singleResult(); - InputStream inputStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), pd.getResourceName()); - ModelQuery query = QueryUtils.modelQuery(); - Model model = query.modelKey(pd.getKey()).singleResult(); - try { - if (ObjectUtil.isNotNull(model)) { - repositoryService.addModelEditorSource(model.getId(), IoUtil.readBytes(inputStream)); - } else { - Model modelData = repositoryService.newModel(); - modelData.setKey(pd.getKey()); - modelData.setName(pd.getName()); - modelData.setCategory(pd.getCategory()); - modelData.setTenantId(pd.getTenantId()); - repositoryService.saveModel(modelData); - repositoryService.addModelEditorSource(modelData.getId(), IoUtil.readBytes(inputStream)); - } - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 通过zip或xml部署流程定义 - * - * @param file 文件 - * @param categoryCode 分类 - */ - @SneakyThrows - @Override - @Transactional(rollbackFor = Exception.class) - public void deployByFile(MultipartFile file, String categoryCode) { - - WfCategory wfCategory = wfCategoryService.queryByCategoryCode(categoryCode); - if (wfCategory == null) { - throw new ServiceException("流程分类不存在"); - } - // 文件后缀名 - String suffix = FileUtil.extName(file.getOriginalFilename()); - InputStream inputStream = file.getInputStream(); - if (FlowConstant.ZIP.equalsIgnoreCase(suffix)) { - ZipInputStream zipInputStream = null; - try { - zipInputStream = new ZipInputStream(inputStream); - ZipEntry zipEntry; - while ((zipEntry = zipInputStream.getNextEntry()) != null) { - String filename = zipEntry.getName(); - String[] splitFilename = filename.substring(0, filename.lastIndexOf(".")).split("-"); - //流程名称 - String processName = splitFilename[0]; - //流程key - String processKey = splitFilename[1]; - ProcessDefinition oldProcessDefinition = QueryUtils.definitionQuery().processDefinitionKey(processKey).latestVersion().singleResult(); - DeploymentBuilder builder = repositoryService.createDeployment(); - Deployment deployment = builder.addInputStream(filename, zipInputStream) - .tenantId(TenantHelper.getTenantId()) - .name(processName).key(processKey).category(categoryCode).deploy(); - ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult(); - repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode); - setWfConfig(oldProcessDefinition, definition); - zipInputStream.closeEntry(); - } - } catch (IOException e) { - throw new RuntimeException(e); - } finally { - if (zipInputStream != null) { - zipInputStream.close(); - } - } - //初始化配置数据(demo使用,不用可删除) - initWfDefConfig(); - } else { - String originalFilename = file.getOriginalFilename(); - if (StringUtils.containsAny(originalFilename, ResourceNameUtil.BPMN_RESOURCE_SUFFIXES)) { - // 文件名 = 流程名称-流程key - String[] splitFilename = originalFilename.substring(0, originalFilename.lastIndexOf(".")).split("-"); - if (splitFilename.length < 2) { - throw new ServiceException("文件名 = 流程名称-流程KEY"); - } - //流程名称 - String processName = splitFilename[0]; - //流程key - String processKey = splitFilename[1]; - ProcessDefinition oldProcessDefinition = QueryUtils.definitionQuery().processDefinitionKey(processKey).latestVersion().singleResult(); - DeploymentBuilder builder = repositoryService.createDeployment(); - Deployment deployment = builder.addInputStream(originalFilename, inputStream) - .tenantId(TenantHelper.getTenantId()) - .name(processName).key(processKey).category(categoryCode).deploy(); - // 更新分类 - ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult(); - repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode); - setWfConfig(oldProcessDefinition, definition); - } else { - throw new ServiceException("文件类型上传错误!"); - } - } - - } - - /** - * 初始化配置数据(demo使用,不用可删除) - */ - private void initWfDefConfig() { - List wfDefinitionConfigs = wfDefinitionConfigMapper.selectList(); - if (CollUtil.isEmpty(wfDefinitionConfigs)) { - ProcessDefinition processDefinition = QueryUtils.definitionQuery().processDefinitionKey("leave1").latestVersion().singleResult(); - if (processDefinition != null) { - WfDefinitionConfigBo wfDefinitionConfigBo = new WfDefinitionConfigBo(); - wfDefinitionConfigBo.setDefinitionId(processDefinition.getId()); - wfDefinitionConfigBo.setProcessKey(processDefinition.getKey()); - wfDefinitionConfigBo.setTableName("test_leave"); - wfDefinitionConfigBo.setVersion(processDefinition.getVersion()); - wfDefinitionConfigService.saveOrUpdate(wfDefinitionConfigBo); - } - } - - } - - /** - * 设置表单内容 - * - * @param oldProcessDefinition 部署前最新流程定义 - * @param definition 部署后最新流程定义 - */ - private void setWfConfig(ProcessDefinition oldProcessDefinition, ProcessDefinition definition) { - //更新流程定义表单 - if (oldProcessDefinition != null) { - WfDefinitionConfigVo definitionVo = wfDefinitionConfigService.getByDefId(oldProcessDefinition.getId()); - if (definitionVo != null) { - wfDefinitionConfigService.deleteByDefIds(Collections.singletonList(oldProcessDefinition.getId())); - WfDefinitionConfigBo wfDefinitionConfigBo = new WfDefinitionConfigBo(); - wfDefinitionConfigBo.setDefinitionId(definition.getId()); - wfDefinitionConfigBo.setProcessKey(definition.getKey()); - wfDefinitionConfigBo.setTableName(definitionVo.getTableName()); - wfDefinitionConfigBo.setVersion(definition.getVersion()); - wfDefinitionConfigBo.setRemark(definitionVo.getRemark()); - wfDefinitionConfigService.saveOrUpdate(wfDefinitionConfigBo); - } - } - //更新流程节点配置表单 - List userTasks = ModelUtils.getUserTaskFlowElements(definition.getId()); - UserTask applyUserTask = ModelUtils.getApplyUserTask(definition.getId()); - List wfNodeConfigList = new ArrayList<>(); - for (UserTask userTask : userTasks) { - if (StringUtils.isNotBlank(userTask.getFormKey()) && userTask.getFormKey().contains(StrUtil.COLON)) { - WfNodeConfig wfNodeConfig = new WfNodeConfig(); - wfNodeConfig.setNodeId(userTask.getId()); - wfNodeConfig.setNodeName(userTask.getName()); - wfNodeConfig.setDefinitionId(definition.getId()); - String[] split = userTask.getFormKey().split(StrUtil.COLON); - wfNodeConfig.setFormType(split[0]); - wfNodeConfig.setFormId(Long.valueOf(split[1])); - wfNodeConfig.setApplyUserTask(applyUserTask.getId().equals(userTask.getId()) ? FlowConstant.TRUE : FlowConstant.FALSE); - wfNodeConfigList.add(wfNodeConfig); - } - } - if (CollUtil.isNotEmpty(wfNodeConfigList)) { - wfNodeConfigService.saveOrUpdate(wfNodeConfigList); - } - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java deleted file mode 100644 index 8b9b113..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java +++ /dev/null @@ -1,691 +0,0 @@ -package org.dromara.workflow.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.codec.Base64; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.convert.Convert; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.ObjectUtil; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.enums.BusinessStatusEnum; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.service.UserService; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.workflow.common.constant.FlowConstant; -import org.dromara.workflow.common.enums.TaskStatusEnum; -import org.dromara.workflow.domain.ActHiProcinst; -import org.dromara.workflow.domain.bo.ProcessInstanceBo; -import org.dromara.workflow.domain.bo.ProcessInvalidBo; -import org.dromara.workflow.domain.bo.TaskUrgingBo; -import org.dromara.workflow.domain.vo.*; -import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator; -import org.dromara.workflow.flowable.cmd.DeleteExecutionCmd; -import org.dromara.workflow.flowable.cmd.ExecutionChildByExecutionIdCmd; -import org.dromara.workflow.flowable.handler.FlowProcessEventHandler; -import org.dromara.workflow.service.IActHiProcinstService; -import org.dromara.workflow.service.IActProcessInstanceService; -import org.dromara.workflow.service.IWfNodeConfigService; -import org.dromara.workflow.service.IWfTaskBackNodeService; -import org.dromara.workflow.utils.QueryUtils; -import org.dromara.workflow.utils.WorkflowUtils; -import org.flowable.bpmn.model.BpmnModel; -import org.flowable.engine.*; -import org.flowable.engine.history.HistoricActivityInstance; -import org.flowable.engine.history.HistoricProcessInstance; -import org.flowable.engine.history.HistoricProcessInstanceQuery; -import org.flowable.engine.impl.persistence.entity.ExecutionEntity; -import org.flowable.engine.repository.ProcessDefinition; -import org.flowable.engine.runtime.ProcessInstance; -import org.flowable.engine.runtime.ProcessInstanceQuery; -import org.flowable.engine.task.Attachment; -import org.flowable.engine.task.Comment; -import org.flowable.task.api.Task; -import org.flowable.task.api.history.HistoricTaskInstance; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.awt.*; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.*; - -/** - * 流程实例 服务层实现 - * - * @author may - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class ActProcessInstanceServiceImpl implements IActProcessInstanceService { - - @Autowired(required = false) - private RepositoryService repositoryService; - @Autowired(required = false) - private RuntimeService runtimeService; - @Autowired(required = false) - private HistoryService historyService; - @Autowired(required = false) - private TaskService taskService; - @Autowired(required = false) - private ManagementService managementService; - private final IActHiProcinstService actHiProcinstService; - private final IWfTaskBackNodeService wfTaskBackNodeService; - private final IWfNodeConfigService wfNodeConfigService; - private final FlowProcessEventHandler flowProcessEventHandler; - private final UserService userService; - - @Value("${flowable.activity-font-name}") - private String activityFontName; - - @Value("${flowable.label-font-name}") - private String labelFontName; - - @Value("${flowable.annotation-font-name}") - private String annotationFontName; - - /** - * 分页查询正在运行的流程实例 - * - * @param bo 参数 - */ - @Override - public TableDataInfo getPageByRunning(ProcessInstanceBo bo, PageQuery pageQuery) { - List list = new ArrayList<>(); - ProcessInstanceQuery query = QueryUtils.instanceQuery(); - if (StringUtils.isNotBlank(bo.getName())) { - query.processInstanceNameLikeIgnoreCase("%" + bo.getName() + "%"); - } - if (StringUtils.isNotBlank(bo.getKey())) { - query.processDefinitionKey(bo.getKey()); - } - if (StringUtils.isNotBlank(bo.getStartUserId())) { - query.startedBy(bo.getStartUserId()); - } - if (StringUtils.isNotBlank(bo.getBusinessKey())) { - query.processInstanceBusinessKey(bo.getBusinessKey()); - } - if (StringUtils.isNotBlank(bo.getCategoryCode())) { - query.processDefinitionCategory(bo.getCategoryCode()); - } - query.orderByStartTime().desc(); - List processInstances = query.listPage(pageQuery.getFirstNum(), pageQuery.getPageSize()); - for (ProcessInstance processInstance : processInstances) { - ProcessInstanceVo processInstanceVo = BeanUtil.toBean(processInstance, ProcessInstanceVo.class); - processInstanceVo.setIsSuspended(processInstance.isSuspended()); - processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstance.getBusinessStatus())); - list.add(processInstanceVo); - } - if (CollUtil.isNotEmpty(list)) { - List processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); - List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); - for (ProcessInstanceVo processInstanceVo : list) { - if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(processInstanceVo.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(processInstanceVo::setWfNodeConfigVo); - } - } - } - long count = query.count(); - TableDataInfo build = TableDataInfo.build(); - build.setRows(list); - build.setTotal(count); - return build; - } - - /** - * 分页查询已结束的流程实例 - * - * @param bo 参数 - */ - @Override - public TableDataInfo getPageByFinish(ProcessInstanceBo bo, PageQuery pageQuery) { - List list = new ArrayList<>(); - HistoricProcessInstanceQuery query = QueryUtils.hisInstanceQuery() - .finished().orderByProcessInstanceEndTime().desc(); - if (StringUtils.isNotEmpty(bo.getName())) { - query.processInstanceNameLikeIgnoreCase("%" + bo.getName() + "%"); - } - if (StringUtils.isNotBlank(bo.getKey())) { - query.processDefinitionKey(bo.getKey()); - } - if (StringUtils.isNotEmpty(bo.getStartUserId())) { - query.startedBy(bo.getStartUserId()); - } - if (StringUtils.isNotBlank(bo.getBusinessKey())) { - query.processInstanceBusinessKey(bo.getBusinessKey()); - } - if (StringUtils.isNotBlank(bo.getCategoryCode())) { - query.processDefinitionCategory(bo.getCategoryCode()); - } - List historicProcessInstances = query.listPage(pageQuery.getFirstNum(), pageQuery.getPageSize()); - for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) { - ProcessInstanceVo processInstanceVo = BeanUtil.toBean(historicProcessInstance, ProcessInstanceVo.class); - processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(historicProcessInstance.getBusinessStatus())); - list.add(processInstanceVo); - } - if (CollUtil.isNotEmpty(list)) { - List processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); - List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); - for (ProcessInstanceVo processInstanceVo : list) { - if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(processInstanceVo.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(processInstanceVo::setWfNodeConfigVo); - } - } - } - long count = query.count(); - TableDataInfo build = TableDataInfo.build(); - build.setRows(list); - build.setTotal(count); - return build; - } - - /** - * 通过业务id获取历史流程图 - * - * @param businessKey 业务id - */ - @SneakyThrows - @Override - public String getHistoryImage(String businessKey) { - String processDefinitionId; - // 获取当前的流程实例 - ProcessInstance processInstance = QueryUtils.businessKeyQuery(businessKey).singleResult(); - // 如果流程已经结束,则得到结束节点 - if (Objects.isNull(processInstance)) { - HistoricProcessInstance pi = QueryUtils.hisInstanceQuery().processInstanceBusinessKey(businessKey).singleResult(); - processDefinitionId = pi.getProcessDefinitionId(); - } else { - // 根据流程实例ID获得当前处于活动状态的ActivityId合集 - ProcessInstance pi = QueryUtils.instanceQuery(processInstance.getProcessInstanceId()).singleResult(); - processDefinitionId = pi.getProcessDefinitionId(); - } - - // 获得活动的节点 - List highLightedFlowList = QueryUtils.hisActivityInstanceQuery(processInstance.getProcessInstanceId()).orderByHistoricActivityInstanceStartTime().asc().list(); - - List highLightedFlows = new ArrayList<>(); - List highLightedNodes = new ArrayList<>(); - //高亮 - for (HistoricActivityInstance tempActivity : highLightedFlowList) { - if (FlowConstant.SEQUENCE_FLOW.equals(tempActivity.getActivityType())) { - //高亮线 - highLightedFlows.add(tempActivity.getActivityId()); - } else { - //高亮节点 - if (tempActivity.getEndTime() == null) { - highLightedNodes.add(Color.RED.toString() + tempActivity.getActivityId()); - } else { - highLightedNodes.add(tempActivity.getActivityId()); - } - } - } - List highLightedNodeList = new ArrayList<>(); - //运行中的节点 - List redNodeCollect = StreamUtils.filter(highLightedNodes, e -> e.contains(Color.RED.toString())); - //排除与运行中相同的节点 - for (String nodeId : highLightedNodes) { - if (!nodeId.contains(Color.RED.toString()) && !redNodeCollect.contains(Color.RED + nodeId)) { - highLightedNodeList.add(nodeId); - } - } - highLightedNodeList.addAll(redNodeCollect); - BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); - CustomDefaultProcessDiagramGenerator diagramGenerator = new CustomDefaultProcessDiagramGenerator(); - InputStream inputStream = diagramGenerator.generateDiagram(bpmnModel, "png", highLightedNodeList, highLightedFlows, activityFontName, labelFontName, annotationFontName, null, 1.0, true); - return Base64.encode(IoUtil.readBytes(inputStream)); - } - - /** - * 通过业务id获取历史流程图运行中,历史等节点 - * - * @param businessKey 业务id - */ - @Override - public Map getHistoryList(String businessKey) { - Map map = new HashMap<>(); - List> taskList = new ArrayList<>(); - HistoricProcessInstance historicProcessInstance = QueryUtils.hisBusinessKeyQuery(businessKey).singleResult(); - String processInstanceId = historicProcessInstance.getId(); - StringBuilder xml = new StringBuilder(); - ProcessDefinition processDefinition = repositoryService.getProcessDefinition(historicProcessInstance.getProcessDefinitionId()); - // 获取节点 - List highLightedFlowList = QueryUtils.hisActivityInstanceQuery(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list(); - for (HistoricActivityInstance tempActivity : highLightedFlowList) { - Map task = new HashMap<>(); - switch (tempActivity.getActivityType()) { - case FlowConstant.SEQUENCE_FLOW, FlowConstant.PARALLEL_GATEWAY, - FlowConstant.EXCLUSIVE_GATEWAY, FlowConstant.INCLUSIVE_GATEWAY -> {} - default -> { - task.put("key", tempActivity.getActivityId()); - task.put("completed", tempActivity.getEndTime() != null); - task.put("activityType", tempActivity.getActivityType()); - taskList.add(task); - } - } - } - ProcessInstance processInstance = QueryUtils.instanceQuery(processInstanceId).singleResult(); - if (processInstance != null) { - taskList = StreamUtils.filter(taskList, e -> !e.get("activityType").equals(FlowConstant.END_EVENT)); - } - //查询出运行中节点 - List> runtimeNodeList = StreamUtils.filter(taskList, e -> !(Boolean) e.get("completed")); - if (CollUtil.isNotEmpty(runtimeNodeList)) { - Iterator> iterator = taskList.iterator(); - while (iterator.hasNext()) { - Map next = iterator.next(); - runtimeNodeList.stream().filter(t -> t.get("key").equals(next.get("key")) && (Boolean) next.get("completed")).findFirst().ifPresent(t -> iterator.remove()); - } - } - map.put("taskList", taskList); - List historyTaskList = getHistoryTaskList(processInstanceId, processDefinition.getVersion()); - map.put("historyList", historyTaskList); - InputStream inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName()); - xml.append(IoUtil.read(inputStream, StandardCharsets.UTF_8)); - map.put("xml", xml.toString()); - return map; - } - - /** - * 获取历史任务节点信息 - * - * @param processInstanceId 流程实例id - * @param version 版本 - */ - private List getHistoryTaskList(String processInstanceId, Integer version) { - //查询任务办理记录 - List list = QueryUtils.hisTaskInstanceQuery(processInstanceId).orderByHistoricTaskInstanceEndTime().desc().list(); - list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed()); - List actHistoryInfoVoList = new ArrayList<>(); - for (HistoricTaskInstance historicTaskInstance : list) { - ActHistoryInfoVo actHistoryInfoVo = new ActHistoryInfoVo(); - BeanUtils.copyProperties(historicTaskInstance, actHistoryInfoVo); - actHistoryInfoVo.setStatus(actHistoryInfoVo.getEndTime() == null ? "待处理" : "已处理"); - if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) { - actHistoryInfoVo.setRunDuration(getDuration(historicTaskInstance.getDurationInMillis())); - } - actHistoryInfoVo.setVersion(version); - actHistoryInfoVoList.add(actHistoryInfoVo); - } - List historyInfoVoList = new ArrayList<>(); - Map> groupByKey = StreamUtils.groupByKey(actHistoryInfoVoList, ActHistoryInfoVo::getTaskDefinitionKey); - for (Map.Entry> entry : groupByKey.entrySet()) { - ActHistoryInfoVo historyInfoVo = new ActHistoryInfoVo(); - if (entry.getValue().size() > 1) { - List historyInfoVos = StreamUtils.filter(entry.getValue(), e -> StringUtils.isNotBlank(e.getAssignee())); - if (CollUtil.isNotEmpty(historyInfoVos)) { - ActHistoryInfoVo infoVo = historyInfoVos.get(0); - BeanUtils.copyProperties(infoVo, historyInfoVo); - historyInfoVo.setStatus(infoVo.getEndTime() == null ? "待处理" : "已处理"); - historyInfoVo.setStartTime(infoVo.getStartTime()); - historyInfoVo.setEndTime(infoVo.getEndTime() == null ? null : infoVo.getEndTime()); - historyInfoVo.setRunDuration(infoVo.getEndTime() == null ? null : infoVo.getRunDuration()); - if (ObjectUtil.isEmpty(infoVo.getAssignee())) { - ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(infoVo.getId(), userService); - if (ObjectUtil.isNotEmpty(participantVo) && CollUtil.isNotEmpty(participantVo.getCandidate())) { - historyInfoVo.setAssignee(StreamUtils.join(participantVo.getCandidate(), Convert::toStr)); - } - } - } - } else { - actHistoryInfoVoList.stream().filter(e -> e.getTaskDefinitionKey().equals(entry.getKey())).findFirst() - .ifPresent(e -> { - BeanUtils.copyProperties(e, historyInfoVo); - historyInfoVo.setStatus(e.getEndTime() == null ? "待处理" : "已处理"); - historyInfoVo.setStartTime(e.getStartTime()); - historyInfoVo.setEndTime(e.getEndTime() == null ? null : e.getEndTime()); - historyInfoVo.setRunDuration(e.getEndTime() == null ? null : e.getRunDuration()); - if (ObjectUtil.isEmpty(e.getAssignee())) { - ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(e.getId(), userService); - if (ObjectUtil.isNotEmpty(participantVo) && CollUtil.isNotEmpty(participantVo.getCandidate())) { - historyInfoVo.setAssignee(StreamUtils.join(participantVo.getCandidate(), Convert::toStr)); - } - } - }); - - } - historyInfoVoList.add(historyInfoVo); - - } - return historyInfoVoList; - } - - /** - * 获取审批记录 - * - * @param businessKey 业务id - */ - @Override - public List getHistoryRecord(String businessKey) { - // 查询任务办理记录 - List list = QueryUtils.hisTaskBusinessKeyQuery(businessKey).orderByHistoricTaskInstanceEndTime().desc().list(); - list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed()); - HistoricProcessInstance historicProcessInstance = QueryUtils.hisBusinessKeyQuery(businessKey).singleResult(); - String processInstanceId = historicProcessInstance.getId(); - List actHistoryInfoVoList = new ArrayList<>(); - List processInstanceComments = taskService.getProcessInstanceComments(processInstanceId); - //附件 - List attachmentList = taskService.getProcessInstanceAttachments(processInstanceId); - for (HistoricTaskInstance historicTaskInstance : list) { - ActHistoryInfoVo actHistoryInfoVo = new ActHistoryInfoVo(); - BeanUtils.copyProperties(historicTaskInstance, actHistoryInfoVo); - if (actHistoryInfoVo.getEndTime() == null) { - actHistoryInfoVo.setStatus(TaskStatusEnum.WAITING.getStatus()); - actHistoryInfoVo.setStatusName(TaskStatusEnum.WAITING.getDesc()); - } - if (CollUtil.isNotEmpty(processInstanceComments)) { - processInstanceComments.stream().filter(e -> e.getTaskId().equals(historicTaskInstance.getId())).findFirst().ifPresent(e -> { - actHistoryInfoVo.setComment(e.getFullMessage()); - actHistoryInfoVo.setStatus(e.getType()); - actHistoryInfoVo.setStatusName(TaskStatusEnum.findByStatus(e.getType())); - }); - } - if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) { - actHistoryInfoVo.setRunDuration(getDuration(historicTaskInstance.getDurationInMillis())); - } - //附件 - if (CollUtil.isNotEmpty(attachmentList)) { - List attachments = StreamUtils.filter(attachmentList, e -> e.getTaskId().equals(historicTaskInstance.getId())); - if (CollUtil.isNotEmpty(attachments)) { - actHistoryInfoVo.setAttachmentList(attachments); - } - } - //设置人员id - if (ObjectUtil.isEmpty(historicTaskInstance.getAssignee())) { - ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(historicTaskInstance.getId(), userService); - if (ObjectUtil.isNotEmpty(participantVo) && CollUtil.isNotEmpty(participantVo.getCandidate())) { - actHistoryInfoVo.setAssignee(StreamUtils.join(participantVo.getCandidate(), Convert::toStr)); - } - } - actHistoryInfoVoList.add(actHistoryInfoVo); - } - // 审批记录 - Map> groupByKey = StreamUtils.groupByKey(actHistoryInfoVoList, ActHistoryInfoVo::getTaskDefinitionKey); - for (Map.Entry> entry : groupByKey.entrySet()) { - ActHistoryInfoVo actHistoryInfoVo = BeanUtil.toBean(entry.getValue().get(0), ActHistoryInfoVo.class); - actHistoryInfoVoList.stream().filter(e -> e.getTaskDefinitionKey().equals(entry.getKey()) && e.getEndTime() != null).findFirst() - .ifPresent(e -> { - actHistoryInfoVo.setStatus("已处理"); - actHistoryInfoVo.setStartTime(e.getStartTime()); - }); - actHistoryInfoVoList.stream().filter(e -> e.getTaskDefinitionKey().equals(entry.getKey()) && e.getEndTime() == null).findFirst() - .ifPresent(e -> { - actHistoryInfoVo.setStatus("待处理"); - actHistoryInfoVo.setStartTime(e.getStartTime()); - actHistoryInfoVo.setEndTime(null); - actHistoryInfoVo.setRunDuration(null); - }); - } - List recordList = new ArrayList<>(); - // 待办理 - recordList.addAll(StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() == null)); - // 已办理 - recordList.addAll(StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() != null)); - - return recordList; - } - - /** - * 任务完成时间处理 - * - * @param time 时间 - */ - private String getDuration(long time) { - - long day = time / (24 * 60 * 60 * 1000); - long hour = (time / (60 * 60 * 1000) - day * 24); - long minute = ((time / (60 * 1000)) - day * 24 * 60 - hour * 60); - long second = (time / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60); - - if (day > 0) { - return day + "天" + hour + "小时" + minute + "分钟"; - } - if (hour > 0) { - return hour + "小时" + minute + "分钟"; - } - if (minute > 0) { - return minute + "分钟"; - } - if (second > 0) { - return second + "秒"; - } else { - return 0 + "秒"; - } - } - - /** - * 作废流程实例,不会删除历史记录(删除运行中的实例) - * - * @param processInvalidBo 参数 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean deleteRunInstance(ProcessInvalidBo processInvalidBo) { - try { - List list = QueryUtils.taskQuery().processInstanceBusinessKey(processInvalidBo.getBusinessKey()).list(); - String processInstanceId = list.get(0).getProcessInstanceId(); - List subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); - if (CollUtil.isNotEmpty(subTasks)) { - subTasks.forEach(e -> taskService.deleteTask(e.getId())); - } - String deleteReason = LoginHelper.getLoginUser().getNickname() + "作废了当前申请!"; - if (StringUtils.isNotBlank(processInvalidBo.getDeleteReason())) { - deleteReason = LoginHelper.getLoginUser().getNickname() + "作废理由:" + processInvalidBo.getDeleteReason(); - } - for (Task task : StreamUtils.filter(list, e -> StringUtils.isBlank(e.getParentTaskId()))) { - taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.INVALID.getStatus(), deleteReason); - } - HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery(processInstanceId).singleResult(); - BusinessStatusEnum.checkInvalidStatus(historicProcessInstance.getBusinessStatus()); - runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.INVALID.getStatus()); - runtimeService.deleteProcessInstance(processInstanceId, deleteReason); - //流程作废监听 - flowProcessEventHandler.processHandler(historicProcessInstance.getProcessDefinitionKey(), - historicProcessInstance.getBusinessKey(), BusinessStatusEnum.INVALID.getStatus(), false); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息 - * - * @param businessKeys 业务id - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean deleteRunAndHisInstance(List businessKeys) { - try { - // 1.删除运行中流程实例 - List actHiProcinsts = actHiProcinstService.selectByBusinessKeyIn(businessKeys); - if (CollUtil.isEmpty(actHiProcinsts)) { - log.warn("当前业务ID:{}查询到流程实例为空!", businessKeys); - return false; - } - List processInstanceIds = StreamUtils.toList(actHiProcinsts, ActHiProcinst::getId); - List list = QueryUtils.taskQuery(processInstanceIds).list(); - List subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); - if (CollUtil.isNotEmpty(subTasks)) { - subTasks.forEach(e -> taskService.deleteTask(e.getId())); - } - runtimeService.bulkDeleteProcessInstances(processInstanceIds, LoginHelper.getUserId() + "删除了当前流程申请"); - // 2.删除历史记录 - List historicProcessInstanceList = QueryUtils.hisInstanceQuery(new HashSet<>(processInstanceIds)).list(); - if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) { - historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); - } - wfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 已完成的实例 删除程实例,删除历史记录,删除业务与流程关联信息 - * - * @param businessKeys 业务id - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean deleteFinishAndHisInstance(List businessKeys) { - try { - List actHiProcinsts = actHiProcinstService.selectByBusinessKeyIn(businessKeys); - if (CollUtil.isEmpty(actHiProcinsts)) { - log.warn("当前业务ID:{}查询到流程实例为空!", businessKeys); - return false; - } - List processInstanceIds = StreamUtils.toList(actHiProcinsts, ActHiProcinst::getId); - historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); - wfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 撤销流程申请 - * - * @param businessKey 业务id - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean cancelProcessApply(String businessKey) { - try { - ProcessInstance processInstance = QueryUtils.businessKeyQuery(businessKey) - .startedBy(String.valueOf(LoginHelper.getUserId())).singleResult(); - if (ObjectUtil.isNull(processInstance)) { - throw new ServiceException("您不是流程发起人,撤销失败!"); - } - if (processInstance.isSuspended()) { - throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); - } - String processInstanceId = processInstance.getId(); - BusinessStatusEnum.checkCancelStatus(processInstance.getBusinessStatus()); - List taskList = QueryUtils.taskQuery(processInstanceId).list(); - for (Task task : taskList) { - taskService.setAssignee(task.getId(), null); - taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.CANCEL.getStatus(), LoginHelper.getLoginUser().getNickname() + ":撤销申请"); - } - HistoricTaskInstance historicTaskInstance = QueryUtils.hisTaskInstanceQuery(processInstanceId).finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); - List nodeIds = StreamUtils.toList(taskList, Task::getTaskDefinitionKey); - runtimeService.createChangeActivityStateBuilder() - .processInstanceId(processInstanceId) - .moveActivityIdsToSingleActivityId(nodeIds, historicTaskInstance.getTaskDefinitionKey()).changeState(); - Task task = QueryUtils.taskQuery(processInstanceId).list().get(0); - taskService.setAssignee(task.getId(), historicTaskInstance.getAssignee()); - //获取并行网关执行后保留的执行实例数据 - ExecutionChildByExecutionIdCmd childByExecutionIdCmd = new ExecutionChildByExecutionIdCmd(task.getExecutionId()); - List executionEntities = managementService.executeCommand(childByExecutionIdCmd); - //删除流程实例垃圾数据 - for (ExecutionEntity executionEntity : executionEntities) { - DeleteExecutionCmd deleteExecutionCmd = new DeleteExecutionCmd(executionEntity.getId()); - managementService.executeCommand(deleteExecutionCmd); - } - runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.CANCEL.getStatus()); - //流程作废监听 - flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), - processInstance.getBusinessKey(), BusinessStatusEnum.CANCEL.getStatus(), false); - return true; - } catch (Exception e) { - log.error("撤销失败:" + e.getMessage(), e); - throw new ServiceException("撤销失败:" + e.getMessage()); - } - } - - /** - * 分页查询当前登录人单据 - * - * @param bo 参数 - */ - @Override - public TableDataInfo getPageByCurrent(ProcessInstanceBo bo, PageQuery pageQuery) { - List list = new ArrayList<>(); - HistoricProcessInstanceQuery query = QueryUtils.hisInstanceQuery(); - query.startedBy(String.valueOf(LoginHelper.getUserId())); - if (StringUtils.isNotBlank(bo.getName())) { - query.processInstanceNameLikeIgnoreCase("%" + bo.getName() + "%"); - } - if (StringUtils.isNotBlank(bo.getKey())) { - query.processDefinitionKey(bo.getKey()); - } - if (StringUtils.isNotBlank(bo.getBusinessKey())) { - query.processInstanceBusinessKey(bo.getBusinessKey()); - } - if (StringUtils.isNotBlank(bo.getCategoryCode())) { - query.processDefinitionCategory(bo.getCategoryCode()); - } - query.orderByProcessInstanceStartTime().desc(); - List historicProcessInstanceList = query.listPage(pageQuery.getFirstNum(), pageQuery.getPageSize()); - List taskVoList = new ArrayList<>(); - if (CollUtil.isNotEmpty(historicProcessInstanceList)) { - List processInstanceIds = StreamUtils.toList(historicProcessInstanceList, HistoricProcessInstance::getId); - List taskList = QueryUtils.taskQuery(processInstanceIds).list(); - for (Task task : taskList) { - taskVoList.add(BeanUtil.toBean(task, TaskVo.class)); - } - } - for (HistoricProcessInstance processInstance : historicProcessInstanceList) { - ProcessInstanceVo processInstanceVo = BeanUtil.toBean(processInstance, ProcessInstanceVo.class); - processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstance.getBusinessStatus())); - if (CollUtil.isNotEmpty(taskVoList)) { - List collect = StreamUtils.filter(taskVoList, e -> e.getProcessInstanceId().equals(processInstance.getId())); - processInstanceVo.setTaskVoList(CollUtil.isNotEmpty(collect) ? collect : Collections.emptyList()); - } - list.add(processInstanceVo); - } - if (CollUtil.isNotEmpty(list)) { - List processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); - List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); - for (ProcessInstanceVo processInstanceVo : list) { - if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(processInstanceVo.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(processInstanceVo::setWfNodeConfigVo); - } - } - } - long count = query.count(); - TableDataInfo build = TableDataInfo.build(); - build.setRows(list); - build.setTotal(count); - return build; - } - - /** - * 任务催办(给当前任务办理人发送站内信,邮件,短信等) - * - * @param taskUrgingBo 任务催办 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean taskUrging(TaskUrgingBo taskUrgingBo) { - try { - ProcessInstance processInstance = QueryUtils.instanceQuery(taskUrgingBo.getProcessInstanceId()).singleResult(); - if (processInstance == null) { - throw new ServiceException("任务已结束!"); - } - String message = taskUrgingBo.getMessage(); - if (StringUtils.isBlank(message)) { - message = "您的【" + processInstance.getName() + "】单据还未审批,请您及时处理。"; - } - List list = QueryUtils.taskQuery(taskUrgingBo.getProcessInstanceId()).list(); - WorkflowUtils.sendMessage(list, processInstance.getName(), taskUrgingBo.getMessageType(), message, userService); - } catch (ServiceException e) { - throw new ServiceException(e.getMessage()); - } - return true; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java deleted file mode 100644 index d9a674a..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ /dev/null @@ -1,861 +0,0 @@ -package org.dromara.workflow.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.domain.dto.RoleDTO; -import org.dromara.common.core.domain.dto.UserDTO; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.service.OssService; -import org.dromara.common.core.service.UserService; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.common.tenant.helper.TenantHelper; -import org.dromara.workflow.common.constant.FlowConstant; -import org.dromara.common.core.enums.BusinessStatusEnum; -import org.dromara.workflow.common.enums.TaskStatusEnum; -import org.dromara.workflow.domain.ActHiTaskinst; -import org.dromara.workflow.domain.WfTaskBackNode; -import org.dromara.workflow.domain.bo.*; -import org.dromara.workflow.domain.vo.*; -import org.dromara.workflow.flowable.cmd.*; -import org.dromara.workflow.flowable.handler.FlowProcessEventHandler; -import org.dromara.workflow.mapper.ActHiTaskinstMapper; -import org.dromara.workflow.mapper.ActTaskMapper; -import org.dromara.workflow.service.IActTaskService; -import org.dromara.workflow.service.IWfDefinitionConfigService; -import org.dromara.workflow.service.IWfNodeConfigService; -import org.dromara.workflow.service.IWfTaskBackNodeService; -import org.dromara.workflow.utils.ModelUtils; -import org.dromara.workflow.utils.QueryUtils; -import org.dromara.workflow.utils.WorkflowUtils; -import org.flowable.common.engine.api.FlowableObjectNotFoundException; -import org.flowable.common.engine.impl.identity.Authentication; -import org.flowable.engine.*; -import org.flowable.engine.history.HistoricProcessInstance; -import org.flowable.engine.history.HistoricProcessInstanceQuery; -import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; -import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; -import org.flowable.engine.impl.persistence.entity.ExecutionEntity; -import org.flowable.engine.runtime.ProcessInstance; -import org.flowable.identitylink.api.history.HistoricIdentityLink; -import org.flowable.task.api.Task; -import org.flowable.task.api.TaskQuery; -import org.flowable.task.api.history.HistoricTaskInstance; -import org.flowable.task.service.impl.persistence.entity.TaskEntity; -import org.flowable.variable.api.persistence.entity.VariableInstance; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import java.util.stream.Collectors; - -import static org.dromara.workflow.common.constant.FlowConstant.*; - -/** - * 任务 服务层实现 - * - * @author may - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class ActTaskServiceImpl implements IActTaskService { - - @Autowired(required = false) - private RuntimeService runtimeService; - @Autowired(required = false) - private TaskService taskService; - @Autowired(required = false) - private HistoryService historyService; - @Autowired(required = false) - private IdentityService identityService; - @Autowired(required = false) - private ManagementService managementService; - private final ActTaskMapper actTaskMapper; - private final IWfTaskBackNodeService wfTaskBackNodeService; - private final ActHiTaskinstMapper actHiTaskinstMapper; - private final IWfNodeConfigService wfNodeConfigService; - private final IWfDefinitionConfigService wfDefinitionConfigService; - private final FlowProcessEventHandler flowProcessEventHandler; - private final UserService userService; - private final OssService ossService; - - /** - * 启动任务 - * - * @param startProcessBo 启动流程参数 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Map startWorkFlow(StartProcessBo startProcessBo) { - Map map = new HashMap<>(); - if (StringUtils.isBlank(startProcessBo.getBusinessKey())) { - throw new ServiceException("启动工作流时必须包含业务ID"); - } - // 判断当前业务是否启动过流程 - HistoricProcessInstanceQuery query = QueryUtils.hisInstanceQuery(); - HistoricProcessInstance historicProcessInstance = query.processInstanceBusinessKey(startProcessBo.getBusinessKey()).singleResult(); - if (ObjectUtil.isNotEmpty(historicProcessInstance)) { - BusinessStatusEnum.checkStartStatus(historicProcessInstance.getBusinessStatus()); - } - List taskResult = QueryUtils.taskQuery().processInstanceBusinessKey(startProcessBo.getBusinessKey()).list(); - if (CollUtil.isNotEmpty(taskResult)) { - if (CollUtil.isNotEmpty(startProcessBo.getVariables())) { - taskService.setVariables(taskResult.get(0).getId(), startProcessBo.getVariables()); - } - map.put(PROCESS_INSTANCE_ID, taskResult.get(0).getProcessInstanceId()); - map.put("taskId", taskResult.get(0).getId()); - return map; - } - WfDefinitionConfigVo wfDefinitionConfigVo = wfDefinitionConfigService.getByTableNameLastVersion(startProcessBo.getTableName()); - if (wfDefinitionConfigVo == null) { - throw new ServiceException("请到流程定义绑定业务表名与流程KEY!"); - } - // 设置启动人 - identityService.setAuthenticatedUserId(String.valueOf(LoginHelper.getUserId())); - Authentication.setAuthenticatedUserId(String.valueOf(LoginHelper.getUserId())); - // 启动流程实例(提交申请) - Map variables = startProcessBo.getVariables(); - // 启动跳过表达式 - variables.put(FLOWABLE_SKIP_EXPRESSION_ENABLED, true); - // 流程发起人 - variables.put(INITIATOR, (String.valueOf(LoginHelper.getUserId()))); - ProcessInstance pi; - try { - if (TenantHelper.isEnable()) { - pi = runtimeService.startProcessInstanceByKeyAndTenantId(wfDefinitionConfigVo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId()); - } else { - pi = runtimeService.startProcessInstanceByKey(wfDefinitionConfigVo.getProcessKey(), startProcessBo.getBusinessKey(), variables); - } - } catch (FlowableObjectNotFoundException e) { - throw new ServiceException("找不到当前【" + wfDefinitionConfigVo.getProcessKey() + "】流程定义!"); - } - // 将流程定义名称 作为 流程实例名称 - runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName()); - // 申请人执行流程 - List taskList = QueryUtils.taskQuery(pi.getId()).list(); - if (taskList.size() > 1) { - throw new ServiceException("请检查流程第一个环节是否为申请人!"); - } - - runtimeService.updateBusinessStatus(pi.getProcessInstanceId(), BusinessStatusEnum.DRAFT.getStatus()); - taskService.setAssignee(taskList.get(0).getId(), LoginHelper.getUserId().toString()); - taskService.setVariable(taskList.get(0).getId(), PROCESS_INSTANCE_ID, pi.getProcessInstanceId()); - taskService.setVariable(taskList.get(0).getId(), BUSINESS_KEY, pi.getBusinessKey()); - map.put("processInstanceId", pi.getProcessInstanceId()); - map.put("taskId", taskList.get(0).getId()); - return map; - } - - /** - * 办理任务 - * - * @param completeTaskBo 办理任务参数 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean completeTask(CompleteTaskBo completeTaskBo) { - try { - String userId = String.valueOf(LoginHelper.getUserId()); - Task task = WorkflowUtils.getTaskByCurrentUser(completeTaskBo.getTaskId()); - if (task == null) { - throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); - } - if (task.isSuspended()) { - throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); - } - ProcessInstance processInstance = QueryUtils.instanceQuery(task.getProcessInstanceId()).singleResult(); - //办理委托任务 - if (ObjectUtil.isNotEmpty(task.getDelegationState()) && FlowConstant.PENDING.equals(task.getDelegationState().name())) { - taskService.resolveTask(completeTaskBo.getTaskId()); - TaskEntity newTask = WorkflowUtils.createNewTask(task); - taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), StringUtils.isNotBlank(completeTaskBo.getMessage()) ? completeTaskBo.getMessage() : StrUtil.EMPTY); - taskService.complete(newTask.getId()); - return true; - } - //附件上传 - AttachmentCmd attachmentCmd = new AttachmentCmd(completeTaskBo.getFileId(), task.getId(), task.getProcessInstanceId(), ossService); - managementService.executeCommand(attachmentCmd); - String businessStatus = WorkflowUtils.getBusinessStatus(processInstance.getBusinessKey()); - //流程提交监听 - if (BusinessStatusEnum.DRAFT.getStatus().equals(businessStatus) || BusinessStatusEnum.BACK.getStatus().equals(businessStatus) || BusinessStatusEnum.CANCEL.getStatus().equals(businessStatus)) { - flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), processInstance.getBusinessKey(), businessStatus, true); - } - runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.WAITING.getStatus()); - //办理监听 - flowProcessEventHandler.processTaskHandler(processInstance.getProcessDefinitionKey(), task.getTaskDefinitionKey(), - task.getId(), processInstance.getBusinessKey()); - //办理意见 - taskService.addComment(completeTaskBo.getTaskId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), StringUtils.isBlank(completeTaskBo.getMessage()) ? "同意" : completeTaskBo.getMessage()); - //办理任务 - taskService.setAssignee(task.getId(), userId); - if (CollUtil.isNotEmpty(completeTaskBo.getVariables())) { - taskService.complete(completeTaskBo.getTaskId(), completeTaskBo.getVariables()); - } else { - taskService.complete(completeTaskBo.getTaskId()); - } - //记录执行过的流程任务节点 - wfTaskBackNodeService.recordExecuteNode(task); - ProcessInstance pi = QueryUtils.instanceQuery(task.getProcessInstanceId()).singleResult(); - if (pi == null) { - UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus()); - managementService.executeCommand(updateBusinessStatusCmd); - flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), processInstance.getBusinessKey(), - BusinessStatusEnum.FINISH.getStatus(), false); - } else { - List list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); - for (Task t : list) { - if (ModelUtils.isUserTask(t.getProcessDefinitionId(), t.getTaskDefinitionKey())) { - List links = historyService.getHistoricIdentityLinksForTask(t.getId()); - if (CollUtil.isEmpty(links) && StringUtils.isBlank(t.getAssignee())) { - throw new ServiceException("下一节点【" + t.getName() + "】没有办理人!"); - } - } - } - - if (CollUtil.isNotEmpty(list) && CollUtil.isNotEmpty(completeTaskBo.getWfCopyList())) { - TaskEntity newTask = WorkflowUtils.createNewTask(task); - taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.COPY.getStatus(), LoginHelper.getLoginUser().getNickname() + "【抄送】给" + String.join(",", StreamUtils.toList(completeTaskBo.getWfCopyList(), WfCopy::getUserName))); - taskService.complete(newTask.getId()); - List taskList = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); - WorkflowUtils.createCopyTask(taskList, StreamUtils.toList(completeTaskBo.getWfCopyList(), WfCopy::getUserId)); - } - sendMessage(list, processInstance.getName(), completeTaskBo.getMessageType(), null); - } - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 发送消息 - * - * @param list 任务 - * @param name 流程名称 - * @param messageType 消息类型 - * @param message 消息内容,为空则发送默认配置的消息内容 - */ - @Async - public void sendMessage(List list, String name, List messageType, String message) { - WorkflowUtils.sendMessage(list, name, messageType, message, userService); - } - - /** - * 查询当前用户的待办任务 - * - * @param taskBo 参数 - */ - @Override - public TableDataInfo getPageByTaskWait(TaskBo taskBo, PageQuery pageQuery) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - List roles = LoginHelper.getLoginUser().getRoles(); - List roleIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId())); - String userId = String.valueOf(LoginHelper.getUserId()); - queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus()); - queryWrapper.eq(TenantHelper.isEnable(), "t.tenant_id_", TenantHelper.getTenantId()); - String ids = StreamUtils.join(roleIds, x -> "'" + x + "'"); - queryWrapper.and(w1 -> w1.eq("t.assignee_", userId).or(w2 -> w2.isNull("t.assignee_").apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN (" + ids + ") ) ))", userId))); - if (StringUtils.isNotBlank(taskBo.getName())) { - queryWrapper.like("t.name_", taskBo.getName()); - } - if (StringUtils.isNotBlank(taskBo.getProcessDefinitionName())) { - queryWrapper.like("t.processDefinitionName", taskBo.getProcessDefinitionName()); - } - if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) { - queryWrapper.eq("t.processDefinitionKey", taskBo.getProcessDefinitionKey()); - } - queryWrapper.orderByDesc("t.CREATE_TIME_"); - Page page = actTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); - - List taskList = page.getRecords(); - if (CollUtil.isNotEmpty(taskList)) { - List processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); - for (TaskVo task : taskList) { - task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); - task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId(), userService)); - task.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); - if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo); - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && e.getNodeId().equals(task.getTaskDefinitionKey()) && FlowConstant.FALSE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo); - } - } - } - return TableDataInfo.build(page); - } - - /** - * 查询当前租户所有待办任务 - * - * @param taskBo 参数 - */ - @Override - public TableDataInfo getPageByAllTaskWait(TaskBo taskBo, PageQuery pageQuery) { - TaskQuery query = QueryUtils.taskQuery(); - if (StringUtils.isNotBlank(taskBo.getName())) { - query.taskNameLike("%" + taskBo.getName() + "%"); - } - if (StringUtils.isNotBlank(taskBo.getProcessDefinitionName())) { - query.processDefinitionNameLike("%" + taskBo.getProcessDefinitionName() + "%"); - } - if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) { - query.processDefinitionKey(taskBo.getProcessDefinitionKey()); - } - query.orderByTaskCreateTime().desc(); - List taskList = query.listPage(pageQuery.getFirstNum(), pageQuery.getPageSize()); - List processInstanceList = null; - if (CollUtil.isNotEmpty(taskList)) { - Set processInstanceIds = StreamUtils.toSet(taskList, Task::getProcessInstanceId); - processInstanceList = QueryUtils.instanceQuery(processInstanceIds).list(); - } - List list = new ArrayList<>(); - if (CollUtil.isNotEmpty(taskList)) { - List processDefinitionIds = StreamUtils.toList(taskList, Task::getProcessDefinitionId); - List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); - for (Task task : taskList) { - TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class); - if (CollUtil.isNotEmpty(processInstanceList)) { - processInstanceList.stream().filter(e -> e.getId().equals(task.getProcessInstanceId())).findFirst().ifPresent(e -> { - taskVo.setBusinessStatus(e.getBusinessStatus()); - taskVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(taskVo.getBusinessStatus())); - taskVo.setProcessDefinitionKey(e.getProcessDefinitionKey()); - taskVo.setProcessDefinitionName(e.getProcessDefinitionName()); - taskVo.setProcessDefinitionVersion(e.getProcessDefinitionVersion()); - taskVo.setBusinessKey(e.getBusinessKey()); - }); - } - taskVo.setAssignee(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null); - taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId(), userService)); - taskVo.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); - if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(taskVo::setWfNodeConfigVo); - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && e.getNodeId().equals(task.getTaskDefinitionKey()) && FlowConstant.FALSE.equals(e.getApplyUserTask())).findFirst().ifPresent(taskVo::setWfNodeConfigVo); - } - list.add(taskVo); - } - } - long count = query.count(); - TableDataInfo build = TableDataInfo.build(); - build.setRows(list); - build.setTotal(count); - return build; - } - - /** - * 查询当前用户的已办任务 - * - * @param taskBo 参数 - */ - @Override - public TableDataInfo getPageByTaskFinish(TaskBo taskBo, PageQuery pageQuery) { - String userId = String.valueOf(LoginHelper.getUserId()); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.like(StringUtils.isNotBlank(taskBo.getName()), "t.name_", taskBo.getName()); - queryWrapper.like(StringUtils.isNotBlank(taskBo.getProcessDefinitionName()), "t.processDefinitionName", taskBo.getProcessDefinitionName()); - queryWrapper.eq(StringUtils.isNotBlank(taskBo.getProcessDefinitionKey()), "t.processDefinitionKey", taskBo.getProcessDefinitionKey()); - queryWrapper.eq("t.assignee_", userId); - queryWrapper.orderByDesc("t.START_TIME_"); - Page page = actTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper); - - List taskList = page.getRecords(); - if (CollUtil.isNotEmpty(taskList)) { - List processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); - for (TaskVo task : taskList) { - task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); - if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo); - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && e.getNodeId().equals(task.getTaskDefinitionKey()) && FlowConstant.FALSE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo); - } - } - } - return TableDataInfo.build(page); - } - - /** - * 查询当前用户的抄送 - * - * @param taskBo 参数 - */ - @Override - public TableDataInfo getPageByTaskCopy(TaskBo taskBo, PageQuery pageQuery) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - String userId = String.valueOf(LoginHelper.getUserId()); - if (StringUtils.isNotBlank(taskBo.getName())) { - queryWrapper.like("t.name_", taskBo.getName()); - } - if (StringUtils.isNotBlank(taskBo.getProcessDefinitionName())) { - queryWrapper.like("t.processDefinitionName", taskBo.getProcessDefinitionName()); - } - if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) { - queryWrapper.eq("t.processDefinitionKey", taskBo.getProcessDefinitionKey()); - } - queryWrapper.eq("t.assignee_", userId); - queryWrapper.orderByDesc("t.START_TIME_"); - Page page = actTaskMapper.getTaskCopyByPage(pageQuery.build(), queryWrapper); - - List taskList = page.getRecords(); - if (CollUtil.isNotEmpty(taskList)) { - List processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); - for (TaskVo task : taskList) { - task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); - if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo); - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && e.getNodeId().equals(task.getTaskDefinitionKey()) && FlowConstant.FALSE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo); - } - } - } - return TableDataInfo.build(page); - } - - /** - * 查询当前租户所有已办任务 - * - * @param taskBo 参数 - */ - @Override - public TableDataInfo getPageByAllTaskFinish(TaskBo taskBo, PageQuery pageQuery) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.like(StringUtils.isNotBlank(taskBo.getName()), "t.name_", taskBo.getName()); - queryWrapper.like(StringUtils.isNotBlank(taskBo.getProcessDefinitionName()), "t.processDefinitionName", taskBo.getProcessDefinitionName()); - queryWrapper.eq(StringUtils.isNotBlank(taskBo.getProcessDefinitionKey()), "t.processDefinitionKey", taskBo.getProcessDefinitionKey()); - Page page = actTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper); - - List taskList = page.getRecords(); - if (CollUtil.isNotEmpty(taskList)) { - List processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); - for (TaskVo task : taskList) { - task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); - if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo); - wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && e.getNodeId().equals(task.getTaskDefinitionKey()) && FlowConstant.FALSE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo); - } - } - } - return TableDataInfo.build(page); - } - - /** - * 委派任务 - * - * @param delegateBo 参数 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean delegateTask(DelegateBo delegateBo) { - Task task = WorkflowUtils.getTaskByCurrentUser(delegateBo.getTaskId()); - - if (ObjectUtil.isEmpty(task)) { - throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); - } - if (task.isSuspended()) { - throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); - } - try { - TaskEntity newTask = WorkflowUtils.createNewTask(task); - taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.PENDING.getStatus(), "【" + LoginHelper.getLoginUser().getNickname() + "】委派给【" + delegateBo.getNickName() + "】"); - //委托任务 - taskService.delegateTask(delegateBo.getTaskId(), delegateBo.getUserId()); - //办理生成的任务记录 - taskService.complete(newTask.getId()); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 终止任务 - * - * @param terminationBo 参数 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean terminationTask(TerminationBo terminationBo) { - TaskQuery query = QueryUtils.taskQuery(); - Task task = query.taskId(terminationBo.getTaskId()).singleResult(); - - if (ObjectUtil.isEmpty(task)) { - throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); - } - if (task.isSuspended()) { - throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); - } - HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); - BusinessStatusEnum.checkInvalidStatus(historicProcessInstance.getBusinessStatus()); - try { - if (StringUtils.isBlank(terminationBo.getComment())) { - terminationBo.setComment(LoginHelper.getLoginUser().getNickname() + "终止了申请"); - } else { - terminationBo.setComment(LoginHelper.getLoginUser().getNickname() + "终止了申请:" + terminationBo.getComment()); - } - taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.TERMINATION.getStatus(), terminationBo.getComment()); - List list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); - if (CollUtil.isNotEmpty(list)) { - List subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); - if (CollUtil.isNotEmpty(subTasks)) { - subTasks.forEach(e -> taskService.deleteTask(e.getId())); - } - runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.TERMINATION.getStatus()); - runtimeService.deleteProcessInstance(task.getProcessInstanceId(), StrUtil.EMPTY); - } - //流程终止监听 - flowProcessEventHandler.processHandler(historicProcessInstance.getProcessDefinitionKey(), - historicProcessInstance.getBusinessKey(), BusinessStatusEnum.TERMINATION.getStatus(), false); - return true; - } catch (Exception e) { - throw new ServiceException(e.getMessage()); - } - } - - /** - * 转办任务 - * - * @param transmitBo 参数 - */ - @Override - public boolean transferTask(TransmitBo transmitBo) { - Task task = WorkflowUtils.getTaskByCurrentUser(transmitBo.getTaskId()); - if (ObjectUtil.isEmpty(task)) { - throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); - } - if (task.isSuspended()) { - throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); - } - try { - TaskEntity newTask = WorkflowUtils.createNewTask(task); - taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.TRANSFER.getStatus(), StringUtils.isNotBlank(transmitBo.getComment()) ? transmitBo.getComment() : LoginHelper.getUsername() + "转办了任务"); - taskService.complete(newTask.getId()); - taskService.setAssignee(task.getId(), transmitBo.getUserId()); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 会签任务加签 - * - * @param addMultiBo 参数 - */ - @Override - public boolean addMultiInstanceExecution(AddMultiBo addMultiBo) { - TaskQuery taskQuery = QueryUtils.taskQuery(); - taskQuery.taskId(addMultiBo.getTaskId()); - if (!LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin()) { - taskQuery.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())); - } - Task task = taskQuery.singleResult(); - if (ObjectUtil.isEmpty(task)) { - throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); - } - if (task.isSuspended()) { - throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); - } - String taskDefinitionKey = task.getTaskDefinitionKey(); - String processInstanceId = task.getProcessInstanceId(); - String processDefinitionId = task.getProcessDefinitionId(); - - try { - MultiInstanceVo multiInstanceVo = WorkflowUtils.isMultiInstance(processDefinitionId, taskDefinitionKey); - if (multiInstanceVo == null) { - throw new ServiceException("当前环节不是会签节点"); - } - if (multiInstanceVo.getType() instanceof ParallelMultiInstanceBehavior) { - for (Long assignee : addMultiBo.getAssignees()) { - runtimeService.addMultiInstanceExecution(taskDefinitionKey, processInstanceId, Collections.singletonMap(multiInstanceVo.getAssignee(), assignee)); - } - } else if (multiInstanceVo.getType() instanceof SequentialMultiInstanceBehavior) { - AddSequenceMultiInstanceCmd addSequenceMultiInstanceCmd = new AddSequenceMultiInstanceCmd(task.getExecutionId(), multiInstanceVo.getAssigneeList(), addMultiBo.getAssignees()); - managementService.executeCommand(addSequenceMultiInstanceCmd); - } - List assigneeNames = addMultiBo.getAssigneeNames(); - String username = LoginHelper.getUsername(); - TaskEntity newTask = WorkflowUtils.createNewTask(task); - taskService.addComment(newTask.getId(), processInstanceId, TaskStatusEnum.SIGN.getStatus(), username + "加签【" + String.join(StringUtils.SEPARATOR, assigneeNames) + "】"); - taskService.complete(newTask.getId()); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 会签任务减签 - * - * @param deleteMultiBo 参数 - */ - @Override - public boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo) { - TaskQuery taskQuery = QueryUtils.taskQuery(); - taskQuery.taskId(deleteMultiBo.getTaskId()); - if (!LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin()) { - taskQuery.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())); - } - Task task = taskQuery.singleResult(); - if (ObjectUtil.isEmpty(task)) { - throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); - } - if (task.isSuspended()) { - throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); - } - String taskDefinitionKey = task.getTaskDefinitionKey(); - String processInstanceId = task.getProcessInstanceId(); - String processDefinitionId = task.getProcessDefinitionId(); - try { - MultiInstanceVo multiInstanceVo = WorkflowUtils.isMultiInstance(processDefinitionId, taskDefinitionKey); - if (multiInstanceVo == null) { - throw new ServiceException("当前环节不是会签节点"); - } - if (multiInstanceVo.getType() instanceof ParallelMultiInstanceBehavior) { - for (String executionId : deleteMultiBo.getExecutionIds()) { - runtimeService.deleteMultiInstanceExecution(executionId, false); - } - for (String taskId : deleteMultiBo.getTaskIds()) { - historyService.deleteHistoricTaskInstance(taskId); - } - } else if (multiInstanceVo.getType() instanceof SequentialMultiInstanceBehavior) { - DeleteSequenceMultiInstanceCmd deleteSequenceMultiInstanceCmd = new DeleteSequenceMultiInstanceCmd(task.getAssignee(), task.getExecutionId(), multiInstanceVo.getAssigneeList(), deleteMultiBo.getAssigneeIds()); - managementService.executeCommand(deleteSequenceMultiInstanceCmd); - } - List assigneeNames = deleteMultiBo.getAssigneeNames(); - String username = LoginHelper.getUsername(); - TaskEntity newTask = WorkflowUtils.createNewTask(task); - taskService.addComment(newTask.getId(), processInstanceId, TaskStatusEnum.SIGN_OFF.getStatus(), username + "减签【" + String.join(StringUtils.SEPARATOR, assigneeNames) + "】"); - taskService.complete(newTask.getId()); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 驳回审批 - * - * @param backProcessBo 参数 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String backProcess(BackProcessBo backProcessBo) { - String userId = String.valueOf(LoginHelper.getUserId()); - Task task = WorkflowUtils.getTaskByCurrentUser(backProcessBo.getTaskId()); - - if (ObjectUtil.isEmpty(task)) { - throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); - } - if (task.isSuspended()) { - throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); - } - try { - String processInstanceId = task.getProcessInstanceId(); - ProcessInstance processInstance = QueryUtils.instanceQuery(task.getProcessInstanceId()).singleResult(); - //获取并行网关执行后保留的执行实例数据 - ExecutionChildByExecutionIdCmd childByExecutionIdCmd = new ExecutionChildByExecutionIdCmd(task.getExecutionId()); - List executionEntities = managementService.executeCommand(childByExecutionIdCmd); - //校验单据 - BusinessStatusEnum.checkBackStatus(processInstance.getBusinessStatus()); - //判断是否有多个任务 - List taskList = QueryUtils.taskQuery(processInstanceId).list(); - String backTaskDefinitionKey = backProcessBo.getTargetActivityId(); - taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.BACK.getStatus(), StringUtils.isNotBlank(backProcessBo.getMessage()) ? backProcessBo.getMessage() : "退回"); - if (taskList.size() > 1) { - //当前多个任务驳回到单个节点 - runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId).moveActivityIdsToSingleActivityId(taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()), backTaskDefinitionKey).changeState(); - ActHiTaskinst actHiTaskinst = new ActHiTaskinst(); - actHiTaskinst.setAssignee(userId); - actHiTaskinst.setId(task.getId()); - actHiTaskinstMapper.updateById(actHiTaskinst); - } else { - //当前单个节点驳回单个节点 - runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId).moveActivityIdTo(task.getTaskDefinitionKey(), backTaskDefinitionKey).changeState(); - } - //删除并行环节未办理记录 - MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); - if (multiInstance == null && taskList.size() > 1) { - List tasks = StreamUtils.filter(taskList, e -> !e.getTaskDefinitionKey().equals(task.getTaskDefinitionKey())); - if (CollUtil.isNotEmpty(tasks)) { - actHiTaskinstMapper.deleteByIds(StreamUtils.toList(tasks, Task::getId)); - } - } - - - List instanceList = QueryUtils.hisTaskInstanceQuery(processInstanceId).finished().orderByHistoricTaskInstanceEndTime().desc().list(); - List list = QueryUtils.taskQuery(processInstanceId).list(); - for (Task t : list) { - instanceList.stream().filter(e -> e.getTaskDefinitionKey().equals(t.getTaskDefinitionKey())).findFirst().ifPresent(e -> { - taskService.setAssignee(t.getId(), e.getAssignee()); - }); - } - //发送消息 - String message = "您的【" + processInstance.getName() + "】单据已经被驳回,请您注意查收。"; - sendMessage(list, processInstance.getName(), backProcessBo.getMessageType(), message); - //删除流程实例垃圾数据 - for (ExecutionEntity executionEntity : executionEntities) { - DeleteExecutionCmd deleteExecutionCmd = new DeleteExecutionCmd(executionEntity.getId()); - managementService.executeCommand(deleteExecutionCmd); - } - - WfTaskBackNode wfTaskBackNode = wfTaskBackNodeService.getListByInstanceIdAndNodeId(task.getProcessInstanceId(), backProcessBo.getTargetActivityId()); - if (ObjectUtil.isNotNull(wfTaskBackNode) && wfTaskBackNode.getOrderNo() == 0) { - runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.BACK.getStatus()); - flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), - processInstance.getBusinessKey(), BusinessStatusEnum.BACK.getStatus(), false); - } - //删除驳回后的流程节点 - wfTaskBackNodeService.deleteBackTaskNode(processInstanceId, backProcessBo.getTargetActivityId()); - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException(e.getMessage()); - } - return task.getProcessInstanceId(); - } - - /** - * 修改任务办理人 - * - * @param taskIds 任务id - * @param userId 办理人id - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean updateAssignee(String[] taskIds, String userId) { - try { - List list = QueryUtils.taskQuery().taskIds(Arrays.asList(taskIds)).list(); - for (Task task : list) { - taskService.setAssignee(task.getId(), userId); - } - } catch (Exception e) { - log.error("修改失败:" + e.getMessage(), e); - throw new ServiceException("修改失败:" + e.getMessage()); - } - return true; - } - - /** - * 查询流程变量 - * - * @param taskId 任务id - */ - @Override - public List getInstanceVariable(String taskId) { - List variableVoList = new ArrayList<>(); - Map variableInstances = taskService.getVariableInstances(taskId); - if (CollUtil.isNotEmpty(variableInstances)) { - for (Map.Entry entry : variableInstances.entrySet()) { - VariableVo variableVo = new VariableVo(); - variableVo.setKey(entry.getKey()); - variableVo.setValue(entry.getValue().getValue().toString()); - variableVoList.add(variableVo); - } - } - return variableVoList; - } - - /** - * 查询工作流任务用户选择加签人员 - * - * @param taskId 任务id - * @return - */ - @Override - @SuppressWarnings("unchecked") - public String getTaskUserIdsByAddMultiInstance(String taskId) { - Task task = QueryUtils.taskQuery().taskId(taskId).singleResult(); - if (task == null) { - throw new ServiceException("任务不存在"); - } - MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); - if (multiInstance == null) { - return ""; - } - List userIds; - if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { - userIds = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); - } else { - List list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); - userIds = StreamUtils.toList(list, e -> Long.valueOf(e.getAssignee())); - } - return StringUtils.join(userIds, StringUtils.SEPARATOR); - } - - /** - * 查询工作流选择减签人员 - * - * @param taskId 任务id 任务id - */ - @Override - @SuppressWarnings("unchecked") - public List getListByDeleteMultiInstance(String taskId) { - Task task = QueryUtils.taskQuery().taskId(taskId).singleResult(); - List taskList = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); - MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); - List taskListVo = new ArrayList<>(); - if (multiInstance == null) { - return List.of(); - } - List assigneeList = new ArrayList<>(); - if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { - List variable = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); - for (Object o : variable) { - assigneeList.add(Long.valueOf(o.toString())); - } - } - - if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { - List userIds = StreamUtils.filter(assigneeList, e -> !String.valueOf(e).equals(task.getAssignee())); - List userList = userService.selectListByIds(userIds); - for (Long userId : userIds) { - TaskVo taskVo = new TaskVo(); - taskVo.setId("串行会签"); - taskVo.setExecutionId("串行会签"); - taskVo.setProcessInstanceId(task.getProcessInstanceId()); - taskVo.setName(task.getName()); - taskVo.setAssignee(userId); - if (CollUtil.isNotEmpty(userList)) { - userList.stream().filter(u -> u.getUserId().toString().equals(userId.toString())).findFirst().ifPresent(u -> taskVo.setAssigneeName(u.getNickName())); - } - taskListVo.add(taskVo); - } - return taskListVo; - } else if (multiInstance.getType() instanceof ParallelMultiInstanceBehavior) { - List tasks = StreamUtils.filter(taskList, e -> StringUtils.isBlank(e.getParentTaskId()) && !e.getExecutionId().equals(task.getExecutionId()) && e.getTaskDefinitionKey().equals(task.getTaskDefinitionKey())); - if (CollUtil.isNotEmpty(tasks)) { - List userIds = StreamUtils.toList(tasks, e -> Long.valueOf(e.getAssignee())); - List userList = userService.selectListByIds(userIds); - for (Task t : tasks) { - TaskVo taskVo = new TaskVo(); - taskVo.setId(t.getId()); - taskVo.setExecutionId(t.getExecutionId()); - taskVo.setProcessInstanceId(t.getProcessInstanceId()); - taskVo.setName(t.getName()); - taskVo.setAssignee(Long.valueOf(t.getAssignee())); - if (CollUtil.isNotEmpty(userList)) { - userList.stream().filter(u -> u.getUserId().toString().equals(t.getAssignee())).findFirst().ifPresent(e -> taskVo.setAssigneeName(e.getNickName())); - } - taskListVo.add(taskVo); - } - return taskListVo; - } - } - return List.of(); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java deleted file mode 100644 index f81c85f..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java +++ /dev/null @@ -1,157 +0,0 @@ -package org.dromara.workflow.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.domain.event.ProcessEvent; -import org.dromara.common.core.domain.event.ProcessTaskEvent; -import org.dromara.common.core.enums.BusinessStatusEnum; -import org.dromara.common.core.service.WorkflowService; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.workflow.domain.TestLeave; -import org.dromara.workflow.domain.bo.TestLeaveBo; -import org.dromara.workflow.domain.vo.TestLeaveVo; -import org.dromara.workflow.mapper.TestLeaveMapper; -import org.dromara.workflow.service.ITestLeaveService; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Collection; -import java.util.List; - -/** - * 请假Service业务层处理 - * - * @author may - * @date 2023-07-21 - */ -@RequiredArgsConstructor -@Service -@Slf4j -public class TestLeaveServiceImpl implements ITestLeaveService { - - private final TestLeaveMapper baseMapper; - private final WorkflowService workflowService; - - /** - * 查询请假 - */ - @Override - public TestLeaveVo queryById(Long id) { - return baseMapper.selectVoById(id); - } - - /** - * 查询请假列表 - */ - @Override - public TableDataInfo queryPageList(TestLeaveBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询请假列表 - */ - @Override - public List queryList(TestLeaveBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(TestLeaveBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getLeaveType()), TestLeave::getLeaveType, bo.getLeaveType()); - lqw.ge(bo.getStartLeaveDays() != null, TestLeave::getLeaveDays, bo.getStartLeaveDays()); - lqw.le(bo.getEndLeaveDays() != null, TestLeave::getLeaveDays, bo.getEndLeaveDays()); - lqw.orderByDesc(BaseEntity::getCreateTime); - return lqw; - } - - /** - * 新增请假 - */ - @Override - public TestLeaveVo insertByBo(TestLeaveBo bo) { - TestLeave add = MapstructUtils.convert(bo, TestLeave.class); - if (StringUtils.isBlank(add.getStatus())) { - add.setStatus(BusinessStatusEnum.DRAFT.getStatus()); - } - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return MapstructUtils.convert(add, TestLeaveVo.class); - } - - /** - * 修改请假 - */ - @Override - public TestLeaveVo updateByBo(TestLeaveBo bo) { - TestLeave update = MapstructUtils.convert(bo, TestLeave.class); - baseMapper.updateById(update); - return MapstructUtils.convert(update, TestLeaveVo.class); - } - - /** - * 批量删除请假 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean deleteWithValidByIds(Collection ids) { - List idList = StreamUtils.toList(ids, String::valueOf); - workflowService.deleteRunAndHisInstance(idList); - return baseMapper.deleteByIds(ids) > 0; - } - - /** - * 总体流程监听(例如: 提交 退回 撤销 终止 作废等) - * 正常使用只需#processEvent.key=='leave1' - * 示例为了方便则使用startsWith匹配了全部示例key - * - * @param processEvent 参数 - */ - @EventListener(condition = "#processEvent.key.startsWith('leave')") - public void processHandler(ProcessEvent processEvent) { - log.info("当前任务执行了{}", processEvent.toString()); - TestLeave testLeave = baseMapper.selectById(Long.valueOf(processEvent.getBusinessKey())); - testLeave.setStatus(processEvent.getStatus()); - if (processEvent.isSubmit()) { - testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus()); - } - baseMapper.updateById(testLeave); - } - - /** - * 执行办理任务监听 - * 示例:也可通过 @EventListener(condition = "#processTaskEvent.key=='leave1'")进行判断 - * 在方法中判断流程节点key - * if ("xxx".equals(processTaskEvent.getTaskDefinitionKey())) { - * //执行业务逻辑 - * } - * - * @param processTaskEvent 参数 - */ - @EventListener(condition = "#processTaskEvent.key.startsWith('leave')") - public void processTaskHandler(ProcessTaskEvent processTaskEvent) { - // 所有demo案例的申请人节点id - String[] ids = {"Activity_14633hx", "Activity_19b1i4j", "Activity_0uscrk3", - "Activity_0uscrk3", "Activity_0x6b71j", "Activity_0zy3g6j", "Activity_06a55t0"}; - if (StringUtils.equalsAny(processTaskEvent.getTaskDefinitionKey(), ids)) { - log.info("当前任务执行了{}", processTaskEvent.toString()); - TestLeave testLeave = baseMapper.selectById(Long.valueOf(processTaskEvent.getBusinessKey())); - testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus()); - baseMapper.updateById(testLeave); - } - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfCategoryServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfCategoryServiceImpl.java deleted file mode 100644 index e562823..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfCategoryServiceImpl.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.dromara.workflow.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.workflow.domain.WfCategory; -import org.dromara.workflow.domain.bo.WfCategoryBo; -import org.dromara.workflow.domain.vo.WfCategoryVo; -import org.dromara.workflow.mapper.WfCategoryMapper; -import org.dromara.workflow.service.IWfCategoryService; -import org.dromara.workflow.utils.QueryUtils; -import org.flowable.engine.RepositoryService; -import org.flowable.engine.repository.Deployment; -import org.flowable.engine.repository.Model; -import org.flowable.engine.repository.ProcessDefinition; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Collection; -import java.util.List; - -/** - * 流程分类Service业务层处理 - * - * @author may - * @date 2023-06-28 - */ -@RequiredArgsConstructor -@Service -public class WfCategoryServiceImpl implements IWfCategoryService { - - private final WfCategoryMapper baseMapper; - @Autowired(required = false) - private RepositoryService repositoryService; - - /** - * 查询流程分类 - */ - @Override - public WfCategoryVo queryById(Long id) { - return baseMapper.selectVoById(id); - } - - - /** - * 查询流程分类列表 - */ - @Override - public List queryList(WfCategoryBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(WfCategoryBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getCategoryName()), WfCategory::getCategoryName, bo.getCategoryName()); - lqw.eq(StringUtils.isNotBlank(bo.getCategoryCode()), WfCategory::getCategoryCode, bo.getCategoryCode()); - return lqw; - } - - /** - * 新增流程分类 - */ - @Override - public Boolean insertByBo(WfCategoryBo bo) { - WfCategory add = MapstructUtils.convert(bo, WfCategory.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 修改流程分类 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean updateByBo(WfCategoryBo bo) { - WfCategory update = MapstructUtils.convert(bo, WfCategory.class); - validEntityBeforeSave(update); - WfCategoryVo wfCategoryVo = baseMapper.selectVoById(bo.getId()); - List processDefinitionList = QueryUtils.definitionQuery().processDefinitionCategory(wfCategoryVo.getCategoryCode()).list(); - for (ProcessDefinition processDefinition : processDefinitionList) { - repositoryService.setProcessDefinitionCategory(processDefinition.getId(), bo.getCategoryCode()); - } - List deploymentList = QueryUtils.deploymentQuery().deploymentCategory(wfCategoryVo.getCategoryCode()).list(); - for (Deployment deployment : deploymentList) { - repositoryService.setDeploymentCategory(deployment.getId(), bo.getCategoryCode()); - } - List modelList = QueryUtils.modelQuery().modelCategory(wfCategoryVo.getCategoryCode()).list(); - for (Model model : modelList) { - model.setCategory(bo.getCategoryCode()); - repositoryService.saveModel(model); - } - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(WfCategory entity) { - //TODO 做一些数据校验,如唯一约束 - } - - /** - * 批量删除流程分类 - */ - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 - } - return baseMapper.deleteByIds(ids) > 0; - } - - /** - * 按照类别编码查询 - * - * @param categoryCode 分类比吗 - */ - @Override - public WfCategory queryByCategoryCode(String categoryCode) { - return baseMapper.selectOne(new LambdaQueryWrapper().eq(WfCategory::getCategoryCode, categoryCode)); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java deleted file mode 100644 index b2ffb9e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.dromara.workflow.service.impl; - -import cn.hutool.core.collection.CollUtil; -import org.dromara.common.core.utils.MapstructUtils; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.RequiredArgsConstructor; -import org.dromara.workflow.domain.WfDefinitionConfig; -import org.dromara.workflow.domain.bo.WfDefinitionConfigBo; -import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; -import org.dromara.workflow.service.IWfDefinitionConfigService; -import org.springframework.stereotype.Service; -import org.dromara.workflow.mapper.WfDefinitionConfigMapper; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Collection; - -/** - * 流程定义配置Service业务层处理 - * - * @author may - * @date 2024-03-18 - */ -@RequiredArgsConstructor -@Service -public class WfDefinitionConfigServiceImpl implements IWfDefinitionConfigService { - - private final WfDefinitionConfigMapper baseMapper; - - /** - * 查询流程定义配置 - */ - @Override - public WfDefinitionConfigVo getByDefId(String definitionId) { - return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(WfDefinitionConfig::getDefinitionId, definitionId)); - } - - /** - * 查询流程定义配置 - * - * @param tableName 表名 - * @return 结果 - */ - @Override - public WfDefinitionConfigVo getByTableNameLastVersion(String tableName) { - List wfDefinitionConfigVos = baseMapper.selectVoList( - new LambdaQueryWrapper().eq(WfDefinitionConfig::getTableName, tableName).orderByDesc(WfDefinitionConfig::getVersion)); - if (CollUtil.isNotEmpty(wfDefinitionConfigVos)) { - return wfDefinitionConfigVos.get(0); - } - return null; - } - - /** - * 查询流程定义配置 - * - * @param definitionId 流程定义id - * @param tableName 表名 - * @return 结果 - */ - @Override - public WfDefinitionConfigVo getByDefIdAndTableName(String definitionId, String tableName) { - return baseMapper.selectVoOne(new LambdaQueryWrapper() - .eq(WfDefinitionConfig::getDefinitionId, definitionId) - .eq(WfDefinitionConfig::getTableName, tableName)); - } - - /** - * 查询流程定义配置排除当前查询的流程定义 - * - * @param tableName 表名 - * @param definitionId 流程定义id - */ - @Override - public List getByTableNameNotDefId(String tableName, String definitionId) { - return baseMapper.selectVoList(new LambdaQueryWrapper() - .eq(WfDefinitionConfig::getTableName, tableName) - .ne(WfDefinitionConfig::getDefinitionId, definitionId)); - } - - /** - * 查询流程定义配置列表 - */ - @Override - public List queryList(List definitionIds) { - return baseMapper.selectVoList(new LambdaQueryWrapper().in(WfDefinitionConfig::getDefinitionId, definitionIds)); - } - - /** - * 新增流程定义配置 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean saveOrUpdate(WfDefinitionConfigBo bo) { - WfDefinitionConfig add = MapstructUtils.convert(bo, WfDefinitionConfig.class); - baseMapper.delete(new LambdaQueryWrapper().eq(WfDefinitionConfig::getTableName, bo.getTableName())); - add.setTableName(add.getTableName().toLowerCase()); - boolean flag = baseMapper.insertOrUpdate(add); - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 批量删除流程定义配置 - */ - @Override - public Boolean deleteByIds(Collection ids) { - return baseMapper.deleteByIds(ids) > 0; - } - - @Override - public Boolean deleteByDefIds(Collection ids) { - return baseMapper.delete(new LambdaQueryWrapper().in(WfDefinitionConfig::getDefinitionId, ids)) > 0; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java deleted file mode 100644 index 55e4911..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.dromara.workflow.service.impl; - -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import org.dromara.workflow.common.enums.FormTypeEnum; -import org.springframework.stereotype.Service; -import org.dromara.workflow.domain.bo.WfFormManageBo; -import org.dromara.workflow.domain.vo.WfFormManageVo; -import org.dromara.workflow.domain.WfFormManage; -import org.dromara.workflow.mapper.WfFormManageMapper; -import org.dromara.workflow.service.IWfFormManageService; - -import java.util.List; -import java.util.Collection; - -/** - * 表单管理Service业务层处理 - * - * @author may - * @date 2024-03-29 - */ -@RequiredArgsConstructor -@Service -public class WfFormManageServiceImpl implements IWfFormManageService { - - private final WfFormManageMapper baseMapper; - - /** - * 查询表单管理 - */ - @Override - public WfFormManageVo queryById(Long id) { - return baseMapper.selectVoById(id); - } - - @Override - public List queryByIds(List ids) { - return baseMapper.selectVoByIds(ids); - } - - /** - * 查询表单管理列表 - */ - @Override - public TableDataInfo queryPageList(WfFormManageBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - @Override - public List selectList() { - List wfFormManageVos = baseMapper.selectVoList(new LambdaQueryWrapper().orderByDesc(WfFormManage::getUpdateTime)); - for (WfFormManageVo wfFormManageVo : wfFormManageVos) { - wfFormManageVo.setFormTypeName(FormTypeEnum.findByType(wfFormManageVo.getFormType())); - } - return wfFormManageVos; - } - - /** - * 查询表单管理列表 - */ - @Override - public List queryList(WfFormManageBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(WfFormManageBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getFormName()), WfFormManage::getFormName, bo.getFormName()); - lqw.eq(StringUtils.isNotBlank(bo.getFormType()), WfFormManage::getFormType, bo.getFormType()); - return lqw; - } - - /** - * 新增表单管理 - */ - @Override - public Boolean insertByBo(WfFormManageBo bo) { - WfFormManage add = MapstructUtils.convert(bo, WfFormManage.class); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 修改表单管理 - */ - @Override - public Boolean updateByBo(WfFormManageBo bo) { - WfFormManage update = MapstructUtils.convert(bo, WfFormManage.class); - return baseMapper.updateById(update) > 0; - } - - /** - * 批量删除表单管理 - */ - @Override - public Boolean deleteByIds(Collection ids) { - return baseMapper.deleteByIds(ids) > 0; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java deleted file mode 100644 index 2f71482..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.dromara.workflow.service.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.workflow.domain.vo.WfFormManageVo; -import org.dromara.workflow.service.IWfFormManageService; -import org.springframework.stereotype.Service; -import org.dromara.workflow.domain.vo.WfNodeConfigVo; -import org.dromara.workflow.domain.WfNodeConfig; -import org.dromara.workflow.mapper.WfNodeConfigMapper; -import org.dromara.workflow.service.IWfNodeConfigService; - -import java.util.Collection; -import java.util.List; - -/** - * 节点配置Service业务层处理 - * - * @author may - * @date 2024-03-30 - */ -@RequiredArgsConstructor -@Service -public class WfNodeConfigServiceImpl implements IWfNodeConfigService { - - private final WfNodeConfigMapper baseMapper; - private final IWfFormManageService wfFormManageService; - - /** - * 查询节点配置 - */ - @Override - public WfNodeConfigVo queryById(Long id) { - return baseMapper.selectVoById(id); - } - - /** - * 保存节点配置 - */ - @Override - public Boolean saveOrUpdate(List list) { - return baseMapper.insertOrUpdateBatch(list); - } - - /** - * 批量删除节点配置 - */ - @Override - public Boolean deleteByIds(Collection ids) { - return baseMapper.deleteByIds(ids) > 0; - } - - - - @Override - public Boolean deleteByDefIds(Collection ids) { - return baseMapper.delete(new LambdaQueryWrapper().in(WfNodeConfig::getDefinitionId, ids)) > 0; - } - - @Override - public List selectByDefIds(Collection ids) { - List wfNodeConfigVos = baseMapper.selectVoList(new LambdaQueryWrapper().in(WfNodeConfig::getDefinitionId, ids)); - if (CollUtil.isNotEmpty(wfNodeConfigVos)) { - List formIds = StreamUtils.toList(wfNodeConfigVos, WfNodeConfigVo::getFormId); - List wfFormManageVos = wfFormManageService.queryByIds(formIds); - for (WfNodeConfigVo wfNodeConfigVo : wfNodeConfigVos) { - wfFormManageVos.stream().filter(e -> ObjectUtil.equals(e.getId(), wfNodeConfigVo.getFormId())).findFirst().ifPresent(wfNodeConfigVo::setWfFormManageVo); - } - } - return wfNodeConfigVos; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java deleted file mode 100644 index 6c255d3..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java +++ /dev/null @@ -1,144 +0,0 @@ -package org.dromara.workflow.service.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.workflow.domain.WfTaskBackNode; -import org.dromara.workflow.domain.vo.MultiInstanceVo; -import org.dromara.workflow.mapper.WfTaskBackNodeMapper; -import org.dromara.workflow.service.IWfTaskBackNodeService; -import org.dromara.workflow.utils.WorkflowUtils; -import org.flowable.task.api.Task; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -import static org.dromara.workflow.common.constant.FlowConstant.MULTI_INSTANCE; -import static org.dromara.workflow.common.constant.FlowConstant.USER_TASK; - - -/** - * 节点驳回记录Service业务层处理 - * - * @author may - * @date 2024-03-13 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class WfTaskBackNodeServiceImpl implements IWfTaskBackNodeService { - - private final WfTaskBackNodeMapper wfTaskBackNodeMapper; - - @Override - @Transactional(rollbackFor = Exception.class) - public void recordExecuteNode(Task task) { - List list = getListByInstanceId(task.getProcessInstanceId()); - WfTaskBackNode wfTaskBackNode = new WfTaskBackNode(); - wfTaskBackNode.setNodeId(task.getTaskDefinitionKey()); - wfTaskBackNode.setNodeName(task.getName()); - wfTaskBackNode.setInstanceId(task.getProcessInstanceId()); - wfTaskBackNode.setAssignee(String.valueOf(LoginHelper.getUserId())); - MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); - if (ObjectUtil.isNotEmpty(multiInstance)) { - wfTaskBackNode.setTaskType(MULTI_INSTANCE); - } else { - wfTaskBackNode.setTaskType(USER_TASK); - } - if (CollUtil.isEmpty(list)) { - wfTaskBackNode.setOrderNo(0); - wfTaskBackNodeMapper.insert(wfTaskBackNode); - } else { - WfTaskBackNode taskNode = StreamUtils.findFirst(list, e -> e.getNodeId().equals(wfTaskBackNode.getNodeId()) && e.getOrderNo() == 0); - if (ObjectUtil.isEmpty(taskNode)) { - wfTaskBackNode.setOrderNo(list.get(0).getOrderNo() + 1); - WfTaskBackNode node = getListByInstanceIdAndNodeId(wfTaskBackNode.getInstanceId(), wfTaskBackNode.getNodeId()); - if (ObjectUtil.isNotEmpty(node)) { - node.setAssignee(node.getAssignee() + StringUtils.SEPARATOR + LoginHelper.getUserId()); - wfTaskBackNodeMapper.updateById(node); - } else { - wfTaskBackNodeMapper.insert(wfTaskBackNode); - } - } - } - } - - @Override - public List getListByInstanceId(String processInstanceId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(WfTaskBackNode::getInstanceId, processInstanceId); - wrapper.orderByDesc(WfTaskBackNode::getOrderNo); - return wfTaskBackNodeMapper.selectList(wrapper); - } - - @Override - public WfTaskBackNode getListByInstanceIdAndNodeId(String processInstanceId, String nodeId) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(WfTaskBackNode::getInstanceId, processInstanceId); - queryWrapper.eq(WfTaskBackNode::getNodeId, nodeId); - return wfTaskBackNodeMapper.selectOne(queryWrapper); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public boolean deleteBackTaskNode(String processInstanceId, String targetActivityId) { - try { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(WfTaskBackNode::getInstanceId, processInstanceId); - queryWrapper.eq(WfTaskBackNode::getNodeId, targetActivityId); - WfTaskBackNode actTaskNode = wfTaskBackNodeMapper.selectOne(queryWrapper); - if (ObjectUtil.isNotNull(actTaskNode)) { - Integer orderNo = actTaskNode.getOrderNo(); - List taskNodeList = getListByInstanceId(processInstanceId); - List ids = new ArrayList<>(); - if (CollUtil.isNotEmpty(taskNodeList)) { - for (WfTaskBackNode taskNode : taskNodeList) { - if (taskNode.getOrderNo() >= orderNo) { - ids.add(taskNode.getId()); - } - } - } - if (CollUtil.isNotEmpty(ids)) { - wfTaskBackNodeMapper.deleteByIds(ids); - } - } - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new ServiceException("删除失败"); - } - } - - @Override - @Transactional(rollbackFor = Exception.class) - public boolean deleteByInstanceId(String processInstanceId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(WfTaskBackNode::getInstanceId, processInstanceId); - List list = wfTaskBackNodeMapper.selectList(wrapper); - int delete = wfTaskBackNodeMapper.delete(wrapper); - if (list.size() != delete) { - throw new ServiceException("删除失败"); - } - return true; - } - - @Override - public boolean deleteByInstanceIds(List processInstanceIds) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(WfTaskBackNode::getInstanceId, processInstanceIds); - List list = wfTaskBackNodeMapper.selectList(wrapper); - int delete = wfTaskBackNodeMapper.delete(wrapper); - if (list.size() != delete) { - throw new ServiceException("删除失败"); - } - return true; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java deleted file mode 100644 index b036584..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.dromara.workflow.service.impl; - -import cn.hutool.core.util.StrUtil; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.service.WorkflowService; -import org.dromara.workflow.domain.ActHiProcinst; -import org.dromara.workflow.service.IActHiProcinstService; -import org.dromara.workflow.service.IActProcessInstanceService; -import org.dromara.workflow.utils.WorkflowUtils; -import org.flowable.engine.TaskService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.Map; - -/** - * 通用 工作流服务实现 - * - * @author may - */ -@RequiredArgsConstructor -@Service -public class WorkflowServiceImpl implements WorkflowService { - - @Autowired(required = false) - private TaskService taskService; - private final IActProcessInstanceService actProcessInstanceService; - private final IActHiProcinstService actHiProcinstService; - /** - * 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息 - * - * @param businessKeys 业务id - * @return 结果 - */ - @Override - public boolean deleteRunAndHisInstance(List businessKeys) { - return actProcessInstanceService.deleteRunAndHisInstance(businessKeys); - } - - /** - * 获取当前流程状态 - * - * @param taskId 任务id - */ - @Override - public String getBusinessStatusByTaskId(String taskId) { - return WorkflowUtils.getBusinessStatusByTaskId(taskId); - } - - /** - * 获取当前流程状态 - * - * @param businessKey 业务id - */ - @Override - public String getBusinessStatus(String businessKey) { - return WorkflowUtils.getBusinessStatus(businessKey); - } - - /** - * 设置流程变量(全局变量) - * - * @param taskId 任务id - * @param variableName 变量名称 - * @param value 变量值 - */ - @Override - public void setVariable(String taskId, String variableName, Object value) { - taskService.setVariable(taskId, variableName, value); - } - - /** - * 设置流程变量(全局变量) - * - * @param taskId 任务id - * @param variables 流程变量 - */ - @Override - public void setVariables(String taskId, Map variables) { - taskService.setVariables(taskId, variables); - } - - /** - * 设置流程变量(本地变量,非全局变量) - * - * @param taskId 任务id - * @param variableName 变量名称 - * @param value 变量值 - */ - @Override - public void setVariableLocal(String taskId, String variableName, Object value) { - taskService.setVariableLocal(taskId, variableName, value); - } - - /** - * 设置流程变量(本地变量,非全局变量) - * - * @param taskId 任务id - * @param variables 流程变量 - */ - @Override - public void setVariablesLocal(String taskId, Map variables) { - taskService.setVariablesLocal(taskId, variables); - } - - /** - * 按照业务id查询流程实例id - * - * @param businessKey 业务id - * @return 结果 - */ - @Override - public String getInstanceIdByBusinessKey(String businessKey) { - ActHiProcinst actHiProcinst = actHiProcinstService.selectByBusinessKey(businessKey); - if (actHiProcinst == null) { - return StrUtil.EMPTY; - } - return actHiProcinst.getId(); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java deleted file mode 100644 index 7c5377e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java +++ /dev/null @@ -1,289 +0,0 @@ -package org.dromara.workflow.utils; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import org.dromara.common.core.utils.SpringUtils; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.json.utils.JsonUtils; -import org.dromara.workflow.domain.vo.MultiInstanceVo; -import org.flowable.bpmn.converter.BpmnXMLConverter; -import org.flowable.bpmn.model.*; -import org.flowable.bpmn.model.Process; -import org.flowable.editor.language.json.converter.BpmnJsonConverter; -import org.flowable.engine.ProcessEngine; - -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.rmi.ServerException; -import java.util.*; -import java.util.stream.Collectors; - -/** - * 模型工具 - * - * @author may - */ -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class ModelUtils { - - private static final ProcessEngine PROCESS_ENGINE = SpringUtils.getBean(ProcessEngine.class); - - public static BpmnModel xmlToBpmnModel(String xml) throws IOException { - if (xml == null) { - throw new ServerException("xml不能为空"); - } - try { - InputStream inputStream = new ByteArrayInputStream(StrUtil.utf8Bytes(xml)); - XMLInputFactory factory = XMLInputFactory.newInstance(); - XMLStreamReader reader = factory.createXMLStreamReader(inputStream); - return new BpmnXMLConverter().convertToBpmnModel(reader); - } catch (XMLStreamException e) { - throw new ServerException(e.getMessage()); - } - } - - /** - * bpmnModel转为xml - * - * @param jsonBytes json - */ - public static byte[] bpmnJsonToXmlBytes(byte[] jsonBytes) throws IOException { - if (jsonBytes == null) { - return new byte[0]; - } - // 1. json字节码转成 BpmnModel 对象 - ObjectMapper objectMapper = JsonUtils.getObjectMapper(); - JsonNode jsonNode = objectMapper.readTree(jsonBytes); - BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(jsonNode); - - if (bpmnModel.getProcesses().isEmpty()) { - return new byte[0]; - } - // 2.将bpmnModel转为xml - return new BpmnXMLConverter().convertToXML(bpmnModel); - } - - /** - * xml转为bpmnModel - * - * @param xmlBytes xml - */ - public static BpmnModel xmlToBpmnModel(byte[] xmlBytes) throws XMLStreamException { - ByteArrayInputStream byteArrayInputStream = IoUtil.toStream(xmlBytes); - XMLInputFactory xif = XMLInputFactory.newInstance(); - XMLStreamReader xtr = xif.createXMLStreamReader(byteArrayInputStream); - return new BpmnXMLConverter().convertToBpmnModel(xtr); - } - - /** - * 校验模型 - * - * @param bpmnModel bpmn模型 - */ - public static void checkBpmnModel(BpmnModel bpmnModel) throws ServerException { - Collection flowElements = bpmnModel.getMainProcess().getFlowElements(); - - checkBpmnNode(flowElements, false); - - List subProcessList = flowElements.stream().filter(SubProcess.class::isInstance).map(SubProcess.class::cast).collect(Collectors.toList()); - if (!CollUtil.isEmpty(subProcessList)) { - for (SubProcess subProcess : subProcessList) { - Collection subProcessFlowElements = subProcess.getFlowElements(); - checkBpmnNode(subProcessFlowElements, true); - } - } - List multiInstanceVoList = new ArrayList<>(); - for (FlowElement flowElement : flowElements) { - if (flowElement instanceof UserTask && ObjectUtil.isNotEmpty(((UserTask) flowElement).getLoopCharacteristics()) && StringUtils.isNotBlank(((UserTask) flowElement).getLoopCharacteristics().getInputDataItem())) { - MultiInstanceVo multiInstanceVo = new MultiInstanceVo(); - multiInstanceVo.setAssigneeList(((UserTask) flowElement).getLoopCharacteristics().getInputDataItem()); - multiInstanceVoList.add(multiInstanceVo); - } - } - - if (CollectionUtil.isNotEmpty(multiInstanceVoList) && multiInstanceVoList.size() > 1) { - Map> assigneeListGroup = StreamUtils.groupByKey(multiInstanceVoList, MultiInstanceVo::getAssigneeList); - for (Map.Entry> entry : assigneeListGroup.entrySet()) { - List value = entry.getValue(); - if (CollectionUtil.isNotEmpty(value) && value.size() > 1) { - String key = entry.getKey(); - throw new ServerException("会签人员集合【" + key + "】重复,请重新设置集合KEY"); - } - } - } - } - - /** - * 校验bpmn节点是否合法 - * - * @param flowElements 节点集合 - * @param subtask 是否子流程 - */ - private static void checkBpmnNode(Collection flowElements, boolean subtask) throws ServerException { - - if (CollUtil.isEmpty(flowElements)) { - throw new ServerException(subtask ? "子流程必须存在节点" : "必须存在节点!"); - } - - List startEventList = flowElements.stream().filter(StartEvent.class::isInstance).map(StartEvent.class::cast).collect(Collectors.toList()); - if (CollUtil.isEmpty(startEventList)) { - throw new ServerException(subtask ? "子流程必须存在开始节点" : "必须存在开始节点!"); - } - - if (startEventList.size() > 1) { - throw new ServerException(subtask ? "子流程只能存在一个开始节点" : "只能存在一个开始节点!"); - } - - StartEvent startEvent = startEventList.get(0); - List outgoingFlows = startEvent.getOutgoingFlows(); - if (CollUtil.isEmpty(outgoingFlows)) { - throw new ServerException(subtask ? "子流程流程节点为空,请至少设计一条主线流程!" : "流程节点为空,请至少设计一条主线流程!"); - } - - FlowElement targetFlowElement = outgoingFlows.get(0).getTargetFlowElement(); - if (!(targetFlowElement instanceof UserTask) && !subtask) { - throw new ServerException("开始节点后第一个节点必须是用户任务!"); - } - //开始节点后第一个节点申请人节点 - if ((targetFlowElement instanceof UserTask) && !subtask) { - UserTask userTask = (UserTask) targetFlowElement; - if (StringUtils.isBlank(userTask.getFormKey())) { - throw new ServerException("申请人节点必须选择表单!"); - } - } - List endEventList = flowElements.stream().filter(EndEvent.class::isInstance).map(EndEvent.class::cast).collect(Collectors.toList()); - if (CollUtil.isEmpty(endEventList)) { - throw new ServerException(subtask ? "子流程必须存在结束节点!" : "必须存在结束节点!"); - } - } - - /** - * 获取流程全部用户节点 - * - * @param processDefinitionId 流程定义id - */ - public static List getUserTaskFlowElements(String processDefinitionId) { - BpmnModel bpmnModel = PROCESS_ENGINE.getRepositoryService().getBpmnModel(processDefinitionId); - List list = new ArrayList<>(); - List processes = bpmnModel.getProcesses(); - Collection flowElements = processes.get(0).getFlowElements(); - buildUserTaskFlowElements(flowElements, list); - return list; - } - - /** - * 递归获取所有节点 - * - * @param flowElements 节点信息 - * @param list 集合 - */ - private static void buildUserTaskFlowElements(Collection flowElements, List list) { - for (FlowElement flowElement : flowElements) { - if (flowElement instanceof SubProcess) { - Collection subFlowElements = ((SubProcess) flowElement).getFlowElements(); - buildUserTaskFlowElements(subFlowElements, list); - } else if (flowElement instanceof UserTask) { - list.add((UserTask) flowElement); - } - } - } - - /** - * 获取流程全部节点 - * - * @param processDefinitionId 流程定义id - */ - public static List getFlowElements(String processDefinitionId) { - BpmnModel bpmnModel = PROCESS_ENGINE.getRepositoryService().getBpmnModel(processDefinitionId); - List list = new ArrayList<>(); - List processes = bpmnModel.getProcesses(); - Collection flowElements = processes.get(0).getFlowElements(); - buildFlowElements(flowElements, list); - return list; - } - - /** - * 递归获取所有节点 - * - * @param flowElements 节点信息 - * @param list 集合 - */ - private static void buildFlowElements(Collection flowElements, List list) { - for (FlowElement flowElement : flowElements) { - list.add(flowElement); - if (flowElement instanceof SubProcess) { - Collection subFlowElements = ((SubProcess) flowElement).getFlowElements(); - buildFlowElements(subFlowElements, list); - } - } - } - - /** - * 获取全部扩展信息 - * - * @param processDefinitionId 流程定义id - */ - public static Map> getExtensionElements(String processDefinitionId) { - Map> map = new HashMap<>(); - List flowElements = getFlowElements(processDefinitionId); - for (FlowElement flowElement : flowElements) { - if (flowElement instanceof UserTask && CollUtil.isNotEmpty(flowElement.getExtensionElements())) { - map.putAll(flowElement.getExtensionElements()); - } - } - return map; - } - - /** - * 获取某个节点的扩展信息 - * - * @param processDefinitionId 流程定义id - * @param flowElementId 节点id - */ - public static Map> getExtensionElement(String processDefinitionId, String flowElementId) { - BpmnModel bpmnModel = PROCESS_ENGINE.getRepositoryService().getBpmnModel(processDefinitionId); - Process process = bpmnModel.getMainProcess(); - FlowElement flowElement = process.getFlowElement(flowElementId); - return flowElement.getExtensionElements(); - } - - /** - * 判断当前节点是否为用户任务 - * - * @param processDefinitionId 流程定义id - * @param taskDefinitionKey 流程定义id - */ - public static boolean isUserTask(String processDefinitionId, String taskDefinitionKey) { - BpmnModel bpmnModel = PROCESS_ENGINE.getRepositoryService().getBpmnModel(processDefinitionId); - FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(taskDefinitionKey); - return flowNode instanceof UserTask; - } - - /** - * 获取申请人节点 - * - * @param processDefinitionId 流程定义id - * @return 结果 - */ - public static UserTask getApplyUserTask(String processDefinitionId) { - BpmnModel bpmnModel = PROCESS_ENGINE.getRepositoryService().getBpmnModel(processDefinitionId); - Collection flowElements = bpmnModel.getMainProcess().getFlowElements(); - List startEventList = flowElements.stream().filter(StartEvent.class::isInstance).map(StartEvent.class::cast).collect(Collectors.toList()); - StartEvent startEvent = startEventList.get(0); - List outgoingFlows = startEvent.getOutgoingFlows(); - FlowElement targetFlowElement = outgoingFlows.get(0).getTargetFlowElement(); - return (UserTask) targetFlowElement; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/QueryUtils.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/QueryUtils.java deleted file mode 100644 index df928dc..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/QueryUtils.java +++ /dev/null @@ -1,169 +0,0 @@ -package org.dromara.workflow.utils; - -import cn.hutool.core.bean.BeanUtil; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import org.dromara.common.core.utils.SpringUtils; -import org.dromara.common.tenant.helper.TenantHelper; -import org.dromara.workflow.domain.vo.TaskVo; -import org.flowable.engine.ProcessEngine; -import org.flowable.engine.history.HistoricActivityInstanceQuery; -import org.flowable.engine.history.HistoricProcessInstanceQuery; -import org.flowable.engine.repository.DeploymentQuery; -import org.flowable.engine.repository.ModelQuery; -import org.flowable.engine.repository.ProcessDefinitionQuery; -import org.flowable.engine.runtime.ProcessInstance; -import org.flowable.engine.runtime.ProcessInstanceQuery; -import org.flowable.task.api.Task; -import org.flowable.task.api.TaskQuery; -import org.flowable.task.api.history.HistoricTaskInstanceQuery; - -import java.util.Collection; -import java.util.List; -import java.util.Set; - -/** - * 查询工具 - * - * @author Lion Li - */ -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class QueryUtils { - - private static final ProcessEngine PROCESS_ENGINE = SpringUtils.getBean(ProcessEngine.class); - - public static ModelQuery modelQuery() { - ModelQuery query = PROCESS_ENGINE.getRepositoryService().createModelQuery(); - if (TenantHelper.isEnable()) { - query.modelTenantId(TenantHelper.getTenantId()); - } - return query; - } - - public static ProcessDefinitionQuery definitionQuery() { - ProcessDefinitionQuery query = PROCESS_ENGINE.getRepositoryService().createProcessDefinitionQuery(); - if (TenantHelper.isEnable()) { - query.processDefinitionTenantId(TenantHelper.getTenantId()); - } - return query; - } - - public static DeploymentQuery deploymentQuery() { - DeploymentQuery query = PROCESS_ENGINE.getRepositoryService().createDeploymentQuery(); - if (TenantHelper.isEnable()) { - query.deploymentTenantId(TenantHelper.getTenantId()); - } - return query; - } - - public static DeploymentQuery deploymentQuery(String deploymentId) { - return deploymentQuery().deploymentId(deploymentId); - } - - public static DeploymentQuery deploymentQuery(List deploymentIds) { - return deploymentQuery().deploymentIds(deploymentIds); - } - - public static HistoricTaskInstanceQuery hisTaskInstanceQuery() { - HistoricTaskInstanceQuery query = PROCESS_ENGINE.getHistoryService().createHistoricTaskInstanceQuery(); - if (TenantHelper.isEnable()) { - query.taskTenantId(TenantHelper.getTenantId()); - } - return query; - } - - public static HistoricTaskInstanceQuery hisTaskInstanceQuery(String processInstanceId) { - return hisTaskInstanceQuery().processInstanceId(processInstanceId); - } - - public static HistoricTaskInstanceQuery hisTaskBusinessKeyQuery(String businessKey) { - return hisTaskInstanceQuery().processInstanceBusinessKey(businessKey); - } - - public static ProcessInstanceQuery instanceQuery() { - ProcessInstanceQuery query = PROCESS_ENGINE.getRuntimeService().createProcessInstanceQuery(); - if (TenantHelper.isEnable()) { - query.processInstanceTenantId(TenantHelper.getTenantId()); - } - return query; - } - - public static ProcessInstanceQuery instanceQuery(String processInstanceId) { - return instanceQuery().processInstanceId(processInstanceId); - } - - public static ProcessInstanceQuery businessKeyQuery(String businessKey) { - return instanceQuery().processInstanceBusinessKey(businessKey); - } - - public static ProcessInstanceQuery instanceQuery(Set processInstanceIds) { - return instanceQuery().processInstanceIds(processInstanceIds); - } - - public static HistoricProcessInstanceQuery hisInstanceQuery() { - HistoricProcessInstanceQuery query = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery(); - if (TenantHelper.isEnable()) { - query.processInstanceTenantId(TenantHelper.getTenantId()); - } - return query; - } - - public static HistoricProcessInstanceQuery hisInstanceQuery(String processInstanceId) { - return hisInstanceQuery().processInstanceId(processInstanceId); - } - - public static HistoricProcessInstanceQuery hisBusinessKeyQuery(String businessKey) { - return hisInstanceQuery().processInstanceBusinessKey(businessKey); - } - - public static HistoricProcessInstanceQuery hisInstanceQuery(Set processInstanceIds) { - return hisInstanceQuery().processInstanceIds(processInstanceIds); - } - - public static HistoricActivityInstanceQuery hisActivityInstanceQuery() { - HistoricActivityInstanceQuery query = PROCESS_ENGINE.getHistoryService().createHistoricActivityInstanceQuery(); - if (TenantHelper.isEnable()) { - query.activityTenantId(TenantHelper.getTenantId()); - } - return query; - } - - public static HistoricActivityInstanceQuery hisActivityInstanceQuery(String processInstanceId) { - return hisActivityInstanceQuery().processInstanceId(processInstanceId); - } - - public static TaskQuery taskQuery() { - TaskQuery query = PROCESS_ENGINE.getTaskService().createTaskQuery(); - if (TenantHelper.isEnable()) { - query.taskTenantId(TenantHelper.getTenantId()); - } - return query; - } - - public static TaskQuery taskQuery(String processInstanceId) { - return taskQuery().processInstanceId(processInstanceId); - } - - public static TaskQuery taskQuery(Collection processInstanceIds) { - return taskQuery().processInstanceIdIn(processInstanceIds); - } - - /** - * 按照任务id查询当前任务 - * - * @param taskId 任务id - */ - public static TaskVo getTask(String taskId) { - Task task = PROCESS_ENGINE.getTaskService().createTaskQuery().taskId(taskId).singleResult(); - if (task == null) { - return null; - } - ProcessInstance processInstance = QueryUtils.instanceQuery(task.getProcessInstanceId()).singleResult(); - TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class); - taskVo.setBusinessKey(processInstance.getBusinessKey()); - taskVo.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); - String businessStatus = WorkflowUtils.getBusinessStatus(taskVo.getBusinessKey()); - taskVo.setBusinessStatus(businessStatus); - return taskVo; - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java deleted file mode 100644 index d7c4472..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java +++ /dev/null @@ -1,295 +0,0 @@ -package org.dromara.workflow.utils; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import org.dromara.common.core.domain.dto.RoleDTO; -import org.dromara.common.core.domain.dto.UserDTO; -import org.dromara.common.core.service.UserService; -import org.dromara.common.core.utils.SpringUtils; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mail.utils.MailUtils; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.common.tenant.helper.TenantHelper; -import org.dromara.common.websocket.dto.WebSocketMessageDto; -import org.dromara.common.websocket.utils.WebSocketUtils; -import org.dromara.workflow.common.constant.FlowConstant; -import org.dromara.workflow.common.enums.MessageTypeEnum; -import org.dromara.workflow.common.enums.TaskStatusEnum; -import org.dromara.workflow.domain.ActHiTaskinst; -import org.dromara.workflow.domain.vo.MultiInstanceVo; -import org.dromara.workflow.domain.vo.ParticipantVo; -import org.dromara.workflow.flowable.cmd.UpdateHiTaskInstCmd; -import org.dromara.workflow.mapper.ActHiTaskinstMapper; -import org.flowable.bpmn.model.BpmnModel; -import org.flowable.bpmn.model.FlowNode; -import org.flowable.common.engine.api.delegate.Expression; -import org.flowable.engine.ProcessEngine; -import org.flowable.engine.history.HistoricProcessInstance; -import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; -import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; -import org.flowable.identitylink.api.history.HistoricIdentityLink; -import org.flowable.task.api.Task; -import org.flowable.task.api.TaskQuery; -import org.flowable.task.api.history.HistoricTaskInstance; -import org.flowable.task.service.impl.persistence.entity.TaskEntity; - -import java.util.*; - -/** - * 工作流工具 - * - * @author may - */ -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class WorkflowUtils { - - private static final ProcessEngine PROCESS_ENGINE = SpringUtils.getBean(ProcessEngine.class); - private static final ActHiTaskinstMapper ACT_HI_TASKINST_MAPPER = SpringUtils.getBean(ActHiTaskinstMapper.class); - - /** - * 创建一个新任务 - * - * @param currentTask 参数 - */ - public static TaskEntity createNewTask(Task currentTask) { - TaskEntity task = null; - if (ObjectUtil.isNotEmpty(currentTask)) { - task = (TaskEntity) PROCESS_ENGINE.getTaskService().newTask(); - task.setCategory(currentTask.getCategory()); - task.setDescription(currentTask.getDescription()); - task.setAssignee(currentTask.getAssignee()); - task.setName(currentTask.getName()); - task.setProcessDefinitionId(currentTask.getProcessDefinitionId()); - task.setProcessInstanceId(currentTask.getProcessInstanceId()); - task.setTaskDefinitionKey(currentTask.getTaskDefinitionKey()); - task.setPriority(currentTask.getPriority()); - task.setCreateTime(new Date()); - task.setTenantId(TenantHelper.getTenantId()); - PROCESS_ENGINE.getTaskService().saveTask(task); - } - if (ObjectUtil.isNotNull(task)) { - UpdateHiTaskInstCmd updateHiTaskInstCmd = new UpdateHiTaskInstCmd(Collections.singletonList(task.getId()), task.getProcessDefinitionId(), task.getProcessInstanceId()); - PROCESS_ENGINE.getManagementService().executeCommand(updateHiTaskInstCmd); - } - return task; - } - - /** - * 抄送任务 - * - * @param parentTaskList 父级任务 - * @param userIds 人员id - */ - public static void createCopyTask(List parentTaskList, List userIds) { - List list = new ArrayList<>(); - String tenantId = TenantHelper.getTenantId(); - for (Task parentTask : parentTaskList) { - for (Long userId : userIds) { - TaskEntity newTask = (TaskEntity) PROCESS_ENGINE.getTaskService().newTask(); - newTask.setParentTaskId(parentTask.getId()); - newTask.setAssignee(userId.toString()); - newTask.setName("【抄送】-" + parentTask.getName()); - newTask.setProcessDefinitionId(parentTask.getProcessDefinitionId()); - newTask.setProcessInstanceId(parentTask.getProcessInstanceId()); - newTask.setTaskDefinitionKey(parentTask.getTaskDefinitionKey()); - newTask.setTenantId(tenantId); - list.add(newTask); - } - } - PROCESS_ENGINE.getTaskService().bulkSaveTasks(list); - if (CollUtil.isNotEmpty(list) && CollUtil.isNotEmpty(parentTaskList)) { - String processInstanceId = parentTaskList.get(0).getProcessInstanceId(); - String processDefinitionId = parentTaskList.get(0).getProcessDefinitionId(); - List taskIds = StreamUtils.toList(list, Task::getId); - ActHiTaskinst actHiTaskinst = new ActHiTaskinst(); - actHiTaskinst.setProcDefId(processDefinitionId); - actHiTaskinst.setProcInstId(processInstanceId); - actHiTaskinst.setScopeType(TaskStatusEnum.COPY.getStatus()); - actHiTaskinst.setTenantId(tenantId); - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.in(ActHiTaskinst::getId, taskIds); - ACT_HI_TASKINST_MAPPER.update(actHiTaskinst, updateWrapper); - for (Task task : list) { - PROCESS_ENGINE.getTaskService().addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.COPY.getStatus(), StrUtil.EMPTY); - } - } - } - - /** - * 获取当前任务参与者 - * - * @param taskId 任务id - */ - public static ParticipantVo getCurrentTaskParticipant(String taskId, UserService userService) { - ParticipantVo participantVo = new ParticipantVo(); - List linksForTask = PROCESS_ENGINE.getHistoryService().getHistoricIdentityLinksForTask(taskId); - Task task = QueryUtils.taskQuery().taskId(taskId).singleResult(); - if (task != null && CollUtil.isNotEmpty(linksForTask)) { - List groupList = StreamUtils.filter(linksForTask, e -> StringUtils.isNotBlank(e.getGroupId())); - if (CollUtil.isNotEmpty(groupList)) { - List groupIds = StreamUtils.toList(groupList, e -> Long.valueOf(e.getGroupId())); - List userIds = userService.selectUserIdsByRoleIds(groupIds); - if (CollUtil.isNotEmpty(userIds)) { - participantVo.setGroupIds(groupIds); - List userList = userService.selectListByIds(userIds); - if (CollUtil.isNotEmpty(userList)) { - List userIdList = StreamUtils.toList(userList, UserDTO::getUserId); - List nickNames = StreamUtils.toList(userList, UserDTO::getNickName); - participantVo.setCandidate(userIdList); - participantVo.setCandidateName(nickNames); - participantVo.setClaim(!StringUtils.isBlank(task.getAssignee())); - } - } - } else { - List candidateList = StreamUtils.filter(linksForTask, e -> FlowConstant.CANDIDATE.equals(e.getType())); - List userIdList = new ArrayList<>(); - for (HistoricIdentityLink historicIdentityLink : linksForTask) { - try { - userIdList.add(Long.valueOf(historicIdentityLink.getUserId())); - } catch (NumberFormatException ignored) { - - } - } - List userList = userService.selectListByIds(userIdList); - if (CollUtil.isNotEmpty(userList)) { - List userIds = StreamUtils.toList(userList, UserDTO::getUserId); - List nickNames = StreamUtils.toList(userList, UserDTO::getNickName); - participantVo.setCandidate(userIds); - participantVo.setCandidateName(nickNames); - // 判断当前任务是否具有多个办理人 - if (CollUtil.isNotEmpty(candidateList) && candidateList.size() > 1) { - // 如果 assignee 存在,则设置当前任务已经被认领 - participantVo.setClaim(StringUtils.isNotBlank(task.getAssignee())); - } - } - } - } - return participantVo; - } - - /** - * 判断当前节点是否为会签节点 - * - * @param processDefinitionId 流程定义id - * @param taskDefinitionKey 流程定义id - */ - public static MultiInstanceVo isMultiInstance(String processDefinitionId, String taskDefinitionKey) { - BpmnModel bpmnModel = PROCESS_ENGINE.getRepositoryService().getBpmnModel(processDefinitionId); - FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(taskDefinitionKey); - MultiInstanceVo multiInstanceVo = new MultiInstanceVo(); - //判断是否为并行会签节点 - if (flowNode.getBehavior() instanceof ParallelMultiInstanceBehavior behavior && behavior.getCollectionExpression() != null) { - Expression collectionExpression = behavior.getCollectionExpression(); - String assigneeList = collectionExpression.getExpressionText(); - String assignee = behavior.getCollectionElementVariable(); - multiInstanceVo.setType(behavior); - multiInstanceVo.setAssignee(assignee); - multiInstanceVo.setAssigneeList(assigneeList); - return multiInstanceVo; - //判断是否为串行会签节点 - } else if (flowNode.getBehavior() instanceof SequentialMultiInstanceBehavior behavior && behavior.getCollectionExpression() != null) { - Expression collectionExpression = behavior.getCollectionExpression(); - String assigneeList = collectionExpression.getExpressionText(); - String assignee = behavior.getCollectionElementVariable(); - multiInstanceVo.setType(behavior); - multiInstanceVo.setAssignee(assignee); - multiInstanceVo.setAssigneeList(assigneeList); - return multiInstanceVo; - } - return null; - } - - /** - * 获取当前流程状态 - * - * @param taskId 任务id - */ - public static String getBusinessStatusByTaskId(String taskId) { - HistoricTaskInstance historicTaskInstance = QueryUtils.hisTaskInstanceQuery().taskId(taskId).singleResult(); - HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery(historicTaskInstance.getProcessInstanceId()).singleResult(); - return historicProcessInstance.getBusinessStatus(); - } - - /** - * 获取当前流程状态 - * - * @param businessKey 业务id - */ - public static String getBusinessStatus(String businessKey) { - HistoricProcessInstance historicProcessInstance = QueryUtils.hisBusinessKeyQuery(businessKey).singleResult(); - return historicProcessInstance.getBusinessStatus(); - } - - /** - * 发送消息 - * - * @param list 任务 - * @param name 流程名称 - * @param messageType 消息类型 - * @param message 消息内容,为空则发送默认配置的消息内容 - */ - public static void sendMessage(List list, String name, List messageType, String message, UserService userService) { - Set userIds = new HashSet<>(); - if (StringUtils.isBlank(message)) { - message = "有新的【" + name + "】单据已经提交至您的待办,请您及时处理。"; - } - for (Task t : list) { - ParticipantVo taskParticipant = WorkflowUtils.getCurrentTaskParticipant(t.getId(), userService); - if (CollUtil.isNotEmpty(taskParticipant.getGroupIds())) { - List userIdList = userService.selectUserIdsByRoleIds(taskParticipant.getGroupIds()); - if (CollUtil.isNotEmpty(userIdList)) { - userIds.addAll(userIdList); - } - } - List candidate = taskParticipant.getCandidate(); - if (CollUtil.isNotEmpty(candidate)) { - userIds.addAll(candidate); - } - } - if (CollUtil.isNotEmpty(userIds)) { - List userList = userService.selectListByIds(new ArrayList<>(userIds)); - for (String code : messageType) { - MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code); - if (ObjectUtil.isNotEmpty(messageTypeEnum)) { - switch (messageTypeEnum) { - case SYSTEM_MESSAGE: - WebSocketMessageDto dto = new WebSocketMessageDto(); - dto.setSessionKeys(new ArrayList<>(userIds)); - dto.setMessage(message); - WebSocketUtils.publishMessage(dto); - break; - case EMAIL_MESSAGE: - MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), "单据审批提醒", message); - break; - case SMS_MESSAGE: - //todo 短信发送 - break; - } - } - } - } - } - - /** - * 根据任务id查询 当前用户的任务,检查 当前人员 是否是该 taskId 的办理人 - * - * @param taskId 任务id - * @return 结果 - */ - public static Task getTaskByCurrentUser(String taskId) { - TaskQuery taskQuery = QueryUtils.taskQuery(); - taskQuery.taskId(taskId).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())); - - List roles = LoginHelper.getLoginUser().getRoles(); - if (CollUtil.isNotEmpty(roles)) { - List groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId())); - taskQuery.taskCandidateGroupIn(groupIds); - } - return taskQuery.singleResult(); - } -} diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/package-info.md b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/package-info.md deleted file mode 100644 index c938b1e..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/package-info.md +++ /dev/null @@ -1,3 +0,0 @@ -java包使用 `.` 分割 resource 目录使用 `/` 分割 -
-此文件目的 防止文件夹粘连找不到 `xml` 文件 \ No newline at end of file diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActHiProcinstMapper.xml b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActHiProcinstMapper.xml deleted file mode 100644 index dd05785..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActHiProcinstMapper.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActHiTaskinstMapper.xml b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActHiTaskinstMapper.xml deleted file mode 100644 index 7e73b60..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActHiTaskinstMapper.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml deleted file mode 100644 index 3641900..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/TestLeaveMapper.xml b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/TestLeaveMapper.xml deleted file mode 100644 index d52f6b0..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/TestLeaveMapper.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfCategoryMapper.xml b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfCategoryMapper.xml deleted file mode 100644 index 4375cb2..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfCategoryMapper.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfDefinitionConfigMapper.xml b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfDefinitionConfigMapper.xml deleted file mode 100644 index 8d579f7..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfDefinitionConfigMapper.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormManageMapper.xml b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormManageMapper.xml deleted file mode 100644 index 59221f8..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormManageMapper.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfNodeConfigMapper.xml b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfNodeConfigMapper.xml deleted file mode 100644 index b65194f..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfNodeConfigMapper.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfTaskBackNodeMapper.xml b/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfTaskBackNodeMapper.xml deleted file mode 100644 index 4a9179b..0000000 --- a/im-admin/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfTaskBackNodeMapper.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/im-admin/script/bin/ry.bat b/im-admin/script/bin/ry.bat deleted file mode 100644 index ea98cbe..0000000 --- a/im-admin/script/bin/ry.bat +++ /dev/null @@ -1,68 +0,0 @@ -rem 使用者应根据自身平台编码自行转换 防止乱码 例如 win使用gbk编码 -@echo off - -rem jar平级目录 -set AppName=ruoyi-admin.jar - -rem JVM参数 -set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC" - - -ECHO. - ECHO. [1] 启动%AppName% - ECHO. [2] 关闭%AppName% - ECHO. [3] 重启%AppName% - ECHO. [4] 启动状态 %AppName% - ECHO. [5] 退 出 -ECHO. - -ECHO.请输入选择项目的序号: -set /p ID= - IF "%id%"=="1" GOTO start - IF "%id%"=="2" GOTO stop - IF "%id%"=="3" GOTO restart - IF "%id%"=="4" GOTO status - IF "%id%"=="5" EXIT -PAUSE -:start - for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( - set pid=%%a - set image_name=%%b - ) - if defined pid ( - echo %%is running - PAUSE - ) - -start javaw %JVM_OPTS% -jar %AppName% - -echo starting…… -echo Start %AppName% success... -goto:eof - -rem 函数stop通过jps命令查找pid并结束进程 -:stop - for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( - set pid=%%a - set image_name=%%b - ) - if not defined pid (echo process %AppName% does not exists) else ( - echo prepare to kill %image_name% - echo start kill %pid% ... - rem 根据进程ID,kill进程 - taskkill /f /pid %pid% - ) -goto:eof -:restart - call :stop - call :start -goto:eof -:status - for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( - set pid=%%a - set image_name=%%b - ) - if not defined pid (echo process %AppName% is dead ) else ( - echo %image_name% is running - ) -goto:eof diff --git a/im-admin/script/bin/ry.sh b/im-admin/script/bin/ry.sh deleted file mode 100644 index a6f5d9c..0000000 --- a/im-admin/script/bin/ry.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/sh -# ./ry.sh start 启动 stop 停止 restart 重启 status 状态 -AppName=ruoyi-admin.jar - -# JVM参数 -JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC" -APP_HOME=`pwd` -LOG_PATH=$APP_HOME/logs/$AppName.log - -if [ "$1" = "" ]; -then - echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m" - exit 1 -fi - -if [ "$AppName" = "" ]; -then - echo -e "\033[0;31m 未输入应用名 \033[0m" - exit 1 -fi - -function start() -{ - PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'` - - if [ x"$PID" != x"" ]; then - echo "$AppName is running..." - else - nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 & - echo "Start $AppName success..." - fi -} - -function stop() -{ - echo "Stop $AppName" - - PID="" - query(){ - PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'` - } - - query - if [ x"$PID" != x"" ]; then - kill -TERM $PID - echo "$AppName (pid:$PID) exiting..." - while [ x"$PID" != x"" ] - do - sleep 1 - query - done - echo "$AppName exited." - else - echo "$AppName already stopped." - fi -} - -function restart() -{ - stop - sleep 2 - start -} - -function status() -{ - PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l` - if [ $PID != 0 ];then - echo "$AppName is running..." - else - echo "$AppName is not running..." - fi -} - -case $1 in - start) - start;; - stop) - stop;; - restart) - restart;; - status) - status;; - *) - -esac diff --git a/im-admin/script/bpmn/模型.zip b/im-admin/script/bpmn/模型.zip deleted file mode 100644 index 6f30952ab14f0b60dc64674e7eef083141856458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8543 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