From f88e8af5a7be8dcea76f23b51fc4077649223998 Mon Sep 17 00:00:00 2001 From: wangshaoping Date: Tue, 19 Aug 2025 13:29:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=A1=86=E6=9E=B6=E5=8F=91?= =?UTF-8?q?=E5=B8=83:=208.2.33=20=20=201)=20=E4=BF=AE=E5=A4=8D=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E6=88=91=E7=9A=84=E5=B7=B2=E5=8A=9E=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=98=BE=E7=A4=BA=E9=94=99=E8=AF=AF=20=20=202)=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BC=82=E6=AD=A5=E4=BB=BB=E5=8A=A1=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=92=8C=E6=95=B0=E6=8D=AE=E5=AD=98=E5=82=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端核心发布: 8.2.126 1) 增加异步任务 --- README.adoc | 34 ++- cips.frontend/package.json | 4 +- erm.frontend/package.json | 4 +- gradle.properties | 4 +- io.sc.engine.mv.frontend/package.json | 4 +- io.sc.engine.rule.frontend/package.json | 4 +- .../views/resources/designer/Parameter.vue | 2 - .../RuleEngineWorkFlowInitializer.java | 1 + .../ParameterInOptionItemWebController.java | 16 +- .../service/ParameterInOptionItemService.java | 4 +- .../ParameterInOptionItemServiceImpl.java | 10 +- io.sc.engine.st.frontend/package.json | 4 +- io.sc.platform.ai.frontend/package.json | 4 +- io.sc.platform.core.frontend/package.json | 2 +- .../grid/ts/toolbar/buttons/Export.ts | 11 +- .../src/platform/i18n/messages.json | 3 + .../src/platform/i18n/messages_tw_CN.json | 3 + .../src/platform/i18n/messages_zh_CN.json | 3 + .../layout/sub-layout/AsyncTaskDialog.vue | 129 +++++++++ .../src/platform/layout/sub-layout/Topper.vue | 38 ++- .../src/platform/views/home/MyDoneTask.vue | 2 +- .../src/views/testcase/form/form.vue | 269 +++++------------- .../template-project/package.json | 4 +- .../src/views/testcase/form/form.vue | 269 +++++------------- .../io/sc/platform/core/i18n/words.properties | 3 +- .../platform/core/i18n/words_tw_CN.properties | 3 +- .../platform/core/i18n/words_zh_CN.properties | 3 +- io.sc.platform.developer.doc/package.json | 4 +- .../package.json | 4 +- .../listener/start/ProcessStartListener.java | 4 +- .../BusinessKeyAndDescriptionWrapper.java | 9 + ...usinessKeyAndDescriptionWrapperMapper.java | 1 + .../flowable/support/ProcessTaskWrapper.java | 9 + .../support/ProcessTaskWrapperMapper.java | 1 + .../flowable/service/impl/sql/DoneTask.sql | 1 + .../service/impl/sql/FinishedTask.sql | 1 + .../flowable/service/impl/sql/MyDoneTasks.sql | 1 + .../service/impl/sql/MyFinishedTasks.sql | 1 + .../flowable/service/impl/sql/MyTasks.sql | 1 + .../flowable/service/impl/sql/Task.sql | 1 + ...6__Process_Manager_Database_Schema_DDL.xml | 1 + io.sc.platform.lcdp.frontend/package.json | 4 +- .../src/i18n/messages.json | 3 + .../src/i18n/messages_tw_CN.json | 3 + .../src/i18n/messages_zh_CN.json | 3 + .../src/views/Theme.vue | 2 - .../src/views/bpm/Bpm.vue | 1 + .../src/views/theme/Topper.vue | 10 +- .../platform/lcdp/configure/api/Topper.java | 3 +- .../package.json | 4 +- .../LicenseKeyGeneratorWebController.java | 29 +- io.sc.platform.mvc.frontend/package.json | 4 +- .../mvc/controller/DownloaderController.java | 6 + .../support/RestCrudController.java | 23 +- .../sc/platform/orm/service/DaoService.java | 22 +- .../orm/service/impl/DaoServiceImpl.java | 153 +++++++--- ....java => DataExportTemplateConfigure.java} | 31 +- .../service/support/ExportExcelThread.java | 77 +++++ .../orm/storage/service/StorageService.java | 10 + .../service/impl/StorageServiceImpl.java | 107 +++++++ .../io/sc/platform/orm/task/ExportTask.java | 31 ++ .../java/io/sc/platform/orm/task/Task.java | 171 +++++++++++ .../sc/platform/orm/task/TaskExecuteMode.java | 6 + .../io/sc/platform/orm/task/TaskStatus.java | 11 + .../io/sc/platform/orm/task/TaskType.java | 8 + .../orm/task/service/TaskService.java | 14 + .../task/service/impl/TaskServiceImpl.java | 99 +++++++ .../META-INF/platform/plugins/components.json | 4 +- .../META-INF/platform/plugins/messages.json | 6 + .../META-INF/platform/plugins/parameters.json | 22 ++ .../sc/platform/orm/i18n/parameter.properties | 2 + .../orm/i18n/parameter_tw_CN.properties | 2 + .../orm/i18n/parameter_zh_CN.properties | 2 + .../sc/platform/orm/task/i18n/task.properties | 9 + .../orm/task/i18n/task_tw_CN.properties | 9 + .../orm/task/i18n/task_zh_CN.properties | 9 + .../package.json | 4 +- .../platform/system/api/menu/MenuGroupVo.java | 3 - .../system/api/storage/DatabaseStorageVo.java | 24 ++ io.sc.platform.system.frontend/package.json | 4 +- .../src/components/index.ts | 2 + .../src/i18n/messages.json | 6 + .../src/i18n/messages_tw_CN.json | 28 ++ .../src/i18n/messages_zh_CN.json | 6 + .../src/menus/menus.json | 6 +- .../src/routes/routes.json | 13 + .../src/views/task/Task.vue | 45 +++ .../src/views/workbench/MyDoneTask.vue | 1 + .../src/views/workbench/MyFinishedTask.vue | 1 + .../src/views/workbench/MyTask.vue | 1 + .../DatabaseStorageWebController.java | 15 + .../jpa/entity/DatabaseStorageEntity.java | 49 ++++ .../repository/DatabaseStorageRepository.java | 10 + .../service/DatabaseStorageService.java | 9 + .../impl/DatabaseStorageServiceImpl.java | 12 + .../task/controller/TaskWebController.java | 25 ++ .../task/jpa/entity/EmptyTaskEntity.java | 17 ++ .../task/jpa/entity/ExportTaskEntity.java | 57 ++++ .../system/task/jpa/entity/TaskEntity.java | 249 ++++++++++++++++ .../task/jpa/repository/TaskRepository.java | 10 + .../system/task/service/TaskService.java | 19 ++ .../task/service/impl/TaskServiceImpl.java | 32 +++ .../META-INF/platform/plugins/components.json | 6 + .../platform/plugins/repositories.json | 6 + ...0_20220606__System_Database_Schema_DDL.xml | 44 +++ io.sc.standard.frontend/package.json | 4 +- io.sc.website/package.json | 4 +- wra.report.frontend/package.json | 4 +- 108 files changed, 1910 insertions(+), 582 deletions(-) create mode 100644 io.sc.platform.core.frontend/src/platform/layout/sub-layout/AsyncTaskDialog.vue rename io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/{DataExportConfigure.java => DataExportTemplateConfigure.java} (55%) create mode 100644 io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/ExportExcelThread.java create mode 100644 io.sc.platform.orm/src/main/java/io/sc/platform/orm/storage/service/StorageService.java create mode 100644 io.sc.platform.orm/src/main/java/io/sc/platform/orm/storage/service/impl/StorageServiceImpl.java create mode 100644 io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/ExportTask.java create mode 100644 io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/Task.java create mode 100644 io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskExecuteMode.java create mode 100644 io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskStatus.java create mode 100644 io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskType.java create mode 100644 io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/service/TaskService.java create mode 100644 io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/service/impl/TaskServiceImpl.java create mode 100644 io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/messages.json create mode 100644 io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/parameters.json create mode 100644 io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter.properties create mode 100644 io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter_tw_CN.properties create mode 100644 io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter_zh_CN.properties create mode 100644 io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task.properties create mode 100644 io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task_tw_CN.properties create mode 100644 io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task_zh_CN.properties create mode 100644 io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/storage/DatabaseStorageVo.java create mode 100644 io.sc.platform.system.frontend/src/views/task/Task.vue create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/storage/controller/DatabaseStorageWebController.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/storage/jpa/entity/DatabaseStorageEntity.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/storage/jpa/repository/DatabaseStorageRepository.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/storage/service/DatabaseStorageService.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/storage/service/impl/DatabaseStorageServiceImpl.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/task/controller/TaskWebController.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/EmptyTaskEntity.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/ExportTaskEntity.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/TaskEntity.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/repository/TaskRepository.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/task/service/TaskService.java create mode 100644 io.sc.platform.system/src/main/java/io/sc/platform/system/task/service/impl/TaskServiceImpl.java diff --git a/README.adoc b/README.adoc index 40a32873..0f0d8528 100644 --- a/README.adoc +++ b/README.adoc @@ -12,4 +12,36 @@ ALTER TABLE RE_MODEL_PARAMETER_ADDITION ADD MIN_VALUE_ varchar(255) NULL COMMENT ALTER TABLE RE_MODEL_PARAMETER_ADDITION ADD MAX_VALUE_ varchar(255) NULL COMMENT '最大值(包含)'; 2. 给 RE_MODEL_PARAMETER 表增加字段 -ALTER TABLE RE_MODEL_PARAMETER ADD DISABLE_ON_AUTO_SELECTED_ SMALLINT NULL COMMENT '当系统自动选择了输入选项中某一项时, 是否禁止用户选择其他项'; \ No newline at end of file +ALTER TABLE RE_MODEL_PARAMETER ADD DISABLE_ON_AUTO_SELECTED_ SMALLINT NULL COMMENT '当系统自动选择了输入选项中某一项时, 是否禁止用户选择其他项'; + +3. 创建 SYS_TASK 表 +CREATE TABLE SYS_TASK ( + `ID_` varchar(36) NOT NULL COMMENT 'ID', + `TYPE_` varchar(20) NOT NULL, + `EXECUTE_MODE_` varchar(20) DEFAULT NULL COMMENT '执行模式(SYNCHRONOUS:同步; ASYNCHRONOUS:异步)', + `STATUS_` varchar(20) DEFAULT NULL COMMENT '状态(CREATED:已创建; STARTED:已启动; COMPLETED:已完成; CANCELED:已取消; EXCEPTIONED:发生错误)', + `NAME_` varchar(255) DEFAULT NULL COMMENT '名称', + `CREATOR_` varchar(255) DEFAULT NULL COMMENT '创建人', + `CREATE_DATE_` datetime DEFAULT NULL COMMENT '创建日期', + `COMPLETED_DATE_` datetime DEFAULT NULL COMMENT '完成日期', + `CANCELED_DATE_` datetime DEFAULT NULL COMMENT '取消日期', + `TOTAL_WEIGHT_` int DEFAULT NULL COMMENT '总计需要执行的数量', + `CURRENT_WEIGHT_` int DEFAULT NULL COMMENT '当前已经执行的数量', + `MESSAGE_` varchar(255) DEFAULT NULL COMMENT '执行进度消息', + `EXCEPTION_` varchar(255) DEFAULT NULL COMMENT '执行抛出的违例类名称', + `EXCEPTION_MESSAGE_` varchar(1024) DEFAULT NULL COMMENT '执行抛出的违例消息', + `EXCEPTION_STACK_TRACE_` longtext COMMENT '执行抛出的违例栈', + `EXPORT_RESOURCE_NAME_` varchar(255) DEFAULT NULL COMMENT '导出资源名称', + `EXPORT_RESOURCE_URL_` varchar(1024) DEFAULT NULL COMMENT '导出资源URL', + PRIMARY KEY (`ID_`), + KEY `IDX_SYS_TASK_CREATOR` (`CREATOR_`) +) ENGINE=InnoDB DEFAULT COMMENT='任务表'; + +4. 创建 SYS_STORAGE 表 +CREATE TABLE SYS_STORAGE ( + `ID_` varchar(36) NOT NULL COMMENT 'ID', + `PATH_` varchar(1024) DEFAULT NULL COMMENT '资源路径', + `BYTES_` blob COMMENT '数据文件二进制', + PRIMARY KEY (`ID_`), + KEY `IDX_SYS_STORAGE_PATH` (`PATH_`) +) ENGINE=InnoDB DEFAULT COMMENT='持久化存储表'; \ No newline at end of file diff --git a/cips.frontend/package.json b/cips.frontend/package.json index a0c053ee..25697081 100644 --- a/cips.frontend/package.json +++ b/cips.frontend/package.json @@ -1,6 +1,6 @@ { "name": "cips.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/erm.frontend/package.json b/erm.frontend/package.json index d48fac90..a87a71e1 100644 --- a/erm.frontend/package.json +++ b/erm.frontend/package.json @@ -1,6 +1,6 @@ { "name": "erm.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/gradle.properties b/gradle.properties index 544313c3..9f6db34d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -37,9 +37,9 @@ application_version=1.0.0 # platform ########################################################### platform_group=io.sc -platform_version=8.2.32 +platform_version=8.2.33 platform_plugin_version=8.2.10 -platform_core_frontend_version=8.2.123 +platform_core_frontend_version=8.2.126 ########################################################### # dependencies version diff --git a/io.sc.engine.mv.frontend/package.json b/io.sc.engine.mv.frontend/package.json index 278e64f5..10751b61 100644 --- a/io.sc.engine.mv.frontend/package.json +++ b/io.sc.engine.mv.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.engine.mv.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.engine.rule.frontend/package.json b/io.sc.engine.rule.frontend/package.json index 88df3b24..2fec5f6b 100644 --- a/io.sc.engine.rule.frontend/package.json +++ b/io.sc.engine.rule.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.engine.rule.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue b/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue index 38dd7006..e0bb5c1b 100644 --- a/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue +++ b/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue @@ -518,8 +518,6 @@ }, onBeforeEditorDataSubmit: (args) => { args.callback(normalize(args.data)); - // console.log(args); - // Tools.mergeObject(args.data, normalize(args.data)); }, }, ], diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/initializer/RuleEngineWorkFlowInitializer.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/initializer/RuleEngineWorkFlowInitializer.java index d8e117e7..71641c27 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/initializer/RuleEngineWorkFlowInitializer.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/initializer/RuleEngineWorkFlowInitializer.java @@ -61,6 +61,7 @@ public class RuleEngineWorkFlowInitializer implements ApplicationInitializer{ entity.setBusinessDescriptionSql( "select\n" + " CONCAT(CODE_,':',VERSION_) BUSINESS_KEY,\n" + + " NULL BUSINESS_TYPE,\n" + " NAME_ CUST_NO,\n" + " CONCAT('V',VERSION_) CUST_NAME,\n" + " NULL PROCESS_STATUS\n" + diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterInOptionItemWebController.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterInOptionItemWebController.java index be15645b..ea48c409 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterInOptionItemWebController.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/controller/ParameterInOptionItemWebController.java @@ -4,19 +4,17 @@ import io.sc.engine.rule.server.model.entity.ParameterInOptionItemEntity; import io.sc.engine.rule.server.model.repository.ParameterInOptionItemRepository; import io.sc.engine.rule.server.model.service.ParameterInOptionItemService; import io.sc.engine.rule.server.model.vo.ParameterInOptionItemVo; -import io.sc.engine.rule.server.model.vo.ParameterValidatorVo; import io.sc.platform.mvc.controller.support.RestCrudController; import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryResult; -import io.sc.platform.orm.util.EntityVoUtil; import org.springframework.data.domain.Page; -import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; -import javax.management.Query; -import java.util.Collections; -import java.util.List; +import java.util.Locale; /** * 模型参数选项 Controller @@ -25,10 +23,10 @@ import java.util.List; @RequestMapping("/api/re/model/parameter/option") public class ParameterInOptionItemWebController extends RestCrudController { @GetMapping("findByParameterId") - public Page findByParameterId(@RequestParam(name="parameterId",required = false)String parameterId, QueryParameter queryParameter) throws Exception { + public Page findByParameterId(@RequestParam(name="parameterId",required = false)String parameterId, QueryParameter queryParameter, Locale locale) throws Exception { if(!StringUtils.hasText(parameterId)){ return QueryResult.emptyPage(); } - return service.findByParameterId(parameterId, queryParameter); + return service.findByParameterId(parameterId, queryParameter,locale); } } diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/ParameterInOptionItemService.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/ParameterInOptionItemService.java index 21f2ae24..7116fc8a 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/ParameterInOptionItemService.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/ParameterInOptionItemService.java @@ -8,6 +8,7 @@ import io.sc.platform.orm.service.support.QueryParameter; import org.springframework.data.domain.Page; import java.util.List; +import java.util.Locale; /** * 输入参数选项服务接口 @@ -17,8 +18,9 @@ public interface ParameterInOptionItemService extends DaoService findByParameterId(String parameterId, QueryParameter queryParameter) throws Exception; + public Page findByParameterId(String parameterId, QueryParameter queryParameter,Locale locale) throws Exception; } diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/impl/ParameterInOptionItemServiceImpl.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/impl/ParameterInOptionItemServiceImpl.java index c110cb35..1643670b 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/impl/ParameterInOptionItemServiceImpl.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/service/impl/ParameterInOptionItemServiceImpl.java @@ -40,13 +40,19 @@ public class ParameterInOptionItemServiceImpl extends DaoServiceImpl findByParameterId(String parameterId, QueryParameter queryParameter) throws Exception { + public Page findByParameterId(String parameterId, QueryParameter queryParameter,Locale locale) throws Exception { Equals equalsCriteria =new Equals(); equalsCriteria.setFieldName("parameter"); equalsCriteria.setValue(parameterId); queryParameter.addCriteria(equalsCriteria); - return EntityVoUtil.toVo(super.query(queryParameter)); + + Page page =super.query(queryParameter); + if(page.getContent()!=null && !page.getContent().isEmpty()){ + ParameterAndValueType parameterAndValueType =parameterAndValueTypeService.findByParameterId(parameterId,locale); + VariableCodeAndNameReplacer.replace(page.getContent(),parameterAndValueType, ReplaceMode.CODE_TO_NAME); + } + return EntityVoUtil.toVo(page); } @Override diff --git a/io.sc.engine.st.frontend/package.json b/io.sc.engine.st.frontend/package.json index 9e4b898e..64e94712 100644 --- a/io.sc.engine.st.frontend/package.json +++ b/io.sc.engine.st.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.engine.st.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.platform.ai.frontend/package.json b/io.sc.platform.ai.frontend/package.json index 0416f16e..63e77bda 100644 --- a/io.sc.platform.ai.frontend/package.json +++ b/io.sc.platform.ai.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.ai.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.platform.core.frontend/package.json b/io.sc.platform.core.frontend/package.json index 40e8a780..4add8742 100644 --- a/io.sc.platform.core.frontend/package.json +++ b/io.sc.platform.core.frontend/package.json @@ -1,6 +1,6 @@ { "name": "platform-core", - "version": "8.2.123", + "version": "8.2.126", "description": "前端核心包,用于快速构建前端的脚手架", "//main": "库的主文件", "main": "dist/platform-core.js", diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Export.ts b/io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Export.ts index c025be3f..c7fae580 100644 --- a/io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Export.ts +++ b/io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Export.ts @@ -1,4 +1,4 @@ -import { $t, axios, Downloader, Tools } from '@/platform'; +import { $t, axios, Environment, Downloader, Tools } from '@/platform'; import { PropsType, TableType } from '../../index'; import { Button } from '../Button'; @@ -20,7 +20,14 @@ export class Export extends Button { if (!Tools.isEmpty(this.tools?.props.title)) { url = url + '?downloadFileName=' + encodeURIComponent(this.tools?.props.title); } - Downloader.get(url, { params: urlSearchParams }); + axios.get(url, { params: urlSearchParams }).then((response) => { + const task = response.data; + if (task && task.executeMode === 'ASYNCHRONOUS') { + Environment.executeAction('openAsyncTaskDialog'); + } else { + Downloader.get(Environment.apiContextPath(task.exportResourceUrl)); + } + }); } getButtonConfig() { diff --git a/io.sc.platform.core.frontend/src/platform/i18n/messages.json b/io.sc.platform.core.frontend/src/platform/i18n/messages.json index 38553af5..a716946f 100644 --- a/io.sc.platform.core.frontend/src/platform/i18n/messages.json +++ b/io.sc.platform.core.frontend/src/platform/i18n/messages.json @@ -18,6 +18,9 @@ "collapseSiderMenu": "Collapse Sider Menu", "confirm": "Confirm", "expandSiderMenu": "Expand Sider Menu", + "asyncTasks": "Async Tasks", + "cleanAsyncTasksTip": "Are you sure to clean the task list?", + "removeAsyncTaskTip": "Are you sure to remove the task?", "fullScreen": "Full Screen", "fullScreenExit": "Exit Full Screen", "help": "Help", diff --git a/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json b/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json index 9341938d..2351524c 100644 --- a/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json +++ b/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json @@ -18,6 +18,9 @@ "collapseSiderMenu": "收起邊欄菜單", "confirm": "確定", "expandSiderMenu": "展開邊欄菜單", + "asyncTasks": "異步任務", + "cleanAsyncTasksTip": "您確定要清空異步任務列表?", + "removeAsyncTaskTip": "您確定要刪除該異步任務?", "fullScreen": "全屏", "fullScreenExit": "退出全屏", "help": "幫助", diff --git a/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json b/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json index 2a1db8f8..4a790b6b 100644 --- a/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json +++ b/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json @@ -18,6 +18,9 @@ "collapseSiderMenu": "收起边栏菜单", "confirm": "确定", "expandSiderMenu": "展开边栏菜单", + "asyncTasks": "异步任务", + "cleanAsyncTasksTip": "您确定要清空异步任务列表?", + "removeAsyncTaskTip": "您确定要删除该异步任务?", "fullScreen": "全屏", "fullScreenExit": "退出全屏", "help": "帮助", diff --git a/io.sc.platform.core.frontend/src/platform/layout/sub-layout/AsyncTaskDialog.vue b/io.sc.platform.core.frontend/src/platform/layout/sub-layout/AsyncTaskDialog.vue new file mode 100644 index 00000000..7b06f740 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/layout/sub-layout/AsyncTaskDialog.vue @@ -0,0 +1,129 @@ + + diff --git a/io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue b/io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue index 14880750..d724dfa3 100644 --- a/io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue +++ b/io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue @@ -32,16 +32,8 @@ - - + + @@ -138,6 +130,18 @@ + + + +
@@ -247,7 +251,8 @@ - + +
@@ -278,6 +283,7 @@ import ChangeRoleDialog from './ChangeRoleDialog.vue'; import UserMessageDialog from '@/platform/views/home/UserMessageDialog.vue'; import SystemMessageDialog from '@/platform/views/home/SystemMessageDialog.vue'; import AnnouncementDialog from '@/platform/views/home/AnnouncementDialog.vue'; +import AsyncTaskDialog from './AsyncTaskDialog.vue'; const { registerInterval } = useInterval(); const gc = Environment.getConfigure(); @@ -290,7 +296,8 @@ const changePasswordDialog = ref(); const changeRoleDialog = ref(); const userMessageDialogRef = ref(); const systemMessageDialogRef = ref(); -const announcementDialogDialogRef = ref(); +const announcementDialogRef = ref(); +const asyncTaskDialogRef = ref(); const { t } = useI18n(); const componentRef = ref(); const unCompletedTasksRef = ref([]); @@ -333,6 +340,10 @@ const about = () => { aboutDialog.value.open(); }; +const openAsyncTaskDialog = () => { + asyncTaskDialogRef.value.open(); +}; + const changePassword = () => { changePasswordDialog.value.open(); }; @@ -489,10 +500,11 @@ const handleMessage = (item: any) => { }; const handleAnnouncement = (item) => { - announcementDialogDialogRef.value.open(item); + announcementDialogRef.value.open(item); }; Environment.registAction('about', about); +Environment.registAction('openAsyncTaskDialog', openAsyncTaskDialog); Environment.registAction('changePassword', changePassword); Environment.registAction('changeRole', changeRole); Environment.registAction('openLoginDialog', openLoginDialog); diff --git a/io.sc.platform.core.frontend/src/platform/views/home/MyDoneTask.vue b/io.sc.platform.core.frontend/src/platform/views/home/MyDoneTask.vue index 5f53e912..3a1aa787 100644 --- a/io.sc.platform.core.frontend/src/platform/views/home/MyDoneTask.vue +++ b/io.sc.platform.core.frontend/src/platform/views/home/MyDoneTask.vue @@ -45,7 +45,7 @@
- {{ $t(item.startTimeAndNowDiffUnit) + $t('before') }} + {{ item.startTimeAndNowDiff + $t(item.startTimeAndNowDiffUnit) + $t('before') }}
{{ item.startTime }} diff --git a/io.sc.platform.core.frontend/src/views/testcase/form/form.vue b/io.sc.platform.core.frontend/src/views/testcase/form/form.vue index 3c4ba84e..f0e34b14 100644 --- a/io.sc.platform.core.frontend/src/views/testcase/form/form.vue +++ b/io.sc.platform.core.frontend/src/views/testcase/form/form.vue @@ -1,208 +1,83 @@ diff --git a/io.sc.platform.core.frontend/template-project/package.json b/io.sc.platform.core.frontend/template-project/package.json index 84949fb8..13068fb3 100644 --- a/io.sc.platform.core.frontend/template-project/package.json +++ b/io.sc.platform.core.frontend/template-project/package.json @@ -1,6 +1,6 @@ { "name": "platform-core", - "version": "8.2.123", + "version": "8.2.126", "description": "前端核心包,用于快速构建前端的脚手架", "private": false, "keywords": [], @@ -111,7 +111,7 @@ "mockjs": "1.1.0", "node-sql-parser": "5.3.6", "pinia": "2.3.0", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.platform.core.frontend/template-project/src/views/testcase/form/form.vue b/io.sc.platform.core.frontend/template-project/src/views/testcase/form/form.vue index 3c4ba84e..f0e34b14 100644 --- a/io.sc.platform.core.frontend/template-project/src/views/testcase/form/form.vue +++ b/io.sc.platform.core.frontend/template-project/src/views/testcase/form/form.vue @@ -1,208 +1,83 @@ diff --git a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties index 4d7f93c9..9e47bf3e 100644 --- a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties +++ b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties @@ -269,4 +269,5 @@ reply=Reply defaultRoleName=Default Role Name async=Asynchronous valueScale=Value Scale -scale=Scale \ No newline at end of file +scale=Scale +clean=Clean \ No newline at end of file diff --git a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties index fea7aee3..b428c60b 100644 --- a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties +++ b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties @@ -269,4 +269,5 @@ reply=\u56DE\u5FA9 defaultRoleName=\u9ED8\u8A8D\u89D2\u8272\u540D\u7A31 async=\u7570\u6B65 valueScale=\u503C\u7CBE\u5EA6 -scale=\u7CBE\u5EA6 \ No newline at end of file +scale=\u7CBE\u5EA6 +clean=\u6E05\u9664 \ No newline at end of file diff --git a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties index 89752677..e1f8983c 100644 --- a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties +++ b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties @@ -269,4 +269,5 @@ reply=\u56DE\u590D defaultRoleName=\u9ED8\u8BA4\u89D2\u8272\u540D\u79F0 async=\u5F02\u6B65 valueScale=\u503C\u7CBE\u5EA6 -scale=\u7CBE\u5EA6 \ No newline at end of file +scale=\u7CBE\u5EA6 +clean=\u6E05\u9664 \ No newline at end of file diff --git a/io.sc.platform.developer.doc/package.json b/io.sc.platform.developer.doc/package.json index 7de11bdd..cd263860 100644 --- a/io.sc.platform.developer.doc/package.json +++ b/io.sc.platform.developer.doc/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.developer.doc", - "version": "8.2.32", + "version": "8.2.33", "description": "", "main": "index.js", "scripts": { @@ -28,7 +28,7 @@ "vuepress": "2.0.0-rc.15" }, "dependencies": { - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "vue": "3.5.13", "vue-i18n": "11.0.1" diff --git a/io.sc.platform.developer.frontend/package.json b/io.sc.platform.developer.frontend/package.json index e8e79bbb..29b95ed6 100644 --- a/io.sc.platform.developer.frontend/package.json +++ b/io.sc.platform.developer.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.developer.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/extension/listener/start/ProcessStartListener.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/extension/listener/start/ProcessStartListener.java index d917694b..97389ccb 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/extension/listener/start/ProcessStartListener.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/extension/listener/start/ProcessStartListener.java @@ -44,7 +44,7 @@ public class ProcessStartListener implements ExecutionListener { if(wrapper==null){ return; } - jdbcTemplate.update("insert into SYS_PROCESS_INST_EXT(PROC_INST_ID_,CUST_NO_,CUST_NAME_) values(?,?,?)",processInstanceId,wrapper.getCustNo(),wrapper.getCustName()); + jdbcTemplate.update("insert into SYS_PROCESS_INST_EXT(PROC_INST_ID_,BUSINESS_TYPE_,CUST_NO_,CUST_NAME_) values(?,?,?,?)",processInstanceId,wrapper.getBusinessType(),wrapper.getCustNo(),wrapper.getCustName()); } private void insertProcInsExtByDefinitionKey(String processDefinitionKey,String processInstanceId,String businessKey){ @@ -64,6 +64,6 @@ public class ProcessStartListener implements ExecutionListener { if(wrapper==null){ return; } - jdbcTemplate.update("insert into SYS_PROCESS_INST_EXT(PROC_INST_ID_,CUST_NO_,CUST_NAME_) values(?,?,?)",processInstanceId,wrapper.getCustNo(),wrapper.getCustName()); + jdbcTemplate.update("insert into SYS_PROCESS_INST_EXT(PROC_INST_ID_,BUSINESS_TYPE_,CUST_NO_,CUST_NAME_) values(?,?,?,?)",processInstanceId,wrapper.getBusinessType(),wrapper.getCustNo(),wrapper.getCustName()); } } diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/BusinessKeyAndDescriptionWrapper.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/BusinessKeyAndDescriptionWrapper.java index de330311..a7fdef5f 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/BusinessKeyAndDescriptionWrapper.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/BusinessKeyAndDescriptionWrapper.java @@ -7,11 +7,20 @@ import java.time.temporal.ChronoUnit; import java.util.Date; public class BusinessKeyAndDescriptionWrapper { + private String businessType; private String businessKey; private String custNo; private String custName; private String processStatus; + public String getBusinessType() { + return businessType; + } + + public void setBusinessType(String businessType) { + this.businessType = businessType; + } + public String getBusinessKey() { return businessKey; } diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/BusinessKeyAndDescriptionWrapperMapper.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/BusinessKeyAndDescriptionWrapperMapper.java index 76f6765f..b65e4141 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/BusinessKeyAndDescriptionWrapperMapper.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/support/BusinessKeyAndDescriptionWrapperMapper.java @@ -9,6 +9,7 @@ public class BusinessKeyAndDescriptionWrapperMapper implements RowMapper { wrapper.setTaskHandFrontendComponentName(rs.getString("taskHandFrontendComponentName")); wrapper.setTaskHandFrontendComponentProperties(rs.getString("taskHandFrontendComponentProperties")); + wrapper.setBusinessType(rs.getString("businessType")); wrapper.setCustNo(rs.getString("custNo")); wrapper.setCustName(rs.getString("custName")); wrapper.setProcessStatus(rs.getString("processStatus")); diff --git a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/DoneTask.sql b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/DoneTask.sql index 18a38c35..f73870a1 100644 --- a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/DoneTask.sql +++ b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/DoneTask.sql @@ -32,6 +32,7 @@ select * from ( PROCESS.TASK_HAND_FE_MODEL_NAME_ as taskHandFrontendModelName, PROCESS.TASK_HAND_FE_COMP_NAME_ as taskHandFrontendComponentName, PROCESS.TASK_HAND_FE_COMP_PROPS_ as taskHandFrontendComponentProperties, + PROCESS_EXT.BUSINESS_TYPE_ as businessType, PROCESS_EXT.CUST_NO_ as custNo, PROCESS_EXT.CUST_NAME_ as custName, PROCESS_EXT.PROCESS_STATUS_ as processStatus, diff --git a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/FinishedTask.sql b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/FinishedTask.sql index f9aaf5e7..bee3913b 100644 --- a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/FinishedTask.sql +++ b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/FinishedTask.sql @@ -34,6 +34,7 @@ select * from ( PROCESS.TASK_HAND_FE_MODEL_NAME_ as taskHandFrontendModelName, PROCESS.TASK_HAND_FE_COMP_NAME_ as taskHandFrontendComponentName, PROCESS.TASK_HAND_FE_COMP_PROPS_ as taskHandFrontendComponentProperties, + PROCESS_EXT.BUSINESS_TYPE_ as businessType, PROCESS_EXT.CUST_NO_ as custNo, PROCESS_EXT.CUST_NAME_ as custName, PROCESS_EXT.PROCESS_STATUS_ as processStatus, diff --git a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyDoneTasks.sql b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyDoneTasks.sql index 99c6f88a..f1336286 100644 --- a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyDoneTasks.sql +++ b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyDoneTasks.sql @@ -33,6 +33,7 @@ select * from ( PROCESS.TASK_HAND_FE_MODEL_NAME_ as taskHandFrontendModelName, PROCESS.TASK_HAND_FE_COMP_NAME_ as taskHandFrontendComponentName, PROCESS.TASK_HAND_FE_COMP_PROPS_ as taskHandFrontendComponentProperties, + PROCESS_EXT.BUSINESS_TYPE_ as businessType, PROCESS_EXT.CUST_NO_ as custNo, PROCESS_EXT.CUST_NAME_ as custName, PROCESS_EXT.PROCESS_STATUS_ as processStatus, diff --git a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyFinishedTasks.sql b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyFinishedTasks.sql index e6ea05fa..96e1af22 100644 --- a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyFinishedTasks.sql +++ b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyFinishedTasks.sql @@ -35,6 +35,7 @@ select * from ( PROCESS.TASK_HAND_FE_MODEL_NAME_ as taskHandFrontendModelName, PROCESS.TASK_HAND_FE_COMP_NAME_ as taskHandFrontendComponentName, PROCESS.TASK_HAND_FE_COMP_PROPS_ as taskHandFrontendComponentProperties, + PROCESS_EXT.BUSINESS_TYPE_ as businessType, PROCESS_EXT.CUST_NO_ as custNo, PROCESS_EXT.CUST_NAME_ as custName, PROCESS_EXT.PROCESS_STATUS_ as processStatus, diff --git a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyTasks.sql b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyTasks.sql index e9cd38a1..704dc408 100644 --- a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyTasks.sql +++ b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/MyTasks.sql @@ -32,6 +32,7 @@ select * from ( PROCESS.TASK_HAND_FE_MODEL_NAME_ as taskHandFrontendModelName, PROCESS.TASK_HAND_FE_COMP_NAME_ as taskHandFrontendComponentName, PROCESS.TASK_HAND_FE_COMP_PROPS_ as taskHandFrontendComponentProperties, + PROCESS_EXT.BUSINESS_TYPE_ as businessType, PROCESS_EXT.CUST_NO_ as custNo, PROCESS_EXT.CUST_NAME_ as custName, PROCESS_EXT.PROCESS_STATUS_ as processStatus diff --git a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/Task.sql b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/Task.sql index d5c92606..edd93657 100644 --- a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/Task.sql +++ b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/service/impl/sql/Task.sql @@ -31,6 +31,7 @@ select PROCESS.TASK_HAND_FE_MODEL_NAME_ as taskHandFrontendModelName, PROCESS.TASK_HAND_FE_COMP_NAME_ as taskHandFrontendComponentName, PROCESS.TASK_HAND_FE_COMP_PROPS_ as taskHandFrontendComponentProperties, + PROCESS_EXT.BUSINESS_TYPE_ as businessType, PROCESS_EXT.CUST_NO_ as custNo, PROCESS_EXT.CUST_NAME_ as custName, PROCESS_EXT.PROCESS_STATUS_ as processStatus diff --git a/io.sc.platform.flowable/src/main/resources/liquibase/io.sc.platform.flowable_8.0.0_20220606__Process_Manager_Database_Schema_DDL.xml b/io.sc.platform.flowable/src/main/resources/liquibase/io.sc.platform.flowable_8.0.0_20220606__Process_Manager_Database_Schema_DDL.xml index a7469fbe..5a159157 100644 --- a/io.sc.platform.flowable/src/main/resources/liquibase/io.sc.platform.flowable_8.0.0_20220606__Process_Manager_Database_Schema_DDL.xml +++ b/io.sc.platform.flowable/src/main/resources/liquibase/io.sc.platform.flowable_8.0.0_20220606__Process_Manager_Database_Schema_DDL.xml @@ -55,6 +55,7 @@ + diff --git a/io.sc.platform.lcdp.frontend/package.json b/io.sc.platform.lcdp.frontend/package.json index 3aaa3ade..a1bc4872 100644 --- a/io.sc.platform.lcdp.frontend/package.json +++ b/io.sc.platform.lcdp.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.lcdp.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.platform.lcdp.frontend/src/i18n/messages.json b/io.sc.platform.lcdp.frontend/src/i18n/messages.json index b4d3b206..fbb25325 100644 --- a/io.sc.platform.lcdp.frontend/src/i18n/messages.json +++ b/io.sc.platform.lcdp.frontend/src/i18n/messages.json @@ -61,6 +61,9 @@ "theme.topper.actions.ai-chat": "AI Chat", "theme.topper.actions.ai-chat.yes": "AI Chat (enabled)", "theme.topper.actions.ai-chat.no": "AI Chat (disabled)", + "theme.topper.actions.async-task": "Asynchronous Task", + "theme.topper.actions.async-task.yes": "Asynchronous Task (enabled)", + "theme.topper.actions.async-task.no": "Asynchronous Task (disabled)", "theme.topper.actions.full-screen": "Full screen", "theme.topper.actions.full-screen.yes": "Full screen(enabled)", "theme.topper.actions.full-screen.no": "Full screen(disabled)", diff --git a/io.sc.platform.lcdp.frontend/src/i18n/messages_tw_CN.json b/io.sc.platform.lcdp.frontend/src/i18n/messages_tw_CN.json index 3574d790..17c06c6b 100644 --- a/io.sc.platform.lcdp.frontend/src/i18n/messages_tw_CN.json +++ b/io.sc.platform.lcdp.frontend/src/i18n/messages_tw_CN.json @@ -61,6 +61,9 @@ "theme.topper.actions.ai-chat": "AI 對話", "theme.topper.actions.ai-chat.yes": "AI 對話 (启用)", "theme.topper.actions.ai-chat.no": "AI 對話 (禁用)", + "theme.topper.actions.async-task": "異步任務", + "theme.topper.actions.async-task.yes": "異步任務(启用)", + "theme.topper.actions.async-task.no": "異步任務(禁用)", "theme.topper.actions.full-screen": "全屏", "theme.topper.actions.full-screen.yes": "全屏 (启用)", "theme.topper.actions.full-screen.no": "全屏 (禁用)", diff --git a/io.sc.platform.lcdp.frontend/src/i18n/messages_zh_CN.json b/io.sc.platform.lcdp.frontend/src/i18n/messages_zh_CN.json index e4588f03..29b97be3 100644 --- a/io.sc.platform.lcdp.frontend/src/i18n/messages_zh_CN.json +++ b/io.sc.platform.lcdp.frontend/src/i18n/messages_zh_CN.json @@ -61,6 +61,9 @@ "theme.topper.actions.ai-chat": "AI 对话", "theme.topper.actions.ai-chat.yes": "AI 对话 (启用)", "theme.topper.actions.ai-chat.no": "AI 对话 (禁用)", + "theme.topper.actions.async-task": "异步任务", + "theme.topper.actions.async-task.yes": "异步任务(启用)", + "theme.topper.actions.async-task.no": "异步任务(禁用)", "theme.topper.actions.full-screen": "全屏", "theme.topper.actions.full-screen.yes": "全屏 (启用)", "theme.topper.actions.full-screen.no": "全屏 (禁用)", diff --git a/io.sc.platform.lcdp.frontend/src/views/Theme.vue b/io.sc.platform.lcdp.frontend/src/views/Theme.vue index a5af330f..6722ee0d 100644 --- a/io.sc.platform.lcdp.frontend/src/views/Theme.vue +++ b/io.sc.platform.lcdp.frontend/src/views/Theme.vue @@ -196,11 +196,9 @@ const saveTheme = () => { persistent: true, }) .onOk(() => { - console.log('>>>>>>>'); const data = {}; Tools.mergeObject(data, configureMap.get(selectedTheme.value)); data.theme = Environment.getConfigure().theme; - console.log(data); axios.put(Environment.apiContextPath('/api/lcdp/configure/') + selectedTheme.value, data).then((response) => { NotifyManager.info(t('success')); diff --git a/io.sc.platform.lcdp.frontend/src/views/bpm/Bpm.vue b/io.sc.platform.lcdp.frontend/src/views/bpm/Bpm.vue index ddd1100e..f5ec6505 100644 --- a/io.sc.platform.lcdp.frontend/src/views/bpm/Bpm.vue +++ b/io.sc.platform.lcdp.frontend/src/views/bpm/Bpm.vue @@ -256,6 +256,7 @@ let sql = ''; sql += 'select\n'; sql += ' CONCAT(CODE_,\':\',VERSION_) BUSINESS_KEY,\n'; + sql += ' NULL BUSINESS_TYPE,\n'; sql += ' NAME_ CUST_NO,\n'; sql += ' CONCAT(\'V\',VERSION_) CUST_NAME,\n'; sql += ' NULL PROCESS_STATUS\n'; diff --git a/io.sc.platform.lcdp.frontend/src/views/theme/Topper.vue b/io.sc.platform.lcdp.frontend/src/views/theme/Topper.vue index 0c7b47d5..704b1618 100644 --- a/io.sc.platform.lcdp.frontend/src/views/theme/Topper.vue +++ b/io.sc.platform.lcdp.frontend/src/views/theme/Topper.vue @@ -68,8 +68,8 @@ :color="$gc.theme.dark ? 'white' : 'primary'" /> @@ -79,6 +79,12 @@ class="p-1" :color="$gc.theme.dark ? 'white' : 'primary'" /> +
diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Topper.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Topper.java index cff68542..618b4c8f 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Topper.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Topper.java @@ -20,8 +20,9 @@ public class Topper { public Topper(){ this.actions.put("ai-chat",new TopperAction()); - this.actions.put("full-screen",new TopperAction()); + this.actions.put("async-task",new TopperAction()); this.actions.put("notifier",new TopperAction()); + this.actions.put("full-screen",new TopperAction()); } public int getHeight() { diff --git a/io.sc.platform.license.keygen.frontend/package.json b/io.sc.platform.license.keygen.frontend/package.json index 77e35bbe..9e73ec08 100644 --- a/io.sc.platform.license.keygen.frontend/package.json +++ b/io.sc.platform.license.keygen.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.license.keygen.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.platform.license.keygen/src/main/java/io/sc/platform/license/keygen/controller/LicenseKeyGeneratorWebController.java b/io.sc.platform.license.keygen/src/main/java/io/sc/platform/license/keygen/controller/LicenseKeyGeneratorWebController.java index baed2ab2..78357aeb 100644 --- a/io.sc.platform.license.keygen/src/main/java/io/sc/platform/license/keygen/controller/LicenseKeyGeneratorWebController.java +++ b/io.sc.platform.license.keygen/src/main/java/io/sc/platform/license/keygen/controller/LicenseKeyGeneratorWebController.java @@ -1,6 +1,5 @@ package io.sc.platform.license.keygen.controller; -import io.sc.platform.core.License; import io.sc.platform.core.annotation.AuditLog; import io.sc.platform.core.annotation.IgnoreResponseBodyAdvice; import io.sc.platform.core.annotation.LicenseVerify; @@ -8,21 +7,18 @@ import io.sc.platform.core.enums.AuditLogAction; import io.sc.platform.core.response.ValidateException; import io.sc.platform.core.util.ValidatorUtil; import io.sc.platform.license.keygen.jpa.entity.LicenseEntity; -import io.sc.platform.license.keygen.jpa.repository.LicenseRepository; import io.sc.platform.license.keygen.jpa.vo.LicenseVo; import io.sc.platform.license.keygen.service.LicenseKeyGeneratorService; import io.sc.platform.license.keygen.service.LicenseService; -import io.sc.platform.mvc.controller.support.RestCrudController; import io.sc.platform.mvc.support.FileDownloader; import io.sc.platform.orm.entity.BaseEntity; -import io.sc.platform.orm.service.support.DataExportConfigure; +import io.sc.platform.orm.service.support.DataExportTemplateConfigure; import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryResult; import io.sc.platform.orm.service.support.criteria.Criteria; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; -import org.springframework.util.StringUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; @@ -33,7 +29,6 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.ArrayList; -import java.util.Date; import java.util.List; @RestController @@ -128,16 +123,16 @@ public class LicenseKeyGeneratorWebController { @GetMapping("exportExcel") public void _exportExcel(HttpServletRequest request,HttpServletResponse response,LicenseEntity entity,QueryParameter queryParameter) throws Exception{ - List criterias =licenseService.buildCriteriaFromEntity(request.getParameterNames(),entity); - if(criterias!=null && !criterias.isEmpty()){ - queryParameter.addCriterias(criterias); - } - ByteArrayOutputStream outputStream =new ByteArrayOutputStream(); - DataExportConfigure cofigure =licenseService.export(queryParameter,outputStream,null); - if(cofigure==null){ - return; - } - InputStream inputStream =new ByteArrayInputStream(outputStream.toByteArray()); - FileDownloader.download(request, response, cofigure.getDownloadFileName(), inputStream); +// List criterias =licenseService.buildCriteriaFromEntity(request.getParameterNames(),entity); +// if(criterias!=null && !criterias.isEmpty()){ +// queryParameter.addCriterias(criterias); +// } +// ByteArrayOutputStream outputStream =new ByteArrayOutputStream(); +// DataExportTemplateConfigure cofigure =licenseService.export(queryParameter,outputStream,null); +// if(cofigure==null){ +// return; +// } +// InputStream inputStream =new ByteArrayInputStream(outputStream.toByteArray()); +// FileDownloader.download(request, response, cofigure.getDownloadFileName(), inputStream); } } diff --git a/io.sc.platform.mvc.frontend/package.json b/io.sc.platform.mvc.frontend/package.json index 1584c0d3..77f9e1ea 100644 --- a/io.sc.platform.mvc.frontend/package.json +++ b/io.sc.platform.mvc.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.mvc.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/controller/DownloaderController.java b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/controller/DownloaderController.java index 263fe3ee..1cda697f 100644 --- a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/controller/DownloaderController.java +++ b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/controller/DownloaderController.java @@ -1,7 +1,10 @@ package io.sc.platform.mvc.controller; import io.sc.platform.core.annotation.IgnoreResponseBodyAdvice; +import io.sc.platform.mvc.service.SystemParameterService; import io.sc.platform.mvc.support.FileDownloader; +import io.sc.platform.orm.storage.service.StorageService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; @@ -12,14 +15,17 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; @Controller("io.sc.platform.mvc.controller.DownloaderController") @RequestMapping("/api/mvc") public class DownloaderController { + @Autowired private StorageService storageService; @GetMapping(value="download") @IgnoreResponseBodyAdvice public void download(@RequestParam("filePath") String filePath,@RequestParam(value = "exportName",required = false) String exportName,HttpServletRequest request,HttpServletResponse response) throws Exception{ + storageService.write(filePath,filePath); File file =new File(filePath); if(file.isFile() && file.exists()) { if(StringUtils.hasText(exportName)) { diff --git a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/controller/support/RestCrudController.java b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/controller/support/RestCrudController.java index 89c0be81..7ebd5c6f 100644 --- a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/controller/support/RestCrudController.java +++ b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/controller/support/RestCrudController.java @@ -5,15 +5,14 @@ import io.sc.platform.core.annotation.LicenseVerify; import io.sc.platform.core.enums.AuditLogAction; import io.sc.platform.core.response.ValidateException; import io.sc.platform.core.util.ValidatorUtil; -import io.sc.platform.mvc.support.FileDownloader; import io.sc.platform.orm.api.vo.BaseVo; import io.sc.platform.orm.entity.BaseEntity; import io.sc.platform.orm.repository.DaoRepository; import io.sc.platform.orm.service.DaoService; -import io.sc.platform.orm.service.support.DataExportConfigure; import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryResult; import io.sc.platform.orm.service.support.criteria.Criteria; +import io.sc.platform.orm.task.Task; import io.sc.platform.orm.util.EntityVoUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; @@ -24,9 +23,8 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import java.io.*; +import java.io.Serializable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public abstract class RestCrudController, ID extends Serializable, R extends DaoRepository, S extends DaoService> { @@ -234,19 +232,20 @@ public abstract class RestCrudController criterias =service.buildCriteriaFromEntity(request.getParameterNames(),entity); if(criterias!=null && !criterias.isEmpty()){ queryParameter.addCriterias(criterias); } - exportExcel(request,response,queryParameter); + return exportExcel(request,response,queryParameter); } - protected void exportExcel(HttpServletRequest request,HttpServletResponse response,QueryParameter queryParameter) throws Exception{ - String downloadFileName =request.getParameter("downloadFileName"); - ByteArrayOutputStream outputStream =new ByteArrayOutputStream(); - DataExportConfigure cofigure =service.export(queryParameter,outputStream,downloadFileName); - InputStream inputStream =new ByteArrayInputStream(outputStream.toByteArray()); - FileDownloader.download(request, response, cofigure.getDownloadFileName(), inputStream); + protected Task exportExcel(HttpServletRequest request,HttpServletResponse response,QueryParameter queryParameter) throws Exception{ + String exportResourceName =request.getParameter("downloadFileName"); + return service.export(queryParameter,exportResourceName); +// ByteArrayOutputStream outputStream =new ByteArrayOutputStream(); +// DataExportTemplateConfigure cofigure =service.export(queryParameter,outputStream,exportName); +// InputStream inputStream =new ByteArrayInputStream(outputStream.toByteArray()); +// FileDownloader.download(request, response, cofigure.getDownloadFileName(), inputStream); } } diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/DaoService.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/DaoService.java index 7e4c3b4e..724e9987 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/DaoService.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/DaoService.java @@ -2,18 +2,19 @@ package io.sc.platform.orm.service; import io.sc.platform.orm.repository.DaoRepository; import io.sc.platform.orm.service.support.DaoExceptionProvider; -import io.sc.platform.orm.service.support.DataExportConfigure; +import io.sc.platform.orm.service.support.DataExportTemplateConfigure; import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.criteria.Criteria; -import io.sc.platform.poi.generator.UniverTemplate; +import io.sc.platform.orm.storage.service.StorageService; +import io.sc.platform.orm.task.Task; +import io.sc.platform.orm.task.service.TaskService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.OutputStream; +import java.io.IOException; import java.io.Serializable; import java.util.Enumeration; import java.util.List; @@ -23,6 +24,8 @@ import java.util.stream.Stream; public interface DaoService>{ public R getRepository(); public DaoExceptionProvider getExceptionProvider(); + public StorageService getStorageService(); + public TaskService getTaskService(); public E findById(ID id); public E findByUniqueKey(E entity); @@ -46,6 +49,8 @@ public interface DaoService buildCriteriaFromEntity(Enumeration parameterNames, E entity) throws Exception; public Specification buildSpecification(QueryParameter queryParameter); + public long count(QueryParameter queryParameter) throws Exception; + public List list(QueryParameter queryParameter) throws Exception; public List list(QueryParameter queryParameter,Specification specification) throws Exception; public List list(Specification specification, Sort sort) throws Exception; @@ -64,6 +69,9 @@ public interface DaoService stream(QueryParameter queryParameter, Specification specification) throws Exception; public Stream stream(Specification specification, Sort sort) throws Exception; - public DataExportConfigure getExportConfigure(); - public DataExportConfigure export(QueryParameter queryParameter, OutputStream outputStream,String downloadFileName) throws Exception; + public DataExportTemplateConfigure getExportTemplateConfigure(); + public byte[] getTemplateBytes(DataExportTemplateConfigure configure) throws IOException; + public Task export(QueryParameter queryParameter, String exportResourceName) throws Exception; + + public long getSynchronousExportMaxCount(); } diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java index 3c2bc960..a5ce24d6 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java @@ -15,12 +15,14 @@ import io.sc.platform.orm.service.support.criteria.Criteria; import io.sc.platform.orm.service.support.criteria.impl.Equals; import io.sc.platform.orm.service.support.criteria.impl.IContains; import io.sc.platform.orm.service.support.criteria.impl.IsNull; -import io.sc.platform.poi.generator.UniverTemplate; -import io.sc.platform.poi.generator.UniverExcelGenerator; +import io.sc.platform.orm.storage.service.StorageService; +import io.sc.platform.orm.task.ExportTask; +import io.sc.platform.orm.task.Task; +import io.sc.platform.orm.task.TaskExecuteMode; +import io.sc.platform.orm.task.TaskType; +import io.sc.platform.orm.task.service.TaskService; import io.sc.platform.security.util.SecurityUtil; import io.sc.platform.util.ByteUtil; -import io.sc.platform.util.ResourceUtil; -import io.sc.platform.util.StringUtil; import org.jxls.common.Context; import org.jxls.util.JxlsHelper; import org.springframework.beans.factory.annotation.Autowired; @@ -35,14 +37,13 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.support.Repositories; import org.springframework.data.util.DirectFieldAccessFallbackBeanWrapper; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import javax.persistence.criteria.Predicate; import javax.persistence.metamodel.PluralAttribute; import javax.persistence.metamodel.SingularAttribute; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.*; import java.lang.reflect.Modifier; import java.util.*; @@ -57,6 +58,9 @@ public abstract class DaoServiceImpl exceptionProvider =getExceptionProvider(); @Override @@ -69,6 +73,16 @@ public abstract class DaoServiceImpl(){}; } + @Override + public StorageService getStorageService() { + return storageService; + } + + @Override + public TaskService getTaskService() { + return taskService; + } + @Override @Transactional public E findById(ID id) { @@ -410,6 +424,16 @@ public abstract class DaoServiceImpl specification =buildSpecification(queryParameter); + return repository.count(specification); + }else{ + return repository.count(); + } + } + @Override public List list(QueryParameter queryParameter) throws Exception { if(queryParameter!=null) { @@ -625,54 +649,63 @@ public abstract class DaoServiceImpl row =jdbcTemplate.queryForMap("select VALUE_ from SYS_PARAMETER where CODE_=?","parameter.orm.exportExcel.synchronousExportMaxCount"); + if(row==null || row.isEmpty()){ + return 1000; } - return dataExportConfigure; + return Long.parseLong(row.get("VALUE_").toString()); } @Override @@ -799,4 +832,46 @@ public abstract class DaoServiceImpl row =jdbcTemplate.queryForMap("select VALUE_ from SYS_PARAMETER where CODE_=?","parameter.orm.exportExcel.persistence.type"); + if(row==null || row.isEmpty()){ + return false; + } + return "DATABASE".equals(row.get("VALUE_").toString()); + } +} diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/ExportTask.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/ExportTask.java new file mode 100644 index 00000000..5b417a8e --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/ExportTask.java @@ -0,0 +1,31 @@ +package io.sc.platform.orm.task; + +public class ExportTask extends Task { + protected String outputPath; + protected String exportResourceName; + protected String exportResourceUrl; + + public String getOutputPath() { + return outputPath; + } + + public void setOutputPath(String outputPath) { + this.outputPath = outputPath; + } + + public String getExportResourceName() { + return exportResourceName; + } + + public void setExportResourceName(String exportResourceName) { + this.exportResourceName = exportResourceName; + } + + public String getExportResourceUrl() { + return exportResourceUrl; + } + + public void setExportResourceUrl(String exportResourceUrl) { + this.exportResourceUrl = exportResourceUrl; + } +} diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/Task.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/Task.java new file mode 100644 index 00000000..42944ee1 --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/Task.java @@ -0,0 +1,171 @@ +package io.sc.platform.orm.task; + +import io.sc.platform.orm.api.vo.BaseVo; +import io.sc.platform.util.DateUtil; +import io.sc.platform.util.support.DateDiff; + +import java.time.temporal.ChronoUnit; +import java.util.Date; + +public class Task extends BaseVo { + protected String id; + protected String name; + protected TaskExecuteMode executeMode; + protected TaskType type; + protected TaskStatus status; + protected String creator; + protected Date createDate; + protected Date completedDate; + protected Date canceledDate; + protected Long totalWeight; + protected Long currentWeight; + protected String message; + protected String exception; + protected String exceptionMessage; + protected String exceptionStackTrace; + + private long createDateAndNowDiff; + private ChronoUnit createDateAndNowDiffUnit; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public TaskExecuteMode getExecuteMode() { + return executeMode; + } + + public void setExecuteMode(TaskExecuteMode executeMode) { + this.executeMode = executeMode; + } + + public TaskType getType() { + return type; + } + + public void setType(TaskType type) { + this.type = type; + } + + public TaskStatus getStatus() { + return status; + } + + public void setStatus(TaskStatus status) { + this.status = status; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + if(this.createDate!=null) { + Date now = new Date(); + DateDiff dateDiff = DateUtil.dateDiff(this.createDate, now); + this.createDateAndNowDiff = dateDiff.getAmount(); + this.createDateAndNowDiffUnit = dateDiff.getUnit(); + } + } + + public Date getCompletedDate() { + return completedDate; + } + + public void setCompletedDate(Date completedDate) { + this.completedDate = completedDate; + } + + public Date getCanceledDate() { + return canceledDate; + } + + public void setCanceledDate(Date canceledDate) { + this.canceledDate = canceledDate; + } + + public Long getTotalWeight() { + return totalWeight; + } + + public void setTotalWeight(Long totalWeight) { + this.totalWeight = totalWeight; + } + + public Long getCurrentWeight() { + return currentWeight; + } + + public void setCurrentWeight(Long currentWeight) { + this.currentWeight = currentWeight; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getException() { + return exception; + } + + public void setException(String exception) { + this.exception = exception; + } + + public String getExceptionMessage() { + return exceptionMessage; + } + + public void setExceptionMessage(String exceptionMessage) { + this.exceptionMessage = exceptionMessage; + } + + public String getExceptionStackTrace() { + return exceptionStackTrace; + } + + public void setExceptionStackTrace(String exceptionStackTrace) { + this.exceptionStackTrace = exceptionStackTrace; + } + + public long getCreateDateAndNowDiff() { + return createDateAndNowDiff; + } + + public void setCreateDateAndNowDiff(long createDateAndNowDiff) { + this.createDateAndNowDiff = createDateAndNowDiff; + } + + public ChronoUnit getCreateDateAndNowDiffUnit() { + return createDateAndNowDiffUnit; + } + + public void setCreateDateAndNowDiffUnit(ChronoUnit createDateAndNowDiffUnit) { + this.createDateAndNowDiffUnit = createDateAndNowDiffUnit; + } +} diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskExecuteMode.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskExecuteMode.java new file mode 100644 index 00000000..136c7102 --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskExecuteMode.java @@ -0,0 +1,6 @@ +package io.sc.platform.orm.task; + +public enum TaskExecuteMode { + SYNCHRONOUS, //同步 + ASYNCHRONOUS; //异步 +} diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskStatus.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskStatus.java new file mode 100644 index 00000000..1ede3f97 --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskStatus.java @@ -0,0 +1,11 @@ +package io.sc.platform.orm.task; + +/** + * 任务状态 + */ +public enum TaskStatus { + STARTED, //已启动 + COMPLETED, //已完成 + CANCELED, //已取消 + ERROR; //发生错误 +} diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskType.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskType.java new file mode 100644 index 00000000..6bed21db --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/TaskType.java @@ -0,0 +1,8 @@ +package io.sc.platform.orm.task; + +/** + * 任务类型 + */ +public enum TaskType { + EXPORT; //数据导出 +} diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/service/TaskService.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/service/TaskService.java new file mode 100644 index 00000000..f6253d84 --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/service/TaskService.java @@ -0,0 +1,14 @@ +package io.sc.platform.orm.task.service; + +import io.sc.platform.orm.task.Task; +import io.sc.platform.orm.task.TaskStatus; + +public interface TaskService { + public String create(Task task); + public void changeStatus(String taskId,TaskStatus status); + public void changeCurrentWeight(String taskId,long currentWeight); + public void changeMessage(String taskId,String message); + public void error(String taskId,String exception,String exceptionMessage,String exceptionStackTrace); + public void complete(String taskId); + public boolean isCanceled(String taskId); +} diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/service/impl/TaskServiceImpl.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/service/impl/TaskServiceImpl.java new file mode 100644 index 00000000..a9573c69 --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/task/service/impl/TaskServiceImpl.java @@ -0,0 +1,99 @@ +package io.sc.platform.orm.task.service.impl; + +import io.sc.platform.orm.task.ExportTask; +import io.sc.platform.orm.task.Task; +import io.sc.platform.orm.task.TaskStatus; +import io.sc.platform.orm.task.TaskType; +import io.sc.platform.orm.task.service.TaskService; +import io.sc.platform.security.util.SecurityUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.Map; +import java.util.UUID; + +@Service("io.sc.platform.orm.task.service.impl.TaskServiceImpl") +public class TaskServiceImpl implements TaskService { + @Autowired private JdbcTemplate jdbcTemplate; + + @Override + @Transactional + public String create(Task task) { + String id =UUID.randomUUID().toString(); + String taskSql ="insert into SYS_TASK(ID_,NAME_,TYPE_,EXECUTE_MODE_,STATUS_,CREATOR_,CREATE_DATE_,TOTAL_WEIGHT_,CURRENT_WEIGHT_,MESSAGE_) values(?,?,?,?,?,?,?,?,?,?)"; + String exportTaskSql ="insert into SYS_TASK(ID_,NAME_,TYPE_,EXECUTE_MODE_,STATUS_,CREATOR_,CREATE_DATE_,TOTAL_WEIGHT_,CURRENT_WEIGHT_,MESSAGE_,EXPORT_RESOURCE_NAME_,EXPORT_RESOURCE_URL_) values(?,?,?,?,?,?,?,?,?,?,?,?)"; + if(TaskType.EXPORT.equals(task.getType())){ + ExportTask exportTask =(ExportTask)task; + jdbcTemplate.update(exportTaskSql, + id, + task.getName(), + task.getType().name(), + task.getExecuteMode().name(), + TaskStatus.STARTED.name(), + SecurityUtil.getLoginName(), + new Date(), + task.getTotalWeight(), + task.getCurrentWeight(), + task.getMessage(), + exportTask.getExportResourceName(), + exportTask.getExportResourceUrl() + ); + }else{ + jdbcTemplate.update(exportTaskSql, + id, + task.getName(), + task.getType().name(), + task.getExecuteMode().name(), + TaskStatus.STARTED.name(), + SecurityUtil.getLoginName(), + new Date(),task.getTotalWeight(), + task.getCurrentWeight(), + task.getMessage() + ); + } + return id; + } + + @Override + @Transactional + public void changeStatus(String taskId, TaskStatus status) { + jdbcTemplate.update("update SYS_TASK set STATUS_=? where ID_=?",status.name(),taskId); + } + + @Override + @Transactional + public void changeCurrentWeight(String taskId, long currentWeight) { + jdbcTemplate.update("update SYS_TASK set CURRENT_WEIGHT_=? where ID_=?",currentWeight,taskId); + } + + @Override + @Transactional + public void changeMessage(String taskId, String message) { + jdbcTemplate.update("update SYS_TASK set MESSAGE_=? where ID_=?",message,taskId); + } + + @Override + @Transactional + public void error(String taskId, String exception, String exceptionMessage, String exceptionStackTrace) { + jdbcTemplate.update("update SYS_TASK set STATUS_=?,EXCEPTION_=?,EXCEPTION_MESSAGE_=?,EXCEPTION_STACK_TRACE_=? where ID_=?",TaskStatus.ERROR.name(), exception,exceptionMessage,exceptionStackTrace,taskId); + } + + @Override + @Transactional + public void complete(String taskId) { + jdbcTemplate.update("update SYS_TASK set STATUS_=?,COMPLETED_DATE_=? where ID_=?",TaskStatus.COMPLETED.name(),new Date(),taskId); + } + + @Override + public boolean isCanceled(String taskId) { + Map row =jdbcTemplate.queryForMap("select CANCELED_DATE_ from SYS_TASK where ID_=?",taskId); + if(row==null || row.isEmpty()){ + return false; + } + Object canceledDate =row.get("CANCELED_DATE_"); + return canceledDate==null? false : true; + } +} diff --git a/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/components.json b/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/components.json index fbd39297..cf8e0bbc 100644 --- a/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/components.json +++ b/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/components.json @@ -2,6 +2,8 @@ "includes":[ "io.sc.platform.orm.jpa.model.access.service.impl", "io.sc.platform.orm.jpa.service.impl", - "io.sc.platform.orm.service.impl" + "io.sc.platform.orm.service.impl", + "io.sc.platform.orm.storage.service.impl", + "io.sc.platform.orm.task.service.impl" ] } diff --git a/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/messages.json b/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/messages.json new file mode 100644 index 00000000..fbdea678 --- /dev/null +++ b/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/messages.json @@ -0,0 +1,6 @@ +{ + "includes":[ + "io/sc/platform/orm/i18n/parameter", + "io/sc/platform/orm/task/i18n/task" + ] +} \ No newline at end of file diff --git a/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/parameters.json b/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/parameters.json new file mode 100644 index 00000000..ac1dcbab --- /dev/null +++ b/io.sc.platform.orm/src/main/resources/META-INF/platform/plugins/parameters.json @@ -0,0 +1,22 @@ +[ + /*系统/同步导出 Excel 最大记录数 */ + { + "id" :"parameter.orm.exportExcel.synchronousExportMaxCount", + "parentId" :"parameter.system", + "code" :"parameter.orm.exportExcel.synchronousExportMaxCount", + "defaultValue" :"1000", + "order" : 1500 + }, + /*系统/导出 Excel 存储类型*/ + { + "id" :"parameter.orm.exportExcel.persistence.type", + "parentId" :"parameter.system", + "code" :"parameter.orm.exportExcel.persistence.type", + "defaultValue" :"DISK", + "order" : 1600, + "options" :{ + "DATABASE" : "parameter.system.attachment.persistence.type.DATABASE", + "DISK" : "parameter.system.attachment.persistence.type.DISK" + } + } +] diff --git a/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter.properties b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter.properties new file mode 100644 index 00000000..65e6302e --- /dev/null +++ b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter.properties @@ -0,0 +1,2 @@ +parameter.orm.exportExcel.persistence.type=Export Excel Persistence Type +parameter.orm.exportExcel.synchronousExportMaxCount=Max Row Count Run In Synchronous \ No newline at end of file diff --git a/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter_tw_CN.properties b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter_tw_CN.properties new file mode 100644 index 00000000..6d928036 --- /dev/null +++ b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter_tw_CN.properties @@ -0,0 +1,2 @@ +parameter.orm.exportExcel.persistence.type=\u5C0E\u51FA Excel \u5B58\u5132\u985E\u578B +parameter.orm.exportExcel.synchronousExportMaxCount=\u540C\u6B65\u5C0E\u51FA\u6700\u5927\u8A18\u9304\u6578 \ No newline at end of file diff --git a/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter_zh_CN.properties b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter_zh_CN.properties new file mode 100644 index 00000000..72d528a1 --- /dev/null +++ b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/i18n/parameter_zh_CN.properties @@ -0,0 +1,2 @@ +parameter.orm.exportExcel.persistence.type=\u5BFC\u51FA Excel \u5B58\u50A8\u7C7B\u578B +parameter.orm.exportExcel.synchronousExportMaxCount=\u540C\u6B65\u5BFC\u51FA\u6700\u5927\u8BB0\u5F55\u6570 \ No newline at end of file diff --git a/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task.properties b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task.properties new file mode 100644 index 00000000..673e2520 --- /dev/null +++ b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task.properties @@ -0,0 +1,9 @@ +io.sc.platform.orm.task.TaskType.EXPORT=Export + +io.sc.platform.orm.task.TaskExecuteMode.SYNCHRONOUS=Synchronous +io.sc.platform.orm.task.TaskExecuteMode.ASYNCHRONOUS=Asynchronous + +io.sc.platform.orm.task.TaskStatus.STARTED=Started +io.sc.platform.orm.task.TaskStatus.COMPLETED=Completed +io.sc.platform.orm.task.TaskStatus.CANCELED=Canceled +io.sc.platform.orm.task.TaskStatus.ERROR=Error Occur \ No newline at end of file diff --git a/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task_tw_CN.properties b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task_tw_CN.properties new file mode 100644 index 00000000..cb733748 --- /dev/null +++ b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task_tw_CN.properties @@ -0,0 +1,9 @@ +io.sc.platform.orm.task.TaskType.EXPORT=\u5C0E\u51FA + +io.sc.platform.orm.task.TaskExecuteMode.SYNCHRONOUS=\u540C\u6B65 +io.sc.platform.orm.task.TaskExecuteMode.ASYNCHRONOUS=\u7570\u6B65 + +io.sc.platform.orm.task.TaskStatus.STARTED=\u5DF2\u555F\u52D5 +io.sc.platform.orm.task.TaskStatus.COMPLETED=\u5DF2\u5B8C\u6210 +io.sc.platform.orm.task.TaskStatus.CANCELED=\u5DF2\u53D6\u6D88 +io.sc.platform.orm.task.TaskStatus.ERROR=\u767C\u751F\u932F\u8AA4 \ No newline at end of file diff --git a/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task_zh_CN.properties b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task_zh_CN.properties new file mode 100644 index 00000000..b9cf235c --- /dev/null +++ b/io.sc.platform.orm/src/main/resources/io/sc/platform/orm/task/i18n/task_zh_CN.properties @@ -0,0 +1,9 @@ +io.sc.platform.orm.task.TaskType.EXPORT=\u5BFC\u51FA + +io.sc.platform.orm.task.TaskExecuteMode.SYNCHRONOUS=\u540C\u6B65 +io.sc.platform.orm.task.TaskExecuteMode.ASYNCHRONOUS=\u5F02\u6B65 + +io.sc.platform.orm.task.TaskStatus.STARTED=\u5DF2\u542F\u52A8 +io.sc.platform.orm.task.TaskStatus.COMPLETED=\u5DF2\u5B8C\u6210 +io.sc.platform.orm.task.TaskStatus.CANCELED=\u5DF2\u53D6\u6D88 +io.sc.platform.orm.task.TaskStatus.ERROR=\u53D1\u751F\u9519\u8BEF \ No newline at end of file diff --git a/io.sc.platform.scheduler.manager.frontend/package.json b/io.sc.platform.scheduler.manager.frontend/package.json index 587ac352..8a2cf8cb 100644 --- a/io.sc.platform.scheduler.manager.frontend/package.json +++ b/io.sc.platform.scheduler.manager.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.scheduler.manager.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/menu/MenuGroupVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/menu/MenuGroupVo.java index 01395dfc..c272417f 100644 --- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/menu/MenuGroupVo.java +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/menu/MenuGroupVo.java @@ -1,8 +1,5 @@ package io.sc.platform.system.api.menu; -import java.util.ArrayList; -import java.util.List; - public class MenuGroupVo extends MenuVo { private boolean asRoot; diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/storage/DatabaseStorageVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/storage/DatabaseStorageVo.java new file mode 100644 index 00000000..124966e4 --- /dev/null +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/storage/DatabaseStorageVo.java @@ -0,0 +1,24 @@ +package io.sc.platform.system.api.storage; + +import io.sc.platform.orm.api.vo.BaseVo; + +public class DatabaseStorageVo extends BaseVo { + protected String id; + protected String path; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } +} diff --git a/io.sc.platform.system.frontend/package.json b/io.sc.platform.system.frontend/package.json index a40dc3d7..6ecb0986 100644 --- a/io.sc.platform.system.frontend/package.json +++ b/io.sc.platform.system.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.system.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -112,7 +112,7 @@ "mockjs": "1.1.0", "node-sql-parser": "5.3.6", "pinia": "2.3.0", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.platform.system.frontend/src/components/index.ts b/io.sc.platform.system.frontend/src/components/index.ts index 0f2665a8..a37a1034 100644 --- a/io.sc.platform.system.frontend/src/components/index.ts +++ b/io.sc.platform.system.frontend/src/components/index.ts @@ -23,6 +23,7 @@ import component_system_Dictionary from '@/views/dictionary/Dictionary.vue'; import component_system_Desensitizer from '@/views/desensitizer/Desensitizer.vue'; import component_system_I18n from '@/views/i18n/I18n.vue'; import component_system_datasource from '@/views/datasource/Datasource.vue'; +import component_system_task from '@/views/task/Task.vue'; import component_system_monitor_AuditLog from '@/views/monitor/AuditLog.vue'; import component_system_monitor_Log from '@/views/monitor/Log.vue'; import component_system_monitor_ServerInfo from '@/views/monitor/ServerInfo.vue'; @@ -49,6 +50,7 @@ const localComponents = { 'component.system.Desensitizer': component_system_Desensitizer, 'component.system.I18n': component_system_I18n, 'component.system.datasource': component_system_datasource, + 'component.system.task': component_system_task, 'component.system.monitor.AuditLog': component_system_monitor_AuditLog, 'component.system.monitor.Log': component_system_monitor_Log, 'component.system.monitor.ServerInfo': component_system_monitor_ServerInfo, diff --git a/io.sc.platform.system.frontend/src/i18n/messages.json b/io.sc.platform.system.frontend/src/i18n/messages.json index e270f0a5..a119e796 100644 --- a/io.sc.platform.system.frontend/src/i18n/messages.json +++ b/io.sc.platform.system.frontend/src/i18n/messages.json @@ -22,6 +22,7 @@ "menu.system.desensitizer": "Desensitizer", "menu.system.i18n": "I18n Messages", "menu.system.datasource": "DataSource", + "menu.system.task": "Task Manager", "menu.system.monitor": "Monitor", "menu.system.monitor.auditlog": "Audit Log", "menu.system.monitor.log": "Log", @@ -169,6 +170,10 @@ "system.datasource.hikari.leakDetectionThreshold": "Leak Detection Threshold(default:0-not check,minimal:2000)", "system.datasource.hikari.schema": "Schema", + "system.task.grid.title": "Task List", + "system.task.grid.entity.completedDate": "Completed Date", + "system.task.grid.entity.canceledDate": "Canceled Date", + "system.monitor.auditlog.grid.title": "Audit Logs List", "system.monitor.log.tab.view": "Log View", @@ -217,6 +222,7 @@ "settings.shortcutMenus.entity.menuIconColor": "Icon Color", "workbench.grid.entity.processDefinitionName": "Process Name", + "workbench.grid.entity.businessType": "Business Type", "workbench.grid.entity.businessKey": "Business Key", "workbench.grid.entity.businessDescription": "Business Description", "workbench.grid.entity.custNo": "Customer No.", diff --git a/io.sc.platform.system.frontend/src/i18n/messages_tw_CN.json b/io.sc.platform.system.frontend/src/i18n/messages_tw_CN.json index d247765c..8d61501d 100644 --- a/io.sc.platform.system.frontend/src/i18n/messages_tw_CN.json +++ b/io.sc.platform.system.frontend/src/i18n/messages_tw_CN.json @@ -22,6 +22,7 @@ "menu.system.desensitizer": "數據脫敏", "menu.system.i18n": "國際化多語言", "menu.system.datasource": "數據源管理", + "menu.system.task": "任務管理", "menu.system.monitor": "系統監控", "menu.system.monitor.auditlog": "審計日誌", "menu.system.monitor.log": "系統日誌", @@ -146,6 +147,32 @@ "system.datasource.grid.entity.databaseType": "數據庫類型", "system.datasource.grid.entity.jdbcDriver": "JDBC 驅動程序", "system.datasource.grid.entity.jdbcUrl": "JDBC URL", + "system.datasource.hikari.autoCommit": "是否自動提交(默認值:true)", + "system.datasource.hikari.connectionTimeout": "連接超時(單位:毫秒,默認值:30000,最小值:250)", + "system.datasource.hikari.idleTimeout": "空閒超時(單位:毫秒,默認值:600000,最小值:10000)", + "system.datasource.hikari.maxLifetime": "最大活動時間(單位:毫秒,默認值:1800000)", + "system.datasource.hikari.connectionTestQuery": "連接測試查詢(JDBC4 無需填寫)", + "system.datasource.hikari.minimumIdle": "最小空閒,默認值:池最大尺寸", + "system.datasource.hikari.maximumPoolSize": "池最大尺寸,默認值:10", + "system.datasource.hikari.metricRegistry": "監控指標註冊器", + "system.datasource.hikari.healthCheckRegistry": "健康檢查註冊器", + "system.datasource.hikari.poolName": "連接池名稱", + "system.datasource.hikari.initializationFailTimeout": "初始化失敗超時", + "system.datasource.hikari.isolateInternalQueries": "內部查詢是否被隔離,默認值:false", + "system.datasource.hikari.allowPoolSuspension": "是否允許池暫停,默認值:false", + "system.datasource.hikari.readOnly": "是否只讀,默認值:false", + "system.datasource.hikari.registerMbeans": "是否註冊為 MBean,默認值:false", + "system.datasource.hikari.catalog": "目錄", + "system.datasource.hikari.connectionInitSql": "連接初始化 sql", + "system.datasource.hikari.driverClassName": "JDBC 驅動類名稱", + "system.datasource.hikari.transactionIsolation": "事務隔離度", + "system.datasource.hikari.validationTimeout": "驗證超時(單位:毫秒,默認值:5000)", + "system.datasource.hikari.leakDetectionThreshold": "洩漏檢測閾值(單位:毫秒,默認值:0-不進行洩漏檢查,最小值:2000)", + "system.datasource.hikari.schema": "方案", + + "system.task.grid.title": "任務列表", + "system.task.grid.entity.completedDate": "完成日期", + "system.task.grid.entity.canceledDate": "取消日期", "system.monitor.auditlog.grid.title": "審計日誌列表", @@ -195,6 +222,7 @@ "settings.shortcutMenus.entity.menuIconColor": "圖標顏色", "workbench.grid.entity.processDefinitionName": "流程名稱", + "workbench.grid.entity.businessType": "業務類型", "workbench.grid.entity.businessKey": "業務流水號", "workbench.grid.entity.businessDescription": "業務描述", "workbench.grid.entity.custNo": "客戶編號", diff --git a/io.sc.platform.system.frontend/src/i18n/messages_zh_CN.json b/io.sc.platform.system.frontend/src/i18n/messages_zh_CN.json index a4d30999..b72a038d 100644 --- a/io.sc.platform.system.frontend/src/i18n/messages_zh_CN.json +++ b/io.sc.platform.system.frontend/src/i18n/messages_zh_CN.json @@ -22,6 +22,7 @@ "menu.system.desensitizer": "数据脱敏", "menu.system.i18n": "国际化多语言", "menu.system.datasource": "数据源管理", + "menu.system.task": "任务管理", "menu.system.monitor": "系统监控", "menu.system.monitor.auditlog": "审计日志", "menu.system.monitor.log": "系统日志", @@ -169,6 +170,10 @@ "system.datasource.hikari.leakDetectionThreshold": "泄漏检测阈值(单位:毫秒,默认值:0-不进行泄漏检查,最小值:2000)", "system.datasource.hikari.schema": "方案", + "system.task.grid.title": "任务列表", + "system.task.grid.entity.completedDate": "完成日期", + "system.task.grid.entity.canceledDate": "取消日期", + "system.monitor.auditlog.grid.title": "审计日志列表", "system.monitor.log.tab.view": "日志查看", @@ -225,6 +230,7 @@ "settings.shortcutMenus.entity.menuIconColor": "图标颜色", "workbench.grid.entity.processDefinitionName": "流程名称", + "workbench.grid.entity.businessType": "业务类型", "workbench.grid.entity.businessKey": "业务流水号", "workbench.grid.entity.businessDescription": "业务描述", "workbench.grid.entity.custNo": "客户编号", diff --git a/io.sc.platform.system.frontend/src/menus/menus.json b/io.sc.platform.system.frontend/src/menus/menus.json index c1b41ef5..b0ef0686 100644 --- a/io.sc.platform.system.frontend/src/menus/menus.json +++ b/io.sc.platform.system.frontend/src/menus/menus.json @@ -71,10 +71,12 @@ {"type":"SEPARATOR", "order":1800, "parentId":"menu.system"}, /*系统管理/数据源管理*/ {"type":"ROUTE", "order":1900, "parentId":"menu.system", "id":"menu.system.datasource", "titleI18nKey":"menu.system.datasource", "icon":"bi-database", "routeName":"route.system.datasource"}, + /*系统管理/任务查询*/ + {"type":"ROUTE", "order":2000, "parentId":"menu.system", "id":"menu.system.task", "titleI18nKey":"menu.system.task", "icon":"bi-clock", "routeName":"route.system.task"}, /*系统管理/分隔符*/ - {"type":"SEPARATOR", "order":2000, "parentId":"menu.system"}, + {"type":"SEPARATOR", "order":2100, "parentId":"menu.system"}, /*系统管理/系统监控*/ - {"type":"GROUP", "order":2100, "parentId":"menu.system", "id":"menu.system.monitor", "titleI18nKey":"menu.system.monitor", "icon":"bi-speedometer2"}, + {"type":"GROUP", "order":2200, "parentId":"menu.system", "id":"menu.system.monitor", "titleI18nKey":"menu.system.monitor", "icon":"bi-speedometer2"}, /*系统管理/系统监控/审计日志*/ {"type":"ROUTE", "order":100, "parentId":"menu.system.monitor", "id":"menu.system.monitor.auditlog", "titleI18nKey":"menu.system.monitor.auditlog", "icon":"bi-card-list", "routeName":"route.system.monitor.auditlog","authorizeExpression":"'database'.equals(T(org.wsp.framework.core.Environment).getAuditLogType())"}, /*系统管理/系统监控/系统日志*/ diff --git a/io.sc.platform.system.frontend/src/routes/routes.json b/io.sc.platform.system.frontend/src/routes/routes.json index 9c08db68..5f66dff0 100644 --- a/io.sc.platform.system.frontend/src/routes/routes.json +++ b/io.sc.platform.system.frontend/src/routes/routes.json @@ -280,6 +280,19 @@ "permissions": ["/system/datasource/**/*"] } }, + { + "parent": "/", + "name": "route.system.task", + "path": "system/task", + "priority": 0, + "module": "io.sc.platform.system.frontend", + "component": "component.system.task", + "componentPath": "@/views/task/Task.vue", + "redirect": null, + "meta": { + "permissions": ["/system/task/**/*"] + } + }, { "parent": "/", "name": "route.system.monitor.auditlog", diff --git a/io.sc.platform.system.frontend/src/views/task/Task.vue b/io.sc.platform.system.frontend/src/views/task/Task.vue new file mode 100644 index 00000000..10ef81b1 --- /dev/null +++ b/io.sc.platform.system.frontend/src/views/task/Task.vue @@ -0,0 +1,45 @@ + + diff --git a/io.sc.platform.system.frontend/src/views/workbench/MyDoneTask.vue b/io.sc.platform.system.frontend/src/views/workbench/MyDoneTask.vue index 87bdb581..da3942ed 100644 --- a/io.sc.platform.system.frontend/src/views/workbench/MyDoneTask.vue +++ b/io.sc.platform.system.frontend/src/views/workbench/MyDoneTask.vue @@ -60,6 +60,7 @@ label: $t('workbench.grid.entity.custNo'), }, { width: '100%', name: 'custName', label: $t('workbench.grid.entity.custName') }, + { width: 150, name: 'businessType', label: $t('workbench.grid.entity.businessType') }, { width: 200, name: 'processDefinitionKey', diff --git a/io.sc.platform.system.frontend/src/views/workbench/MyFinishedTask.vue b/io.sc.platform.system.frontend/src/views/workbench/MyFinishedTask.vue index 71b7eb0f..a0f32d0a 100644 --- a/io.sc.platform.system.frontend/src/views/workbench/MyFinishedTask.vue +++ b/io.sc.platform.system.frontend/src/views/workbench/MyFinishedTask.vue @@ -60,6 +60,7 @@ label: $t('workbench.grid.entity.custNo'), }, { width: '100%', name: 'custName', label: $t('workbench.grid.entity.custName') }, + { width: 150, name: 'businessType', label: $t('workbench.grid.entity.businessType') }, { width: 200, name: 'processDefinitionKey', diff --git a/io.sc.platform.system.frontend/src/views/workbench/MyTask.vue b/io.sc.platform.system.frontend/src/views/workbench/MyTask.vue index 300ea4c9..44670aa4 100644 --- a/io.sc.platform.system.frontend/src/views/workbench/MyTask.vue +++ b/io.sc.platform.system.frontend/src/views/workbench/MyTask.vue @@ -60,6 +60,7 @@ label: $t('workbench.grid.entity.custNo'), }, { width: '100%', name: 'custName', label: $t('workbench.grid.entity.custName') }, + { width: 150, name: 'businessType', label: $t('workbench.grid.entity.businessType') }, { width: 200, name: 'processDefinitionKey', diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/controller/DatabaseStorageWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/controller/DatabaseStorageWebController.java new file mode 100644 index 00000000..32c54feb --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/controller/DatabaseStorageWebController.java @@ -0,0 +1,15 @@ +package io.sc.platform.system.storage.controller; + +import io.sc.platform.mvc.controller.support.RestCrudController; +import io.sc.platform.system.api.storage.DatabaseStorageVo; +import io.sc.platform.system.storage.jpa.entity.DatabaseStorageEntity; +import io.sc.platform.system.storage.jpa.repository.DatabaseStorageRepository; +import io.sc.platform.system.storage.service.DatabaseStorageService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController("io.sc.platform.system.storage.controller.DatabaseStorageWebController") +@RequestMapping("/api/storage") +public class DatabaseStorageWebController extends RestCrudController { + +} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/jpa/entity/DatabaseStorageEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/jpa/entity/DatabaseStorageEntity.java new file mode 100644 index 00000000..238f066a --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/jpa/entity/DatabaseStorageEntity.java @@ -0,0 +1,49 @@ +package io.sc.platform.system.storage.jpa.entity; + +import io.sc.platform.orm.entity.BaseEntity; +import io.sc.platform.system.api.storage.DatabaseStorageVo; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; + +@Entity +@Table(name="SYS_STORAGE") +public class DatabaseStorageEntity extends BaseEntity { + //主键 + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_", length=36) + @Size(max=36) + protected String id; + + @Column(name="PATH_") + protected String path; + + + @Override + public DatabaseStorageVo toVo() { + DatabaseStorageVo vo =new DatabaseStorageVo(); + super.toVo(vo); + vo.setId(this.getId()); + vo.setPath(this.getPath()); + return vo; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } +} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/jpa/repository/DatabaseStorageRepository.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/jpa/repository/DatabaseStorageRepository.java new file mode 100644 index 00000000..1b59f480 --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/jpa/repository/DatabaseStorageRepository.java @@ -0,0 +1,10 @@ +package io.sc.platform.system.storage.jpa.repository; + +import io.sc.platform.orm.repository.DaoRepository; +import io.sc.platform.system.storage.jpa.entity.DatabaseStorageEntity; +import org.springframework.stereotype.Repository; + +@Repository("io.sc.platform.system.storage.jpa.repository.DatabaseStorageRepository") +public interface DatabaseStorageRepository extends DaoRepository { + +} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/service/DatabaseStorageService.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/service/DatabaseStorageService.java new file mode 100644 index 00000000..b34b9f00 --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/service/DatabaseStorageService.java @@ -0,0 +1,9 @@ +package io.sc.platform.system.storage.service; + +import io.sc.platform.orm.service.DaoService; +import io.sc.platform.system.storage.jpa.entity.DatabaseStorageEntity; +import io.sc.platform.system.storage.jpa.repository.DatabaseStorageRepository; + +public interface DatabaseStorageService extends DaoService { + +} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/service/impl/DatabaseStorageServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/service/impl/DatabaseStorageServiceImpl.java new file mode 100644 index 00000000..1794f872 --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/storage/service/impl/DatabaseStorageServiceImpl.java @@ -0,0 +1,12 @@ +package io.sc.platform.system.storage.service.impl; + +import io.sc.platform.orm.service.impl.DaoServiceImpl; +import io.sc.platform.system.storage.jpa.entity.DatabaseStorageEntity; +import io.sc.platform.system.storage.jpa.repository.DatabaseStorageRepository; +import io.sc.platform.system.storage.service.DatabaseStorageService; +import org.springframework.stereotype.Service; + +@Service("io.sc.platform.system.storage.service.impl.DatabaseStorageServiceImpl") +public class DatabaseStorageServiceImpl extends DaoServiceImpl implements DatabaseStorageService { + +} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/task/controller/TaskWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/controller/TaskWebController.java new file mode 100644 index 00000000..a009bb1d --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/controller/TaskWebController.java @@ -0,0 +1,25 @@ +package io.sc.platform.system.task.controller; + +import io.sc.platform.mvc.controller.support.RestCrudController; +import io.sc.platform.orm.task.Task; +import io.sc.platform.system.task.jpa.entity.TaskEntity; +import io.sc.platform.system.task.jpa.repository.TaskRepository; +import io.sc.platform.system.task.service.TaskService; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController("io.sc.platform.system.task.controller.TaskWebController") +@RequestMapping("/api/system/task") +public class TaskWebController extends RestCrudController { + @PostMapping("cleanMyAsyncTaskList") + public void cleanMyAsyncTaskList(){ + service.cleanMyAsyncTaskList(); + } + + @PostMapping("removeAsyncTask/{taskId}") + public void removeAsyncTask(@PathVariable("taskId")String taskId){ + service.removeAsyncTask(taskId); + } +} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/EmptyTaskEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/EmptyTaskEntity.java new file mode 100644 index 00000000..0323a9c8 --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/EmptyTaskEntity.java @@ -0,0 +1,17 @@ +package io.sc.platform.system.task.jpa.entity; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; + +/** + * 空任务实体类 + */ +@Entity +@DiscriminatorValue("EMPTY") +public class EmptyTaskEntity extends TaskEntity { + public EmptyTaskEntity() {} + public EmptyTaskEntity(String id) { + this.id =id; + } +} + diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/ExportTaskEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/ExportTaskEntity.java new file mode 100644 index 00000000..1cf3bbd8 --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/ExportTaskEntity.java @@ -0,0 +1,57 @@ +package io.sc.platform.system.task.jpa.entity; + +import io.sc.platform.orm.task.ExportTask; +import io.sc.platform.orm.task.Task; + +import javax.persistence.Column; +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import javax.validation.constraints.Size; + +/** + * 空任务实体类 + */ +@Entity +@DiscriminatorValue("EXPORT") +public class ExportTaskEntity extends TaskEntity { + //导出资源名称 + @Column(name="EXPORT_RESOURCE_NAME_", length=255) + @Size(max=255) + protected String exportResourceName; + + //导出资源URL + @Column(name="EXPORT_RESOURCE_URL_", length=1024) + @Size(max=1024) + protected String exportResourceUrl; + + public ExportTaskEntity() {} + public ExportTaskEntity(String id) { + this.id =id; + } + + @Override + public Task toVo() { + ExportTask vo =new ExportTask(); + super.toVo(vo); + vo.setExportResourceName(this.getExportResourceName()); + vo.setExportResourceUrl(this.getExportResourceUrl()); + return vo; + } + + public String getExportResourceName() { + return exportResourceName; + } + + public void setExportResourceName(String exportResourceName) { + this.exportResourceName = exportResourceName; + } + + public String getExportResourceUrl() { + return exportResourceUrl; + } + + public void setExportResourceUrl(String exportResourceUrl) { + this.exportResourceUrl = exportResourceUrl; + } +} + diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/TaskEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/TaskEntity.java new file mode 100644 index 00000000..1a411513 --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/entity/TaskEntity.java @@ -0,0 +1,249 @@ +package io.sc.platform.system.task.jpa.entity; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.sc.platform.orm.entity.BaseEntity; +import io.sc.platform.orm.task.Task; +import io.sc.platform.orm.task.TaskExecuteMode; +import io.sc.platform.orm.task.TaskStatus; +import io.sc.platform.orm.task.TaskType; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * 任务实体类 + */ +@Entity +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +@DiscriminatorColumn(name="TYPE_",discriminatorType=DiscriminatorType.STRING,length=20) +@JsonIgnoreProperties(ignoreUnknown=true) +@Table(name="SYS_TASK") +@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type",visible=true,defaultImpl = EmptyTaskEntity.class ) +@JsonSubTypes({ + @JsonSubTypes.Type(value = EmptyTaskEntity.class, name = "EMPTY"), + @JsonSubTypes.Type(value = ExportTaskEntity.class, name = "EXPORT") +}) +public class TaskEntity extends BaseEntity { + //主键 + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_", length=36) + @Size(max=36) + protected String id; + + //名称 + @Column(name="NAME_", length=255) + @Size(max=255) + protected String name; + + //类型 + @Column(name="TYPE_", length=20, insertable=false,updatable=false) + @Enumerated(EnumType.STRING) + protected TaskType type; + + //执行模式 + @Column(name="EXECUTE_MODE_", length=20) + @Enumerated(EnumType.STRING) + protected TaskExecuteMode executeMode; + + //状态 + @Column(name="STATUS_", length=20) + @Enumerated(EnumType.STRING) + protected TaskStatus status; + + //创建人(登录名) + @Column(name="CREATOR_", length=255, nullable=false) + protected String creator; + + //创建日期 + @Column(name="CREATE_DATE_", nullable=false) + @Temporal(TemporalType.TIMESTAMP) + protected Date createDate; + + //完成日期 + @Column(name="COMPLETED_DATE_") + @Temporal(TemporalType.TIMESTAMP) + protected Date completedDate; + + //取消日期 + @Column(name="CANCELED_DATE_") + @Temporal(TemporalType.TIMESTAMP) + protected Date canceledDate; + + //总计需要执行的数量 + @Column(name="TOTAL_WEIGHT_") + private Long totalWeight; + + //当前已经执行的数量 + @Column(name="CURRENT_WEIGHT_") + private Long currentWeight; + + //执行进度消息 + @Column(name="MESSAGE_") + private String message; + + //执行抛出的违例类名称 + @Column(name="EXCEPTION_",length=255) + @Size(max=255) + protected String exception; + + //执行抛出的违例消息 + @Column(name="EXCEPTION_MESSAGE_",length=1024) + @Size(max=1024) + protected String exceptionMessage; + + //执行抛出的违例栈 + @Column(name="EXCEPTION_STACK_TRACE_") + protected String exceptionStackTrace; + + public TaskEntity() {} + public TaskEntity(String id) { + this.id =id; + } + + @Override + public void toVo(Task vo) { + super.toVo(vo); + vo.setId(this.getId()); + vo.setName(this.getName()); + vo.setType(this.getType()); + vo.setExecuteMode(this.getExecuteMode()); + vo.setStatus(this.getStatus()); + vo.setCreator(this.getCreator()); + vo.setCreateDate(this.getCreateDate()); + vo.setCompletedDate(this.getCompletedDate()); + vo.setCanceledDate(this.getCanceledDate()); + vo.setTotalWeight(this.getTotalWeight()); + vo.setCurrentWeight(this.getCurrentWeight()); + vo.setMessage(this.getMessage()); + vo.setException(this.getException()); + vo.setExceptionMessage(this.getExceptionMessage()); + vo.setExceptionStackTrace(this.getExceptionStackTrace()); + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public TaskType getType() { + return type; + } + + public void setType(TaskType type) { + this.type = type; + } + + public TaskExecuteMode getExecuteMode() { + return executeMode; + } + + public void setExecuteMode(TaskExecuteMode executeMode) { + this.executeMode = executeMode; + } + + public TaskStatus getStatus() { + return status; + } + + public void setStatus(TaskStatus status) { + this.status = status; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Date getCompletedDate() { + return completedDate; + } + + public void setCompletedDate(Date completedDate) { + this.completedDate = completedDate; + } + + public Date getCanceledDate() { + return canceledDate; + } + + public void setCanceledDate(Date canceledDate) { + this.canceledDate = canceledDate; + } + + public Long getTotalWeight() { + return totalWeight; + } + + public void setTotalWeight(Long totalWeight) { + this.totalWeight = totalWeight; + } + + public Long getCurrentWeight() { + return currentWeight; + } + + public void setCurrentWeight(Long currentWeight) { + this.currentWeight = currentWeight; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getException() { + return exception; + } + + public void setException(String exception) { + this.exception = exception; + } + + public String getExceptionMessage() { + return exceptionMessage; + } + + public void setExceptionMessage(String exceptionMessage) { + this.exceptionMessage = exceptionMessage; + } + + public String getExceptionStackTrace() { + return exceptionStackTrace; + } + + public void setExceptionStackTrace(String exceptionStackTrace) { + this.exceptionStackTrace = exceptionStackTrace; + } +} + diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/repository/TaskRepository.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/repository/TaskRepository.java new file mode 100644 index 00000000..582fe931 --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/jpa/repository/TaskRepository.java @@ -0,0 +1,10 @@ +package io.sc.platform.system.task.jpa.repository; + +import io.sc.platform.orm.repository.DaoRepository; +import io.sc.platform.system.task.jpa.entity.TaskEntity; +import org.springframework.stereotype.Repository; + +@Repository("io.sc.platform.system.task.jpa.repository.TaskRepository") +public interface TaskRepository extends DaoRepository { + +} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/task/service/TaskService.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/service/TaskService.java new file mode 100644 index 00000000..a9c3ccea --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/service/TaskService.java @@ -0,0 +1,19 @@ +package io.sc.platform.system.task.service; + +import io.sc.platform.orm.service.DaoService; +import io.sc.platform.orm.service.support.QueryParameter; +import io.sc.platform.system.task.jpa.entity.TaskEntity; +import io.sc.platform.system.task.jpa.repository.TaskRepository; +import io.sc.platform.system.user.jpa.entity.UserEntity; +import io.sc.platform.system.user.jpa.repository.UserRepository; +import io.sc.platform.system.user.service.support.UserSession; +import org.springframework.data.domain.Page; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Set; + +public interface TaskService extends DaoService { + public void cleanMyAsyncTaskList(); + public void removeAsyncTask(String taskId); +} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/task/service/impl/TaskServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/service/impl/TaskServiceImpl.java new file mode 100644 index 00000000..e0578f40 --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/task/service/impl/TaskServiceImpl.java @@ -0,0 +1,32 @@ +package io.sc.platform.system.task.service.impl; + +import io.sc.platform.orm.service.impl.DaoServiceImpl; +import io.sc.platform.security.util.SecurityUtil; +import io.sc.platform.system.task.jpa.entity.TaskEntity; +import io.sc.platform.system.task.jpa.repository.TaskRepository; +import io.sc.platform.system.task.service.TaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +@Service("io.sc.platform.system.task.service.impl.TaskServiceImpl") +public class TaskServiceImpl extends DaoServiceImpl implements TaskService { + @Autowired private JdbcTemplate jdbcTemplate; + + @Override + @Transactional + public void cleanMyAsyncTaskList() { + jdbcTemplate.update("delete from SYS_TASK where STATUS_<>'STARTED' and CREATOR_=?", SecurityUtil.getLoginName()); + } + + @Override + @Transactional + public void removeAsyncTask(String taskId) { + if(!StringUtils.hasText(taskId)){ + return; + } + jdbcTemplate.update("delete from SYS_TASK where STATUS_<>'STARTED' and ID_=?", taskId); + } +} diff --git a/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/components.json b/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/components.json index dcfb54f1..06a7fa5f 100644 --- a/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/components.json +++ b/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/components.json @@ -65,6 +65,12 @@ "io.sc.platform.system.shortcutmenu.controller", "io.sc.platform.system.shortcutmenu.service.impl", + "io.sc.platform.system.storage.controller", + "io.sc.platform.system.storage.service.impl", + + "io.sc.platform.system.task.controller", + "io.sc.platform.system.task.service.impl", + "io.sc.platform.system.user.controller", "io.sc.platform.system.user.service.impl" ], diff --git a/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/repositories.json b/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/repositories.json index cc9fe3ba..bd398a45 100644 --- a/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/repositories.json +++ b/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/repositories.json @@ -57,6 +57,12 @@ "io.sc.platform.system.shortcutmenu.jpa.entity", "io.sc.platform.system.shortcutmenu.jpa.repository", + "io.sc.platform.system.storage.jpa.entity", + "io.sc.platform.system.storage.jpa.repository", + + "io.sc.platform.system.task.jpa.entity", + "io.sc.platform.system.task.jpa.repository", + "io.sc.platform.system.user.jpa.entity", "io.sc.platform.system.user.jpa.repository" ], diff --git a/io.sc.platform.system/src/main/resources/liquibase/io.sc.platform.system_8.0.0_20220606__System_Database_Schema_DDL.xml b/io.sc.platform.system/src/main/resources/liquibase/io.sc.platform.system_8.0.0_20220606__System_Database_Schema_DDL.xml index 2b518fc8..1464c5e3 100644 --- a/io.sc.platform.system/src/main/resources/liquibase/io.sc.platform.system_8.0.0_20220606__System_Database_Schema_DDL.xml +++ b/io.sc.platform.system/src/main/resources/liquibase/io.sc.platform.system_8.0.0_20220606__System_Database_Schema_DDL.xml @@ -446,5 +446,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io.sc.standard.frontend/package.json b/io.sc.standard.frontend/package.json index cf13b837..03153f45 100644 --- a/io.sc.standard.frontend/package.json +++ b/io.sc.standard.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.standard.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -113,7 +113,7 @@ "node-sql-parser": "5.3.6", "pinia": "2.3.0", "pinia-undo": "0.2.4", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7", diff --git a/io.sc.website/package.json b/io.sc.website/package.json index 844b7356..909539e3 100644 --- a/io.sc.website/package.json +++ b/io.sc.website/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.website", - "version": "8.2.32", + "version": "8.2.33", "description": "", "main": "index.js", "scripts": { @@ -28,6 +28,6 @@ }, "dependencies": { "vue": "3.5.13", - "platform-core": "8.2.123" + "platform-core": "8.2.126" } } \ No newline at end of file diff --git a/wra.report.frontend/package.json b/wra.report.frontend/package.json index 2e6b985d..580b8fb0 100644 --- a/wra.report.frontend/package.json +++ b/wra.report.frontend/package.json @@ -1,6 +1,6 @@ { "name": "wra.report.frontend", - "version": "8.2.32", + "version": "8.2.33", "description": "", "private": false, "keywords": [], @@ -112,7 +112,7 @@ "mockjs": "1.1.0", "node-sql-parser": "5.3.6", "pinia": "2.3.0", - "platform-core": "8.2.123", + "platform-core": "8.2.126", "quasar": "2.17.6", "sort-array": "5.0.0", "svg-path-commander": "2.1.7",