From 114695905253bf68ec64d62c21150c35072b2390 Mon Sep 17 00:00:00 2001 From: Odboy Date: Thu, 23 Oct 2025 18:01:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=91=E5=B8=831.4.1=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.MD | 34 +- commit.sh | 34 -- cutejava-front/LICENSE | 382 +++++++++--------- cutejava-front/docs/images/CuteBusiness.png | Bin 29325 -> 0 bytes .../docs/images/CuteFileDragUpload.png | Bin 68652 -> 0 bytes cutejava-front/docs/images/CuteFileUpload.png | Bin 62804 -> 0 bytes cutejava-front/package.json | 2 +- .../business/CuteProductLineSelectPro.vue | 1 + ...serSelect.vue => CuteSingleUserSelect.vue} | 162 ++++---- .../src/views/components/dev/CuteNoData.vue | 2 +- .../views/components/dev/CuteScreenShot.vue | 2 +- .../views/componentsDemo/CuteMarkdownDemo.vue | 7 +- .../views/componentsDemo/CuteOtherDemo.vue | 91 +++++ .../componentsDemo/CuteRichTextEditorDemo.vue | 12 +- .../src/views/system/user/index.vue | 1 + cutejava/LICENSE | 382 +++++++++--------- .../thirdapi/ThirdApiExceptionCatch.java | 50 --- .../thirdapi/ThirdExceptionCatchAspect.java | 148 ------- .../thirdapi/vo/KubernetesApiExceptionVo.java | 46 --- .../logging/ExecutionTimeStatisticsFace.java | 2 +- .../ExecutionTimeStatisticsFaceAspect.java | 4 +- .../mybatisplus/config/CsMpQuery.java | 28 -- ...{CsMpEasyService.java => CsMpService.java} | 148 +++---- .../framework/redis/RedisConfiguration.java | 8 +- .../redis/RedissonConfiguration.java | 97 ----- .../cn/odboy/util/CsDistributedIdUtil.java | 2 +- .../main/java/cn/odboy/util/LogFmtUtil.java | 48 --- .../java/cn/odboy/HealthCheckPointer.java | 6 + .../src/main/resources/application-dev.yml | 4 +- cutejava/docs/mysql/cutejava.sql | 18 +- 30 files changed, 664 insertions(+), 1057 deletions(-) delete mode 100644 commit.sh delete mode 100644 cutejava-front/docs/images/CuteBusiness.png delete mode 100644 cutejava-front/docs/images/CuteFileDragUpload.png delete mode 100644 cutejava-front/docs/images/CuteFileUpload.png rename cutejava-front/src/views/components/business/{CuteOneUserSelect.vue => CuteSingleUserSelect.vue} (93%) create mode 100644 cutejava-front/src/views/componentsDemo/CuteOtherDemo.vue delete mode 100644 cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/ThirdApiExceptionCatch.java delete mode 100644 cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/ThirdExceptionCatchAspect.java delete mode 100644 cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/vo/KubernetesApiExceptionVo.java rename cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/{CsMpEasyService.java => CsMpService.java} (93%) delete mode 100644 cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedissonConfiguration.java delete mode 100644 cutejava/cutejava-framework/src/main/java/cn/odboy/util/LogFmtUtil.java diff --git a/README.MD b/README.MD index 0f716881..b7a91c2c 100644 --- a/README.MD +++ b/README.MD @@ -8,7 +8,10 @@ #### 项目源码 -https://github.com/odboy-tianjun/cutejava +[https://github.com/odboy-tianjun/cutejava](https://github.com/odboy-tianjun/cutejava) + +#### 项目文档 +[https://cutejava-doc.odboy.cn/](https://cutejava-doc.odboy.cn/) #### 编码规范 @@ -52,35 +55,6 @@ https://github.com/odboy-tianjun/cutejava - 存储管理:本地存储、Minio存储 - 服务监控:监控服务器的负载情况 -#### 前端基础组件 - -> 组件所在路径:cutejava-front/src/views/components/dev - -- CuteSimpleTable 简单表格 -- CuteDragTable 支持拖拽的表格 -- CuteFormDialog 支持表单的对话框 -- CuteFormDrawer 支持表单的抽屉 -- CuteRichTextEditor 富文本编辑器 -- CuteOneKeyCopy 一键复制 -- CuteMarkdown Markdown编辑器 -- CuteJavaEditor Java编辑器(已弃用) -- CuteYamlEditor Yaml编辑器(已弃用) -- CuteCodeEditor 多语言编辑器(支持yaml、java、go、swift、dockerfile、groovy、lua、perl、python、ruby、sql、xml、vue) - -#### 前端业务组件 - -> 组件所在路径:cutejava-front/src/views/components/business - -- CuteDeptTree 部门树 -- CuteProductLineSelect 产品线选择框 -- CuteProductLineSelectPro 产品线级联选择框 -- CuteUserSelect 用户多选框 - ![CuteBusiness](./cutejava-front/docs/images/CuteBusiness.png) -- CuteFileUpload 上传文件到OSS, 必须结合Minio使用(上传完成后必须销毁组件) - ![CuteFileUpload](./cutejava-front/docs/images/CuteFileUpload.png) -- CuteFileDragUpload 支持拖拽上传文件到OSS, 必须结合Minio使用(上传完成后必须销毁组件) - ![CuteFileDragUpload](./cutejava-front/docs/images/CuteFileDragUpload.png) - #### 系统模块 - cutejava-framework:系统基础框架。提供核心功能,如:权限、数据权限、异常处理、缓存、工具类、接口限流、接口防重、接口幂等。 diff --git a/commit.sh b/commit.sh deleted file mode 100644 index ce2dfad4..00000000 --- a/commit.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -is_weekend() { - day=$(date +%u) - [ "$day" -eq 6 ] || [ "$day" -eq 7 ] -} - -if is_weekend; then - # 如果是周末,使用当前时间 - git add . - git commit -m "$1" - git push -else - # 如果不是周末,设置为最近的周末时间 - day=$(date +%u) - if [ "$day" -le 5 ]; then - # 周一到周五,设置为即将到来的周六 - days_until_saturday=$((6 - day)) - weekend_date=$(date -d "$days_until_saturday days" "+%Y-%m-%d 12:00:00") - else - # 周日,使用昨天(周六) - weekend_date=$(date -d "yesterday" "+%Y-%m-%d 12:00:00") - fi - - export GIT_AUTHOR_DATE="$weekend_date" - export GIT_COMMITTER_DATE="$weekend_date" - - git add . - git commit -m "$1" - git push - - unset GIT_AUTHOR_DATE - unset GIT_COMMITTER_DATE -fi diff --git a/cutejava-front/LICENSE b/cutejava-front/LICENSE index 94343fa3..78a36cb2 100644 --- a/cutejava-front/LICENSE +++ b/cutejava-front/LICENSE @@ -1,191 +1,191 @@ -Apache License -Version 2.0, January 2004 -http://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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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 2022 Odboy - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Apache License +Version 2.0, January 2004 +http://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: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +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 +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 2019 Zheng Jie + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/cutejava-front/docs/images/CuteBusiness.png b/cutejava-front/docs/images/CuteBusiness.png deleted file mode 100644 index 3a4518198e9c5c07dab50788b86d7b937d92159b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29325 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 nSHu=8oO0{vgj`?u^ol9h{AMGG7 diff --git a/cutejava-front/docs/images/CuteFileDragUpload.png b/cutejava-front/docs/images/CuteFileDragUpload.png deleted file mode 100644 index aae6a4182aa6f7b116b76dc1902d58acfd92c4c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68652 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

