diff --git a/app.platform/build.gradle b/app.platform/build.gradle index 37ffb5bb..76a38c4b 100644 --- a/app.platform/build.gradle +++ b/app.platform/build.gradle @@ -13,6 +13,7 @@ dependencies { implementation ( project(":io.sc.platform.app"), project(":io.sc.platform.developer"), + project(":io.sc.platform.job.manager"), ) } diff --git a/app.platform/platform.sql b/app.platform/platform.sql new file mode 100644 index 00000000..de222171 --- /dev/null +++ b/app.platform/platform.sql @@ -0,0 +1,128 @@ +-- platform.xxl_job_group definition + +CREATE TABLE `xxl_job_group` ( + `id` int NOT NULL AUTO_INCREMENT, + `app_name` varchar(64) NOT NULL COMMENT '执行器AppName', + `title` varchar(12) NOT NULL COMMENT '执行器名称', + `address_type` tinyint NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入', + `address_list` text COMMENT '执行器地址列表,多地址逗号分隔', + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + + +-- platform.xxl_job_info definition + +CREATE TABLE `xxl_job_info` ( + `id` int NOT NULL AUTO_INCREMENT, + `job_group` int NOT NULL COMMENT '执行器主键ID', + `job_desc` varchar(255) NOT NULL, + `add_time` datetime DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + `author` varchar(64) DEFAULT NULL COMMENT '作者', + `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件', + `schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型', + `schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型', + `misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略', + `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略', + `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', + `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', + `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略', + `executor_timeout` int NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒', + `executor_fail_retry_count` int NOT NULL DEFAULT '0' COMMENT '失败重试次数', + `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型', + `glue_source` mediumtext COMMENT 'GLUE源代码', + `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注', + `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间', + `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔', + `trigger_status` tinyint NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行', + `trigger_last_time` bigint NOT NULL DEFAULT '0' COMMENT '上次调度时间', + `trigger_next_time` bigint NOT NULL DEFAULT '0' COMMENT '下次调度时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + + +-- platform.xxl_job_lock definition + +CREATE TABLE `xxl_job_lock` ( + `lock_name` varchar(50) NOT NULL COMMENT '锁名称', + PRIMARY KEY (`lock_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + + +-- platform.xxl_job_log definition + +CREATE TABLE `xxl_job_log` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `job_group` int NOT NULL COMMENT '执行器主键ID', + `job_id` int NOT NULL COMMENT '任务,主键ID', + `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址', + `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', + `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', + `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2', + `executor_fail_retry_count` int NOT NULL DEFAULT '0' COMMENT '失败重试次数', + `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间', + `trigger_code` int NOT NULL COMMENT '调度-结果', + `trigger_msg` text COMMENT '调度-日志', + `handle_time` datetime DEFAULT NULL COMMENT '执行-时间', + `handle_code` int NOT NULL COMMENT '执行-状态', + `handle_msg` text COMMENT '执行-日志', + `alarm_status` tinyint NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败', + PRIMARY KEY (`id`), + KEY `I_trigger_time` (`trigger_time`), + KEY `I_handle_code` (`handle_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + + +-- platform.xxl_job_log_report definition + +CREATE TABLE `xxl_job_log_report` ( + `id` int NOT NULL AUTO_INCREMENT, + `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间', + `running_count` int NOT NULL DEFAULT '0' COMMENT '运行中-日志数量', + `suc_count` int NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量', + `fail_count` int NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量', + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + + +-- platform.xxl_job_logglue definition + +CREATE TABLE `xxl_job_logglue` ( + `id` int NOT NULL AUTO_INCREMENT, + `job_id` int NOT NULL COMMENT '任务,主键ID', + `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型', + `glue_source` mediumtext COMMENT 'GLUE源代码', + `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注', + `add_time` datetime DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + + +-- platform.xxl_job_registry definition + +CREATE TABLE `xxl_job_registry` ( + `id` int NOT NULL AUTO_INCREMENT, + `registry_group` varchar(50) NOT NULL, + `registry_key` varchar(255) NOT NULL, + `registry_value` varchar(255) NOT NULL, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + + +-- platform.xxl_job_user definition + +CREATE TABLE `xxl_job_user` ( + `id` int NOT NULL AUTO_INCREMENT, + `username` varchar(50) NOT NULL COMMENT '账号', + `password` varchar(50) NOT NULL COMMENT '密码', + `role` tinyint NOT NULL COMMENT '角色:0-普通用户、1-管理员', + `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割', + PRIMARY KEY (`id`), + UNIQUE KEY `i_username` (`username`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; \ No newline at end of file diff --git a/app.platform/platform2.sql b/app.platform/platform2.sql new file mode 100644 index 00000000..7c39062e --- /dev/null +++ b/app.platform/platform2.sql @@ -0,0 +1,127 @@ +-- platform2.xxl_job_group definition + +CREATE TABLE `xxl_job_group` ( + `ID` bigint NOT NULL AUTO_INCREMENT, + `APP_NAME` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `TITLE` varchar(12) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `ADDRESS_TYPE` tinyint NOT NULL DEFAULT '0', + `ADDRESS_LIST` longtext COLLATE utf8mb4_general_ci COMMENT '执行器地址列表,多地址逗号分隔', + `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB 组表'; + + +-- platform2.xxl_job_info definition + +CREATE TABLE `xxl_job_info` ( + `ID` bigint NOT NULL AUTO_INCREMENT, + `JOB_GROUP` int NOT NULL, + `JOB_DESC` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `ADD_TIME` datetime DEFAULT NULL COMMENT '创建日期', + `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新日期', + `AUTHOR` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '作者', + `ALARM_EMAIL` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '报警邮件', + `SCHEDULE_TYPE` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'NONE', + `SCHEDULE_CONF` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型', + `MISFIRE_STRATEGY` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'DO_NOTHING', + `EXECUTOR_ROUTE_STRATEGY` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器路由策略', + `EXECUTOR_HANDLER` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器任务handler', + `EXECUTOR_PARAM` varchar(512) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器任务参数', + `EXECUTOR_BLOCK_STRATEGY` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '阻塞处理策略', + `EXECUTOR_TIMEOUT` int NOT NULL DEFAULT '0', + `EXECUTOR_FAIL_RETRY_COUNT` int NOT NULL DEFAULT '0', + `GLUE_TYPE` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'GLUE类型', + `GLUE_SOURCE` longtext COLLATE utf8mb4_general_ci COMMENT 'GLUE源代码', + `GLUE_REMARK` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'GLUE备注', + `GLUE_UPDATETIME` datetime DEFAULT NULL COMMENT 'GLUE更新时间', + `CHILD_JOBID` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '子任务ID,多个逗号分隔', + `TRIGGER_STATUS` tinyint NOT NULL DEFAULT '0', + `TRIGGER_LAST_TIME` bigint NOT NULL DEFAULT '0', + `TRIGGER_NEXT_TIME` bigint NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB信息表'; + + +-- platform2.xxl_job_lock definition + +CREATE TABLE `xxl_job_lock` ( + `LOCK_NAME` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '锁名称', + PRIMARY KEY (`LOCK_NAME`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB 锁表'; + + +-- platform2.xxl_job_log definition + +CREATE TABLE `xxl_job_log` ( + `ID` bigint NOT NULL AUTO_INCREMENT, + `JOB_GROUP` int NOT NULL, + `JOB_ID` int NOT NULL, + `EXECUTOR_ADDRESS` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器地址,本次执行的地址', + `EXECUTOR_HANDLER` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器任务handler', + `EXECUTOR_PARAM` varchar(512) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器任务参数', + `EXECUTOR_SHARDING_PARAM` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2', + `EXECUTOR_FAIL_RETRY_COUNT` bigint NOT NULL DEFAULT '0', + `TRIGGER_TIME` datetime DEFAULT NULL COMMENT '调度-时间', + `TRIGGER_CODE` int NOT NULL, + `TRIGGER_MSG` longtext COLLATE utf8mb4_general_ci COMMENT '调度-日志', + `HANDLE_TIME` datetime DEFAULT NULL COMMENT '执行-时间', + `HANDLE_CODE` int NOT NULL, + `HANDLE_MSG` longtext COLLATE utf8mb4_general_ci COMMENT '执行-日志', + `ALARM_STATUS` tinyint NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`), + KEY `IDX_XXL_JOB_LOG_TRIGGER_TIME` (`TRIGGER_TIME`), + KEY `IDX_XXL_JOB_LOG_HANDLE_CODE` (`HANDLE_CODE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB日志表'; + + +-- platform2.xxl_job_log_report definition + +CREATE TABLE `xxl_job_log_report` ( + `ID` bigint NOT NULL AUTO_INCREMENT, + `TRIGGER_DAY` datetime DEFAULT NULL COMMENT '调度-时间', + `RUNNING_COUNT` int NOT NULL DEFAULT '0', + `SUC_COUNT` int NOT NULL DEFAULT '0', + `FAIL_COUNT` int NOT NULL DEFAULT '0', + `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`ID`), + UNIQUE KEY `IDX_XXL_JOB_LOG_REPORT_TRIGGER_DAY` (`TRIGGER_DAY`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB日志报告表'; + + +-- platform2.xxl_job_logglue definition + +CREATE TABLE `xxl_job_logglue` ( + `ID` bigint NOT NULL AUTO_INCREMENT, + `JOB_ID` int NOT NULL, + `GLUE_TYPE` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'GLUE类型', + `GLUE_SOURCE` longtext COLLATE utf8mb4_general_ci COMMENT 'GLUE源代码', + `GLUE_REMARK` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'GLUE备注', + `ADD_TIME` datetime DEFAULT NULL COMMENT '创建日期', + `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB GLUE 表'; + + +-- platform2.xxl_job_registry definition + +CREATE TABLE `xxl_job_registry` ( + `ID` bigint NOT NULL AUTO_INCREMENT, + `REGISTRY_GROUP` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `REGISTRY_KEY` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `REGISTRY_VALUE` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`ID`), + UNIQUE KEY `REGISTRY_GROUP` (`REGISTRY_GROUP`,`REGISTRY_KEY`,`REGISTRY_VALUE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB 注册表'; + + +-- platform2.xxl_job_user definition + +CREATE TABLE `xxl_job_user` ( + `ID` bigint NOT NULL AUTO_INCREMENT, + `USERNAME` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `PASSWORD` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `ROLE` tinyint NOT NULL, + `PERMISSION` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割', + PRIMARY KEY (`ID`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB 用户表'; \ No newline at end of file diff --git a/app.platform/src/main/java/app/platform/Application.java b/app.platform/src/main/java/app/platform/Application.java index e1dbc768..de40ec3f 100644 --- a/app.platform/src/main/java/app/platform/Application.java +++ b/app.platform/src/main/java/app/platform/Application.java @@ -6,6 +6,8 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.WebApplicationInitializer; +import java.sql.Types; + /** * 应用程序入口 */ diff --git a/build.gradle b/build.gradle index 04bd9898..655059bd 100644 --- a/build.gradle +++ b/build.gradle @@ -371,6 +371,8 @@ subprojects { * pnpm sync *----------------------------------------------------------------*/ task frontendNpmSync(type:Exec){ + commandLine 'cd', '.' + /* if(isFrontendProject(file('.')) && !project.name.contains("io.sc.platform.security.frontend")){ workingDir '.' if(org.gradle.internal.os.OperatingSystem.current().isWindows()){ @@ -384,7 +386,7 @@ subprojects { }else{ commandLine 'cd', '.' } - } + }*/ } tasks.frontendNpmSync.doFirst { if(isFrontendProject(file('.'))) { diff --git a/gradle.properties b/gradle.properties index f0eb91cf..70dbadea 100644 --- a/gradle.properties +++ b/gradle.properties @@ -36,9 +36,9 @@ application_version=1.0.0 # platform ########################################################### platform_group=io.sc -platform_version=8.1.13 +platform_version=8.1.20 platform_plugin_version=8.1.13 -platform_core_frontend_version=8.1.42 +platform_core_frontend_version=8.1.47 ########################################################### # dependencies version @@ -50,6 +50,7 @@ cxf_version=3.2.7 dm_hibernate_version=8.1.2.192 flowable_version=6.8.0 guava_version=31.1-jre +ipaddress_version=5.4.0 jackson_version=2.13.5 jasypt_version=2.1.2 jboss_logging_version=3.3.2.Final diff --git a/io.sc.platform.core.frontend/package.json b/io.sc.platform.core.frontend/package.json index 573db6bd..74c83c04 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.1.42", + "version": "8.1.47", "description": "前端核心包,用于快速构建前端的脚手架", "//main": "库的主文件", "main": "dist/platform-core.js", diff --git a/io.sc.platform.core.frontend/src/components/index.ts b/io.sc.platform.core.frontend/src/components/index.ts index 9c1a16f6..aac544bd 100644 --- a/io.sc.platform.core.frontend/src/components/index.ts +++ b/io.sc.platform.core.frontend/src/components/index.ts @@ -6,12 +6,14 @@ import dialog from '@/views/Dialog.vue'; import codemirror from '@/views/Codemirror.vue'; import select from '@/views/Select.vue'; import treeGrid from '@/views/TreeGrid.vue'; +import table from '@/views/Table.vue'; const localComponents = { 'component.testcase.dialog': dialog, 'component.testcase.codemirror': codemirror, 'component.testcase.select': select, 'component.testcase.treeGrid': treeGrid, + 'component.testcase.table': table, }; export default localComponents; diff --git a/io.sc.platform.core.frontend/src/i18n/messages.json b/io.sc.platform.core.frontend/src/i18n/messages.json index 00d6bddd..e57d162e 100644 --- a/io.sc.platform.core.frontend/src/i18n/messages.json +++ b/io.sc.platform.core.frontend/src/i18n/messages.json @@ -3,5 +3,6 @@ "menu.testcase.codemirror": "CodeMirror", "menu.testcase.dialog": "Dialog", "menu.testcase.select": "Select", - "menu.testcase.treeGrid": "Tree Grid" + "menu.testcase.treeGrid": "Tree Grid", + "menu.testcase.table": "Table" } diff --git a/io.sc.platform.core.frontend/src/i18n/messages_tw_CN.json b/io.sc.platform.core.frontend/src/i18n/messages_tw_CN.json index 00806365..c443b2be 100644 --- a/io.sc.platform.core.frontend/src/i18n/messages_tw_CN.json +++ b/io.sc.platform.core.frontend/src/i18n/messages_tw_CN.json @@ -3,5 +3,6 @@ "menu.testcase.codemirror": "CodeMirror", "menu.testcase.dialog": "Dialog", "menu.testcase.select": "Select", - "menu.testcase.treeGrid": "Tree Grid" + "menu.testcase.treeGrid": "Tree Grid", + "menu.testcase.table": "Table" } diff --git a/io.sc.platform.core.frontend/src/i18n/messages_zh_CN.json b/io.sc.platform.core.frontend/src/i18n/messages_zh_CN.json index ef4c117c..c33c404a 100644 --- a/io.sc.platform.core.frontend/src/i18n/messages_zh_CN.json +++ b/io.sc.platform.core.frontend/src/i18n/messages_zh_CN.json @@ -3,5 +3,6 @@ "menu.testcase.codemirror": "CodeMirror", "menu.testcase.dialog": "Dialog", "menu.testcase.select": "Select", - "menu.testcase.treeGrid": "Tree Grid" + "menu.testcase.treeGrid": "Tree Grid", + "menu.testcase.table": "Table" } diff --git a/io.sc.platform.core.frontend/src/menus/menus.json b/io.sc.platform.core.frontend/src/menus/menus.json index b0672bd8..14837958 100644 --- a/io.sc.platform.core.frontend/src/menus/menus.json +++ b/io.sc.platform.core.frontend/src/menus/menus.json @@ -53,5 +53,14 @@ "titleI18nKey": "menu.testcase.treeGrid", "icon": "bi-palette", "routeName": "route.testcase.treeGrid" + }, + { + "type": "ROUTE", + "order": 400, + "parentId": "menu.testcase", + "id": "menu.testcase.table", + "titleI18nKey": "menu.testcase.table", + "icon": "bi-palette", + "routeName": "route.testcase.table" } ] diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/PlatformGrid.vue b/io.sc.platform.core.frontend/src/platform/components/grid/PlatformGrid.vue index 641f3100..4b57e5c1 100644 --- a/io.sc.platform.core.frontend/src/platform/components/grid/PlatformGrid.vue +++ b/io.sc.platform.core.frontend/src/platform/components/grid/PlatformGrid.vue @@ -99,6 +99,14 @@ outline @click="onView" > + 查看 + + + 导出 + + {{ btn.label }} @@ -356,7 +373,7 @@ diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/WTreeGrid.vue b/io.sc.platform.core.frontend/src/platform/components/grid/WTreeGrid.vue new file mode 100644 index 00000000..60af4360 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/WTreeGrid.vue @@ -0,0 +1,39 @@ + + + diff --git a/io.sc.platform.core.frontend/src/platform/components/index.ts b/io.sc.platform.core.frontend/src/platform/components/index.ts index 0e4cca74..8625dc10 100644 --- a/io.sc.platform.core.frontend/src/platform/components/index.ts +++ b/io.sc.platform.core.frontend/src/platform/components/index.ts @@ -8,6 +8,7 @@ import WColorInputPalette from './widget/color/WColorInputPalette.vue'; import WPosition from './widget/position/WPosition.vue'; import WCodemirror from './widget/codemirror/WCodemirror.vue'; import WSelect from './widget/select/WSelect.vue'; +import WListGrid from './grid/WListGrid.vue'; import WTreeGrid from './tree/WTreeGrid.vue'; import WDialog from './dialog/WDialog.vue'; @@ -28,6 +29,7 @@ export default { app.component('WPosition', WPosition); app.component('WCodemirror', WCodemirror); app.component('WSelect', WSelect); + app.component('WListGrid', WListGrid); app.component('WTreeGrid', WTreeGrid); app.component('WDialog', WDialog); @@ -48,6 +50,7 @@ export { WPosition, WCodemirror, WSelect, + WListGrid, WTreeGrid, WDialog, PlatformDialog, diff --git a/io.sc.platform.core.frontend/src/platform/components/tree/WTreeGrid.vue b/io.sc.platform.core.frontend/src/platform/components/tree/WTreeGrid.vue index 2fb8e0a2..c32c07a6 100644 --- a/io.sc.platform.core.frontend/src/platform/components/tree/WTreeGrid.vue +++ b/io.sc.platform.core.frontend/src/platform/components/tree/WTreeGrid.vue @@ -104,7 +104,7 @@ const getTicked = () => { result.add(ticked); } for (const ticked of tickeds) { - getAllParentIds(nodesCache.get(ticked).parentId, result); + getAllParentIds(nodesCache.get(ticked).parent, result); } } return [...result]; @@ -115,7 +115,7 @@ const getAllParentIds = (parentId, result) => { const parent = nodesCache.get(parentId); if (parent) { result.add(parent.id); - getAllParentIds(parent.parentId, result); + getAllParentIds(parent.parent, result); } } }; @@ -125,9 +125,9 @@ const getCascadeParentIds = (id) => { let node = nodesCache.get(id); if (node) { result.push(id); - while (node.parentId) { - result.push(node.parentId); - node = nodesCache.get(node.parentId); + while (node.parent) { + result.push(node.parent); + node = nodesCache.get(node.parent); } } return result; diff --git a/io.sc.platform.core.frontend/src/platform/index.ts b/io.sc.platform.core.frontend/src/platform/index.ts index 0c682af4..35a4a397 100644 --- a/io.sc.platform.core.frontend/src/platform/index.ts +++ b/io.sc.platform.core.frontend/src/platform/index.ts @@ -105,6 +105,7 @@ export { WPosition, WCodemirror, WSelect, + WListGrid, WTreeGrid, PlatformDialog, PlatformDrawer, diff --git a/io.sc.platform.core.frontend/src/platform/plugin/manager/MenuManager.ts b/io.sc.platform.core.frontend/src/platform/plugin/manager/MenuManager.ts index ec4b65af..eb6e5ffe 100644 --- a/io.sc.platform.core.frontend/src/platform/plugin/manager/MenuManager.ts +++ b/io.sc.platform.core.frontend/src/platform/plugin/manager/MenuManager.ts @@ -30,23 +30,23 @@ class MenuManager { * @returns 菜单 */ public static buildMenus(remoteMenus: MenuItemType[] = []) { - // 由于远程菜单的 id 和 parentId 均为 uuid, 而本地菜单的 id 和 parentId 均为 name, 需要进行统一 - // 将远程菜单的 id 和 parentId 转换为 name + // 由于远程菜单的 id 和 parent 均为 uuid, 而本地菜单的 id 和 parent 均为 name, 需要进行统一 + // 将远程菜单的 id 和 parent 转换为 name const remoteCache: Map = new Map(); for (const menu of remoteMenus) { remoteCache.set(menu.id, menu.name); } for (const menu of remoteMenus) { menu.id = menu.name; - if (menu.parentId) { - const parentName = remoteCache.get(menu.parentId); + if (menu.parent) { + const parentName = remoteCache.get(menu.parent); if (parentName) { - menu.parentId = parentName; + menu.parent = parentName; } else { - menu.parentId = null; + menu.parent = null; } } else { - menu.parentId = null; + menu.parent = null; } } @@ -54,6 +54,7 @@ class MenuManager { const mergedCache: Map = new Map(); const result: MenuItemType[] = []; for (const menu of MenuManager.#localMenus) { + menu.parent = menu.parent || menu.parentId; result.push(menu); mergedCache.set(menu.id, menu); } diff --git a/io.sc.platform.core.frontend/src/platform/types/MenuItemType.ts b/io.sc.platform.core.frontend/src/platform/types/MenuItemType.ts index 22ae26c8..97071852 100644 --- a/io.sc.platform.core.frontend/src/platform/types/MenuItemType.ts +++ b/io.sc.platform.core.frontend/src/platform/types/MenuItemType.ts @@ -1,6 +1,7 @@ export type MenuItemType = { type: string; parentId: string | null; + parent: string | null; id: string; name: string; titleI18nKey: string; diff --git a/io.sc.platform.core.frontend/src/platform/utils/Tools.ts b/io.sc.platform.core.frontend/src/platform/utils/Tools.ts index 9767a119..7873b25a 100644 --- a/io.sc.platform.core.frontend/src/platform/utils/Tools.ts +++ b/io.sc.platform.core.frontend/src/platform/utils/Tools.ts @@ -26,6 +26,15 @@ class Tools { return obj == null || typeof obj == 'undefined' || obj == ''; } + /** + * 判断一个对象是否是字符串 + * @param obj 对象 + * @returns 对象是否是字符串 + */ + public static isString(obj: any): boolean { + return !Tools.isUndefinedOrNull(obj) && typeof obj === 'string'; + } + /** * 判断一个对象是否是对象类型 * @param obj 对象 diff --git a/io.sc.platform.core.frontend/src/platform/utils/TreeBuilder.ts b/io.sc.platform.core.frontend/src/platform/utils/TreeBuilder.ts index abf4a53e..aeeccb1c 100644 --- a/io.sc.platform.core.frontend/src/platform/utils/TreeBuilder.ts +++ b/io.sc.platform.core.frontend/src/platform/utils/TreeBuilder.ts @@ -3,7 +3,7 @@ import { Tools } from '.'; class TreeBuilder { public static build( list: any[] = [], - parentIdPropertyName: string = 'parentId', + parentIdPropertyName: string = 'parent', idPropertyName: string = 'id', childrenPropertyName: string = 'children', orderPropertyName: string = '', diff --git a/io.sc.platform.core.frontend/src/routes/routes.json b/io.sc.platform.core.frontend/src/routes/routes.json index d954b707..fdcc0041 100644 --- a/io.sc.platform.core.frontend/src/routes/routes.json +++ b/io.sc.platform.core.frontend/src/routes/routes.json @@ -46,5 +46,17 @@ "meta": { "permissions": ["/testcase/treeGrid/**/*"] } + }, + { + "name": "route.testcase.table", + "path": "testcase/table", + "parent": "/", + "priority": 0, + "component": "component.testcase.table", + "componentPath": "@/views/Table.vue", + "redirect": null, + "meta": { + "permissions": ["/testcase/table/**/*"] + } } ] diff --git a/io.sc.platform.core.frontend/src/views/Table.vue b/io.sc.platform.core.frontend/src/views/Table.vue new file mode 100644 index 00000000..94fb1370 --- /dev/null +++ b/io.sc.platform.core.frontend/src/views/Table.vue @@ -0,0 +1,54 @@ + + + diff --git a/io.sc.platform.core.frontend/src/views/TreeGrid.vue b/io.sc.platform.core.frontend/src/views/TreeGrid.vue index 82a694a4..ddbd5592 100644 --- a/io.sc.platform.core.frontend/src/views/TreeGrid.vue +++ b/io.sc.platform.core.frontend/src/views/TreeGrid.vue @@ -1,17 +1,5 @@ diff --git a/io.sc.platform.core.frontend/template-project/.npmrc b/io.sc.platform.core.frontend/template-project/.npmrc index 06969b7b..c1c0b295 100644 --- a/io.sc.platform.core.frontend/template-project/.npmrc +++ b/io.sc.platform.core.frontend/template-project/.npmrc @@ -8,4 +8,4 @@ email= # 登录 npm 仓库的用户认证信息, 在 npm publish 时使用, publish 的 npm registry 在 package.json 文件中 publishConfig 部分配置 # _authToken 可通过以下命令获取 # curl -X PUT -H "Content-Type:application/json" -d '{"_id":"org.couchdb.user:admin","name":"admin","password":"admin"}' http://nexus.sc.io:8000/repository/npm-releases/-/user/org.couchdb.user:admin -//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.25afcf59-9193-3068-bcfa-faf76ceadb13 \ No newline at end of file +//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.193db44c-7ca5-3cb6-a990-d24b93fb0d10 \ No newline at end of file diff --git a/io.sc.platform.core.frontend/template-project/package.json b/io.sc.platform.core.frontend/template-project/package.json index 89c8e3c8..4db36d50 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.1.42", + "version": "8.1.47", "description": "前端核心包,用于快速构建前端的脚手架", "private": false, "keywords": [], @@ -91,7 +91,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.42", + "platform-core": "8.1.47", "quasar": "2.13.0", "tailwindcss": "3.3.5", "vue": "3.3.7", diff --git a/io.sc.platform.core.frontend/template-project/src/components/index.ts b/io.sc.platform.core.frontend/template-project/src/components/index.ts index 9c1a16f6..aac544bd 100644 --- a/io.sc.platform.core.frontend/template-project/src/components/index.ts +++ b/io.sc.platform.core.frontend/template-project/src/components/index.ts @@ -6,12 +6,14 @@ import dialog from '@/views/Dialog.vue'; import codemirror from '@/views/Codemirror.vue'; import select from '@/views/Select.vue'; import treeGrid from '@/views/TreeGrid.vue'; +import table from '@/views/Table.vue'; const localComponents = { 'component.testcase.dialog': dialog, 'component.testcase.codemirror': codemirror, 'component.testcase.select': select, 'component.testcase.treeGrid': treeGrid, + 'component.testcase.table': table, }; export default localComponents; diff --git a/io.sc.platform.core.frontend/template-project/src/i18n/messages.json b/io.sc.platform.core.frontend/template-project/src/i18n/messages.json index 00d6bddd..e57d162e 100644 --- a/io.sc.platform.core.frontend/template-project/src/i18n/messages.json +++ b/io.sc.platform.core.frontend/template-project/src/i18n/messages.json @@ -3,5 +3,6 @@ "menu.testcase.codemirror": "CodeMirror", "menu.testcase.dialog": "Dialog", "menu.testcase.select": "Select", - "menu.testcase.treeGrid": "Tree Grid" + "menu.testcase.treeGrid": "Tree Grid", + "menu.testcase.table": "Table" } diff --git a/io.sc.platform.core.frontend/template-project/src/i18n/messages_tw_CN.json b/io.sc.platform.core.frontend/template-project/src/i18n/messages_tw_CN.json index 00806365..c443b2be 100644 --- a/io.sc.platform.core.frontend/template-project/src/i18n/messages_tw_CN.json +++ b/io.sc.platform.core.frontend/template-project/src/i18n/messages_tw_CN.json @@ -3,5 +3,6 @@ "menu.testcase.codemirror": "CodeMirror", "menu.testcase.dialog": "Dialog", "menu.testcase.select": "Select", - "menu.testcase.treeGrid": "Tree Grid" + "menu.testcase.treeGrid": "Tree Grid", + "menu.testcase.table": "Table" } diff --git a/io.sc.platform.core.frontend/template-project/src/i18n/messages_zh_CN.json b/io.sc.platform.core.frontend/template-project/src/i18n/messages_zh_CN.json index ef4c117c..c33c404a 100644 --- a/io.sc.platform.core.frontend/template-project/src/i18n/messages_zh_CN.json +++ b/io.sc.platform.core.frontend/template-project/src/i18n/messages_zh_CN.json @@ -3,5 +3,6 @@ "menu.testcase.codemirror": "CodeMirror", "menu.testcase.dialog": "Dialog", "menu.testcase.select": "Select", - "menu.testcase.treeGrid": "Tree Grid" + "menu.testcase.treeGrid": "Tree Grid", + "menu.testcase.table": "Table" } diff --git a/io.sc.platform.core.frontend/template-project/src/menus/menus.json b/io.sc.platform.core.frontend/template-project/src/menus/menus.json index b0672bd8..14837958 100644 --- a/io.sc.platform.core.frontend/template-project/src/menus/menus.json +++ b/io.sc.platform.core.frontend/template-project/src/menus/menus.json @@ -53,5 +53,14 @@ "titleI18nKey": "menu.testcase.treeGrid", "icon": "bi-palette", "routeName": "route.testcase.treeGrid" + }, + { + "type": "ROUTE", + "order": 400, + "parentId": "menu.testcase", + "id": "menu.testcase.table", + "titleI18nKey": "menu.testcase.table", + "icon": "bi-palette", + "routeName": "route.testcase.table" } ] diff --git a/io.sc.platform.core.frontend/template-project/src/routes/routes.json b/io.sc.platform.core.frontend/template-project/src/routes/routes.json index d954b707..fdcc0041 100644 --- a/io.sc.platform.core.frontend/template-project/src/routes/routes.json +++ b/io.sc.platform.core.frontend/template-project/src/routes/routes.json @@ -46,5 +46,17 @@ "meta": { "permissions": ["/testcase/treeGrid/**/*"] } + }, + { + "name": "route.testcase.table", + "path": "testcase/table", + "parent": "/", + "priority": 0, + "component": "component.testcase.table", + "componentPath": "@/views/Table.vue", + "redirect": null, + "meta": { + "permissions": ["/testcase/table/**/*"] + } } ] diff --git a/io.sc.platform.core.frontend/template-project/src/views/Table.vue b/io.sc.platform.core.frontend/template-project/src/views/Table.vue new file mode 100644 index 00000000..9d38561c --- /dev/null +++ b/io.sc.platform.core.frontend/template-project/src/views/Table.vue @@ -0,0 +1,53 @@ + + diff --git a/io.sc.platform.core.frontend/template-project/src/views/TreeGrid.vue b/io.sc.platform.core.frontend/template-project/src/views/TreeGrid.vue index 82a694a4..ddbd5592 100644 --- a/io.sc.platform.core.frontend/template-project/src/views/TreeGrid.vue +++ b/io.sc.platform.core.frontend/template-project/src/views/TreeGrid.vue @@ -1,17 +1,5 @@ diff --git a/io.sc.platform.core/build.gradle b/io.sc.platform.core/build.gradle index dc5cbfa3..6f5f4fe3 100644 --- a/io.sc.platform.core/build.gradle +++ b/io.sc.platform.core/build.gradle @@ -14,5 +14,6 @@ dependencies { "com.google.guava:guava:${guava_version}", "com.beust:jcommander:${jcommander_version}", "net.lingala.zip4j:zip4j:${zip4j_version}", + "com.github.seancfoley:ipaddress:${ipaddress_version}", ) } diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/initializer/ApplicationInitializer.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/initializer/ApplicationInitializer.java index 5791e022..3475da21 100644 --- a/io.sc.platform.core/src/main/java/io/sc/platform/core/initializer/ApplicationInitializer.java +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/initializer/ApplicationInitializer.java @@ -26,7 +26,7 @@ public interface ApplicationInitializer extends Ordered { * @return 应用初始化器名称 */ public default String getName(){ - return this.getClass().getSimpleName(); + return this.getClass().getName() + ".name"; } /** @@ -34,7 +34,7 @@ public interface ApplicationInitializer extends Ordered { * @return 应用初始化器描述 */ public default String getDescription(){ - return this.getClass().getSimpleName(); + return this.getClass().getName() + ".description"; } /** diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/util/IpUtil.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/util/IpUtil.java new file mode 100644 index 00000000..812370e2 --- /dev/null +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/util/IpUtil.java @@ -0,0 +1,47 @@ +package io.sc.platform.core.util; + +import javax.servlet.http.HttpServletRequest; + +import inet.ipaddr.IPAddressString; + +/** + * IP 地址工具类 + * @author wangshaoping + * + */ +public class IpUtil { + public static final String UNKNOW_IP ="0.0.0.0"; + + /** + * 获取客户端 IP 地址 + * @param request Http 请求 + * @return 客户端 IP 地址 + */ + public static String getRemoteAddress(HttpServletRequest request){ + IPAddressString ipAdress =getRemoteIPAddressString(request); + if(ipAdress!=null){ + return ipAdress.getAddress().toFullString(); + } + return null; + } + + private static IPAddressString getRemoteIPAddressString(HttpServletRequest request){ + String ip =request.getHeader("x-forwarded-for"); + if(ip==null || ip.length()==0 || "unknown".equalsIgnoreCase(ip)){ + ip =request.getHeader("Proxy-Client-IP"); + } + if(ip==null || ip.length()==0 || "unknown".equalsIgnoreCase(ip)){ + ip =request.getHeader("WL-Proxy-Client-IP"); + } + if(ip==null || ip.length()==0 || "unknown".equalsIgnoreCase(ip)){ + ip =request.getRemoteAddr(); + } + IPAddressString ipAdress =new IPAddressString(ip); + if(ipAdress!=null && ipAdress.isIPAddress()){ + return ipAdress; + } + //当无法正确获取IP时,系统采用特殊IP地址作为IP地址 + //这样可以避免因为无法获取IP而出现无法认证登录的问题 + return new IPAddressString(UNKNOW_IP); + } +} diff --git a/io.sc.platform.core/src/main/resources/io/sc/platform/core/config/logback-spring.xml b/io.sc.platform.core/src/main/resources/io/sc/platform/core/config/logback-spring.xml index 02cf8d7f..6d411899 100644 --- a/io.sc.platform.core/src/main/resources/io/sc/platform/core/config/logback-spring.xml +++ b/io.sc.platform.core/src/main/resources/io/sc/platform/core/config/logback-spring.xml @@ -1,40 +1,40 @@ - - - - - + + + + + ${pattern} - + - ${pattern} + ${pattern} ${homedir}/logs/log.log ${homedir}/logs/log.%d.log 30 - + - + - + @@ -44,8 +44,8 @@ - - + + + + + + + + + + ${pattern} + + INFO + ACCEPT + DENY + + + + + + ${pattern} + ${homedir}/logs/log-error.log + + ${homedir}/logs/log-error.%d.log + 30 + + + ERROR + ACCEPT + DENY + + + + + ${pattern} + ${homedir}/logs/log-warn.log + + ${homedir}/logs/log-warn.%d.log + 30 + + + WARN + ACCEPT + DENY + + + + + ${pattern} + ${homedir}/logs/log-info.log + + ${homedir}/logs/log-info.%d.log + 30 + + + INFO + ACCEPT + DENY + + + + + ${pattern} + ${homedir}/logs/log-debug.log + + ${homedir}/logs/log-debug.%d.log + 30 + + + DEBUG + ACCEPT + DENY + + + + + ${pattern} + ${homedir}/logs/log-trace.log + + ${homedir}/logs/log-trace.%d.log + 30 + + + TRACE + ACCEPT + DENY + + + + + + + + + + + + + + + + \ No newline at end of file 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 d891ae5a..6ab524df 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 @@ -1,7 +1,9 @@ about=About action=Action add=Add +addChild=Add Child {object} addNew=Add +addTop=Add Top {object} alter=Alter bottom-left=Bottom Left bottom-right=Bottom Right @@ -21,7 +23,9 @@ creator=Creator dataComeFrom=Data Come From deepClone=Deep Clone delete=Delete +deleteAll=Delete All description=Description +detail=Detail displayValue=Display Value download=Download edit=Edit 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 f5550009..98b9d023 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 @@ -1,7 +1,9 @@ about=\u95DC\u65BC action=\u64CD\u4F5C add=\u6DFB\u52A0 +addChild=\u65B0\u589E\u5B50{object} addNew=\u65B0\u589E +addTop=\u65B0\u589E\u9802\u7D1A{object} alter=\u901A\u77E5 bottom-left=\u5DE6\u4E0B bottom-right=\u53F3\u4E0B @@ -21,7 +23,9 @@ creator=\u5275\u5EFA\u4EBA dataComeFrom=\u6578\u64DA\u4F86\u6E90 deepClone=\u6DF1\u5EA6\u8907\u88FD delete=\u522A\u9664 +deleteAll=\u522A\u9664\u5168\u90E8 description=\u63CF\u8FF0 +detail=\u8A73\u60C5 displayValue=\u986F\u793A\u503C download=\u4E0B\u8F09 edit=\u7DE8\u8F2F 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 98349727..9ebecdfd 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 @@ -1,7 +1,9 @@ about=\u5173\u4E8E action=\u64CD\u4F5C add=\u6DFB\u52A0 +addChild=\u65B0\u589E\u5B50{object} addNew=\u65B0\u589E +addTop=\u65B0\u589E\u9876\u7EA7{object} alter=\u901A\u77E5 bottom-left=\u5DE6\u4E0B bottom-right=\u53F3\u4E0B @@ -21,7 +23,9 @@ creator=\u521B\u5EFA\u4EBA dataComeFrom=\u6570\u636E\u6765\u6E90 deepClone=\u6DF1\u5EA6\u590D\u5236 delete=\u522A\u9664 +deleteAll=\u5220\u9664\u5168\u90E8 description=\u63CF\u8FF0 +detail=\u8BE6\u60C5 displayValue=\u663E\u793A\u503C download=\u4E0B\u8F7D edit=\u7F16\u8F91 diff --git a/io.sc.platform.developer.doc/asciidoc/9999-appendix/appendix.adoc b/io.sc.platform.developer.doc/asciidoc/9999-appendix/appendix.adoc index ee850908..fba48251 100644 --- a/io.sc.platform.developer.doc/asciidoc/9999-appendix/appendix.adoc +++ b/io.sc.platform.developer.doc/asciidoc/9999-appendix/appendix.adoc @@ -1,5 +1,5 @@ include::software/software.adoc[] -include::environment/environment.adoc[] +#include::environment/environment.adoc[] include::platform/platform.adoc[] include::docker-command/docker-command.adoc[] include::docker-compose/docker-compose.adoc[] diff --git a/io.sc.platform.developer.doc/asciidoc/index.adoc b/io.sc.platform.developer.doc/asciidoc/index.adoc index d61cbc7c..c2b82afd 100644 --- a/io.sc.platform.developer.doc/asciidoc/index.adoc +++ b/io.sc.platform.developer.doc/asciidoc/index.adoc @@ -33,7 +33,7 @@ include::getting-started/getting-started.adoc[leveloffset=+1] -include::yu/yu.adoc[leveloffset=+1] + include::platform-extension/platform-extension.adoc[leveloffset=+1] diff --git a/io.sc.platform.developer.doc/asciidoc/resources/images/getting-started/windows/install-005.png b/io.sc.platform.developer.doc/asciidoc/resources/images/getting-started/windows/install-005.png index b2d8e571..655ff477 100644 Binary files a/io.sc.platform.developer.doc/asciidoc/resources/images/getting-started/windows/install-005.png and b/io.sc.platform.developer.doc/asciidoc/resources/images/getting-started/windows/install-005.png differ diff --git a/io.sc.platform.developer.frontend/.npmrc b/io.sc.platform.developer.frontend/.npmrc index 06969b7b..c1c0b295 100644 --- a/io.sc.platform.developer.frontend/.npmrc +++ b/io.sc.platform.developer.frontend/.npmrc @@ -8,4 +8,4 @@ email= # 登录 npm 仓库的用户认证信息, 在 npm publish 时使用, publish 的 npm registry 在 package.json 文件中 publishConfig 部分配置 # _authToken 可通过以下命令获取 # curl -X PUT -H "Content-Type:application/json" -d '{"_id":"org.couchdb.user:admin","name":"admin","password":"admin"}' http://nexus.sc.io:8000/repository/npm-releases/-/user/org.couchdb.user:admin -//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.25afcf59-9193-3068-bcfa-faf76ceadb13 \ No newline at end of file +//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.193db44c-7ca5-3cb6-a990-d24b93fb0d10 \ No newline at end of file diff --git a/io.sc.platform.developer.frontend/package.json b/io.sc.platform.developer.frontend/package.json index 29f2963e..ad76cf84 100644 --- a/io.sc.platform.developer.frontend/package.json +++ b/io.sc.platform.developer.frontend/package.json @@ -1,102 +1,104 @@ { - "name": "io.sc.platform.developer.frontend", - "version": "8.1.13", - "description": "", - "private": false, - "keywords": [], - "author": "", - "license": "ISC", - "scripts": { - "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml", - "dev": "nodemon", - "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", - "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", - "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", - "sync": "platform sync" - }, - "engines": { - "node": ">=18", - "pnpm": ">=7" - }, - "publishConfig": { - "registry": "http://nexus.sc.io:8000/repository/npm-releases/", - "access": "public" - }, - "devDependencies": { - "@babel/core": "7.23.2", - "@babel/preset-env": "7.23.2", - "@babel/preset-typescript": "7.23.2", - "@babel/plugin-transform-class-properties": "7.22.5", - "@babel/plugin-transform-object-rest-spread": "7.22.15", - "@quasar/app-webpack": "3.11.2", - "@quasar/cli": "2.3.0", - "@types/mockjs": "1.0.9", - "@types/node": "20.8.9", - "@typescript-eslint/eslint-plugin": "6.9.0", - "@typescript-eslint/parser": "6.9.0", - "@vue/compiler-sfc": "3.3.7", - "@webpack-cli/serve": "2.0.5", - "autoprefixer": "10.4.16", - "babel-loader": "9.1.3", - "clean-webpack-plugin": "4.0.0", - "copy-webpack-plugin": "11.0.0", - "cross-env": "7.0.3", - "css-loader": "6.8.1", - "eslint": "8.52.0", - "eslint-config-prettier": "9.0.0", - "eslint-plugin-prettier": "5.0.1", - "eslint-plugin-vue": "9.18.0", - "eslint-webpack-plugin": "4.0.1", - "html-webpack-plugin": "5.5.3", - "json5": "2.2.3", - "mini-css-extract-plugin": "2.7.6", - "nodemon": "3.0.1", - "postcss": "8.4.31", - "postcss-import": "15.1.0", - "postcss-loader": "7.3.3", - "postcss-preset-env": "9.2.0", - "prettier": "3.0.3", - "sass": "1.69.5", - "sass-loader": "13.3.2", - "typescript": "5.2.2", - "vue-loader": "17.3.0", - "webpack": "5.89.0", - "webpack-bundle-analyzer": "4.9.1", - "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.1", - "webpack-merge": "5.10.0" - }, - "dependencies": { - "@quasar/extras": "1.16.7", - "@vueuse/core": "10.3.0", - "axios": "1.5.1", - "dayjs": "1.11.10", - "echarts": "5.4.1", - "exceljs": "4.3.0", - "file-saver": "2.0.5", - "luckyexcel": "1.0.1", - "mockjs": "1.1.0", - "pinia": "2.1.7", - "platform-core": "8.1.42", - "quasar": "2.13.0", - "tailwindcss": "3.3.5", - "vue": "3.3.7", - "vue-dompurify-html": "4.1.4", - "vue-i18n": "9.6.0", - "vue-router": "4.2.5", - "@codemirror/autocomplete": "6.11.1", - "@codemirror/commands": "6.3.2", - "@codemirror/lang-html": "6.4.7", - "@codemirror/lang-java": "6.0.1", - "@codemirror/lang-javascript": "6.2.1", - "@codemirror/lang-json": "6.0.1", - "@codemirror/lang-sql": "6.5.4", - "@codemirror/lang-xml": "6.0.2", - "@codemirror/language": "6.9.3", - "@codemirror/search": "6.5.5", - "@codemirror/state": "6.3.3", - "@codemirror/view": "6.22.1", - "codemirror": "6.0.1", - "vue-codemirror6": "1.1.31" - } + "name": "io.sc.platform.developer.frontend", + "version": "8.1.19", + "description": "", + "private": false, + "keywords": [ + + ], + "author": "", + "license": "ISC", + "scripts": { + "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml", + "dev": "nodemon", + "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", + "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", + "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", + "sync": "platform sync" + }, + "engines": { + "node": ">=18", + "pnpm": ">=7" + }, + "publishConfig": { + "registry": "http://nexus.sc.io:8000/repository/npm-releases/", + "access": "public" + }, + "devDependencies": { + "@babel/core": "7.23.2", + "@babel/preset-env": "7.23.2", + "@babel/preset-typescript": "7.23.2", + "@babel/plugin-transform-class-properties": "7.22.5", + "@babel/plugin-transform-object-rest-spread": "7.22.15", + "@quasar/app-webpack": "3.11.2", + "@quasar/cli": "2.3.0", + "@types/mockjs": "1.0.9", + "@types/node": "20.8.9", + "@typescript-eslint/eslint-plugin": "6.9.0", + "@typescript-eslint/parser": "6.9.0", + "@vue/compiler-sfc": "3.3.7", + "@webpack-cli/serve": "2.0.5", + "autoprefixer": "10.4.16", + "babel-loader": "9.1.3", + "clean-webpack-plugin": "4.0.0", + "copy-webpack-plugin": "11.0.0", + "cross-env": "7.0.3", + "css-loader": "6.8.1", + "eslint": "8.52.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-prettier": "5.0.1", + "eslint-plugin-vue": "9.18.0", + "eslint-webpack-plugin": "4.0.1", + "html-webpack-plugin": "5.5.3", + "json5": "2.2.3", + "mini-css-extract-plugin": "2.7.6", + "nodemon": "3.0.1", + "postcss": "8.4.31", + "postcss-import": "15.1.0", + "postcss-loader": "7.3.3", + "postcss-preset-env": "9.2.0", + "prettier": "3.0.3", + "sass": "1.69.5", + "sass-loader": "13.3.2", + "typescript": "5.2.2", + "vue-loader": "17.3.0", + "webpack": "5.89.0", + "webpack-bundle-analyzer": "4.9.1", + "webpack-cli": "5.1.4", + "webpack-dev-server": "4.15.1", + "webpack-merge": "5.10.0" + }, + "dependencies": { + "@quasar/extras": "1.16.7", + "@vueuse/core": "10.3.0", + "axios": "1.5.1", + "dayjs": "1.11.10", + "echarts": "5.4.1", + "exceljs": "4.3.0", + "file-saver": "2.0.5", + "luckyexcel": "1.0.1", + "mockjs": "1.1.0", + "pinia": "2.1.7", + "platform-core": "8.1.45", + "quasar": "2.13.0", + "tailwindcss": "3.3.5", + "vue": "3.3.7", + "vue-dompurify-html": "4.1.4", + "vue-i18n": "9.6.0", + "vue-router": "4.2.5", + "@codemirror/autocomplete": "6.11.1", + "@codemirror/commands": "6.3.2", + "@codemirror/lang-html": "6.4.7", + "@codemirror/lang-java": "6.0.1", + "@codemirror/lang-javascript": "6.2.1", + "@codemirror/lang-json": "6.0.1", + "@codemirror/lang-sql": "6.5.4", + "@codemirror/lang-xml": "6.0.2", + "@codemirror/language": "6.9.3", + "@codemirror/search": "6.5.5", + "@codemirror/state": "6.3.3", + "@codemirror/view": "6.22.1", + "codemirror": "6.0.1", + "vue-codemirror6": "1.1.31" + } } \ No newline at end of file diff --git a/io.sc.platform.developer.frontend/src/components/index.ts b/io.sc.platform.developer.frontend/src/components/index.ts index 6c539498..5c7cd970 100644 --- a/io.sc.platform.developer.frontend/src/components/index.ts +++ b/io.sc.platform.developer.frontend/src/components/index.ts @@ -12,6 +12,7 @@ import Components from '@/views/plugin/Components.vue'; import Directories from '@/views/plugin/Directories.vue'; import FrontendModule from '@/views/plugin/FrontendModule.vue'; import FrontendRoutes from '@/views/plugin/FrontendRoutes.vue'; +import Initializer from '@/views/plugin/Initializer.vue'; import JsonSerializers from '@/views/plugin/JsonSerializers.vue'; import Menus from '@/views/plugin/Menus.vue'; import Messages from '@/views/plugin/Messages.vue'; @@ -35,6 +36,7 @@ const localComponents = { 'component.developer.plugin.Directories': Directories, 'component.developer.plugin.FrontendModule': FrontendModule, 'component.developer.plugin.FrontendRoutes': FrontendRoutes, + 'component.developer.plugin.Initializer': Initializer, 'component.developer.plugin.JsonSerializers': JsonSerializers, 'component.developer.plugin.Menus': Menus, 'component.developer.plugin.Messages': Messages, diff --git a/io.sc.platform.developer.frontend/src/i18n/messages.json b/io.sc.platform.developer.frontend/src/i18n/messages.json index 91809e8e..2f33b7d8 100644 --- a/io.sc.platform.developer.frontend/src/i18n/messages.json +++ b/io.sc.platform.developer.frontend/src/i18n/messages.json @@ -11,6 +11,7 @@ "menu.developer.plugin.applicationProperties" : "Application Properties", "menu.developer.plugin.components" : "Auto Scan Components", "menu.developer.plugin.directories" : "Directories", + "menu.developer.plugin.initializer" : "Initializer", "menu.developer.plugin.jsonSerializers" : "Json Serializer", "menu.developer.plugin.messages" : "I18n Messages", "menu.developer.plugin.restartProperties" : "Restart Properties", diff --git a/io.sc.platform.developer.frontend/src/i18n/messages_tw_CN.json b/io.sc.platform.developer.frontend/src/i18n/messages_tw_CN.json index 77c73bf7..0b507937 100644 --- a/io.sc.platform.developer.frontend/src/i18n/messages_tw_CN.json +++ b/io.sc.platform.developer.frontend/src/i18n/messages_tw_CN.json @@ -11,6 +11,7 @@ "menu.developer.plugin.applicationProperties" : "Application Properties", "menu.developer.plugin.components" : "自動掃描組件", "menu.developer.plugin.directories" : "目錄", + "menu.developer.plugin.initializer" : "初始化器", "menu.developer.plugin.jsonSerializers" : "Json 序列化器", "menu.developer.plugin.messages" : "國際化多語言消息", "menu.developer.plugin.restartProperties" : "Restart Properties", diff --git a/io.sc.platform.developer.frontend/src/i18n/messages_zh_CN.json b/io.sc.platform.developer.frontend/src/i18n/messages_zh_CN.json index bcad0b2b..7b46794c 100644 --- a/io.sc.platform.developer.frontend/src/i18n/messages_zh_CN.json +++ b/io.sc.platform.developer.frontend/src/i18n/messages_zh_CN.json @@ -11,6 +11,7 @@ "menu.developer.plugin.applicationProperties" : "Application Properties", "menu.developer.plugin.components" : "自动扫描组件", "menu.developer.plugin.directories" : "目录", + "menu.developer.plugin.initializer" : "初始化器", "menu.developer.plugin.jsonSerializers" : "Json 序列化器", "menu.developer.plugin.messages" : "国际化多语言消息", "menu.developer.plugin.restartProperties" : "Restart Properties", diff --git a/io.sc.platform.developer.frontend/src/menus/menus.json b/io.sc.platform.developer.frontend/src/menus/menus.json index 5bf71b84..a3ea96d6 100644 --- a/io.sc.platform.developer.frontend/src/menus/menus.json +++ b/io.sc.platform.developer.frontend/src/menus/menus.json @@ -31,8 +31,11 @@ {"type":"ROUTE", "order":300, "parentId":"menu.developer.springboot", "id":"menu.developer.springboot.environment", "titleI18nKey":"menu.developer.springboot.environment", "icon":"bi-patch-check", "routeName":"route.developer.springboot.environment"}, /*开发者工具/spring boot 容器/自动配置*/ {"type":"ROUTE", "order":400, "parentId":"menu.developer.springboot", "id":"menu.developer.springboot.autoconfigure", "titleI18nKey":"menu.developer.springboot.autoconfigure", "icon":"bi-recycle", "routeName":"route.developer.springboot.autoconfigure"}, + /*开发者工具/平台插件*/ {"type":"GROUP", "order":400, "parentId":"menu.developer", "id":"menu.developer.plugin", "titleI18nKey":"menu.developer.plugin", "icon":"bi-plug"}, + /*开发者工具/平台插件/初始化器*/ + {"type":"ROUTE", "order":50, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.initializer", "titleI18nKey":"menu.developer.plugin.initializer", "icon":"bi-list-ol", "routeName":"route.developer.plugin.initializer"}, /*开发者工具/平台插件/系统参数*/ {"type":"ROUTE", "order":100, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.parameters", "titleI18nKey":"menu.developer.plugin.parameters", "icon":"bi-list-ol", "routeName":"route.developer.plugin.parameters"}, /*开发者工具/平台插件/菜单*/ @@ -63,6 +66,7 @@ {"type":"ROUTE", "order":1400, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.p6spy", "titleI18nKey":"menu.developer.plugin.p6spy", "icon":"bi-filetype-sql", "routeName":"route.developer.plugin.p6spy"}, /*开发者工具/平台插件/Swagger*/ {"type":"ROUTE", "order":1500, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.swagger", "titleI18nKey":"menu.developer.plugin.swagger", "icon":"bi-filetype-html", "routeName":"route.developer.plugin.swagger"}, + /*开发者工具/前端工具*/ {"type":"GROUP", "order":500, "parentId":"menu.developer", "id":"menu.developer.frontend", "titleI18nKey":"menu.developer.frontend", "icon":"bi-layout-text-window"}, /*开发者工具/前端工具/图标库*/ diff --git a/io.sc.platform.developer.frontend/src/routes/routes.json b/io.sc.platform.developer.frontend/src/routes/routes.json index ca3226bf..301839f3 100644 --- a/io.sc.platform.developer.frontend/src/routes/routes.json +++ b/io.sc.platform.developer.frontend/src/routes/routes.json @@ -149,6 +149,21 @@ ] } }, + { + "name": "route.developer.plugin.initializer", + "path": "developer/plugin/initializer", + "parent": "/", + "priority": 0, + "module": "io.sc.platform.developer.frontend", + "component": "component.developer.plugin.Initializer", + "componentPath": "@/views/plugin/Initializer.vue", + "redirect": null, + "meta": { + "permissions": [ + "/system/developer/plugin/initializer/**/*" + ] + } + }, { "name": "route.developer.plugin.jsonSerializers", "path": "developer/plugin/jsonSerializers", @@ -311,4 +326,4 @@ "meta": { } } -] \ No newline at end of file +] diff --git a/io.sc.platform.developer.frontend/src/views/plugin/Initializer.vue b/io.sc.platform.developer.frontend/src/views/plugin/Initializer.vue new file mode 100644 index 00000000..03946047 --- /dev/null +++ b/io.sc.platform.developer.frontend/src/views/plugin/Initializer.vue @@ -0,0 +1,26 @@ + + diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/controller/InitializerWebController.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/controller/InitializerWebController.java new file mode 100644 index 00000000..dce469f3 --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/controller/InitializerWebController.java @@ -0,0 +1,31 @@ +package io.sc.platform.developer.plugins.controller; + +import io.sc.platform.core.annotation.IgnoreResponseBodyAdvice; +import io.sc.platform.core.initializer.ApplicationInitializer; +import io.sc.platform.core.util.Sorter; +import io.sc.platform.developer.plugins.wrapper.InitializerWrapper; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.ArrayList; +import java.util.List; +import java.util.ServiceLoader; + +@Controller +@RequestMapping("/api/developer/plugins/initializer") +public class InitializerWebController { + + @GetMapping("") + @ResponseBody + public List initializer(){ + List initializers =new ArrayList<>(); + ServiceLoader loader = ServiceLoader.load(ApplicationInitializer.class,Thread.currentThread().getContextClassLoader()); + loader.iterator().forEachRemaining(item -> { + initializers.add(item); + }); + Sorter.sort(initializers); + return InitializerWrapper.from(initializers); + } +} diff --git a/io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/wrapper/InitializerWrapper.java b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/wrapper/InitializerWrapper.java new file mode 100644 index 00000000..f2a4cb8b --- /dev/null +++ b/io.sc.platform.developer/src/main/java/io/sc/platform/developer/plugins/wrapper/InitializerWrapper.java @@ -0,0 +1,67 @@ +package io.sc.platform.developer.plugins.wrapper; + +import io.sc.platform.core.initializer.ApplicationInitializer; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class InitializerWrapper { + private String id; + private String name; + private String description; + private int order; + + public static List from(List initializers){ + if(initializers==null || initializers.isEmpty()){ + return Collections.emptyList(); + } + List wrappers =new ArrayList<>(); + for(ApplicationInitializer initializer : initializers){ + wrappers.add(from(initializer)); + } + return wrappers; + } + + public static InitializerWrapper from(ApplicationInitializer initializer){ + InitializerWrapper wrapper =new InitializerWrapper(); + wrapper.setId(initializer.getId()); + wrapper.setName(initializer.getName()); + wrapper.setDescription(initializer.getDescription()); + wrapper.setOrder(initializer.getOrder()); + return wrapper; + } + + + 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 String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public int getOrder() { + return order; + } + + public void setOrder(int order) { + this.order = order; + } +} diff --git a/io.sc.platform.developer/src/main/resources/META-INF/platform/plugins/components.json b/io.sc.platform.developer/src/main/resources/META-INF/platform/plugins/components.json new file mode 100644 index 00000000..6a9ef356 --- /dev/null +++ b/io.sc.platform.developer/src/main/resources/META-INF/platform/plugins/components.json @@ -0,0 +1,5 @@ +{ + "includes":[ + "io.sc.platform.developer.plugins.controller" + ] +} \ No newline at end of file diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/api/AgentVo.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/api/AgentVo.java new file mode 100644 index 00000000..f3b1dd15 --- /dev/null +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/api/AgentVo.java @@ -0,0 +1,98 @@ +package io.sc.platform.flowable.api; + +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +import java.util.Date; + +public class AgentVo extends CorporationAuditorVo { + private String id; + private String loginName; + private String userName; + private String agentLoginName; + private String agentUserName; + private Date startDate; + private Date endDate; + private String reasons; + private Boolean effective; + private String comments; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLoginName() { + return loginName; + } + + public void setLoginName(String loginName) { + this.loginName = loginName; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getAgentLoginName() { + return agentLoginName; + } + + public void setAgentLoginName(String agentLoginName) { + this.agentLoginName = agentLoginName; + } + + public String getAgentUserName() { + return agentUserName; + } + + public void setAgentUserName(String agentUserName) { + this.agentUserName = agentUserName; + } + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Date getEndDate() { + return endDate; + } + + public void setEndDate(Date endDate) { + this.endDate = endDate; + } + + public String getReasons() { + return reasons; + } + + public void setReasons(String reasons) { + this.reasons = reasons; + } + + public Boolean getEffective() { + return effective; + } + + public void setEffective(Boolean effective) { + this.effective = effective; + } + + public String getComments() { + return comments; + } + + public void setComments(String comments) { + this.comments = comments; + } +} diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/api/ProcessVo.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/api/ProcessVo.java new file mode 100644 index 00000000..2d582f38 --- /dev/null +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/api/ProcessVo.java @@ -0,0 +1,97 @@ +package io.sc.platform.flowable.api; + +import io.sc.platform.flowable.enums.ProcessStatus; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class ProcessVo extends CorporationAuditorVo { + private String id; + private String category; + private String key; + private String name; + private String description; + private String deployedId; + private Integer version; + private String xml; + private ProcessStatus status; + private Boolean canClaimTask; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getDeployedId() { + return deployedId; + } + + public void setDeployedId(String deployedId) { + this.deployedId = deployedId; + } + + public Integer getVersion() { + return version; + } + + public void setVersion(Integer version) { + this.version = version; + } + + public String getXml() { + return xml; + } + + public void setXml(String xml) { + this.xml = xml; + } + + public ProcessStatus getStatus() { + return status; + } + + public void setStatus(ProcessStatus status) { + this.status = status; + } + + public Boolean getCanClaimTask() { + return canClaimTask; + } + + public void setCanClaimTask(Boolean canClaimTask) { + this.canClaimTask = canClaimTask; + } +} diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/AgentWebController.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/AgentWebController.java index c5ab04e8..47a1c6c2 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/AgentWebController.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/AgentWebController.java @@ -1,6 +1,7 @@ package io.sc.platform.flowable.controller; -import io.sc.platform.flowable.jpa.entity.Agent; +import io.sc.platform.flowable.api.AgentVo; +import io.sc.platform.flowable.jpa.entity.AgentEntity; import io.sc.platform.flowable.jpa.repository.AgentRepository; import io.sc.platform.flowable.service.AgentService; import io.sc.platform.mvc.controller.support.RestCrudController; @@ -13,19 +14,19 @@ import java.util.Map; @RestController @RequestMapping("/api/flowable/agent") -public class AgentWebController extends RestCrudController { +public class AgentWebController extends RestCrudController { @GetMapping("getAvailableAgent") public List getAvailableAgent() throws Exception{ return service.listAvailableAgentByUserId(SecurityUtil.getUserId()); } @PostMapping("agree/{id}") - public Agent agree(@PathVariable(name="id")String id){ + public AgentEntity agree(@PathVariable(name="id")String id){ return service.agree(id); } @PostMapping("reject/{id}") - public Agent reject(@PathVariable(name="id")String id,@RequestBody Map data){ + public AgentEntity reject(@PathVariable(name="id")String id, @RequestBody Map data){ String comments =null; if(data!=null) { comments =data.get("comments"); diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/FlowableModelerEditorWebController.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/FlowableModelerEditorWebController.java index 538191c3..228e8a42 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/FlowableModelerEditorWebController.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/FlowableModelerEditorWebController.java @@ -1,12 +1,10 @@ package io.sc.platform.flowable.controller; import java.util.List; -import java.util.Locale; import java.util.Map; import io.sc.platform.core.Environment; import io.sc.platform.core.annotation.IgnoreResponseBodyAdvice; -import io.sc.platform.core.util.LocaleUtil; import io.sc.platform.flowable.service.FlowableModelerService; import io.sc.platform.flowable.support.BpmnModelWrapper; import io.sc.platform.flowable.support.FlowableGroupList; @@ -19,7 +17,6 @@ import io.sc.platform.system.role.service.RoleService; import io.sc.platform.system.user.convertor.UserEntityVoConverter; import io.sc.platform.system.user.jpa.entity.UserEntity; import io.sc.platform.system.user.service.UserService; -import liquibase.pro.packaged.G; import org.apache.commons.io.IOUtils; import org.flowable.bpmn.model.BpmnModel; import org.flowable.editor.language.json.converter.BpmnJsonConverter; @@ -31,14 +28,10 @@ import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; import org.springframework.data.domain.Page; import org.springframework.data.jpa.domain.Specification; -import org.springframework.http.MediaType; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import com.fasterxml.jackson.databind.JsonNode; -import javax.persistence.criteria.Join; - /** * 流程设计器控制器 * @author wangshaoping diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/ProcessEntityWebController.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/ProcessEntityWebController.java index 7f7ad5d1..1ff6e548 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/ProcessEntityWebController.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/ProcessEntityWebController.java @@ -1,5 +1,6 @@ package io.sc.platform.flowable.controller; +import io.sc.platform.flowable.api.ProcessVo; import io.sc.platform.flowable.jpa.entity.ProcessEntity; import io.sc.platform.flowable.jpa.repository.ProcessEntityRepository; import io.sc.platform.flowable.service.ProcessEntityService; @@ -11,7 +12,7 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/flowable/process") -public class ProcessEntityWebController extends RestCrudController { +public class ProcessEntityWebController extends RestCrudController { @PostMapping("deploy/{id}") public void deploy(@PathVariable(name="id") String id) throws Exception{ service.deploy(id); diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/initializer/SampleWorkFlowSystemDictionaryInitializer.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/initializer/SampleWorkFlowSystemDictionaryInitializer.java index 6288a987..24d23061 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/initializer/SampleWorkFlowSystemDictionaryInitializer.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/initializer/SampleWorkFlowSystemDictionaryInitializer.java @@ -14,25 +14,10 @@ public class SampleWorkFlowSystemDictionaryInitializer implements ApplicationIni public void init(ApplicationContext applicationContext) { this.dictionaryService = BeanUtil.getBean(applicationContext,DictionaryService.class); } - - @Override - public String getId() { - return this.getClass().getName(); - } - - @Override - public String getName() { - return "Test BPM System Dictionary Initializer"; - } - - @Override - public String getDescription() { - return "Test BPM System Dictionary Initializer"; - } @Override public int getOrder() { - return 11000; + return 10000; } @Override diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/Agent.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/AgentEntity.java similarity index 82% rename from io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/Agent.java rename to io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/AgentEntity.java index 76df501c..2afb3b49 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/Agent.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/AgentEntity.java @@ -11,8 +11,10 @@ import javax.persistence.Id; import javax.persistence.Table; import javax.validation.constraints.Size; +import io.sc.platform.flowable.api.AgentVo; import io.sc.platform.orm.converter.NumericBooleanConverter; import io.sc.platform.orm.entity.AuditorEntity; +import io.sc.platform.orm.entity.CorporationAuditorEntity; import org.hibernate.annotations.GenericGenerator; /** @@ -20,7 +22,7 @@ import org.hibernate.annotations.GenericGenerator; */ @Entity @Table(name="SYS_AGENT") -public class Agent extends AuditorEntity implements Serializable{ +public class AgentEntity extends CorporationAuditorEntity { private static final long serialVersionUID = 2228732422179849265L; //主键 @@ -74,6 +76,22 @@ public class Agent extends AuditorEntity implements Serializable{ @Size(max=1024) private String comments; + @Override + public AgentVo toVo() { + AgentVo vo =new AgentVo(); + CorporationAuditorEntity.toVo(vo,this); + vo.setId(this.getId()); + vo.setLoginName(this.getLoginName()); + vo.setUserName(this.getUserName()); + vo.setAgentLoginName(this.getAgentLoginName()); + vo.setAgentUserName(this.getAgentUserName()); + vo.setStartDate(this.getStartDate()); + vo.setEndDate(this.getEndDate()); + vo.setReasons(this.getReasons()); + vo.setEffective(this.getEffective()); + return vo; + } + public String getId() { return id; } diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/ProcessEntity.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/ProcessEntity.java index 626b81aa..c4e7e21b 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/ProcessEntity.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/entity/ProcessEntity.java @@ -12,9 +12,11 @@ import javax.persistence.Id; import javax.persistence.Table; import javax.validation.constraints.Size; +import io.sc.platform.flowable.api.ProcessVo; import io.sc.platform.flowable.enums.ProcessStatus; import io.sc.platform.orm.converter.NumericBooleanConverter; import io.sc.platform.orm.entity.AuditorEntity; +import io.sc.platform.orm.entity.CorporationAuditorEntity; import org.hibernate.annotations.GenericGenerator; /** @@ -22,7 +24,7 @@ import org.hibernate.annotations.GenericGenerator; */ @Entity @Table(name="SYS_PROCESS") -public class ProcessEntity extends AuditorEntity implements Serializable{ +public class ProcessEntity extends CorporationAuditorEntity { private static final long serialVersionUID = 2056614495312244260L; //主键 @@ -75,7 +77,14 @@ public class ProcessEntity extends AuditorEntity implements Serializable{ @Column(name="CAN_CLAIM_TASK_") @Convert(converter= NumericBooleanConverter.class) private Boolean canClaimTask; - + + @Override + public ProcessVo toVo() { + ProcessVo vo =new ProcessVo(); + CorporationAuditorEntity.toVo(vo,this); + return vo; + } + public String getId() { return id; } diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/repository/AgentRepository.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/repository/AgentRepository.java index 86403167..b833f2b3 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/repository/AgentRepository.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/jpa/repository/AgentRepository.java @@ -1,11 +1,11 @@ package io.sc.platform.flowable.jpa.repository; -import io.sc.platform.flowable.jpa.entity.Agent; +import io.sc.platform.flowable.jpa.entity.AgentEntity; import io.sc.platform.orm.repository.DaoRepository; import java.util.List; -public interface AgentRepository extends DaoRepository { - public List findByLoginNameAndEffective(String loginName,Boolean effective); +public interface AgentRepository extends DaoRepository { + public List findByLoginNameAndEffective(String loginName, Boolean effective); } diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/AgentService.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/AgentService.java index 0b9bf8bb..31fed4e1 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/AgentService.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/AgentService.java @@ -1,19 +1,19 @@ package io.sc.platform.flowable.service; -import io.sc.platform.flowable.jpa.entity.Agent; +import io.sc.platform.flowable.jpa.entity.AgentEntity; import io.sc.platform.flowable.jpa.repository.AgentRepository; import io.sc.platform.orm.service.DaoService; import io.sc.platform.system.api.user.UserVo; import java.util.List; -public interface AgentService extends DaoService { +public interface AgentService extends DaoService { /** * 获取代理人列表 * @param userId 用户ID * @return 该用户的代理人 */ - public List getAgents(String userId); + public List getAgents(String userId); /** * 获取可用的代理人列表 @@ -27,7 +27,7 @@ public interface AgentService extends DaoService * @param agentId 代理人记录主键 * @return 更新后的代理人对象 */ - public Agent agree(String agentId); + public AgentEntity agree(String agentId); /** * 拒绝成为对方的代理人 @@ -35,5 +35,5 @@ public interface AgentService extends DaoService * @param comments 拒绝说明 * @return 更新后的代理人对象 */ - public Agent reject(String agentId,String comments); + public AgentEntity reject(String agentId, String comments); } diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/AgentServiceImpl.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/AgentServiceImpl.java index d2e8b421..631e98bd 100644 --- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/AgentServiceImpl.java +++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/AgentServiceImpl.java @@ -4,11 +4,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import io.sc.platform.flowable.jpa.entity.Agent; +import io.sc.platform.flowable.jpa.entity.AgentEntity; import io.sc.platform.flowable.jpa.repository.AgentRepository; import io.sc.platform.flowable.service.AgentService; import io.sc.platform.orm.service.impl.DaoServiceImpl; -import io.sc.platform.system.api.role.RoleVo; import io.sc.platform.system.api.user.UserVo; import io.sc.platform.system.role.jpa.entity.RoleEntity; import io.sc.platform.system.role.service.RoleService; @@ -22,12 +21,12 @@ import org.springframework.stereotype.Service; import javax.persistence.criteria.Join; @Service -public class AgentServiceImpl extends DaoServiceImpl implements AgentService { +public class AgentServiceImpl extends DaoServiceImpl implements AgentService { @Autowired private UserService userService; @Autowired private RoleService roleService; @Override - public List getAgents(String loginName) { + public List getAgents(String loginName) { return repository.findByLoginNameAndEffective(loginName,true); } @@ -59,8 +58,8 @@ public class AgentServiceImpl extends DaoServiceImpl agents =agentService.getAgents(loginName); + private AgentEntity getAgent(String loginName){ + List agents =agentService.getAgents(loginName); if(agents!=null && agents.size()>0){ - for(Agent agent : agents){ + for(AgentEntity agent : agents){ Date startDate =agent.getStartDate(); Date endDate =agent.getEndDate(); Date now =new Date(); diff --git a/io.sc.platform.flowable/src/main/resources/META-INF/platform/plugins/messages.json b/io.sc.platform.flowable/src/main/resources/META-INF/platform/plugins/messages.json index e3f9ca5a..e9806ee8 100644 --- a/io.sc.platform.flowable/src/main/resources/META-INF/platform/plugins/messages.json +++ b/io.sc.platform.flowable/src/main/resources/META-INF/platform/plugins/messages.json @@ -1,5 +1,6 @@ { "includes":[ + "io/sc/platform/flowable/i18n/initializer", "io/sc/platform/flowable/i18n/enums" ] } \ No newline at end of file diff --git a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/i18n/initializer.properties b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/i18n/initializer.properties new file mode 100644 index 00000000..f9d1f1c2 --- /dev/null +++ b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/i18n/initializer.properties @@ -0,0 +1,2 @@ +io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.name=Sample Process Dictionary Initializer +io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.description=initialize sample process dictionary if not exists \ No newline at end of file diff --git a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/i18n/initializer_tw_CN.properties b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/i18n/initializer_tw_CN.properties new file mode 100644 index 00000000..48133447 --- /dev/null +++ b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/i18n/initializer_tw_CN.properties @@ -0,0 +1,2 @@ +io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.name=\u793A\u4F8B\u6D41\u7A0B\u6578\u64DA\u5B57\u5178\u59CB\u5316\u5668 +io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.description=\u7576\u7CFB\u7D71\u7F3A\u5931\u793A\u4F8B\u6D41\u7A0B\u6578\u64DA\u5B57\u5178\u6642, \u81EA\u52D5\u5275\u5EFA\u9ED8\u8A8D\u793A\u4F8B\u6D41\u7A0B\u6578\u64DA\u5B57\u5178 diff --git a/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/i18n/initializer_zh_CN.properties b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/i18n/initializer_zh_CN.properties new file mode 100644 index 00000000..29dd555e --- /dev/null +++ b/io.sc.platform.flowable/src/main/resources/io/sc/platform/flowable/i18n/initializer_zh_CN.properties @@ -0,0 +1,2 @@ +io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.name=\u793A\u4F8B\u6D41\u7A0B\u6570\u636E\u5B57\u5178\u521D\u59CB\u5316\u5668 +io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.description=\u5F53\u7CFB\u7EDF\u7F3A\u5931\u793A\u4F8B\u6D41\u7A0B\u6570\u636E\u5B57\u5178\u65F6, \u81EA\u52A8\u521B\u5EFA\u9ED8\u8BA4\u793A\u4F8B\u6D41\u7A0B\u6570\u636E\u5B57\u5178 \ No newline at end of file diff --git a/io.sc.platform.flowable/src/main/resources/liquibase/PF_1.0.0_20221228__Process Manager Database Schema DDL.xml b/io.sc.platform.flowable/src/main/resources/liquibase/PF_1.0.0_20221228__Process Manager Database Schema DDL.xml index caaac906..4cf2daad 100644 --- a/io.sc.platform.flowable/src/main/resources/liquibase/PF_1.0.0_20221228__Process Manager Database Schema DDL.xml +++ b/io.sc.platform.flowable/src/main/resources/liquibase/PF_1.0.0_20221228__Process Manager Database Schema DDL.xml @@ -10,59 +10,67 @@ http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd " > - - - - - - - - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + + + + + + + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io.sc.platform.gradle/templates/pgp/app/build-common.gradle b/io.sc.platform.gradle/templates/pgp/app/build-common.gradle index b1acd61d..f6cfe3d5 100644 --- a/io.sc.platform.gradle/templates/pgp/app/build-common.gradle +++ b/io.sc.platform.gradle/templates/pgp/app/build-common.gradle @@ -6,7 +6,7 @@ * 2. gradle bootwar -Dtarget=undertow # undertow, target=undertow * 3. gradle bootwar -Dtarget=jetty # jetty, target=jetty */ -def target =System.getProperty("target") ?: "tomcat"; +def target =System.getProperty("target") ?: "undertow"; System.setProperty('target',target); // 根据 targetRuntime 变量的值执行实际的 build.gradle diff --git a/io.sc.platform.gradle/templates/pgp/app/build.gradle b/io.sc.platform.gradle/templates/pgp/app/build.gradle index 37ffb5bb..cd2ddcf8 100644 --- a/io.sc.platform.gradle/templates/pgp/app/build.gradle +++ b/io.sc.platform.gradle/templates/pgp/app/build.gradle @@ -13,6 +13,7 @@ dependencies { implementation ( project(":io.sc.platform.app"), project(":io.sc.platform.developer"), + //project(":io.sc.platform.job.manager"), ) } diff --git a/io.sc.platform.gradle/templates/pgp/app/src/main/java/app/platform/Application.java.txt b/io.sc.platform.gradle/templates/pgp/app/src/main/java/app/platform/Application.java.txt index 83728c3f..de40ec3f 100644 --- a/io.sc.platform.gradle/templates/pgp/app/src/main/java/app/platform/Application.java.txt +++ b/io.sc.platform.gradle/templates/pgp/app/src/main/java/app/platform/Application.java.txt @@ -6,11 +6,12 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.WebApplicationInitializer; +import java.sql.Types; + /** * 应用程序入口 */ @SpringBootApplication(proxyBeanMethods = false) -@MapperScan("com.xxl.job.admin.dao") public class Application extends PlatformSpringBootServletInitializer implements WebApplicationInitializer { public static void main(String[] args) throws Exception { ApplicationLauncher.run(Application.class,args); diff --git a/io.sc.platform.gradle/templates/pgp/app/src/main/resources/public/configure.js b/io.sc.platform.gradle/templates/pgp/app/src/main/resources/public/configure.js index b4485e6f..9bc75ad4 100644 --- a/io.sc.platform.gradle/templates/pgp/app/src/main/resources/public/configure.js +++ b/io.sc.platform.gradle/templates/pgp/app/src/main/resources/public/configure.js @@ -1,7 +1,11 @@ -window.APP = {}; // 在浏览器 window 对象中新建名为 APP 的变量, 用于存放应用对象的容器 -window.APP.configure ={ // 全局配置存储容器 - webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', // 应用上下文路径 +// 在浏览器 window 对象中新建名为 APP 的容器变量, 用于存放平台的全局变量 +window.APP = {}; +// 全局配置 +window.APP.configure ={ + // 应用上下文路径 + webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', + // 默认后端 API 请求的服务地址前缀 apiContextPaths: { - DEFAULT: '[(@{/})]'.startsWith('[') ? 'http://localhost:8080/' : '[(@{/})]', // 后端 API 请求的服务地址前缀 + DEFAULT: '[(@{/})]'.startsWith('[') ? 'http://localhost:8080/' : '[(@{/})]' } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/io.sc.platform.gradle/templates/pgp/setup/build.gradle.txt b/io.sc.platform.gradle/templates/pgp/setup/build.gradle.txt index 04bd9898..655059bd 100644 --- a/io.sc.platform.gradle/templates/pgp/setup/build.gradle.txt +++ b/io.sc.platform.gradle/templates/pgp/setup/build.gradle.txt @@ -371,6 +371,8 @@ subprojects { * pnpm sync *----------------------------------------------------------------*/ task frontendNpmSync(type:Exec){ + commandLine 'cd', '.' + /* if(isFrontendProject(file('.')) && !project.name.contains("io.sc.platform.security.frontend")){ workingDir '.' if(org.gradle.internal.os.OperatingSystem.current().isWindows()){ @@ -384,7 +386,7 @@ subprojects { }else{ commandLine 'cd', '.' } - } + }*/ } tasks.frontendNpmSync.doFirst { if(isFrontendProject(file('.'))) { diff --git a/io.sc.platform.gradle/templates/pgp/setup/gradle.properties b/io.sc.platform.gradle/templates/pgp/setup/gradle.properties index f0eb91cf..7a5cf595 100644 --- a/io.sc.platform.gradle/templates/pgp/setup/gradle.properties +++ b/io.sc.platform.gradle/templates/pgp/setup/gradle.properties @@ -36,9 +36,9 @@ application_version=1.0.0 # platform ########################################################### platform_group=io.sc -platform_version=8.1.13 +platform_version=8.1.19 platform_plugin_version=8.1.13 -platform_core_frontend_version=8.1.42 +platform_core_frontend_version=8.1.45 ########################################################### # dependencies version diff --git a/io.sc.platform.installer/src/main/resources/templates/io/sc/platform/installer/installer.html b/io.sc.platform.installer/src/main/resources/templates/io/sc/platform/installer/installer.html index f12e0c60..d5fdffa6 100644 --- a/io.sc.platform.installer/src/main/resources/templates/io/sc/platform/installer/installer.html +++ b/io.sc.platform.installer/src/main/resources/templates/io/sc/platform/installer/installer.html @@ -115,7 +115,7 @@ diff --git a/io.sc.platform.job.core/src/main/java/io/sc/platform/job/core/enums/ExecutorAddressType.java b/io.sc.platform.job.core/src/main/java/io/sc/platform/job/core/enums/ExecutorAddressType.java new file mode 100644 index 00000000..8ab498d1 --- /dev/null +++ b/io.sc.platform.job.core/src/main/java/io/sc/platform/job/core/enums/ExecutorAddressType.java @@ -0,0 +1,6 @@ +package io.sc.platform.job.core.enums; + +public enum ExecutorAddressType { + AUTO, // 自动注册 + MANUAL; // 手工录入 +} diff --git a/io.sc.platform.job.manager/build.gradle b/io.sc.platform.job.manager/build.gradle new file mode 100644 index 00000000..3c60acba --- /dev/null +++ b/io.sc.platform.job.manager/build.gradle @@ -0,0 +1,6 @@ +dependencies { + api( + project(":io.sc.platform.job.core"), + project(":io.sc.platform.mvc"), + ) +} diff --git a/io.sc.platform.job.manager/src/main/java/io/sc/platform/job/manager/jpa/entity/JobGroupEntity.java b/io.sc.platform.job.manager/src/main/java/io/sc/platform/job/manager/jpa/entity/JobGroupEntity.java new file mode 100644 index 00000000..40e010c9 --- /dev/null +++ b/io.sc.platform.job.manager/src/main/java/io/sc/platform/job/manager/jpa/entity/JobGroupEntity.java @@ -0,0 +1,88 @@ +package io.sc.platform.job.manager.jpa.entity; + +import io.sc.platform.job.core.enums.ExecutorAddressType; +import io.sc.platform.orm.converter.SetStringConverter; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.Set; + +public class JobGroupEntity { + //主键 + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_", length=36) + @Size(max=36) + private String id; + + @Column(name="APP_NAME", length=255) + @Size(min=1,max=255) + private String appName; + + @Column(name="TITLE", length=255) + @Size(min=1,max=255) + private String title; + + @Column(name="ADDRESS_TYPE") + @Enumerated(EnumType.STRING) + private ExecutorAddressType addressType; + + @Column(name="ADDRESS_LIST") + @Convert(converter = SetStringConverter.class) + private Set addresses; + + @Column(name="UPDATE_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date updateTime; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public ExecutorAddressType getAddressType() { + return addressType; + } + + public void setAddressType(ExecutorAddressType addressType) { + this.addressType = addressType; + } + + public Set getAddresses() { + return addresses; + } + + public void setAddresses(Set addresses) { + this.addresses = addresses; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/io.sc.platform.job.manager/src/main/java/io/sc/platform/job/manager/jpa/repository/JobGroupRepository.java b/io.sc.platform.job.manager/src/main/java/io/sc/platform/job/manager/jpa/repository/JobGroupRepository.java new file mode 100644 index 00000000..a90ceb6a --- /dev/null +++ b/io.sc.platform.job.manager/src/main/java/io/sc/platform/job/manager/jpa/repository/JobGroupRepository.java @@ -0,0 +1,12 @@ +package io.sc.platform.job.manager.jpa.repository; + +import io.sc.platform.job.core.enums.ExecutorAddressType; +import io.sc.platform.job.manager.jpa.entity.JobGroupEntity; +import io.sc.platform.orm.repository.DaoRepository; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +public interface JobGroupRepository extends DaoRepository { + public List findByAddressType(@Param("addressType") ExecutorAddressType addressType); +} diff --git a/io.sc.platform.job.manager/src/main/resources/META-INF/platform/plugins/liquibase.json b/io.sc.platform.job.manager/src/main/resources/META-INF/platform/plugins/liquibase.json new file mode 100644 index 00000000..ce81774f --- /dev/null +++ b/io.sc.platform.job.manager/src/main/resources/META-INF/platform/plugins/liquibase.json @@ -0,0 +1,10 @@ +[ + { + "category" : "install", + "order" : 1000, + "description":"XXL JOB 相关表", + "locations":[ + "liquibase/PF_8.0.0_20220606__Job_DDL.xml" + ] + } +] \ No newline at end of file diff --git a/io.sc.platform.job.manager/src/main/resources/liquibase/PF_8.0.0_20220606__Job_DDL.xml b/io.sc.platform.job.manager/src/main/resources/liquibase/PF_8.0.0_20220606__Job_DDL.xml new file mode 100644 index 00000000..11e6924f --- /dev/null +++ b/io.sc.platform.job.manager/src/main/resources/liquibase/PF_8.0.0_20220606__Job_DDL.xml @@ -0,0 +1,233 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io.sc.platform.lcdp.frontend/.npmrc b/io.sc.platform.lcdp.frontend/.npmrc index 06969b7b..c1c0b295 100644 --- a/io.sc.platform.lcdp.frontend/.npmrc +++ b/io.sc.platform.lcdp.frontend/.npmrc @@ -8,4 +8,4 @@ email= # 登录 npm 仓库的用户认证信息, 在 npm publish 时使用, publish 的 npm registry 在 package.json 文件中 publishConfig 部分配置 # _authToken 可通过以下命令获取 # curl -X PUT -H "Content-Type:application/json" -d '{"_id":"org.couchdb.user:admin","name":"admin","password":"admin"}' http://nexus.sc.io:8000/repository/npm-releases/-/user/org.couchdb.user:admin -//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.25afcf59-9193-3068-bcfa-faf76ceadb13 \ No newline at end of file +//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.193db44c-7ca5-3cb6-a990-d24b93fb0d10 \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/package.json b/io.sc.platform.lcdp.frontend/package.json index 74202ed0..ce492570 100644 --- a/io.sc.platform.lcdp.frontend/package.json +++ b/io.sc.platform.lcdp.frontend/package.json @@ -1,102 +1,104 @@ { - "name": "io.sc.platform.lcdp.frontend", - "version": "8.1.13", - "description": "", - "private": false, - "keywords": [], - "author": "", - "license": "ISC", - "scripts": { - "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml", - "dev": "nodemon", - "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", - "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", - "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", - "sync": "platform sync" - }, - "engines": { - "node": ">=18", - "pnpm": ">=7" - }, - "publishConfig": { - "registry": "http://nexus.sc.io:8000/repository/npm-releases/", - "access": "public" - }, - "devDependencies": { - "@babel/core": "7.23.2", - "@babel/preset-env": "7.23.2", - "@babel/preset-typescript": "7.23.2", - "@babel/plugin-transform-class-properties": "7.22.5", - "@babel/plugin-transform-object-rest-spread": "7.22.15", - "@quasar/app-webpack": "3.11.2", - "@quasar/cli": "2.3.0", - "@types/mockjs": "1.0.9", - "@types/node": "20.8.9", - "@typescript-eslint/eslint-plugin": "6.9.0", - "@typescript-eslint/parser": "6.9.0", - "@vue/compiler-sfc": "3.3.7", - "@webpack-cli/serve": "2.0.5", - "autoprefixer": "10.4.16", - "babel-loader": "9.1.3", - "clean-webpack-plugin": "4.0.0", - "copy-webpack-plugin": "11.0.0", - "cross-env": "7.0.3", - "css-loader": "6.8.1", - "eslint": "8.52.0", - "eslint-config-prettier": "9.0.0", - "eslint-plugin-prettier": "5.0.1", - "eslint-plugin-vue": "9.18.0", - "eslint-webpack-plugin": "4.0.1", - "html-webpack-plugin": "5.5.3", - "json5": "2.2.3", - "mini-css-extract-plugin": "2.7.6", - "nodemon": "3.0.1", - "postcss": "8.4.31", - "postcss-import": "15.1.0", - "postcss-loader": "7.3.3", - "postcss-preset-env": "9.2.0", - "prettier": "3.0.3", - "sass": "1.69.5", - "sass-loader": "13.3.2", - "typescript": "5.2.2", - "vue-loader": "17.3.0", - "webpack": "5.89.0", - "webpack-bundle-analyzer": "4.9.1", - "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.1", - "webpack-merge": "5.10.0" - }, - "dependencies": { - "@codemirror/autocomplete": "6.11.1", - "@codemirror/commands": "6.3.2", - "@codemirror/lang-html": "6.4.7", - "@codemirror/lang-java": "6.0.1", - "@codemirror/lang-javascript": "6.2.1", - "@codemirror/lang-json": "6.0.1", - "@codemirror/lang-sql": "6.5.4", - "@codemirror/lang-xml": "6.0.2", - "@codemirror/language": "6.9.3", - "@codemirror/search": "6.5.5", - "@codemirror/state": "6.3.3", - "@codemirror/view": "6.22.1", - "@quasar/extras": "1.16.7", - "@vueuse/core": "10.3.0", - "axios": "1.5.1", - "codemirror": "6.0.1", - "dayjs": "1.11.10", - "echarts": "5.4.1", - "exceljs": "4.3.0", - "file-saver": "2.0.5", - "luckyexcel": "1.0.1", - "mockjs": "1.1.0", - "pinia": "2.1.7", - "platform-core": "8.1.42", - "quasar": "2.13.0", - "tailwindcss": "3.3.5", - "vue": "3.3.7", - "vue-dompurify-html": "4.1.4", - "vue-i18n": "9.6.0", - "vue-router": "4.2.5", - "vue-codemirror6": "1.1.31" - } + "name": "io.sc.platform.lcdp.frontend", + "version": "8.1.19", + "description": "", + "private": false, + "keywords": [ + + ], + "author": "", + "license": "ISC", + "scripts": { + "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml", + "dev": "nodemon", + "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", + "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", + "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", + "sync": "platform sync" + }, + "engines": { + "node": ">=18", + "pnpm": ">=7" + }, + "publishConfig": { + "registry": "http://nexus.sc.io:8000/repository/npm-releases/", + "access": "public" + }, + "devDependencies": { + "@babel/core": "7.23.2", + "@babel/preset-env": "7.23.2", + "@babel/preset-typescript": "7.23.2", + "@babel/plugin-transform-class-properties": "7.22.5", + "@babel/plugin-transform-object-rest-spread": "7.22.15", + "@quasar/app-webpack": "3.11.2", + "@quasar/cli": "2.3.0", + "@types/mockjs": "1.0.9", + "@types/node": "20.8.9", + "@typescript-eslint/eslint-plugin": "6.9.0", + "@typescript-eslint/parser": "6.9.0", + "@vue/compiler-sfc": "3.3.7", + "@webpack-cli/serve": "2.0.5", + "autoprefixer": "10.4.16", + "babel-loader": "9.1.3", + "clean-webpack-plugin": "4.0.0", + "copy-webpack-plugin": "11.0.0", + "cross-env": "7.0.3", + "css-loader": "6.8.1", + "eslint": "8.52.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-prettier": "5.0.1", + "eslint-plugin-vue": "9.18.0", + "eslint-webpack-plugin": "4.0.1", + "html-webpack-plugin": "5.5.3", + "json5": "2.2.3", + "mini-css-extract-plugin": "2.7.6", + "nodemon": "3.0.1", + "postcss": "8.4.31", + "postcss-import": "15.1.0", + "postcss-loader": "7.3.3", + "postcss-preset-env": "9.2.0", + "prettier": "3.0.3", + "sass": "1.69.5", + "sass-loader": "13.3.2", + "typescript": "5.2.2", + "vue-loader": "17.3.0", + "webpack": "5.89.0", + "webpack-bundle-analyzer": "4.9.1", + "webpack-cli": "5.1.4", + "webpack-dev-server": "4.15.1", + "webpack-merge": "5.10.0" + }, + "dependencies": { + "@codemirror/autocomplete": "6.11.1", + "@codemirror/commands": "6.3.2", + "@codemirror/lang-html": "6.4.7", + "@codemirror/lang-java": "6.0.1", + "@codemirror/lang-javascript": "6.2.1", + "@codemirror/lang-json": "6.0.1", + "@codemirror/lang-sql": "6.5.4", + "@codemirror/lang-xml": "6.0.2", + "@codemirror/language": "6.9.3", + "@codemirror/search": "6.5.5", + "@codemirror/state": "6.3.3", + "@codemirror/view": "6.22.1", + "@quasar/extras": "1.16.7", + "@vueuse/core": "10.3.0", + "axios": "1.5.1", + "codemirror": "6.0.1", + "dayjs": "1.11.10", + "echarts": "5.4.1", + "exceljs": "4.3.0", + "file-saver": "2.0.5", + "luckyexcel": "1.0.1", + "mockjs": "1.1.0", + "pinia": "2.1.7", + "platform-core": "8.1.45", + "quasar": "2.13.0", + "tailwindcss": "3.3.5", + "vue": "3.3.7", + "vue-dompurify-html": "4.1.4", + "vue-i18n": "9.6.0", + "vue-router": "4.2.5", + "vue-codemirror6": "1.1.31" + } } \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/webpack.config.common.cjs b/io.sc.platform.lcdp.frontend/webpack.config.common.cjs index 25aee0c0..ad3bd5fd 100644 --- a/io.sc.platform.lcdp.frontend/webpack.config.common.cjs +++ b/io.sc.platform.lcdp.frontend/webpack.config.common.cjs @@ -133,6 +133,15 @@ module.exports = { ] }), + new CopyWebpackPlugin({ + patterns: [ + { + from: `public/${projectName}`, + toType: 'dir', + } + ] + }), + // vue loader 插件 new VueLoaderPlugin(), diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Configure.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Configure.java index b5fee3ed..bfa563ff 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Configure.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Configure.java @@ -1,6 +1,8 @@ package io.sc.platform.lcdp.configure.api; -public class Configure { +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class Configure extends CorporationAuditorVo { private Setting setting =new Setting(); private Theme theme =new Theme(); diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/ConfigureVo.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/ConfigureVo.java new file mode 100644 index 00000000..f0624cf9 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/ConfigureVo.java @@ -0,0 +1,51 @@ +package io.sc.platform.lcdp.configure.api; + +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class ConfigureVo extends CorporationAuditorVo { + private String id; + private String name; + private Boolean active; + private Setting setting; + private Theme theme; + + 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 Boolean getActive() { + return active; + } + + public void setActive(Boolean active) { + this.active = active; + } + + public Setting getSetting() { + return setting; + } + + public void setSetting(Setting setting) { + this.setting = setting; + } + + public Theme getTheme() { + return theme; + } + + public void setTheme(Theme theme) { + this.theme = theme; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/controller/ConfigureController.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/controller/ConfigureController.java index 6a76403d..7c158939 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/controller/ConfigureController.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/controller/ConfigureController.java @@ -1,6 +1,7 @@ package io.sc.platform.lcdp.configure.controller; import io.sc.platform.lcdp.configure.api.Configure; +import io.sc.platform.lcdp.configure.api.ConfigureVo; import io.sc.platform.lcdp.configure.jpa.entity.ConfigureEntity; import io.sc.platform.lcdp.configure.jpa.repository.ConfigureRepository; import io.sc.platform.lcdp.configure.service.ConfigureService; @@ -9,7 +10,7 @@ import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/lcdp/configure") -public class ConfigureController extends RestCrudController { +public class ConfigureController extends RestCrudController { @GetMapping("getActiveConfigure") public Configure getActiveConfigure(){ return service.getActiveConfigure(); diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/controller/ConfigureJsController.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/controller/ConfigureJsController.java index 9c5dfb64..723fac1c 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/controller/ConfigureJsController.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/controller/ConfigureJsController.java @@ -10,7 +10,6 @@ public class ConfigureJsController { @RequestMapping("/configure.js") public String configureJs(){ - System.out.println(">>>>>"); return "configure.js"; } } diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/initializer/ConfigureInitializer.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/initializer/ConfigureInitializer.java index d1faade5..a88b68b9 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/initializer/ConfigureInitializer.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/initializer/ConfigureInitializer.java @@ -12,6 +12,11 @@ public class ConfigureInitializer implements ApplicationInitializer { private Boolean isInitialized =null; private ConfigureService configureService; + @Override + public int getOrder() { + return 2000; + } + @Override public void init(ApplicationContext applicationContext) { this.configureService =applicationContext.getBean(ConfigureService.class); @@ -37,6 +42,7 @@ public class ConfigureInitializer implements ApplicationInitializer { entity.setActive(true); entity.setSetting(new Setting()); entity.setTheme(new Theme()); + entity.setCorporationCode("_PRIMARY_"); configureService.getRepository().save(entity); } } diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/jpa/entity/ConfigureEntity.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/jpa/entity/ConfigureEntity.java index 8af01a16..7bd87f71 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/jpa/entity/ConfigureEntity.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/jpa/entity/ConfigureEntity.java @@ -1,5 +1,7 @@ package io.sc.platform.lcdp.configure.jpa.entity; +import io.sc.platform.lcdp.configure.api.Configure; +import io.sc.platform.lcdp.configure.api.ConfigureVo; import io.sc.platform.lcdp.configure.api.Setting; import io.sc.platform.lcdp.configure.api.Theme; import io.sc.platform.lcdp.configure.jpa.converter.SettingStringConverter; @@ -16,7 +18,7 @@ import javax.validation.constraints.Size; */ @Entity @Table(name="LCDP_CONFIGURE") -public class ConfigureEntity extends CorporationAuditorEntity { +public class ConfigureEntity extends CorporationAuditorEntity { //主键 @Id @GeneratedValue(generator = "system-uuid") @@ -48,6 +50,19 @@ public class ConfigureEntity extends CorporationAuditorEntity { this.id =id; } + + @Override + public ConfigureVo toVo() { + ConfigureVo vo =new ConfigureVo(); + CorporationAuditorEntity.toVo(vo,this); + vo.setId(this.getId()); + vo.setName(this.getName()); + vo.setActive(this.getActive()); + vo.setSetting(this.getSetting()); + vo.setTheme(this.getTheme()); + return vo; + } + /** * 获取ID * @return ID diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/service/impl/ConfigureServiceImpl.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/service/impl/ConfigureServiceImpl.java index 313c07fa..fcec8461 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/service/impl/ConfigureServiceImpl.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/service/impl/ConfigureServiceImpl.java @@ -26,7 +26,12 @@ public class ConfigureServiceImpl extends DaoServiceImpl - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/io.sc.platform.mvc.frontend/.npmrc b/io.sc.platform.mvc.frontend/.npmrc index 06969b7b..c1c0b295 100644 --- a/io.sc.platform.mvc.frontend/.npmrc +++ b/io.sc.platform.mvc.frontend/.npmrc @@ -8,4 +8,4 @@ email= # 登录 npm 仓库的用户认证信息, 在 npm publish 时使用, publish 的 npm registry 在 package.json 文件中 publishConfig 部分配置 # _authToken 可通过以下命令获取 # curl -X PUT -H "Content-Type:application/json" -d '{"_id":"org.couchdb.user:admin","name":"admin","password":"admin"}' http://nexus.sc.io:8000/repository/npm-releases/-/user/org.couchdb.user:admin -//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.25afcf59-9193-3068-bcfa-faf76ceadb13 \ No newline at end of file +//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.193db44c-7ca5-3cb6-a990-d24b93fb0d10 \ No newline at end of file diff --git a/io.sc.platform.mvc.frontend/package.json b/io.sc.platform.mvc.frontend/package.json index c42184ab..90ca8a96 100644 --- a/io.sc.platform.mvc.frontend/package.json +++ b/io.sc.platform.mvc.frontend/package.json @@ -1,102 +1,104 @@ { - "name": "io.sc.platform.mvc.frontend", - "version": "8.1.13", - "description": "", - "private": false, - "keywords": [], - "author": "", - "license": "ISC", - "scripts": { - "dev": "nodemon", - "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", - "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", - "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", - "sync": "platform sync", - "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml" - }, - "engines": { - "node": ">=18", - "pnpm": ">=7" - }, - "publishConfig": { - "registry": "http://nexus.sc.io:8000/repository/npm-releases/", - "access": "public" - }, - "devDependencies": { - "@babel/core": "7.23.2", - "@babel/preset-env": "7.23.2", - "@babel/preset-typescript": "7.23.2", - "@babel/plugin-transform-class-properties": "7.22.5", - "@babel/plugin-transform-object-rest-spread": "7.22.15", - "@quasar/app-webpack": "3.11.2", - "@quasar/cli": "2.3.0", - "@types/mockjs": "1.0.9", - "@types/node": "20.8.9", - "@typescript-eslint/eslint-plugin": "6.9.0", - "@typescript-eslint/parser": "6.9.0", - "@vue/compiler-sfc": "3.3.7", - "@webpack-cli/serve": "2.0.5", - "autoprefixer": "10.4.16", - "babel-loader": "9.1.3", - "clean-webpack-plugin": "4.0.0", - "copy-webpack-plugin": "11.0.0", - "cross-env": "7.0.3", - "css-loader": "6.8.1", - "eslint": "8.52.0", - "eslint-config-prettier": "9.0.0", - "eslint-plugin-prettier": "5.0.1", - "eslint-plugin-vue": "9.18.0", - "eslint-webpack-plugin": "4.0.1", - "html-webpack-plugin": "5.5.3", - "json5": "2.2.3", - "mini-css-extract-plugin": "2.7.6", - "nodemon": "3.0.1", - "postcss": "8.4.31", - "postcss-import": "15.1.0", - "postcss-loader": "7.3.3", - "postcss-preset-env": "9.2.0", - "prettier": "3.0.3", - "sass": "1.69.5", - "sass-loader": "13.3.2", - "typescript": "5.2.2", - "vue-loader": "17.3.0", - "webpack": "5.89.0", - "webpack-bundle-analyzer": "4.9.1", - "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.1", - "webpack-merge": "5.10.0" - }, - "dependencies": { - "@quasar/extras": "1.16.7", - "@vueuse/core": "10.3.0", - "axios": "1.5.1", - "dayjs": "1.11.10", - "echarts": "5.4.1", - "exceljs": "4.3.0", - "file-saver": "2.0.5", - "luckyexcel": "1.0.1", - "mockjs": "1.1.0", - "pinia": "2.1.7", - "platform-core": "8.1.42", - "quasar": "2.13.0", - "tailwindcss": "3.3.5", - "vue": "3.3.7", - "vue-dompurify-html": "4.1.4", - "vue-i18n": "9.6.0", - "vue-router": "4.2.5", - "@codemirror/autocomplete": "6.11.1", - "@codemirror/commands": "6.3.2", - "@codemirror/lang-html": "6.4.7", - "@codemirror/lang-java": "6.0.1", - "@codemirror/lang-javascript": "6.2.1", - "@codemirror/lang-json": "6.0.1", - "@codemirror/lang-sql": "6.5.4", - "@codemirror/lang-xml": "6.0.2", - "@codemirror/language": "6.9.3", - "@codemirror/search": "6.5.5", - "@codemirror/state": "6.3.3", - "@codemirror/view": "6.22.1", - "codemirror": "6.0.1", - "vue-codemirror6": "1.1.31" - } + "name": "io.sc.platform.mvc.frontend", + "version": "8.1.19", + "description": "", + "private": false, + "keywords": [ + + ], + "author": "", + "license": "ISC", + "scripts": { + "dev": "nodemon", + "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", + "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", + "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", + "sync": "platform sync", + "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml" + }, + "engines": { + "node": ">=18", + "pnpm": ">=7" + }, + "publishConfig": { + "registry": "http://nexus.sc.io:8000/repository/npm-releases/", + "access": "public" + }, + "devDependencies": { + "@babel/core": "7.23.2", + "@babel/preset-env": "7.23.2", + "@babel/preset-typescript": "7.23.2", + "@babel/plugin-transform-class-properties": "7.22.5", + "@babel/plugin-transform-object-rest-spread": "7.22.15", + "@quasar/app-webpack": "3.11.2", + "@quasar/cli": "2.3.0", + "@types/mockjs": "1.0.9", + "@types/node": "20.8.9", + "@typescript-eslint/eslint-plugin": "6.9.0", + "@typescript-eslint/parser": "6.9.0", + "@vue/compiler-sfc": "3.3.7", + "@webpack-cli/serve": "2.0.5", + "autoprefixer": "10.4.16", + "babel-loader": "9.1.3", + "clean-webpack-plugin": "4.0.0", + "copy-webpack-plugin": "11.0.0", + "cross-env": "7.0.3", + "css-loader": "6.8.1", + "eslint": "8.52.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-prettier": "5.0.1", + "eslint-plugin-vue": "9.18.0", + "eslint-webpack-plugin": "4.0.1", + "html-webpack-plugin": "5.5.3", + "json5": "2.2.3", + "mini-css-extract-plugin": "2.7.6", + "nodemon": "3.0.1", + "postcss": "8.4.31", + "postcss-import": "15.1.0", + "postcss-loader": "7.3.3", + "postcss-preset-env": "9.2.0", + "prettier": "3.0.3", + "sass": "1.69.5", + "sass-loader": "13.3.2", + "typescript": "5.2.2", + "vue-loader": "17.3.0", + "webpack": "5.89.0", + "webpack-bundle-analyzer": "4.9.1", + "webpack-cli": "5.1.4", + "webpack-dev-server": "4.15.1", + "webpack-merge": "5.10.0" + }, + "dependencies": { + "@quasar/extras": "1.16.7", + "@vueuse/core": "10.3.0", + "axios": "1.5.1", + "dayjs": "1.11.10", + "echarts": "5.4.1", + "exceljs": "4.3.0", + "file-saver": "2.0.5", + "luckyexcel": "1.0.1", + "mockjs": "1.1.0", + "pinia": "2.1.7", + "platform-core": "8.1.45", + "quasar": "2.13.0", + "tailwindcss": "3.3.5", + "vue": "3.3.7", + "vue-dompurify-html": "4.1.4", + "vue-i18n": "9.6.0", + "vue-router": "4.2.5", + "@codemirror/autocomplete": "6.11.1", + "@codemirror/commands": "6.3.2", + "@codemirror/lang-html": "6.4.7", + "@codemirror/lang-java": "6.0.1", + "@codemirror/lang-javascript": "6.2.1", + "@codemirror/lang-json": "6.0.1", + "@codemirror/lang-sql": "6.5.4", + "@codemirror/lang-xml": "6.0.2", + "@codemirror/language": "6.9.3", + "@codemirror/search": "6.5.5", + "@codemirror/state": "6.3.3", + "@codemirror/view": "6.22.1", + "codemirror": "6.0.1", + "vue-codemirror6": "1.1.31" + } } \ No newline at end of file diff --git a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/autoconfigure/support/AuditLogAspectorBean.java b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/autoconfigure/support/AuditLogAspectorBean.java index 9436ed8e..98284861 100644 --- a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/autoconfigure/support/AuditLogAspectorBean.java +++ b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/autoconfigure/support/AuditLogAspectorBean.java @@ -6,6 +6,7 @@ import io.sc.platform.core.audit.AuditLogStatus; import io.sc.platform.core.response.ValidationError; import io.sc.platform.core.service.AuditLogPersistenter; import io.sc.platform.core.service.AuditLogPersistenterManager; +import io.sc.platform.core.util.IpUtil; import io.sc.platform.orm.entity.AuditorEntity; import io.sc.platform.orm.service.support.QueryParameter; import org.apache.commons.lang3.exception.ExceptionUtils; @@ -50,19 +51,19 @@ public class AuditLogAspectorBean { @Around("auditLogPointCut()") public Object around(ProceedingJoinPoint joinPoint) throws Throwable{ + //获取审计日志持久化器 AuditLogPersistenter auditLogPersister = manager.getAuditLogPersister(); if(auditLogPersister!=null) { - AuditLog entity =buildAuditLogEntity(joinPoint,null); + // 构建审计日志对象 + AuditLog entity =buildAuditLog(joinPoint,null); entity.setStartDate(new Date()); - long beginTime = System.currentTimeMillis(); Object result = joinPoint.proceed(); long executeTime = System.currentTimeMillis() - beginTime; - + // 设置执行时间 entity.setExecuteTime(executeTime); - + // 持久化审计日志对象 auditLogPersister.log(entity); - return result; }else { return joinPoint.proceed(); @@ -73,13 +74,13 @@ public class AuditLogAspectorBean { public void exception(JoinPoint joinPoint,Throwable e) throws Throwable{ AuditLogPersistenter auditLogPersister = manager.getAuditLogPersister(); if(auditLogPersister!=null) { - AuditLog entity =buildAuditLogEntity(joinPoint,e); + AuditLog entity =buildAuditLog(joinPoint,e); entity.setStartDate(new Date()); auditLogPersister.log(entity); } } - private AuditLog buildAuditLogEntity(JoinPoint joinPoint,Throwable e) throws Exception{ + private AuditLog buildAuditLog(JoinPoint joinPoint,Throwable e) throws Exception{ //类名和方法名 String className = joinPoint.getTarget().getClass().getName(); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); @@ -94,45 +95,45 @@ public class AuditLogAspectorBean { BindingResult bindingResult =getBindingResult(args); //构建审计日志实体类 - AuditLog entity =new AuditLog(); - entity.setClassName(className); - entity.setMethodName(methodName); - entity.setHttpMethod(httpServletRequest.getMethod()); - entity.setStatus(AuditLogStatus.SUCCESS.getValue()); + AuditLog auditLog =new AuditLog(); + + auditLog.setClassName(className); + auditLog.setMethodName(methodName); + auditLog.setHttpMethod(httpServletRequest.getMethod()); + auditLog.setStatus(AuditLogStatus.SUCCESS.getValue()); //如果参数验证未通过 List validateErrors =validationError(bindingResult); if(validateErrors!=null && !validateErrors.isEmpty()) { - entity.setStatus(AuditLogStatus.FAILED.getValue()); + auditLog.setStatus(AuditLogStatus.FAILED.getValue()); } if(httpServletRequest!=null) { - entity.setUrl(httpServletRequest.getRequestURL().toString()); - //entity.setLoginName(httpServletRequest.getRemoteUser()); - //entity.setLoginName(SecurityUtil.getLoginName()); - //entity.setIp(IpUtil.getRemoteAddressFullStringWithIpTypeHeader(httpServletRequest)); + auditLog.setUrl(httpServletRequest.getRequestURL().toString()); + auditLog.setLoginName(httpServletRequest.getRemoteUser()); + auditLog.setIp(IpUtil.getRemoteAddress(httpServletRequest)); //审计日志注解 - io.sc.platform.core.annotation.AuditLog auditLog = method.getAnnotation(io.sc.platform.core.annotation.AuditLog.class); - String key =auditLog.value(); + io.sc.platform.core.annotation.AuditLog annotation = method.getAnnotation(io.sc.platform.core.annotation.AuditLog.class); + String key =annotation.value(); String action =messageSource.getMessage(key, null, key, httpServletRequest.getLocale()); - entity.setAction(action); + auditLog.setAction(action); } if(auditorEntity!=null) { - entity.setOldValue(objectMapper.writeValueAsString(auditorEntity)); + auditLog.setOldValue(objectMapper.writeValueAsString(auditorEntity.desensitize())); } if(queryParameter!=null) { - entity.setNewValue(objectMapper.writeValueAsString(queryParameter)); + auditLog.setNewValue(objectMapper.writeValueAsString(queryParameter)); } if(e!=null) { - entity.setStatus(AuditLogStatus.FAILED.getValue()); - entity.setException(e.getClass().getName()); - entity.setExceptionMessage(e.getMessage()); - entity.setExceptionStackTrace(ExceptionUtils.getStackTrace(e)); + auditLog.setStatus(AuditLogStatus.FAILED.getValue()); + auditLog.setException(e.getClass().getName()); + auditLog.setExceptionMessage(e.getMessage()); + auditLog.setExceptionStackTrace(ExceptionUtils.getStackTrace(e)); } - return entity; + return auditLog; } private HttpServletRequest getHttpServletRequest(Object[] args) { 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 6c53619f..65b036b6 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 @@ -4,11 +4,15 @@ import io.sc.platform.core.annotation.AuditLog; import io.sc.platform.core.audit.AuditLogAction; import io.sc.platform.core.response.ValidateException; import io.sc.platform.core.response.ValidationError; +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.QueryParameter; +import io.sc.platform.orm.service.support.QueryResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.*; @@ -20,9 +24,122 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -public abstract class RestCrudController,S extends DaoService> { +public abstract class RestCrudController, ID extends Serializable, R extends DaoRepository, S extends DaoService> { @Autowired protected S service; + @AuditLog(AuditLogAction.ADD) + @PostMapping("") + @ResponseBody + public V _add(HttpServletRequest request,HttpServletResponse response,@RequestBody @Valid E entity,BindingResult bindingResult) throws Exception{ + ValidateException result =validationError(bindingResult); + if(result!=null){ + throw result; + } + return add(request,response,entity); + } + + protected V add(HttpServletRequest request,HttpServletResponse response,@RequestBody @Valid E entity) throws Exception{ + E addedEntity =service.add(entity); + if(addedEntity instanceof BaseEntity){ + return ((BaseEntity)addedEntity).toVo(); + } + return null; + } + + @AuditLog(AuditLogAction.REMOVE) + @DeleteMapping("{id}") + @ResponseBody + public ID _remove(HttpServletRequest request,HttpServletResponse response,@PathVariable(name="id")ID id) throws Exception{ + return remove(request,response,id); + } + + protected ID remove(HttpServletRequest request,HttpServletResponse response,@PathVariable(name="id")ID id) throws Exception{ + return service.remove(id); + } + + @AuditLog(AuditLogAction.UPDATE) + @PutMapping("{id}") + @ResponseBody + public V _update(HttpServletRequest request,HttpServletResponse response,@PathVariable(name="id")ID id,@RequestBody @Valid E entity,BindingResult bindingResult) throws Exception{ + ValidateException result =validationError(bindingResult); + if(result!=null){ + throw result; + } + return update(request,response,id,entity); + } + + protected V update(HttpServletRequest request,HttpServletResponse response,@PathVariable(name="id")ID id,@RequestBody @Valid E entity) throws Exception{ + E updatedEntity =service.update(id,entity); + if(updatedEntity instanceof BaseEntity){ + return ((BaseEntity)updatedEntity).toVo(); + } + return null; + } + + @AuditLog(AuditLogAction.FIND_ONE) + @GetMapping("{id}") + @ResponseBody + public V _findById(HttpServletRequest request,HttpServletResponse response,@PathVariable(name="id")ID id) throws Exception{ + return findById(request,response,id); + } + + protected V findById(HttpServletRequest request,HttpServletResponse response,@PathVariable(name="id")ID id) throws Exception{ + E foundEntity =service.findById(id); + if(foundEntity instanceof BaseEntity){ + return ((BaseEntity)foundEntity).toVo(); + } + return null; + } + + @AuditLog(AuditLogAction.QUERY) + @GetMapping("") + @ResponseBody + public Page _query(HttpServletRequest request,HttpServletResponse response,QueryParameter queryParameter) throws Exception{ + return query(request,response,queryParameter); + } + + protected Page query(HttpServletRequest request,HttpServletResponse response,QueryParameter queryParameter) throws Exception{ + Page page =service.query(queryParameter); + if(page==null){ + return QueryResult.emptyPage(); + } + List entities =page.getContent(); + List vos =new ArrayList<>(entities.size()); + for(E entity : entities){ + if(entity instanceof BaseEntity){ + vos.add(((BaseEntity)entity).toVo()); + } + } + return new PageImpl<>(vos,page.getPageable(),page.getTotalElements()); + } + + private ValidateException validationError(BindingResult bindingResult) { + if(bindingResult==null || !bindingResult.hasErrors()){ + return null; + } + + List errors =bindingResult.getFieldErrors(); + if(errors==null || errors.size()==0){ + return null; + } + + List errorList =new ArrayList(); + for(FieldError error : errors){ + errorList.add(new ValidationError(getFieldName(error.getField()),error.getDefaultMessage())); + } + return new ValidateException(errorList); + } + + private String getFieldName(String field){ + int index =field.lastIndexOf("."); + if(index>-1){ + return field.substring(index+1); + }else{ + return field; + } + } + + /* @AuditLog(AuditLogAction.ADD) @PostMapping("") @ResponseBody @@ -37,6 +154,7 @@ public abstract class RestCrudController { + public V toVo(E entity); + public E fromVo(V vo); + + /** + * 脱敏实体对象 + * @param entity 实体对象 + * @return Vo对象 + */ + public default V desensitize(E entity){ + return toVo(entity); + } + public default void detach(DaoRepository repository, E entity){ if(entity!=null) { repository.getEntityManager().detach(entity); } } + public default void detach(DaoRepository repository, List entities){ if(entities!=null && !entities.isEmpty()) { for(E entity : entities) { @@ -25,8 +38,6 @@ public interface EntityVoConverter { } } - public V toVo(E entity); - public E fromVo(V vo); public default List toVo(List entities){ if(entities==null || entities.isEmpty()){ return Collections.emptyList(); diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/converter/EncoderStringConverter.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/converter/EncoderStringConverter.java new file mode 100644 index 00000000..19915a5b --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/converter/EncoderStringConverter.java @@ -0,0 +1,17 @@ +package io.sc.platform.orm.converter; + +import io.sc.platform.core.util.StringEncryptorUtil; + +import javax.persistence.AttributeConverter; + +public class EncoderStringConverter implements AttributeConverter { + @Override + public String convertToDatabaseColumn(String attribute) { + return StringEncryptorUtil.encrypt(attribute); + } + + @Override + public String convertToEntityAttribute(String dbData) { + return StringEncryptorUtil.decrypt(dbData); + } +} diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/AuditorEntity.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/AuditorEntity.java index b5ac2115..87fd96f4 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/AuditorEntity.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/AuditorEntity.java @@ -1,7 +1,12 @@ package io.sc.platform.orm.entity; +import antlr.Version; import com.fasterxml.jackson.annotation.JsonProperty; import io.sc.platform.orm.api.enums.DataComeFrom; +import io.sc.platform.orm.api.vo.AuditorVo; +import io.sc.platform.orm.api.vo.BaseVo; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; +import io.sc.platform.orm.api.vo.VersionVo; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedBy; @@ -17,7 +22,7 @@ import java.util.Date; */ @EntityListeners(AuditingEntityListener.class) @MappedSuperclass -public abstract class AuditorEntity extends BaseEntity { +public abstract class AuditorEntity extends VersionEntity { // 数据来源 @Column(name="DATA_COME_FROM_",length=10) @Enumerated(EnumType.STRING) @@ -50,6 +55,17 @@ public abstract class AuditorEntity extends BaseEntity { @JsonProperty(index = 1005) protected Date lastModifyDate; + public static void toVo(AuditorVo vo, AuditorEntity entity){ + if(vo!=null && entity!=null) { + VersionEntity.toVo(vo,entity); + vo.setDataComeFrom(entity.getDataComeFrom()); + vo.setCreator(entity.getCreator()); + vo.setCreateDate(entity.getCreateDate()); + vo.setLastModifier(entity.getLastModifier()); + vo.setLastModifyDate(entity.getLastModifyDate()); + } + } + /** * 获取数据来源 * @return 数据来源 diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/BaseEntity.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/BaseEntity.java index 05584cf7..066b9118 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/BaseEntity.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/BaseEntity.java @@ -1,7 +1,20 @@ package io.sc.platform.orm.entity; +import io.sc.platform.orm.api.vo.BaseVo; + import java.io.Serializable; -public abstract class BaseEntity implements Serializable { +/** + * 基本实体抽象类 + */ +public abstract class BaseEntity implements Serializable { + public abstract V toVo(); + + public V desensitize(){ + return toVo(); + } + + public static void toVo(BaseVo vo,BaseEntity entity){ + } } diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/CorporationAuditorEntity.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/CorporationAuditorEntity.java index 322daf0a..f14b5743 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/CorporationAuditorEntity.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/CorporationAuditorEntity.java @@ -1,5 +1,9 @@ package io.sc.platform.orm.entity; +import io.sc.platform.orm.api.vo.AuditorVo; +import io.sc.platform.orm.api.vo.BaseVo; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + import javax.persistence.Column; import javax.persistence.MappedSuperclass; @@ -7,10 +11,17 @@ import javax.persistence.MappedSuperclass; * 多法人审计实体类 */ @MappedSuperclass -public abstract class CorporationAuditorEntity extends AuditorEntity{ +public abstract class CorporationAuditorEntity extends AuditorEntity{ //法人代码 - @Column(name="CORP_CODE_") - protected String corporationCode; + @Column(name="CORP_CODE_",length=36) + protected String corporationCode ="_PRIMARY_"; + + public static void toVo(CorporationAuditorVo vo, CorporationAuditorEntity entity){ + if(vo!=null && entity!=null) { + AuditorEntity.toVo(vo,entity); + vo.setCorporationCode(entity.getCorporationCode()); + } + } /** * 获取法人代码 diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/EntityVoConverter.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/EntityVoConverter.java new file mode 100644 index 00000000..5d5a89cd --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/EntityVoConverter.java @@ -0,0 +1,13 @@ +package io.sc.platform.orm.entity; + +public class EntityVoConverter implements io.sc.platform.orm.EntityVoConverter { + @Override + public Object toVo(Object entity) { + return null; + } + + @Override + public Object fromVo(Object vo) { + return null; + } +} diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/VersionEntity.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/VersionEntity.java new file mode 100644 index 00000000..b8f3fa91 --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/entity/VersionEntity.java @@ -0,0 +1,34 @@ +package io.sc.platform.orm.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import io.sc.platform.orm.api.vo.AuditorVo; +import io.sc.platform.orm.api.vo.BaseVo; +import io.sc.platform.orm.api.vo.VersionVo; + +import javax.persistence.Column; +import javax.persistence.Version; + +/** + * 版本化实体类,可实现乐观锁 + */ +public abstract class VersionEntity extends BaseEntity{ + @Version + @Column(name="JPA_VERSION_") + protected int jpaVersion; + + public static void toVo(VersionVo vo,VersionEntity entity){ + if(vo!=null && entity!=null) { + BaseEntity.toVo(vo,entity); + vo.setJpaVersion(entity.getJpaVersion()); + } + } + + public int getJpaVersion() { + return jpaVersion; + } + + public void setJpaVersion(int jpaVersion) { + this.jpaVersion = jpaVersion; + } +} diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryResult.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryResult.java index af5f77c4..faa34eb9 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryResult.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryResult.java @@ -2,7 +2,6 @@ package io.sc.platform.orm.service.support; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; import java.util.Collections; import java.util.List; @@ -10,6 +9,13 @@ import java.util.List; public class QueryResult { private QueryResult(){} + public static List emptyList(){ + return Collections.emptyList(); + } + public static Page emptyPage(){ + return new PageImpl(Collections.emptyList()); + } + public static Page page(List list){ if(list!=null && !list.isEmpty()) { return new PageImpl(list); @@ -17,12 +23,4 @@ public class QueryResult { return new PageImpl(Collections.emptyList()); } } - - public static Page emptyPage(){ - return new PageImpl(Collections.emptyList()); - } - - public static List emptyList(){ - return Collections.emptyList(); - } } diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/util/EntityVoConvertor.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/util/EntityVoConvertor.java new file mode 100644 index 00000000..14139f26 --- /dev/null +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/util/EntityVoConvertor.java @@ -0,0 +1,54 @@ +package io.sc.platform.orm.util; + +import io.sc.platform.orm.api.vo.BaseVo; +import io.sc.platform.orm.entity.BaseEntity; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * 实体和值对象转换器 + */ +public class EntityVoConvertor { + /** + * 将实体分页对象转换成值分页对象 + * @param page 实体分页对象 + * @return 值分页对象 + * @param 实体类型 + * @param 值类型 + */ + public static Page toVo(Page page){ + if(page!=null && !page.getContent().isEmpty()) { + List entities =page.getContent(); + List list =new ArrayList<>(entities.size()); + for(E entity : entities){ + list.add((V)entity.toVo()); + } + return new PageImpl(list); + }else{ + return new PageImpl(Collections.emptyList()); + } + } + + /** + * 将实体列表转换成值列表 + * @param entities 实体列表 + * @return 值列表 + * @param 实体类型 + * @param 值类型 + */ + public static List toVo(List entities){ + if(entities!=null && !entities.isEmpty()) { + List list =new ArrayList<>(entities.size()); + for(E entity : entities){ + list.add((V)entity.toVo()); + } + return list; + }else{ + return Collections.emptyList(); + } + } +} diff --git a/io.sc.platform.security.frontend/package.json b/io.sc.platform.security.frontend/package.json index 65a62444..f47fa4d8 100644 --- a/io.sc.platform.security.frontend/package.json +++ b/io.sc.platform.security.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.platform.security.frontend", - "version": "8.1.13", + "version": "8.1.19", "description": "", "private": false, "keywords": [ @@ -79,7 +79,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.42", + "platform-core": "8.1.45", "quasar": "2.13.0", "tailwindcss": "3.3.5", "vue": "3.3.7", diff --git a/io.sc.platform.security/src/main/java/io/sc/platform/security/initializer/CorporationInitializer.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/initializer/CorporationInitializer.java index e10c3c6b..940987e5 100644 --- a/io.sc.platform.security/src/main/java/io/sc/platform/security/initializer/CorporationInitializer.java +++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/initializer/CorporationInitializer.java @@ -10,26 +10,14 @@ import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; +import java.util.Date; +import java.util.UUID; + public class CorporationInitializer implements ApplicationInitializer { private static final Logger log =LoggerFactory.getLogger(CorporationInitializer.class); private Boolean isInitialized =null; private JdbcTemplate jdbcTemplate; - - @Override - public String getId() { - return this.getClass().getName(); - } - - @Override - public String getName() { - return "Corporation Initializer"; - } - - @Override - public String getDescription() { - return "Initialize root Corporation"; - } @Override public int getOrder() { @@ -46,7 +34,7 @@ public class CorporationInitializer implements ApplicationInitializer { if(isInitialized!=null) { return isInitialized; } - + try { Corporation corporation =findRootCorporation(); if(corporation==null) { @@ -62,27 +50,75 @@ public class CorporationInitializer implements ApplicationInitializer { @Override public void execute() throws ApplicationInitializerExecuteException { - Corporation corporation =findRootCorporation(); - if(corporation==null) { - insertRootCorporation(); - } - } - - private Corporation findRootCorporation(){ - return jdbcTemplate.query("select * from SYS_CORPORATION where CODE_='_ROOT_'", Corporation.getResultSetExtractor()); - } - - private void insertRootCorporation(){ + String[] childNames =new String[]{ + "上海崇明沪农商村镇银行", + "北京房山沪农商村镇银行", + "深圳光明沪农商村镇银行", + "济南槐荫沪农商村镇银行", + "济南长清沪农商村镇银行", + "聊城沪农商村镇银行", + "茌平沪农商村镇银行", + "阳谷沪农商村镇银行", + "临清沪农商村镇银行", + "泰安沪农商村镇银行", + "宁阳沪农商村镇银行", + "东平沪农商村镇银行", + "日照沪农商村镇银行", + "长沙星沙沪农商村镇银行", + "宁乡沪农商村镇银行", + "醴陵沪农商村镇银行", + "双峰沪农商村镇银行", + "涟源沪农商村镇银行", + "衡阳县沪农商村镇银行", + "桂阳沪农商村镇银行", + "永兴沪农商村镇银行", + "澧县沪农商村镇银行", + "临澧沪农商村镇银行", + "石门沪农商村镇银行", + "慈利沪农商村镇银行", + "昆明官渡沪农商村镇银行", + "嵩明沪农商村镇银行", + "蒙自沪农商村镇银行", + "弥勒沪农商村镇银行", + "开远沪农商村镇银行", + "个旧沪农商村镇银行", + "保山隆阳沪农商村镇银行", + "瑞丽沪农商村镇银行", + "建水沪农商村镇银行", + "临沧临翔沪农商村镇银行", + }; SqlBuilder.getInsertIntoSqlBuilder() - .table("SYS_CORPORATION") - .field("CODE_","_ROOT_") - .field("NAME_","_ROOT_") - .field("DESCRIPTION_","根法人") + .table("SYS_CORPORATION") + .field("ID_","_PRIMARY_") + .field("CODE_","_PRIMARY_") + .field("NAME_","沪衣商村镇银行") + .field("DESCRIPTION_","") .field("ENABLE_",1) + .field("PARENT_ID_",null) .field("CREATOR_","platform") .field("CREATE_DATE_", DateUtil.sqlDate()) .field("LAST_MODIFIER_","platform") .field("LAST_MODIFYDATE_",DateUtil.sqlDate()) - .insert(jdbcTemplate); + .insert(jdbcTemplate); + + for(int i=0;i userExtractor =User.getResultSetExtractor(); private static final String userUpdateRole ="update SYS_USER set DEFAULT_ROLE_ID_=? where ID_=?"; private static final String userUpdateOrg ="update SYS_USER set DEFAULT_ORG_ID_=? where ID_=?"; diff --git a/io.sc.platform.security/src/main/resources/META-INF/platform/plugins/messages.json b/io.sc.platform.security/src/main/resources/META-INF/platform/plugins/messages.json index c3847cc3..17838456 100644 --- a/io.sc.platform.security/src/main/resources/META-INF/platform/plugins/messages.json +++ b/io.sc.platform.security/src/main/resources/META-INF/platform/plugins/messages.json @@ -1,5 +1,6 @@ { "includes":[ + "io/sc/platform/security/i18n/initializer", "io/sc/platform/security/i18n/messages" ] } \ No newline at end of file diff --git a/io.sc.platform.security/src/main/resources/META-INF/platform/plugins/parameters.json b/io.sc.platform.security/src/main/resources/META-INF/platform/plugins/parameters.json new file mode 100644 index 00000000..cc7391a7 --- /dev/null +++ b/io.sc.platform.security/src/main/resources/META-INF/platform/plugins/parameters.json @@ -0,0 +1,12 @@ +[ + /*系统*/ + {"id":"parameter.system","order":0}, + /*系统/前端登录表单密码加密*/ + { + "id" : "parameter.login.encodePassword", + "parentId" : "parameter.system", + "code" : "parameter.login.encodePassword", + "defaultValue" : true, + "order" : 200 + } +] \ No newline at end of file diff --git a/io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/initializer.properties b/io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/initializer.properties new file mode 100644 index 00000000..fd7ea736 --- /dev/null +++ b/io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/initializer.properties @@ -0,0 +1,5 @@ +io.sc.platform.security.initializer.CorporationInitializer.name=Corporation Initializer +io.sc.platform.security.initializer.CorporationInitializer .description=initialize corporation if not exists + +io.sc.platform.security.initializer.RoleAndUserInitializer.name=Admin Role and User Initializer +io.sc.platform.security.initializer.RoleAndUserInitializer.description=initialize Admin Role and User if not exists \ No newline at end of file diff --git a/io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/initializer_tw_CN.properties b/io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/initializer_tw_CN.properties new file mode 100644 index 00000000..227ce8d7 --- /dev/null +++ b/io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/initializer_tw_CN.properties @@ -0,0 +1,5 @@ +io.sc.platform.security.initializer.CorporationInitializer.name=\u6CD5\u4EBA\u521D\u59CB\u5316\u5668 +io.sc.platform.security.initializer.CorporationInitializer.description=\u7576\u7CFB\u7D71\u7F3A\u5931\u6CD5\u4EBA\u6642, \u81EA\u52D5\u5275\u5EFA\u9ED8\u8A8D\u6CD5\u4EBA + +io.sc.platform.security.initializer.RoleAndUserInitializer.name=\u7BA1\u7406\u54E1\u7528\u6236\u548C\u89D2\u8272\u521D\u59CB\u5316\u5668 +io.sc.platform.security.initializer.RoleAndUserInitializer.description=\u7576\u7CFB\u7D71\u7F3A\u5931\u7BA1\u7406\u54E1\u7528\u6236\u548C\u89D2\u8272\u6642, \u81EA\u52D5\u5275\u5EFA\u9ED8\u8A8D\u7BA1\u7406\u54E1\u7528\u6236\u548C\u89D2\u8272 \ No newline at end of file diff --git a/io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/initializer_zh_CN.properties b/io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/initializer_zh_CN.properties new file mode 100644 index 00000000..85442f11 --- /dev/null +++ b/io.sc.platform.security/src/main/resources/io/sc/platform/security/i18n/initializer_zh_CN.properties @@ -0,0 +1,5 @@ +io.sc.platform.security.initializer.CorporationInitializer.name=\u6CD5\u4EBA\u521D\u59CB\u5316\u5668 +io.sc.platform.security.initializer.CorporationInitializer.description=\u5F53\u7CFB\u7EDF\u7F3A\u5931\u6CD5\u4EBA\u65F6, \u81EA\u52A8\u521B\u5EFA\u9ED8\u8BA4\u6CD5\u4EBA + +io.sc.platform.security.initializer.RoleAndUserInitializer.name=\u7BA1\u7406\u5458\u7528\u6237\u548C\u89D2\u8272\u521D\u59CB\u5316\u5668 +io.sc.platform.security.initializer.RoleAndUserInitializer.description=\u5F53\u7CFB\u7EDF\u7F3A\u5931\u7BA1\u7406\u5458\u7528\u6237\u548C\u89D2\u8272\u65F6, \u81EA\u52A8\u521B\u5EFA\u9ED8\u8BA4\u7BA1\u7406\u5458\u7528\u6237\u548C\u89D2\u8272 \ No newline at end of file diff --git a/io.sc.platform.security/src/main/resources/liquibase/PF_11.0.0_20220606__Security_DDL.xml b/io.sc.platform.security/src/main/resources/liquibase/PF_11.0.0_20220606__Security_DDL.xml index c4f5895b..0483db0d 100644 --- a/io.sc.platform.security/src/main/resources/liquibase/PF_11.0.0_20220606__Security_DDL.xml +++ b/io.sc.platform.security/src/main/resources/liquibase/PF_11.0.0_20220606__Security_DDL.xml @@ -13,80 +13,111 @@ - + - - - - - - - - - + + + + + + + + + + + + + + + + + + + referencedColumnNames="ID_" onDelete="CASCADE"/> - + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -96,28 +127,32 @@ - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -127,27 +162,35 @@ - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -165,9 +208,12 @@ - - + + + + + @@ -193,9 +239,11 @@ - - + + + + diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/announcement/AnnouncementVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/announcement/AnnouncementVo.java index 7006e5a0..68bf36e8 100644 --- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/announcement/AnnouncementVo.java +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/announcement/AnnouncementVo.java @@ -2,18 +2,9 @@ package io.sc.platform.system.api.announcement; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.sc.platform.orm.api.vo.AuditorVo; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; - -@JsonPropertyOrder({ - "id", - "title", - "content", - "creator", - "createDate", - "lastModifier", - "lastModifyDate" -}) -public class AnnouncementVo extends AuditorVo { +public class AnnouncementVo extends CorporationAuditorVo { private String id; private String title; private String content; diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/auditlog/AuditLogVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/auditlog/AuditLogVo.java new file mode 100644 index 00000000..38bf6a20 --- /dev/null +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/auditlog/AuditLogVo.java @@ -0,0 +1,153 @@ +package io.sc.platform.system.api.auditlog; + +import io.sc.platform.orm.api.vo.BaseVo; + +import java.util.Date; + +public class AuditLogVo extends BaseVo { + private String id; //ID + private String className; //AuditLog 注解所在类的名称 + private String methodName; //AuditLog 注解所在方法的名称 + private String httpMethod; //AuditLog 注解所在方法的 http method + private String action; //AuditLog 注解中指定的操作 + private String status; //请求方法的执行状态 + private Date startDate; //方法开始执行时间 + private Long executeTime; //方法执行的时间(单位:毫秒) + private String url; //请求的 URL + private String ip; //调用者 IP 地址 + private String loginName; //调用者登录用户名 + private String oldValue; //调用者请求的数据原始值(json字符串) + private String newValue; //调用者请求的数据新值(json字符串) + + private String exception; //方法执行抛出的违例类名称 + private String exceptionMessage;//方法执行抛出的违例消息 + private String exceptionStackTrace;//方法执行抛出的违例栈 + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + public String getMethodName() { + return methodName; + } + + public void setMethodName(String methodName) { + this.methodName = methodName; + } + + public String getHttpMethod() { + return httpMethod; + } + + public void setHttpMethod(String httpMethod) { + this.httpMethod = httpMethod; + } + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Long getExecuteTime() { + return executeTime; + } + + public void setExecuteTime(Long executeTime) { + this.executeTime = executeTime; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public String getLoginName() { + return loginName; + } + + public void setLoginName(String loginName) { + this.loginName = loginName; + } + + public String getOldValue() { + return oldValue; + } + + public void setOldValue(String oldValue) { + this.oldValue = oldValue; + } + + public String getNewValue() { + return newValue; + } + + public void setNewValue(String newValue) { + this.newValue = newValue; + } + + 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.api/src/main/java/io/sc/platform/system/api/corporation/CorporationVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/corporation/CorporationVo.java index 43257661..7df1b5ce 100644 --- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/corporation/CorporationVo.java +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/corporation/CorporationVo.java @@ -3,26 +3,21 @@ package io.sc.platform.system.api.corporation; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.sc.platform.orm.api.vo.AuditorVo; - -@JsonPropertyOrder({ - "code", - "name", - "description", - "enable", - "parentCode", - "dataComeFrom", - "creator", - "createDate", - "lastModifier", - "lastModifyDate" -}) public class CorporationVo extends AuditorVo { + private String id; private String code; private String name; private String description; - private Boolean enable =Boolean.TRUE; + private Boolean enable; + private String parent; + + public String getId() { + return id; + } - private String parentCode; + public void setId(String id) { + this.id = id; + } /** * 获取代码 @@ -88,19 +83,11 @@ public class CorporationVo extends AuditorVo { this.enable = enable; } - /** - * 获取父代码 - * @return 父代码 - */ - public String getParentCode() { - return parentCode; + public String getParent() { + return parent; } - /** - * 设置父代码 - * @param parentCode 父代码 - */ - public void setParentCode(String parentCode) { - this.parentCode = parentCode; + public void setParent(String parent) { + this.parent = parent; } } diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/ds/DsVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/ds/DsVo.java index 95ce7af3..6a5a533a 100644 --- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/ds/DsVo.java +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/ds/DsVo.java @@ -1,8 +1,9 @@ package io.sc.platform.system.api.ds; import io.sc.platform.orm.api.vo.AuditorVo; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; -public class DsVo extends AuditorVo { +public class DsVo extends CorporationAuditorVo { private String id; private String name; private String type; diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/ds/JdbcDsVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/ds/JdbcDsVo.java index 5881cc68..ae2e3ddb 100644 --- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/ds/JdbcDsVo.java +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/ds/JdbcDsVo.java @@ -1,11 +1,14 @@ package io.sc.platform.system.api.ds; +import java.util.Map; + public class JdbcDsVo extends DsVo { private String databaseType; private String jdbcDriver; private String jdbcUrl; private String username; private String password; + private Map properties; public String getDatabaseType() { return databaseType; @@ -46,4 +49,12 @@ public class JdbcDsVo extends DsVo { public void setPassword(String password) { this.password = password; } + + public Map getProperties() { + return properties; + } + + public void setProperties(Map properties) { + this.properties = properties; + } } diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/i18n/I18n.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/i18n/I18n.java deleted file mode 100644 index 29965791..00000000 --- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/i18n/I18n.java +++ /dev/null @@ -1,6 +0,0 @@ -package io.sc.platform.system.api.i18n; - -import java.io.Serializable; - -public class I18n { -} diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/i18n/I18nLanguage.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/i18n/I18nLanguage.java deleted file mode 100644 index eb802542..00000000 --- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/i18n/I18nLanguage.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.sc.platform.system.api.i18n; - -import java.util.Locale; - -public enum I18nLanguage { - en, /* 英文 */ - zh_CN, /* 简体中文 */ - tw_CN; /* 繁体中文*/ - - public Locale getLocale(){ - switch (this){ - case en: - return new Locale("en"); - case zh_CN: - return new Locale("zh","CN"); - case tw_CN: - return new Locale("tw","CN"); - } - return null; - } -} \ No newline at end of file diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/i18n/I18nVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/i18n/I18nVo.java new file mode 100644 index 00000000..38ad6dc6 --- /dev/null +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/i18n/I18nVo.java @@ -0,0 +1,42 @@ +package io.sc.platform.system.api.i18n; + +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class I18nVo extends CorporationAuditorVo { + private String id; + private String code; + private String lang; + private String message; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getLang() { + return lang; + } + + public void setLang(String lang) { + this.lang = lang; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/menu/MenuVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/menu/MenuVo.java index f20cca5d..90934539 100644 --- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/menu/MenuVo.java +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/menu/MenuVo.java @@ -4,7 +4,7 @@ import io.sc.platform.orm.api.vo.CorporationAuditorVo; public abstract class MenuVo extends CorporationAuditorVo { protected String type; - protected String parentId; + protected String parent; protected String id; protected String name; protected String titleI18nKey; @@ -22,12 +22,12 @@ public abstract class MenuVo extends CorporationAuditorVo { this.type = type; } - public String getParentId() { - return parentId; + public String getParent() { + return parent; } - public void setParentId(String parentId) { - this.parentId = parentId; + public void setParent(String parent) { + this.parent = parent; } public String getId() { diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/org/OrgVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/org/OrgVo.java index fe35f881..6e2caffb 100644 --- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/org/OrgVo.java +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/org/OrgVo.java @@ -15,7 +15,7 @@ public class OrgVo extends CorporationAuditorVo { //是否是部门 private Boolean isDepartment; //父组织ID - private String parentId; + private String parent; private boolean selected; @@ -67,12 +67,12 @@ public class OrgVo extends CorporationAuditorVo { isDepartment = department; } - public String getParentId() { - return parentId; + public String getParent() { + return parent; } - public void setParentId(String parentId) { - this.parentId = parentId; + public void setParent(String parent) { + this.parent = parent; } public boolean isSelected() { diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/parameter/ParameterVo.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/parameter/ParameterVo.java index 9eef73a0..cec323a3 100644 --- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/parameter/ParameterVo.java +++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/parameter/ParameterVo.java @@ -1,10 +1,13 @@ package io.sc.platform.system.api.parameter; -public class ParameterVo { +import io.sc.platform.orm.api.vo.BaseVo; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class ParameterVo extends CorporationAuditorVo { private String id; private String code; private String value; - private String parentId; + private String parent; public String getId() { return id; @@ -30,11 +33,11 @@ public class ParameterVo { this.value = value; } - public String getParentId() { - return parentId; + public String getParent() { + return parent; } - public void setParentId(String parentId) { - this.parentId = parentId; + public void setParent(String parent) { + this.parent = parent; } } diff --git a/io.sc.platform.system.frontend/.npmrc b/io.sc.platform.system.frontend/.npmrc index 06969b7b..c1c0b295 100644 --- a/io.sc.platform.system.frontend/.npmrc +++ b/io.sc.platform.system.frontend/.npmrc @@ -8,4 +8,4 @@ email= # 登录 npm 仓库的用户认证信息, 在 npm publish 时使用, publish 的 npm registry 在 package.json 文件中 publishConfig 部分配置 # _authToken 可通过以下命令获取 # curl -X PUT -H "Content-Type:application/json" -d '{"_id":"org.couchdb.user:admin","name":"admin","password":"admin"}' http://nexus.sc.io:8000/repository/npm-releases/-/user/org.couchdb.user:admin -//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.25afcf59-9193-3068-bcfa-faf76ceadb13 \ No newline at end of file +//nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.193db44c-7ca5-3cb6-a990-d24b93fb0d10 \ No newline at end of file diff --git a/io.sc.platform.system.frontend/package.json b/io.sc.platform.system.frontend/package.json index 96d54fb4..48bf365d 100644 --- a/io.sc.platform.system.frontend/package.json +++ b/io.sc.platform.system.frontend/package.json @@ -1,102 +1,104 @@ { - "name": "io.sc.platform.system.frontend", - "version": "8.1.13", - "description": "", - "private": false, - "keywords": [], - "author": "", - "license": "ISC", - "scripts": { - "dev": "nodemon", - "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", - "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", - "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", - "sync": "platform sync", - "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml" - }, - "engines": { - "node": ">=18", - "pnpm": ">=7" - }, - "publishConfig": { - "registry": "http://nexus.sc.io:8000/repository/npm-releases/", - "access": "public" - }, - "devDependencies": { - "@babel/core": "7.23.2", - "@babel/preset-env": "7.23.2", - "@babel/preset-typescript": "7.23.2", - "@babel/plugin-transform-class-properties": "7.22.5", - "@babel/plugin-transform-object-rest-spread": "7.22.15", - "@quasar/app-webpack": "3.11.2", - "@quasar/cli": "2.3.0", - "@types/mockjs": "1.0.9", - "@types/node": "20.8.9", - "@typescript-eslint/eslint-plugin": "6.9.0", - "@typescript-eslint/parser": "6.9.0", - "@vue/compiler-sfc": "3.3.7", - "@webpack-cli/serve": "2.0.5", - "autoprefixer": "10.4.16", - "babel-loader": "9.1.3", - "clean-webpack-plugin": "4.0.0", - "copy-webpack-plugin": "11.0.0", - "cross-env": "7.0.3", - "css-loader": "6.8.1", - "eslint": "8.52.0", - "eslint-config-prettier": "9.0.0", - "eslint-plugin-prettier": "5.0.1", - "eslint-plugin-vue": "9.18.0", - "eslint-webpack-plugin": "4.0.1", - "html-webpack-plugin": "5.5.3", - "json5": "2.2.3", - "mini-css-extract-plugin": "2.7.6", - "nodemon": "3.0.1", - "postcss": "8.4.31", - "postcss-import": "15.1.0", - "postcss-loader": "7.3.3", - "postcss-preset-env": "9.2.0", - "prettier": "3.0.3", - "sass": "1.69.5", - "sass-loader": "13.3.2", - "typescript": "5.2.2", - "vue-loader": "17.3.0", - "webpack": "5.89.0", - "webpack-bundle-analyzer": "4.9.1", - "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.1", - "webpack-merge": "5.10.0" - }, - "dependencies": { - "@quasar/extras": "1.16.7", - "@vueuse/core": "10.3.0", - "axios": "1.5.1", - "dayjs": "1.11.10", - "echarts": "5.4.1", - "exceljs": "4.3.0", - "file-saver": "2.0.5", - "luckyexcel": "1.0.1", - "mockjs": "1.1.0", - "pinia": "2.1.7", - "platform-core": "8.1.42", - "quasar": "2.13.0", - "tailwindcss": "3.3.5", - "vue": "3.3.7", - "vue-dompurify-html": "4.1.4", - "vue-i18n": "9.6.0", - "vue-router": "4.2.5", - "@codemirror/autocomplete": "6.11.1", - "@codemirror/commands": "6.3.2", - "@codemirror/lang-html": "6.4.7", - "@codemirror/lang-java": "6.0.1", - "@codemirror/lang-javascript": "6.2.1", - "@codemirror/lang-json": "6.0.1", - "@codemirror/lang-sql": "6.5.4", - "@codemirror/lang-xml": "6.0.2", - "@codemirror/language": "6.9.3", - "@codemirror/search": "6.5.5", - "@codemirror/state": "6.3.3", - "@codemirror/view": "6.22.1", - "codemirror": "6.0.1", - "vue-codemirror6": "1.1.31" - } + "name": "io.sc.platform.system.frontend", + "version": "8.1.19", + "description": "", + "private": false, + "keywords": [ + + ], + "author": "", + "license": "ISC", + "scripts": { + "dev": "nodemon", + "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs", + "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs", + "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs", + "sync": "platform sync", + "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml" + }, + "engines": { + "node": ">=18", + "pnpm": ">=7" + }, + "publishConfig": { + "registry": "http://nexus.sc.io:8000/repository/npm-releases/", + "access": "public" + }, + "devDependencies": { + "@babel/core": "7.23.2", + "@babel/preset-env": "7.23.2", + "@babel/preset-typescript": "7.23.2", + "@babel/plugin-transform-class-properties": "7.22.5", + "@babel/plugin-transform-object-rest-spread": "7.22.15", + "@quasar/app-webpack": "3.11.2", + "@quasar/cli": "2.3.0", + "@types/mockjs": "1.0.9", + "@types/node": "20.8.9", + "@typescript-eslint/eslint-plugin": "6.9.0", + "@typescript-eslint/parser": "6.9.0", + "@vue/compiler-sfc": "3.3.7", + "@webpack-cli/serve": "2.0.5", + "autoprefixer": "10.4.16", + "babel-loader": "9.1.3", + "clean-webpack-plugin": "4.0.0", + "copy-webpack-plugin": "11.0.0", + "cross-env": "7.0.3", + "css-loader": "6.8.1", + "eslint": "8.52.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-prettier": "5.0.1", + "eslint-plugin-vue": "9.18.0", + "eslint-webpack-plugin": "4.0.1", + "html-webpack-plugin": "5.5.3", + "json5": "2.2.3", + "mini-css-extract-plugin": "2.7.6", + "nodemon": "3.0.1", + "postcss": "8.4.31", + "postcss-import": "15.1.0", + "postcss-loader": "7.3.3", + "postcss-preset-env": "9.2.0", + "prettier": "3.0.3", + "sass": "1.69.5", + "sass-loader": "13.3.2", + "typescript": "5.2.2", + "vue-loader": "17.3.0", + "webpack": "5.89.0", + "webpack-bundle-analyzer": "4.9.1", + "webpack-cli": "5.1.4", + "webpack-dev-server": "4.15.1", + "webpack-merge": "5.10.0" + }, + "dependencies": { + "@quasar/extras": "1.16.7", + "@vueuse/core": "10.3.0", + "axios": "1.5.1", + "dayjs": "1.11.10", + "echarts": "5.4.1", + "exceljs": "4.3.0", + "file-saver": "2.0.5", + "luckyexcel": "1.0.1", + "mockjs": "1.1.0", + "pinia": "2.1.7", + "platform-core": "8.1.47", + "quasar": "2.13.0", + "tailwindcss": "3.3.5", + "vue": "3.3.7", + "vue-dompurify-html": "4.1.4", + "vue-i18n": "9.6.0", + "vue-router": "4.2.5", + "@codemirror/autocomplete": "6.11.1", + "@codemirror/commands": "6.3.2", + "@codemirror/lang-html": "6.4.7", + "@codemirror/lang-java": "6.0.1", + "@codemirror/lang-javascript": "6.2.1", + "@codemirror/lang-json": "6.0.1", + "@codemirror/lang-sql": "6.5.4", + "@codemirror/lang-xml": "6.0.2", + "@codemirror/language": "6.9.3", + "@codemirror/search": "6.5.5", + "@codemirror/state": "6.3.3", + "@codemirror/view": "6.22.1", + "codemirror": "6.0.1", + "vue-codemirror6": "1.1.31" + } } \ No newline at end of file diff --git a/io.sc.platform.system.frontend/src/i18n/messages.json b/io.sc.platform.system.frontend/src/i18n/messages.json index 867e0143..936d7a6a 100644 --- a/io.sc.platform.system.frontend/src/i18n/messages.json +++ b/io.sc.platform.system.frontend/src/i18n/messages.json @@ -28,7 +28,7 @@ "system.user.action.removeUser":"Remove User", "system.user.action.removeAllUser":"Remove All User", "system.user.action.setPassword":"Set Password", - + "system.role.action.addRole":"Add Role", "system.role.action.addAllRole":"Add All Role", "system.role.action.removeRole":"Remove Role", @@ -45,12 +45,13 @@ "system.monitor.log.tab.download":"Log Download", "system.monitor.log.tab.level":"Log Level", - + "accountExpired": "Expired", "accountLocked": "Locked", "credentialsExpired": "Credentials Expired", "parameter.system":"System", - "parameter.system.homePage":"Home Page" + "parameter.system.homePage":"Home Page", + "parameter.login.encodePassword":"Login Password Encode" } 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 14b430ef..de99218e 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 @@ -43,11 +43,12 @@ "system.monitor.log.tab.view":"日誌查看", "system.monitor.log.tab.download":"日誌下載", "system.monitor.log.tab.level":"日誌級別", - + "accountExpired": "是否過期", "accountLocked": "是否鎖定", "credentialsExpired": "是否密碼過期", "parameter.system":"系統", - "parameter.system.homePage":"首頁" + "parameter.system.homePage":"首頁", + "parameter.login.encodePassword":"登錄頁面密碼加密" } 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 2473f3ce..37f8edbe 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 @@ -28,7 +28,7 @@ "system.user.action.removeUser":"移除用户", "system.user.action.removeAllUser":"移除所有用户", "system.user.action.setPassword":"修改密码", - + "system.role.action.addRole":"添加角色", "system.role.action.addAllRole":"添加所有角色", "system.role.action.removeRole":"移除角色", @@ -44,11 +44,12 @@ "system.monitor.log.tab.download":"日志下载", "system.monitor.log.tab.level":"日志级别", - + "accountExpired": "是否过期", "accountLocked": "是否锁定", "credentialsExpired": "是否密码过期", "parameter.system":"系统", - "parameter.system.homePage":"首页" + "parameter.system.homePage":"首页", + "parameter.login.encodePassword":"登录页面密码加密" } diff --git a/io.sc.platform.system.frontend/src/views/corporation/Corporation.vue b/io.sc.platform.system.frontend/src/views/corporation/Corporation.vue index ccde5fe4..2f62a265 100644 --- a/io.sc.platform.system.frontend/src/views/corporation/Corporation.vue +++ b/io.sc.platform.system.frontend/src/views/corporation/Corporation.vue @@ -4,10 +4,13 @@ diff --git a/io.sc.platform.system.frontend/src/views/menu/AddTopMenuDialog.vue b/io.sc.platform.system.frontend/src/views/menu/AddTopMenuDialog.vue new file mode 100644 index 00000000..81f0dbea --- /dev/null +++ b/io.sc.platform.system.frontend/src/views/menu/AddTopMenuDialog.vue @@ -0,0 +1,103 @@ + + diff --git a/io.sc.platform.system.frontend/src/views/menu/EditMenuDialog.vue b/io.sc.platform.system.frontend/src/views/menu/EditMenuDialog.vue new file mode 100644 index 00000000..2afc6a14 --- /dev/null +++ b/io.sc.platform.system.frontend/src/views/menu/EditMenuDialog.vue @@ -0,0 +1,128 @@ + + diff --git a/io.sc.platform.system.frontend/src/views/menu/Menu.vue b/io.sc.platform.system.frontend/src/views/menu/Menu.vue index fd0047c1..23e9578e 100644 --- a/io.sc.platform.system.frontend/src/views/menu/Menu.vue +++ b/io.sc.platform.system.frontend/src/views/menu/Menu.vue @@ -55,21 +55,32 @@ + + + diff --git a/io.sc.platform.system.frontend/src/views/org/Org.vue b/io.sc.platform.system.frontend/src/views/org/Org.vue index 0de21508..099baef7 100644 --- a/io.sc.platform.system.frontend/src/views/org/Org.vue +++ b/io.sc.platform.system.frontend/src/views/org/Org.vue @@ -164,6 +164,7 @@ const userConfigure = { const orgConfigure = { actions: [ + /* { name: 'refresh', label: t('refresh'), @@ -179,14 +180,15 @@ const orgConfigure = { label: t('selectAll'), click: () => {}, }, + */ { name: 'addRoot', - label: t('addRoot'), + label: t('添加顶级机构'), click: () => {}, }, { name: 'addChild', - label: t('addChild'), + label: t('添加子机构'), click: () => {}, }, { diff --git a/io.sc.platform.system.frontend/src/views/user/User.vue b/io.sc.platform.system.frontend/src/views/user/User.vue index a6cdc11f..d387e37b 100644 --- a/io.sc.platform.system.frontend/src/views/user/User.vue +++ b/io.sc.platform.system.frontend/src/views/user/User.vue @@ -156,14 +156,15 @@ const userConfigure = { formFields: [ { modelName: 'loginName', label: t('loginName'), type: 'text', required: true }, { modelName: 'userName', label: t('userName'), type: 'text', required: true }, - { modelName: 'password', label: t('password'), type: 'text' }, - { modelName: 'confirmPassword', label: t('confirmPassword'), type: 'text' }, + { modelName: 'password', label: t('password'), type: 'password' }, + { modelName: 'confirmPassword', label: t('confirmPassword'), type: 'password' }, { modelName: 'description', label: t('description'), type: 'textarea' }, { modelName: 'email', label: t('email'), type: 'text' }, { modelName: 'phone', label: t('phone'), type: 'text' }, { modelName: 'mobile', label: t('mobile'), type: 'text' }, { modelName: 'weixin', label: t('weixin'), type: 'text' }, { modelName: 'qq', label: t('qq'), type: 'text' }, + { modelName: 'enable', label: t('enable'), type: 'checkbox', defaultValue: true }, { modelName: 'accountExpired', label: t('accountExpired'), type: 'checkbox' }, { modelName: 'accountLocked', label: t('accountLocked'), type: 'checkbox' }, { modelName: 'credentialsExpired', label: t('credentialsExpired'), type: 'checkbox' }, diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/controller/AnnouncementWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/controller/AnnouncementWebController.java index 03b988ce..55af9080 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/controller/AnnouncementWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/controller/AnnouncementWebController.java @@ -4,10 +4,11 @@ import io.sc.platform.mvc.controller.support.RestCrudController; import io.sc.platform.system.announcement.jpa.entity.AnnouncementEntity; import io.sc.platform.system.announcement.jpa.repository.AnnouncementRepository; import io.sc.platform.system.announcement.service.AnnouncementService; +import io.sc.platform.system.api.announcement.AnnouncementVo; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("api/system/announcement") -public class AnnouncementWebController extends RestCrudController { +public class AnnouncementWebController extends RestCrudController { } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/convertor/AnnouncementEntityVoConverter.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/convertor/AnnouncementEntityVoConverter.java deleted file mode 100644 index 14dfccf6..00000000 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/convertor/AnnouncementEntityVoConverter.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.sc.platform.system.announcement.convertor; - -import io.sc.platform.orm.EntityVoConverter; -import io.sc.platform.system.announcement.jpa.entity.AnnouncementEntity; -import io.sc.platform.system.api.announcement.AnnouncementVo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class AnnouncementEntityVoConverter implements EntityVoConverter { - private static final Logger log = LoggerFactory.getLogger(AnnouncementEntityVoConverter.class); - - @Override - public AnnouncementVo toVo(AnnouncementEntity entity) { - if(entity==null){ - return null; - } - AnnouncementVo vo =new AnnouncementVo(); - vo.setId(entity.getId()); - vo.setTitle(entity.getTitle()); - vo.setContent(entity.getContent()); - return vo; - } - - @Override - public AnnouncementEntity fromVo(AnnouncementVo vo) { - if(vo==null){ - return null; - } - return null; - } -} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/jpa/entity/AnnouncementEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/jpa/entity/AnnouncementEntity.java index 1a2a66b7..c4285d5e 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/jpa/entity/AnnouncementEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/jpa/entity/AnnouncementEntity.java @@ -1,6 +1,8 @@ package io.sc.platform.system.announcement.jpa.entity; import io.sc.platform.orm.entity.AuditorEntity; +import io.sc.platform.orm.entity.CorporationAuditorEntity; +import io.sc.platform.system.api.announcement.AnnouncementVo; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; @@ -8,7 +10,7 @@ import javax.validation.constraints.Size; @Entity @Table(name="SYS_ANNOUNCEMENT") -public class AnnouncementEntity extends AuditorEntity { +public class AnnouncementEntity extends CorporationAuditorEntity { //主键 @Id @GeneratedValue(generator = "system-uuid") @@ -26,6 +28,16 @@ public class AnnouncementEntity extends AuditorEntity { @Column(name="CONTENT_") private String content; + @Override + public AnnouncementVo toVo() { + AnnouncementVo vo =new AnnouncementVo(); + CorporationAuditorEntity.toVo(vo,this); + vo.setId(this.getId()); + vo.setTitle(this.getTitle()); + vo.setContent(this.getContent()); + return vo; + } + public String getId() { return id; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/controller/AuditLogWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/controller/AuditLogWebController.java index 232c87e2..26ad67e0 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/controller/AuditLogWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/controller/AuditLogWebController.java @@ -1,6 +1,7 @@ package io.sc.platform.system.auditlog.controller; import io.sc.platform.mvc.controller.support.RestCrudController; +import io.sc.platform.system.api.auditlog.AuditLogVo; import io.sc.platform.system.auditlog.jpa.entity.AuditLogEntity; import io.sc.platform.system.auditlog.jpa.repository.AuditLogRepository; import io.sc.platform.system.auditlog.service.AuditLogService; @@ -9,6 +10,6 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/system/monitor/auditlog") -public class AuditLogWebController extends RestCrudController { +public class AuditLogWebController extends RestCrudController { } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/jpa/entity/AuditLogEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/jpa/entity/AuditLogEntity.java index 51dc0161..4a420eed 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/jpa/entity/AuditLogEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/jpa/entity/AuditLogEntity.java @@ -2,6 +2,7 @@ package io.sc.platform.system.auditlog.jpa.entity; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.sc.platform.orm.entity.BaseEntity; +import io.sc.platform.system.api.auditlog.AuditLogVo; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; @@ -18,7 +19,7 @@ import java.util.Date; "status","startDate","executeTime","url","ip","loginName", "oldValue","newValue","exception","exceptionMessage","exceptionStackTrace" }) -public class AuditLogEntity extends BaseEntity { +public class AuditLogEntity extends BaseEntity { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid2") @@ -83,6 +84,28 @@ public class AuditLogEntity extends BaseEntity { private String exceptionStackTrace;//方法执行抛出的违例栈 + @Override + public AuditLogVo toVo() { + AuditLogVo vo =new AuditLogVo(); + vo.setId(this.getId()); + vo.setClassName(this.getClassName()); + vo.setMethodName(this.getMethodName()); + vo.setHttpMethod(this.getHttpMethod()); + vo.setAction(this.getAction()); + vo.setStatus(this.getStatus()); + vo.setStartDate(this.getStartDate()); + vo.setExecuteTime(this.getExecuteTime()); + vo.setUrl(this.getUrl()); + vo.setIp(this.getIp()); + vo.setLoginName(this.getLoginName()); + vo.setOldValue(this.getOldValue()); + vo.setNewValue(this.getNewValue()); + vo.setException(this.getException()); + vo.setExceptionMessage(this.getExceptionMessage()); + vo.setExceptionStackTrace(this.getExceptionStackTrace()); + return vo; + } + public String getId() { return id; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/autoconfigure/support/DatabaseMessageSource.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/autoconfigure/support/DatabaseMessageSource.java index d4733b15..edf0aab6 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/autoconfigure/support/DatabaseMessageSource.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/autoconfigure/support/DatabaseMessageSource.java @@ -3,12 +3,9 @@ package io.sc.platform.system.autoconfigure.support; import io.sc.platform.core.Environment; import io.sc.platform.core.enums.Language; import io.sc.platform.core.i18n.PlatformMessageSource; -import io.sc.platform.core.service.RuntimeService; import io.sc.platform.core.util.LocaleUtil; -import io.sc.platform.system.api.i18n.I18nLanguage; import io.sc.platform.system.i18n.jpa.entity.I18nEntity; import io.sc.platform.system.i18n.jpa.repository.I18nRepository; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.context.MessageSourceResolvable; import org.springframework.context.NoSuchMessageException; @@ -17,7 +14,6 @@ import org.springframework.util.StringUtils; import java.text.MessageFormat; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; /** * 数据库消息源 diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/controller/CorporationWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/controller/CorporationWebController.java index 05620c40..d9471148 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/controller/CorporationWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/controller/CorporationWebController.java @@ -1,7 +1,7 @@ package io.sc.platform.system.corporation.controller; import io.sc.platform.mvc.controller.support.RestCrudController; -import io.sc.platform.system.corporation.convertor.CorporationEntityVoConverter; +import io.sc.platform.system.api.corporation.CorporationVo; import io.sc.platform.system.corporation.jpa.entity.CorporationEntity; import io.sc.platform.system.corporation.jpa.repository.CorporationRepository; import io.sc.platform.system.corporation.service.CorporationService; @@ -10,6 +10,6 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("api/system/corporation") -public class CorporationWebController extends RestCrudController { - private CorporationEntityVoConverter converter =new CorporationEntityVoConverter(); +public class CorporationWebController extends RestCrudController { + } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/convertor/CorporationEntityVoConverter.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/convertor/CorporationEntityVoConverter.java deleted file mode 100644 index 9a70ff8a..00000000 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/convertor/CorporationEntityVoConverter.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.sc.platform.system.corporation.convertor; - -import io.sc.platform.orm.EntityVoConverter; -import io.sc.platform.system.api.corporation.CorporationVo; -import io.sc.platform.system.api.org.OrgVo; -import io.sc.platform.system.corporation.jpa.entity.CorporationEntity; -import io.sc.platform.system.org.jpa.entity.OrgEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class CorporationEntityVoConverter implements EntityVoConverter { - private static final Logger log = LoggerFactory.getLogger(CorporationEntityVoConverter.class); - - @Override - public CorporationVo toVo(CorporationEntity entity) { - if(entity==null){ - return null; - } - CorporationVo vo =new CorporationVo(); - vo.setCode(entity.getCode()); - vo.setName(entity.getName()); - vo.setDescription(entity.getDescription()); - vo.setEnable(entity.getEnable()); - vo.setParentCode(entity.getParent()==null?null:entity.getParent().getCode()); - return vo; - } - - @Override - public CorporationEntity fromVo(CorporationVo vo) { - if(vo==null){ - return null; - } - return null; - } -} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/entity/CorporationEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/entity/CorporationEntity.java index ed261a39..75de4252 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/entity/CorporationEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/entity/CorporationEntity.java @@ -3,7 +3,9 @@ package io.sc.platform.system.corporation.jpa.entity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.sc.platform.orm.converter.NumericBooleanConverter; import io.sc.platform.orm.entity.AuditorEntity; +import io.sc.platform.system.api.corporation.CorporationVo; import io.sc.platform.system.corporation.jpa.support.CorporationEntityJsonSerializer; +import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import javax.validation.constraints.Size; @@ -13,12 +15,16 @@ import javax.validation.constraints.Size; */ @Entity @Table(name="SYS_CORPORATION") -@JsonSerialize(using = CorporationEntityJsonSerializer.class) -public class CorporationEntity extends AuditorEntity { - //法人代码 +public class CorporationEntity extends AuditorEntity { @Id - @Column(name="CODE_",nullable=false,length=255) - @Size(min=1,max=255) + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_", length=36) + @Size(max=36) + private String id; + + @Column(name="CODE_", length=255) + @Size(max=255) private String code; //法人名称 @@ -38,7 +44,7 @@ public class CorporationEntity extends AuditorEntity { // 父法人 @ManyToOne(fetch=FetchType.LAZY) - @JoinColumn(name="PARENT_CODE_") + @JoinColumn(name="PARENT_ID_") private CorporationEntity parent; public CorporationEntity(){} @@ -47,6 +53,27 @@ public class CorporationEntity extends AuditorEntity { this.code =code; } + @Override + public CorporationVo toVo() { + CorporationVo vo =new CorporationVo(); + AuditorEntity.toVo(vo,this); + vo.setId(this.getId()); + vo.setCode(this.getCode()); + vo.setName(this.getName()); + vo.setDescription(this.getDescription()); + vo.setEnable(this.getEnable()); + vo.setParent(this.getParent()==null?null:this.getParent().getId()); + return vo; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getCode() { return code; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/controller/DictionaryWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/controller/DictionaryWebController.java index 7191c9ae..c6587e8a 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/controller/DictionaryWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/controller/DictionaryWebController.java @@ -2,6 +2,7 @@ package io.sc.platform.system.dictionary.controller; import io.sc.platform.mvc.controller.support.RestCrudController; import io.sc.platform.mvc.support.OrderItem; +import io.sc.platform.system.api.dictionary.DictionaryVo; import io.sc.platform.system.dictionary.jpa.entity.DictionaryEntity; import io.sc.platform.system.dictionary.jpa.repository.DictionaryRepository; import io.sc.platform.system.dictionary.service.DictionaryService; @@ -14,7 +15,7 @@ import java.util.List; @RestController @RequestMapping("api/system/dictionary") -public class DictionaryWebController extends RestCrudController { +public class DictionaryWebController extends RestCrudController { @PostMapping("updateDictionariesOrder") public void updateDictionariesOrder(@RequestBody List> orderItems) throws Exception{ diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/jpa/entity/DictionaryEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/jpa/entity/DictionaryEntity.java index 01413fc8..e0a297d4 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/jpa/entity/DictionaryEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/jpa/entity/DictionaryEntity.java @@ -2,6 +2,7 @@ package io.sc.platform.system.dictionary.jpa.entity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.sc.platform.orm.entity.CorporationAuditorEntity; +import io.sc.platform.system.api.dictionary.DictionaryVo; import io.sc.platform.system.dictionary.jpa.support.DictionaryEntityJsonSerializer; import org.hibernate.annotations.GenericGenerator; @@ -14,7 +15,7 @@ import javax.validation.constraints.Size; @Entity @Table(name="SYS_DICTIONARY") @JsonSerialize(using = DictionaryEntityJsonSerializer.class) -public class DictionaryEntity extends CorporationAuditorEntity { +public class DictionaryEntity extends CorporationAuditorEntity { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid2") @@ -43,6 +44,17 @@ public class DictionaryEntity extends CorporationAuditorEntity { this.order =order; } + @Override + public DictionaryVo toVo() { + DictionaryVo vo =new DictionaryVo(); + CorporationAuditorEntity.toVo(vo,this); + vo.setId(this.getId()); + vo.setCode(this.getCode()); + vo.setValue(this.getValue()); + vo.setOrder(this.getOrder()); + return vo; + } + public String getId() { return id; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/controller/DsWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/controller/DsWebController.java index 2de4496a..96a283c2 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/controller/DsWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/controller/DsWebController.java @@ -1,6 +1,7 @@ package io.sc.platform.system.ds.controller; import io.sc.platform.mvc.controller.support.RestCrudController; +import io.sc.platform.system.api.ds.DsVo; import io.sc.platform.system.ds.jpa.entity.DsEntity; import io.sc.platform.system.ds.jpa.repository.DsRepository; import io.sc.platform.system.ds.service.DsService; @@ -9,6 +10,6 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/datasource") -public class DsWebController extends RestCrudController { +public class DsWebController extends RestCrudController { } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/DsEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/DsEntity.java index 336a110f..4b801ba8 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/DsEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/DsEntity.java @@ -3,8 +3,11 @@ package io.sc.platform.system.ds.jpa.entity; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; +import io.sc.platform.orm.entity.AuditorEntity; import io.sc.platform.orm.entity.CorporationAuditorEntity; import io.sc.platform.orm.service.support.criteria.impl.*; +import io.sc.platform.system.api.ds.DsVo; import io.sc.platform.system.ds.jpa.support.DsEntityJsonSerializer; import org.hibernate.annotations.GenericGenerator; @@ -22,7 +25,7 @@ import static javax.persistence.InheritanceType.SINGLE_TABLE; @JsonSubTypes.Type(value =JndiDsEntity.class, name = "JNDI"), @JsonSubTypes.Type(value =JdbcDsEntity.class, name = "JDBC") }) -public abstract class DsEntity extends CorporationAuditorEntity { +public abstract class DsEntity extends CorporationAuditorEntity { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid2") @@ -45,6 +48,18 @@ public abstract class DsEntity extends CorporationAuditorEntity { @Size(max=255) private String description; + public static void toVo(DsVo vo, DsEntity entity){ + if(vo!=null && entity!=null) { + CorporationAuditorEntity.toVo(vo,entity); + vo.setId(entity.getId()); + vo.setName(entity.getName()); + vo.setType(entity.getType()); + vo.setDescription(entity.getDescription()); + } + } + + + public String getId() { return id; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/JdbcDsEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/JdbcDsEntity.java index 675a483f..cc2a1b28 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/JdbcDsEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/JdbcDsEntity.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeId; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.sc.platform.orm.converter.MapStringConverter; +import io.sc.platform.system.api.ds.DsVo; import io.sc.platform.system.api.ds.JdbcDsVo; import io.sc.platform.system.ds.jpa.support.DsEntityJsonSerializer; import io.sc.platform.system.ds.jpa.support.JdbcDsEntityJsonSerializer; @@ -18,7 +19,6 @@ import java.util.Map; @Entity @DiscriminatorValue("JDBC") -@JsonSerialize(using= JdbcDsEntityJsonSerializer.class) public class JdbcDsEntity extends DsEntity { @Column(name="JDBC_DATABASE_TYPE_", length=20) @Size(max=20) @@ -44,6 +44,19 @@ public class JdbcDsEntity extends DsEntity { @Convert(converter = MapStringConverter.class) private Map properties; + @Override + public DsVo toVo() { + JdbcDsVo vo =new JdbcDsVo(); + DsEntity.toVo(vo,this); + vo.setDatabaseType(this.getDatabaseType()); + vo.setJdbcDriver(this.getJdbcDriver()); + vo.setJdbcUrl(this.getJdbcUrl()); + vo.setUsername(this.getUsername()); + vo.setPassword(this.getPassword()); + vo.setProperties(this.getProperties()); + return vo; + } + public String getDatabaseType() { return databaseType; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/JndiDsEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/JndiDsEntity.java index cbb2bcef..c6e4ce25 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/JndiDsEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/ds/jpa/entity/JndiDsEntity.java @@ -1,6 +1,7 @@ package io.sc.platform.system.ds.jpa.entity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.sc.platform.system.api.ds.DsVo; import io.sc.platform.system.api.ds.JdbcDsVo; import io.sc.platform.system.api.ds.JndiDsVo; import io.sc.platform.system.ds.jpa.support.JdbcDsEntityJsonSerializer; @@ -19,6 +20,14 @@ public class JndiDsEntity extends DsEntity { @Size(max=255) private String jndiName; + @Override + public DsVo toVo() { + JndiDsVo vo =new JndiDsVo(); + DsEntity.toVo(vo,this); + vo.setJndiName(this.getJndiName()); + return vo; + } + public String getJndiName() { return jndiName; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/controller/I18nWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/controller/I18nWebController.java index 7eae58a1..da546de0 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/controller/I18nWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/controller/I18nWebController.java @@ -2,6 +2,7 @@ package io.sc.platform.system.i18n.controller; import io.sc.platform.core.service.MessageSourceService; import io.sc.platform.mvc.controller.support.RestCrudController; +import io.sc.platform.system.api.i18n.I18nVo; import io.sc.platform.system.i18n.jpa.entity.I18nEntity; import io.sc.platform.system.i18n.jpa.repository.I18nRepository; import io.sc.platform.system.i18n.service.I18nService; @@ -10,7 +11,7 @@ import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/system/i18n") -public class I18nWebController extends RestCrudController { +public class I18nWebController extends RestCrudController { @Autowired private MessageSourceService messageSourceService; @PostMapping("importMessages") diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/entity/I18nEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/entity/I18nEntity.java index 4660faf5..4779d7cc 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/entity/I18nEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/entity/I18nEntity.java @@ -2,26 +2,20 @@ package io.sc.platform.system.i18n.jpa.entity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.sc.platform.core.enums.Language; -import io.sc.platform.orm.converter.NumericBooleanConverter; -import io.sc.platform.orm.entity.AuditorEntity; -import io.sc.platform.orm.entity.BaseEntity; import io.sc.platform.orm.entity.CorporationAuditorEntity; -import io.sc.platform.system.api.i18n.I18n; -import io.sc.platform.system.api.i18n.I18nLanguage; +import io.sc.platform.system.api.i18n.I18nVo; import io.sc.platform.system.i18n.jpa.support.I18nEntityJsonSerializer; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import javax.validation.constraints.Size; -import java.io.Serializable; /** * 法人实体类 */ @Entity @Table(name="SYS_I18N") -@JsonSerialize(using = I18nEntityJsonSerializer.class) -public class I18nEntity extends AuditorEntity { +public class I18nEntity extends CorporationAuditorEntity { //主键 @Id @GeneratedValue(generator = "system-uuid") @@ -55,6 +49,17 @@ public class I18nEntity extends AuditorEntity { this.message =message; } + @Override + public I18nVo toVo() { + I18nVo vo =new I18nVo(); + CorporationAuditorEntity.toVo(vo,this); + vo.setId(this.getId()); + vo.setCode(this.getCode()); + vo.setLang(this.getLang().toString()); + vo.setMessage(this.getMessage()); + return vo; + } + public String getId() { return id; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/repository/I18nRepository.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/repository/I18nRepository.java index 0e96d2f2..cf1860e1 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/repository/I18nRepository.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/jpa/repository/I18nRepository.java @@ -2,7 +2,6 @@ package io.sc.platform.system.i18n.jpa.repository; import io.sc.platform.core.enums.Language; import io.sc.platform.orm.repository.DaoRepository; -import io.sc.platform.system.api.i18n.I18nLanguage; import io.sc.platform.system.i18n.jpa.entity.I18nEntity; import java.util.List; diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/service/I18nService.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/service/I18nService.java index 416cd650..5a1bd9ad 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/service/I18nService.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/service/I18nService.java @@ -1,13 +1,9 @@ package io.sc.platform.system.i18n.service; import io.sc.platform.orm.service.DaoService; -import io.sc.platform.system.api.i18n.I18nLanguage; import io.sc.platform.system.i18n.jpa.entity.I18nEntity; import io.sc.platform.system.i18n.jpa.repository.I18nRepository; -import java.util.List; -import java.util.Map; - public interface I18nService extends DaoService { /** * 从资源包属性文件中获取多语言消息并导入到数据库中 diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/service/impl/I18nServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/service/impl/I18nServiceImpl.java index 2d79ac3e..805351b0 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/service/impl/I18nServiceImpl.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/i18n/service/impl/I18nServiceImpl.java @@ -3,7 +3,6 @@ package io.sc.platform.system.i18n.service.impl; import io.sc.platform.core.enums.Language; import io.sc.platform.core.i18n.PlatformResourceBundleMessageSource; import io.sc.platform.orm.service.impl.DaoServiceImpl; -import io.sc.platform.system.api.i18n.I18nLanguage; import io.sc.platform.system.autoconfigure.support.CompositeMessageSource; import io.sc.platform.system.i18n.jpa.entity.I18nEntity; import io.sc.platform.system.i18n.jpa.repository.I18nRepository; @@ -12,16 +11,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; -import org.springframework.context.support.ReloadableResourceBundleMessageSource; -import org.springframework.context.support.ResourceBundleMessageSource; -import org.springframework.core.io.DefaultResourceLoader; -import org.springframework.core.io.Resource; import org.springframework.stereotype.Service; -import java.io.IOException; -import java.io.InputStream; -import java.util.*; -import java.util.stream.Collectors; +import java.util.List; +import java.util.Map; @Service public class I18nServiceImpl extends DaoServiceImpl implements I18nService { diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/MenuInitializer.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/MenuInitializer.java index b54e52b2..db011b4f 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/MenuInitializer.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/MenuInitializer.java @@ -17,19 +17,9 @@ public class MenuInitializer implements ApplicationInitializer{ this.menuService =applicationContext.getBean(MenuService.class); } - @Override - public String getName() { - return "Menu Initializer"; - } - - @Override - public String getDescription() { - return "Initialize menu"; - } - @Override public int getOrder() { - return 2000; + return 1100; } @Override diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/OrgInitializer.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/OrgInitializer.java new file mode 100644 index 00000000..66e9b31d --- /dev/null +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/OrgInitializer.java @@ -0,0 +1,114 @@ +package io.sc.platform.system.initializer; + +import io.sc.platform.core.initializer.ApplicationInitializer; +import io.sc.platform.core.initializer.ApplicationInitializerExecuteException; +import io.sc.platform.jdbc.sql.builder.SqlBuilder; +import io.sc.platform.system.org.service.OrgService; +import org.springframework.context.ApplicationContext; +import org.springframework.jdbc.core.JdbcTemplate; + +import java.util.Date; +import java.util.UUID; + +public class OrgInitializer implements ApplicationInitializer { + private Boolean isInitialized =null; + private OrgService orgService; + private JdbcTemplate jdbcTemplate; + + @Override + public void init(ApplicationContext applicationContext) { + this.orgService =applicationContext.getBean(OrgService.class); + this.jdbcTemplate =applicationContext.getBean(JdbcTemplate.class); + } + + @Override + public int getOrder() { + return 1300; + } + + @Override + public boolean isInitialized() { + if(isInitialized!=null) { + return isInitialized; + } + if(orgService.getRepository().count()<=0){ + isInitialized =false; + }else { + isInitialized = true; + } + return isInitialized; + } + + @Override + public void execute() throws ApplicationInitializerExecuteException { + String parentOrgId = UUID.randomUUID().toString(); + String[] childNames =new String[]{ + "上海崇明沪农商村镇银行", + "北京房山沪农商村镇银行", + "深圳光明沪农商村镇银行", + "济南槐荫沪农商村镇银行", + "济南长清沪农商村镇银行", + "聊城沪农商村镇银行", + "茌平沪农商村镇银行", + "阳谷沪农商村镇银行", + "临清沪农商村镇银行", + "泰安沪农商村镇银行", + "宁阳沪农商村镇银行", + "东平沪农商村镇银行", + "日照沪农商村镇银行", + "长沙星沙沪农商村镇银行", + "宁乡沪农商村镇银行", + "醴陵沪农商村镇银行", + "双峰沪农商村镇银行", + "涟源沪农商村镇银行", + "衡阳县沪农商村镇银行", + "桂阳沪农商村镇银行", + "永兴沪农商村镇银行", + "澧县沪农商村镇银行", + "临澧沪农商村镇银行", + "石门沪农商村镇银行", + "慈利沪农商村镇银行", + "昆明官渡沪农商村镇银行", + "嵩明沪农商村镇银行", + "蒙自沪农商村镇银行", + "弥勒沪农商村镇银行", + "开远沪农商村镇银行", + "个旧沪农商村镇银行", + "保山隆阳沪农商村镇银行", + "瑞丽沪农商村镇银行", + "建水沪农商村镇银行", + "临沧临翔沪农商村镇银行", + }; + SqlBuilder.getInsertIntoSqlBuilder() + .table("SYS_ORG") + .field("ID_",parentOrgId) + .field("PARENT_ID_",null) + .field("CODE_","") + .field("NAME_","沪农商村镇银行") + .field("ENABLE_",1) + .field("DATA_COME_FROM_","INPUT") + .field("CREATOR_","system") + .field("CREATE_DATE_",new Date()) + .field("LAST_MODIFIER_","system") + .field("LAST_MODIFYDATE_",new Date()) + .insert(jdbcTemplate); + + for(int i=0;i { +public class MenuWebController extends RestCrudController { + + @PostMapping("addMenu") + public void addMenu(@RequestBody Map map) throws Exception{ + service.addMenu(map); + } + + @PostMapping("updateMenu") + public void updateMenu(@RequestBody Map map) throws Exception{ + service.updateMenu(map); + } + /** * 列出所有菜单树,并且将角色所拥有的菜单列表作出标记 * @param roleId 角色ID diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/convertor/MenuEntityVoConvertor.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/convertor/MenuEntityVoConvertor.java index 9fd13bab..440c268d 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/convertor/MenuEntityVoConvertor.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/convertor/MenuEntityVoConvertor.java @@ -115,7 +115,7 @@ public class MenuEntityVoConvertor implements EntityVoConverter implements IdClearable { //ID,主键 @Id @GeneratedValue(generator = "system-uuid") @@ -103,6 +104,21 @@ public abstract class MenuEntity extends AuditorEntity implements IdClearable { @JoinColumn(name="PARENT_ID_") protected MenuGroupEntity parent; + public static void toVo(MenuVo vo, MenuEntity entity){ + if(vo!=null && entity!=null){ + CorporationAuditorEntity.toVo(vo,entity); + vo.setId(entity.getId()); + vo.setType(entity.getType()); + vo.setName(entity.getName()); + vo.setTitleI18nKey(entity.getTitleI18nKey()); + vo.setIcon(entity.getIcon()); + vo.setEnable(entity.getEnable()); + vo.setOrder(entity.getOrder()); + vo.setAuthorizeExpression(entity.getAuthorizeExpression()); + vo.setParent(entity.getParent()==null?null:entity.getParent().getId()); + } + } + public String getId() { return id; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuGroupEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuGroupEntity.java index 878e5952..dc28f072 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuGroupEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuGroupEntity.java @@ -1,5 +1,8 @@ package io.sc.platform.system.menu.jpa.entity; +import io.sc.platform.system.api.menu.MenuGroupVo; +import io.sc.platform.system.api.menu.MenuVo; + import javax.persistence.*; import java.util.ArrayList; import java.util.List; @@ -20,6 +23,13 @@ public class MenuGroupEntity extends MenuEntity { this.setId(id); } + @Override + public MenuVo toVo() { + MenuGroupVo vo =new MenuGroupVo(); + MenuEntity.toVo(vo,this); + return vo; + } + public List getChildren() { return children; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuJavascriptEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuJavascriptEntity.java index 5fcaac49..6cf003b9 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuJavascriptEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuJavascriptEntity.java @@ -1,5 +1,8 @@ package io.sc.platform.system.menu.jpa.entity; +import io.sc.platform.system.api.menu.MenuJavascriptVo; +import io.sc.platform.system.api.menu.MenuVo; + import javax.persistence.Column; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @@ -21,6 +24,14 @@ public class MenuJavascriptEntity extends MenuEntity { this.id =id; } + @Override + public MenuVo toVo() { + MenuJavascriptVo vo =new MenuJavascriptVo(); + MenuEntity.toVo(vo,this); + vo.setJavaScript(this.getJavaScript()); + return vo; + } + /** * 获取 javascript 脚本 * @return javascript 脚本 diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuRouteEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuRouteEntity.java index 4c6a8f86..c80bd5c3 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuRouteEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuRouteEntity.java @@ -2,6 +2,9 @@ package io.sc.platform.system.menu.jpa.entity; import io.sc.platform.orm.converter.MapStringConverter; import io.sc.platform.orm.converter.SetStringConverter; +import io.sc.platform.system.api.menu.MenuJavascriptVo; +import io.sc.platform.system.api.menu.MenuRouteVo; +import io.sc.platform.system.api.menu.MenuVo; import javax.persistence.Column; import javax.persistence.Convert; @@ -33,6 +36,15 @@ public class MenuRouteEntity extends MenuEntity { this.id =id; } + @Override + public MenuVo toVo() { + MenuRouteVo vo =new MenuRouteVo(); + MenuEntity.toVo(vo,this); + vo.setRouteName(this.getRouteName()); + vo.setRouteQuery(this.getRouteQuery()); + return vo; + } + public String getRouteName() { return routeName; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuSeperatorEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuSeperatorEntity.java index 5eb5be26..07813205 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuSeperatorEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuSeperatorEntity.java @@ -1,5 +1,9 @@ package io.sc.platform.system.menu.jpa.entity; +import io.sc.platform.system.api.menu.MenuRouteVo; +import io.sc.platform.system.api.menu.MenuSeperatorVo; +import io.sc.platform.system.api.menu.MenuVo; + import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @@ -13,4 +17,11 @@ public class MenuSeperatorEntity extends MenuEntity { public MenuSeperatorEntity(String id) { this.id =id; } + + @Override + public MenuVo toVo() { + MenuSeperatorVo vo =new MenuSeperatorVo(); + MenuEntity.toVo(vo,this); + return vo; + } } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuUrlEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuUrlEntity.java index 7060f518..26d71c9a 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuUrlEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/entity/MenuUrlEntity.java @@ -1,5 +1,8 @@ package io.sc.platform.system.menu.jpa.entity; +import io.sc.platform.system.api.menu.MenuSeperatorVo; +import io.sc.platform.system.api.menu.MenuUrlVo; +import io.sc.platform.system.api.menu.MenuVo; import io.sc.platform.system.enums.UrlOpenType; import javax.persistence.*; @@ -26,6 +29,15 @@ public class MenuUrlEntity extends MenuEntity { this.id =id; } + @Override + public MenuVo toVo() { + MenuUrlVo vo =new MenuUrlVo(); + MenuEntity.toVo(vo,this); + vo.setUrl(this.getUrl()); + vo.setUrlOpenType(this.getUrlOpenType()); + return vo; + } + /** * 获取菜单URL * @return 菜单URL diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/support/MenuEntityJsonSerializer.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/support/MenuEntityJsonSerializer.java index 53b73a98..6f93b138 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/support/MenuEntityJsonSerializer.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/support/MenuEntityJsonSerializer.java @@ -7,6 +7,9 @@ import com.fasterxml.jackson.databind.SerializerProvider; import io.sc.platform.orm.entity.support.AuditorEntityJsonSerializer; import io.sc.platform.orm.entity.support.CorporationAuditorEntityJsonSerializer; import io.sc.platform.system.menu.jpa.entity.MenuEntity; +import io.sc.platform.system.menu.jpa.entity.MenuJavascriptEntity; +import io.sc.platform.system.menu.jpa.entity.MenuRouteEntity; +import io.sc.platform.system.menu.jpa.entity.MenuUrlEntity; import io.sc.platform.system.org.jpa.entity.OrgEntity; import java.io.IOException; @@ -16,10 +19,25 @@ public class MenuEntityJsonSerializer extends JsonSerializer{ public void serialize(MenuEntity value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException { gen.writeStartObject(); gen.writeObjectField("id", value.getId()); + gen.writeObjectField("type", value.getType()); gen.writeObjectField("name", value.getName()); gen.writeObjectField("titleI18nKey", value.getTitleI18nKey()); gen.writeObjectField("enable", value.getEnable()); + gen.writeObjectField("icon", value.getIcon()); + gen.writeObjectField("order", value.getOrder()); gen.writeObjectField("parentId", value.getParent()==null?null:value.getParent().getId()); + if(value instanceof MenuRouteEntity){ + MenuRouteEntity entity =(MenuRouteEntity)value; + gen.writeObjectField("routeName", entity.getRouteName()); + gen.writeObjectField("routeQuery", entity.getRouteQuery()); + }else if(value instanceof MenuJavascriptEntity){ + MenuJavascriptEntity entity =(MenuJavascriptEntity)value; + gen.writeObjectField("javaScript", entity.getJavaScript()); + }else if(value instanceof MenuUrlEntity){ + MenuUrlEntity entity =(MenuUrlEntity)value; + gen.writeObjectField("url", entity.getUrl()); + gen.writeObjectField("urlOpenType", entity.getUrlOpenType()); + } AuditorEntityJsonSerializer.serializeJson(value, gen, serializers); gen.writeEndObject(); } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/service/MenuService.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/service/MenuService.java index e02f0570..a31abfa6 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/service/MenuService.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/service/MenuService.java @@ -9,8 +9,14 @@ import io.sc.platform.system.menu.jpa.repository.MenuRepository; import io.sc.platform.system.org.jpa.entity.OrgEntity; import java.util.List; +import java.util.Map; public interface MenuService extends DaoService { + public void addMenu(Map map) throws Exception; + + public void updateMenu(Map map) throws Exception; + + public List getMenusByUser(String userId) throws Exception; diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/service/impl/MenuServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/service/impl/MenuServiceImpl.java index a6499c26..6d805b03 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/service/impl/MenuServiceImpl.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/service/impl/MenuServiceImpl.java @@ -1,5 +1,7 @@ package io.sc.platform.system.menu.service.impl; +import com.fasterxml.jackson.core.type.TypeReference; +import io.sc.platform.core.util.ObjectMapper4Json; import io.sc.platform.core.util.TreeBuilder; import io.sc.platform.jdbc.util.SqlBatcher; import io.sc.platform.mvc.support.CascadeMany2Many; @@ -7,19 +9,17 @@ import io.sc.platform.orm.service.impl.DaoServiceImpl; import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryResult; import io.sc.platform.system.api.menu.MenuVo; -import io.sc.platform.system.api.org.OrgVo; import io.sc.platform.system.menu.convertor.MenuEntityPluginConvertor; import io.sc.platform.system.menu.convertor.MenuEntityVoConvertor; import io.sc.platform.system.menu.jpa.entity.MenuEntity; +import io.sc.platform.system.menu.jpa.entity.MenuGroupEntity; +import io.sc.platform.system.menu.jpa.entity.MenuRouteEntity; import io.sc.platform.system.menu.jpa.repository.MenuRepository; import io.sc.platform.system.menu.service.MenuService; import io.sc.platform.system.menu.service.support.MenuEntityTreeBuilder; -import io.sc.platform.system.org.convertor.OrgEntityVoConverter; -import io.sc.platform.system.org.jpa.entity.OrgEntity; import io.sc.platform.system.plugins.PluginManager; import io.sc.platform.system.plugins.item.MenuItem; import io.sc.platform.system.role.jpa.entity.RoleEntity; -import io.sc.platform.system.user.jpa.entity.UserEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.jpa.domain.Specification; import org.springframework.jdbc.core.JdbcTemplate; @@ -37,6 +37,74 @@ public class MenuServiceImpl extends DaoServiceImpl treeBuilder =new MenuEntityTreeBuilder(); @Autowired private JdbcTemplate jdbcTemplate; +/* + @Override + public MenuEntity add(MenuEntity entity) throws Exception { + new InsertIntoSqlBuilder().table("SYS_MENU") + .field("ID_",UUID.randomUUID().toString()) + .field("TYPE_",entity.getType()) + .field("NAME_",entity.getName()) + .field("TITLE_I18N_KEY_",entity.getName()) + return super.add(entity); + } +*/ + + @Transactional + public void addMenu(Map map) throws Exception{ + String parentId =map.get("parentId"); + if(!StringUtils.hasText(parentId)){ + MenuGroupEntity entity = new MenuGroupEntity(); + entity.setName(map.get("name")); + entity.setTitleI18nKey(map.get("name")); + entity.setIcon(map.get("icon")); + entity.setEnable(Boolean.parseBoolean(map.get("enable"))); + entity.setOrder(Integer.parseInt(map.get("order"))); + this.add(entity); + return; + } + + MenuEntity parentEntity =this.findById(parentId); + if(parentEntity!=null && parentEntity instanceof MenuGroupEntity) { + MenuGroupEntity parent = (MenuGroupEntity) parentEntity; + MenuRouteEntity entity = new MenuRouteEntity(); + entity.setName(map.get("name")); + entity.setTitleI18nKey(map.get("name")); + entity.setIcon(map.get("icon")); + entity.setEnable(Boolean.parseBoolean(map.get("enable"))); + entity.setOrder(Integer.parseInt(map.get("order"))); + entity.setRouteName(map.get("routeName")); + String routeQuery =map.get("routeQuery"); + if(StringUtils.hasText(routeQuery)) { + entity.setRouteQuery(ObjectMapper4Json.getMapper().readValue(map.get("routeQuery"), new TypeReference>() {})); + } + entity.setParent(parent); + this.add(entity); + } + } + + @Transactional + public void updateMenu(Map map) throws Exception{ + String id =map.get("id"); + if(StringUtils.hasText(id)){ + MenuEntity menuEntity =this.findById(id); + if(menuEntity!=null && menuEntity instanceof MenuRouteEntity) { + MenuRouteEntity entity = (MenuRouteEntity) menuEntity; + entity.setName(map.get("name")); + entity.setTitleI18nKey(map.get("name")); + entity.setIcon(map.get("icon")); + entity.setEnable(Boolean.parseBoolean(map.get("enable"))); + entity.setOrder(Integer.parseInt(map.get("order"))); + entity.setRouteName(map.get("routeName")); + String routeQuery = map.get("routeQuery"); + System.out.println(routeQuery); + if (StringUtils.hasText(routeQuery)) { + entity.setRouteQuery(ObjectMapper4Json.getMapper().readValue(routeQuery, new TypeReference>() { + })); + } + repository.save(entity); + } + } + } @Override public List getMenusByUser(String userId) throws Exception { @@ -296,6 +364,9 @@ public class MenuServiceImpl extends DaoServiceImpl menuItems =PluginManager.getInstance().getMenuItems(); List entities =pluginConverter.fromVo(menuItems); + for(MenuEntity entity : entities){ + entity.setCorporationCode("_PRIMARY_"); + } entities =treeBuilder.buildAndGetRoots(entities); for(MenuEntity entity : entities){ entity.clearId(); diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/controller/OrgWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/controller/OrgWebController.java index 30459fd7..2c0afd76 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/controller/OrgWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/controller/OrgWebController.java @@ -4,8 +4,8 @@ import io.sc.platform.mvc.controller.support.RestCrudController; import io.sc.platform.mvc.support.One2Many; import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryResult; +import io.sc.platform.orm.util.EntityVoConvertor; import io.sc.platform.system.api.org.OrgVo; -import io.sc.platform.system.org.convertor.OrgEntityVoConverter; import io.sc.platform.system.org.jpa.entity.OrgEntity; import io.sc.platform.system.org.jpa.repository.OrgRepository; import io.sc.platform.system.org.service.OrgService; @@ -16,9 +16,7 @@ import java.util.List; @RestController @RequestMapping("/api/system/org") -public class OrgWebController extends RestCrudController { - private OrgEntityVoConverter converter =new OrgEntityVoConverter(); - +public class OrgWebController extends RestCrudController { /** * 查询用户所属机构 * @param userId 用户ID @@ -45,7 +43,7 @@ public class OrgWebController extends RestCrudController listOrgsByUser(@RequestParam(name="userId",required=false) String userId, QueryParameter queryParameter) throws Exception{ if(StringUtils.hasText(userId)){ List result =service.listOrgsByUser(userId,queryParameter); - return converter.toVo(result); + return EntityVoConvertor.toVo(result); } return QueryResult.emptyList(); } @@ -61,7 +59,7 @@ public class OrgWebController extends RestCrudController listOtherOrgsByUser(@RequestParam(name="userId",required=false) String userId,QueryParameter queryParameter) throws Exception{ if(StringUtils.hasText(userId)){ List result =service.listOtherOrgsByUser(userId,queryParameter); - return converter.toVo(result); + return EntityVoConvertor.toVo(result); } return QueryResult.emptyList(); } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/convertor/OrgEntityVoConverter.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/convertor/OrgEntityVoConverter.java deleted file mode 100644 index 8ad39639..00000000 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/convertor/OrgEntityVoConverter.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.sc.platform.system.org.convertor; - -import io.sc.platform.orm.EntityVoConverter; -import io.sc.platform.system.api.org.OrgVo; -import io.sc.platform.system.org.jpa.entity.OrgEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class OrgEntityVoConverter implements EntityVoConverter { - private static final Logger log = LoggerFactory.getLogger(OrgEntityVoConverter.class); - - @Override - public OrgVo toVo(OrgEntity entity) { - if(entity==null){ - return null; - } - OrgVo vo =new OrgVo(); - vo.setId(entity.getId()); - vo.setCode(entity.getCode()); - vo.setName(entity.getName()); - vo.setDescription(entity.getDescription()); - vo.setEnable(entity.getEnable()); - vo.setDepartment(entity.getIsDepartment()); - vo.setParentId(entity.getParent()==null?null:entity.getParent().getId()); - return vo; - } - - @Override - public OrgEntity fromVo(OrgVo vo) { - if(vo==null){ - return null; - } - return null; - } -} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/jpa/entity/OrgEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/jpa/entity/OrgEntity.java index 42014f56..94363aa3 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/jpa/entity/OrgEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/jpa/entity/OrgEntity.java @@ -1,9 +1,11 @@ package io.sc.platform.system.org.jpa.entity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; import io.sc.platform.orm.converter.NumericBooleanConverter; import io.sc.platform.orm.entity.CorporationAuditorEntity; import io.sc.platform.system.api.org.OrgVo; +import io.sc.platform.system.api.parameter.ParameterVo; import io.sc.platform.system.menu.jpa.entity.MenuEntity; import io.sc.platform.system.org.jpa.support.OrgEntityJsonSerializer; import io.sc.platform.system.user.jpa.entity.UserEntity; @@ -20,7 +22,7 @@ import java.util.List; @Entity @Table(name="SYS_ORG") @JsonSerialize(using = OrgEntityJsonSerializer.class) -public class OrgEntity extends CorporationAuditorEntity { +public class OrgEntity extends CorporationAuditorEntity { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid2") @@ -76,8 +78,18 @@ public class OrgEntity extends CorporationAuditorEntity { this.id =id; } - public static OrgEntity fromVo(OrgVo vo) { - return new OrgEntity(); + @Override + public OrgVo toVo() { + OrgVo vo =new OrgVo(); + CorporationAuditorEntity.toVo(vo,this); + vo.setId(this.getId()); + vo.setCode(this.getCode()); + vo.setName(this.getName()); + vo.setDescription(this.getDescription()); + vo.setEnable(this.getEnable()); + vo.setDepartment(this.getIsDepartment()); + vo.setParent(this.getParent()==null?null:this.getParent().getId()); + return vo; } /** diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/service/impl/OrgServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/service/impl/OrgServiceImpl.java index d394bf15..5bc7eec1 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/service/impl/OrgServiceImpl.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/service/impl/OrgServiceImpl.java @@ -4,12 +4,11 @@ import io.sc.platform.jdbc.util.SqlBatcher; import io.sc.platform.orm.service.impl.DaoServiceImpl; import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryResult; +import io.sc.platform.orm.util.EntityVoConvertor; import io.sc.platform.system.api.org.OrgVo; -import io.sc.platform.system.org.convertor.OrgEntityVoConverter; import io.sc.platform.system.org.jpa.entity.OrgEntity; import io.sc.platform.system.org.jpa.repository.OrgRepository; import io.sc.platform.system.org.service.OrgService; -import io.sc.platform.system.role.jpa.entity.RoleEntity; import io.sc.platform.system.user.jpa.entity.UserEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; @@ -19,11 +18,11 @@ import org.springframework.jdbc.core.RowCallbackHandler; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; -import javax.persistence.criteria.*; +import javax.persistence.criteria.Join; +import javax.persistence.criteria.JoinType; import javax.transaction.Transactional; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -35,11 +34,11 @@ public class OrgServiceImpl extends DaoServiceImpl listAllOrgsWithSelectedStatusByUser(String userId, QueryParameter queryParameter) throws Exception { - OrgEntityVoConverter converter =new OrgEntityVoConverter(); List allOrgEntities =repository.findAll(); List selectedOrgEntities =listOrgsByUser(userId,queryParameter); - List allOrgs =converter.toVo(allOrgEntities); - List selectedOrgs =converter.toVo(selectedOrgEntities); + + List allOrgs =EntityVoConvertor.toVo(allOrgEntities); + List selectedOrgs =EntityVoConvertor.toVo(selectedOrgEntities); Set selectedOrgIds =new HashSet<>(); for(OrgVo selectedOrg : selectedOrgs){ selectedOrgIds.add(selectedOrg.getId()); diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java index d119ca11..ba0a026b 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java @@ -1,6 +1,7 @@ package io.sc.platform.system.parameter.controller; import io.sc.platform.mvc.controller.support.RestCrudController; +import io.sc.platform.system.api.parameter.ParameterVo; import io.sc.platform.system.parameter.jpa.entity.ParameterEntity; import io.sc.platform.system.parameter.jpa.repository.ParameterRepository; import io.sc.platform.system.parameter.service.ParameterService; @@ -9,6 +10,6 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("api/system/parameter") -public class ParameterWebController extends RestCrudController { +public class ParameterWebController extends RestCrudController { } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/convertor/ParameterEntityVoConverter.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/convertor/ParameterEntityVoConverter.java deleted file mode 100644 index 84589495..00000000 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/convertor/ParameterEntityVoConverter.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.sc.platform.system.parameter.convertor; - -import io.sc.platform.orm.EntityVoConverter; -import io.sc.platform.system.api.org.OrgVo; -import io.sc.platform.system.api.parameter.ParameterVo; -import io.sc.platform.system.org.jpa.entity.OrgEntity; -import io.sc.platform.system.parameter.jpa.entity.ParameterEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ParameterEntityVoConverter implements EntityVoConverter { - private static final Logger log = LoggerFactory.getLogger(ParameterEntityVoConverter.class); - - @Override - public ParameterVo toVo(ParameterEntity entity) { - if(entity==null){ - return null; - } - ParameterVo vo =new ParameterVo(); - vo.setId(entity.getId()); - vo.setCode(entity.getCode()); - vo.setValue(entity.getValue()); - vo.setParentId(entity.getParent()==null?null:entity.getParent().getId()); - return vo; - } - - @Override - public ParameterEntity fromVo(ParameterVo vo) { - if(vo==null){ - return null; - } - return null; - } -} diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/entity/ParameterEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/entity/ParameterEntity.java index e98c6f74..c0249751 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/entity/ParameterEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/entity/ParameterEntity.java @@ -1,7 +1,9 @@ package io.sc.platform.system.parameter.jpa.entity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.sc.platform.orm.api.vo.BaseVo; import io.sc.platform.orm.entity.CorporationAuditorEntity; +import io.sc.platform.system.api.parameter.ParameterVo; import io.sc.platform.system.parameter.jpa.support.ParameterEntityJsonSerializer; import org.hibernate.annotations.GenericGenerator; @@ -13,8 +15,7 @@ import javax.validation.constraints.Size; */ @Entity @Table(name="SYS_PARAMETER") -@JsonSerialize(using = ParameterEntityJsonSerializer.class) -public class ParameterEntity extends CorporationAuditorEntity { +public class ParameterEntity extends CorporationAuditorEntity { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid2") @@ -39,6 +40,17 @@ public class ParameterEntity extends CorporationAuditorEntity { this.id =id; } + @Override + public ParameterVo toVo() { + ParameterVo vo =new ParameterVo(); + CorporationAuditorEntity.toVo(vo,this); + vo.setId(this.getId()); + vo.setCode(this.getCode()); + vo.setValue(this.getValue()); + vo.setParent(this.getParent()==null?null:this.getParent().getId()); + return vo; + } + public String getId() { return id; } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/role/controller/RoleWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/role/controller/RoleWebController.java index cb13d6c5..b4dc25f9 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/role/controller/RoleWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/role/controller/RoleWebController.java @@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/system/role") -public class RoleWebController extends RestCrudController { +public class RoleWebController extends RestCrudController { private RoleEntityVoConverter converter =new RoleEntityVoConverter(); /** diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/role/jpa/entity/RoleEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/role/jpa/entity/RoleEntity.java index 66a3c12b..1e5bc1d0 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/role/jpa/entity/RoleEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/role/jpa/entity/RoleEntity.java @@ -23,7 +23,7 @@ import java.util.Set; @Entity @Table(name="SYS_ROLE") @JsonSerialize(using = RoleEntityJsonSerializer.class) -public class RoleEntity extends CorporationAuditorEntity { +public class RoleEntity extends CorporationAuditorEntity { //主键 @Id @GeneratedValue(generator = "system-uuid") @@ -65,16 +65,6 @@ public class RoleEntity extends CorporationAuditorEntity { @ManyToMany(mappedBy="roles",fetch=FetchType.LAZY,cascade={CascadeType.MERGE,CascadeType.REFRESH}) private List menus =new ArrayList(); - //角色可访问的帮助ID集合 - @Column(name="HELP_IDS_", length=1024) - @Convert(converter = SetStringConverter.class) - private Set helpIds =new HashSet(); - - //角色可访问的首选项(系统配置)ID集合 - @Column(name="PREFERENCE_IDS_", length=1024) - @Convert(converter = SetStringConverter.class) - private Set preferenceIds =new HashSet(); - public RoleEntity(){} public RoleEntity(String id){ @@ -92,8 +82,17 @@ public class RoleEntity extends CorporationAuditorEntity { this.name =name; } - public static RoleEntity fromVo(RoleVo vo) { - return new RoleEntity(); + @Override + public RoleVo toVo() { + RoleVo vo =new RoleVo(); + CorporationAuditorEntity.toVo(vo,this); + vo.setId(this.getId()); + vo.setCode(this.getCode()); + vo.setName(this.getName()); + vo.setDescription(this.getDescription()); + vo.setEnable(this.getEnable()); + vo.setIndexPageUrl(this.getIndexPageUrl()); + return vo; } /** @@ -224,38 +223,6 @@ public class RoleEntity extends CorporationAuditorEntity { this.menus = menus; } - /** - * 获取帮助 ID 集合 - * @return 帮助 ID 集合 - */ - public Set getHelpIds() { - return helpIds; - } - - /** - * 设置帮助 ID 集合 - * @param helpIds 帮助 ID 集合 - */ - public void setHelpIds(Set helpIds) { - this.helpIds = helpIds; - } - - /** - * 获取首选项(系统配置) ID 集合 - * @return 首选项(系统配置) ID 集合 - */ - public Set getPreferenceIds() { - return preferenceIds; - } - - /** - * 设置首选项(系统配置) ID 集合 - * @param preferenceIds 首选项(系统配置) ID 集合 - */ - public void setPreferenceIds(Set preferenceIds) { - this.preferenceIds = preferenceIds; - } - /** * 增加用户 * @param users 用户 diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/controller/UserWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/controller/UserWebController.java index 0d6c9f18..28f300a0 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/controller/UserWebController.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/controller/UserWebController.java @@ -7,8 +7,8 @@ import io.sc.platform.orm.api.exception.UserNewPasswordEmptyException; import io.sc.platform.orm.api.exception.UserRawPasswordEmptyException; import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryResult; +import io.sc.platform.orm.util.EntityVoConvertor; import io.sc.platform.system.api.user.UserVo; -import io.sc.platform.system.user.convertor.UserEntityVoConverter; 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.UserService; @@ -25,9 +25,7 @@ import java.util.Map; @RestController @RequestMapping("/api/system/user") -public class UserWebController extends RestCrudController { - private UserEntityVoConverter userConverter =new UserEntityVoConverter(); - +public class UserWebController extends RestCrudController { @GetMapping("session") public UserSession session(HttpServletRequest request) throws Exception { return service.getUserSession(request); @@ -125,7 +123,7 @@ public class UserWebController extends RestCrudController queryUsersByRole(@RequestParam(name="roleId",required=false) String roleId, QueryParameter parameter) throws Exception{ if(StringUtils.hasText(roleId)){ Page result =service.queryUsersByRole(roleId,parameter); - return userConverter.toVo(result); + return EntityVoConvertor.toVo(result); } return QueryResult.emptyPage(); } @@ -141,7 +139,7 @@ public class UserWebController extends RestCrudController queryOtherUsersByRole(@RequestParam(name="roleId",required=false) String roleId,QueryParameter parameter) throws Exception{ if(StringUtils.hasText(roleId)){ Page result =service.queryOtherUsersByRole(roleId,parameter); - return userConverter.toVo(result); + return EntityVoConvertor.toVo(result); } return QueryResult.emptyPage(); } @@ -157,7 +155,7 @@ public class UserWebController extends RestCrudController queryUsersByOrg(@RequestParam(name="orgId",required=false) String orgId,QueryParameter parameter) throws Exception{ if(StringUtils.hasText(orgId)){ Page result =service.queryUsersByOrg(orgId,parameter); - return userConverter.toVo(result); + return EntityVoConvertor.toVo(result); } return QueryResult.emptyPage(); } @@ -173,7 +171,7 @@ public class UserWebController extends RestCrudController queryOtherUsersByOrg(@RequestParam(name="orgId",required=false) String orgId,QueryParameter parameter) throws Exception{ if(StringUtils.hasText(orgId)){ Page result =service.queryOtherUsersByOrg(orgId,parameter); - return userConverter.toVo(result); + return EntityVoConvertor.toVo(result); } return QueryResult.emptyPage(); } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/convertor/UserEntityVoConverter.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/convertor/UserEntityVoConverter.java index bd7692e9..9338d60b 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/convertor/UserEntityVoConverter.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/convertor/UserEntityVoConverter.java @@ -1,20 +1,37 @@ package io.sc.platform.system.user.convertor; import io.sc.platform.orm.EntityVoConverter; +import io.sc.platform.orm.entity.CorporationAuditorEntity; import io.sc.platform.system.api.user.UserVo; import io.sc.platform.system.user.jpa.entity.UserEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; public class UserEntityVoConverter implements EntityVoConverter { private static final Logger log = LoggerFactory.getLogger(UserEntityVoConverter.class); + @Override + public UserVo desensitize(UserEntity entity) { + UserVo vo =toVo(entity); + if(vo!=null){ + vo.setEmail(desensitizeString(vo.getEmail())); + vo.setPhone(desensitizeString(vo.getMobile())); + vo.setMobile(desensitizeString(vo.getMobile())); + vo.setWeixin(desensitizeString(vo.getWeixin())); + vo.setQq(desensitizeString(vo.getQq())); + } + return vo; + } + @Override public UserVo toVo(UserEntity entity) { if(entity==null){ return null; } UserVo vo =new UserVo(); + CorporationAuditorEntity.toVo(vo,entity); + vo.setId(entity.getId()); vo.setLoginName(entity.getLoginName()); vo.setUserName(entity.getUserName()); @@ -40,4 +57,11 @@ public class UserEntityVoConverter implements EntityVoConverter= 11) { + return object.substring(0, 4) + "****" + object.substring(8); + } + return object; + } } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/jpa/entity/UserEntity.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/jpa/entity/UserEntity.java index 61d7fec4..fbc5c3a6 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/jpa/entity/UserEntity.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/jpa/entity/UserEntity.java @@ -1,12 +1,15 @@ package io.sc.platform.system.user.jpa.entity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.sc.platform.orm.converter.EncoderStringConverter; import io.sc.platform.orm.converter.NumericBooleanConverter; import io.sc.platform.orm.entity.CorporationAuditorEntity; +import io.sc.platform.system.api.user.UserVo; import io.sc.platform.system.org.jpa.entity.OrgEntity; import io.sc.platform.system.role.jpa.entity.RoleEntity; import io.sc.platform.system.user.jpa.support.UserEntityJsonSerializer; import org.hibernate.annotations.GenericGenerator; +import org.springframework.util.StringUtils; import javax.persistence.*; import javax.validation.constraints.Size; @@ -19,7 +22,7 @@ import java.util.List; @Entity @Table(name="SYS_USER") @JsonSerialize(using = UserEntityJsonSerializer.class) -public class UserEntity extends CorporationAuditorEntity { +public class UserEntity extends CorporationAuditorEntity { //主键 @Id @GeneratedValue(generator = "system-uuid") @@ -99,26 +102,31 @@ public class UserEntity extends CorporationAuditorEntity { //email @Column(name="EMAIL_",length=255) @Size(max=255) + @Convert(converter= EncoderStringConverter.class) private String email; //电话 - @Column(name="PHONE_",length=18) - @Size(max=18) + @Column(name="PHONE_",length=128) + @Size(max=128) + @Convert(converter= EncoderStringConverter.class) private String phone; //手机号 - @Column(name="MOBILE_",length=14) - @Size(max=14) + @Column(name="MOBILE_",length=128) + @Size(max=128) + @Convert(converter= EncoderStringConverter.class) private String mobile; //微信号 - @Column(name="WEIXIN_",length=255) - @Size(max=255) + @Column(name="WEIXIN_",length=128) + @Size(max=128) + @Convert(converter= EncoderStringConverter.class) private String weixin; //QQ号 - @Column(name="QQ_",length=255) - @Size(max=255) + @Column(name="QQ_",length=128) + @Size(max=128) + @Convert(converter= EncoderStringConverter.class) private String qq; public UserEntity() {} @@ -135,6 +143,40 @@ public class UserEntity extends CorporationAuditorEntity { this.userName =userName; } + @Override + public UserVo desensitize() { + UserVo vo =toVo(); + vo.setEmail(desensitizeString(vo.getEmail())); + vo.setPhone(desensitizeString(vo.getMobile())); + vo.setMobile(desensitizeString(vo.getMobile())); + vo.setWeixin(desensitizeString(vo.getWeixin())); + vo.setQq(desensitizeString(vo.getQq())); + return vo; + } + + @Override + public UserVo toVo() { + UserVo vo =new UserVo(); + CorporationAuditorEntity.toVo(vo,this); + + vo.setId(this.getId()); + vo.setLoginName(this.getLoginName()); + vo.setUserName(this.getUserName()); + vo.setDescription(this.getDescription()); + vo.setEnable(this.getEnable()); + vo.setAccountExpired(this.getAccountExpired()); + vo.setAccountLocked(this.getAccountLocked()); + vo.setCredentialsExpired(this.getCredentialsExpired()); + vo.setDefaultRoleId(this.getDefaultRoleId()); + vo.setDefaultOrgId(this.getDefaultOrgId()); + vo.setEmail(this.getEmail()); + vo.setPhone(this.getPhone()); + vo.setMobile(this.getMobile()); + vo.setWeixin(this.getWeixin()); + vo.setQq(this.getQq()); + return vo; + } + /** * 获取ID * @return ID @@ -519,5 +561,12 @@ public class UserEntity extends CorporationAuditorEntity { return false; return true; } + + private String desensitizeString(String object) { + if (StringUtils.hasText(object) && object.length() >= 11) { + return object.substring(0, 4) + "****" + object.substring(8); + } + return object; + } } diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/UserService.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/UserService.java index 6dc4ea5d..11c82cbb 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/UserService.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/UserService.java @@ -2,7 +2,6 @@ package io.sc.platform.system.user.service; import io.sc.platform.orm.service.DaoService; import io.sc.platform.orm.service.support.QueryParameter; -import io.sc.platform.system.api.i18n.I18nLanguage; 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; diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/impl/UserServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/impl/UserServiceImpl.java index 0b8ba1d9..a29f00a0 100644 --- a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/impl/UserServiceImpl.java +++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/impl/UserServiceImpl.java @@ -68,6 +68,26 @@ public class UserServiceImpl extends DaoServiceImpl userIds) throws Exception{ diff --git a/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/messages.json b/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/messages.json new file mode 100644 index 00000000..5041b440 --- /dev/null +++ b/io.sc.platform.system/src/main/resources/META-INF/platform/plugins/messages.json @@ -0,0 +1,5 @@ +{ + "includes":[ + "io/sc/platform/system/i18n/initializer" + ] +} \ No newline at end of file diff --git a/io.sc.platform.system/src/main/resources/META-INF/services/io.sc.platform.core.initializer.ApplicationInitializer b/io.sc.platform.system/src/main/resources/META-INF/services/io.sc.platform.core.initializer.ApplicationInitializer index bf469029..29b76602 100644 --- a/io.sc.platform.system/src/main/resources/META-INF/services/io.sc.platform.core.initializer.ApplicationInitializer +++ b/io.sc.platform.system/src/main/resources/META-INF/services/io.sc.platform.core.initializer.ApplicationInitializer @@ -1,3 +1,4 @@ io.sc.platform.system.initializer.MenuInitializer io.sc.platform.system.initializer.RoleAndMenuInitializer -io.sc.platform.system.initializer.ParameterInitializer \ No newline at end of file +io.sc.platform.system.initializer.ParameterInitializer +io.sc.platform.system.initializer.OrgInitializer \ No newline at end of file diff --git a/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/initializer.properties b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/initializer.properties new file mode 100644 index 00000000..12d47004 --- /dev/null +++ b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/initializer.properties @@ -0,0 +1,11 @@ +io.sc.platform.system.initializer.ParameterInitializer.name=Parameter Initializer +io.sc.platform.system.initializer.ParameterInitializer.description=initialize parameter if not exists + +io.sc.platform.system.initializer.MenuInitializer.name=Menu Initializer +io.sc.platform.system.initializer.MenuInitializer.description=initialize menu if not exists + +io.sc.platform.system.initializer.RoleAndMenuInitializer.name=Role and Menu Initializer +io.sc.platform.system.initializer.RoleAndMenuInitializer.description=initialize Role and Menu if not exists + +io.sc.platform.system.initializer.OrgInitializer.name=Org Initializer +io.sc.platform.system.initializer.OrgInitializer.description=initialize Org if not exists \ No newline at end of file diff --git a/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/initializer_tw_CN.properties b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/initializer_tw_CN.properties new file mode 100644 index 00000000..b6793f90 --- /dev/null +++ b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/initializer_tw_CN.properties @@ -0,0 +1,11 @@ +io.sc.platform.system.initializer.ParameterInitializer.name=\u53C2\u6570\u521D\u59CB\u5316\u5668 +io.sc.platform.system.initializer.ParameterInitializer.description=\u7576\u7CFB\u7D71\u7F3A\u5931\u53C2\u6570\u6642, \u81EA\u52D5\u5275\u5EFA\u9ED8\u8A8D\u53C2\u6570 + +io.sc.platform.system.initializer.MenuInitializer.name=\u83DC\u55AE\u521D\u59CB\u5316\u5668 +io.sc.platform.system.initializer.MenuInitializer.description=\u7576\u7CFB\u7D71\u7F3A\u5931\u83DC\u55AE\u6642, \u81EA\u52D5\u5275\u5EFA\u9ED8\u8A8D\u83DC\u55AE + +io.sc.platform.system.initializer.RoleAndMenuInitializer.name=\u89D2\u8272\u548C\u83DC\u55AE\u59CB\u5316\u5668 +io.sc.platform.system.initializer.RoleAndMenuInitializer.description=\u7576\u7CFB\u7D71\u7F3A\u5931\u89D2\u8272\u548C\u83DC\u55AE\u6642, \u81EA\u52D5\u5275\u5EFA\u9ED8\u8A8D\u89D2\u8272\u548C\u83DC\u55AE + +io.sc.platform.system.initializer.OrgInitializer.name=\u6A5F\u69CB\u59CB\u5316\u5668 +io.sc.platform.system.initializer.OrgInitializer.description=\u7576\u7CFB\u7D71\u7F3A\u5931\u7D50\u69CB\u6642, \u81EA\u52D5\u5275\u5EFA\u9ED8\u8A8D\u6A5F\u69CB \ No newline at end of file diff --git a/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/initializer_zh_CN.properties b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/initializer_zh_CN.properties new file mode 100644 index 00000000..fdafeaf8 --- /dev/null +++ b/io.sc.platform.system/src/main/resources/io/sc/platform/system/i18n/initializer_zh_CN.properties @@ -0,0 +1,11 @@ +io.sc.platform.system.initializer.ParameterInitializer.name=\u53C2\u6570\u521D\u59CB\u5316\u5668 +io.sc.platform.system.initializer.ParameterInitializer.description=\u5F53\u7CFB\u7EDF\u7F3A\u5931\u53C2\u6570\u65F6, \u81EA\u52A8\u521B\u5EFA\u9ED8\u8BA4\u53C2\u6570 + +io.sc.platform.system.initializer.MenuInitializer.name=\u83DC\u5355\u521D\u59CB\u5316\u5668 +io.sc.platform.system.initializer.MenuInitializer.description=\u5F53\u7CFB\u7EDF\u7F3A\u5931\u83DC\u5355\u65F6, \u81EA\u52A8\u521B\u5EFA\u9ED8\u8BA4\u83DC\u5355 + +io.sc.platform.system.initializer.RoleAndMenuInitializer.name=\u89D2\u8272\u548C\u83DC\u5355\u521D\u59CB\u5316\u5668 +io.sc.platform.system.initializer.RoleAndMenuInitializer.description=\u5F53\u7CFB\u7EDF\u7F3A\u5931\u89D2\u8272\u548C\u83DC\u5355\u65F6, \u81EA\u52A8\u521B\u5EFA\u9ED8\u8BA4\u89D2\u8272\u548C\u83DC\u5355 + +io.sc.platform.system.initializer.OrgInitializer.name=\u673A\u6784\u521D\u59CB\u5316\u5668 +io.sc.platform.system.initializer.OrgInitializer.description=\u5F53\u7CFB\u7EDF\u7F3A\u5931\u673A\u6784\u65F6, \u81EA\u52A8\u521B\u5EFA\u9ED8\u8BA4\u673A\u6784 \ No newline at end of file diff --git a/io.sc.platform.system/src/main/resources/liquibase/PF_11.0.0_20220606__System_DDL.xml b/io.sc.platform.system/src/main/resources/liquibase/PF_11.0.0_20220606__System_DDL.xml index 5dc77ff3..c13b8960 100644 --- a/io.sc.platform.system/src/main/resources/liquibase/PF_11.0.0_20220606__System_DDL.xml +++ b/io.sc.platform.system/src/main/resources/liquibase/PF_11.0.0_20220606__System_DDL.xml @@ -13,24 +13,24 @@ - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -44,92 +44,124 @@ - + - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -140,65 +172,76 @@ - + - - - - - - - - - - - + + + + + + + + + + - - - + + + + + + + + - + - + - - - - - - - - + + + + + + + + - + - - + + - - - + + - - - - - - - - + + + + + + + + + + + + + + + + - - + + + + + @@ -235,9 +281,12 @@ - - + + + + + diff --git a/settings.gradle b/settings.gradle index 824de7d7..d512a54a 100755 --- a/settings.gradle +++ b/settings.gradle @@ -29,6 +29,8 @@ include ':io.sc.platform.jdbc.liquibase' //include ':io.sc.platform.jdbc.schemacrawler-14.21.02' include ':io.sc.platform.jdbc.schemacrawler' //include ':io.sc.platform.job.scheduler' +include ':io.sc.platform.job.manager' +include ':io.sc.platform.job.core' include ':io.sc.platform.lcdp' include ':io.sc.platform.lcdp.frontend' include ':io.sc.platform.monitor'