diff --git a/build-version.gradle b/build-version.gradle
index 3b2ee116..dfb853de 100755
--- a/build-version.gradle
+++ b/build-version.gradle
@@ -146,7 +146,7 @@ subprojects {
// ext['oauth2-oidc-sdk.version'] =
// ext['ojdbc.version'] =
// ext['okhttp3.version'] =
- // ext['oracle-database.version'] =
+ // ext['oracle-database.version'] ='12.2.0.1'
// ext['pooled-jms.version'] =
// ext['postgresql.version'] =
// ext['prometheus-pushgateway.version'] =
diff --git a/build.gradle b/build.gradle
index 46346189..ebb425e3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -52,6 +52,7 @@ subprojects {
exclude group: "org.apache.logging.log4j", module: "log4j-to-slf4j"
exclude group: "org.slf4j", module: "slf4j-jdk14"
exclude group: "org.slf4j", module: "slf4j-nop"
+ //exclude group: "com.oracle.database.jdbc", module: "ojdbc8"
}
dependencyManagement {
diff --git a/config/application.properties b/config/application.properties
new file mode 100644
index 00000000..b28b6dfc
--- /dev/null
+++ b/config/application.properties
@@ -0,0 +1,223 @@
+##########################################################################
+#(100) excluded auto configuration - io.sc.platform.core
+##########################################################################
+spring.autoconfigure.exclude =
+
+##########################################################################
+#(150) application configuration - io.sc.platform.core
+##########################################################################
+# - io.sc.platform.core
+application.audit-log-mode = none
+#application.audit-log-mode = none
+#application.audit-log-mode = log
+#application.audit-log-mode = database
+# - io.sc.platform.installer
+application.installer.enabled = true
+# - io.sc.platform.jdbc.liquibase
+application.updater.enabled = true
+# - io.sc.platform.security
+application.default-password = password
+
+##########################################################################
+#(200) spring.main configuration - io.sc.platform.core
+##########################################################################
+spring.main.allow-bean-definition-overriding = false
+spring.main.banner-mode = console
+spring.main.lazy-initialization = false
+spring.main.log-startup-info = true
+spring.main.register-shutdown-hook = true
+
+##########################################################################
+#(210) jasypt encryptor configuration - io.sc.platform.core
+##########################################################################
+jasypt.encryptor.bean = platformJasyptStringEncryptor
+
+##########################################################################
+#(300) web server configuration - io.sc.platform.mvc
+##########################################################################
+#server.address = 127.0.0.1
+server.port = 8080
+server.servlet.context-path = /
+server.servlet.session.timeout = 30m
+server.error.path = /error
+server.error.whitelabel.enabled = true
+server.error.include-exception = true
+server.error.include-binding-errors = always
+server.error.include-message = always
+server.error.include-stacktrace = always
+
+##########################################################################
+#(1000) dataSource configuration - io.sc.platform.jdbc
+##########################################################################
+spring.datasource.items[primary].driver-class-name = org.h2.Driver
+spring.datasource.items[primary].url = jdbc:h2:mem:DB_PLATFORM;DB_CLOSE_DELAY=-1
+spring.datasource.items[primary].username = platform
+spring.datasource.items[primary].password = platform
+
+##########################################################################
+#(1100) jpa configuration - io.sc.platform.orm.jpa
+##########################################################################
+spring.jpa.open-in-view = false
+spring.jpa.show-sql = false
+spring.jpa.generate-ddl = false
+spring.jpa.hibernate.ddl-auto = none
+spring.jpa.hibernate.jdbc.batch_size = 25
+spring.jpa.properties.hibernate.enable_lazy_load_no_trans =true
+spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.H2Dialect
+
+##########################################################################
+#(1500) hikari configuration - io.sc.platform.jdbc
+##########################################################################
+#spring.datasource.items[primary].hikari.autoCommit = true
+#spring.datasource.items[primary].hikari.connectionTimeout = 10000
+#spring.datasource.items[primary].hikari.idleTimeout = 600000
+#spring.datasource.items[primary].hikari.maxLifetime = 1800000
+#spring.datasource.items[primary].hikari.minimumIdle = 10
+#spring.datasource.items[primary].hikari.maximumPoolSize = 10
+#spring.datasource.items[primary].hikari.metricRegistry =
+#spring.datasource.items[primary].hikari.healthCheckRegistry =
+#spring.datasource.items[primary].hikari.poolName =
+#spring.datasource.items[primary].hikari.initializationFailTimeout = 1
+#spring.datasource.items[primary].hikari.isolateInternalQueries = false
+#spring.datasource.items[primary].hikari.allowPoolSuspension = false
+#spring.datasource.items[primary].hikari.readOnly = false
+#spring.datasource.items[primary].hikari.registerMbeans = false
+#spring.datasource.items[primary].hikari.catalog =
+#spring.datasource.items[primary].hikari.connectionInitSql =
+#spring.datasource.items[primary].hikari.driverClassName =
+#spring.datasource.items[primary].hikari.transactionIsolation =
+#spring.datasource.items[primary].hikari.validationTimeout = 5000
+#spring.datasource.items[primary].hikari.leakDetectionThreshold = 0
+#spring.datasource.items[primary].hikari.dataSource =
+#spring.datasource.items[primary].hikari.schema =
+#spring.datasource.items[primary].hikari.threadFactory =
+#spring.datasource.items[primary].hikari.scheduledExecutor =
+
+##########################################################################
+#(2100) spring.session configuration - io.sc.platform.mvc
+##########################################################################
+spring.session.store-type = none
+#spring.session.store-type = jdbc
+#spring.session.store-type = redis
+spring.session.jdbc.initializer.enabled = false
+spring.session.jdbc.cleanup-cron = 0 */5 * * * *
+spring.session.redis.namespace = spring:session
+spring.session.redis.cleanupCron = 0 */5 * * * *
+
+##########################################################################
+#(2200) spring web configuration (WebProperties) - io.sc.platform.mvc
+##########################################################################
+spring.web.resources.add-mappings = true
+spring.web.resources.cache.cachecontrol.cache-public = true
+spring.web.resources.cache.cachecontrol.must-revalidate = true
+spring.web.resources.chain.cache = true
+spring.web.resources.chain.compressed = true
+
+##########################################################################
+#(2300) management http server configuration - io.sc.platform.mvc
+##########################################################################
+management.endpoints.enabled-by-default = true
+management.endpoints.web.exposure.include = *
+management.context-path = /actuator
+management.security.enabled = false
+
+##########################################################################
+#(2400) thymeleaf configuration - io.sc.platform.mvc
+##########################################################################
+spring.thymeleaf.enabled = true
+spring.thymeleaf.cache = false
+spring.thymeleaf.encoding = UTF-8
+spring.thymeleaf.mode = HTML
+spring.thymeleaf.prefix = classpath:/templates/
+spring.thymeleaf.check-template = false
+spring.thymeleaf.check-template-location = false
+spring.thymeleaf.servlet.content-type = text/html
+
+##########################################################################
+#(2500) jackson configuration - io.sc.platform.mvc
+##########################################################################
+spring.jackson.time-zone = Asia/Shanghai
+spring.jackson.date-format = yyyy-MM-dd HH:mm:ss
+spring.jackson.serialization.indent_output = true
+spring.jackson.serialization.fail_on_empty_beans = false
+spring.jackson.deserialization.fail_on_ignored_properties = false
+spring.jackson.parser.allow_comments = true
+spring.jackson.parser.allow_single_quotes = true
+spring.jackson.parser.allow_trailing_comma = true
+spring.jackson.parser.allow_unquoted_field_names = true
+spring.jackson.parser.ignore_undefined = true
+spring.jackson.parser.allow_unquoted_control_chars = true
+
+##########################################################################
+#(2600) i18n message source configuration - io.sc.platform.mvc
+##########################################################################
+spring.messages.alwaysUseMessageFormat = false
+spring.messages.cacheDuration = -1
+spring.messages.encoding = UTF-8
+spring.messages.fallbackToSystemLocale = false
+spring.messages.useCodeAsDefaultMessage = true
+
+##########################################################################
+#(3000) platform security configuration - io.sc.platform.security.loginform
+##########################################################################
+spring.security.formLogin.loginPage = /login
+spring.security.formLogin.loginProcessingUrl = /login
+spring.security.formLogin.failureUrl = /login-error
+spring.security.logout.logoutUrl = /logout
+spring.security.logout.logoutSuccessUrl = /
+
+##########################################################################
+#(4000) email configuration - io.sc.platform.communication
+##########################################################################
+spring.mail.host=zzz.xxx.yyy
+spring.mail.port=25
+spring.mail.protocol=smtp
+spring.mail.test-connection=false
+spring.mail.default-encoding=UTF-8
+spring.mail.properties.mail.smtp.auth=true
+spring.mail.username=xxx
+spring.mail.password=yyy
+
+##########################################################################
+#(5000) flowable bpm configuration - io.sc.platform.flowable
+##########################################################################
+# core
+flowable.asyncExecutorActivate =false
+flowable.asyncHistoryExecutorActivate = false
+flowable.check-process-definitions=false
+flowable.custom-mybatis-mappers=
+flowable.custom-mybatis-x-m-l-mappers=
+flowable.database-schema=
+flowable.database-schema-update=true
+flowable.db-history-used=true
+flowable.deployment-name=SpringBootAutoDeployment
+flowable.history-level=
+flowable.process-definition-location-prefix=classpath*:/processes/
+flowable.process-definition-location-suffixes=**.bpmn20.xml,**.bpmn
+# process
+flowable.process.definition-cache-limit=-1
+flowable.process.enable-safe-xml=true
+flowable.process.servlet.load-on-startup=-1
+flowable.process.servlet.name=Flowable BPMN Rest API
+flowable.process.servlet.path=/process-api
+# cmmn
+flowable.cmmn.enabled=false
+# content
+flowable.content.enabled=false
+# dmn
+flowable.dmn.enabled=false
+# form
+flowable.form.enabled=false
+# idm
+flowable.idm.enabled=false
+
+##########################################################################
+#(8000) cxf configuration - io.sc.platform.ws.cxf
+##########################################################################
+cxf.path = /webservices
+
+##########################################################################
+#(9000) p6spy configuration - io.sc.platform.jdbc
+##########################################################################
+p6spy.enabled = true
+p6spy.ignorePattern = false
diff --git a/config/banner.txt b/config/banner.txt
new file mode 100644
index 00000000..420b910e
--- /dev/null
+++ b/config/banner.txt
@@ -0,0 +1,48 @@
+**************************************************************************************
+ Name: app.platform
+ Version: ${application.version}
+ Base on Spring Boot ${spring-boot.version}
+**************************************************************************************
+System.environment:
+--------------------------------------------------------------------------------------
+ java.specification.version = 1.8
+ java.specification.vendor = Oracle Corporation
+ java.specification.name = Java Platform API Specification
+ java.vm.specification.version = 1.8
+ java.vm.specification.vendor = Oracle Corporation
+ java.vm.specification.name = Java Virtual Machine Specification
+ java.home = /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre
+ java.version = 1.8.0_332
+ java.vendor = Azul Systems, Inc.
+ java.vendor.url = http://www.azul.com/
+ java.vm.version = 25.332-b09
+ java.vm.vendor = Azul Systems, Inc.
+ java.vm.name = OpenJDK 64-Bit Server VM
+ java.class.version = 52.0
+ java.class.path = ${java.class.path2}
+ java.library.path = /Users/wangshaoping/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
+ java.io.tmpdir = /var/folders/82/6m96_g610hj1v1tcpvhtjysr0000gn/T/
+ java.ext.dirs = /Users/wangshaoping/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
+ os.name = Mac OS X
+ os.arch = aarch64
+ os.version = 13.5.1
+ user.name = wangshaoping
+ user.home = /Users/wangshaoping
+ user.dir = /Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform
+
+Application.environment
+--------------------------------------------------------------------------------------
+ application.name = app.platform
+ application.is-running-in-development = false
+ application.is-running-in-web-container = false
+
+ application.home.dir = /Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform
+ application.installer.enabled = ${application.installer.enabled}
+ application.updater.enabled = ${application.updater.enabled}
+ application.audit-log-mode = ${application.audit-log-mode}
+ spring.config.location = file:/Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/config/application.properties
+ spring.banner.location = file:/Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/config/banner.txt
+ logging.config = file:/Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/config/logback-spring.xml
+ p6spy.enabled = ${p6spy.enabled}
+ p6spy.ignorePattern = ${p6spy.ignorePattern}
+**************************************************************************************
diff --git a/config/license.txt b/config/license.txt
new file mode 100644
index 00000000..d5ee1622
--- /dev/null
+++ b/config/license.txt
@@ -0,0 +1,216 @@
+ Apache License
+ Version 2.0, January 2004
+ https://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+=======================================================================
+
+To the extent any open source subcomponents are licensed under the EPL and/or other
+similar licenses that require the source code and/or modifications to
+source code to be made available (as would be noted above), you may obtain a
+copy of the source code corresponding to the binaries for such open source
+components and modifications thereto, if any, (the "Source Files"), by
+downloading the Source Files from https://www.springsource.org/download,
+or by sending a request, with your name and address to: VMware, Inc., 3401 Hillview
+Avenue, Palo Alto, CA 94304, United States of America or email info@vmware.com. All
+such requests should clearly specify: OPEN SOURCE FILES REQUEST, Attention General
+Counsel. VMware shall mail a copy of the Source Files to you on a CD or equivalent
+physical medium. This offer to obtain a copy of the Source Files is valid for three
+years from the date you acquired this Software product.
diff --git a/config/logback-spring.xml b/config/logback-spring.xml
new file mode 100644
index 00000000..cae04191
--- /dev/null
+++ b/config/logback-spring.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+ ${pattern}
+
+
+
+
+ ${pattern}
+ ${homedir}/logs/log.log
+
+ ${homedir}/logs/log.%d.log
+ 30
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gradle.properties b/gradle.properties
index 677f53c8..76d7a0c2 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.11
+platform_version=8.1.13
platform_plugin_version=8.1.11
-platform_core_frontend_version=8.1.27
+platform_core_frontend_version=8.1.42
###########################################################
# dependencies version
@@ -66,7 +66,8 @@ oshi_version=6.4.2
p6spy_version=3.9.1
poi_ooxml_version=3.17
schemacrawler_version=16.19.11
-spring_boot_version=2.7.17
+#schemacrawler_version=14.21.02
+spring_boot_version=2.7.18
spring_cloud_alibaba_version=2021.0.4.0
spring_cloud_context_version=3.1.4
spring_cloud_version=2021.0.8
diff --git a/io.sc.platform.core.frontend/package.json b/io.sc.platform.core.frontend/package.json
index 646308e2..573db6bd 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.28",
+ "version": "8.1.42",
"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 02709946..9c1a16f6 100644
--- a/io.sc.platform.core.frontend/src/components/index.ts
+++ b/io.sc.platform.core.frontend/src/components/index.ts
@@ -5,11 +5,13 @@
import dialog from '@/views/Dialog.vue';
import codemirror from '@/views/Codemirror.vue';
import select from '@/views/Select.vue';
+import treeGrid from '@/views/TreeGrid.vue';
-const localComponents = {
-'component.testcase.dialog': dialog,
-'component.testcase.codemirror': codemirror,
-'component.testcase.select': select,
-}
+const localComponents = {
+ 'component.testcase.dialog': dialog,
+ 'component.testcase.codemirror': codemirror,
+ 'component.testcase.select': select,
+ 'component.testcase.treeGrid': treeGrid,
+};
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 87385998..00d6bddd 100644
--- a/io.sc.platform.core.frontend/src/i18n/messages.json
+++ b/io.sc.platform.core.frontend/src/i18n/messages.json
@@ -2,5 +2,6 @@
"menu.testcase": "Test Case",
"menu.testcase.codemirror": "CodeMirror",
"menu.testcase.dialog": "Dialog",
- "menu.testcase.select": "Select"
+ "menu.testcase.select": "Select",
+ "menu.testcase.treeGrid": "Tree Grid"
}
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 7d2bf8e7..00806365 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
@@ -2,5 +2,6 @@
"menu.testcase": "測試用例",
"menu.testcase.codemirror": "CodeMirror",
"menu.testcase.dialog": "Dialog",
- "menu.testcase.select": "Select"
+ "menu.testcase.select": "Select",
+ "menu.testcase.treeGrid": "Tree Grid"
}
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 f6089331..ef4c117c 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
@@ -2,5 +2,6 @@
"menu.testcase": "测试用例",
"menu.testcase.codemirror": "CodeMirror",
"menu.testcase.dialog": "Dialog",
- "menu.testcase.select": "Select"
+ "menu.testcase.select": "Select",
+ "menu.testcase.treeGrid": "Tree Grid"
}
diff --git a/io.sc.platform.core.frontend/src/menus/menus.json b/io.sc.platform.core.frontend/src/menus/menus.json
index 97dfc47f..b0672bd8 100644
--- a/io.sc.platform.core.frontend/src/menus/menus.json
+++ b/io.sc.platform.core.frontend/src/menus/menus.json
@@ -44,5 +44,14 @@
"titleI18nKey": "menu.testcase.select",
"icon": "bi-palette",
"routeName": "route.testcase.select"
+ },
+ {
+ "type": "ROUTE",
+ "order": 400,
+ "parentId": "menu.testcase",
+ "id": "menu.testcase.treeGrid",
+ "titleI18nKey": "menu.testcase.treeGrid",
+ "icon": "bi-palette",
+ "routeName": "route.testcase.treeGrid"
}
]
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 0b45da3f..641f3100 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
@@ -22,6 +22,7 @@
@row-click="rowClick"
@row-dblclick="rowDbClick"
@fullscreen="tableFullscreenFun"
+ @selection="selection"
>
@@ -447,6 +448,10 @@ const props = defineProps({
type: Function,
default: null,
}, // 监听使用,不要传递覆盖!!!
+ onSelection: {
+ type: Function,
+ default: null,
+ },
});
const emit = defineEmits<{
(
@@ -461,6 +466,10 @@ const emit = defineEmits<{
row: any, // 第二个参数, 点击的行对象
index: number, // 第三个参数, 当前页中行的索引
): void;
+ (
+ e: 'selection', // 行选择事件
+ details: any, // 第一个参数
+ ): void;
(
e: 'requestDataBefore', // 表格请求数据前触发事件
requestParams: URLSearchParams | any, // 第一个参数,请求参数
@@ -893,6 +902,11 @@ const rowDbClick = (evt, row, index) => {
onView();
}
};
+const selection = (details) => {
+ if (props.onSelection) {
+ emit('selection', details);
+ }
+};
const tableSortFun = (dragRowIndex, dropRowIndex) => {
if (dragRowIndex !== dropRowIndex) {
const dragRow = table.rows[dragRowIndex];
@@ -1627,6 +1641,7 @@ const onDrop = (e, scope) => {
}
removeDragTopStyle(e);
removeDragBottomStyle(e);
+ emit('rowDragDropAfter');
};
onMounted(() => {
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 05def778..0e4cca74 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 WTreeGrid from './tree/WTreeGrid.vue';
import WDialog from './dialog/WDialog.vue';
import PlatformDialog from './dialog/PlatformDialog.vue';
@@ -27,6 +28,7 @@ export default {
app.component('WPosition', WPosition);
app.component('WCodemirror', WCodemirror);
app.component('WSelect', WSelect);
+ app.component('WTreeGrid', WTreeGrid);
app.component('WDialog', WDialog);
app.component('PlatformDialog', PlatformDialog);
@@ -46,6 +48,7 @@ export {
WPosition,
WCodemirror,
WSelect,
+ WTreeGrid,
WDialog,
PlatformDialog,
PlatformDrawer,
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
new file mode 100644
index 00000000..2fb8e0a2
--- /dev/null
+++ b/io.sc.platform.core.frontend/src/platform/components/tree/WTreeGrid.vue
@@ -0,0 +1,167 @@
+import { laBell } from '@quasar/extras/line-awesome'; import { mergeProps } from 'vue'; import { pushScopeId } from 'vue'; import { clear } from 'console';
+
+
+
+
{{ title }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/io.sc.platform.core.frontend/src/platform/index.ts b/io.sc.platform.core.frontend/src/platform/index.ts
index 62c9afae..0c682af4 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,
+ WTreeGrid,
PlatformDialog,
PlatformDrawer,
PlatformForm,
diff --git a/io.sc.platform.core.frontend/src/platform/plugin/manager/RouterManager.ts b/io.sc.platform.core.frontend/src/platform/plugin/manager/RouterManager.ts
index 90377475..09555551 100644
--- a/io.sc.platform.core.frontend/src/platform/plugin/manager/RouterManager.ts
+++ b/io.sc.platform.core.frontend/src/platform/plugin/manager/RouterManager.ts
@@ -33,6 +33,13 @@ class RouterManager {
* @param routes 路由集合
*/
public static buildRoutes(routes: FrontEndRouteType[] = []) {
+ //修改默认 / 路由的 redirect, 以便响应 gc.setting.homePage 发生变化时能正常响应
+ for (const PLATFORM_ROUTE of PLATFORM_ROUTES) {
+ if (PLATFORM_ROUTE.name === '/') {
+ PLATFORM_ROUTE.redirect = Environment.getConfigure().setting?.homePage || '/home';
+ }
+ }
+
//将所有本地路由的模块设置成项目模块名
for (const route of RouterManager.#localRoutes) {
route.module = Environment.getModuleName();
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 b4fa8225..abf4a53e 100644
--- a/io.sc.platform.core.frontend/src/platform/utils/TreeBuilder.ts
+++ b/io.sc.platform.core.frontend/src/platform/utils/TreeBuilder.ts
@@ -6,14 +6,16 @@ class TreeBuilder {
parentIdPropertyName: string = 'parentId',
idPropertyName: string = 'id',
childrenPropertyName: string = 'children',
- orderPropertyName: string = 'order',
+ orderPropertyName: string = '',
) {
const result: any[] = [];
// 排序
- list.sort((o1, o2) => {
- return o1[orderPropertyName] - o2[orderPropertyName];
- });
+ if (orderPropertyName) {
+ list.sort((o1, o2) => {
+ return o1[orderPropertyName] - o2[orderPropertyName];
+ });
+ }
//为提高查询效率,将 List 元素存入 Map 中
const cache: Map = new Map();
diff --git a/io.sc.platform.core.frontend/src/routes/routes.json b/io.sc.platform.core.frontend/src/routes/routes.json
index 5f8554b6..d954b707 100644
--- a/io.sc.platform.core.frontend/src/routes/routes.json
+++ b/io.sc.platform.core.frontend/src/routes/routes.json
@@ -34,5 +34,17 @@
"meta": {
"permissions": ["/testcase/select/**/*"]
}
+ },
+ {
+ "name": "route.testcase.treeGrid",
+ "path": "testcase/treeGrid",
+ "parent": "/",
+ "priority": 0,
+ "component": "component.testcase.treeGrid",
+ "componentPath": "@/views/TreeGrid.vue",
+ "redirect": null,
+ "meta": {
+ "permissions": ["/testcase/treeGrid/**/*"]
+ }
}
]
diff --git a/io.sc.platform.core.frontend/src/views/TreeGrid.vue b/io.sc.platform.core.frontend/src/views/TreeGrid.vue
new file mode 100644
index 00000000..82a694a4
--- /dev/null
+++ b/io.sc.platform.core.frontend/src/views/TreeGrid.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
diff --git a/io.sc.platform.core.frontend/template-project/package.json b/io.sc.platform.core.frontend/template-project/package.json
index 61165206..89c8e3c8 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.28",
+ "version": "8.1.42",
"description": "前端核心包,用于快速构建前端的脚手架",
"private": false,
"keywords": [],
@@ -91,7 +91,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
- "platform-core": "8.1.28",
+ "platform-core": "8.1.42",
"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 02709946..9c1a16f6 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
@@ -5,11 +5,13 @@
import dialog from '@/views/Dialog.vue';
import codemirror from '@/views/Codemirror.vue';
import select from '@/views/Select.vue';
+import treeGrid from '@/views/TreeGrid.vue';
-const localComponents = {
-'component.testcase.dialog': dialog,
-'component.testcase.codemirror': codemirror,
-'component.testcase.select': select,
-}
+const localComponents = {
+ 'component.testcase.dialog': dialog,
+ 'component.testcase.codemirror': codemirror,
+ 'component.testcase.select': select,
+ 'component.testcase.treeGrid': treeGrid,
+};
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 87385998..00d6bddd 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
@@ -2,5 +2,6 @@
"menu.testcase": "Test Case",
"menu.testcase.codemirror": "CodeMirror",
"menu.testcase.dialog": "Dialog",
- "menu.testcase.select": "Select"
+ "menu.testcase.select": "Select",
+ "menu.testcase.treeGrid": "Tree Grid"
}
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 7d2bf8e7..00806365 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
@@ -2,5 +2,6 @@
"menu.testcase": "測試用例",
"menu.testcase.codemirror": "CodeMirror",
"menu.testcase.dialog": "Dialog",
- "menu.testcase.select": "Select"
+ "menu.testcase.select": "Select",
+ "menu.testcase.treeGrid": "Tree Grid"
}
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 f6089331..ef4c117c 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
@@ -2,5 +2,6 @@
"menu.testcase": "测试用例",
"menu.testcase.codemirror": "CodeMirror",
"menu.testcase.dialog": "Dialog",
- "menu.testcase.select": "Select"
+ "menu.testcase.select": "Select",
+ "menu.testcase.treeGrid": "Tree Grid"
}
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 97dfc47f..b0672bd8 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
@@ -44,5 +44,14 @@
"titleI18nKey": "menu.testcase.select",
"icon": "bi-palette",
"routeName": "route.testcase.select"
+ },
+ {
+ "type": "ROUTE",
+ "order": 400,
+ "parentId": "menu.testcase",
+ "id": "menu.testcase.treeGrid",
+ "titleI18nKey": "menu.testcase.treeGrid",
+ "icon": "bi-palette",
+ "routeName": "route.testcase.treeGrid"
}
]
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 5f8554b6..d954b707 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
@@ -34,5 +34,17 @@
"meta": {
"permissions": ["/testcase/select/**/*"]
}
+ },
+ {
+ "name": "route.testcase.treeGrid",
+ "path": "testcase/treeGrid",
+ "parent": "/",
+ "priority": 0,
+ "component": "component.testcase.treeGrid",
+ "componentPath": "@/views/TreeGrid.vue",
+ "redirect": null,
+ "meta": {
+ "permissions": ["/testcase/treeGrid/**/*"]
+ }
}
]
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
new file mode 100644
index 00000000..82a694a4
--- /dev/null
+++ b/io.sc.platform.core.frontend/template-project/src/views/TreeGrid.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
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 c55ed5bd..d891ae5a 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
@@ -3,33 +3,42 @@ action=Action
add=Add
addNew=Add
alter=Alter
-bottom=Bottom
bottom-left=Bottom Left
bottom-right=Bottom Right
+bottom=Bottom
cancel=Cancel
center=Center
changeRole=Change Role
+className=Class
clone=Clone
close=Close
code=Code
confirm=Confirm
confirmPassword=Confirm Password
+content=Content
createDate=Create Date
creator=Creator
dataComeFrom=Data Come From
deepClone=Deep Clone
delete=Delete
description=Description
+displayValue=Display Value
download=Download
+edit=Edit
email=Email
enable=Enable
error=Error
example=Example
+exception=Exception
+exceptionMessage=Exception Message
+exceptionStackTrace=Exception StackTrace
+executeTime=Execute Time
expand=Expand
expandAll=Expand All
expandQueryCondition=Expand Query
export=Export
expression=Expression
+failed=Failed
false=False
file=File
first=First
@@ -40,8 +49,10 @@ fullScreen=Full Screen
fullScreenExit=Exit Full Screen
help=Help
homePage=Home
+httpMethod=Http Method
id=ID
import=Import
+ip=IP
isEnable=Enable
key=Key
language=Language
@@ -53,6 +64,8 @@ left=Left
login=Login
loginName=Login Name
logout=Logout
+menu=Menu
+methodName=Mehtod
millisecond=Milli Second
mobile=Mobile
modify=Modify
@@ -61,9 +74,12 @@ move=Move
myMessages=My Messages
myTasks=My Tasks
name=Name
+newValue=New Value
next=Next
nextPage=Next Page
no=No
+oldValue=Old Value
+order=Order
org=Org
password=Password
phone=Phone
@@ -83,17 +99,23 @@ save=Save
search=Search
select=Select
selectAll=Select All
+size=Size
+startDate=Start Date
status=Status
submit=Submit
+success=Success
systemAnnouncements=Announcements
test=Test
theme=Theme
+title=Title
to=To
-top=Top
top-left=Top Left
top-right=Top Right
+top=Top
true=True
upToTop=Up to Top
+url=URL
+user=User
userName=User Name
value=Value
version=Version
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 51f15037..f5550009 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
@@ -3,33 +3,42 @@ action=\u64CD\u4F5C
add=\u6DFB\u52A0
addNew=\u65B0\u589E
alter=\u901A\u77E5
-bottom=\u4E0B\u908A
bottom-left=\u5DE6\u4E0B
bottom-right=\u53F3\u4E0B
+bottom=\u4E0B\u908A
cancel=\u53D6\u6D88
center=\u4E2D\u5FC3
changeRole=\u5207\u63DB\u89D2\u8272
+className=\u985E\u540D
clone=\u8907\u88FD
close=\u95DC\u9589
code=\u4EE3\u78BC
confirm=\u78BA\u5B9A
confirmPassword=\u78BA\u8A8D\u5BC6\u78BC
+content=\u5167\u5BB9
createDate=\u5275\u5EFA\u65E5\u671F
creator=\u5275\u5EFA\u4EBA
dataComeFrom=\u6578\u64DA\u4F86\u6E90
deepClone=\u6DF1\u5EA6\u8907\u88FD
delete=\u522A\u9664
description=\u63CF\u8FF0
+displayValue=\u986F\u793A\u503C
download=\u4E0B\u8F09
+edit=\u7DE8\u8F2F
email=\u90F5\u7BB1
enable=\u53EF\u7528
error=\u932F\u8AA4
example=\u793A\u4F8B
+exception=\u9055\u4F8B
+exceptionMessage=\u9055\u4F8B\u4FE1\u606F
+exceptionStackTrace=\u9055\u4F8B\u68E7
+executeTime=\u57F7\u884C\u6642\u9593
expand=\u5C55\u958B
expandAll=\u5168\u90E8\u5C55\u958B
expandQueryCondition=\u5C55\u958B\u67E5\u8A62\u6761\u4EF6
export=\u5C0E\u51FA
expression=\u8868\u9054\u5F0F
+failed=\u5931\u6557
false=\u5047
file=\u6587\u4EF6
first=\u7B2C\u4E00
@@ -40,8 +49,10 @@ fullScreen=\u5168\u5C4F
fullScreenExit=\u9000\u51FA\u5168\u5C4F
help=\u5E6B\u52A9
homePage=\u9996\u9801
+httpMethod=Http \u65B9\u6CD5
id=\u552F\u4E00\u6A19\u8B58
import=\u5C0E\u5165
+ip=IP
isEnable=\u662F\u5426\u53EF\u7528
key=\u9375
language=\u8A9E\u8A00
@@ -53,6 +64,8 @@ left=\u5DE6\u908A
login=\u767B\u9304
loginName=\u767B\u9304\u540D
logout=\u9000\u51FA
+menu=\u83DC\u55AE
+methodName=\u985E\u65B9\u6CD5
millisecond=\u6BEB\u79D2
mobile=\u624B\u6A5F
modify=\u4FEE\u6539
@@ -61,9 +74,12 @@ move=\u79FB\u52D5
myMessages=\u6211\u7684\u6D88\u606F
myTasks=\u6211\u7684\u4EFB\u52D9
name=\u540D\u7A31
+newValue=\u65B0\u503C
next=\u4E0B\u4E00
nextPage=\u4E0B\u4E00\u9801
no=\u5426
+oldValue=\u539F\u503C
+order=\u9806\u5E8F
org=\u6A5F\u69CB
password=\u5BC6\u78BC
phone=\u96FB\u8A71
@@ -83,17 +99,23 @@ save=\u4FDD\u5B58
search=\u641C\u7D22
select=\u9078\u64C7
selectAll=\u5168\u90E8\u9078\u64C7
+size=\u5C3A\u5BF8
+startDate=\u958B\u59CB\u65E5\u671F
status=\u72C0\u614B
submit=\u63D0\u4EA4
+success=\u6210\u529F
systemAnnouncements=\u7CFB\u7D71\u516C\u544A
test=\u6E2C\u8A66
theme=\u4E3B\u984C
+title=\u6A19\u984C
to=\u5230
-top=\u4E0A\u908A
top-left=\u5DE6\u4E0A
top-right=\u53F3\u4E0A
+top=\u4E0A\u908A
true=\u771F
upToTop=\u56DE\u5230\u9802\u90E8
+url=URL
+user=\u7528\u6237
userName=\u7528\u6236\u540D
value=\u503C
version=\u7248\u672C
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 68d6080c..98349727 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
@@ -3,33 +3,42 @@ action=\u64CD\u4F5C
add=\u6DFB\u52A0
addNew=\u65B0\u589E
alter=\u901A\u77E5
-bottom=\u4E0B\u8FB9
bottom-left=\u5DE6\u4E0B
bottom-right=\u53F3\u4E0B
+bottom=\u4E0B\u8FB9
cancel=\u53D6\u6D88
center=\u4E2D\u5FC3
changeRole=\u5207\u6362\u89D2\u8272
+className=\u7C7B\u540D
clone=\u590D\u5236
close=\u5173\u95ED
code=\u4EE3\u7801
confirm=\u786E\u5B9A
confirmPassword=\u786E\u8BA4\u5BC6\u7801
+content=\u5185\u5BB9
createDate=\u521B\u5EFA\u65E5\u671F
creator=\u521B\u5EFA\u4EBA
dataComeFrom=\u6570\u636E\u6765\u6E90
deepClone=\u6DF1\u5EA6\u590D\u5236
delete=\u522A\u9664
description=\u63CF\u8FF0
+displayValue=\u663E\u793A\u503C
download=\u4E0B\u8F7D
+edit=\u7F16\u8F91
email=\u90AE\u7BB1
enable=\u53EF\u7528
error=\u9519\u8BEF
example=\u793A\u4F8B
+exception=\u8FDD\u4F8B
+exceptionMessage=\u8FDD\u4F8B\u4FE1\u606F
+exceptionStackTrace=\u8FDD\u4F8B\u6808
+executeTime=\u6267\u884C\u65F6\u95F4
expand=\u5C55\u5F00
expandAll=\u5168\u90E8\u5C55\u5F00
expandQueryCondition=\u5C55\u5F00\u67E5\u8BE2\u6761\u4EF6
export=\u5BFC\u51FA
expression=\u8868\u8FBE\u5F0F
+failed=\u5931\u8D25
false=\u5047
file=\u6587\u4EF6
first=\u7B2C\u4E00
@@ -40,8 +49,10 @@ fullScreen=\u5168\u5C4F
fullScreenExit=\u9000\u51FA\u5168\u5C4F
help=\u5E2E\u52A9
homePage=\u9996\u9875
+httpMethod=Http \u65B9\u6CD5
id=\u552F\u4E00\u6807\u8BC6
import=\u5BFC\u5165
+ip=IP
isEnable=\u662F\u5426\u53EF\u7528
key=\u952E
language=\u8BED\u8A00
@@ -53,6 +64,8 @@ left=\u5DE6\u8FB9
login=\u767B\u5F55
loginName=\u767B\u5F55\u540D
logout=\u9000\u51FA
+menu=\u83DC\u5355
+methodName=\u7C7B\u65B9\u6CD5
millisecond=\u6BEB\u79D2
mobile=\u624B\u673A
modify=\u4FEE\u6539
@@ -61,9 +74,12 @@ move=\u79FB\u52A8
myMessages=\u6211\u7684\u6D88\u606F
myTasks=\u6211\u7684\u4EFB\u52A1
name=\u540D\u79F0
+newValue=\u65B0\u503C
next=\u4E0B\u4E00
nextPage=\u4E0B\u4E00\u9875
no=\u5426
+oldValue=\u539F\u503C
+order=\u987A\u5E8F
org=\u673A\u6784
password=\u5BC6\u7801
phone=\u7535\u8BDD
@@ -83,17 +99,23 @@ save=\u4FDD\u5B58
search=\u641C\u7D22
select=\u9009\u62E9
selectAll=\u5168\u90E8\u9009\u62E9
+size=\u5C3A\u5BF8
+startDate=\u5F00\u59CB\u65E5\u671F
status=\u72B6\u6001
submit=\u63D0\u4EA4
+success=\u6210\u529F
systemAnnouncements=\u7CFB\u7EDF\u516C\u544A
test=\u6D4B\u8BD5
theme=\u4E3B\u9898
+title=\u6807\u9898
to=\u5230
-top=\u4E0A\u8FB9
top-left=\u5DE6\u4E0A
top-right=\u53F3\u4E0A
+top=\u4E0A\u8FB9
true=\u771F
upToTop=\u56DE\u5230\u9876\u90E8
+url=URL
+user=\u7528\u6237
userName=\u7528\u6237\u540D
value=\u503C
version=\u7248\u672C
diff --git a/io.sc.platform.developer.doc/asciidoc/index.adoc b/io.sc.platform.developer.doc/asciidoc/index.adoc
index 7957c9dc..d61cbc7c 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::yusys/yusys.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/yusys/rwa/rwa.adoc b/io.sc.platform.developer.doc/asciidoc/yu/rwa/rwa.adoc
similarity index 100%
rename from io.sc.platform.developer.doc/asciidoc/yusys/rwa/rwa.adoc
rename to io.sc.platform.developer.doc/asciidoc/yu/rwa/rwa.adoc
diff --git a/io.sc.platform.developer.doc/asciidoc/yusys/rws/rws.adoc b/io.sc.platform.developer.doc/asciidoc/yu/rws/rws.adoc
similarity index 100%
rename from io.sc.platform.developer.doc/asciidoc/yusys/rws/rws.adoc
rename to io.sc.platform.developer.doc/asciidoc/yu/rws/rws.adoc
diff --git a/io.sc.platform.developer.doc/asciidoc/yusys/yusys.adoc b/io.sc.platform.developer.doc/asciidoc/yu/yu.adoc
similarity index 100%
rename from io.sc.platform.developer.doc/asciidoc/yusys/yusys.adoc
rename to io.sc.platform.developer.doc/asciidoc/yu/yu.adoc
diff --git a/io.sc.platform.developer.frontend/package.json b/io.sc.platform.developer.frontend/package.json
index fe69fff5..4cb13ce7 100644
--- a/io.sc.platform.developer.frontend/package.json
+++ b/io.sc.platform.developer.frontend/package.json
@@ -1,104 +1,102 @@
{
- "name": "io.sc.platform.developer.frontend",
- "version": "8.1.11",
- "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.27",
- "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.12",
+ "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.37",
+ "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.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/Agent.java
index b67a449a..76df501c 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/Agent.java
@@ -27,50 +27,50 @@ public class Agent extends AuditorEntity implements Serializable{
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID")
+ @Column(name="ID_")
@Size(max=36)
private String id;
//被代理人登录名
- @Column(name="_LOGINNAME")
+ @Column(name="LOGINNAME_")
@Size(max=255)
private String loginName;
//被代理人用户名
- @Column(name="_USERNAME")
+ @Column(name="USERNAME_")
@Size(max=255)
private String userName;
//代理人登录名
- @Column(name="_AGENT_LOGINNAME")
+ @Column(name="AGENT_LOGINNAME_")
@Size(max=255)
private String agentLoginName;
//代理人用户名
- @Column(name="_AGENT_USERNAME")
+ @Column(name="AGENT_USERNAME_")
@Size(max=255)
private String agentUserName;
//开始日期
- @Column(name="_START_DATE")
+ @Column(name="START_DATE_")
private Date startDate;
//结束日期
- @Column(name="_END_DATE")
+ @Column(name="END_DATE_")
private Date endDate;
//代理原因
- @Column(name="_REASONS")
+ @Column(name="REASONS_")
@Size(max=255)
private String reasons;
//是否生效
- @Column(name="_EFFECTIVE")
+ @Column(name="EFFECTIVE_")
@Convert(converter= NumericBooleanConverter.class)
private Boolean effective;
//意见(主要用于记录审批意见)
- @Column(name="_COMMENTS")
+ @Column(name="COMMENTS_")
@Size(max=1024)
private String comments;
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 6ed1b041..626b81aa 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
@@ -29,50 +29,50 @@ public class ProcessEntity extends AuditorEntity implements Serializable{
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID")
+ @Column(name="ID_")
@Size(max=36)
private String id;
//流程分类
- @Column(name="_CATEGORY")
+ @Column(name="CATEGORY_")
@Size(max=255)
private String category;
//代码
- @Column(name="_KEY")
+ @Column(name="KEY_")
@Size(max=255)
private String key;
//名称
- @Column(name="_NAME")
+ @Column(name="NAME_")
@Size(max=255)
private String name;
//描述
- @Column(name="_DESCRIPTION")
+ @Column(name="DESCRIPTION_")
@Size(max=255)
private String description;
//流程引擎中的发布ID
- @Column(name="_DEPLOYED_ID")
+ @Column(name="DEPLOYED_ID_")
@Size(max=255)
private String deployedId;
//版本
- @Column(name="_VERSION")
+ @Column(name="VERSION_")
private Integer version;
//Flowable 流程定义 xml
- @Column(name="_XML")
+ @Column(name="XML_")
private String xml;
//流程定义状态
- @Column(name="_STATUS", length=10)
+ @Column(name="STATUS_", length=10)
@Enumerated(EnumType.STRING)
private ProcessStatus status;
//是否可以自行领取任务
- @Column(name="_CAN_CLAIM_TASK")
+ @Column(name="CAN_CLAIM_TASK_")
@Convert(converter= NumericBooleanConverter.class)
private Boolean canClaimTask;
diff --git a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/ProcessQueryServiceImpl.java b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/ProcessQueryServiceImpl.java
index 637060ad..07762ca3 100644
--- a/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/ProcessQueryServiceImpl.java
+++ b/io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/ProcessQueryServiceImpl.java
@@ -122,7 +122,7 @@ public class ProcessQueryServiceImpl implements ProcessQueryService {
deployedIds.add(entity.getDeployedId());
}
- Pageable pageable =queryParameter.getPageable();
+ Pageable pageable =queryParameter.getJpaPageable();
String countSql ="select count(distinct RES.ID_) COUNT_"
+ " from ACT_RU_EXECUTION RES"
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 8b423814..caaac906 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
@@ -20,47 +20,47 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/io.sc.platform.gradle/templates/pgp/app/src/main/resources/META-INF/platform/plugins/frontend-module.json b/io.sc.platform.gradle/templates/pgp/app/src/main/resources/META-INF/platform/plugins/frontend-module.json
new file mode 100644
index 00000000..8eadc4af
--- /dev/null
+++ b/io.sc.platform.gradle/templates/pgp/app/src/main/resources/META-INF/platform/plugins/frontend-module.json
@@ -0,0 +1,11 @@
+{
+ "name": "app.platform",
+ "components": [
+ ],
+ "resources": [
+ "/public/configure.js",
+ "/public/favicon.svg",
+ "/public/login-bg.jpg",
+ "/public/logo.svg"
+ ]
+}
\ No newline at end of file
diff --git a/io.sc.platform.gradle/templates/pgp/setup/build-version.gradle b/io.sc.platform.gradle/templates/pgp/setup/build-version.gradle
index 3b2ee116..dfb853de 100755
--- a/io.sc.platform.gradle/templates/pgp/setup/build-version.gradle
+++ b/io.sc.platform.gradle/templates/pgp/setup/build-version.gradle
@@ -146,7 +146,7 @@ subprojects {
// ext['oauth2-oidc-sdk.version'] =
// ext['ojdbc.version'] =
// ext['okhttp3.version'] =
- // ext['oracle-database.version'] =
+ // ext['oracle-database.version'] ='12.2.0.1'
// ext['pooled-jms.version'] =
// ext['postgresql.version'] =
// ext['prometheus-pushgateway.version'] =
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 62ddadd9..ebb425e3 100644
--- a/io.sc.platform.gradle/templates/pgp/setup/build.gradle.txt
+++ b/io.sc.platform.gradle/templates/pgp/setup/build.gradle.txt
@@ -52,6 +52,7 @@ subprojects {
exclude group: "org.apache.logging.log4j", module: "log4j-to-slf4j"
exclude group: "org.slf4j", module: "slf4j-jdk14"
exclude group: "org.slf4j", module: "slf4j-nop"
+ //exclude group: "com.oracle.database.jdbc", module: "ojdbc8"
}
dependencyManagement {
@@ -366,6 +367,31 @@ subprojects {
}
}
+ /*-----------------------------------------------------------------
+ * pnpm sync
+ *----------------------------------------------------------------*/
+ task frontendNpmSync(type:Exec){
+ if(isFrontendProject(file('.')) && !project.name.contains("io.sc.platform.security.frontend")){
+ workingDir '.'
+ if(org.gradle.internal.os.OperatingSystem.current().isWindows()){
+ commandLine 'cmd', '/c', 'pnpm', 'sync'
+ }else{
+ commandLine 'pnpm', 'sync'
+ }
+ }else{
+ if(org.gradle.internal.os.OperatingSystem.current().isWindows()){
+ commandLine 'cmd', '/c', 'cd', '.'
+ }else{
+ commandLine 'cd', '.'
+ }
+ }
+ }
+ tasks.frontendNpmSync.doFirst {
+ if(isFrontendProject(file('.'))) {
+ println '开始执行 pnpm sync ......';
+ }
+ }
+
/*-----------------------------------------------------------------
* pnpm run build
*----------------------------------------------------------------*/
@@ -554,13 +580,34 @@ subprojects {
//resources----------------------------------------
List resources = new ArrayList();
def dirPath = file('dist').absolutePath;
- def tree = fileTree('dist') {
- include '**/*.*'
- }
- tree.each { File file ->
- resources.add(file.absolutePath.substring(dirPath.length()));
+ if(project.name.contains('io.sc.platform.mvc.frontend')){
+ def tree = fileTree('dist') {
+ include '**/*.*'
+ exclude "public/${project.name}/configure.js"
+ exclude "public/${project.name}/favicon.svg"
+ exclude "public/${project.name}/index.html"
+ exclude "public/${project.name}/login-bg.jpg"
+ exclude "public/${project.name}/logo.svg"
+ }
+ tree.each { File file ->
+ resources.add(file.absolutePath.substring(dirPath.length()));
+ }
+ }else{
+ def tree = fileTree('dist') {
+ include '**/*.*'
+ exclude '**/webjars/**/*.*'
+ exclude "public/${project.name}/configure.js"
+ exclude "public/${project.name}/favicon.svg"
+ exclude "public/${project.name}/index.html"
+ exclude "public/${project.name}/login-bg.jpg"
+ exclude "public/${project.name}/logo.svg"
+ }
+ tree.each { File file ->
+ resources.add(file.absolutePath.substring(dirPath.length()));
+ }
}
+
//all-in-one------------------------------------
Map allInOne =new LinkedHashMap<>();
allInOne.put("name",project.name);
@@ -587,7 +634,8 @@ subprojects {
// 定义前端构建任务的依赖及执行顺序
frontendNpmInstall.dependsOn(frontendUpdatePackageJson)
- frontendNpmBuild.dependsOn(frontendNpmInstall)
+ frontendNpmSync.dependsOn(frontendNpmInstall)
+ frontendNpmBuild.dependsOn(frontendNpmSync)
frontendNpmProd.dependsOn(frontendNpmInstall)
// 资源处理前进行前端模块的构建
diff --git a/io.sc.platform.gradle/templates/pgp/setup/gradle.properties b/io.sc.platform.gradle/templates/pgp/setup/gradle.properties
index 66190512..7db8ff6d 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.11
+platform_version=8.1.12
platform_plugin_version=8.1.11
-platform_core_frontend_version=8.1.24
+platform_core_frontend_version=8.1.28
###########################################################
# dependencies version
@@ -66,14 +66,15 @@ oshi_version=6.4.2
p6spy_version=3.9.1
poi_ooxml_version=3.17
schemacrawler_version=16.19.11
-spring_boot_version=2.7.17
+#schemacrawler_version=14.21.02
+spring_boot_version=2.7.18
spring_cloud_alibaba_version=2021.0.4.0
spring_cloud_context_version=3.1.4
spring_cloud_version=2021.0.8
spring_security_oauth2_authorization_server_version=0.4.4
spring_statemachine_version=3.2.1
webjars_locator_weblogic_version=0.10
-zip4j_version=2.9.1
+zip4j_version=2.11.5
###########################################################
# asciidoc deploy directory,the path must end with '/'
diff --git a/io.sc.platform.jdbc.driver.oracle-12.2.0.1/build.gradle b/io.sc.platform.jdbc.driver.oracle-12.2.0.1/build.gradle
new file mode 100644
index 00000000..aff0dadd
--- /dev/null
+++ b/io.sc.platform.jdbc.driver.oracle-12.2.0.1/build.gradle
@@ -0,0 +1,7 @@
+//ext['oracle-database.version'] = '12.2.0.1'
+
+dependencies {
+ api(
+ "oracle:oracle:12.2.0.1",
+ )
+}
diff --git a/io.sc.platform.jdbc.driver.oracle-12.2.0.1/src/main/resources/META-INF/platform/plugins/jdbc-connection-template.json b/io.sc.platform.jdbc.driver.oracle-12.2.0.1/src/main/resources/META-INF/platform/plugins/jdbc-connection-template.json
new file mode 100644
index 00000000..154ff2b8
--- /dev/null
+++ b/io.sc.platform.jdbc.driver.oracle-12.2.0.1/src/main/resources/META-INF/platform/plugins/jdbc-connection-template.json
@@ -0,0 +1,10 @@
+{
+ "installerEnable" : true,
+ "type" : "Oracle",
+ "version" : "12.2",
+ "driver" : "oracle.jdbc.OracleDriver",
+ "url" : "jdbc:oracle:thin:@${host}:${port}:${sid}",
+ "urlSample" : "jdbc:oracle:thin:@localhost:1521:EE",
+ "hibernateDialect" : "org.hibernate.dialect.Oracle10gDialect",
+ "validationQuery" : "select 1 from dual"
+}
\ No newline at end of file
diff --git a/io.sc.platform.jdbc.driver.oracle/build.gradle b/io.sc.platform.jdbc.driver.oracle/build.gradle
index 4093e8fa..aff0dadd 100644
--- a/io.sc.platform.jdbc.driver.oracle/build.gradle
+++ b/io.sc.platform.jdbc.driver.oracle/build.gradle
@@ -1,6 +1,7 @@
+//ext['oracle-database.version'] = '12.2.0.1'
+
dependencies {
api(
- "com.oracle.database.jdbc:ojdbc8",
- "com.oracle.database.nls:orai18n"
+ "oracle:oracle:12.2.0.1",
)
-}
\ No newline at end of file
+}
diff --git a/io.sc.platform.jdbc.schemacrawler-14.21.02/build.gradle b/io.sc.platform.jdbc.schemacrawler-14.21.02/build.gradle
new file mode 100644
index 00000000..59c39741
--- /dev/null
+++ b/io.sc.platform.jdbc.schemacrawler-14.21.02/build.gradle
@@ -0,0 +1,12 @@
+dependencies {
+ api(
+ project(":io.sc.platform.jdbc"),
+
+ "us.fatehi:schemacrawler:${schemacrawler_version}",
+ "us.fatehi:schemacrawler-mysql:${schemacrawler_version}",
+ "us.fatehi:schemacrawler-oracle:${schemacrawler_version}",
+ "us.fatehi:schemacrawler-db2:${schemacrawler_version}",
+ "us.fatehi:schemacrawler-postgresql:${schemacrawler_version}",
+ "us.fatehi:schemacrawler-sqlite:${schemacrawler_version}",
+ )
+}
\ No newline at end of file
diff --git a/io.sc.platform.jdbc.schemacrawler-14.21.02/gradle.properties b/io.sc.platform.jdbc.schemacrawler-14.21.02/gradle.properties
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/io.sc.platform.jdbc.schemacrawler-14.21.02/gradle.properties
@@ -0,0 +1 @@
+
diff --git a/io.sc.platform.jdbc.schemacrawler-14.21.02/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java b/io.sc.platform.jdbc.schemacrawler-14.21.02/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java
new file mode 100644
index 00000000..3a21d620
--- /dev/null
+++ b/io.sc.platform.jdbc.schemacrawler-14.21.02/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java
@@ -0,0 +1,218 @@
+package io.sc.platform.jdbc.schemacrawler;
+
+import io.sc.platform.jdbc.DatabaseType;
+import io.sc.platform.jdbc.meta.MetaDataLoader;
+import io.sc.platform.jdbc.meta.support.*;
+import org.springframework.jdbc.datasource.DataSourceUtils;
+import schemacrawler.schema.Catalog;
+import schemacrawler.schema.TableRelationshipType;
+import schemacrawler.schemacrawler.*;
+import schemacrawler.utility.SchemaCrawlerUtility;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.*;
+
+public class MetaDataLoaderImpl implements MetaDataLoader {
+ private Map catalogs =new HashMap();
+ private Object lock =new Object();
+
+ public void crawler(DataSource dataSource) throws SQLException {
+ crawler(dataSource,getDefaultOptions(dataSource));
+ }
+
+ public void crawler(DataSource dataSource, SchemaCrawlerOptions options) throws SQLException {
+ //catalogs.clear();
+ Connection connection = null;
+ try {
+ connection = DataSourceUtils.getConnection(dataSource);
+ synchronized (lock) {
+ catalogs.put(dataSource, SchemaCrawlerUtility.getCatalog(connection,getDefaultOptions(dataSource)));
+ }
+ }catch (SchemaCrawlerException e) {
+ throw new SQLException(e);
+ }finally {
+ DataSourceUtils.releaseConnection(connection, dataSource);
+ }
+ }
+
+ public Catalog getCatalog(DataSource dataSource) throws SQLException{
+ return getCatalog(dataSource,getDefaultOptions(dataSource));
+ }
+
+ public Catalog getCatalog(DataSource dataSource, SchemaCrawlerOptions options) throws SQLException{
+ synchronized (lock) {
+ if(!catalogs.containsKey(dataSource)) {
+ crawler(dataSource,options);
+ }
+ return catalogs.get(dataSource);
+ }
+ }
+
+ @Override
+ public List getSchemas(DataSource dataSource) throws MetaDataAccessException {
+ Catalog catalog = null;
+ try {
+ catalog = getCatalog(dataSource);
+ } catch (SQLException e) {
+ throw new MetaDataAccessException(e);
+ }
+ if(catalog!=null) {
+ Collection schemas =catalog.getSchemas();
+ if(schemas!=null && schemas.size()>0) {
+ List result =new ArrayList<>();
+ for(schemacrawler.schema.Schema schema : schemas){
+ result.add(from(schema));
+ }
+ return result;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public List getTableSummary(DataSource dataSource, String schemaName) throws MetaDataAccessException {
+ List tables =getTables(dataSource,schemaName);
+ List result =new ArrayList<>();
+ for(Table table : tables){
+ TableSummary summary =new TableSummary();
+ summary.setName(table.getName());
+ summary.setRemarks(table.getRemarks());
+ result.add(summary);
+ }
+ return result;
+ }
+
+ @Override
+ public List getTableSummary(DataSource dataSource, String schemaName, boolean isCount) throws MetaDataAccessException {
+ return getTableSummary(dataSource,schemaName,false);
+ }
+
+ @Override
+ public List getTables(DataSource dataSource, String schemaName, String... tableNames) throws MetaDataAccessException {
+ Catalog catalog = null;
+ try {
+ catalog = getCatalog(dataSource);
+ } catch (SQLException e) {
+ throw new MetaDataAccessException(e);
+ }
+ if(catalog!=null) {
+ schemacrawler.schema.Schema schema =findSchema(catalog,schemaName);
+ if(schema!=null) {
+ Collection tables =catalog.getTables(schema);
+ if(tables!=null && tables.size()>0) {
+ List result =new ArrayList();
+ for(schemacrawler.schema.Table table : tables){
+ result.add(from(table));
+ }
+ return result;
+ }
+ }
+ }
+ return null;
+ }
+
+ public boolean isSelfReference(schemacrawler.schema.Table table) {
+ Collection parentTables =table.getRelatedTables(TableRelationshipType.parent);
+ if(parentTables!=null && !parentTables.isEmpty()) {
+ for(schemacrawler.schema.Table parentTable : parentTables) {
+ if(parentTable.equals(table)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private Schema from(schemacrawler.schema.Schema schema){
+ Schema result =new Schema();
+ result.setName(schema.getName()==null?schema.getCatalogName():schema.getName());
+ return result;
+ }
+
+ private Table from(schemacrawler.schema.Table table){
+ Table result =new Table();
+ result.setName(table.getName());
+ result.setRemarks(table.getRemarks());
+ // 处理列
+ for(schemacrawler.schema.Column column : table.getColumns()) {
+ result.getColumns().add(from(column));
+ }
+ return result;
+ }
+
+ private Column from(schemacrawler.schema.Column column){
+ Column result =new Column();
+ result.setName(column.getName());
+ result.setRemarks(column.getRemarks());
+ result.setJavaType(column.getType().getTypeMappedClass());
+ result.setSqlType(column.getColumnDataType().getJavaSqlType().getName());
+ result.setVendorTypeNumber(column.getColumnDataType().getJavaSqlType().getVendorTypeNumber());
+ result.setNullable(column.isNullable());
+ result.setDefaultValue(column.getDefaultValue());
+ result.setGenerated(column.isGenerated());
+ result.setHidden(column.isHidden());
+ result.setAutoIncremented(column.isAutoIncremented());
+ result.setPartOfIndex(column.isPartOfIndex());
+ result.setPartOfUniqueIndex(column.isPartOfUniqueIndex());
+ result.setPartOfPrimaryKey(column.isPartOfPrimaryKey());
+ result.setSize(column.getSize());
+ result.setWidth(column.getWidth());
+ return result;
+ }
+
+ private SchemaCrawlerOptions getDefaultOptions(DataSource dataSource) {
+ final SchemaCrawlerOptions options = new SchemaCrawlerOptions();
+ options.setSchemaInfoLevel(SchemaInfoLevelBuilder.standard());
+ options.setRoutineInclusionRule(new ExcludeAll());
+ options.setTableInclusionRule(new IncludeAll());
+
+
+ options.setSchemaInclusionRule(new RegularExpressionInclusionRule("I9"));
+ //options.setSchemaInclusionRule(new RegularExpressionInclusionRule("FRAMEWORK"));
+
+
+ DatabaseType type =null;
+ try {
+ type = DatabaseType.fromMetaData(dataSource);
+ } catch (org.springframework.jdbc.support.MetaDataAccessException e) {
+ throw new RuntimeException(e);
+ }
+ switch(type) {
+ case DB2:
+ options.setSchemaInclusionRule(new RegularExpressionExclusionRule("NULLID|SQLJ|SYSCAT|SYSFUN|SYSIBM|SYSIBMADM|SYSIBMINTERNAL|SYSIBMTS|SYSPROC|SYSPUBLIC|SYSSTAT|SYSTOOLS"));
+ break;
+ case ORACLE:
+ options.setSchemaInclusionRule(new RegularExpressionExclusionRule("ANONYMOUS|APEX_PUBLIC_USER|APPQOSSYS|BI|CTXSYS|DBSNMP|DIP|EXFSYS|FLOWS_30000|FLOWS_FILES|GSMADMIN_INTERNAL|HR|IX|LBACSYS|MDDATA|MDSYS|MGMT_VIEW|OE|OLAPSYS|ORACLE_OCM|ORDDATA|ORDPLUGINS|ORDSYS|OUTLN|OWBSYS|OWBSYS_AUDIT|PM|RDSADMIN|SCOTT|SH|SI_INFORMTN_SCHEMA|SPATIAL_CSW_ADMIN_USR|SPATIAL_WFS_ADMIN_USR|SYS|SYSMAN|\\\"SYSTEM\\\"|TSMSYS|WKPROXY|WKSYS|WK_TEST|WMSYS|XDB|APEX_[0-9]{6}|FLOWS_[0-9]{5,6}|XS\\$NULL|\\\"XS\\$NULL\\\""));
+ break;
+ case MYSQL:
+ options.setSchemaInclusionRule(new RegularExpressionExclusionRule("sys|mysql|performance_schema|information_schema"));
+ break;
+ case POSTGRESQL:
+ options.setSchemaInclusionRule(new RegularExpressionExclusionRule("pg_catalog|information_schema"));
+ break;
+ default:
+ }
+ return options;
+ }
+
+ private schemacrawler.schema.Schema findSchema(Catalog catalog,String schemaName) {
+ Collection schemas =catalog.getSchemas();
+ if(schemas!=null && schemas.size()>0) {
+ for(schemacrawler.schema.Schema schema : schemas) {
+ DatabaseType type =DatabaseType.fromProductName(catalog.getDatabaseInfo().getProductName());
+ if(DatabaseType.MYSQL.equals(type)) {//mysql 没有 schema,只有 catalog
+ if(schema.getCatalogName().equalsIgnoreCase(schemaName)) {
+ return schema;
+ }
+ }else {
+ if(schema.getName().equalsIgnoreCase(schemaName)) {
+ return schema;
+ }
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/io.sc.platform.jdbc.schemacrawler-14.21.02/src/main/java/io/sc/platform/jdbc/schemacrawler/ParentAndChildrenTableComparator.java b/io.sc.platform.jdbc.schemacrawler-14.21.02/src/main/java/io/sc/platform/jdbc/schemacrawler/ParentAndChildrenTableComparator.java
new file mode 100644
index 00000000..f6eb53c9
--- /dev/null
+++ b/io.sc.platform.jdbc.schemacrawler-14.21.02/src/main/java/io/sc/platform/jdbc/schemacrawler/ParentAndChildrenTableComparator.java
@@ -0,0 +1,22 @@
+package io.sc.platform.jdbc.schemacrawler;
+
+import schemacrawler.schema.Table;
+import schemacrawler.schema.TableRelationshipType;
+
+import java.util.Collection;
+import java.util.Comparator;
+
+public class ParentAndChildrenTableComparator implements Comparator {
+ @Override
+ public int compare(Table o1, Table o2) {
+ Collection parentTables =o1.getRelatedTables(TableRelationshipType.parent);
+ Collection childrenTables =o1.getRelatedTables(TableRelationshipType.child);
+ if(parentTables!=null && !parentTables.isEmpty() && parentTables.contains(o2)) {
+ return 1;
+ }else if(childrenTables!=null && !childrenTables.isEmpty() && childrenTables.contains(o2)) {
+ return -1;
+ }else {
+ return o1.getName().compareTo(o2.getName());
+ }
+ }
+}
diff --git a/io.sc.platform.jdbc.schemacrawler-14.21.02/src/main/resources/META-INF/services/io.sc.platform.jdbc.meta.MetaDataLoader b/io.sc.platform.jdbc.schemacrawler-14.21.02/src/main/resources/META-INF/services/io.sc.platform.jdbc.meta.MetaDataLoader
new file mode 100644
index 00000000..1cb6ecf1
--- /dev/null
+++ b/io.sc.platform.jdbc.schemacrawler-14.21.02/src/main/resources/META-INF/services/io.sc.platform.jdbc.meta.MetaDataLoader
@@ -0,0 +1 @@
+io.sc.platform.jdbc.schemacrawler.MetaDataLoaderImpl
\ 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 85149119..5f787a91 100644
--- a/io.sc.platform.lcdp.frontend/package.json
+++ b/io.sc.platform.lcdp.frontend/package.json
@@ -1,104 +1,102 @@
{
- "name": "io.sc.platform.lcdp.frontend",
- "version": "8.1.11",
- "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.27",
- "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.12",
+ "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.37",
+ "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/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 78998b99..1952a8a5 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
@@ -21,25 +21,25 @@ public class ConfigureEntity extends CorporationAuditorEntity {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID", length=36)
+ @Column(name="ID_", length=36)
@Size(max=36)
private String id;
//名称
- @Column(name="_NAME", length=255)
+ @Column(name="NAME_", length=255)
@Size(min=1,max=255)
private String name;
// 是否活动
- @Column(name="_IS_ACTIVE")
+ @Column(name="IS_ACTIVE_")
@Convert(converter= NumericBooleanConverter.class)
private Boolean active;
- @Column(name="_SETTING")
+ @Column(name="SETTING_")
@Convert(converter= SettingStringConverter.class)
private Setting setting;
- @Column(name="_THEME")
+ @Column(name="THEME_")
@Convert(converter= ThemeStringConverter.class)
private Theme theme;
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 cd783cf2..b86dff6f 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
@@ -1,20 +1,23 @@
package io.sc.platform.lcdp.configure.service.impl;
import io.sc.platform.lcdp.configure.converter.ConfigureEntityVoConverter;
-import io.sc.platform.lcdp.configure.vo.Configure;
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;
+import io.sc.platform.lcdp.configure.vo.Configure;
+import io.sc.platform.mvc.service.SystemParameterService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
import javax.transaction.Transactional;
@Service
public class ConfigureServiceImpl extends DaoServiceImpl implements ConfigureService {
@Autowired private JdbcTemplate jdbcTemplate;
+ @Autowired private SystemParameterService systemParameterService;
@Override
public Configure getActiveConfigure() {
@@ -23,7 +26,12 @@ public class ConfigureServiceImpl extends DaoServiceImpl
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/io.sc.platform.mvc.frontend/package.json b/io.sc.platform.mvc.frontend/package.json
index 37ead0d2..7f7bdc6e 100644
--- a/io.sc.platform.mvc.frontend/package.json
+++ b/io.sc.platform.mvc.frontend/package.json
@@ -1,104 +1,102 @@
{
- "name": "io.sc.platform.mvc.frontend",
- "version": "8.1.11",
- "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.27",
- "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.12",
+ "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.37",
+ "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/support/CascadeMany2Many.java b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/support/CascadeMany2Many.java
index 0c203e9b..d41bc9ee 100644
--- a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/support/CascadeMany2Many.java
+++ b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/support/CascadeMany2Many.java
@@ -28,25 +28,39 @@ import java.util.Set;
* @param 第二个 many 端主键类型
*/
public class CascadeMany2Many {
- private Set sourceAndChildren; //源及其所有孩子(包括孩子的孩子等等)
- private Set sourceCascadeParent; //源的所有父(包括父的父等等)
+ private ID1 source; //源ID
+ private Set sourceParents; //源的所有级联父ID
+ private Set sourceChildren; //源的所有级联子ID
private Set targets; //目标
-
- public Set getSourceAndChildren() {
- return sourceAndChildren;
+
+ public ID1 getSource() {
+ return source;
+ }
+
+ public void setSource(ID1 source) {
+ this.source = source;
+ }
+
+ public Set getSourceParents() {
+ return sourceParents;
}
- public void setSourceAndChildren(Set sourceAndChildren) {
- this.sourceAndChildren = sourceAndChildren;
+
+ public void setSourceParents(Set sourceParents) {
+ this.sourceParents = sourceParents;
}
- public Set getSourceCascadeParent() {
- return sourceCascadeParent;
+
+ public Set getSourceChildren() {
+ return sourceChildren;
}
- public void setSourceCascadeParent(Set sourceCascadeParent) {
- this.sourceCascadeParent = sourceCascadeParent;
+
+ public void setSourceChildren(Set sourceChildren) {
+ this.sourceChildren = sourceChildren;
}
+
public Set getTargets() {
return targets;
}
+
public void setTargets(Set targets) {
this.targets = targets;
}
diff --git a/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/support/OrderItem.java b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/support/OrderItem.java
new file mode 100644
index 00000000..7a413b38
--- /dev/null
+++ b/io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/support/OrderItem.java
@@ -0,0 +1,22 @@
+package io.sc.platform.mvc.support;
+
+public class OrderItem {
+ private ID id;
+ private ORDER order;
+
+ public ID getId() {
+ return id;
+ }
+
+ public void setId(ID id) {
+ this.id = id;
+ }
+
+ public ORDER getOrder() {
+ return order;
+ }
+
+ public void setOrder(ORDER order) {
+ this.order = order;
+ }
+}
diff --git a/io.sc.platform.mvc/src/main/resources/META-INF/platform/plugins/parameters.json b/io.sc.platform.mvc/src/main/resources/META-INF/platform/plugins/parameters.json
index a9ae1599..24152d7a 100644
--- a/io.sc.platform.mvc/src/main/resources/META-INF/platform/plugins/parameters.json
+++ b/io.sc.platform.mvc/src/main/resources/META-INF/platform/plugins/parameters.json
@@ -1,12 +1,12 @@
[
/*系统*/
{"id":"parameter.system","order":0},
- /*系统/首页 Thymeleaf 视图模板*/
+ /*系统/首页路由*/
{
- "id" : "parameter.system.indexPageTemplate",
+ "id" : "parameter.system.homePage",
"parentId" : "parameter.system",
- "code" : "parameter.system.indexPageTemplate",
- "defaultValue" : "io.sc.platform.mvc.frontend.html",
+ "code" : "parameter.system.homePage",
+ "defaultValue" : "/home",
"order" : 100
}
]
\ No newline at end of file
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 aaa4d955..b5ac2115 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
@@ -19,33 +19,33 @@ import java.util.Date;
@MappedSuperclass
public abstract class AuditorEntity extends BaseEntity {
// 数据来源
- @Column(name="_DATA_COME_FROM",length=10)
+ @Column(name="DATA_COME_FROM_",length=10)
@Enumerated(EnumType.STRING)
@JsonProperty(index = 1001)
private DataComeFrom dataComeFrom =DataComeFrom.INPUT;
//创建人(登录名)
@CreatedBy
- @Column(name="_CREATOR", length=255, nullable=false)
+ @Column(name="CREATOR_", length=255, nullable=false)
@JsonProperty(index = 1002)
protected String creator;
//创建日期
@CreatedDate
- @Column(name="_CREATE_DATE", nullable=false)
+ @Column(name="CREATE_DATE_", nullable=false)
@Temporal(TemporalType.TIMESTAMP)
@JsonProperty(index = 1003)
protected Date createDate;
//最后修改人(登录名)
@LastModifiedBy
- @Column(name="_LAST_MODIFIER", length=255, nullable=false)
+ @Column(name="LAST_MODIFIER_", length=255, nullable=false)
@JsonProperty(index = 1004)
protected String lastModifier;
//最后修改日期
@LastModifiedDate
- @Column(name="_LAST_MODIFYDATE", nullable=false)
+ @Column(name="LAST_MODIFYDATE_", nullable=false)
@Temporal(TemporalType.TIMESTAMP)
@JsonProperty(index = 1005)
protected Date lastModifyDate;
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 7cde7e35..322daf0a 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
@@ -9,7 +9,7 @@ import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class CorporationAuditorEntity extends AuditorEntity{
//法人代码
- @Column(name="_CORP_CODE")
+ @Column(name="CORP_CODE_")
protected String corporationCode;
/**
diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java
index 6bef0165..b95227ba 100644
--- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java
+++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java
@@ -8,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
@@ -384,13 +383,28 @@ public abstract class DaoServiceImpl query(Specification specification, QueryParameter queryParameter) throws Exception {
if(queryParameter!=null) {
- Pageable pageable =queryParameter.getPageable();
- if(pageable!=null){
+ if(queryParameter.getPageable()){
+ Pageable pageable =queryParameter.getJpaPageable();
if(specification!=null) {
return repository.findAll(specification, pageable);
}else{
return repository.findAll(pageable);
}
+ }else{
+ Sort sort=queryParameter.getSort();
+ if(sort!=null){
+ if(specification!=null) {
+ return QueryResult.page(repository.findAll(specification, sort));
+ }else{
+ return QueryResult.page(repository.findAll(sort));
+ }
+ }else{
+ if(specification!=null) {
+ return QueryResult.page(repository.findAll(specification));
+ }else{
+ return QueryResult.page(repository.findAll());
+ }
+ }
}
}
return QueryResult.emptyPage();
diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java
index e6446379..1e6cb28e 100644
--- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java
+++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java
@@ -9,8 +9,10 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
+import org.springframework.util.StringUtils;
public class QueryParameter {
+ protected Boolean pageable=true; //是否需要分页
protected Integer firstPage =1; //起始页序号
protected Integer page =1; //当前页(从 firstPage 开始计数)
protected Integer size =20; //页大小
@@ -19,28 +21,18 @@ public class QueryParameter {
protected String criteria; //criteria字符串列表(json 串列表)
protected List criterias =new ArrayList(); //criteria 对象列表(将 json 串转成对象后的列表)
protected String exportFilename; //导出文件名
-
- public Pageable getPageable(){
- if(page==null || size==null){
- return null;
- }
- int _page =1;
- int _size =20;
-
- if(firstPage==1) {//如果起始页从1开始,真实起始页需减一
- _page =page>0? page-1 : 0;
- }else {
- _page =page>=0? page : 0;
- }
-
- if(size>0){
- _size =size;
+
+ public Pageable getJpaPageable(){
+ if(firstPage==1){ //如果起始页从1开始,真实起始页需减一
+ page =page>0? page-1 : 0;
+ }else{
+ page =page>=0? page : 0;
}
Sort sort =getSort();
if(sort!=null){
- return PageRequest.of(_page,_size,sort);
+ return PageRequest.of(page,size,sort);
}else{
- return PageRequest.of(_page,_size);
+ return PageRequest.of(page,size);
}
}
@@ -52,30 +44,44 @@ public class QueryParameter {
for(String sort : sortBy){
if(sort.startsWith("-")){
orders.add(new Order(Direction.DESC,sort.substring(1)));
+ }else if(sort.startsWith("+")){
+ orders.add(new Order(Direction.ASC,sort.substring(1)));
}else{
orders.add(new Order(Direction.ASC,sort));
}
}
return Sort.by(orders);
}
-
+
+ public void addSortBy(String sortBy){
+ if(StringUtils.hasText(sortBy)) {
+ this.sortBy.add(sortBy);
+ }
+ }
+
+ public Boolean getPageable() {
+ return pageable;
+ }
+ public void setPageable(Boolean pageable) {
+ this.pageable = pageable==null? true : pageable;
+ }
public Integer getFirstPage() {
return firstPage;
}
public void setFirstPage(Integer firstPage) {
- this.firstPage = firstPage;
+ this.firstPage = firstPage==null? 1 : (firstPage==1?1:0);
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
- this.page = page;
+ this.page = page==null? 1 : page;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
- this.size = size;
+ this.size = size==null? 20 : size;
}
public List getSortBy() {
return sortBy;
@@ -83,42 +89,35 @@ public class QueryParameter {
public void setSortBy(List sortBy) {
this.sortBy = sortBy;
}
-
public OperatorType getOperator() {
return operator;
}
-
public void setOperator(OperatorType operator) {
this.operator = operator;
}
-
public String getCriteria() {
return criteria;
}
-
public void setCriteria(String criteria) {
this.criteria = criteria;
this.criterias =Criteria.parse(criteria);
}
-
public List getCriterias() {
return criterias;
}
public void setCriterias(List criterias) {
this.criterias = criterias;
}
-
public String getExportFilename() {
return exportFilename;
}
-
public void setExportFilename(String exportFilename) {
this.exportFilename = exportFilename;
}
@Override
public String toString() {
- return "QueryParameter [firstPage=" + firstPage + ", page=" + page + ", size=" + size + ", sortBy=" + sortBy
+ return "QueryParameter [pageable=" + pageable + ",firstPage=" + firstPage + ", page=" + page + ", size=" + size + ", sortBy=" + sortBy
+ ", criterias=" + criterias + "]";
}
}
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 252b8336..af5f77c4 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,6 +2,7 @@ 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;
@@ -9,6 +10,14 @@ import java.util.List;
public class QueryResult {
private QueryResult(){}
+ public static Page page(List list){
+ if(list!=null && !list.isEmpty()) {
+ return new PageImpl(list);
+ }else{
+ return new PageImpl(Collections.emptyList());
+ }
+ }
+
public static Page emptyPage(){
return new PageImpl(Collections.emptyList());
}
diff --git a/io.sc.platform.security.frontend/package.json b/io.sc.platform.security.frontend/package.json
index 42b18200..c640c598 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.11",
+ "version": "8.1.12",
"description": "",
"private": false,
"keywords": [
@@ -79,7 +79,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
- "platform-core": "8.1.27",
+ "platform-core": "8.1.37",
"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/AdministratorRoleAndUserInitializer.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/initializer/AdministratorRoleAndUserInitializer.java
index 400eeb91..7043cf91 100644
--- a/io.sc.platform.security/src/main/java/io/sc/platform/security/initializer/AdministratorRoleAndUserInitializer.java
+++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/initializer/AdministratorRoleAndUserInitializer.java
@@ -95,52 +95,52 @@ public class AdministratorRoleAndUserInitializer implements ApplicationInitializ
}
private Role findAdminRole(){
- return jdbcTemplate.query("select * from SYS_ROLE where _CODE='admin'", Role.getResultSetExtractor());
+ return jdbcTemplate.query("select * from SYS_ROLE where CODE_='admin'", Role.getResultSetExtractor());
}
private void insertAdminRole(String roleId){
SqlBuilder.getInsertIntoSqlBuilder()
.table("SYS_ROLE")
- .field("_ID", roleId)
- .field("_CODE","admin")
- .field("_NAME","系统管理员")
- .field("_DESCRIPTION","系统管理员")
- .field("_ENABLE",1)
- .field("_DATA_COME_FROM","INPUT")
- .field("_CREATOR","system")
- .field("_CREATE_DATE", new java.sql.Date(new Date().getTime()))
- .field("_LAST_MODIFIER","system")
- .field("_LAST_MODIFYDATE",new java.sql.Date(new Date().getTime()))
- .field("_CORP_CODE","_PRIMARY_")
+ .field("ID_", roleId)
+ .field("CODE_","admin")
+ .field("NAME_","系统管理员")
+ .field("DESCRIPTION_","系统管理员")
+ .field("ENABLE_",1)
+ .field("DATA_COME_FROM_","INPUT")
+ .field("CREATOR_","system")
+ .field("CREATE_DATE_", new java.sql.Date(new Date().getTime()))
+ .field("LAST_MODIFIER_","system")
+ .field("LAST_MODIFYDATE_",new java.sql.Date(new Date().getTime()))
+ .field("CORP_CODE_","_PRIMARY_")
.insert(jdbcTemplate);
}
private User findAdminUser(){
- return jdbcTemplate.query("select * from SYS_USER where _LOGINNAME='admin'", User.getResultSetExtractor());
+ return jdbcTemplate.query("select * from SYS_USER where LOGINNAME_='admin'", User.getResultSetExtractor());
}
private void insertAdminUser(String userId){
SqlBuilder.getInsertIntoSqlBuilder()
.table("SYS_USER")
- .field("_ID", userId)
- .field("_LOGINNAME","admin")
- .field("_USERNAME","系统管理员")
- .field("_PASSWORD",passwordEncoder.encode("admin"))
- .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())
- .field("_CORP_CODE","_PRIMARY_")
+ .field("ID_", userId)
+ .field("LOGINNAME_","admin")
+ .field("USERNAME_","系统管理员")
+ .field("PASSWORD_",passwordEncoder.encode("admin"))
+ .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())
+ .field("CORP_CODE_","_PRIMARY_")
.insert(jdbcTemplate);
}
private int countUserAndRole(String userId,String roleId){
- return jdbcTemplate.queryForObject("select count(*) from SYS_USER_ROLE where _USER_ID=? and _ROLE_ID=?", Integer.class,userId,roleId);
+ return jdbcTemplate.queryForObject("select count(*) from SYS_USER_ROLE where USER_ID_=? and ROLE_ID_=?", Integer.class,userId,roleId);
}
private void insertUserAndRole(String userId,String roleId){
- jdbcTemplate.update("insert into SYS_USER_ROLE(_USER_ID,_ROLE_ID) values (?,?)", userId,roleId);
+ jdbcTemplate.update("insert into SYS_USER_ROLE(USER_ID_,ROLE_ID_) values (?,?)", userId,roleId);
}
}
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 46605b40..e10c3c6b 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
@@ -69,20 +69,20 @@ public class CorporationInitializer implements ApplicationInitializer {
}
private Corporation findRootCorporation(){
- return jdbcTemplate.query("select * from SYS_CORPORATION where _CODE='_ROOT_'", Corporation.getResultSetExtractor());
+ return jdbcTemplate.query("select * from SYS_CORPORATION where CODE_='_ROOT_'", Corporation.getResultSetExtractor());
}
private void insertRootCorporation(){
SqlBuilder.getInsertIntoSqlBuilder()
.table("SYS_CORPORATION")
- .field("_CODE","_ROOT_")
- .field("_NAME","_ROOT_")
- .field("_DESCRIPTION","根法人")
- .field("_ENABLE",1)
- .field("_CREATOR","platform")
- .field("_CREATE_DATE", DateUtil.sqlDate())
- .field("_LAST_MODIFIER","platform")
- .field("_LAST_MODIFYDATE",DateUtil.sqlDate())
+ .field("CODE_","_ROOT_")
+ .field("NAME_","_ROOT_")
+ .field("DESCRIPTION_","根法人")
+ .field("ENABLE_",1)
+ .field("CREATOR_","platform")
+ .field("CREATE_DATE_", DateUtil.sqlDate())
+ .field("LAST_MODIFIER_","platform")
+ .field("LAST_MODIFYDATE_",DateUtil.sqlDate())
.insert(jdbcTemplate);
}
}
diff --git a/io.sc.platform.security/src/main/java/io/sc/platform/security/installer/AdministratorInstallerItem.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/installer/AdministratorInstallerItem.java
index a118c4b0..2629ab5f 100644
--- a/io.sc.platform.security/src/main/java/io/sc/platform/security/installer/AdministratorInstallerItem.java
+++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/installer/AdministratorInstallerItem.java
@@ -45,22 +45,22 @@ public class AdministratorInstallerItem implements InstallerItem {
DataSource dataSource =datasourceService.createDatasource(datasourceService.parse(config));
JdbcTemplate jdbcTemplate =new JdbcTemplate(dataSource);
- List> list =jdbcTemplate.queryForList("select * from SYS_USER where _LOGINNAME=?",administratorLoginName);
- if(list!=null && !list.isEmpty()){
- jdbcTemplate.update("update SYS_USER set _PASSWORD=? where _LOGINNAME=?",administratorPassword,administratorLoginName);
+ List> list =jdbcTemplate.queryForList("select * from SYS_USER where LOGINNAME_=?",administratorLoginName);
+ if(!list.isEmpty()){
+ jdbcTemplate.update("update SYS_USER set PASSWORD_=? where LOGINNAME_=?",administratorPassword,administratorLoginName);
}else{
SqlBuilder.getInsertIntoSqlBuilder().table("SYS_USER")
- .field("_ID", UUID.randomUUID().toString())
- .field("_LOGINNAME",administratorLoginName)
- .field("_USERNAME","系统管理员")
- .field("_PASSWORD",administratorPassword)
- .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())
- .field("_CORP_CODE","_PRIMARY_")
+ .field("ID_", UUID.randomUUID().toString())
+ .field("LOGINNAME_",administratorLoginName)
+ .field("USERNAME_","系统管理员")
+ .field("PASSWORD_",administratorPassword)
+ .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())
+ .field("CORP_CODE_","_PRIMARY_")
.insert(jdbcTemplate);
}
DatasourceUtil.close(dataSource);
diff --git a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/impl/UserDetailsServiceImpl.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/impl/UserDetailsServiceImpl.java
index ad3ffd43..ded75799 100644
--- a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/impl/UserDetailsServiceImpl.java
+++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/impl/UserDetailsServiceImpl.java
@@ -23,29 +23,29 @@ import java.util.List;
public class UserDetailsServiceImpl implements UserDetailsService{
private static final Logger log =LoggerFactory.getLogger(UserDetailsServiceImpl.class);
- private static final String userQuery ="select * from SYS_USER where _LOGINNAME=?";
+ private static final String userQuery ="select * from SYS_USER where LOGINNAME_=?";
private static final ResultSetExtractor 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=?";
+ 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_=?";
private static final String roleQuery ="select * from SYS_ROLE R"
+ " join SYS_USER_ROLE UR"
- + " on R._ID=UR._ROLE_ID"
- + " where UR._USER_ID=?";
+ + " on R.ID_=UR.ROLE_ID_"
+ + " where UR.USER_ID_=?";
private static final RowMapper roleRowMapper =Role.getRowMapper();
private static final String orgQuery ="select * from SYS_ORG O"
+ " join SYS_USER_ORG UO"
- + " on O._ID=UO._ORG_ID"
- + " where UO._USER_ID=?";
- private static final String orgQueryById ="select * from SYS_ORG where _ID=?";
+ + " on O.ID_=UO.ORG_ID_"
+ + " where UO.USER_ID_=?";
+ private static final String orgQueryById ="select * from SYS_ORG where ID_=?";
private static final RowMapper orgRowMapper =Org.getRowMapper();
private static final ResultSetExtractor orgExtractor =Org.getResultSetExtractor();
- private static final String applicationQuery ="select * from SYS_APPLICATION where _ID=?";
+ private static final String applicationQuery ="select * from SYS_APPLICATION where ID_=?";
private static final ResultSetExtractor applicationExtractor = Application.getResultSetExtractor();
- private static final String corporationQuery ="select * from SYS_CORPORATION where _CODE=?";
+ private static final String corporationQuery ="select * from SYS_CORPORATION where CODE_=?";
private static final ResultSetExtractor corporationExtractor =Corporation.getResultSetExtractor();
private JdbcTemplate jdbcTemplate;
diff --git a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Application.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Application.java
index 4be41e51..86b39174 100644
--- a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Application.java
+++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Application.java
@@ -39,9 +39,9 @@ public class Application {
private static Application assembleUser(ResultSet rs) throws SQLException {
Application application =new Application();
- application.setId(rs.getString("_ID"));
- application.setCode(rs.getString("_CODE"));
- application.setName(rs.getString("_NAME"));
+ application.setId(rs.getString("ID_"));
+ application.setCode(rs.getString("CODE_"));
+ application.setName(rs.getString("NAME_"));
return application;
}
diff --git a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Corporation.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Corporation.java
index 30459a28..ff43f960 100644
--- a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Corporation.java
+++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Corporation.java
@@ -38,8 +38,8 @@ public class Corporation {
private static Corporation assembleUser(ResultSet rs) throws SQLException {
Corporation corporation =new Corporation();
- corporation.setCode(rs.getString("_CODE"));
- corporation.setName(rs.getString("_NAME"));
+ corporation.setCode(rs.getString("CODE_"));
+ corporation.setName(rs.getString("NAME_"));
return corporation;
}
diff --git a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Org.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Org.java
index f08d031e..ea34be58 100644
--- a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Org.java
+++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Org.java
@@ -40,10 +40,10 @@ public class Org {
private static Org assembleUser(ResultSet rs) throws SQLException {
Org org =new Org();
- org.setId(rs.getString("_ID"));
- org.setCode(rs.getString("_CODE"));
- org.setName(rs.getString("_NAME"));
- org.setParentId(rs.getString("_PARENT_ID"));
+ org.setId(rs.getString("ID_"));
+ org.setCode(rs.getString("CODE_"));
+ org.setName(rs.getString("NAME_"));
+ org.setParentId(rs.getString("PARENT_ID_"));
return org;
}
diff --git a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Role.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Role.java
index 9245e9c9..0c76b08d 100644
--- a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Role.java
+++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/Role.java
@@ -39,9 +39,9 @@ public class Role {
private static Role assembleUser(ResultSet rs) throws SQLException {
Role role =new Role();
- role.setId(rs.getString("_ID"));
- role.setCode(rs.getString("_CODE"));
- role.setName(rs.getString("_NAME"));
+ role.setId(rs.getString("ID_"));
+ role.setCode(rs.getString("CODE_"));
+ role.setName(rs.getString("NAME_"));
return role;
}
diff --git a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/User.java b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/User.java
index f2df32a9..3c5af642 100644
--- a/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/User.java
+++ b/io.sc.platform.security/src/main/java/io/sc/platform/security/service/support/User.java
@@ -51,21 +51,21 @@ public class User {
private static User assembleUser(ResultSet rs) throws SQLException {
User user = new User();
- user.setId(rs.getString("_ID"));
- user.setLoginName(rs.getString("_LOGINNAME"));
- user.setUserName(rs.getString("_USERNAME"));
- user.setPassword(rs.getString("_PASSWORD"));
- user.setEnable(1 == rs.getInt("_ENABLE") ? true : false);
- user.setAccountExpired(1 == rs.getInt("_IS_ACCOUNT_EXPIRED") ? true : false);
- user.setAccountLocked(1 == rs.getInt("_IS_ACCOUNT_LOCKED") ? true : false);
- user.setCredentialsExpired(1 == rs.getInt("_IS_CREDENTIALS_EXPIRED") ? true : false);
- user.setEmail(rs.getString("_EMAIL"));
- user.setPhone(rs.getString("_PHONE"));
- user.setMobile(rs.getString("_MOBILE"));
- user.setDefaultRoleId(rs.getString("_DEFAULT_ROLE_ID"));
- user.setDefaultOrgId(rs.getString("_DEFAULT_ORG_ID"));
- user.setDefaultAppId(rs.getString("_DEFAULT_APP_ID"));
- user.setCorporationCode(rs.getString("_CORP_CODE"));
+ user.setId(rs.getString("ID_"));
+ user.setLoginName(rs.getString("LOGINNAME_"));
+ user.setUserName(rs.getString("USERNAME_"));
+ user.setPassword(rs.getString("PASSWORD_"));
+ user.setEnable(1 == rs.getInt("ENABLE_") ? true : false);
+ user.setAccountExpired(1 == rs.getInt("IS_ACCOUNT_EXPIRED_") ? true : false);
+ user.setAccountLocked(1 == rs.getInt("IS_ACCOUNT_LOCKED_") ? true : false);
+ user.setCredentialsExpired(1 == rs.getInt("IS_CREDENTIALS_EXPIRED_") ? true : false);
+ user.setEmail(rs.getString("EMAIL_"));
+ user.setPhone(rs.getString("PHONE_"));
+ user.setMobile(rs.getString("MOBILE_"));
+ user.setDefaultRoleId(rs.getString("DEFAULT_ROLE_ID_"));
+ user.setDefaultOrgId(rs.getString("DEFAULT_ORG_ID_"));
+ user.setDefaultAppId(rs.getString("DEFAULT_APP_ID_"));
+ user.setCorporationCode(rs.getString("CORP_CODE_"));
return user;
}
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 82c288ae..c4f5895b 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,219 +13,210 @@
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+ referencedColumnNames="CODE_" onDelete="CASCADE"/>
-
+
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
-
+
-
+
+ referencedColumnNames="ID_" onDelete="CASCADE"/>
-
-
+
+
-
+
-
+
+ referencedColumnNames="ID_" onDelete="CASCADE"/>
+ referencedColumnNames="ID_" onDelete="CASCADE"/>
-
-
+
+
-
+
-
+
+ referencedColumnNames="ID_" onDelete="CASCADE"/>
+ referencedColumnNames="ID_" onDelete="CASCADE"/>
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
new file mode 100644
index 00000000..7006e5a0
--- /dev/null
+++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/announcement/AnnouncementVo.java
@@ -0,0 +1,44 @@
+package io.sc.platform.system.api.announcement;
+
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import io.sc.platform.orm.api.vo.AuditorVo;
+
+
+@JsonPropertyOrder({
+ "id",
+ "title",
+ "content",
+ "creator",
+ "createDate",
+ "lastModifier",
+ "lastModifyDate"
+})
+public class AnnouncementVo extends AuditorVo {
+ private String id;
+ private String title;
+ private String content;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+}
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 6edeec22..f20cca5d 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
@@ -12,6 +12,7 @@ public abstract class MenuVo extends CorporationAuditorVo {
protected Boolean enable;
protected Integer order;
protected String authorizeExpression;
+ protected boolean selected;
public String getType() {
return type;
@@ -85,4 +86,11 @@ public abstract class MenuVo extends CorporationAuditorVo {
this.authorizeExpression = authorizeExpression;
}
+ public boolean isSelected() {
+ return selected;
+ }
+
+ public void setSelected(boolean selected) {
+ this.selected = selected;
+ }
}
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 78883033..fe35f881 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
@@ -17,6 +17,8 @@ public class OrgVo extends CorporationAuditorVo {
//父组织ID
private String parentId;
+ private boolean selected;
+
public String getId() {
return id;
}
@@ -72,4 +74,12 @@ public class OrgVo extends CorporationAuditorVo {
public void setParentId(String parentId) {
this.parentId = parentId;
}
+
+ public boolean isSelected() {
+ return selected;
+ }
+
+ public void setSelected(boolean selected) {
+ this.selected = selected;
+ }
}
diff --git a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/parameter/Parameter.java b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/parameter/Parameter.java
deleted file mode 100644
index f9a22cb7..00000000
--- a/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/parameter/Parameter.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package io.sc.platform.system.api.parameter;
-
-public class Parameter {
-}
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
new file mode 100644
index 00000000..9eef73a0
--- /dev/null
+++ b/io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/parameter/ParameterVo.java
@@ -0,0 +1,40 @@
+package io.sc.platform.system.api.parameter;
+
+public class ParameterVo {
+ private String id;
+ private String code;
+ private String value;
+ private String parentId;
+
+ 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 getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public String getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(String parentId) {
+ this.parentId = parentId;
+ }
+}
diff --git a/io.sc.platform.system.frontend/package.json b/io.sc.platform.system.frontend/package.json
index f921b9b9..4ba2e235 100644
--- a/io.sc.platform.system.frontend/package.json
+++ b/io.sc.platform.system.frontend/package.json
@@ -1,6 +1,6 @@
{
"name": "io.sc.platform.system.frontend",
- "version": "8.1.11",
+ "version": "8.1.12",
"description": "",
"private": false,
"keywords": [],
@@ -77,7 +77,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
- "platform-core": "8.1.27",
+ "platform-core": "8.1.42",
"quasar": "2.13.0",
"tailwindcss": "3.3.5",
"vue": "3.3.7",
diff --git a/io.sc.platform.system.frontend/public/index.html b/io.sc.platform.system.frontend/public/index.html
index b5074871..bc996180 100644
--- a/io.sc.platform.system.frontend/public/index.html
+++ b/io.sc.platform.system.frontend/public/index.html
@@ -6,10 +6,10 @@
-
-
-
-
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/components/index.ts b/io.sc.platform.system.frontend/src/components/index.ts
index 0dd184c1..2888a1d4 100644
--- a/io.sc.platform.system.frontend/src/components/index.ts
+++ b/io.sc.platform.system.frontend/src/components/index.ts
@@ -2,17 +2,17 @@
* 此文件为自动生成文件,请勿修改
*/
-import Corporation from '@/views/Corporation.vue';
-import User from '@/views/User.vue';
-import Role from '@/views/Role.vue';
-import Org from '@/views/Org.vue';
+import Corporation from '@/views/corporation/Corporation.vue';
+import User from '@/views/user/User.vue';
+import Role from '@/views/role/Role.vue';
+import Org from '@/views/org/Org.vue';
import Department from '@/views/Department.vue';
-import Menu from '@/views/Menu.vue';
-import AnnouncementManager from '@/views/AnnouncementManager.vue';
+import Menu from '@/views/menu/Menu.vue';
+import announcement from '@/views/announcement/Announcement.vue';
import NotificationManager from '@/views/NotificationManager.vue';
-import Parameter from '@/views/Parameter.vue';
-import Dictionary from '@/views/Dictionary.vue';
-import I18n from '@/views/I18n.vue';
+import Parameter from '@/views/parameter/Parameter.vue';
+import Dictionary from '@/views/dictionary/Dictionary.vue';
+import I18n from '@/views/i18n/I18n.vue';
import AuditLog from '@/views/monitor/AuditLog.vue';
import Log from '@/views/monitor/Log.vue';
import Resources from '@/views/monitor/Resources.vue';
@@ -25,7 +25,7 @@ const localComponents = {
'component.system.Org': Org,
'component.system.Department': Department,
'component.system.Menu': Menu,
- 'component.system.AnnouncementManager': AnnouncementManager,
+ 'component.system.announcement': announcement,
'component.system.NotificationManager': NotificationManager,
'component.system.Parameter': Parameter,
'component.system.Dictionary': Dictionary,
diff --git a/io.sc.platform.system.frontend/src/i18n/messages.json b/io.sc.platform.system.frontend/src/i18n/messages.json
index e1c4f407..867e0143 100644
--- a/io.sc.platform.system.frontend/src/i18n/messages.json
+++ b/io.sc.platform.system.frontend/src/i18n/messages.json
@@ -6,7 +6,7 @@
"menu.system.org" : "Organization",
"menu.system.department" : "Department",
"menu.system.menu" : "Menu",
- "menu.system.announcementManager" : "Announcement",
+ "menu.system.announcement" : "Announcement",
"menu.system.notificationManager" : "Notification",
"menu.system.parameter" : "Parameter",
"menu.system.dictionary" : "Dictionary",
@@ -19,13 +19,38 @@
"system.user.gridTitle":"User List",
"system.role.gridTitle":"Role List",
+ "system.org.gridTitle":"Org Tree",
+ "system.announcement.gridTitle":"Announcement List",
+ "system.monitor.auditlog.gridTitle":"Audit Log List",
+
+ "system.user.action.addUser":"Add User",
+ "system.user.action.addAllUser":"Add All User",
+ "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",
"system.role.action.removeAllRole":"Remove All Role",
- "system.org.gridTitle":"Org Tree",
+ "system.menu.action.addTop":"Add Top Menu",
+ "system.menu.action.addChild":"Add Child Menu",
+
+ "system.corporation.action.addTop":"Add Top Corporation",
+ "system.corporation.action.addChild":"Add Child Corporation",
+
+
+ "system.monitor.log.tab.view":"Log View",
+ "system.monitor.log.tab.download":"Log Download",
+ "system.monitor.log.tab.level":"Log Level",
+
+
"accountExpired": "Expired",
"accountLocked": "Locked",
- "credentialsExpired": "Credentials Expired"
+ "credentialsExpired": "Credentials Expired",
+
+
+ "parameter.system":"System",
+ "parameter.system.homePage":"Home Page"
}
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 f8cbb07a..14b430ef 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
@@ -6,7 +6,7 @@
"menu.system.org" : "機構管理",
"menu.system.department" : "部門管理",
"menu.system.menu" : "菜單管理",
- "menu.system.announcementManager" : "公告管理",
+ "menu.system.announcement" : "公告管理",
"menu.system.notificationManager" : "消息管理",
"menu.system.parameter" : "參數管理",
"menu.system.dictionary" : "數據字典",
@@ -19,12 +19,35 @@
"system.user.gridTitle":"用戶列表",
"system.role.gridTitle":"角色列表",
+ "system.org.gridTitle":"機構樹",
+ "system.announcement.gridTitle":"公告列表",
+ "system.monitor.auditlog.gridTitle":"審計日誌列表",
+
+ "system.user.action.addUser":"添加用户",
+ "system.user.action.addAllUser":"添加所有用户",
+ "system.user.action.removeUser":"移除用户",
+ "system.user.action.removeAllUser":"移除所有用户",
+ "system.user.action.setPassword":"修改密碼",
+
"system.role.action.addRole":"添加角色",
"system.role.action.addAllRole":"添加所有角色",
"system.role.action.removeRole":"移除角色",
"system.role.action.removeAllRole":"移除所有角色",
- "system.org.gridTitle":"機構樹",
+
+ "system.menu.action.addTop":"新增頂級菜單",
+ "system.menu.action.addChild":"新增子菜單",
+
+ "system.corporation.action.addTop":"新增頂級法人",
+ "system.corporation.action.addChild":"新增子法人",
+
+ "system.monitor.log.tab.view":"日誌查看",
+ "system.monitor.log.tab.download":"日誌下載",
+ "system.monitor.log.tab.level":"日誌級別",
+
"accountExpired": "是否過期",
"accountLocked": "是否鎖定",
- "credentialsExpired": "是否密碼過期"
+ "credentialsExpired": "是否密碼過期",
+
+ "parameter.system":"系統",
+ "parameter.system.homePage":"首頁"
}
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 5a3fa9e8..2473f3ce 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
@@ -6,7 +6,7 @@
"menu.system.org" : "机构管理",
"menu.system.department" : "部门管理",
"menu.system.menu" : "菜单管理",
- "menu.system.announcementManager" : "公告管理",
+ "menu.system.announcement" : "公告管理",
"menu.system.notificationManager" : "消息管理",
"menu.system.parameter" : "参数管理",
"menu.system.dictionary" : "数据字典",
@@ -19,12 +19,36 @@
"system.user.gridTitle":"用户列表",
"system.role.gridTitle":"角色列表",
+ "system.org.gridTitle":"机构树",
+ "system.announcement.gridTitle":"公告列表",
+ "system.monitor.auditlog.gridTitle":"审计日志列表",
+
+ "system.user.action.addUser":"添加用户",
+ "system.user.action.addAllUser":"添加所有用户",
+ "system.user.action.removeUser":"移除用户",
+ "system.user.action.removeAllUser":"移除所有用户",
+ "system.user.action.setPassword":"修改密码",
+
"system.role.action.addRole":"添加角色",
"system.role.action.addAllRole":"添加所有角色",
"system.role.action.removeRole":"移除角色",
"system.role.action.removeAllRole":"移除所有角色",
- "system.org.gridTitle":"机构树",
+
+ "system.menu.action.addTop":"新增顶级菜单",
+ "system.menu.action.addChild":"新增子菜单",
+
+ "system.corporation.action.addTop":"新增顶级法人",
+ "system.corporation.action.addChild":"新增子法人",
+
+ "system.monitor.log.tab.view":"日志查看",
+ "system.monitor.log.tab.download":"日志下载",
+ "system.monitor.log.tab.level":"日志级别",
+
+
"accountExpired": "是否过期",
"accountLocked": "是否锁定",
- "credentialsExpired": "是否密码过期"
+ "credentialsExpired": "是否密码过期",
+
+ "parameter.system":"系统",
+ "parameter.system.homePage":"首页"
}
diff --git a/io.sc.platform.system.frontend/src/menus/menus.json b/io.sc.platform.system.frontend/src/menus/menus.json
index 4e4ae785..d48ba302 100644
--- a/io.sc.platform.system.frontend/src/menus/menus.json
+++ b/io.sc.platform.system.frontend/src/menus/menus.json
@@ -35,7 +35,7 @@
/*系统管理/分隔符*/
{"type":"SEPERATOR", "order":900, "parentId":"menu.system"},
/*系统管理/公告管理*/
- {"type":"ROUTE", "order":1000, "parentId":"menu.system", "id":"menu.system.announcementManager", "titleI18nKey":"menu.system.announcementManager", "icon":"bi-megaphone", "routeName":"route.system.announcementManager"},
+ {"type":"ROUTE", "order":1000, "parentId":"menu.system", "id":"menu.system.announcementManager", "titleI18nKey":"menu.system.announcement", "icon":"bi-megaphone", "routeName":"route.system.announcement"},
/*系统管理/消息管理*/
{"type":"ROUTE", "order":1100, "parentId":"menu.system", "id":"menu.system.notificationManager", "titleI18nKey":"menu.system.notificationManager", "icon":"bi-chat-dots", "routeName":"route.system.notificationManager"},
/*系统管理/分隔符*/
diff --git a/io.sc.platform.system.frontend/src/routes/routes.json b/io.sc.platform.system.frontend/src/routes/routes.json
index 527decd8..4921c5b3 100644
--- a/io.sc.platform.system.frontend/src/routes/routes.json
+++ b/io.sc.platform.system.frontend/src/routes/routes.json
@@ -6,7 +6,7 @@
"priority": 0,
"module": "io.sc.platform.system.frontend",
"component": "component.system.Corporation",
- "componentPath":"@/views/Corporation.vue",
+ "componentPath":"@/views/corporation/Corporation.vue",
"redirect": null,
"meta": {
"permissions": [
@@ -21,7 +21,7 @@
"priority": 0,
"module": "io.sc.platform.system.frontend",
"component": "component.system.User",
- "componentPath":"@/views/User.vue",
+ "componentPath":"@/views/user/User.vue",
"redirect": null,
"meta": {
"permissions": [
@@ -36,7 +36,7 @@
"priority": 0,
"module": "io.sc.platform.system.frontend",
"component": "component.system.Role",
- "componentPath":"@/views/Role.vue",
+ "componentPath":"@/views/role/Role.vue",
"redirect": null,
"meta": {
"permissions": [
@@ -51,7 +51,7 @@
"priority": 0,
"module": "io.sc.platform.system.frontend",
"component": "component.system.Org",
- "componentPath":"@/views/Org.vue",
+ "componentPath":"@/views/org/Org.vue",
"redirect": null,
"meta": {
"permissions": [
@@ -81,7 +81,7 @@
"priority": 0,
"module": "io.sc.platform.system.frontend",
"component": "component.system.Menu",
- "componentPath":"@/views/Menu.vue",
+ "componentPath":"@/views/menu/Menu.vue",
"redirect": null,
"meta": {
"permissions": [
@@ -90,17 +90,17 @@
}
},
{
- "name": "route.system.announcementManager",
- "path": "system/announcementManager",
+ "name": "route.system.announcement",
+ "path": "system/announcement",
"parent": "/",
"priority": 0,
"module": "io.sc.platform.system.frontend",
- "component": "component.system.AnnouncementManager",
- "componentPath":"@/views/AnnouncementManager.vue",
+ "component": "component.system.announcement",
+ "componentPath":"@/views/announcement/Announcement.vue",
"redirect": null,
"meta": {
"permissions": [
- "/system/announcementManager/**/*"
+ "/system/announcement/**/*"
]
}
},
@@ -126,7 +126,7 @@
"priority": 0,
"module": "io.sc.platform.system.frontend",
"component": "component.system.Parameter",
- "componentPath":"@/views/Parameter.vue",
+ "componentPath":"@/views/parameter/Parameter.vue",
"redirect": null,
"meta": {
"permissions": [
@@ -141,7 +141,7 @@
"priority": 0,
"module": "io.sc.platform.system.frontend",
"component": "component.system.Dictionary",
- "componentPath":"@/views/Dictionary.vue",
+ "componentPath":"@/views/dictionary/Dictionary.vue",
"redirect": null,
"meta": {
"permissions": [
@@ -156,7 +156,7 @@
"priority": 0,
"module": "io.sc.platform.system.frontend",
"component": "component.system.I18n",
- "componentPath":"@/views/I18n.vue",
+ "componentPath":"@/views/i18n/I18n.vue",
"redirect": null,
"meta": {
"permissions": [
diff --git a/io.sc.platform.system.frontend/src/views/Corporation.vue b/io.sc.platform.system.frontend/src/views/Corporation.vue
deleted file mode 100644
index a0272b90..00000000
--- a/io.sc.platform.system.frontend/src/views/Corporation.vue
+++ /dev/null
@@ -1,4 +0,0 @@
-
- Corporation
-
-
diff --git a/io.sc.platform.system.frontend/src/views/Dictionary.vue b/io.sc.platform.system.frontend/src/views/Dictionary.vue
deleted file mode 100644
index cb396a3b..00000000
--- a/io.sc.platform.system.frontend/src/views/Dictionary.vue
+++ /dev/null
@@ -1,4 +0,0 @@
-
- Dictionary
-
-
diff --git a/io.sc.platform.system.frontend/src/views/Parameter.vue b/io.sc.platform.system.frontend/src/views/Parameter.vue
deleted file mode 100644
index defc575a..00000000
--- a/io.sc.platform.system.frontend/src/views/Parameter.vue
+++ /dev/null
@@ -1,4 +0,0 @@
-
- Parameter
-
-
diff --git a/io.sc.platform.system.frontend/src/views/announcement/Announcement.vue b/io.sc.platform.system.frontend/src/views/announcement/Announcement.vue
new file mode 100644
index 00000000..ec3dff4f
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/announcement/Announcement.vue
@@ -0,0 +1,70 @@
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/corporation/Corporation.vue b/io.sc.platform.system.frontend/src/views/corporation/Corporation.vue
new file mode 100644
index 00000000..ccde5fe4
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/corporation/Corporation.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/dictionary/Dictionary.vue b/io.sc.platform.system.frontend/src/views/dictionary/Dictionary.vue
new file mode 100644
index 00000000..28bd4a66
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/dictionary/Dictionary.vue
@@ -0,0 +1,70 @@
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/i18n/I18n.vue b/io.sc.platform.system.frontend/src/views/i18n/I18n.vue
new file mode 100644
index 00000000..fd0364c9
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/i18n/I18n.vue
@@ -0,0 +1,70 @@
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/menu/Menu.vue b/io.sc.platform.system.frontend/src/views/menu/Menu.vue
new file mode 100644
index 00000000..fd0047c1
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/menu/Menu.vue
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/menu/SelectRoleDialog.vue b/io.sc.platform.system.frontend/src/views/menu/SelectRoleDialog.vue
new file mode 100644
index 00000000..17744dc3
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/menu/SelectRoleDialog.vue
@@ -0,0 +1,155 @@
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/monitor/AuditLog.vue b/io.sc.platform.system.frontend/src/views/monitor/AuditLog.vue
index 430681c7..2eb7e4c5 100644
--- a/io.sc.platform.system.frontend/src/views/monitor/AuditLog.vue
+++ b/io.sc.platform.system.frontend/src/views/monitor/AuditLog.vue
@@ -1,4 +1,94 @@
- AuditLog
+
-
+
diff --git a/io.sc.platform.system.frontend/src/views/monitor/Log.vue b/io.sc.platform.system.frontend/src/views/monitor/Log.vue
index 02a35ebc..73132ca9 100644
--- a/io.sc.platform.system.frontend/src/views/monitor/Log.vue
+++ b/io.sc.platform.system.frontend/src/views/monitor/Log.vue
@@ -1,4 +1,141 @@
- Log
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/io.sc.platform.system.frontend/src/views/org/Org.vue b/io.sc.platform.system.frontend/src/views/org/Org.vue
new file mode 100644
index 00000000..0de21508
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/org/Org.vue
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/org/SelectUserDialog.vue b/io.sc.platform.system.frontend/src/views/org/SelectUserDialog.vue
new file mode 100644
index 00000000..93164570
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/org/SelectUserDialog.vue
@@ -0,0 +1,154 @@
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/parameter/Parameter.vue b/io.sc.platform.system.frontend/src/views/parameter/Parameter.vue
new file mode 100644
index 00000000..73070a5d
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/parameter/Parameter.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/role/Role.vue b/io.sc.platform.system.frontend/src/views/role/Role.vue
new file mode 100644
index 00000000..19d13a24
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/role/Role.vue
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/role/SelectUserDialog.vue b/io.sc.platform.system.frontend/src/views/role/SelectUserDialog.vue
new file mode 100644
index 00000000..40c84a08
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/role/SelectUserDialog.vue
@@ -0,0 +1,152 @@
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/user/ChangePasswordDialog.vue b/io.sc.platform.system.frontend/src/views/user/ChangePasswordDialog.vue
new file mode 100644
index 00000000..77dbe203
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/user/ChangePasswordDialog.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/user/SelectRoleDialog.vue b/io.sc.platform.system.frontend/src/views/user/SelectRoleDialog.vue
new file mode 100644
index 00000000..da565fb6
--- /dev/null
+++ b/io.sc.platform.system.frontend/src/views/user/SelectRoleDialog.vue
@@ -0,0 +1,152 @@
+
+
+
+
diff --git a/io.sc.platform.system.frontend/src/views/User.vue b/io.sc.platform.system.frontend/src/views/user/User.vue
similarity index 66%
rename from io.sc.platform.system.frontend/src/views/User.vue
rename to io.sc.platform.system.frontend/src/views/user/User.vue
index bd6b7b69..a6cdc11f 100644
--- a/io.sc.platform.system.frontend/src/views/User.vue
+++ b/io.sc.platform.system.frontend/src/views/user/User.vue
@@ -28,12 +28,13 @@
-
+
-
-
+
+
+
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/controller/AnnouncementController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/controller/AnnouncementController.java
new file mode 100644
index 00000000..7632c3f2
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/controller/AnnouncementController.java
@@ -0,0 +1,14 @@
+package io.sc.platform.system.announcement.controller;
+
+import io.sc.platform.mvc.controller.support.RestCrudController;
+import io.sc.platform.system.announcement.convertor.AnnouncementEntityVoConverter;
+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 org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("api/system/announcement")
+public class AnnouncementController 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
new file mode 100644
index 00000000..14dfccf6
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/convertor/AnnouncementEntityVoConverter.java
@@ -0,0 +1,31 @@
+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
new file mode 100644
index 00000000..1a2a66b7
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/jpa/entity/AnnouncementEntity.java
@@ -0,0 +1,52 @@
+package io.sc.platform.system.announcement.jpa.entity;
+
+import io.sc.platform.orm.entity.AuditorEntity;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import javax.validation.constraints.Size;
+
+@Entity
+@Table(name="SYS_ANNOUNCEMENT")
+public class AnnouncementEntity extends AuditorEntity {
+ //主键
+ @Id
+ @GeneratedValue(generator = "system-uuid")
+ @GenericGenerator(name = "system-uuid", strategy = "uuid2")
+ @Column(name="ID_", length=36)
+ @Size(max=36)
+ private String id;
+
+ //标题
+ @Column(name="TITLE_", length=255)
+ @Size(max=255)
+ private String title;
+
+ //公告内容
+ @Column(name="CONTENT_")
+ private String content;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/jpa/repository/AnnouncementRepository.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/jpa/repository/AnnouncementRepository.java
new file mode 100644
index 00000000..1e44034e
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/jpa/repository/AnnouncementRepository.java
@@ -0,0 +1,8 @@
+package io.sc.platform.system.announcement.jpa.repository;
+
+import io.sc.platform.orm.repository.DaoRepository;
+import io.sc.platform.system.announcement.jpa.entity.AnnouncementEntity;
+
+public interface AnnouncementRepository extends DaoRepository {
+
+}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/service/AnnouncementService.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/service/AnnouncementService.java
new file mode 100644
index 00000000..6f37d053
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/service/AnnouncementService.java
@@ -0,0 +1,8 @@
+package io.sc.platform.system.announcement.service;
+
+import io.sc.platform.orm.service.DaoService;
+import io.sc.platform.system.announcement.jpa.entity.AnnouncementEntity;
+import io.sc.platform.system.announcement.jpa.repository.AnnouncementRepository;
+
+public interface AnnouncementService extends DaoService {
+}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/service/impl/AnnouncementServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/service/impl/AnnouncementServiceImpl.java
new file mode 100644
index 00000000..b7711883
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/announcement/service/impl/AnnouncementServiceImpl.java
@@ -0,0 +1,12 @@
+package io.sc.platform.system.announcement.service.impl;
+
+import io.sc.platform.orm.service.impl.DaoServiceImpl;
+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 org.springframework.stereotype.Service;
+
+@Service
+public class AnnouncementServiceImpl extends DaoServiceImpl implements AnnouncementService {
+
+}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/controller/AuditLogController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/controller/AuditLogController.java
index 6ce385c9..4199c7ac 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/controller/AuditLogController.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/auditlog/controller/AuditLogController.java
@@ -1,18 +1,14 @@
package io.sc.platform.system.auditlog.controller;
-import io.sc.platform.core.audit.AuditLog;
import io.sc.platform.mvc.controller.support.RestCrudController;
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;
-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;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
-@RequestMapping("/auditlog")
+@RequestMapping("/api/system/monitor/auditlog")
public class AuditLogController 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 dde810d3..51dc0161 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
@@ -1,13 +1,11 @@
package io.sc.platform.system.auditlog.jpa.entity;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
-import io.sc.platform.core.audit.AuditLog;
import io.sc.platform.orm.entity.BaseEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.Size;
-import java.io.Serializable;
import java.util.Date;
/**
@@ -24,64 +22,64 @@ public class AuditLogEntity extends BaseEntity {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID")
+ @Column(name="ID_")
@Size(max=36)
private String id;
- @Column(name="_CLASS_NAME",length=255)
+ @Column(name="CLASS_NAME_",length=255)
@Size(max=255)
private String className; //AuditLog 注解所在类的名称
- @Column(name="_METHOD_NAME",length=255)
+ @Column(name="METHOD_NAME_",length=255)
@Size(max=255)
private String methodName; //AuditLog 注解所在方法的名称
- @Column(name="_HTTP_METHOD",length=20)
+ @Column(name="HTTP_METHOD_",length=20)
@Size(max=20)
private String httpMethod; //AuditLog 注解所在方法的 http 请求方法(get,post,put,update,delete)
- @Column(name="_ACTION",length=255)
+ @Column(name="ACTION_",length=255)
@Size(max=255)
private String action; //AuditLog 注解中指定的日志操作
- @Column(name="_STATUS",length=20)
+ @Column(name="STATUS_",length=20)
@Size(max=20)
private String status; //请求方法的执行状态
- @Column(name="_START_DATE")
+ @Column(name="START_DATE_")
@Temporal(TemporalType.TIMESTAMP)
private Date startDate; //方法开始执行时间
- @Column(name="_EXECUTE_TIME")
+ @Column(name="EXECUTE_TIME_")
private Long executeTime; //方法执行的时间(单位:毫秒)
- @Column(name="_URL",length=2045)
+ @Column(name="URL_",length=2045)
@Size(max=2048)
private String url; //请求的 URL
- @Column(name="_IP",length=50)
+ @Column(name="IP_",length=50)
@Size(max=50)
private String ip; //调用者 IP 地址
- @Column(name="_LOGIN_NAME",length=255)
+ @Column(name="LOGIN_NAME_",length=255)
@Size(max=255)
private String loginName; //调用者登录用户名
- @Column(name="_OLD_VALUE")
+ @Column(name="OLD_VALUE_")
private String oldValue; //调用者请求的数据原始值(json字符串)
- @Column(name="_NEW_VALUE")
+ @Column(name="NEW_VALUE_")
private String newValue; //调用者请求的数据新值(json字符串)
- @Column(name="_EXCEPTION",length=255)
+ @Column(name="EXCEPTION_",length=255)
@Size(max=255)
private String exception; //方法执行抛出的违例类名称
- @Column(name="_EXCEPTION_MESSAGE",length=1024)
+ @Column(name="EXCEPTION_MESSAGE_",length=1024)
@Size(max=1024)
private String exceptionMessage;//方法执行抛出的违例消息
- @Column(name="_EXCEPTION_STACK_TRACE")
+ @Column(name="EXCEPTION_STACK_TRACE_")
private String exceptionStackTrace;//方法执行抛出的违例栈
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/autoconfigure/SystemParameterServiceAutoConfiguration.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/autoconfigure/SystemParameterServiceAutoConfiguration.java
new file mode 100644
index 00000000..61fe1dab
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/autoconfigure/SystemParameterServiceAutoConfiguration.java
@@ -0,0 +1,44 @@
+package io.sc.platform.system.autoconfigure;
+
+import io.sc.platform.core.i18n.MessageSourceBaseName;
+import io.sc.platform.core.i18n.PlatformResourceBundleMessageSource;
+import io.sc.platform.core.service.RuntimeService;
+import io.sc.platform.mvc.autoconfigure.support.PluginSystemParameterServiceImpl;
+import io.sc.platform.mvc.service.SystemParameterService;
+import io.sc.platform.system.autoconfigure.support.CompositeMessageSource;
+import io.sc.platform.system.autoconfigure.support.DatabaseMessageSource;
+import io.sc.platform.system.autoconfigure.support.DatabaseSystemParameterServiceImpl;
+import io.sc.platform.system.i18n.jpa.repository.I18nRepository;
+import io.sc.platform.system.parameter.service.ParameterService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.SearchStrategy;
+import org.springframework.boot.autoconfigure.context.MessageSourceProperties;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.MessageSource;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.support.AbstractApplicationContext;
+
+import java.time.Duration;
+
+/**
+ * 资源文件(通常用于国际化的资源文件)扫描自动配置
+ * @author wangshaoping
+ *
+ */
+@Configuration
+@AutoConfigureBefore(io.sc.platform.mvc.autoconfigure.MvcServiceProviderAutoConfiguration.class)
+@EnableConfigurationProperties
+public class SystemParameterServiceAutoConfiguration {
+ @Autowired private ApplicationContext applicationContext;
+
+ @Bean
+ @ConditionalOnMissingBean
+ public SystemParameterService systemParameterService(){
+ return new DatabaseSystemParameterServiceImpl(applicationContext);
+ }
+}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/autoconfigure/support/DatabaseSystemParameterServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/autoconfigure/support/DatabaseSystemParameterServiceImpl.java
new file mode 100644
index 00000000..7238c126
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/autoconfigure/support/DatabaseSystemParameterServiceImpl.java
@@ -0,0 +1,40 @@
+package io.sc.platform.system.autoconfigure.support;
+
+import io.sc.platform.mvc.service.SystemParameterService;
+import io.sc.platform.system.parameter.service.ParameterService;
+import org.springframework.context.ApplicationContext;
+
+import java.util.Map;
+
+public class DatabaseSystemParameterServiceImpl implements SystemParameterService {
+ private ParameterService parameterService;
+
+ public DatabaseSystemParameterServiceImpl(ApplicationContext applicationContext){
+ this.parameterService =applicationContext.getBean(ParameterService.class);
+ }
+
+ @Override
+ public boolean containsParameter(String code) {
+ return parameterService.containsParameter(code);
+ }
+
+ @Override
+ public String getParameter(String code) {
+ return parameterService.getParameter(code);
+ }
+
+ @Override
+ public String getParameter(String code, String defaultValue) {
+ return parameterService.getParameter(code,defaultValue);
+ }
+
+ @Override
+ public Map getParameters(String[] codes) {
+ return parameterService.getParameters(codes);
+ }
+
+ @Override
+ public Map getParameters() {
+ return parameterService.getParameters();
+ }
+}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/controller/CorporationController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/controller/CorporationController.java
index 3e2a4039..01287fc4 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/controller/CorporationController.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/controller/CorporationController.java
@@ -2,14 +2,16 @@ package io.sc.platform.system.corporation.controller;
import io.sc.platform.mvc.controller.support.RestCrudController;
import io.sc.platform.system.api.corporation.CorporationVo;
+import io.sc.platform.system.corporation.convertor.CorporationEntityVoConverter;
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;
+import io.sc.platform.system.org.convertor.OrgEntityVoConverter;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
-@RequestMapping("/corporation")
+@RequestMapping("api/system/corporation")
public class CorporationController extends RestCrudController {
-
+ private CorporationEntityVoConverter converter =new CorporationEntityVoConverter();
}
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
new file mode 100644
index 00000000..9a70ff8a
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/convertor/CorporationEntityVoConverter.java
@@ -0,0 +1,35 @@
+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 209017b8..ed261a39 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
@@ -17,28 +17,28 @@ import javax.validation.constraints.Size;
public class CorporationEntity extends AuditorEntity {
//法人代码
@Id
- @Column(name="_CODE",nullable=false,length=255)
+ @Column(name="CODE_",nullable=false,length=255)
@Size(min=1,max=255)
private String code;
//法人名称
- @Column(name="_NAME", length=255)
+ @Column(name="NAME_", length=255)
@Size(min=1,max=255)
private String name;
//描述
- @Column(name="_DESCRIPTION", length=255)
+ @Column(name="DESCRIPTION_", length=255)
@Size(max=255)
private String description;
//是否可用
- @Column(name="_ENABLE")
+ @Column(name="ENABLE_")
@Convert(converter= NumericBooleanConverter.class)
private Boolean enable;
// 父法人
@ManyToOne(fetch=FetchType.LAZY)
- @JoinColumn(name="_PARENT_CODE")
+ @JoinColumn(name="PARENT_CODE_")
private CorporationEntity parent;
public CorporationEntity(){}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/support/CorporationEntityJsonSerializer.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/support/CorporationEntityJsonSerializer.java
index 729abc7f..28de4dbe 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/support/CorporationEntityJsonSerializer.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/support/CorporationEntityJsonSerializer.java
@@ -13,11 +13,12 @@ public class CorporationEntityJsonSerializer extends JsonSerializer {
+ @PostMapping("updateDictionariesOrder")
+ public void updateDictionariesOrder(@RequestBody List> orderItems) throws Exception{
+ service.updateDictionariesOrder(orderItems);
+ }
}
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 e27a2f28..01413fc8 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
@@ -18,19 +18,19 @@ public class DictionaryEntity extends CorporationAuditorEntity {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID", length=36)
+ @Column(name="ID_", length=36)
@Size(max=36)
private String id;
- @Column(name="_CODE", length=255)
+ @Column(name="CODE_", length=255)
@Size(max=255)
private String code;
- @Column(name="_VALUE", length=255)
+ @Column(name="VALUE_", length=255)
@Size(max=255)
private String value;
- @Column(name="_ORDER")
+ @Column(name="ORDER_")
private Integer order;
public DictionaryEntity() {}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/service/DictionaryService.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/service/DictionaryService.java
index a3fd8081..9b451ee1 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/service/DictionaryService.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/service/DictionaryService.java
@@ -1,8 +1,13 @@
package io.sc.platform.system.dictionary.service;
+import io.sc.platform.mvc.support.OrderItem;
import io.sc.platform.orm.service.DaoService;
import io.sc.platform.system.dictionary.jpa.entity.DictionaryEntity;
import io.sc.platform.system.dictionary.jpa.repository.DictionaryRepository;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
public interface DictionaryService extends DaoService {
+ public void updateDictionariesOrder(List> orderItems) throws Exception;
}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/service/impl/DictionaryServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/service/impl/DictionaryServiceImpl.java
index 5853fc31..a65e2801 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/service/impl/DictionaryServiceImpl.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/dictionary/service/impl/DictionaryServiceImpl.java
@@ -1,12 +1,33 @@
package io.sc.platform.system.dictionary.service.impl;
+import io.sc.platform.jdbc.util.SqlBatcher;
+import io.sc.platform.mvc.support.OrderItem;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
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;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
+import javax.transaction.Transactional;
+import java.util.List;
+
@Service
public class DictionaryServiceImpl extends DaoServiceImpl implements DictionaryService {
+ @Autowired private JdbcTemplate jdbcTemplate;
+ @Override
+ @Transactional
+ public void updateDictionariesOrder(List> orderItems) throws Exception {
+ if(orderItems==null || orderItems.isEmpty()){
+ return;
+ }
+ SqlBatcher sqlBatcher =new SqlBatcher("update SYS_DICTIONARY set ORDER_=? where ID_=?");
+ for(OrderItem orderItem : orderItems) {
+ System.out.println(orderItem.getId() + "/" + orderItem.getOrder());
+ sqlBatcher.addArg(new Object[]{orderItem.getOrder(),orderItem.getId()});
+ }
+ sqlBatcher.execute(jdbcTemplate);
+ }
}
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 50f2b515..336a110f 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
@@ -16,7 +16,7 @@ import static javax.persistence.InheritanceType.SINGLE_TABLE;
@Entity
@Table(name="SYS_DATASOURCE")
@Inheritance(strategy = SINGLE_TABLE)
-@DiscriminatorColumn(name="_TYPE",discriminatorType=DiscriminatorType.STRING,length=20)
+@DiscriminatorColumn(name="TYPE_",discriminatorType=DiscriminatorType.STRING,length=20)
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type",defaultImpl=JdbcDsEntity.class, visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value =JndiDsEntity.class, name = "JNDI"),
@@ -26,22 +26,22 @@ public abstract class DsEntity extends CorporationAuditorEntity {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID")
+ @Column(name="ID_")
@Size(max=36)
private String id;
//名称
- @Column(name="_NAME")
+ @Column(name="NAME_")
@Size(max=255)
private String name;
//数据源类型
- @Column(name="_TYPE", insertable=false,updatable=false)
+ @Column(name="TYPE_", insertable=false,updatable=false)
@Size(max=20)
private String type;
//描述
- @Column(name="_DESCRIPTION")
+ @Column(name="DESCRIPTION_")
@Size(max=255)
private String description;
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 0280d1f6..675a483f 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
@@ -20,27 +20,27 @@ import java.util.Map;
@DiscriminatorValue("JDBC")
@JsonSerialize(using= JdbcDsEntityJsonSerializer.class)
public class JdbcDsEntity extends DsEntity {
- @Column(name="_JDBC_DATABASE_TYPE", length=20)
+ @Column(name="JDBC_DATABASE_TYPE_", length=20)
@Size(max=20)
private String databaseType;
- @Column(name="_JDBC_DRIVER")
+ @Column(name="JDBC_DRIVER_")
@Size(max=255)
private String jdbcDriver;
- @Column(name="_JDBC_URL")
+ @Column(name="JDBC_URL_")
@Size(max=255)
private String jdbcUrl;
- @Column(name="_JDBC_USERNAME")
+ @Column(name="JDBC_USERNAME_")
@Size(max=255)
private String username;
- @Column(name="_JDBC_PASSWORD")
+ @Column(name="JDBC_PASSWORD_")
@Size(max=255)
private String password;
- @Column(name="_JDBC_PROPERTIES", length=2048)
+ @Column(name="JDBC_PROPERTIES_", length=2048)
@Convert(converter = MapStringConverter.class)
private Map properties;
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 fe522219..cbb2bcef 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
@@ -15,7 +15,7 @@ import javax.validation.constraints.Size;
@DiscriminatorValue("JNDI")
@JsonSerialize(using= JndiDsEntityJsonSerializer.class)
public class JndiDsEntity extends DsEntity {
- @Column(name="_JNDI_NAME")
+ @Column(name="JNDI_NAME_")
@Size(max=255)
private String jndiName;
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 c655f29a..4660faf5 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
@@ -26,22 +26,22 @@ public class I18nEntity extends AuditorEntity {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID")
+ @Column(name="ID_")
@Size(max=36)
private String id;
//消息代码
- @Column(name="_CODE",nullable=false)
+ @Column(name="CODE_",nullable=false)
@Size(max=255)
private String code;
//语言
@Enumerated(EnumType.STRING)
- @Column(name="_LANG")
+ @Column(name="LANG_")
private Language lang;
//消息文本
- @Column(name="_MESSAGE")
+ @Column(name="MESSAGE_")
@Size(max=1024)
private String message;
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/ParameterInitializer.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/ParameterInitializer.java
new file mode 100644
index 00000000..a5a68340
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/initializer/ParameterInitializer.java
@@ -0,0 +1,68 @@
+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.InsertIntoSqlBuilder;
+import io.sc.platform.system.parameter.service.ParameterService;
+import org.springframework.context.ApplicationContext;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import java.util.Date;
+import java.util.UUID;
+
+public class ParameterInitializer implements ApplicationInitializer {
+ private Boolean isInitialized =null;
+ private JdbcTemplate jdbcTemplate;
+ private ParameterService parameterService;
+
+ @Override
+ public void init(ApplicationContext applicationContext) {
+ this.jdbcTemplate =applicationContext.getBean(JdbcTemplate.class);
+ this.parameterService =applicationContext.getBean(ParameterService.class);
+ }
+
+ @Override
+ public synchronized boolean isInitialized() {
+ if(isInitialized!=null) {
+ return isInitialized;
+ }
+ if(parameterService.getRepository().count()<=0){
+ isInitialized =false;
+ }else {
+ isInitialized = true;
+ }
+ return isInitialized;
+ }
+
+ @Override
+ public void execute() throws ApplicationInitializerExecuteException {
+ InsertIntoSqlBuilder builder =new InsertIntoSqlBuilder();
+ String systemId =UUID.randomUUID().toString();
+ builder.table("SYS_PARAMETER")
+ .field("ID_", systemId)
+ .field("CODE_","parameter.system")
+ .field("VALUE_",null)
+ .field("PARENT_ID_",null)
+ .field("DATA_COME_FROM_","INPUT")
+ .field("CREATOR_","admin")
+ .field("CREATE_DATE_",new Date())
+ .field("LAST_MODIFIER_","admin")
+ .field("LAST_MODIFYDATE_",new Date())
+ .field("CORP_CODE_","ROOT")
+ .insert(jdbcTemplate);
+
+ builder =new InsertIntoSqlBuilder();
+ builder.table("SYS_PARAMETER")
+ .field("ID_", UUID.randomUUID().toString())
+ .field("CODE_","parameter.system.homePage")
+ .field("VALUE_","/home")
+ .field("PARENT_ID_",systemId)
+ .field("DATA_COME_FROM_","INPUT")
+ .field("CREATOR_","admin")
+ .field("CREATE_DATE_",new Date())
+ .field("LAST_MODIFIER_","admin")
+ .field("LAST_MODIFYDATE_",new Date())
+ .field("CORP_CODE_","ROOT")
+ .insert(jdbcTemplate);
+ }
+}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/controller/MenuController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/controller/MenuController.java
index 6fddad7d..1d6fb3c6 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/controller/MenuController.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/controller/MenuController.java
@@ -2,10 +2,13 @@ package io.sc.platform.system.menu.controller;
import io.sc.platform.mvc.controller.support.RestCrudController;
import io.sc.platform.mvc.support.CascadeMany2Many;
+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.menu.jpa.entity.MenuEntity;
import io.sc.platform.system.menu.jpa.repository.MenuRepository;
import io.sc.platform.system.menu.service.MenuService;
+import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -13,6 +16,36 @@ import java.util.List;
@RestController
@RequestMapping("/api/system/menu")
public class MenuController extends RestCrudController {
+ /**
+ * 列出所有菜单树,并且将角色所拥有的菜单列表作出标记
+ * @param roleId 角色ID
+ * @param queryParameter 查询参数
+ * @return 列出所有菜单树,并且将角色所拥有的菜单列表作出标记
+ * @throws Exception 违例
+ */
+ @GetMapping("listAllMenusWithSelectedStatusByRole")
+ public List listAllMenusWithSelectedStatusByRole(@RequestParam(name="roleId",required=false) String roleId, QueryParameter queryParameter) throws Exception{
+ if(StringUtils.hasText(roleId)){
+ return service.listAllMenusWithSelectedStatusByRole(roleId,queryParameter);
+ }
+ return QueryResult.emptyList();
+ }
+
+ /**
+ * 列出所有菜单树,并且将机构所拥有的菜单列表作出标记
+ * @param orgId 机构ID
+ * @param queryParameter 查询参数
+ * @return 列出所有菜单树,并且将机构所拥有的菜单列表作出标记
+ * @throws Exception 违例
+ */
+ @GetMapping("listAllMenusWithSelectedStatusByOrg")
+ public List listAllMenusWithSelectedStatusByOrg(@RequestParam(name="orgId",required=false) String orgId, QueryParameter queryParameter) throws Exception{
+ if(StringUtils.hasText(orgId)){
+ return service.listAllMenusWithSelectedStatusByOrg(orgId,queryParameter);
+ }
+ return QueryResult.emptyList();
+ }
+
/**
* 给菜单添加角色
* @param wrapper 具有级联关系的菜单和角色关系封装器, 由于菜单具有级联关系(如果某个角色拥有一个子菜单的访问权限,那么该角色同时拥有该子菜单所有父菜单分类的访问权限),
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 5a704353..9fd13bab 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
@@ -27,8 +27,8 @@ public class MenuEntityVoConvertor implements EntityVoConverter map = ObjectMapper4Json.getMapper().readValue(query, new HashMap().getClass());
@@ -62,19 +62,19 @@ public class MenuEntityVoConvertor implements EntityVoConverter roles =new ArrayList();
@@ -89,14 +93,14 @@ public abstract class MenuEntity extends AuditorEntity implements IdClearable {
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(
name = "SYS_ORG_MENU",
- joinColumns = {@JoinColumn(name = "_MENU_ID", nullable = false,referencedColumnName="_ID")},
- inverseJoinColumns = {@JoinColumn(name = "_ORG_ID",nullable = false,referencedColumnName="_ID")}
+ joinColumns = {@JoinColumn(name = "MENU_ID_", nullable = false,referencedColumnName="ID_")},
+ inverseJoinColumns = {@JoinColumn(name = "ORG_ID_",nullable = false,referencedColumnName="ID_")}
)
protected List orgs =new ArrayList();
//父
@ManyToOne(fetch=FetchType.LAZY)
- @JoinColumn(name="_PARENT_ID")
+ @JoinColumn(name="PARENT_ID_")
protected MenuGroupEntity parent;
public String getId() {
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 1a517b6f..5fcaac49 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
@@ -12,7 +12,7 @@ import javax.validation.constraints.Size;
@DiscriminatorValue("JAVASCRIPT")
public class MenuJavascriptEntity extends MenuEntity {
//javascript 脚本
- @Column(name="_JAVA_SCRIPT", length=1024)
+ @Column(name="JAVA_SCRIPT_", length=1024)
@Size(max=1024)
private String 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 964f125a..4c6a8f86 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
@@ -20,11 +20,11 @@ import java.util.Set;
@DiscriminatorValue("ROUTE")
public class MenuRouteEntity extends MenuEntity {
//路由ID
- @Column(name="_ROUTE_NAME", length=255)
+ @Column(name="ROUTE_NAME_", length=255)
@Size(max=255)
private String routeName;
- @Column(name="_ROUTE_QUERY", length=1024)
+ @Column(name="ROUTE_QUERY_", length=1024)
@Convert(converter = MapStringConverter.class)
private Map routeQuery =new HashMap<>();
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 938498bd..7060f518 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
@@ -12,12 +12,12 @@ import javax.validation.constraints.Size;
@DiscriminatorValue("URL")
public class MenuUrlEntity extends MenuEntity {
//菜单URL
- @Column(name="_URL", length=1024)
+ @Column(name="URL_", length=1024)
@Size(max=1024)
private String url;
//菜单URL打开方式
- @Column(name="_URL_OPEN_TYPE", length=50)
+ @Column(name="URL_OPEN_TYPE_", length=50)
@Enumerated(EnumType.STRING)
private UrlOpenType urlOpenType;
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
new file mode 100644
index 00000000..53b73a98
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/menu/jpa/support/MenuEntityJsonSerializer.java
@@ -0,0 +1,26 @@
+package io.sc.platform.system.menu.jpa.support;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonSerializer;
+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.org.jpa.entity.OrgEntity;
+
+import java.io.IOException;
+
+public class MenuEntityJsonSerializer extends JsonSerializer{
+ @Override
+ public void serialize(MenuEntity value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
+ gen.writeStartObject();
+ gen.writeObjectField("id", value.getId());
+ gen.writeObjectField("name", value.getName());
+ gen.writeObjectField("titleI18nKey", value.getTitleI18nKey());
+ gen.writeObjectField("enable", value.getEnable());
+ gen.writeObjectField("parentId", value.getParent()==null?null:value.getParent().getId());
+ 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 3f4e6521..86a9b423 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
@@ -2,13 +2,52 @@ package io.sc.platform.system.menu.service;
import io.sc.platform.mvc.support.CascadeMany2Many;
import io.sc.platform.orm.service.DaoService;
+import io.sc.platform.orm.service.support.QueryParameter;
import io.sc.platform.system.api.menu.MenuVo;
import io.sc.platform.system.menu.jpa.entity.MenuEntity;
import io.sc.platform.system.menu.jpa.repository.MenuRepository;
+import io.sc.platform.system.org.jpa.entity.OrgEntity;
import java.util.List;
public interface MenuService extends DaoService {
+
+ /**
+ * 列出所有菜单树,并且将角色所拥有的菜单列表作出标记
+ * @param roleId 角色ID
+ * @param queryParameter 查询参数
+ * @return 列出所有菜单树,并且将角色所拥有的菜单列表作出标记
+ * @throws Exception 违例
+ */
+ public List listAllMenusWithSelectedStatusByRole(String roleId, QueryParameter queryParameter) throws Exception;
+
+ /**
+ * 列出所有菜单树,并且将机构所拥有的菜单列表作出标记
+ * @param orgId 机构ID
+ * @param queryParameter 查询参数
+ * @return 列出所有菜单树,并且将机构所拥有的菜单列表作出标记
+ * @throws Exception 违例
+ */
+ public List listAllMenusWithSelectedStatusByOrg(String orgId, QueryParameter queryParameter) throws Exception;
+
+ /**
+ * 查询角色所拥有的菜单
+ * @param roleId 角色ID
+ * @param queryParameter 查询参数
+ * @return 角色所拥有的菜单
+ * @throws Exception 违例
+ */
+ public List listMenusByRole(String roleId, QueryParameter queryParameter) throws Exception;
+
+ /**
+ * 查询机构所拥有的菜单
+ * @param orgId 机构ID
+ * @param queryParameter 查询参数
+ * @return 机构所拥有的菜单
+ * @throws Exception 违例
+ */
+ public List listMenusByOrg(String orgId, QueryParameter queryParameter) throws Exception;
+
/**
* 给菜单添加角色
* @param wrapper 具有级联关系的菜单和角色多对多关系 Wrapper
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 26bd136b..59307e14 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
@@ -4,25 +4,31 @@ import io.sc.platform.core.util.TreeBuilder;
import io.sc.platform.jdbc.util.SqlBatcher;
import io.sc.platform.mvc.support.CascadeMany2Many;
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.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;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
+import javax.persistence.criteria.Join;
import javax.transaction.Transactional;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@Service
public class MenuServiceImpl extends DaoServiceImpl implements MenuService {
@@ -31,15 +37,80 @@ public class MenuServiceImpl extends DaoServiceImpl treeBuilder =new MenuEntityTreeBuilder();
@Autowired private JdbcTemplate jdbcTemplate;
+ @Override
+ public List listAllMenusWithSelectedStatusByRole(String roleId, QueryParameter queryParameter) throws Exception {
+ MenuEntityVoConvertor converter =new MenuEntityVoConvertor();
+ List allMenuEntities =repository.findAll();
+ List selectedMenuEntities =listMenusByRole(roleId,queryParameter);
+ List allMenus =converter.toVo(allMenuEntities);
+ List selectedMenus =converter.toVo(selectedMenuEntities);
+ Set selectedMenuIds =new HashSet<>();
+ for(MenuVo selectedMenu : selectedMenus){
+ selectedMenuIds.add(selectedMenu.getId());
+ }
+ for(MenuVo allMenu : allMenus){
+ if(selectedMenuIds.contains(allMenu.getId())) {
+ allMenu.setSelected(true);
+ }
+ }
+ return allMenus;
+ }
+
+ @Override
+ public List listAllMenusWithSelectedStatusByOrg(String orgId, QueryParameter queryParameter) throws Exception {
+ MenuEntityVoConvertor converter =new MenuEntityVoConvertor();
+ List allMenuEntities =repository.findAll();
+ List selectedMenuEntities =listMenusByOrg(orgId,queryParameter);
+ List allMenus =converter.toVo(allMenuEntities);
+ List selectedMenus =converter.toVo(selectedMenuEntities);
+ Set selectedMenuIds =new HashSet<>();
+ for(MenuVo selectedMenu : selectedMenus){
+ selectedMenuIds.add(selectedMenu.getId());
+ }
+ for(MenuVo allMenu : allMenus){
+ if(selectedMenuIds.contains(allMenu.getId())) {
+ allMenu.setSelected(true);
+ }
+ }
+ return allMenus;
+ }
+
+ @Override
+ public List listMenusByRole(String roleId, QueryParameter queryParameter) throws Exception {
+ if(StringUtils.hasText(roleId)) {
+ Specification specification = (root, query, criteriaBuilder) -> {
+ Join join = root.join("roles");
+ return criteriaBuilder.equal(join.get("id"), roleId);
+ };
+ return this.list(specification, queryParameter);
+ }
+ return QueryResult.emptyList();
+ }
+
+ @Override
+ public List listMenusByOrg(String orgId, QueryParameter queryParameter) throws Exception {
+ if(StringUtils.hasText(orgId)) {
+ Specification specification = (root, query, criteriaBuilder) -> {
+ Join join = root.join("orgs");
+ return criteriaBuilder.equal(join.get("id"), orgId);
+ };
+ return this.list(specification, queryParameter);
+ }
+ return QueryResult.emptyList();
+ }
+
@Override
@Transactional
public void addRoles(CascadeMany2Many wrapper) throws Exception {
if(wrapper==null){return;}
if(wrapper.getTargets()!=null && wrapper.getTargets().size()>0){
- wrapper.getSourceAndChildren().addAll(wrapper.getSourceCascadeParent());
- SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_ROLE_MENU(_ROLE_ID,_MENU_ID) values(?,?)");
+ Set sourceIds =new HashSet<>();
+ sourceIds.add(wrapper.getSource());
+ sourceIds.addAll(wrapper.getSourceParents());
+ sourceIds.addAll(wrapper.getSourceChildren());
+ SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_ROLE_MENU(ROLE_ID_,MENU_ID_) values(?,?)");
for(String roleId : wrapper.getTargets()){
- for(String menuId : wrapper.getSourceAndChildren()){
+ for(String menuId : sourceIds){
sqlBatcher.addArg(new Object[]{roleId,menuId});
}
}
@@ -52,18 +123,21 @@ public class MenuServiceImpl extends DaoServiceImpl wrapper) throws Exception {
if(wrapper==null){return;}
- List> roles =jdbcTemplate.queryForList("select _ID from SYS_ROLE");
+ List> roles =jdbcTemplate.queryForList("select ID_ from SYS_ROLE");
List roleIds =new ArrayList();
if(roles!=null && roles.size()>0){
for(Map row : roles){
- roleIds.add((String)row.get("_ID"));
+ roleIds.add((String)row.get("ID_"));
}
}
if(roleIds!=null && roleIds.size()>0){
- wrapper.getSourceAndChildren().addAll(wrapper.getSourceCascadeParent());
- SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_ROLE_MENU(_ROLE_ID,_MENU_ID) values(?,?)");
+ Set sourceIds =new HashSet<>();
+ sourceIds.add(wrapper.getSource());
+ sourceIds.addAll(wrapper.getSourceParents());
+ sourceIds.addAll(wrapper.getSourceChildren());
+ SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_ROLE_MENU(ROLE_ID_,MENU_ID_) values(?,?)");
for(String roleId : roleIds){
- for(String menuId : wrapper.getSourceAndChildren()){
+ for(String menuId : sourceIds){
sqlBatcher.addArg(new Object[]{roleId,menuId});
}
}
@@ -77,9 +151,12 @@ public class MenuServiceImpl extends DaoServiceImpl wrapper) throws Exception {
if(wrapper==null){return;}
if(wrapper.getTargets()!=null && wrapper.getTargets().size()>0){
- SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_ROLE_MENU where _MENU_ID=? and _ROLE_ID=?");
+ SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_ROLE_MENU where MENU_ID_=? and ROLE_ID_=?");
for(String roleId : wrapper.getTargets()){
- for(String menuId : wrapper.getSourceAndChildren()){
+ Set sourceIds =new HashSet<>();
+ sourceIds.add(wrapper.getSource());
+ sourceIds.addAll(wrapper.getSourceChildren());
+ for(String menuId : sourceIds){
if(StringUtils.hasText(menuId) && StringUtils.hasText(roleId)){
sqlBatcher.addArg(new Object[]{menuId,roleId});
}
@@ -94,8 +171,11 @@ public class MenuServiceImpl extends DaoServiceImpl wrapper) throws Exception {
if(wrapper==null){return;}
- SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_ROLE_MENU where _MENU_ID=?");
- for(String menuId : wrapper.getSourceAndChildren()){
+ SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_ROLE_MENU where MENU_ID_=?");
+ Set sourceIds =new HashSet<>();
+ sourceIds.add(wrapper.getSource());
+ sourceIds.addAll(wrapper.getSourceChildren());
+ for(String menuId : sourceIds){
if(StringUtils.hasText(menuId)){
sqlBatcher.addArg(new Object[]{menuId});
}
@@ -108,11 +188,13 @@ public class MenuServiceImpl extends DaoServiceImpl wrapper) throws Exception {
if(wrapper==null){return;}
-
- if(wrapper.getSourceAndChildren()!=null && wrapper.getSourceAndChildren().size()>0){
+ Set sourceIds =new HashSet<>();
+ sourceIds.add(wrapper.getSource());
+ sourceIds.addAll(wrapper.getSourceChildren());
+ if(sourceIds!=null && sourceIds.size()>0){
//删除当前选中菜单及其子菜单和机构的关系
- SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_ORG_MENU where _MENU_ID=?");
- for(String menuId : wrapper.getSourceAndChildren()){
+ SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_ORG_MENU where MENU_ID_=?");
+ for(String menuId : sourceIds){
if(StringUtils.hasText(menuId)){
sqlBatcher.addArg(new Object[]{menuId});
}
@@ -121,10 +203,10 @@ public class MenuServiceImpl extends DaoServiceImpl0){
- wrapper.getSourceAndChildren().addAll(wrapper.getSourceCascadeParent());
- sqlBatcher =new SqlBatcher("insert into SYS_ORG_MENU(_ORG_ID,_MENU_ID) values(?,?)");
+ sourceIds.addAll(wrapper.getSourceParents());
+ sqlBatcher =new SqlBatcher("insert into SYS_ORG_MENU(ORG_ID_,MENU_ID_) values(?,?)");
for(String orgId : wrapper.getTargets()){
- for(String menuId : wrapper.getSourceAndChildren()){
+ for(String menuId : sourceIds){
sqlBatcher.addArg(new Object[]{orgId,menuId});
}
}
@@ -172,7 +254,7 @@ public class MenuServiceImpl extends DaoServiceImpl getAllMenus() {
- List entities =jdbcTemplate.query("select * from SYS_MENU order by _ORDER",new MenuEntityVoConvertor());
+ List entities =jdbcTemplate.query("select * from SYS_MENU where ENABLE_=1 order by ORDER_",new MenuEntityVoConvertor());
return voConverter.toVo(entities);
}
@@ -180,33 +262,33 @@ public class MenuServiceImpl extends DaoServiceImpl'GROUP'"
+ + " on A.MENU_ID_=B.ID_"
+ + " where B.TYPE_<>'GROUP'"
+ " )"
+ " ) TMP"
+ ")";
jdbcTemplate.update(sql);
//删除重复的关系记录
- sql =" select _ROLE_ID,_MENU_ID from SYS_ROLE_MENU"
- + " group by _ROLE_ID,_MENU_ID"
+ sql =" select ROLE_ID_,MENU_ID_ from SYS_ROLE_MENU"
+ + " group by ROLE_ID_,MENU_ID_"
+ " having count(*)>1";
List> result =jdbcTemplate.queryForList(sql);
if(result!=null && result.size()>0){
- SqlBatcher deleteSqlBatcher =new SqlBatcher("delete from SYS_ROLE_MENU where _ROLE_ID=? and _MENU_ID=?");
- SqlBatcher insertSqlBatcher =new SqlBatcher("insert into SYS_ROLE_MENU(_ROLE_ID,_MENU_ID) values(?,?)");
+ SqlBatcher deleteSqlBatcher =new SqlBatcher("delete from SYS_ROLE_MENU where ROLE_ID_=? and MENU_ID_=?");
+ SqlBatcher insertSqlBatcher =new SqlBatcher("insert into SYS_ROLE_MENU(ROLE_ID_,MENU_ID_) values(?,?)");
for(Map row : result){
- deleteSqlBatcher.addArg(new Object[]{row.get("_ROLE_ID"),row.get("_MENU_ID")});
- insertSqlBatcher.addArg(new Object[]{row.get("_ROLE_ID"),row.get("_MENU_ID")});
+ deleteSqlBatcher.addArg(new Object[]{row.get("ROLE_ID_"),row.get("MENU_ID_")});
+ insertSqlBatcher.addArg(new Object[]{row.get("ROLE_ID_"),row.get("MENU_ID_")});
}
deleteSqlBatcher.execute(jdbcTemplate);
insertSqlBatcher.execute(jdbcTemplate);
@@ -217,33 +299,33 @@ public class MenuServiceImpl extends DaoServiceImpl'GROUP'"
+ + " on A.MENU_ID_=B.ID_"
+ + " where B.TYPE_<>'GROUP'"
+ " )"
+ " ) TMP"
+ ")";
jdbcTemplate.update(sql);
//删除重复的关系记录
- sql =" select _ORG_ID,_MENU_ID from SYS_ORG_MENU"
- + " group by _ORG_ID,_MENU_ID"
+ sql =" select ORG_ID_,MENU_ID_ from SYS_ORG_MENU"
+ + " group by ORG_ID_,MENU_ID_"
+ " having count(*)>1";
List> result =jdbcTemplate.queryForList(sql);
if(result!=null && result.size()>0){
- SqlBatcher deleteSqlBatcher =new SqlBatcher("delete from SYS_ORG_MENU where _ORG_ID=? and _MENU_ID=?");
- SqlBatcher insertSqlBatcher =new SqlBatcher("insert into SYS_ORG_MENU(_ORG_ID,_MENU_ID) values(?,?)");
+ SqlBatcher deleteSqlBatcher =new SqlBatcher("delete from SYS_ORG_MENU where ORG_ID_=? and MENU_ID_=?");
+ SqlBatcher insertSqlBatcher =new SqlBatcher("insert into SYS_ORG_MENU(ORG_ID_,MENU_ID_) values(?,?)");
for(Map row : result){
- deleteSqlBatcher.addArg(new Object[]{row.get("_ORG_ID"),row.get("_MENU_ID")});
- insertSqlBatcher.addArg(new Object[]{row.get("_ORG_ID"),row.get("_MENU_ID")});
+ deleteSqlBatcher.addArg(new Object[]{row.get("ORG_ID_"),row.get("MENU_ID_")});
+ insertSqlBatcher.addArg(new Object[]{row.get("ORG_ID_"),row.get("MENU_ID_")});
}
deleteSqlBatcher.execute(jdbcTemplate);
insertSqlBatcher.execute(jdbcTemplate);
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/monitor/controller/LogViewerController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/monitor/controller/LogViewerController.java
new file mode 100644
index 00000000..f3f63d7e
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/monitor/controller/LogViewerController.java
@@ -0,0 +1,161 @@
+package io.sc.platform.system.monitor.controller;
+
+import io.sc.platform.core.DirectoryManager;
+import io.sc.platform.core.support.LoggerLevelInfo;
+import io.sc.platform.core.util.FileUtil;
+import io.sc.platform.core.util.StringUtil;
+import io.sc.platform.mvc.support.FileDownloader;
+import io.sc.platform.orm.service.support.QueryResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.logging.LoggersEndpoint;
+import org.springframework.core.io.DefaultResourceLoader;
+import org.springframework.core.io.Resource;
+import org.springframework.data.domain.Page;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+
+@RestController
+@RequestMapping("/api/monitor/logger")
+public class LogViewerController {
+ @Autowired private LoggersEndpoint loggersEndpoint;
+
+ @PostMapping("getLogFileContents")
+ public String getLogFileContents(@RequestBody Map parameter) throws IOException {
+ String path =DirectoryManager.getInstance().getByName("dir.log") + "/log.log";
+ return FileUtil.readStringAsLastRow(path, parameter.get("rows"));
+ }
+
+ @GetMapping("getLogFiles")
+ public Page getLogFiles() throws IOException {
+ File dir =new File(DirectoryManager.getInstance().getByName("dir.log"));
+ File[] files =dir.listFiles();
+ if(files!=null && files.length>0){
+ List result =new ArrayList();
+ for(File file : files){
+ FileWrapper wrapper =new FileWrapper(file.getName(),new Date(file.lastModified()), StringUtil.commaStyle(file.length()));
+ result.add(wrapper);
+ }
+ return QueryResult.page(result);
+ }
+ return QueryResult.emptyPage();
+ }
+
+ @GetMapping("getLogConfigurationLevels")
+ public Page getLogConfigurationLevels(LoggerLevelInfo levelInfo) throws Exception{
+ return QueryResult.page(findLevelsFromActuator(levelInfo));
+ }
+
+ /**
+ * 下载日志文件
+ * @param fileName 文件名
+ * @param request HttpServletRequest 对象
+ * @param response HttpServletResponse 对象
+ * @throws Exception 违例
+ */
+ @RequestMapping(value="downloadLogFile/{fileName:.+}",method=RequestMethod.GET)
+ public void downloadLogFile(@PathVariable("fileName") String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception{
+ Resource resource =new DefaultResourceLoader().getResource("file://" + DirectoryManager.getInstance().getByName("dir.log") + "/" + fileName);
+ FileDownloader.download(request, response, fileName, resource);
+ }
+
+
+ private static class FileWrapper{
+ private String name;
+ private Date lastModifyDate;
+ private String size;
+
+ public FileWrapper(String name,Date lastModifyDate,String size){
+ this.name =name;
+ this.lastModifyDate =lastModifyDate;
+ this.size =size;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Date getLastModifyDate() {
+ return lastModifyDate;
+ }
+
+ public void setLastModifyDate(Date lastModifyDate) {
+ this.lastModifyDate = lastModifyDate;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+ }
+
+ public List findLevelsFromActuator(LoggerLevelInfo levelInfo) throws Exception {
+ Map configurations =loggersEndpoint.loggers();
+ if(configurations==null){
+ return Collections.emptyList();
+ }
+ Object o =configurations.get("loggers");
+ if(o==null){
+ return Collections.emptyList();
+ }
+ List result =new ArrayList();
+ if(o instanceof Map){
+ Map map =(Map)o;
+ for(String key : map.keySet()){
+ LoggersEndpoint.LoggerLevels loggerLevels =map.get(key);
+ result.add(new LoggerLevelInfo(key,loggerLevels.getConfiguredLevel(),"INFO"));
+ }
+ }
+
+ if(
+ !StringUtils.hasText(levelInfo.getName())
+ && levelInfo.getConfiguredLevel()!=null
+ && levelInfo.getEffectiveLevel()!=null
+ ){
+ return result;
+ }
+ //filter
+ List filter =new ArrayList();
+ if(StringUtils.hasText(levelInfo.getName())){
+ for(LoggerLevelInfo info : result){
+ if(info.getName().toLowerCase().contains(levelInfo.getName().trim().toLowerCase())){
+ filter.add(info);
+ }
+ }
+ result =filter;
+ }
+
+ filter =new ArrayList();
+ if(levelInfo.getConfiguredLevel()!=null){
+ for(LoggerLevelInfo info : result){
+ if(info.getConfiguredLevel()!=null && info.getConfiguredLevel().equals(levelInfo.getConfiguredLevel())){
+ filter.add(info);
+ }
+ }
+ result =filter;
+ }
+
+ filter =new ArrayList();
+ if(levelInfo.getEffectiveLevel()!=null){
+ for(LoggerLevelInfo info : result){
+ if(info.getEffectiveLevel()!=null && info.getEffectiveLevel().equals(levelInfo.getEffectiveLevel())){
+ filter.add(info);
+ }
+ }
+ result =filter;
+ }
+ return result;
+ }
+}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/controller/OrgController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/controller/OrgController.java
index 10e03375..376711e5 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/controller/OrgController.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/controller/OrgController.java
@@ -19,6 +19,7 @@ import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
+import java.util.List;
@RestController
@RequestMapping("/api/system/org")
@@ -32,13 +33,28 @@ public class OrgController extends RestCrudController queryOrgsByUser(@RequestParam(name="userId",required=false) String userId, QueryParameter queryParameter) throws Exception{
+ @GetMapping("listAllOrgsWithSelectedStatusByUser")
+ public List listAllOrgsWithSelectedStatusByUser(@RequestParam(name="userId",required=false) String userId, QueryParameter queryParameter) throws Exception{
if(StringUtils.hasText(userId)){
- Page result =service.queryOrgsByUser(userId,queryParameter);
+ return service.listAllOrgsWithSelectedStatusByUser(userId,queryParameter);
+ }
+ return QueryResult.emptyList();
+ }
+
+ /**
+ * 查询用户所属机构
+ * @param userId 用户ID
+ * @param queryParameter 查询参数
+ * @return 用户所属机构
+ * @throws Exception 违例
+ */
+ @GetMapping("listOrgsByUser")
+ public List 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 QueryResult.emptyPage();
+ return QueryResult.emptyList();
}
/**
@@ -48,13 +64,13 @@ public class OrgController extends RestCrudController queryOtherOrgsByUser(@RequestParam(name="userId",required=false) String userId,QueryParameter queryParameter) throws Exception{
+ @GetMapping("listOtherOrgsByUser")
+ public List listOtherOrgsByUser(@RequestParam(name="userId",required=false) String userId,QueryParameter queryParameter) throws Exception{
if(StringUtils.hasText(userId)){
- Page result =service.queryOtherOrgsByUser(userId,queryParameter);
+ List result =service.listOtherOrgsByUser(userId,queryParameter);
return converter.toVo(result);
}
- return QueryResult.emptyPage();
+ 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
index 0d337f27..8ad39639 100644
--- 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
@@ -21,7 +21,7 @@ public class OrgEntityVoConverter implements EntityVoConverter
vo.setDescription(entity.getDescription());
vo.setEnable(entity.getEnable());
vo.setDepartment(entity.getIsDepartment());
- vo.setParentId(entity.getParent().getId());
+ vo.setParentId(entity.getParent()==null?null:entity.getParent().getId());
return vo;
}
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 3947c4aa..42014f56 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
@@ -24,32 +24,32 @@ public class OrgEntity extends CorporationAuditorEntity {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID", length=36)
+ @Column(name="ID_", length=36)
@Size(max=36)
private String id;
//组织结构代码
- @Column(name="_CODE",nullable=false,length=255)
+ @Column(name="CODE_",nullable=false,length=255)
@Size(min=1,max=255)
private String code;
//组织名称
- @Column(name="_NAME", length=255)
+ @Column(name="NAME_", length=255)
@Size(min=1,max=255)
private String name;
//描述
- @Column(name="_DESCRIPTION", length=255)
+ @Column(name="DESCRIPTION_", length=255)
@Size(max=255)
private String description;
//是否可用
- @Column(name="_ENABLE")
+ @Column(name="ENABLE_")
@Convert(converter= NumericBooleanConverter.class)
private Boolean enable;
//是否是部门
- @Column(name="_IS_DEPARTMENT")
+ @Column(name="IS_DEPARTMENT_")
@Convert(converter=NumericBooleanConverter.class)
private Boolean isDepartment;
@@ -63,7 +63,7 @@ public class OrgEntity extends CorporationAuditorEntity {
//父组织
@ManyToOne(fetch=FetchType.LAZY)
- @JoinColumn(name="_PARENT_ID")
+ @JoinColumn(name="PARENT_ID_")
private OrgEntity parent;
//直接孩子组织集合
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/jpa/support/OrgEntityJsonSerializer.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/jpa/support/OrgEntityJsonSerializer.java
index 8cf088dc..616140ff 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/jpa/support/OrgEntityJsonSerializer.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/jpa/support/OrgEntityJsonSerializer.java
@@ -19,7 +19,7 @@ public class OrgEntityJsonSerializer extends JsonSerializer{
gen.writeObjectField("description", value.getDescription());
gen.writeObjectField("enable", value.getEnable());
gen.writeObjectField("isDepartment", value.getIsDepartment());
- gen.writeObjectField("parent", value.getParent()==null?null:value.getParent().getCode());
+ gen.writeObjectField("parentId", value.getParent()==null?null:value.getParent().getId());
CorporationAuditorEntityJsonSerializer.serializeJson(value, gen, serializers);
gen.writeEndObject();
}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/service/OrgService.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/service/OrgService.java
index b3f80ad6..3ab9c214 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/org/service/OrgService.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/org/service/OrgService.java
@@ -2,13 +2,34 @@ package io.sc.platform.system.org.service;
import io.sc.platform.orm.service.DaoService;
import io.sc.platform.orm.service.support.QueryParameter;
+import io.sc.platform.system.api.org.OrgVo;
import io.sc.platform.system.org.jpa.entity.OrgEntity;
import io.sc.platform.system.org.jpa.repository.OrgRepository;
import org.springframework.data.domain.Page;
+import java.util.List;
import java.util.Set;
public interface OrgService extends DaoService {
+
+ /**
+ * 获取所有机构树,并对当前登录用户所属的机构做标记
+ * @param userId 用户ID
+ * @param queryParameter 查询参数
+ * @return 所有机构树,并对当前登录用户所属的机构做标记
+ * @throws Exception 违例
+ */
+ public List listAllOrgsWithSelectedStatusByUser(String userId, QueryParameter queryParameter) throws Exception;
+
+ /**
+ * 查询用户所属的机构
+ * @param userId 用户ID
+ * @param queryParameter 查询参数
+ * @return 用户所属的机构
+ * @throws Exception 违例
+ */
+ public List listOrgsByUser(String userId, QueryParameter queryParameter) throws Exception;
+
/**
* 查询用户所属的机构
* @param userId 用户ID
@@ -18,6 +39,15 @@ public interface OrgService extends DaoService
*/
public Page queryOrgsByUser(String userId, QueryParameter queryParameter) throws Exception;
+ /**
+ * 查询用户不属于的机构
+ * @param userId 用户ID
+ * @param queryParameter 查询参数
+ * @return 用户不属于的机构
+ * @throws Exception 违例
+ */
+ public List listOtherOrgsByUser(String userId, QueryParameter queryParameter) throws Exception;
+
/**
* 查询用户不属于的机构
* @param userId 用户ID
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 557ee478..d394bf15 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,6 +4,8 @@ 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.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;
@@ -21,6 +23,9 @@ import javax.persistence.criteria.*;
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;
@Service
@@ -28,6 +33,37 @@ 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);
+ Set selectedOrgIds =new HashSet<>();
+ for(OrgVo selectedOrg : selectedOrgs){
+ selectedOrgIds.add(selectedOrg.getId());
+ }
+ for(OrgVo allOrg : allOrgs){
+ if(selectedOrgIds.contains(allOrg.getId())) {
+ allOrg.setSelected(true);
+ }
+ }
+ return allOrgs;
+ }
+
+ @Override
+ public List listOrgsByUser(String userId, QueryParameter queryParameter) throws Exception {
+ if(StringUtils.hasText(userId)) {
+ Specification specification = (root, query, criteriaBuilder) -> {
+ Join join = root.join("users");
+ return criteriaBuilder.equal(join.get("id"), userId);
+ };
+ return this.list(specification, queryParameter);
+ }
+ return QueryResult.emptyList();
+ }
+
@Override
public Page queryOrgsByUser(String userId, QueryParameter queryParameter) throws Exception {
if(StringUtils.hasText(userId)) {
@@ -40,12 +76,25 @@ public class OrgServiceImpl extends DaoServiceImpl listOtherOrgsByUser(String userId, QueryParameter queryParameter) throws Exception {
+ if(StringUtils.hasText(userId)) {
+ Specification specification = (root, query, criteriaBuilder) -> {
+ Join join = root.join("users",JoinType.LEFT);
+ return criteriaBuilder.isNull(join.get("id"));
+ };
+ return this.list(specification, queryParameter);
+ }
+ return QueryResult.emptyList();
+ }
+
@Override
public Page queryOtherOrgsByUser(String userId, QueryParameter queryParameter) throws Exception {
if(StringUtils.hasText(userId)) {
Specification specification = (root, query, criteriaBuilder) -> {
+ query.distinct(true);
Join join = root.join("users");
- return criteriaBuilder.notEqual(join.get("id"), userId);
+ return criteriaBuilder.or(criteriaBuilder.notEqual(join.get("id"), userId),criteriaBuilder.isNull(join.get("id")));
};
return this.query(specification, queryParameter);
}
@@ -56,7 +105,7 @@ public class OrgServiceImpl extends DaoServiceImpl userIds) throws Exception {
if(StringUtils.hasText(orgId) && userIds!=null && userIds.size()>0){
- SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_USER_ORG(_USER_ID,_ORG_ID) values(?,?)");
+ SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_USER_ORG(USER_ID_,ORG_ID_) values(?,?)");
for(String userId : userIds){
sqlBatcher.addArg(new Object[]{userId,orgId});
}
@@ -71,12 +120,12 @@ public class OrgServiceImpl extends DaoServiceImpl userIds) throws Exception {
if(StringUtils.hasText(orgId) && userIds!=null && !userIds.isEmpty()){
- SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_USER_ORG where _USER_ID=? and _ORG_ID=?");
+ SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_USER_ORG where USER_ID_=? and ORG_ID_=?");
for(String userId : userIds){
sqlBatcher.addArg(new Object[]{userId,orgId});
}
@@ -99,7 +148,7 @@ public class OrgServiceImpl extends DaoServiceImpl menuIds) throws Exception {
if(StringUtils.hasText(orgId) && menuIds!=null && !menuIds.isEmpty()){
- SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_ORG_MENU(_MENU_ID,_ORG_ID) values(?,?)");
+ SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_ORG_MENU(MENU_ID_,ORG_ID_) values(?,?)");
for(String menuId : menuIds){
sqlBatcher.addArg(new Object[]{menuId,orgId});
}
@@ -128,12 +177,12 @@ public class OrgServiceImpl extends DaoServiceImpl menuIds) throws Exception {
if(StringUtils.hasText(orgId) && menuIds!=null && menuIds.size()>0){
- SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_ORG_MENU where _MENU_ID=? and _ORG_ID=?");
+ SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_ORG_MENU where MENU_ID_=? and ORG_ID_=?");
for(String menuId : menuIds){
sqlBatcher.addArg(new Object[]{menuId,orgId});
}
@@ -156,7 +205,7 @@ public class OrgServiceImpl extends DaoServiceImpl {
}
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
new file mode 100644
index 00000000..84589495
--- /dev/null
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/convertor/ParameterEntityVoConverter.java
@@ -0,0 +1,34 @@
+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 f16cb74e..e98c6f74 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,17 +1,12 @@
package io.sc.platform.system.parameter.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.orm.entity.BaseEntity;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
-import io.sc.platform.system.api.parameter.Parameter;
import io.sc.platform.system.parameter.jpa.support.ParameterEntityJsonSerializer;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.Size;
-import java.io.Serializable;
/**
* 法人实体类
@@ -23,18 +18,27 @@ public class ParameterEntity extends CorporationAuditorEntity {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID", length=36)
+ @Column(name="ID_", length=36)
@Size(max=36)
private String id;
- @Column(name="_CODE")
+ @Column(name="CODE_")
@Size(max=255)
private String code;
- @Column(name="_VALUE")
+ @Column(name="VALUE_")
@Size(max=255)
private String value;
+ @ManyToOne(fetch=FetchType.LAZY)
+ @JoinColumn(name="PARENT_ID_")
+ private ParameterEntity parent;
+
+ public ParameterEntity(){}
+ public ParameterEntity(String id){
+ this.id =id;
+ }
+
public String getId() {
return id;
}
@@ -58,4 +62,12 @@ public class ParameterEntity extends CorporationAuditorEntity {
public void setValue(String value) {
this.value = value;
}
+
+ public ParameterEntity getParent() {
+ return parent;
+ }
+
+ public void setParent(ParameterEntity parent) {
+ this.parent = parent;
+ }
}
\ No newline at end of file
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/repository/ParameterRepository.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/repository/ParameterRepository.java
index 19709f61..c9130d3c 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/repository/ParameterRepository.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/repository/ParameterRepository.java
@@ -2,7 +2,14 @@ package io.sc.platform.system.parameter.jpa.repository;
import io.sc.platform.orm.repository.DaoRepository;
import io.sc.platform.system.parameter.jpa.entity.ParameterEntity;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
public interface ParameterRepository extends DaoRepository {
+ public ParameterEntity getByCode(String code);
+ @Query("select entity from ParameterEntity entity where entity.code in (:codes)")
+ public List findByCodes(@Param("codes")String[] codes);
}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/support/ParameterEntityJsonSerializer.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/support/ParameterEntityJsonSerializer.java
index 0e45fc6a..5203e296 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/support/ParameterEntityJsonSerializer.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/jpa/support/ParameterEntityJsonSerializer.java
@@ -17,6 +17,7 @@ public class ParameterEntityJsonSerializer extends JsonSerializer {
+public interface ParameterService extends DaoService, SystemParameterService {
}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/impl/ParameterServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/impl/ParameterServiceImpl.java
index 656beb42..60734881 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/impl/ParameterServiceImpl.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/service/impl/ParameterServiceImpl.java
@@ -5,8 +5,71 @@ 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;
import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
@Service
public class ParameterServiceImpl extends DaoServiceImpl implements ParameterService {
+ @Override
+ public boolean containsParameter(String code) {
+ if(StringUtils.hasText(code)) {
+ ParameterEntity entity = repository.getByCode(code);
+ return entity!=null;
+ }
+ return false;
+ }
+
+ @Override
+ public String getParameter(String code) {
+ if(StringUtils.hasText(code)) {
+ ParameterEntity entity = repository.getByCode(code);
+ if(entity!=null) {
+ return entity.getValue();
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String getParameter(String code, String defaultValue) {
+ if(StringUtils.hasText(code)) {
+ ParameterEntity entity = repository.getByCode(code);
+ if(entity!=null) {
+ return StringUtils.hasText(entity.getValue())?entity.getValue():defaultValue;
+ }
+ }
+ return defaultValue;
+ }
+
+ @Override
+ public Map getParameters(String[] codes) {
+ if(codes!=null && codes.length>0){
+ List entities = repository.findByCodes(codes);
+ if(entities!=null && !entities.isEmpty()){
+ Map result =new HashMap<>();
+ for(ParameterEntity entity : entities){
+ result.put(entity.getCode(),entity.getValue());
+ }
+ return result;
+ }
+ }
+ return Collections.emptyMap();
+ }
+ @Override
+ public Map getParameters() {
+ List entities = repository.findAll();
+ if(entities!=null && !entities.isEmpty()){
+ Map result =new HashMap<>();
+ for(ParameterEntity entity : entities){
+ result.put(entity.getCode(),entity.getValue());
+ }
+ return result;
+ }
+ return Collections.emptyMap();
+ }
}
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 2bf8eee0..66a3c12b 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
@@ -28,32 +28,32 @@ public class RoleEntity extends CorporationAuditorEntity {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID", length=36)
+ @Column(name="ID_", length=36)
@Size(max=36)
private String id;
//角色名称
- @Column(name="_CODE",nullable=false,length=254)
+ @Column(name="CODE_",nullable=false,length=254)
@Size(max=254)
private String code;
//显示名称
- @Column(name="_NAME", length=254)
+ @Column(name="NAME_", length=254)
@Size(min=1,max=255)
private String name;
//描述
- @Column(name="_DESCRIPTION", length=254)
+ @Column(name="DESCRIPTION_", length=254)
@Size(max=254)
private String description;
//是否可用
- @Column(name="_ENABLE")
+ @Column(name="ENABLE_")
@Convert(converter=NumericBooleanConverter.class)
private Boolean enable;
//默认首页面模版路径
- @Column(name="_INDEX_PAGE_URL", length=254)
+ @Column(name="INDEX_PAGE_URL_", length=254)
@Size(max=254)
private String indexPageUrl;
@@ -66,12 +66,12 @@ public class RoleEntity extends CorporationAuditorEntity {
private List menus =new ArrayList();
//角色可访问的帮助ID集合
- @Column(name="_HELP_IDS", length=1024)
+ @Column(name="HELP_IDS_", length=1024)
@Convert(converter = SetStringConverter.class)
private Set helpIds =new HashSet();
//角色可访问的首选项(系统配置)ID集合
- @Column(name="_PREFERENCE_IDS", length=1024)
+ @Column(name="PREFERENCE_IDS_", length=1024)
@Convert(converter = SetStringConverter.class)
private Set preferenceIds =new HashSet();
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/role/service/impl/RoleServiceImpl.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/role/service/impl/RoleServiceImpl.java
index 2587f4cc..01228695 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/role/service/impl/RoleServiceImpl.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/role/service/impl/RoleServiceImpl.java
@@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.persistence.criteria.Join;
+import javax.persistence.criteria.JoinType;
import javax.transaction.Transactional;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -58,6 +59,9 @@ public class RoleServiceImpl extends DaoServiceImpl queryRolesByUser(String userId, QueryParameter queryParameter) throws Exception {
if(StringUtils.hasText(userId)) {
+ if(queryParameter!=null){
+ queryParameter.addSortBy("name");
+ }
Specification specification = (root, query, criteriaBuilder) -> {
Join join = root.join("users");
return criteriaBuilder.equal(join.get("id"), userId);
@@ -70,9 +74,13 @@ public class RoleServiceImpl extends DaoServiceImpl queryOtherRolesByUser(String userId, QueryParameter queryParameter) throws Exception {
if(StringUtils.hasText(userId)) {
+ if(queryParameter!=null){
+ queryParameter.addSortBy("name");
+ }
Specification specification = (root, query, criteriaBuilder) -> {
- Join join = root.join("users");
- return criteriaBuilder.notEqual(join.get("id"), userId);
+ query.distinct(true);
+ Join join = root.join("users", JoinType.LEFT);
+ return criteriaBuilder.or(criteriaBuilder.isNull(join.get("id")),criteriaBuilder.notEqual(join.get("id"), userId));
};
return this.query(specification, queryParameter);
}
@@ -95,8 +103,9 @@ public class RoleServiceImpl extends DaoServiceImpl queryOtherRolesByMenu(String menuId, QueryParameter queryParameter) throws Exception {
if(StringUtils.hasText(menuId)) {
Specification specification = (root, query, criteriaBuilder) -> {
- Join join = root.join("menus");
- return criteriaBuilder.notEqual(join.get("id"), menuId);
+ query.distinct(true);
+ Join join = root.join("menus",JoinType.LEFT);
+ return criteriaBuilder.or(criteriaBuilder.notEqual(join.get("id"), menuId),criteriaBuilder.isNull(join.get("id")));
};
return this.query(specification, queryParameter);
}
@@ -107,7 +116,7 @@ public class RoleServiceImpl extends DaoServiceImpl userIds) throws Exception {
if(StringUtils.hasText(roleId) && userIds!=null && !userIds.isEmpty()){
- SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_USER_ROLE(_USER_ID,_ROLE_ID) values(?,?)");
+ SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_USER_ROLE(USER_ID_,ROLE_ID_) values(?,?)");
for(String userId : userIds){
sqlBatcher.addArg(new Object[]{userId,roleId});
}
@@ -122,12 +131,12 @@ public class RoleServiceImpl extends DaoServiceImpl userIds) throws Exception{
if(StringUtils.hasText(roleId) && userIds!=null && userIds.size()>0){
- SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_USER_ROLE where _USER_ID=? and _ROLE_ID=?");
+ SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_USER_ROLE where USER_ID_=? and ROLE_ID_=?");
for(String userId : userIds){
sqlBatcher.addArg(new Object[]{userId,roleId});
}
@@ -150,7 +159,7 @@ public class RoleServiceImpl extends DaoServiceImpl menuIds) throws Exception {
if(StringUtils.hasText(roleId) && menuIds!=null && !menuIds.isEmpty()){
- SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_ROLE_MENU(_MENU_ID,_ROLE_ID) values(?,?)");
+ SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_ROLE_MENU(MENU_ID_,ROLE_ID_) values(?,?)");
for(String menuId : menuIds){
sqlBatcher.addArg(new Object[]{menuId,roleId});
}
@@ -179,12 +188,12 @@ public class RoleServiceImpl extends DaoServiceImpl menuIds) throws Exception {
if(StringUtils.hasText(roleId) && menuIds!=null && !menuIds.isEmpty()){
- SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_ROLE_MENU where _MENU_ID=? and _ROLE_ID=?");
+ SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_ROLE_MENU where MENU_ID_=? and ROLE_ID_=?");
for(String menuId : menuIds){
sqlBatcher.addArg(new Object[]{menuId,roleId});
}
@@ -207,7 +216,7 @@ public class RoleServiceImpl extends DaoServiceImpl {
private UserEntityVoConverter converter =new UserEntityVoConverter();
- @GetMapping(value={"session"})
+ @GetMapping("session")
public UserSession session(HttpServletRequest request){
return service.getUserSession(request);
}
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 3c090aff..61d7fec4 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
@@ -24,47 +24,47 @@ public class UserEntity extends CorporationAuditorEntity {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
- @Column(name="_ID", length=36)
+ @Column(name="ID_", length=36)
@Size(max=36)
private String id;
//登录名
- @Column(name="_LOGINNAME", nullable=false, length=255)
+ @Column(name="LOGINNAME_", nullable=false, length=255)
@Size(min=1,max=255)
private String loginName;
//用户名
- @Column(name="_USERNAME", length=255)
+ @Column(name="USERNAME_", length=255)
@Size(min=1,max=255)
private String userName;
//密码
- @Column(name="_PASSWORD", length=255)
+ @Column(name="PASSWORD_", length=255)
@Size(max=255)
private String password;
//描述
- @Column(name="_DESCRIPTION", length=255)
+ @Column(name="DESCRIPTION_", length=255)
@Size(max=255)
private String description;
//是否可用
- @Column(name="_ENABLE")
+ @Column(name="ENABLE_")
@Convert(converter=NumericBooleanConverter.class)
private Boolean enable;
//账户是否过期
- @Column(name="_IS_ACCOUNT_EXPIRED")
+ @Column(name="IS_ACCOUNT_EXPIRED_")
@Convert(converter=NumericBooleanConverter.class)
private Boolean accountExpired;
//账户是否被锁定
- @Column(name="_IS_ACCOUNT_LOCKED")
+ @Column(name="IS_ACCOUNT_LOCKED_")
@Convert(converter=NumericBooleanConverter.class)
private Boolean accountLocked;
//密码是否过期
- @Column(name="_IS_CREDENTIALS_EXPIRED")
+ @Column(name="IS_CREDENTIALS_EXPIRED_")
@Convert(converter=NumericBooleanConverter.class)
private Boolean credentialsExpired;
@@ -72,13 +72,13 @@ public class UserEntity extends CorporationAuditorEntity {
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(
name = "SYS_USER_ROLE",
- joinColumns = {@JoinColumn(name = "_USER_ID", nullable = false,referencedColumnName="_ID")},
- inverseJoinColumns = {@JoinColumn(name = "_ROLE_ID",nullable = false,referencedColumnName="_ID")}
+ joinColumns = {@JoinColumn(name = "USER_ID_", nullable = false,referencedColumnName="ID_")},
+ inverseJoinColumns = {@JoinColumn(name = "ROLE_ID_",nullable = false,referencedColumnName="ID_")}
)
private List roles =new ArrayList();
//默认所属角色ID
- @Column(name="_DEFAULT_ROLE_ID",length=36)
+ @Column(name="DEFAULT_ROLE_ID_",length=36)
@Size(max=36)
private String defaultRoleId;
@@ -86,38 +86,38 @@ public class UserEntity extends CorporationAuditorEntity {
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(
name = "SYS_USER_ORG",
- joinColumns = {@JoinColumn(name = "_USER_ID", nullable = false,referencedColumnName="_ID")},
- inverseJoinColumns = {@JoinColumn(name = "_ORG_ID",nullable = false,referencedColumnName="_ID")}
+ joinColumns = {@JoinColumn(name = "USER_ID_", nullable = false,referencedColumnName="ID_")},
+ inverseJoinColumns = {@JoinColumn(name = "ORG_ID_",nullable = false,referencedColumnName="ID_")}
)
private List orgs =new ArrayList();
//默认所属机构ID
- @Column(name="_DEFAULT_ORG_ID",length=36)
+ @Column(name="DEFAULT_ORG_ID_",length=36)
@Size(max=36)
private String defaultOrgId;
//email
- @Column(name="_EMAIL",length=255)
+ @Column(name="EMAIL_",length=255)
@Size(max=255)
private String email;
//电话
- @Column(name="_PHONE",length=18)
+ @Column(name="PHONE_",length=18)
@Size(max=18)
private String phone;
//手机号
- @Column(name="_MOBILE",length=14)
+ @Column(name="MOBILE_",length=14)
@Size(max=14)
private String mobile;
//微信号
- @Column(name="_WEIXIN",length=255)
+ @Column(name="WEIXIN_",length=255)
@Size(max=255)
private String weixin;
//QQ号
- @Column(name="_QQ",length=255)
+ @Column(name="QQ_",length=255)
@Size(max=255)
private String qq;
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/jpa/repository/UserRepository.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/jpa/repository/UserRepository.java
index b82e949c..8bb23808 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/user/jpa/repository/UserRepository.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/user/jpa/repository/UserRepository.java
@@ -13,7 +13,7 @@ public interface UserRepository extends DaoRepository {
* @param loginName 登录名
* @return 用户实体
*/
- @Query("select user from UserEntity as user left join fetch user.roles where user.loginName=:loginName")
+ @Query("select user from UserEntity user left join fetch user.roles where user.loginName=:loginName")
public UserEntity findByLoginName(@Param("loginName") String loginName);
/**
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 92454a68..8bb3453d 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
@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.persistence.criteria.Join;
+import javax.persistence.criteria.JoinType;
import javax.servlet.http.HttpServletRequest;
import javax.transaction.Transactional;
import java.sql.PreparedStatement;
@@ -82,7 +83,7 @@ public class UserServiceImpl extends DaoServiceImpl queryOtherUsersByRole(String roleId, QueryParameter queryParameter) throws Exception {
if(StringUtils.hasText(roleId)) {
Specification specification = (root, query, criteriaBuilder) -> {
- Join join = root.join("roles");
- return criteriaBuilder.notEqual(join.get("id"), roleId);
+ query.distinct(true);
+ Join join = root.join("roles", JoinType.LEFT);
+ return criteriaBuilder.or(criteriaBuilder.isNull(join.get("id")),criteriaBuilder.notEqual(join.get("id"), roleId));
};
return this.query(specification, queryParameter);
}
@@ -177,7 +179,7 @@ public class UserServiceImpl extends DaoServiceImpl specification = (root, query, criteriaBuilder) -> {
Join join = root.join("orgs");
- return criteriaBuilder.notEqual(join.get("id"), orgId);
+ return criteriaBuilder.equal(join.get("id"), orgId);
};
return this.query(specification, queryParameter);
}
@@ -188,8 +190,9 @@ public class UserServiceImpl extends DaoServiceImpl queryOtherUsersByOrg(String orgId, QueryParameter queryParameter) throws Exception {
if(StringUtils.hasText(orgId)) {
Specification specification = (root, query, criteriaBuilder) -> {
- Join join = root.join("orgs");
- return criteriaBuilder.notEqual(join.get("id"), orgId);
+ query.distinct(true);
+ Join join = root.join("orgs",JoinType.LEFT);
+ return criteriaBuilder.or(criteriaBuilder.notEqual(join.get("id"),orgId),criteriaBuilder.isNull(join.get("id")));
};
return this.query(specification, queryParameter);
}
@@ -200,7 +203,7 @@ public class UserServiceImpl extends DaoServiceImpl roleIds) throws Exception {
if(StringUtils.hasText(userId) && roleIds!=null && !roleIds.isEmpty()){
- SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_USER_ROLE(_ROLE_ID,_USER_ID) values(?,?)");
+ SqlBatcher sqlBatcher =new SqlBatcher("insert into SYS_USER_ROLE(ROLE_ID_,USER_ID_) values(?,?)");
for(String roleId : roleIds){
sqlBatcher.addArg(new Object[]{roleId,userId});
}
@@ -215,12 +218,12 @@ public class UserServiceImpl extends DaoServiceImpl roleIds) throws Exception{
if(StringUtils.hasText(userId) && roleIds!=null && !roleIds.isEmpty()){
- SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_USER_ROLE where _ROLE_ID=? and _USER_ID=?");
+ SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_USER_ROLE where ROLE_ID_=? and USER_ID_=?");
for(String roleId : roleIds){
sqlBatcher.addArg(new Object[]{roleId,userId});
}
@@ -243,7 +246,7 @@ public class UserServiceImpl extends DaoServiceImpl orgIds) throws Exception {
if(StringUtils.hasText(userId) && orgIds!=null && !orgIds.isEmpty()){
- SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_USER_ORG where _ORG_ID=? and _USER_ID=?");
+ SqlBatcher sqlBatcher =new SqlBatcher("delete from SYS_USER_ORG where ORG_ID_=? and USER_ID_=?");
for(String orgId : orgIds){
sqlBatcher.addArg(new Object[]{orgId,userId});
}
@@ -299,7 +302,7 @@ public class UserServiceImpl extends DaoServiceImpl