W 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

(0n{LboZcAAT_QMGv9a&WtN3 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 hXW*;)9>U_*>JNHPEZxxv8yMpnU(?zX7tUTGs#o diff --git a/cutejava-front/docs/images/CuteFileUpload.png b/cutejava-front/docs/images/CuteFileUpload.png deleted file mode 100644 index 98abcdfb4802dbb31dca0aded3d4916c8f84fe48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62804 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 KL#%JkT=^G%un9H* diff --git a/cutejava-front/package.json b/cutejava-front/package.json index d0c24bd8..01ec023d 100644 --- a/cutejava-front/package.json +++ b/cutejava-front/package.json @@ -1,6 +1,6 @@ { "name": "cutejava-front", - "version": "1.4.0", + "version": "1.4.1", "description": "CuteJava 前端源码", "author": "Odboy", "license": "Apache-2.0", diff --git a/cutejava-front/src/views/components/business/CuteProductLineSelectPro.vue b/cutejava-front/src/views/components/business/CuteProductLineSelectPro.vue index ad44cf74..98f951f0 100644 --- a/cutejava-front/src/views/components/business/CuteProductLineSelectPro.vue +++ b/cutejava-front/src/views/components/business/CuteProductLineSelectPro.vue @@ -10,6 +10,7 @@ :disabled="disabled" :options="deptOptions" style="width: 100%" + placeholder="请选择产品线" @change="handleChange" /> diff --git a/cutejava-front/src/views/components/business/CuteOneUserSelect.vue b/cutejava-front/src/views/components/business/CuteSingleUserSelect.vue similarity index 93% rename from cutejava-front/src/views/components/business/CuteOneUserSelect.vue rename to cutejava-front/src/views/components/business/CuteSingleUserSelect.vue index 412907af..336cd080 100644 --- a/cutejava-front/src/views/components/business/CuteOneUserSelect.vue +++ b/cutejava-front/src/views/components/business/CuteSingleUserSelect.vue @@ -1,81 +1,81 @@ - - - - - + + + + + diff --git a/cutejava-front/src/views/components/dev/CuteNoData.vue b/cutejava-front/src/views/components/dev/CuteNoData.vue index b2b2b71e..44b81547 100644 --- a/cutejava-front/src/views/components/dev/CuteNoData.vue +++ b/cutejava-front/src/views/components/dev/CuteNoData.vue @@ -15,7 +15,7 @@ export default { props: { desc: { type: String, - required: true, + required: false, default: '暂无匹配数据' } } diff --git a/cutejava-front/src/views/components/dev/CuteScreenShot.vue b/cutejava-front/src/views/components/dev/CuteScreenShot.vue index 44874780..974a63c5 100644 --- a/cutejava-front/src/views/components/dev/CuteScreenShot.vue +++ b/cutejava-front/src/views/components/dev/CuteScreenShot.vue @@ -17,7 +17,7 @@ 截图并下载 -

diff --git a/cutejava-front/src/views/componentsDemo/CuteMarkdownDemo.vue b/cutejava-front/src/views/componentsDemo/CuteMarkdownDemo.vue index c1529b5c..651545fe 100644 --- a/cutejava-front/src/views/componentsDemo/CuteMarkdownDemo.vue +++ b/cutejava-front/src/views/componentsDemo/CuteMarkdownDemo.vue @@ -3,7 +3,7 @@ @@ -18,10 +18,7 @@ export default { components: { CuteMarkdown }, data() { return { - markdown: { - height: '200px', - content: '初始化内容' - } + content: '初始化内容' } }, methods: { diff --git a/cutejava-front/src/views/componentsDemo/CuteOtherDemo.vue b/cutejava-front/src/views/componentsDemo/CuteOtherDemo.vue new file mode 100644 index 00000000..5f4a830b --- /dev/null +++ b/cutejava-front/src/views/componentsDemo/CuteOtherDemo.vue @@ -0,0 +1,91 @@ + + + + diff --git a/cutejava-front/src/views/componentsDemo/CuteRichTextEditorDemo.vue b/cutejava-front/src/views/componentsDemo/CuteRichTextEditorDemo.vue index 14ca3af0..13ce75af 100644 --- a/cutejava-front/src/views/componentsDemo/CuteRichTextEditorDemo.vue +++ b/cutejava-front/src/views/componentsDemo/CuteRichTextEditorDemo.vue @@ -1,9 +1,6 @@ @@ -13,13 +10,6 @@ import CuteRichTextEditor from '@/views/components/dev/CuteRichTextEditor' export default { name: 'CuteRichTextEditorDemo', components: { CuteRichTextEditor }, - data() { - return { - html: { - height: '200px' - } - } - }, methods: { onChange(html, text) { console.log('onChange:html', html) diff --git a/cutejava-front/src/views/system/user/index.vue b/cutejava-front/src/views/system/user/index.vue index f120cfff..272bbd4a 100644 --- a/cutejava-front/src/views/system/user/index.vue +++ b/cutejava-front/src/views/system/user/index.vue @@ -312,6 +312,7 @@ export default { }, created() { this.crud.msg.add = '新增成功,默认密码:123456' + console.log('======== this.dict', this.dict) }, mounted: function() { const that = this diff --git a/cutejava/LICENSE b/cutejava/LICENSE index fe57103d..78a36cb2 100644 --- a/cutejava/LICENSE +++ b/cutejava/LICENSE @@ -1,191 +1,191 @@ -Apache License -Version 2.0, January 2004 -http://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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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 2022-2025 Odboy - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file +Apache License +Version 2.0, January 2004 +http://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: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +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 +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 2019 Zheng Jie + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/ThirdApiExceptionCatch.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/ThirdApiExceptionCatch.java deleted file mode 100644 index e7752f43..00000000 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/ThirdApiExceptionCatch.java +++ /dev/null @@ -1,50 +0,0 @@ -// /* -// * Copyright 2021-2025 Odboy -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -// package cn.odboy.framework.exception.thirdapi; -// -// import java.lang.annotation.Documented; -// import java.lang.annotation.ElementType; -// import java.lang.annotation.Inherited; -// import java.lang.annotation.Retention; -// import java.lang.annotation.RetentionPolicy; -// import java.lang.annotation.Target; -// -// /** -// * 用于捕捉三方异常 -// * -// * @author odboy -// */ -// @Inherited -// @Documented -// @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) -// @Retention(RetentionPolicy.RUNTIME) -// public @interface ThirdApiExceptionCatch { -// /** -// * 模块名称 -// */ -// String modelName(); -// -// /** -// * 接口描述 -// */ -// String description(); -// -// /** -// * 是否抛出异常 -// */ -// boolean throwException() default true; -// } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/ThirdExceptionCatchAspect.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/ThirdExceptionCatchAspect.java deleted file mode 100644 index e6aeae41..00000000 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/ThirdExceptionCatchAspect.java +++ /dev/null @@ -1,148 +0,0 @@ -// /* -// * Copyright 2021-2025 Odboy -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -// package cn.odboy.framework.exception.thirdapi; -// -// import cn.hutool.core.date.TimeInterval; -// import cn.odboy.framework.exception.thirdapi.vo.KubernetesApiExceptionVo; -// import cn.odboy.framework.exception.web.BadRequestException; -// import cn.odboy.util.CsReturnValueHandleUtil; -// import cn.odboy.util.LogFmtUtil; -// import com.alibaba.fastjson2.JSON; -// import com.aliyun.tea.TeaException; -// import io.kubernetes.client.openapi.ApiException; -// import lombok.extern.slf4j.Slf4j; -// import org.aspectj.lang.ProceedingJoinPoint; -// import org.aspectj.lang.annotation.Around; -// import org.aspectj.lang.annotation.Aspect; -// import org.gitlab4j.api.GitLabApiException; -// import org.springframework.stereotype.Component; -// -// /** -// * DingtalkApi调用异常 -// * -// * @author odboy -// * @date 2025-05-07 -// */ -// @Slf4j -// @Aspect -// @Component -// public class ThirdExceptionCatchAspect { -// @Around("@annotation(thirdApiExceptionCatch)") -// public Object aroundDingtalkApiExceptionCatch(ProceedingJoinPoint joinPoint, ThirdApiExceptionCatch thirdApiExceptionCatch) throws Throwable { -// return handleThirdApiException(joinPoint, thirdApiExceptionCatch); -// } -// -// /** -// * 三方服务调用异常处理 -// */ -// private Object handleThirdApiException(ProceedingJoinPoint joinPoint, ThirdApiExceptionCatch annotation) { -// if ("dingtalk".equals(annotation.modelName())) { -// return handleDingtalkApiException(joinPoint, annotation); -// } -// if ("gitlab".equals(annotation.modelName())) { -// return handleGitlabApiException(joinPoint, annotation); -// } -// if ("kubernetes".equals(annotation.modelName())) { -// return handleKubernetesApiException(joinPoint, annotation); -// } -// return null; -// } -// -// private Object handleDingtalkApiException(ProceedingJoinPoint joinPoint, ThirdApiExceptionCatch annotation) { -// TimeInterval timeInterval = new TimeInterval(); -// try { -// Object result = joinPoint.proceed(); -// log.info("接口 [{}] 执行耗时: {} ms", annotation.description(), timeInterval.intervalMs()); -// return result; -// } catch (TeaException teaException) { -// if (!com.aliyun.teautil.Common.empty(teaException.code) && !com.aliyun.teautil.Common.empty(teaException.message)) { -// String exceptionMessage = annotation.description() + "失败, code={}, message={}"; -// log.error(exceptionMessage, teaException.code, teaException.message, teaException); -// if (annotation.throwException()) { -// throw new BadRequestException(LogFmtUtil.format(exceptionMessage, teaException.code, teaException.message)); -// } -// } -// String exceptionMessage = annotation.description() + "失败"; -// log.error(exceptionMessage, teaException); -// if (annotation.throwException()) { -// throw new BadRequestException(exceptionMessage); -// } -// } catch (Throwable exception) { -// TeaException err = new TeaException(exception.getMessage(), exception); -// if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { -// String exceptionMessage = annotation.description() + "失败, code={}, message={}"; -// log.error(exceptionMessage, err.code, err.message, err); -// if (annotation.throwException()) { -// throw new BadRequestException(LogFmtUtil.format(exceptionMessage, err.code, err.message)); -// } -// } -// String exceptionMessage = annotation.description() + "失败"; -// log.error(exceptionMessage, exception); -// if (annotation.throwException()) { -// throw new BadRequestException(exceptionMessage); -// } -// } -// return CsReturnValueHandleUtil.getDefaultValue(joinPoint); -// } -// -// private Object handleGitlabApiException(ProceedingJoinPoint joinPoint, ThirdApiExceptionCatch annotation) { -// TimeInterval timeInterval = new TimeInterval(); -// try { -// Object result = joinPoint.proceed(); -// log.info("接口 [{}] 执行耗时: {} ms", annotation.description(), timeInterval.intervalMs()); -// return result; -// } catch (GitLabApiException gitLabApiException) { -// String exceptionMessage = annotation.description() + "失败,原因:" + gitLabApiException.getMessage(); -// log.error(exceptionMessage, gitLabApiException); -// if (annotation.throwException()) { -// throw new BadRequestException(exceptionMessage); -// } -// } catch (Throwable exception) { -// String exceptionMessage = annotation.description() + "失败"; -// log.error(exceptionMessage, exception); -// if (annotation.throwException()) { -// throw new BadRequestException(exceptionMessage); -// } -// } -// return CsReturnValueHandleUtil.getDefaultValue(joinPoint); -// } -// -// private Object handleKubernetesApiException(ProceedingJoinPoint joinPoint, ThirdApiExceptionCatch annotation) { -// TimeInterval timeInterval = new TimeInterval(); -// try { -// Object result = joinPoint.proceed(); -// log.info("接口 [{}] 执行耗时: {} ms", annotation.description(), timeInterval.intervalMs()); -// return result; -// } catch (ApiException e) { -// String responseBody = e.getResponseBody(); -// log.error("接口 [{}] 执行异常,耗时: {} ms,异常信息: {}", annotation.description(), timeInterval.intervalMs(), responseBody, e); -// if (annotation.throwException()) { -// KubernetesApiExceptionVo actionExceptionBody = JSON.parseObject(responseBody, KubernetesApiExceptionVo.class); -// if (actionExceptionBody != null) { -// throw new BadRequestException(annotation.description() + "失败, 原因:" + actionExceptionBody.getReason()); -// } -// throw new BadRequestException(annotation.description() + "失败"); -// } -// } catch (Throwable e) { -// log.error("接口 [{}] 执行异常,耗时: {} ms", annotation.description(), timeInterval.intervalMs(), e); -// if (annotation.throwException()) { -// throw new BadRequestException(annotation.description() + "失败"); -// } -// } -// return CsReturnValueHandleUtil.getDefaultValue(joinPoint); -// } -// } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/vo/KubernetesApiExceptionVo.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/vo/KubernetesApiExceptionVo.java deleted file mode 100644 index 8d16fdd4..00000000 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/thirdapi/vo/KubernetesApiExceptionVo.java +++ /dev/null @@ -1,46 +0,0 @@ -// -// /* -// * Copyright 2021-2025 Odboy -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -// package cn.odboy.framework.exception.thirdapi.vo; -// -// import cn.odboy.base.CsObject; -// import lombok.Data; -// import lombok.EqualsAndHashCode; -// -// /** -// * Kubernetes异常信息 -// * -// * @author odboy -// * @date 2025-08-03 -// */ -// @Data -// @EqualsAndHashCode(callSuper = false) -// public class KubernetesApiExceptionVo extends CsObject { -// private String kind; -// private String apiVersion; -// private String status; -// private String message; -// private String reason; -// private Details details; -// private int code; -// -// @Data -// public static class Details { -// private String name; -// private String kind; -// } -// } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFace.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFace.java index debc46b7..e395b380 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFace.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFace.java @@ -36,5 +36,5 @@ public @interface ExecutionTimeStatisticsFace { /** * 是否展示异常日志 */ - boolean errorLog() default false; + boolean showErrLog() default true; } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFaceAspect.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFaceAspect.java index e9d0b0b5..fcc4b259 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFaceAspect.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFaceAspect.java @@ -24,7 +24,7 @@ import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; /** - * DingtalkApi调用异常 + * 执行时间统计 * * @author odboy * @date 2025-05-07 @@ -41,7 +41,7 @@ public class ExecutionTimeStatisticsFaceAspect { log.info("[{}] 接口执行成功,耗时: {} ms", executionTimeStatisticsFace.description(), timeInterval.intervalMs()); return proceed; } catch (Exception e) { - if (executionTimeStatisticsFace.errorLog()) { + if (executionTimeStatisticsFace.showErrLog()) { log.info("[{}] 接口执行失败,耗时: {} ms", executionTimeStatisticsFace.description(), timeInterval.intervalMs()); } throw e; diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/CsMpQuery.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/CsMpQuery.java index 68f87c9c..be0f2628 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/CsMpQuery.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/CsMpQuery.java @@ -39,36 +39,8 @@ public @interface CsMpQuery { */ CsMpQTypeEnum type() default CsMpQTypeEnum.EQUAL; - /** - * 连接查询的属性名, 如User类中的dept - */ - String joinName() default ""; - - /** - * 默认左连接 - */ - Join join() default Join.LEFT; - /** * 多字段模糊搜索, 仅支持String类型字段, 多个用逗号隔开, 如@MpQuery(blurry = "email,username") */ String blurry() default ""; - - /** - * 适用于简单连接查询, 复杂的请自定义该注解, 或者使用sql查询 - */ - enum Join { - /** - * 左连接 - */ - LEFT, - /** - * 右连接 - */ - RIGHT, - /** - * 内连接 - */ - INNER - } } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/CsMpEasyService.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/CsMpService.java similarity index 93% rename from cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/CsMpEasyService.java rename to cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/CsMpService.java index 63da48c0..07e3bffe 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/CsMpEasyService.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/CsMpService.java @@ -1,74 +1,74 @@ -/* - * Copyright 2021-2025 Odboy - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.odboy.framework.mybatisplus.core.interfaces; - -import cn.odboy.base.CsPageResult; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import com.baomidou.mybatisplus.extension.service.IService; - -import java.io.Serializable; -import java.util.Collection; -import java.util.List; - -/** - * 公共抽象Mapper接口类 - * - * @author odboy - * @date 2022-04-03 - */ -public interface CsMpEasyService extends IService { - int saveFeatureClazz(G resources); - - int saveFeatureClazzList(List resources); - - int modifyFeatureClazzById(G resources); - - boolean modifyFeatureClazzListById(Collection resources, int batchSize); - - G queryFeatureClazzById(Serializable id, Class targetClazz); - - T queryClazzByArgs(LambdaQueryWrapper wrapper, SFunction orderColumn); - - G queryFeatureClazzByArgs(LambdaQueryWrapper wrapper, SFunction orderColumn, Class clazz); - - List queryFeatureClazzListByIds(List ids, Class targetClazz); - - List queryClazzListByArgs(Q criteria); - - List queryClazzListByArgs(LambdaQueryWrapper wrapper); - - List queryFeatureClazzListByArgs(Q criteria, Class targetClazz); - - List queryFeatureClazzListByArgs(LambdaQueryWrapper wrapper, Class targetClazz); - - CsPageResult queryClazzPageByArgs(LambdaQueryWrapper wrapper, IPage pageable); - - CsPageResult queryFeatureClazzPageByArgs( - LambdaQueryWrapper wrapper, - IPage pageable, - Class targetClazz); - - CsPageResult queryFeatureClazzPageByArgs(Q criteria, IPage pageable, Class targetClazz); - - CsPageResult queryClazzPageByArgs(Q criteria, IPage pageable); - - int modifyClazzByArgs(LambdaQueryWrapper wrapper, T entity); - - int removeClazzByArgs(LambdaQueryWrapper wrapper); -} +/* + * Copyright 2021-2025 Odboy + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.odboy.framework.mybatisplus.core.interfaces; + +import cn.odboy.base.CsPageResult; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + +/** + * 公共抽象Service接口类 + * + * @author odboy + * @date 2022-04-03 + */ +public interface CsMpService extends IService { + int saveFeatureClazz(G resources); + + int saveFeatureClazzList(List resources); + + int modifyFeatureClazzById(G resources); + + boolean modifyFeatureClazzListById(Collection resources, int batchSize); + + G queryFeatureClazzById(Serializable id, Class targetClazz); + + T queryClazzByArgs(LambdaQueryWrapper wrapper, SFunction orderColumn); + + G queryFeatureClazzByArgs(LambdaQueryWrapper wrapper, SFunction orderColumn, Class clazz); + + List queryFeatureClazzListByIds(List ids, Class targetClazz); + + List queryClazzListByArgs(Q criteria); + + List queryClazzListByArgs(LambdaQueryWrapper wrapper); + + List queryFeatureClazzListByArgs(Q criteria, Class targetClazz); + + List queryFeatureClazzListByArgs(LambdaQueryWrapper wrapper, Class targetClazz); + + CsPageResult queryClazzPageByArgs(LambdaQueryWrapper wrapper, IPage pageable); + + CsPageResult queryFeatureClazzPageByArgs( + LambdaQueryWrapper wrapper, + IPage pageable, + Class targetClazz); + + CsPageResult queryFeatureClazzPageByArgs(Q criteria, IPage pageable, Class targetClazz); + + CsPageResult queryClazzPageByArgs(Q criteria, IPage pageable); + + int modifyClazzByArgs(LambdaQueryWrapper wrapper, T entity); + + int removeClazzByArgs(LambdaQueryWrapper wrapper); +} diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java index 8b91b67e..c937bc9f 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java @@ -53,10 +53,7 @@ public class RedisConfiguration extends CachingConfigurerSupport { /** * 自动识别json对象白名单配置(仅允许解析的包名, 范围越小越安全)
未配置可能导致, 登录失败, 反复登录等问题 */ - private static final String[] WHITELIST_STR = - {"org.springframework", "cn.odboy.system.dal.dataobject", "cn.odboy.system.dal.model", - "cn.odboy.pipeline" + ".dal.dataobject", "cn.odboy.pipeline.dal.model", - "cn.odboy.pipeline.framework.pipeline.model", "cn.odboy.framework.exception.thirdapi.vo"}; + private static final String[] WHITELIST_STR = {"org.springframework", "cn.odboy.system.dal.dataobject", "cn.odboy.system.dal.model", "cn.odboy.pipeline" + ".dal.dataobject", "cn.odboy.pipeline.dal.model", "cn.odboy.pipeline.framework.pipeline.model", "cn.odboy.framework.exception.thirdapi.vo"}; /** * 设置 redis 数据默认过期时间,默认2小时 设置@cacheable 序列化方式 @@ -65,8 +62,7 @@ public class RedisConfiguration extends CachingConfigurerSupport { public RedisCacheConfiguration redisCacheConfiguration() { FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); - configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer( - fastJsonRedisSerializer)).entryTtl(Duration.ofHours(2)); + configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofHours(2)); return configuration; } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedissonConfiguration.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedissonConfiguration.java deleted file mode 100644 index 597ea7c9..00000000 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedissonConfiguration.java +++ /dev/null @@ -1,97 +0,0 @@ -///* -// * Copyright 2021-2025 Odboy -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -//package cn.odboy.framework.redis; -// -//import cn.hutool.core.util.StrUtil; -//import cn.odboy.util.CsSystemUtil; -//import lombok.extern.slf4j.Slf4j; -//import org.redisson.Redisson; -//import org.redisson.api.RedissonClient; -//import org.redisson.client.codec.StringCodec; -//import org.redisson.config.Config; -//import org.redisson.config.EqualJitterDelay; -//import org.redisson.config.SingleServerConfig; -//import org.redisson.config.TransportMode; -//import org.springframework.beans.factory.annotation.Value; -//import org.springframework.boot.autoconfigure.AutoConfigureBefore; -//import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -//import org.springframework.context.annotation.Bean; -//import org.springframework.context.annotation.Configuration; -// -//import java.time.Duration; -// -//@Slf4j -//@Configuration -//@AutoConfigureBefore(RedisAutoConfiguration.class) -//public class RedissonConfiguration { -// -// @Value("${spring.redis.host}") -// private String redisHost; -// -// @Value("${spring.redis.port}") -// private int redisPort; -// -// @Value("${spring.redis.database}") -// private int redisDatabase; -// -// @Value("${spring.redis.password:}") -// private String redisPassword; -// -// @Value("${spring.redis.timeout:5000}") -// private int timeout; -// -// @Value("${spring.redis.lettuce.pool.max-active:64}") -// private int connectionPoolSize; -// -// @Value("${spring.redis.lettuce.pool.min-idle:16}") -// private int connectionMinimumIdleSize; -// -// @Bean -// public RedissonClient redissonClient() { -// Config config = new Config(); -// config.setThreads(CsSystemUtil.getCpuCount()); -// config.setNettyThreads(0); -// config.setCodec(new StringCodec()); -// config.setTransportMode(TransportMode.NIO); -// SingleServerConfig singleServerConfig = config.useSingleServer(); -// singleServerConfig.setAddress("redis://" + redisHost + ":" + redisPort); -// singleServerConfig.setDatabase(redisDatabase); -// singleServerConfig.setTimeout(timeout); -// singleServerConfig.setConnectionPoolSize(connectionPoolSize); -// singleServerConfig.setConnectionMinimumIdleSize(connectionMinimumIdleSize); -// if (StrUtil.isNotBlank(redisPassword)) { -// singleServerConfig.setPassword(redisPassword); -// } -// singleServerConfig.setIdleConnectionTimeout(10000); -// singleServerConfig.setConnectTimeout(10000); -// singleServerConfig.setTimeout(3000); -// singleServerConfig.setRetryAttempts(3); -// // singleServerConfig.setRetryInterval(1500); -// singleServerConfig.setRetryDelay(new EqualJitterDelay(Duration.ofSeconds(3), Duration.ofSeconds(5))); -// singleServerConfig.setSubscriptionsPerConnection(5); -// singleServerConfig.setSubscriptionConnectionMinimumIdleSize(1); -// singleServerConfig.setSubscriptionConnectionPoolSize(50); -// singleServerConfig.setConnectionMinimumIdleSize(32); -// singleServerConfig.setConnectionPoolSize(64); -// singleServerConfig.setDnsMonitoringInterval(5000); -// RedissonClient redissonClient = Redisson.create(config); -// log.info("Redisson客户端 初始化完毕"); -// return redissonClient; -// } -//} -// -// diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDistributedIdUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDistributedIdUtil.java index 21975eb1..157cfcb1 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDistributedIdUtil.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDistributedIdUtil.java @@ -21,7 +21,7 @@ import cn.odboy.framework.exception.web.BadRequestException; import java.util.concurrent.atomic.AtomicLong; /** - * 分布式id生成工具 + * 分布式id生成工具(不建议用,仅供参考) * * @author odboy * @date 2025-04-05 diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/LogFmtUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/LogFmtUtil.java deleted file mode 100644 index 4ba2518b..00000000 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/LogFmtUtil.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2021-2025 Odboy - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.odboy.util; - -/** - * 适配 logger 占位符 - * - * @author odboy - * @date 2025-01-13 - */ -public class LogFmtUtil { - /** - * 替换字符串中的占位符 {} 为传入的参数 - * - * @param message 消息模板 - * @param args 替换占位符的参数 - * @return 替换后的消息 - */ - public static String format(String message, Object... args) { - if (message == null || args == null || args.length == 0) { - return message; - } - // 使用 String.format 替换占位符 - return String.format(message.replace("{}", "%s"), args); - } - - public static void main(String[] args) { - // 示例用法 - String messageTemplate = "获取dingtalk accessToken失败, code={}, message={}"; - String formattedMessage = format(messageTemplate, 400, "Bad Request"); - // 输出: 获取dingtalk accessToken失败, code=400, message=Bad Request - System.out.println(formattedMessage); - } -} diff --git a/cutejava/cutejava-starter/src/main/java/cn/odboy/HealthCheckPointer.java b/cutejava/cutejava-starter/src/main/java/cn/odboy/HealthCheckPointer.java index b08c07f3..5a97ca35 100644 --- a/cutejava/cutejava-starter/src/main/java/cn/odboy/HealthCheckPointer.java +++ b/cutejava/cutejava-starter/src/main/java/cn/odboy/HealthCheckPointer.java @@ -27,11 +27,17 @@ public class HealthCheckPointer implements CsHealthCheckPointService { @Autowired private SystemDictService systemDictService; + /** + * 系统准备就绪 + */ @Override public ResponseEntity doReadiness() { return ResponseEntity.ok(null); } + /** + * 系统是否正常 + */ @Override public ResponseEntity doLiveness() { return ResponseEntity.ok(systemDictService.getById(1)); diff --git a/cutejava/cutejava-starter/src/main/resources/application-dev.yml b/cutejava/cutejava-starter/src/main/resources/application-dev.yml index 06362108..b317af3c 100644 --- a/cutejava/cutejava-starter/src/main/resources/application-dev.yml +++ b/cutejava/cutejava-starter/src/main/resources/application-dev.yml @@ -193,8 +193,8 @@ app: private-key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A== # 鉴权 jwt: - # 必须使用最少88位的Base64对该令牌进行编码 - base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= + # 必须使用最少88位的Base64对该令牌进行编码 cn.odboy.util.CsBase64SecretUtil + base64-secret: YzE5ZWNjMjlkMGY4NDc4MDlmYzE0Y2I0MTk4YTQ4YjY5NTU0OGQxODNjNjQ0MmU1YjBmZTYwYjljYzI0M2M4MTJkZjk3Y2ZlYjg3ZTQxMjM4MjEwY2ZiYzE4YmFiYmZlZDVhM2M1YmI3M2FmNDFmNWJmM2MyMTM1ZDNhMmRmYzY= # 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html token-validity-in-seconds: 14400000 # token 续期检查时间范围(默认30分钟,单位毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期 diff --git a/cutejava/docs/mysql/cutejava.sql b/cutejava/docs/mysql/cutejava.sql index cc90ea2e..947ba408 100644 --- a/cutejava/docs/mysql/cutejava.sql +++ b/cutejava/docs/mysql/cutejava.sql @@ -24,7 +24,7 @@ CREATE TABLE `demo_time_table_copy1` ( `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '修改时间', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of demo_time_table_copy1 @@ -42,7 +42,7 @@ CREATE TABLE `demo_user_time_logic_table` ( `update_time` datetime NOT NULL COMMENT '修改时间', `available` tinyint(1) NOT NULL DEFAULT 1 COMMENT '数据有效性', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of demo_user_time_logic_table @@ -59,7 +59,7 @@ CREATE TABLE `demo_user_time_table` ( `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '修改人', `update_time` datetime NOT NULL COMMENT '修改时间', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of demo_user_time_table @@ -219,7 +219,7 @@ CREATE TABLE `qrtz_scheduler_state` ( -- Records of qrtz_scheduler_state -- ---------------------------- INSERT INTO `qrtz_scheduler_state` VALUES ('ClusteredScheduler', 'DESKTOP-FM44BLS1742558233429', 1742558255052, 20000); -INSERT INTO `qrtz_scheduler_state` VALUES ('cutejava', 'auto', 1760951912083, 10000); +INSERT INTO `qrtz_scheduler_state` VALUES ('cutejava', 'auto', 1761211053605, 10000); -- ---------------------------- -- Table structure for qrtz_simple_triggers @@ -509,7 +509,7 @@ CREATE TABLE `system_menu` ( UNIQUE INDEX `uniq_title`(`title` ASC) USING BTREE, INDEX `idx_pid`(`pid` ASC) USING BTREE, INDEX `idx_sys_menu_menu_id`(`menu_id` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 150 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统菜单' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 151 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统菜单' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of system_menu @@ -520,7 +520,7 @@ INSERT INTO `system_menu` VALUES (3, 1, 3, 1, '角色管理', 'Role', 'system/ro INSERT INTO `system_menu` VALUES (5, 1, 3, 1, '菜单管理', 'Menu', 'system/menu/index', 5, 'menu', 'menu', b'0', b'0', b'0', 'menu:list', 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (6, 1, 3, 0, '系统监控', NULL, NULL, 11, 'monitor', 'monitor', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (9, 6, 0, 1, 'SQL监控', 'DruidSqlConsole', 'system/druidSql/index', 18, 'sqlMonitor', 'druid-console', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); -INSERT INTO `system_menu` VALUES (10, NULL, 15, 0, '组件管理', NULL, NULL, 999, 'zujian', 'components', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); +INSERT INTO `system_menu` VALUES (10, NULL, 16, 0, '组件管理', NULL, NULL, 999, 'zujian', 'components', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (11, 10, 0, 1, '图标库', 'Icons', 'components/icons/index', 51, 'icon', 'icon', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (14, 36, 0, 1, '邮件工具', 'Email', 'system/email/index', 35, 'email', 'email', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (18, 36, 3, 1, '存储管理', 'Storage', 'system/storage/index', 34, 'qiniu', 'storage', b'0', b'0', b'0', 'storage:list', 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); @@ -574,6 +574,7 @@ INSERT INTO `system_menu` VALUES (128, 10, 0, 1, '演示:Markdown编辑器', 'Cu INSERT INTO `system_menu` VALUES (129, 10, 0, 1, '演示:富文本编辑器', 'CuteRichTextEditorDemo', 'componentsDemo/CuteRichTextEditorDemo', 999, 'menu', 'cuteRichTextEditorDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (130, 10, 0, 1, '演示:文件上传', 'CuteFileUploadDemo', 'componentsDemo/CuteFileUploadDemo', 999, 'menu', 'cuteFileUploadDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (132, 10, 0, 1, '演示:文件拖拽上传', 'CuteFileDragUploadDemo', 'componentsDemo/CuteFileDragUploadDemo', 999, 'menu', 'cuteFileDragUploadDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); +INSERT INTO `system_menu` VALUES (150, 10, 0, 1, '演示:其他基础组件', 'CuteOtherDemo', 'componentsDemo/CuteOtherDemo', 999, 'menu', 'cuteOtherDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); -- ---------------------------- -- Table structure for system_operation_log @@ -592,7 +593,7 @@ CREATE TABLE `system_operation_log` ( `exception_detail` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `create_time` datetime NOT NULL, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '审计日志' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '审计日志' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of system_operation_log @@ -675,7 +676,7 @@ CREATE TABLE `system_quartz_log` ( `exception_detail` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '异常详情', `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '定时任务日志' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '定时任务日志' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of system_quartz_log @@ -827,6 +828,7 @@ INSERT INTO `system_roles_menus` VALUES (130, 1); INSERT INTO `system_roles_menus` VALUES (130, 2); INSERT INTO `system_roles_menus` VALUES (132, 1); INSERT INTO `system_roles_menus` VALUES (132, 2); +INSERT INTO `system_roles_menus` VALUES (150, 1); -- ---------------------------- -- Table structure for system_user