From d28a4f7303166776920c6e28812b3d00b97328f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=85=89=E8=B5=B7?= <1198568182@qq.com> Date: Wed, 26 Mar 2025 14:32:15 +0800 Subject: [PATCH] 1 --- .idea/.gitignore | 8 + .idea/compiler.xml | 19 + .idea/encodings.xml | 8 + .idea/jarRepositories.xml | 25 + .idea/misc.xml | 12 + .idea/vcs.xml | 6 + README.en.md | 36 + README.md | 1 + data/magic-api/api/B-传输日志/group.json | 14 + data/magic-api/api/B-传输日志/日志/group.json | 14 + data/magic-api/api/B-传输日志/日志/保存.ms | 50 + .../api/B-传输日志/日志/保存设备BOM.ms | 50 + data/magic-api/api/B-传输日志/日志/列表.ms | 47 + data/magic-api/api/B-传输日志/日志/删除.ms | 37 + data/magic-api/api/B-传输日志/日志/详情.ms | 39 + data/magic-api/api/B-同步日志/PLMBOM保存.ms | 126 ++ data/magic-api/api/B-同步日志/group.json | 14 + data/magic-api/api/B-同步日志/修改.ms | 126 ++ data/magic-api/api/B-同步日志/查询.ms | 173 +++ data/magic-api/api/B-同步日志/查询new.ms | 173 +++ data/magic-api/component/传输日志/group.json | 14 + .../component/传输日志/传输日志/group.json | 14 + .../component/传输日志/传输日志/列表.ms | 238 +++ data/magic-api/component/数据管理/group.json | 10 + .../component/数据管理/测试生成/group.json | 10 + .../component/数据管理/测试生成/列表.ms | 166 +++ data/magic-api/function/权限/group.json | 10 + data/magic-api/function/权限/组织机构.ms | 54 + data/magic-api/function/配置中心/group.json | 14 + .../配置中心/根据keyAndcondition获取数据值.ms | 48 + .../根据keyLikeCondition获取数据值.ms | 48 + .../function/配置中心/根据key获取数据值.ms | 34 + db/magic-boot.sql | 603 ++++++++ log.path_IS_UNDEFINED/main/sys-info.log | 691 +++++++++ magic-boot/magic-boot.iml | 8 + magic-boot/pom.xml | 121 ++ .../magicboot/MagicBootApplication.java | 13 + .../configuration/MagicBootConfiguration.java | 19 + .../configuration/WebConfiguration.java | 22 + .../NamedTableFunctionExtension.java | 32 + .../extension/ResponseFunctionExtension.java | 40 + .../magicboot/fxapi/HttpClientResult.java | 62 + .../magicboot/fxapi/HttpClientUtils.java | 324 +++++ .../ssssssss/magicboot/fxapi/NewFXAPI.java | 1283 +++++++++++++++++ .../magicboot/fxapi/XKTokenAccess.java | 110 ++ .../magicboot/fxapi/model/AppAccessToken.java | 51 + .../fxapi/model/CorpAccessToken.java | 59 + .../magicboot/fxapi/model/CrmApiCaseInfo.java | 22 + .../magicboot/fxapi/model/CrmApiField.java | 18 + .../magicboot/fxapi/model/CrmApiInfo.java | 19 + .../magicboot/fxapi/model/CrmFXApiParam.java | 41 + .../ssssssss/magicboot/fxapi/model/Token.java | 69 + .../magicboot/fxapi/model/XKopenAPI.java | 31 + .../NamedTableHandlerInterceptor.java | 35 + .../interceptor/PermissionInterceptor.java | 87 ++ .../magicboot/model/CodeCacheMap.java | 22 + .../magicboot/model/CorpAccessU9Token.java | 63 + .../org/ssssssss/magicboot/model/Global.java | 47 + .../magicboot/model/MagicBootConstants.java | 37 + .../ssssssss/magicboot/model/StatusCode.java | 23 + .../magicboot/model/UeditorConfig.java | 348 +++++ .../provider/ExceptionResultProvider.java | 28 + .../ssssssss/magicboot/utils/AddressUtil.java | 22 + .../ssssssss/magicboot/utils/FileUtils.java | 55 + .../ssssssss/magicboot/utils/WebUtils.java | 25 + .../ssssssss/magicboot/zdyutils/APIUtil.java | 84 ++ .../ssssssss/magicboot/zdyutils/FXHTTP.java | 1034 +++++++++++++ .../ssssssss/magicboot/zdyutils/FXTIC.java | 23 + .../ssssssss/magicboot/zdyutils/GcjJson.java | 172 +++ .../ssssssss/magicboot/zdyutils/HttpSend.java | 49 + .../ssssssss/magicboot/zdyutils/JsonData.java | 24 + .../ssssssss/magicboot/zdyutils/MagicApi.java | 457 ++++++ .../ssssssss/magicboot/zdyutils/ThPost.java | 113 ++ .../magicboot/zdyutils/U9TokenAccess.java | 90 ++ magic-boot/src/main/resources/application.yml | 118 ++ .../src/main/resources/logback-spring.xml | 94 ++ magic-boot/src/main/resources/logback.xml | 42 + magic-boot/target/classes/application.yml | 118 ++ magic-boot/target/classes/logback-spring.xml | 94 ++ magic-boot/target/classes/logback.xml | 42 + .../magicboot/MagicBootApplication.class | Bin 0 -> 760 bytes .../MagicBootConfiguration.class | Bin 0 -> 2462 bytes .../configuration/WebConfiguration.class | Bin 0 -> 1464 bytes .../controller/PLMBomController.class | Bin 0 -> 11860 bytes .../controller/U9BomController.class | Bin 0 -> 13453 bytes .../magicboot/cooooo/G2CKController.class | Bin 0 -> 7428 bytes .../magicboot/cooooo/G3KCController.class | Bin 0 -> 7531 bytes .../magicboot/cooooo/G4KHController.class | Bin 0 -> 7645 bytes .../magicboot/cooooo/G8SKDController.class | Bin 0 -> 2189 bytes .../NamedTableFunctionExtension.class | Bin 0 -> 2253 bytes .../extension/ResponseFunctionExtension.class | Bin 0 -> 2488 bytes .../magicboot/fxapi/HttpClientResult.class | Bin 0 -> 1570 bytes .../magicboot/fxapi/HttpClientUtils.class | Bin 0 -> 8989 bytes .../ssssssss/magicboot/fxapi/NewFXAPI.class | Bin 0 -> 29270 bytes .../magicboot/fxapi/XKTokenAccess.class | Bin 0 -> 4828 bytes .../fxapi/model/AppAccessToken.class | Bin 0 -> 1794 bytes .../fxapi/model/CorpAccessToken.class | Bin 0 -> 2034 bytes .../fxapi/model/CrmApiCaseInfo.class | Bin 0 -> 6580 bytes .../magicboot/fxapi/model/CrmApiField.class | Bin 0 -> 5610 bytes .../magicboot/fxapi/model/CrmApiInfo.class | Bin 0 -> 6026 bytes .../magicboot/fxapi/model/CrmFXApiParam.class | Bin 0 -> 2662 bytes .../magicboot/fxapi/model/Token.class | Bin 0 -> 1733 bytes .../magicboot/fxapi/model/XKopenAPI.class | Bin 0 -> 1033 bytes .../NamedTableHandlerInterceptor.class | Bin 0 -> 2028 bytes .../interceptor/PermissionInterceptor.class | Bin 0 -> 5004 bytes .../magicboot/model/CodeCacheMap.class | Bin 0 -> 1137 bytes .../magicboot/model/CorpAccessU9Token.class | Bin 0 -> 1980 bytes .../org/ssssssss/magicboot/model/Global.class | Bin 0 -> 1834 bytes .../magicboot/model/MagicBootConstants.class | Bin 0 -> 630 bytes .../ssssssss/magicboot/model/StatusCode.class | Bin 0 -> 1559 bytes .../magicboot/model/UeditorConfig.class | Bin 0 -> 9558 bytes .../provider/ExceptionResultProvider.class | Bin 0 -> 2075 bytes .../magicboot/utils/AddressUtil.class | Bin 0 -> 1334 bytes .../ssssssss/magicboot/utils/FileUtils.class | Bin 0 -> 3146 bytes .../ssssssss/magicboot/utils/WebUtils.class | Bin 0 -> 1488 bytes .../org/ssssssss/magicboot/yyU9/U9API.class | Bin 0 -> 3954 bytes .../ssssssss/magicboot/zdyutils/APIUtil.class | Bin 0 -> 3684 bytes .../ssssssss/magicboot/zdyutils/FXHTTP.class | Bin 0 -> 23790 bytes .../ssssssss/magicboot/zdyutils/FXTIC.class | Bin 0 -> 1427 bytes .../ssssssss/magicboot/zdyutils/GcjJson.class | Bin 0 -> 5192 bytes .../magicboot/zdyutils/HttpSend.class | Bin 0 -> 2543 bytes .../magicboot/zdyutils/JsonData.class | Bin 0 -> 1300 bytes .../magicboot/zdyutils/MagicApi.class | Bin 0 -> 10507 bytes .../ssssssss/magicboot/zdyutils/ThPost.class | Bin 0 -> 5775 bytes .../magicboot/zdyutils/U9TokenAccess.class | Bin 0 -> 3592 bytes pom.xml | 24 + 126 files changed, 8646 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 README.en.md create mode 100644 README.md create mode 100644 data/magic-api/api/B-传输日志/group.json create mode 100644 data/magic-api/api/B-传输日志/日志/group.json create mode 100644 data/magic-api/api/B-传输日志/日志/保存.ms create mode 100644 data/magic-api/api/B-传输日志/日志/保存设备BOM.ms create mode 100644 data/magic-api/api/B-传输日志/日志/列表.ms create mode 100644 data/magic-api/api/B-传输日志/日志/删除.ms create mode 100644 data/magic-api/api/B-传输日志/日志/详情.ms create mode 100644 data/magic-api/api/B-同步日志/PLMBOM保存.ms create mode 100644 data/magic-api/api/B-同步日志/group.json create mode 100644 data/magic-api/api/B-同步日志/修改.ms create mode 100644 data/magic-api/api/B-同步日志/查询.ms create mode 100644 data/magic-api/api/B-同步日志/查询new.ms create mode 100644 data/magic-api/component/传输日志/group.json create mode 100644 data/magic-api/component/传输日志/传输日志/group.json create mode 100644 data/magic-api/component/传输日志/传输日志/列表.ms create mode 100644 data/magic-api/component/数据管理/group.json create mode 100644 data/magic-api/component/数据管理/测试生成/group.json create mode 100644 data/magic-api/component/数据管理/测试生成/列表.ms create mode 100644 data/magic-api/function/权限/group.json create mode 100644 data/magic-api/function/权限/组织机构.ms create mode 100644 data/magic-api/function/配置中心/group.json create mode 100644 data/magic-api/function/配置中心/根据keyAndcondition获取数据值.ms create mode 100644 data/magic-api/function/配置中心/根据keyLikeCondition获取数据值.ms create mode 100644 data/magic-api/function/配置中心/根据key获取数据值.ms create mode 100644 db/magic-boot.sql create mode 100644 log.path_IS_UNDEFINED/main/sys-info.log create mode 100644 magic-boot/magic-boot.iml create mode 100644 magic-boot/pom.xml create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/MagicBootApplication.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/configuration/MagicBootConfiguration.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/configuration/WebConfiguration.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/extension/NamedTableFunctionExtension.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/extension/ResponseFunctionExtension.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/HttpClientResult.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/HttpClientUtils.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/NewFXAPI.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/XKTokenAccess.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/AppAccessToken.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CorpAccessToken.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiCaseInfo.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiField.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiInfo.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmFXApiParam.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/Token.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/XKopenAPI.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/interceptor/NamedTableHandlerInterceptor.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/interceptor/PermissionInterceptor.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/model/CodeCacheMap.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/model/CorpAccessU9Token.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/model/Global.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/model/MagicBootConstants.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/model/StatusCode.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/model/UeditorConfig.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/provider/ExceptionResultProvider.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/utils/AddressUtil.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/utils/FileUtils.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/utils/WebUtils.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/APIUtil.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/FXHTTP.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/FXTIC.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/GcjJson.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/HttpSend.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/JsonData.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/MagicApi.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/ThPost.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/U9TokenAccess.java create mode 100644 magic-boot/src/main/resources/application.yml create mode 100644 magic-boot/src/main/resources/logback-spring.xml create mode 100644 magic-boot/src/main/resources/logback.xml create mode 100644 magic-boot/target/classes/application.yml create mode 100644 magic-boot/target/classes/logback-spring.xml create mode 100644 magic-boot/target/classes/logback.xml create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/MagicBootApplication.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/configuration/MagicBootConfiguration.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/configuration/WebConfiguration.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/controller/PLMBomController.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/controller/U9BomController.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G2CKController.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G3KCController.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G4KHController.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G8SKDController.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/extension/NamedTableFunctionExtension.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/extension/ResponseFunctionExtension.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/HttpClientResult.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/HttpClientUtils.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/NewFXAPI.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/XKTokenAccess.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/AppAccessToken.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CorpAccessToken.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiCaseInfo.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiField.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiInfo.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmFXApiParam.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/Token.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/XKopenAPI.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/interceptor/NamedTableHandlerInterceptor.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/interceptor/PermissionInterceptor.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/model/CodeCacheMap.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/model/CorpAccessU9Token.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/model/Global.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/model/MagicBootConstants.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/model/StatusCode.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/model/UeditorConfig.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/provider/ExceptionResultProvider.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/utils/AddressUtil.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/utils/FileUtils.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/utils/WebUtils.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/yyU9/U9API.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/APIUtil.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/FXHTTP.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/FXTIC.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/GcjJson.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/HttpSend.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/JsonData.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/MagicApi.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/ThPost.class create mode 100644 magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/U9TokenAccess.class create mode 100644 pom.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..e20941e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..5890832 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..d46a6c7 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d5cd614 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..cc09644 --- /dev/null +++ b/README.en.md @@ -0,0 +1,36 @@ +# 天河科技CRM+U9 + +#### Description +天河科技CRM+U9 + +#### Software Architecture +Software architecture description + +#### Installation + +1. xxxx +2. xxxx +3. xxxx + +#### Instructions + +1. xxxx +2. xxxx +3. xxxx + +#### Contribution + +1. Fork the repository +2. Create Feat_xxx branch +3. Commit your code +4. Create Pull Request + + +#### Gitee Feature + +1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md +2. Gitee blog [blog.gitee.com](https://blog.gitee.com) +3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) +4. The most valuable open source project [GVP](https://gitee.com/gvp) +5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) +6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md new file mode 100644 index 0000000..842ee12 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +智洋创新 \ No newline at end of file diff --git a/data/magic-api/api/B-传输日志/group.json b/data/magic-api/api/B-传输日志/group.json new file mode 100644 index 0000000..1e24dca --- /dev/null +++ b/data/magic-api/api/B-传输日志/group.json @@ -0,0 +1,14 @@ +{ + "properties" : { }, + "id" : "1500ff0ba1a64b3796ec9114e568869e", + "name" : "B-传输日志", + "type" : "api", + "parentId" : "0", + "path" : "/send", + "createTime" : 1684243742014, + "updateTime" : null, + "createBy" : null, + "updateBy" : null, + "paths" : [ ], + "options" : [ ] +} \ No newline at end of file diff --git a/data/magic-api/api/B-传输日志/日志/group.json b/data/magic-api/api/B-传输日志/日志/group.json new file mode 100644 index 0000000..1bfd11e --- /dev/null +++ b/data/magic-api/api/B-传输日志/日志/group.json @@ -0,0 +1,14 @@ +{ + "properties" : { }, + "id" : "6ee06a9b9fe04b85b70a9364ef324ab4", + "name" : "传输日志", + "type" : "api", + "parentId" : "1500ff0ba1a64b3796ec9114e568869e", + "path" : "/log", + "createTime" : 1684243742032, + "updateTime" : null, + "createBy" : null, + "updateBy" : null, + "paths" : [ ], + "options" : [ ] +} \ No newline at end of file diff --git a/data/magic-api/api/B-传输日志/日志/保存.ms b/data/magic-api/api/B-传输日志/日志/保存.ms new file mode 100644 index 0000000..9af3fe5 --- /dev/null +++ b/data/magic-api/api/B-传输日志/日志/保存.ms @@ -0,0 +1,50 @@ +{ + "properties" : { }, + "id" : "d0c872104e524be0862e004fe29771c3", + "script" : null, + "groupId" : "6ee06a9b9fe04b85b70a9364ef324ab4", + "name" : "保存", + "createTime" : null, + "updateTime" : 1740193136821, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/save", + "method" : "POST", + "parameters" : [ ], + "options" : [ { + "name" : "wrap_request_parameter", + "value" : "data", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "permission", + "value" : "send:log:save", + "description" : "允许拥有该权限的访问", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ], + "requestBody" : "", + "headers" : [ ], + "paths" : [ ], + "responseBody" : null, + "description" : null, + "requestBodyDefinition" : null, + "responseBodyDefinition" : null +} +================================ + data.create_time = new Date() +return db.table('send_log_plmbom').primary('log_id',uuid()).save(data) \ No newline at end of file diff --git a/data/magic-api/api/B-传输日志/日志/保存设备BOM.ms b/data/magic-api/api/B-传输日志/日志/保存设备BOM.ms new file mode 100644 index 0000000..dc6c736 --- /dev/null +++ b/data/magic-api/api/B-传输日志/日志/保存设备BOM.ms @@ -0,0 +1,50 @@ +{ + "properties" : { }, + "id" : "copy1724404999212d47014", + "script" : null, + "groupId" : "6ee06a9b9fe04b85b70a9364ef324ab4", + "name" : "保存设备BOM", + "createTime" : null, + "updateTime" : 1741679160582, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/savesbbom", + "method" : "POST", + "parameters" : [ ], + "options" : [ { + "name" : "wrap_request_parameter", + "value" : "data", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "permission", + "value" : "send:log:save", + "description" : "允许拥有该权限的访问", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ], + "requestBody" : "", + "headers" : [ ], + "paths" : [ ], + "responseBody" : null, + "description" : null, + "requestBodyDefinition" : null, + "responseBodyDefinition" : null +} +================================ + data.create_time = new Date() +return db.table('send_log_sbbom').primary('log_id',uuid()).save(data) \ No newline at end of file diff --git a/data/magic-api/api/B-传输日志/日志/列表.ms b/data/magic-api/api/B-传输日志/日志/列表.ms new file mode 100644 index 0000000..3dc7ef1 --- /dev/null +++ b/data/magic-api/api/B-传输日志/日志/列表.ms @@ -0,0 +1,47 @@ +{ + "properties" : { }, + "id" : "ed67a93b6ded41029fdb69f3f3420fb9", + "script" : null, + "groupId" : "6ee06a9b9fe04b85b70a9364ef324ab4", + "name" : "列表", + "createTime" : null, + "updateTime" : 1699275219305, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/list", + "method" : "POST", + "parameters" : [ ], + "options" : [ { + "name" : "permission", + "value" : "send:log:view", + "description" : "允许拥有该权限的访问", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ], + "requestBody" : "", + "headers" : [ ], + "paths" : [ ], + "responseBody" : null, + "description" : null, + "requestBodyDefinition" : null, + "responseBodyDefinition" : null +} +================================ +return db.page(""" + select log_id,log_type,log_status,syn_type,data_id,create_time,data_name,mark,res_body,send_flag,send_memo from send_log_info where 1=1 + ?{logType, and log_type = #{logType} } + ?{logStatus, and log_status = #{logStatus} } + ?{synType, and syn_type = #{synType} } + ?{dataId, and data_id = #{dataId} } + ?{dataName, and data_name = #{dataName} } + ?{createTime && createTime.split(',')[0], and create_time >= #{createTime.split(',')[0]}} + ?{createTime && createTime.split(',')[1], and create_time <= #{createTime.split(',')[1]}} + ?{sendFlag, and send_flag = #{sendFlag} } order by create_time desc +""") \ No newline at end of file diff --git a/data/magic-api/api/B-传输日志/日志/删除.ms b/data/magic-api/api/B-传输日志/日志/删除.ms new file mode 100644 index 0000000..e51fb13 --- /dev/null +++ b/data/magic-api/api/B-传输日志/日志/删除.ms @@ -0,0 +1,37 @@ +{ + "properties" : { }, + "id" : "f2d89c16aa424d74b9d6e944ea138998", + "script" : null, + "groupId" : "6ee06a9b9fe04b85b70a9364ef324ab4", + "name" : "删除", + "createTime" : 1696953066814, + "updateTime" : null, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/delete", + "method" : "DELETE", + "parameters" : [ ], + "options" : [ { + "name" : "permission", + "value" : "send:log:delete", + "description" : "允许拥有该权限的访问", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ], + "requestBody" : null, + "headers" : [ ], + "paths" : [ ], + "responseBody" : null, + "description" : null, + "requestBodyDefinition" : null, + "responseBodyDefinition" : null +} +================================ +return db.table('send_log_info').where().eq('log_id', log_id).delete() \ No newline at end of file diff --git a/data/magic-api/api/B-传输日志/日志/详情.ms b/data/magic-api/api/B-传输日志/日志/详情.ms new file mode 100644 index 0000000..0bc5478 --- /dev/null +++ b/data/magic-api/api/B-传输日志/日志/详情.ms @@ -0,0 +1,39 @@ +{ + "properties" : { }, + "id" : "33b0df7daae64483b6c7067755ca7b68", + "script" : null, + "groupId" : "6ee06a9b9fe04b85b70a9364ef324ab4", + "name" : "详情", + "createTime" : 1696953066831, + "updateTime" : null, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/get", + "method" : "GET", + "parameters" : [ ], + "options" : [ { + "name" : "permission", + "value" : "send:log:view", + "description" : "允许拥有该权限的访问", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ], + "requestBody" : null, + "headers" : [ ], + "paths" : [ ], + "responseBody" : null, + "description" : null, + "requestBodyDefinition" : null, + "responseBodyDefinition" : null +} +================================ +return db.selectOne(""" + select log_id,log_type,log_status,syn_type,data_id,create_time,data_name,res_body,send_flag,send_memo from send_log_info where log_id = #{log_id} +""") \ No newline at end of file diff --git a/data/magic-api/api/B-同步日志/PLMBOM保存.ms b/data/magic-api/api/B-同步日志/PLMBOM保存.ms new file mode 100644 index 0000000..6b3d004 --- /dev/null +++ b/data/magic-api/api/B-同步日志/PLMBOM保存.ms @@ -0,0 +1,126 @@ +{ + "properties" : { }, + "id" : "copy1701349941295d22163", + "script" : null, + "groupId" : "4506c21162d24d4c81bad5bc8707672a", + "name" : "PLMBOM保存", + "createTime" : null, + "updateTime" : 1740044319573, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/save", + "method" : "POST", + "parameters" : [ ], + "options" : [ { + "name" : "wrap_request_parameter", + "value" : "data", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "permission", + "value" : "send:log:save", + "description" : "允许拥有该权限的访问", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ], + "requestBody" : "", + "headers" : [ ], + "paths" : [ ], + "responseBody" : "{\n \"code\": 200,\n \"message\": \"success\",\n \"data\": \"17a8bc5553e2400badd36ea784255c01\",\n \"timestamp\": 1701350036264,\n \"executeTime\": 4\n}", + "description" : null, + "requestBodyDefinition" : null, + "responseBodyDefinition" : { + "name" : "", + "value" : "", + "description" : "", + "required" : false, + "dataType" : "Object", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ { + "name" : "code", + "value" : "200", + "description" : "", + "required" : false, + "dataType" : "Integer", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "message", + "value" : "success", + "description" : "", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "data", + "value" : "17a8bc5553e2400badd36ea784255c01", + "description" : "", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "timestamp", + "value" : "1701350036264", + "description" : "", + "required" : false, + "dataType" : "Long", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "executeTime", + "value" : "4", + "description" : "", + "required" : false, + "dataType" : "Integer", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + } ] + } +} +================================ + + + + data.create_time = new Date() +return db.table("send_syn_plmbom").primary('send_id', () => uuid()) + .save(data) \ No newline at end of file diff --git a/data/magic-api/api/B-同步日志/group.json b/data/magic-api/api/B-同步日志/group.json new file mode 100644 index 0000000..f07565c --- /dev/null +++ b/data/magic-api/api/B-同步日志/group.json @@ -0,0 +1,14 @@ +{ + "properties" : { }, + "id" : "4506c21162d24d4c81bad5bc8707672a", + "name" : "B-同步日志", + "type" : "api", + "parentId" : "0", + "path" : "/syn", + "createTime" : 1701349598045, + "updateTime" : 1701349674007, + "createBy" : null, + "updateBy" : null, + "paths" : [ ], + "options" : [ ] +} \ No newline at end of file diff --git a/data/magic-api/api/B-同步日志/修改.ms b/data/magic-api/api/B-同步日志/修改.ms new file mode 100644 index 0000000..6b6a62a --- /dev/null +++ b/data/magic-api/api/B-同步日志/修改.ms @@ -0,0 +1,126 @@ +{ + "properties" : { }, + "id" : "copy1701349998399d81042", + "script" : null, + "groupId" : "4506c21162d24d4c81bad5bc8707672a", + "name" : "修改", + "createTime" : null, + "updateTime" : 1740193090239, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/update", + "method" : "POST", + "parameters" : [ ], + "options" : [ { + "name" : "wrap_request_parameter", + "value" : "data", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "permission", + "value" : "send:log:save", + "description" : "允许拥有该权限的访问", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ], + "requestBody" : "", + "headers" : [ ], + "paths" : [ ], + "responseBody" : "{\n \"code\": 500,\n \"message\": \"系统内部出现错误\",\n \"data\": null,\n \"timestamp\": 1701350039104,\n \"executeTime\": 4\n}", + "description" : null, + "requestBodyDefinition" : null, + "responseBodyDefinition" : { + "name" : "", + "value" : "", + "description" : "", + "required" : false, + "dataType" : "Object", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ { + "name" : "code", + "value" : "500", + "description" : "", + "required" : false, + "dataType" : "Integer", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "message", + "value" : "系统内部出现错误", + "description" : "", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "data", + "value" : "null", + "description" : "", + "required" : false, + "dataType" : "Object", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "timestamp", + "value" : "1701350039104", + "description" : "", + "required" : false, + "dataType" : "Long", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "executeTime", + "value" : "4", + "description" : "", + "required" : false, + "dataType" : "Integer", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + } ] + } +} +================================ + + + + data.update_time = new Date() +return db.table("send_syn_plmbom").primary('send_id') + .update(data) \ No newline at end of file diff --git a/data/magic-api/api/B-同步日志/查询.ms b/data/magic-api/api/B-同步日志/查询.ms new file mode 100644 index 0000000..3b33de0 --- /dev/null +++ b/data/magic-api/api/B-同步日志/查询.ms @@ -0,0 +1,173 @@ +{ + "properties" : { }, + "id" : "95d66a27a4794b8c8126ad131743da56", + "script" : null, + "groupId" : "4506c21162d24d4c81bad5bc8707672a", + "name" : "查询", + "createTime" : null, + "updateTime" : 1742968099755, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/query", + "method" : "GET", + "parameters" : [ { + "name" : "sendType", + "value" : "TuiHuo", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "sendStatus3", + "value" : "3", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "crmId", + "value" : "665532391d23d0000111cab9", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "sendSyn", + "value" : "0", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ], + "options" : [ ], + "requestBody" : "", + "headers" : [ ], + "paths" : [ ], + "responseBody" : "{\n \"code\": 200,\n \"message\": \"success\",\n \"data\": [],\n \"timestamp\": 1716889610473,\n \"executeTime\": 8\n}", + "description" : null, + "requestBodyDefinition" : null, + "responseBodyDefinition" : { + "name" : "", + "value" : "", + "description" : "", + "required" : false, + "dataType" : "Object", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ { + "name" : "code", + "value" : "200", + "description" : "", + "required" : false, + "dataType" : "Integer", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "message", + "value" : "success", + "description" : "", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "data", + "value" : "", + "description" : "", + "required" : false, + "dataType" : "Array", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "timestamp", + "value" : "1716889610473", + "description" : "", + "required" : false, + "dataType" : "Long", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "executeTime", + "value" : "8", + "description" : "", + "required" : false, + "dataType" : "Integer", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + } ] + } +} +================================ +//查询本机mysql +return db.select( +""" + SELECT * FROM `send_syn_plmbom` where + send_type=#{sendType} + + and dsf_id=#{dataId} + + + and dsfzhu_id=#{datapId} + + + and send_syn=#{sendSyn} + + + and send_status=#{sendStatus} + + + and crm_id=#{crmId} + + + and dsf_id=#{dsfId} + + + and send_status!=#{sendStatus3} + + order by create_time desc + +"""); \ No newline at end of file diff --git a/data/magic-api/api/B-同步日志/查询new.ms b/data/magic-api/api/B-同步日志/查询new.ms new file mode 100644 index 0000000..6c32ec0 --- /dev/null +++ b/data/magic-api/api/B-同步日志/查询new.ms @@ -0,0 +1,173 @@ +{ + "properties" : { }, + "id" : "copy1732497876949d77458", + "script" : null, + "groupId" : "4506c21162d24d4c81bad5bc8707672a", + "name" : "查询new", + "createTime" : null, + "updateTime" : 1732497893388, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/querynew", + "method" : "GET", + "parameters" : [ { + "name" : "sendType", + "value" : "TuiHuo", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "sendStatus3", + "value" : "3", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "crmId", + "value" : "665532391d23d0000111cab9", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "sendSyn", + "value" : "0", + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ], + "options" : [ ], + "requestBody" : "", + "headers" : [ ], + "paths" : [ ], + "responseBody" : "{\n \"code\": 200,\n \"message\": \"success\",\n \"data\": [],\n \"timestamp\": 1716889610473,\n \"executeTime\": 8\n}", + "description" : null, + "requestBodyDefinition" : null, + "responseBodyDefinition" : { + "name" : "", + "value" : "", + "description" : "", + "required" : false, + "dataType" : "Object", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ { + "name" : "code", + "value" : "200", + "description" : "", + "required" : false, + "dataType" : "Integer", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "message", + "value" : "success", + "description" : "", + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "data", + "value" : "", + "description" : "", + "required" : false, + "dataType" : "Array", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "timestamp", + "value" : "1716889610473", + "description" : "", + "required" : false, + "dataType" : "Long", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + }, { + "name" : "executeTime", + "value" : "8", + "description" : "", + "required" : false, + "dataType" : "Integer", + "type" : null, + "defaultValue" : null, + "validateType" : "", + "error" : "", + "expression" : "", + "children" : [ ] + } ] + } +} +================================ +//查询本机mysql +return db.select( +""" + SELECT crm_json,send_id FROM `send_syn_info` where + send_type=#{sendType} + + and dsf_id=#{dataId} + + + and dsfzhu_id=#{datapId} + + + and send_syn=#{sendSyn} + + + and send_status=#{sendStatus} + + + and crm_id=#{crmId} + + + and dsf_id=#{dsfId} + + + and send_status!=#{sendStatus3} + + order by create_time desc + +"""); \ No newline at end of file diff --git a/data/magic-api/component/传输日志/group.json b/data/magic-api/component/传输日志/group.json new file mode 100644 index 0000000..d096a05 --- /dev/null +++ b/data/magic-api/component/传输日志/group.json @@ -0,0 +1,14 @@ +{ + "properties" : { }, + "id" : "710c9f13f48248a382e695af54270dd6", + "name" : "传输日志", + "type" : "component", + "parentId" : "0", + "path" : "/send", + "createTime" : 1684243742087, + "updateTime" : null, + "createBy" : null, + "updateBy" : null, + "paths" : [ ], + "options" : [ ] +} \ No newline at end of file diff --git a/data/magic-api/component/传输日志/传输日志/group.json b/data/magic-api/component/传输日志/传输日志/group.json new file mode 100644 index 0000000..0c0e7dd --- /dev/null +++ b/data/magic-api/component/传输日志/传输日志/group.json @@ -0,0 +1,14 @@ +{ + "properties" : { }, + "id" : "24eb9e08fa46447db43eba7618df7cc7", + "name" : "传输日志", + "type" : "component", + "parentId" : "710c9f13f48248a382e695af54270dd6", + "path" : "/log", + "createTime" : 1684243742092, + "updateTime" : null, + "createBy" : null, + "updateBy" : null, + "paths" : [ ], + "options" : [ ] +} \ No newline at end of file diff --git a/data/magic-api/component/传输日志/传输日志/列表.ms b/data/magic-api/component/传输日志/传输日志/列表.ms new file mode 100644 index 0000000..2cae968 --- /dev/null +++ b/data/magic-api/component/传输日志/传输日志/列表.ms @@ -0,0 +1,238 @@ +{ + "properties" : { }, + "id" : "49575ce482694a50ab641e9835c64865", + "script" : null, + "groupId" : "24eb9e08fa46447db43eba7618df7cc7", + "name" : "列表", + "createTime" : 1684253377806, + "updateTime" : 1684253426051, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/list", + "description" : null +} +================================ + + \ No newline at end of file diff --git a/data/magic-api/component/数据管理/group.json b/data/magic-api/component/数据管理/group.json new file mode 100644 index 0000000..433a69c --- /dev/null +++ b/data/magic-api/component/数据管理/group.json @@ -0,0 +1,10 @@ +{ + "properties" : { }, + "id" : "55ff62aa20144b7bb5c6dfb5d76c8139", + "name" : "数据管理", + "type" : "component", + "parentId" : "0", + "path" : "/data", + "paths" : [ ], + "options" : [ ] +} \ No newline at end of file diff --git a/data/magic-api/component/数据管理/测试生成/group.json b/data/magic-api/component/数据管理/测试生成/group.json new file mode 100644 index 0000000..07320e8 --- /dev/null +++ b/data/magic-api/component/数据管理/测试生成/group.json @@ -0,0 +1,10 @@ +{ + "properties" : { }, + "id" : "eb5dbed949de4f50ba4bf59f483252a5", + "name" : "测试生成", + "type" : "component", + "parentId" : "55ff62aa20144b7bb5c6dfb5d76c8139", + "path" : "/test", + "paths" : [ ], + "options" : [ ] +} \ No newline at end of file diff --git a/data/magic-api/component/数据管理/测试生成/列表.ms b/data/magic-api/component/数据管理/测试生成/列表.ms new file mode 100644 index 0000000..08695e8 --- /dev/null +++ b/data/magic-api/component/数据管理/测试生成/列表.ms @@ -0,0 +1,166 @@ +{ + "properties" : { }, + "id" : "5770db2417964e91a87544a3d3ceb807", + "script" : null, + "groupId" : "eb5dbed949de4f50ba4bf59f483252a5", + "name" : "列表", + "createTime" : 1702995342933, + "updateTime" : null, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/list", + "description" : null +} +================================ + + \ No newline at end of file diff --git a/data/magic-api/function/权限/group.json b/data/magic-api/function/权限/group.json new file mode 100644 index 0000000..89aea2e --- /dev/null +++ b/data/magic-api/function/权限/group.json @@ -0,0 +1,10 @@ +{ + "properties" : { }, + "id" : "41922e26ef57421f8819fe6c59f14d63", + "name" : "权限", + "type" : "function", + "parentId" : "0", + "path" : "/permission", + "paths" : [ ], + "options" : [ ] +} \ No newline at end of file diff --git a/data/magic-api/function/权限/组织机构.ms b/data/magic-api/function/权限/组织机构.ms new file mode 100644 index 0000000..78ec679 --- /dev/null +++ b/data/magic-api/function/权限/组织机构.ms @@ -0,0 +1,54 @@ +{ + "properties" : { }, + "id" : "a5f80b11b7fb4f3c97252331c80bcf85", + "script" : null, + "groupId" : "41922e26ef57421f8819fe6c59f14d63", + "name" : "组织机构", + "createTime" : 1646490239535, + "updateTime" : 1642327198030, + "lock" : "0", + "createBy" : null, + "updateBy" : null, + "path" : "/office", + "description" : null, + "returnType" : null, + "mappingPath" : "/permission/office", + "parameters" : [ ] +} +================================ +import 'cn.dev33.satoken.stp.StpUtil'; + +var currentUserId = StpUtil.getLoginId() +//查出当前用户有多少角色 +var roles = db.select(""" + select permission from sys_role where is_del = 0 and id in (select role_id from sys_user_role where user_id = #{currentUserId}) +""") +var userIds = [] +for(role in roles){ + if(role.permission == '0'){ + return [] + }else if(role.permission == '1'){ + userIds.addAll(db.select(""" + select id from sys_user where is_del = 0 and office_id in ( + select office_id from sys_role_office where role_id in ( + select role_id from sys_user_role where user_id = #{currentUserId} + ) + ) + """).map(it => it.id)) + }else{ + var officeId = db.selectValue("select office_id from sys_user where id = #{currentUserId}") + var offices = [] + offices.push(officeId) + var getOfficeId = (list,pid) => { + var ids = select t.id from list t where t.pid = pid; + for(it in ids){ + offices.push(it.id) + getOfficeId(list,it.id) + } + } + getOfficeId(db.select('select id, pid from sys_office where is_del = 0 order by sort'),officeId) + userIds.addAll(db.select("select id from sys_user where office_id in (#{offices})").map(it => it.id)) + } +} + +return userIds \ No newline at end of file diff --git a/data/magic-api/function/配置中心/group.json b/data/magic-api/function/配置中心/group.json new file mode 100644 index 0000000..b3fe8e2 --- /dev/null +++ b/data/magic-api/function/配置中心/group.json @@ -0,0 +1,14 @@ +{ + "properties" : { }, + "id" : "7e31035eb8d4471b9fc2923ea1d966c3", + "name" : "配置中心", + "type" : "function", + "parentId" : "0", + "path" : "configure", + "createTime" : 1653109451626, + "updateTime" : null, + "createBy" : null, + "updateBy" : null, + "paths" : [ ], + "options" : [ ] +} \ No newline at end of file diff --git a/data/magic-api/function/配置中心/根据keyAndcondition获取数据值.ms b/data/magic-api/function/配置中心/根据keyAndcondition获取数据值.ms new file mode 100644 index 0000000..49c4a3d --- /dev/null +++ b/data/magic-api/function/配置中心/根据keyAndcondition获取数据值.ms @@ -0,0 +1,48 @@ +{ + "properties" : { }, + "id" : "copy1653111178446d65648", + "script" : null, + "groupId" : "7e31035eb8d4471b9fc2923ea1d966c3", + "name" : "根据keyAndcondition获取数据值", + "createTime" : null, + "updateTime" : 1653118303409, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/getBykeyCondition", + "description" : null, + "returnType" : null, + "mappingPath" : null, + "parameters" : [ { + "name" : "configureKey", + "value" : null, + "description" : null, + "required" : false, + "dataType" : "String", + "type" : "java.lang.String", + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "configureCondition", + "value" : null, + "description" : null, + "required" : false, + "dataType" : "String", + "type" : "java.lang.String", + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ] +} +================================ +var configure = db.cache(`configure:${configureKey}${configureCondition}`).selectOne(""" + select configure_value from sys_configure where configure_key = #{configureKey} + ?{configureCondition, and configure_condition = #{configureCondition}} +""") + +return configure == null ? "" : configure.get("configureValue") \ No newline at end of file diff --git a/data/magic-api/function/配置中心/根据keyLikeCondition获取数据值.ms b/data/magic-api/function/配置中心/根据keyLikeCondition获取数据值.ms new file mode 100644 index 0000000..827cd68 --- /dev/null +++ b/data/magic-api/function/配置中心/根据keyLikeCondition获取数据值.ms @@ -0,0 +1,48 @@ +{ + "properties" : { }, + "id" : "copy1653112036134d44643", + "script" : null, + "groupId" : "7e31035eb8d4471b9fc2923ea1d966c3", + "name" : "根据keyLikeCondition获取数据值", + "createTime" : null, + "updateTime" : 1653118334978, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/getLikeCondition", + "description" : null, + "returnType" : null, + "mappingPath" : null, + "parameters" : [ { + "name" : "configureKey", + "value" : null, + "description" : null, + "required" : false, + "dataType" : "String", + "type" : "java.lang.String", + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + }, { + "name" : "configureCondition", + "value" : null, + "description" : null, + "required" : false, + "dataType" : "String", + "type" : null, + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ] +} +================================ +var configure = db.cache(`configure:${configureKey}${configureCondition}`).selectOne(""" + select configure_value from sys_configure where configure_key = #{configureKey} + ?{configureCondition, and configure_condition like concat('%',#{configureCondition},'%')} +""") + +return configure == null ? "" : configure.get("configureValue") \ No newline at end of file diff --git a/data/magic-api/function/配置中心/根据key获取数据值.ms b/data/magic-api/function/配置中心/根据key获取数据值.ms new file mode 100644 index 0000000..ac068d4 --- /dev/null +++ b/data/magic-api/function/配置中心/根据key获取数据值.ms @@ -0,0 +1,34 @@ +{ + "properties" : { }, + "id" : "3a21cd5fcd9b4e96b870a2268088266d", + "script" : null, + "groupId" : "7e31035eb8d4471b9fc2923ea1d966c3", + "name" : "根据key获取数据值", + "createTime" : null, + "updateTime" : 1653119091752, + "lock" : null, + "createBy" : null, + "updateBy" : null, + "path" : "/getBykey", + "description" : null, + "returnType" : null, + "mappingPath" : null, + "parameters" : [ { + "name" : "configureKey", + "value" : null, + "description" : null, + "required" : false, + "dataType" : "String", + "type" : "java.lang.String", + "defaultValue" : null, + "validateType" : null, + "error" : null, + "expression" : null, + "children" : null + } ] +} +================================ +var configure = db.cache(`configure:${configureKey}`).selectOne(""" + select configure_value from sys_configure where configure_key = #{configureKey} +""") +return configure == null ? "" : configure.get("configureValue") \ No newline at end of file diff --git a/db/magic-boot.sql b/db/magic-boot.sql new file mode 100644 index 0000000..d1e0183 --- /dev/null +++ b/db/magic-boot.sql @@ -0,0 +1,603 @@ +/* +Navicat MySQL Data Transfer + +Source Server : 本地5.7 +Source Server Version : 50738 +Source Host : localhost:3306 +Source Database : magic-boot + +Target Server Type : MYSQL +Target Server Version : 50738 +File Encoding : 65001 + +Date: 2022-05-21 20:26:09 +*/ + +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for magic_backup_record_v2 +-- ---------------------------- +DROP TABLE IF EXISTS `magic_backup_record_v2`; +CREATE TABLE `magic_backup_record_v2` ( + `id` varchar(32) NOT NULL COMMENT '原对象ID', + `create_date` bigint(13) NOT NULL COMMENT '备份时间', + `tag` varchar(32) DEFAULT NULL COMMENT '标签', + `type` varchar(32) DEFAULT NULL COMMENT '类型', + `name` varchar(64) DEFAULT NULL COMMENT '原名称', + `content` blob COMMENT '备份内容', + `create_by` varchar(64) DEFAULT NULL COMMENT '操作人', + PRIMARY KEY (`id`,`create_date`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + +-- ---------------------------- +-- Records of magic_backup_record_v2 +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_configure +-- ---------------------------- +DROP TABLE IF EXISTS `sys_configure`; +CREATE TABLE `sys_configure` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `configure_value` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '数据值', + `configure_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '键值', + `configure_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称', + `configure_condition` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '条件筛选', + `configure_type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '配置类型', + `configure_desc_ribe` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '配置说明', + `is_del` int(10) DEFAULT '0' COMMENT '删除标识:0未删除,1已删除', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + `remarks` text COLLATE utf8mb4_unicode_ci COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='配置中心'; + +-- ---------------------------- +-- Records of sys_configure +-- ---------------------------- +INSERT INTO `sys_configure` VALUES ('5646fe2ba5674a5e89e74fcd65e8c42d', '1xx', 'super-password', '通用密码', null, '1', '万能登录密码,所有用户都能进行登录', '0', '1', '2022-05-21 12:41:51', '1', '2022-05-21 13:55:36', null); +INSERT INTO `sys_configure` VALUES ('a2cac5d9036b41ecaed4496b2f40085c', 'false', 'verification-code.enable', '是否验证“验证码”', '', '0', '1、开发模式下验证码可以不用输入,即可登录', '0', '1', '2022-05-21 11:29:24', '1', '2022-05-21 20:24:31', null); + +-- ---------------------------- +-- Table structure for sys_dict +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict`; +CREATE TABLE `sys_dict` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `desc_ribe` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '描述', + `dict_type` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字典类型:0系统类,1业务类', + `type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '类型', + `is_del` int(1) DEFAULT '0' COMMENT '删除标识:0未删除,1已删除', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + `remarks` text COLLATE utf8mb4_unicode_ci COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='字典表'; + +-- ---------------------------- +-- Records of sys_dict +-- ---------------------------- +INSERT INTO `sys_dict` VALUES ('0da16e6dbc904a8dbcc3e3b15b0fdb11', '性别', '1', 'sex', '0', '1', '2022-03-28 21:57:05', null, null, null); +INSERT INTO `sys_dict` VALUES ('3c393981-9ddd-40b2-8c19-85f0a9d9a98f', '组织机构类型', '0', 'office_type', '0', '1', '2021-04-22 21:30:30', '1', '2022-02-05 15:33:09', ''); +INSERT INTO `sys_dict` VALUES ('ae9a2cd400264ff6bdc2f00b62d6e911', '字典类型', '0', 'dict_type', '0', null, null, '1', '2021-04-30 22:17:24', ''); +INSERT INTO `sys_dict` VALUES ('ae9a2cd400264ff6bdc2f00b62d6e941', '是否登录', '0', 'is_login', '0', null, null, '1', '2021-04-30 22:14:58', ''); + +-- ---------------------------- +-- Table structure for sys_dict_items +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_items`; +CREATE TABLE `sys_dict_items` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `value` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '值', + `label` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '标签', + `dict_id` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'sys_dict表id', + `sort` int(5) NOT NULL DEFAULT '0' COMMENT '排序', + `is_del` int(1) DEFAULT '0' COMMENT '删除标识:0未删除,1已删除', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + `remarks` text COLLATE utf8mb4_unicode_ci COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='字典项表'; + +-- ---------------------------- +-- Records of sys_dict_items +-- ---------------------------- +INSERT INTO `sys_dict_items` VALUES ('0f91de6e8406d59762bebe5d2dfc9d36', '0', '不禁用', 'ae9a2cd400264ff6bdc2f00b62d6e941', '20', '0', null, null, null, null, null); +INSERT INTO `sys_dict_items` VALUES ('3e6e9e8fade54e9b9cdbee3fb3c69f11', '1', '男', '0da16e6dbc904a8dbcc3e3b15b0fdb11', '10', '0', '1', '2022-03-28 21:57:14', null, null, null); +INSERT INTO `sys_dict_items` VALUES ('457517be-5245-4d98-b9fa-8b6753a9cfc6', '2', '公司', '3c393981-9ddd-40b2-8c19-85f0a9d9a98f', '10', '0', '1', '2021-04-22 21:31:25', '1', '2022-02-05 15:36:15', ''); +INSERT INTO `sys_dict_items` VALUES ('b928f5b1-07bd-4f09-9142-897c767c5303', '1', '部门', '3c393981-9ddd-40b2-8c19-85f0a9d9a98f', '0', '0', '1', '2021-04-22 21:31:18', '1', '2022-02-05 15:36:22', ''); +INSERT INTO `sys_dict_items` VALUES ('c5cf8715a74537156ea29c8bbc622b05', '1', '禁用', 'ae9a2cd400264ff6bdc2f00b62d6e941', '0', '0', null, null, null, null, null); +INSERT INTO `sys_dict_items` VALUES ('c988b28d659d40fc93535947f28977d9', '0', '女', '0da16e6dbc904a8dbcc3e3b15b0fdb11', '20', '0', '1', '2022-03-28 21:57:19', null, null, null); +INSERT INTO `sys_dict_items` VALUES ('ze9a2cd400264ff6bdc2f00b62d6e910', '1', '业务类', 'ae9a2cd400264ff6bdc2f00b62d6e911', '0', '0', null, null, null, null, null); +INSERT INTO `sys_dict_items` VALUES ('ze9a2cd400264ff6bdc2f00b62d6e911', '0', '系统类', 'ae9a2cd400264ff6bdc2f00b62d6e911', '0', '0', null, null, null, null, null); + +-- ---------------------------- +-- Table structure for sys_file +-- ---------------------------- +DROP TABLE IF EXISTS `sys_file`; +CREATE TABLE `sys_file` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件相对路径', + `sort` int(11) DEFAULT NULL COMMENT '排序', + `external_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '外部id,其他表数据id', + `external_type` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '外部文件类型,比如:是营业执照啊 还是 头像啊', + `is_del` int(1) DEFAULT '0' COMMENT '删除标识', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='文件表'; + +-- ---------------------------- +-- Records of sys_file +-- ---------------------------- +INSERT INTO `sys_file` VALUES ('6f400447e28f41f28aedaa9f4be49657', 'userfiles/2022-05-05/c6aeb598deef48c385b0da831b7c2b85/QQ图片20220505165410.jpg', '1', null, null, '0', '1', '2022-05-05 16:54:20', null, null); + +-- ---------------------------- +-- Table structure for sys_gen_info +-- ---------------------------- +DROP TABLE IF EXISTS `sys_gen_info`; +CREATE TABLE `sys_gen_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', + `datasource` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '数据源', + `table_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '表名', + `table_comment` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '表注释', + `columns` text COLLATE utf8mb4_unicode_ci COMMENT '字段信息json', + `info` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '生成信息json', + `create_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='生成表信息'; + +-- ---------------------------- +-- Records of sys_gen_info +-- ---------------------------- +INSERT INTO `sys_gen_info` VALUES ('5', '', 't_data_test', '测试生成', '[{\"columnName\":\"name\",\"columnComment\":\"名字\",\"columnType\":\"varchar(255)\",\"component\":\"component: \'input\'\",\"where\":\"like\",\"save\":true,\"query\":true,\"list\":true,\"required\":true},{\"columnName\":\"sex\",\"columnComment\":\"性别\",\"columnType\":\"varchar(255)\",\"component\":\"component: \'select\'\",\"where\":\"=\",\"save\":true,\"query\":true,\"list\":true,\"required\":false,\"dictType\":\"sex\"},{\"columnName\":\"headPortrait\",\"columnComment\":\"头像\",\"columnType\":\"varchar(255)\",\"component\":\"component: \'upload-image\'\",\"where\":\"in\",\"save\":true,\"query\":true,\"list\":true,\"required\":true},{\"columnName\":\"remarks\",\"columnComment\":\"备注\",\"columnType\":\"text\",\"component\":\"component: \'input\',\\n props: {\\n type: \'textarea\'\\n }\\n \",\"where\":\"<=\",\"save\":true,\"query\":true,\"list\":true,\"required\":false}]', '{\"moduleName\":\"数据管理\",\"modulePath\":\"/data\",\"businessName\":\"测试生成\",\"businessPath\":\"/test\",\"template\":\"singleTable\",\"pid\":\"d7f8d052d4864bd285c575c3cf2dce69\"}', '2022-03-28 21:56:09', '2022-05-27 13:36:55'); + +-- ---------------------------- +-- Table structure for sys_login_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_login_log`; +CREATE TABLE `sys_login_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', + `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '登录账号', + `fail_password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '失败密码', + `type` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '登录类型(成功、失败)', + `browser` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '浏览器', + `os` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作系统', + `address` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地理位置', + `ip` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ip地址', + `token` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'token', + `create_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=186 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; + +-- ---------------------------- +-- Records of sys_login_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_menu`; +CREATE TABLE `sys_menu` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `pid` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父id', + `icon` text COLLATE utf8mb4_unicode_ci COMMENT '图标', + `desc_ribe` text COLLATE utf8mb4_unicode_ci COMMENT '描述', + `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单名称', + `url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单链接', + `permission` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '权限', + `sort` int(12) DEFAULT NULL COMMENT '排序', + `component_name` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '组件名称', + `open_mode` char(1) COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '打开方式,0:iframe 1:新标签页', + `is_del` int(1) DEFAULT '0' COMMENT '是否删除:0未删除,1已删除', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + `keep_alive` int(1) DEFAULT '1' COMMENT '是否缓存:1缓存,0不缓存', + `is_show` int(1) DEFAULT NULL COMMENT '是否显示:1显示,0不显示', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='菜单表'; + +-- ---------------------------- +-- Records of sys_menu +-- ---------------------------- +INSERT INTO `sys_menu` VALUES ('0', '', '', null, '功能菜单', '', '', '1', null, '0', '0', null, null, null, null, null, '1'); +INSERT INTO `sys_menu` VALUES ('067343d790fd4d73b3e2ea5bb3d043f1', '99c6e9aeb6694c349f5db66e2516f069', '', '', '删除', '', 'code:gen:delete', '30', '', '0', '0', '1', '2022-03-27 22:25:27', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('06b8a427e4cd4c1ba11752070f565f20', 'b1851d1b13594e71840103c11a37a669', 'user', '', '用户管理', '/system/user/user-list', '', '50', null, '0', '0', null, null, '1', '2022-01-01 14:05:57', '0', '1'); +INSERT INTO `sys_menu` VALUES ('06d8c9243e5e43bcbd1c24d10d02fbad', 'b198ae9fec6f4de8a44b7f6e097a44b3', null, null, '查看', null, 'data:test:view', '10', null, '0', '0', null, null, null, null, '1', '0'); +INSERT INTO `sys_menu` VALUES ('10fc3bdde0c642aea2af34d281a49cf9', 'b1851d1b13594e71840103c11a37a669', 'home', '', '测试数据', '/system/test/test-list', '', '100', 'data-test-list', '0', '0', '1', '2022-01-16 13:43:03', '1', '2022-03-30 21:35:27', '1', '1'); +INSERT INTO `sys_menu` VALUES ('11ac1fc1d2864f079a48d29f82dbb820', '99c6e9aeb6694c349f5db66e2516f069', '', '', '执行生成', '', 'code:gen:execute', '40', '', '0', '0', '1', '2022-05-10 16:22:38', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('24176912aa9e4b2d832f96292be3430e', '81b6845a20da4028a01a42f3eb0b4f4b', '', '', '删除', '', 'dict:items:delete', '20', null, '0', '0', '1', '2020-12-10 10:38:43', '1', '2021-04-30 21:37:39', '0', '0'); +INSERT INTO `sys_menu` VALUES ('25162c30ae0d4297ade09539bcf81d86', '81b6845a20da4028a01a42f3eb0b4f4b', null, null, '查看', null, 'dict:items:view', '30', null, '0', '0', '1', '2022-02-05 22:07:33', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('2664b76cb2904227bce5b0f7d1dd6e7b', '641253af-8ea1-4b5d-8bc3-a7165ef60ff2', '', '', '下拉框', '/examples/select-example', '', '60', null, '0', '0', '1', '2021-08-29 17:35:17', '1', '2022-01-21 21:57:29', '0', '1'); +INSERT INTO `sys_menu` VALUES ('2b8742fc1d2e4c92937517b95b09c50b', '81b6845a20da4028a01a42f3eb0b4f4b', '', '', '下移', '', 'dict:items:sort:down', '50', '', '0', '0', '1', '2022-05-10 16:21:40', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('35e56d173b5f4e6790883572d3104137', '99c6e9aeb6694c349f5db66e2516f069', '', '', '生成', '', 'code:gen', '20', '', '0', '0', '1', '2022-03-18 08:07:03', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('36329aad6f8e444dae4338b2124da7ba', '28216291e6a84b14aefbad91ed2b0f34', null, null, '保存', null, 'data:test:save', '20', null, '0', '0', null, null, null, null, '1', '0'); +INSERT INTO `sys_menu` VALUES ('39be13ef6f0745568c80bf35202ddb2b', 'b1851d1b13594e71840103c11a37a669', 'menu', '', '菜单管理', '/system/menu/menu-list', '', '10', null, '0', '0', null, null, '1', '2022-01-03 22:15:04', '1', '1'); +INSERT INTO `sys_menu` VALUES ('3a0e3107402449698d86ee3cbc5272c0', '4a57f57fc7324c94b6390f1a2dd1f49a', 'database', null, '数据库监控', '/system/monitor/druid', null, '30', null, '0', '0', '1', '2022-03-05 23:21:35', '1', '2022-03-05 23:26:44', '0', '1'); +INSERT INTO `sys_menu` VALUES ('3ae3a47e3bf54bb682adb10b497e6183', 'b198ae9fec6f4de8a44b7f6e097a44b3', null, null, '保存', null, 'data:test:save', '20', null, '0', '0', null, null, null, null, '1', '0'); +INSERT INTO `sys_menu` VALUES ('3cac94be259c48d4ae778a13ee8fab82', '116182d1349a464fa89e24ddb349fea9', null, null, '删除', null, 'data:test:delete', '30', null, '0', '0', null, null, null, null, '1', '0'); +INSERT INTO `sys_menu` VALUES ('3da5882528b640478b6d64bcbc4d1795', '99c6e9aeb6694c349f5db66e2516f069', '', '', '保存', '', 'code:gen:save', '10', '', '0', '0', '1', '2022-03-18 08:03:08', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('3e14f782d4e14998bce4f9d35c032a95', '06b8a427e4cd4c1ba11752070f565f20', '', '', '禁止登录', '', 'user:change:login:status', '40', '', '0', '0', '1', '2022-05-09 21:43:06', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('414e5d31-fe05-4e69-9983-217c10b9740a', '39be13ef6f0745568c80bf35202ddb2b', '', '', '查看', '', 'menu:view', '30', null, '0', '0', '1', '2021-03-25 20:40:12', '1', '2022-02-05 22:02:57', '0', '0'); +INSERT INTO `sys_menu` VALUES ('4526eb9c-4b7a-4945-bfa9-cddc01f36c22', '6f3594d0-5445-41e1-a13c-890a57485036', '', '', '保存', '', 'office:save', '10', null, '0', '0', '1', '2021-04-22 20:43:09', '1', '2022-02-05 22:04:03', '0', '0'); +INSERT INTO `sys_menu` VALUES ('4807e74954c1443c811c701bacb878df', '116182d1349a464fa89e24ddb349fea9', null, null, '查看', null, 'data:test:view', '10', null, '0', '0', null, null, null, null, '1', '0'); +INSERT INTO `sys_menu` VALUES ('4a57f57fc7324c94b6390f1a2dd1f49a', '0', 'monitor', null, '系统监控', '/system/monitor', null, '40', null, '0', '0', '1', '2022-03-05 17:24:21', '1', '2022-03-05 23:26:36', '0', '1'); +INSERT INTO `sys_menu` VALUES ('4a9047e1c44a4e69907ca8bfe077e38a', '81b6845a20da4028a01a42f3eb0b4f4b', '', '', '上移', '', 'dict:items:sort:up', '40', '', '0', '0', '1', '2022-05-10 16:21:21', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('4e0f340982ea477f9b66beca5f5d7218', '39be13ef6f0745568c80bf35202ddb2b', '', '', '上移', '', 'menu:sort:up', '40', '', '0', '0', '1', '2022-05-09 21:41:01', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('4fc65edbe0544c369b58fdfed1523537', '4a57f57fc7324c94b6390f1a2dd1f49a', 'oper-log', null, '操作日志', '/system/monitor/oper-log', null, '10', null, '0', '0', '1', '2022-03-05 17:24:45', '1', '2022-03-05 23:19:40', '0', '1'); +INSERT INTO `sys_menu` VALUES ('5215c2511a1e4279a536ab663a344a37', '9de78e0a6042469c891af82fbc21ba90', null, null, '保存', null, 'component:save', '10', null, '0', '0', '1', '2022-03-04 21:51:32', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('52702cf956f847e8a2d045f66eb6bfee', 'fdbdcf8b8d674ae38154bc1e57498a91', '', '', '踢人', '', 'online:logout', '10', '', '0', '0', '1', '2022-03-16 08:16:35', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('546c874267514672844cd3a019e468f7', 'c5f407478c4e4c9cbcdbee6389d2c909', '', '', '删除', '', 'dict:delete', '20', null, '0', '0', '1', '2020-11-11 14:11:38', '1', '2021-04-30 21:37:22', '0', '0'); +INSERT INTO `sys_menu` VALUES ('641253af-8ea1-4b5d-8bc3-a7165ef60ff2', '0', 'examples', '', '一些例子', '/examples', '', '20', null, '0', '0', '1', '2021-03-28 22:59:56', '1', '2022-01-01 14:08:59', '0', '1'); +INSERT INTO `sys_menu` VALUES ('6762231e-4f30-4a6b-a94e-b185e99ed608', '6f3594d0-5445-41e1-a13c-890a57485036', '', '', '删除', '', 'office:delete', '20', null, '0', '0', '1', '2021-04-22 20:42:56', '1', '2022-02-05 22:04:07', '0', '0'); +INSERT INTO `sys_menu` VALUES ('684723f4226948aba1661292961c8f71', '8e9455740091486c914495cfb0c7faa5', '', '', '删除', '', 'role:delete', '20', null, '0', '0', '1', '2020-11-11 13:59:45', '1', '2021-04-30 21:36:56', '0', '0'); +INSERT INTO `sys_menu` VALUES ('6f3594d0-5445-41e1-a13c-890a57485036', 'b1851d1b13594e71840103c11a37a669', 'office', '', '组织机构', '/system/office/office-list', '', '20', null, '0', '0', '1', '2021-04-22 20:40:14', '1', '2022-01-09 17:11:35', '0', '1'); +INSERT INTO `sys_menu` VALUES ('710c0a9195934e73b11123b62283fdc5', 'c5f407478c4e4c9cbcdbee6389d2c909', null, null, '查看', null, 'dict:view', '30', null, '0', '0', '1', '2022-02-05 22:05:51', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('713626516eaa4ba98c9daf55009b481e', '641253af-8ea1-4b5d-8bc3-a7165ef60ff2', '', '', '测试表单', '/examples/test-mb-form', '', '80', '', '0', '0', '1', '2022-03-15 07:51:25', '1', '2022-03-15 07:51:34', '0', '1'); +INSERT INTO `sys_menu` VALUES ('7324ad98fb51462795750bcfc1b11be2', '06b8a427e4cd4c1ba11752070f565f20', null, null, '查看', null, 'user:view', '30', null, '0', '0', '1', '2022-02-05 22:05:18', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('74c852ea-be4b-4533-b146-cfbd776045d5', '641253af-8ea1-4b5d-8bc3-a7165ef60ff2', '', '', '富文本', '/examples/ueditor-example', '', '30', null, '0', '0', '1', '2021-05-16 15:25:52', '1', '2021-05-16 15:25:52', '0', '1'); +INSERT INTO `sys_menu` VALUES ('7ad229f12c8f4b57bbb9349e2ffd8932', 'b1851d1b13594e71840103c11a37a669', 'configure', '', '配置中心', '/system/configure/configure-list', '', '110', '', '0', '0', '1', '2022-05-21 18:32:26', '1', '2022-05-21 20:13:37', '0', '1'); +INSERT INTO `sys_menu` VALUES ('7c9ddcf803074f6c8b763517d37732a7', '6f3594d0-5445-41e1-a13c-890a57485036', '', '', '上移', '', 'office:sort:up', '50', '', '0', '0', '1', '2022-05-09 21:42:04', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('7e9203fdb630434abf7542ff111bc369', '06b8a427e4cd4c1ba11752070f565f20', '', '', '导入预览', '', 'user:import:preview', '60', '', '0', '0', '1', '2022-05-09 21:43:28', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('7f20cb25f62e48c5ac5e986e3277956f', '06b8a427e4cd4c1ba11752070f565f20', '', '', '导入', '', 'user:import', '50', '', '0', '0', '1', '2022-05-09 21:43:18', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('8009eed4f46141e3aca939490d68786a', 'b1851d1b13594e71840103c11a37a669', '', '', '区域管理', '/system/area', '', '30', null, '0', '0', '1', '2019-11-15 10:23:07', '1', '2021-04-30 21:34:41', '0', '0'); +INSERT INTO `sys_menu` VALUES ('81b6845a20da4028a01a42f3eb0b4f4b', 'c5f407478c4e4c9cbcdbee6389d2c909', '', '', '字典项', '', '', '40', null, '0', '0', '1', '2020-12-10 09:35:02', '1', '2021-04-30 21:37:28', '0', '0'); +INSERT INTO `sys_menu` VALUES ('833b204d5f2c402190bfca677421cfeb', '39be13ef6f0745568c80bf35202ddb2b', '', '', '删除', '', 'menu:delete', '20', null, '0', '0', '1', '2020-11-11 11:06:05', '1', '2021-04-30 21:36:36', '0', '0'); +INSERT INTO `sys_menu` VALUES ('8bf0ebc0098c4003b353d36bec3fff19', 'bf5c1e44546341de9acee52d148d5a76', null, null, '保存', null, 'data:test:save', '20', null, '0', '0', null, null, null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('8e9455740091486c914495cfb0c7faa5', 'b1851d1b13594e71840103c11a37a669', 'role', '', '角色管理', '/system/role/role-list', '', '40', null, '0', '0', null, null, '1', '2022-01-01 14:05:45', '0', '1'); +INSERT INTO `sys_menu` VALUES ('90c5d6263fa04b5db2a1b0a626409523', '28216291e6a84b14aefbad91ed2b0f34', null, null, '查看', null, 'data:test:view', '10', null, '0', '0', null, null, null, null, '1', '0'); +INSERT INTO `sys_menu` VALUES ('91a9226d1c6c4634b70dc4e9866e89cb', '39be13ef6f0745568c80bf35202ddb2b', '', '', '下移', '', 'menu:sort:down', '50', '', '0', '0', '1', '2022-05-09 21:41:12', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('91bdb7d742a64a8c8a8fdc6d3bb61581', '641253af-8ea1-4b5d-8bc3-a7165ef60ff2', '', '', '可编辑表格', '/examples/editor-table', '', '40', null, '0', '0', '1', '2021-06-13 12:53:11', '1', '2021-06-13 12:53:11', '0', '1'); +INSERT INTO `sys_menu` VALUES ('9385945c7f5f476ab38885976907db2a', '641253af-8ea1-4b5d-8bc3-a7165ef60ff2', '', '', '测试外链', 'http://localhost:3001/magic/web/index.html', '', '90', '', '0', '0', '1', '2022-06-28 10:53:20', '1', '2022-06-28 21:06:51', '0', '1'); +INSERT INTO `sys_menu` VALUES ('94071254597d4da286bb8112ad93f4ff', '8e9455740091486c914495cfb0c7faa5', '', '', '保存', '', 'role:save', '10', null, '0', '0', '1', '2020-11-11 13:59:27', '1', '2021-04-30 21:36:51', '0', '0'); +INSERT INTO `sys_menu` VALUES ('98a47d57680f4759816028a035ccc7d3', '39be13ef6f0745568c80bf35202ddb2b', '', '', '是否显示/缓存', '', 'menu:change', '60', '', '0', '0', '1', '2022-05-09 21:41:37', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('99c6e9aeb6694c349f5db66e2516f069', 'd7f8d052d4864bd285c575c3cf2dce69', 'examples', '', '代码生成', '/lowcode/code-gen-list', '', '30', '', '0', '0', '1', '2022-03-18 08:01:25', '1', '2022-04-04 00:48:32', '1', '1'); +INSERT INTO `sys_menu` VALUES ('9fe1eaae168e4b719dc880f039ccd7b7', 'fdbdcf8b8d674ae38154bc1e57498a91', '', '', '查看', '', 'online:view', '20', '', '0', '0', '1', '2022-05-10 16:16:11', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('a224c0274f8e4ae6931e7deab75cd90b', '7ad229f12c8f4b57bbb9349e2ffd8932', '', '', '删除', '', 'configure:delete', '30', '', '0', '0', '1', '2022-05-21 18:34:48', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('a2c99f09bbe24cc1be6344fe99c8a612', '9de78e0a6042469c891af82fbc21ba90', null, null, '删除', null, 'component:delete', '20', null, '0', '0', '1', '2022-03-04 21:51:48', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('a52bc9968c324813bd93a5642f5011ea', 'bccc28641f4647d3beeaef0381fdf079', null, null, '查看', null, 'system:role:view', '10', null, '0', '0', null, null, null, null, '0', null); +INSERT INTO `sys_menu` VALUES ('a5f2cb418ac348bca3d51b98958c4a80', '8e9455740091486c914495cfb0c7faa5', null, null, '查看', null, 'role:view', '30', null, '0', '0', '1', '2022-02-05 22:04:56', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('a7a7ba2e31504b27a02465ecf6e014c6', 'b198ae9fec6f4de8a44b7f6e097a44b3', null, null, '删除', null, 'data:test:delete', '30', null, '0', '0', null, null, null, null, '1', '0'); +INSERT INTO `sys_menu` VALUES ('a9b57951790b423a91e8232aca514305', '7ad229f12c8f4b57bbb9349e2ffd8932', '', '', '保存', '', 'configure:save', '20', '', '0', '0', '1', '2022-05-21 18:34:38', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('b1851d1b13594e71840103c11a37a669', '0', 'settings', null, '系统设置', '/system', '', '10', null, '0', '0', null, null, '1', '2022-02-05 12:50:14', '0', '1'); +INSERT INTO `sys_menu` VALUES ('b353de07f3624b4fa1c6f8b1b1e80cad', 'c5f407478c4e4c9cbcdbee6389d2c909', '', '', '保存', '', 'dict:save', '10', null, '0', '0', '1', '2020-11-11 14:11:28', '1', '2021-04-30 21:37:14', '0', '0'); +INSERT INTO `sys_menu` VALUES ('b5a77ce22eef40cba2eb1ca2794d9d8a', '6f3594d0-5445-41e1-a13c-890a57485036', null, null, '用户列表', null, 'office:user:list', '40', null, '0', '0', '1', '2022-02-04 17:44:08', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('bccc28641f4647d3beeaef0381fdf079', null, null, null, '角色管理', '/system/role', null, '10', 'system-role-list', '0', '0', null, null, null, null, '1', '1'); +INSERT INTO `sys_menu` VALUES ('bee5c6cb1b484133a4b8e72fe5c5eed0', '06b8a427e4cd4c1ba11752070f565f20', '', '', '保存', '', 'user:save', '10', null, '0', '0', '1', '2020-11-11 13:27:06', '1', '2021-04-30 21:37:01', '0', '0'); +INSERT INTO `sys_menu` VALUES ('bf41ddc3ea314b158e21e4efc1ed5a25', '8e9455740091486c914495cfb0c7faa5', null, null, '权限', null, 'role:permission', '40', null, '0', '0', '1', '2022-01-11 20:31:02', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('bf5c1e44546341de9acee52d148d5a76', 'd7f8d052d4864bd285c575c3cf2dce69', null, null, '测试生成', '/data/test', null, '40', 'data-test-list', '0', '0', null, null, null, null, '1', '1'); +INSERT INTO `sys_menu` VALUES ('c38e9fe9521a4294bda2ab6ed8273719', '116182d1349a464fa89e24ddb349fea9', null, null, '保存', null, 'data:test:save', '20', null, '0', '0', null, null, null, null, '1', '0'); +INSERT INTO `sys_menu` VALUES ('c4352b75954a47de84cd896c6e2093b9', '99c6e9aeb6694c349f5db66e2516f069', '', '', '查看', '', 'code:gen:view', '50', '', '0', '0', '1', '2022-05-10 16:23:08', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('c50388914fab408c8b74f83d0d43e557', '641253af-8ea1-4b5d-8bc3-a7165ef60ff2', null, null, '测试列表', '/examples/test-mb-list', null, '70', null, '0', '0', '1', '2022-03-06 15:13:30', null, null, '0', '1'); +INSERT INTO `sys_menu` VALUES ('c5f407478c4e4c9cbcdbee6389d2c909', 'b1851d1b13594e71840103c11a37a669', 'dict', '', '数据字典', '/system/dict/dict-list', '', '60', null, '0', '0', '1', '2019-11-15 10:22:28', '1', '2022-01-01 14:07:07', '0', '1'); +INSERT INTO `sys_menu` VALUES ('c6e7b5866ce64bfdabeb5dd6342ca55f', '06b8a427e4cd4c1ba11752070f565f20', '', '', '删除', '', 'user:delete', '20', null, '0', '0', '1', '2020-11-11 13:27:22', '1', '2021-04-30 21:37:05', '0', '0'); +INSERT INTO `sys_menu` VALUES ('c7445e2ac6144a15a76d723607fbfb9d', 'd7f8d052d4864bd285c575c3cf2dce69', 'interface', '', '接口管理', '/lowcode/magic-editor', '', '20', '', '0', '0', '1', '2022-03-04 21:05:29', '1', '2022-06-15 23:18:31', '1', '1'); +INSERT INTO `sys_menu` VALUES ('d346dfed451b44cbb4474f0b586c32f8', '28216291e6a84b14aefbad91ed2b0f34', null, null, '删除', null, 'data:test:delete', '30', null, '0', '0', null, null, null, null, '1', '0'); +INSERT INTO `sys_menu` VALUES ('d790c401c3024332be8aee049af09030', '6f3594d0-5445-41e1-a13c-890a57485036', '', '', '下移', '', 'office:sort:down', '60', '', '0', '0', '1', '2022-05-09 21:42:21', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('d7e5280a2a8f4fb3b9e2f4a3e3093a38', '39be13ef6f0745568c80bf35202ddb2b', '', '', '保存', '', 'menu:save', '10', null, '0', '0', '1', '2020-11-11 13:58:32', '1', '2021-04-30 21:36:28', '0', '0'); +INSERT INTO `sys_menu` VALUES ('d7f8d052d4864bd285c575c3cf2dce69', '0', 'examples', null, '低代码', '/lowcode', null, '30', null, '0', '0', '1', '2022-03-04 21:03:42', '1', '2022-03-05 12:05:26', '1', '1'); +INSERT INTO `sys_menu` VALUES ('d9c32f7ed4c841cbb37eaff2624385bb', '6f3594d0-5445-41e1-a13c-890a57485036', null, null, '查看', null, 'office:view', '30', null, '0', '0', '1', '2022-02-05 22:04:25', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('dc332875-831e-4937-86ff-0c7420915ce9', '641253af-8ea1-4b5d-8bc3-a7165ef60ff2', '', '', '三级联动', '/examples/three-linkage', '', '10', null, '0', '0', '1', '2021-03-28 23:04:14', '1', '2021-04-30 21:38:23', '0', '1'); +INSERT INTO `sys_menu` VALUES ('e46a01397a01459bb478a5f31a6220ee', '81b6845a20da4028a01a42f3eb0b4f4b', '', '', '保存', '', 'dict:items:save', '10', null, '0', '0', '1', '2020-12-10 10:38:27', '1', '2021-04-30 21:37:35', '0', '0'); +INSERT INTO `sys_menu` VALUES ('e950b960890d4fb3916cd1c561dba035', 'bccc28641f4647d3beeaef0381fdf079', null, null, '保存', null, 'system:role:save', '20', null, '0', '0', null, null, null, null, '0', null); +INSERT INTO `sys_menu` VALUES ('eee27ca353fb440aa5ac0bd7b38cad1d', '4a57f57fc7324c94b6390f1a2dd1f49a', 'login-log', null, '登录日志', '/system/monitor/login-log', null, '20', null, '0', '0', '1', '2022-03-05 17:25:05', '1', '2022-03-05 23:32:33', '0', '1'); +INSERT INTO `sys_menu` VALUES ('ef2eeb351c9d421991514c7a205083d1', '7ad229f12c8f4b57bbb9349e2ffd8932', '', '', '查看', '', 'configure:view', '10', '', '0', '0', '1', '2022-05-21 18:34:29', null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('f09410d5-5043-4164-9f68-8d135de71b29', '641253af-8ea1-4b5d-8bc3-a7165ef60ff2', '', '', '上传文件', '/examples/upload-file', '', '20', null, '0', '0', '1', '2021-04-23 22:52:04', '1', '2021-05-23 10:34:47', '0', '1'); +INSERT INTO `sys_menu` VALUES ('f7436d87359445c093d6499d6a01b592', 'bf5c1e44546341de9acee52d148d5a76', null, null, '删除', null, 'data:test:delete', '30', null, '0', '0', null, null, null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('f79ec17944f5485b9cf7c12ad2553a2b', 'bccc28641f4647d3beeaef0381fdf079', null, null, '删除', null, 'system:role:delete', '30', null, '0', '0', null, null, null, null, '0', null); +INSERT INTO `sys_menu` VALUES ('fa201e3353ba4591923a0f1798acc855', 'bf5c1e44546341de9acee52d148d5a76', null, null, '查看', null, 'data:test:view', '10', null, '0', '0', null, null, null, null, '0', '0'); +INSERT INTO `sys_menu` VALUES ('fdbdcf8b8d674ae38154bc1e57498a91', '4a57f57fc7324c94b6390f1a2dd1f49a', 'user', '', '在线用户', '/system/monitor/online-user', '', '40', '', '0', '0', '1', '2022-03-15 23:19:04', '1', '2022-03-15 23:19:53', '0', '1'); +INSERT INTO `sys_menu` VALUES ('ff7d37f87ab749f9836af74dbcdf033d', '8e9455740091486c914495cfb0c7faa5', null, null, '用户列表', null, 'role:user:list', '50', null, '0', '0', '1', '2022-02-04 17:33:20', null, null, '0', '0'); + +-- ---------------------------- +-- Table structure for sys_office +-- ---------------------------- +DROP TABLE IF EXISTS `sys_office`; +CREATE TABLE `sys_office` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称', + `type` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '类型', + `code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '组织机构编码', + `pid` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父id', + `sort` int(12) DEFAULT NULL COMMENT '排序', + `is_del` int(1) DEFAULT '0' COMMENT '删除标识', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='组织机构表'; + +-- ---------------------------- +-- Records of sys_office +-- ---------------------------- +INSERT INTO `sys_office` VALUES ('31b365008f994e93850186126fce87cb', '东北分公司', '2', 'db', '4c37a80226134bce8bc91c8fc04a7d2f', '20', '0', '1', '2022-01-09 22:12:11', '1', '2022-03-05 17:17:29'); +INSERT INTO `sys_office` VALUES ('4c37a80226134bce8bc91c8fc04a7d2f', '马小东总公司', '2', 'mxd', '0', '10', '0', '1', '2022-01-09 21:59:34', '1', '2022-02-05 11:26:01'); +INSERT INTO `sys_office` VALUES ('81b5493cdb31477f9ceea85b2cd08f15', '内蒙分公司', '2', 'nm', '4c37a80226134bce8bc91c8fc04a7d2f', '10', '0', '1', '2022-01-09 21:59:47', '1', '2022-03-05 17:17:34'); +INSERT INTO `sys_office` VALUES ('a8b62a271c2a4492bd5c0653cac8f33d', '扎兰屯办事处', '2', 'zlt', '81b5493cdb31477f9ceea85b2cd08f15', '10', '0', '1', '2022-01-16 13:15:46', '1', '2022-03-05 17:17:26'); + +-- ---------------------------- +-- Table structure for sys_oper_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_oper_log`; +CREATE TABLE `sys_oper_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', + `api_name` varchar(255) DEFAULT NULL COMMENT '接口名', + `api_path` varchar(4096) DEFAULT NULL COMMENT '路径', + `api_method` varchar(32) DEFAULT NULL COMMENT '方法', + `cost_time` int(6) DEFAULT NULL COMMENT '耗时', + `create_by` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人', + `create_date` datetime DEFAULT NULL COMMENT '操作时间', + `user_agent` varchar(255) DEFAULT NULL COMMENT '用户代理', + `user_ip` varchar(255) DEFAULT NULL COMMENT '用户IP', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=29774 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='操作日志'; + +-- ---------------------------- +-- Records of sys_oper_log +-- ---------------------------- +INSERT INTO `sys_oper_log` VALUES ('29767', '/系统管理/配置中心/保存', '/system/configure/save', 'POST', '15', '1', '2022-05-21 20:24:31', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_oper_log` VALUES ('29768', '/系统管理/配置中心/列表', '/system/configure/list', 'POST', '8', '1', '2022-05-21 20:24:31', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_oper_log` VALUES ('29769', '/系统管理/用户管理/获取用户信息', '/system/user/info', 'GET', '14', '1', '2022-05-21 20:25:31', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_oper_log` VALUES ('29770', '/系统管理/数据字典/字典项/获取所有字典项', '/system/dict/items/all', 'GET', '4', '1', '2022-05-21 20:25:31', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_oper_log` VALUES ('29771', '/系统管理/菜单管理/当前用户菜单', '/system/menu/current/menus', 'POST', '10', '1', '2022-05-21 20:25:31', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_oper_log` VALUES ('29772', '/系统管理/组件/列表', '/system/component/list', 'POST', '6', '1', '2022-05-21 20:25:31', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_oper_log` VALUES ('29773', '/系统管理/配置中心/列表', '/system/configure/list', 'POST', '9', '1', '2022-05-21 20:25:31', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36', '0:0:0:0:0:0:0:1'); + +-- ---------------------------- +-- Table structure for sys_permission_code +-- ---------------------------- +DROP TABLE IF EXISTS `sys_permission_code`; +CREATE TABLE `sys_permission_code` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '权限代码', + `pid` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父id', + `is_del` int(1) DEFAULT '0' COMMENT '删除标识:0未删除,1已删除', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='权限code表'; + +-- ---------------------------- +-- Records of sys_permission_code +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role`; +CREATE TABLE `sys_role` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `type` varchar(1) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '类型', + `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '角色名称', + `code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '角色编码', + `permission` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '0:全部,1:自定义,2:本级级子级,3:本级', + `sort` int(12) DEFAULT NULL COMMENT '排序', + `desc_ribe` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '描述', + `is_del` int(1) DEFAULT '0' COMMENT '是否删除:0未删除,1已删除', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='角色表'; + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +INSERT INTO `sys_role` VALUES ('1', '1', '管理员', 'admin', '0', null, '管理员', '0', null, null, '1', '2022-05-10 16:23:26'); +INSERT INTO `sys_role` VALUES ('1d183eaec667423fa9adb20e24356a86', null, '全部', 'qb', '0', null, null, '0', '1', '2022-01-16 13:56:10', null, null); +INSERT INTO `sys_role` VALUES ('3a408f5157c841ea8884ade4fa56d0f4', null, '自定义', 'zdy', '1', null, null, '0', '1', '2022-01-16 13:55:22', '1', '2022-01-16 17:49:09'); +INSERT INTO `sys_role` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', null, '测试2', 'test2', '1', null, null, '0', '1', '2022-02-04 16:39:26', '1', '2022-02-04 16:45:11'); +INSERT INTO `sys_role` VALUES ('e3448fc792ca463a95a34baf6f089dcd', null, '本级及子级', 'bjjzj', '2', null, null, '0', '1', '2022-01-16 13:55:45', null, null); +INSERT INTO `sys_role` VALUES ('e619e4b665de42acbca1665fec150634', null, '本级', 'bj', '3', null, null, '0', '1', '2022-01-16 13:55:59', null, null); + +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_menu`; +CREATE TABLE `sys_role_menu` ( + `role_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '角色id', + `menu_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单id' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='角色和菜单关联表'; + +-- ---------------------------- +-- Records of sys_role_menu +-- ---------------------------- +INSERT INTO `sys_role_menu` VALUES ('e3448fc792ca463a95a34baf6f089dcd', 'b1851d1b13594e71840103c11a37a669'); +INSERT INTO `sys_role_menu` VALUES ('e3448fc792ca463a95a34baf6f089dcd', '10fc3bdde0c642aea2af34d281a49cf9'); +INSERT INTO `sys_role_menu` VALUES ('e619e4b665de42acbca1665fec150634', 'b1851d1b13594e71840103c11a37a669'); +INSERT INTO `sys_role_menu` VALUES ('e619e4b665de42acbca1665fec150634', '10fc3bdde0c642aea2af34d281a49cf9'); +INSERT INTO `sys_role_menu` VALUES ('1d183eaec667423fa9adb20e24356a86', 'b1851d1b13594e71840103c11a37a669'); +INSERT INTO `sys_role_menu` VALUES ('1d183eaec667423fa9adb20e24356a86', '10fc3bdde0c642aea2af34d281a49cf9'); +INSERT INTO `sys_role_menu` VALUES ('3a408f5157c841ea8884ade4fa56d0f4', 'b1851d1b13594e71840103c11a37a669'); +INSERT INTO `sys_role_menu` VALUES ('3a408f5157c841ea8884ade4fa56d0f4', '10fc3bdde0c642aea2af34d281a49cf9'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', 'b1851d1b13594e71840103c11a37a669'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '39be13ef6f0745568c80bf35202ddb2b'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '414e5d31-fe05-4e69-9983-217c10b9740a'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', 'd7e5280a2a8f4fb3b9e2f4a3e3093a38'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '833b204d5f2c402190bfca677421cfeb'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '6f3594d0-5445-41e1-a13c-890a57485036'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '4526eb9c-4b7a-4945-bfa9-cddc01f36c22'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '6762231e-4f30-4a6b-a94e-b185e99ed608'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '8009eed4f46141e3aca939490d68786a'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '8e9455740091486c914495cfb0c7faa5'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '94071254597d4da286bb8112ad93f4ff'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '684723f4226948aba1661292961c8f71'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', 'bf41ddc3ea314b158e21e4efc1ed5a25'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '06b8a427e4cd4c1ba11752070f565f20'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', 'bee5c6cb1b484133a4b8e72fe5c5eed0'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', 'c6e7b5866ce64bfdabeb5dd6342ca55f'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', 'c5f407478c4e4c9cbcdbee6389d2c909'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', 'b353de07f3624b4fa1c6f8b1b1e80cad'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '546c874267514672844cd3a019e468f7'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '81b6845a20da4028a01a42f3eb0b4f4b'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', 'e46a01397a01459bb478a5f31a6220ee'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '24176912aa9e4b2d832f96292be3430e'); +INSERT INTO `sys_role_menu` VALUES ('d71c32ace3bb4d959a652ee99ecd1b26', '10fc3bdde0c642aea2af34d281a49cf9'); +INSERT INTO `sys_role_menu` VALUES ('1', 'b1851d1b13594e71840103c11a37a669'); +INSERT INTO `sys_role_menu` VALUES ('1', '39be13ef6f0745568c80bf35202ddb2b'); +INSERT INTO `sys_role_menu` VALUES ('1', '414e5d31-fe05-4e69-9983-217c10b9740a'); +INSERT INTO `sys_role_menu` VALUES ('1', '6f3594d0-5445-41e1-a13c-890a57485036'); +INSERT INTO `sys_role_menu` VALUES ('1', 'd9c32f7ed4c841cbb37eaff2624385bb'); +INSERT INTO `sys_role_menu` VALUES ('1', '8e9455740091486c914495cfb0c7faa5'); +INSERT INTO `sys_role_menu` VALUES ('1', 'a5f2cb418ac348bca3d51b98958c4a80'); +INSERT INTO `sys_role_menu` VALUES ('1', '06b8a427e4cd4c1ba11752070f565f20'); +INSERT INTO `sys_role_menu` VALUES ('1', '7324ad98fb51462795750bcfc1b11be2'); +INSERT INTO `sys_role_menu` VALUES ('1', 'c5f407478c4e4c9cbcdbee6389d2c909'); +INSERT INTO `sys_role_menu` VALUES ('1', '710c0a9195934e73b11123b62283fdc5'); +INSERT INTO `sys_role_menu` VALUES ('1', '81b6845a20da4028a01a42f3eb0b4f4b'); +INSERT INTO `sys_role_menu` VALUES ('1', '25162c30ae0d4297ade09539bcf81d86'); +INSERT INTO `sys_role_menu` VALUES ('1', 'd7f8d052d4864bd285c575c3cf2dce69'); +INSERT INTO `sys_role_menu` VALUES ('1', 'c7445e2ac6144a15a76d723607fbfb9d'); +INSERT INTO `sys_role_menu` VALUES ('1', '99c6e9aeb6694c349f5db66e2516f069'); +INSERT INTO `sys_role_menu` VALUES ('1', 'c4352b75954a47de84cd896c6e2093b9'); +INSERT INTO `sys_role_menu` VALUES ('1', '4a57f57fc7324c94b6390f1a2dd1f49a'); +INSERT INTO `sys_role_menu` VALUES ('1', '4fc65edbe0544c369b58fdfed1523537'); +INSERT INTO `sys_role_menu` VALUES ('1', 'eee27ca353fb440aa5ac0bd7b38cad1d'); +INSERT INTO `sys_role_menu` VALUES ('1', '3a0e3107402449698d86ee3cbc5272c0'); +INSERT INTO `sys_role_menu` VALUES ('1', 'fdbdcf8b8d674ae38154bc1e57498a91'); +INSERT INTO `sys_role_menu` VALUES ('1', '9fe1eaae168e4b719dc880f039ccd7b7'); + +-- ---------------------------- +-- Table structure for sys_role_office +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_office`; +CREATE TABLE `sys_role_office` ( + `office_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '组织机构id', + `role_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '角色id' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户组织机构关联表'; + +-- ---------------------------- +-- Records of sys_role_office +-- ---------------------------- +INSERT INTO `sys_role_office` VALUES ('81b5493cdb31477f9ceea85b2cd08f15', '3a408f5157c841ea8884ade4fa56d0f4'); +INSERT INTO `sys_role_office` VALUES ('81b5493cdb31477f9ceea85b2cd08f15', 'd71c32ace3bb4d959a652ee99ecd1b26'); + +-- ---------------------------- +-- Table structure for sys_test_data +-- ---------------------------- +DROP TABLE IF EXISTS `sys_test_data`; +CREATE TABLE `sys_test_data` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL, + `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `is_del` int(1) DEFAULT '0' COMMENT '是否删除:0未删除,1已删除', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; + +-- ---------------------------- +-- Records of sys_test_data +-- ---------------------------- +INSERT INTO `sys_test_data` VALUES ('0572b97b3e45448bb1fcf9059e6c5ac9', '东北分公司', '0', '7217ee3f9d6e49f1a7e327183013226b', '2022-01-16 17:40:33', null, null); +INSERT INTO `sys_test_data` VALUES ('059d96a88d594995a895a6cb8151a72f', '扎兰屯', '0', '1b47d4758336487890147fc5cd64ebb9', '2022-01-16 17:48:33', null, null); +INSERT INTO `sys_test_data` VALUES ('f49eac2294114d588dee8ea548dc85c7', '内蒙分公司', '0', '7e7f4b1017fc4564ad31a05033eb29d1', '2022-01-16 17:40:15', null, null); + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `username` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登录名', + `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '姓名/昵称', + `password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码', + `status` char(1) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '状态', + `phone` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号', + `head_portrait` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像', + `is_login` int(1) DEFAULT '0' COMMENT '禁止登录:0未禁用,1已禁用', + `sort` int(12) DEFAULT NULL COMMENT '排序', + `office_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '组织机构id', + `is_del` int(1) DEFAULT '0' COMMENT '删除标识:0未删除,1已删除', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`,`username`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户表'; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO `sys_user` VALUES ('1', 'admin', '管理员', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', '1', '13888888888', 'userfiles/2022-05-05/5d616e5eb79c43d8a5e3404283e4f06d/QQ图片20220505165410.jpg', '0', null, '31b365008f994e93850186126fce87cb', '0', null, '2020-05-15 22:25:20', '1', '2022-01-21 22:11:11'); +INSERT INTO `sys_user` VALUES ('1b47d4758336487890147fc5cd64ebb9', 'zlt', null, '6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b', null, null, null, '0', null, 'a8b62a271c2a4492bd5c0653cac8f33d', '0', '1', '2022-01-16 17:48:20', null, null); +INSERT INTO `sys_user` VALUES ('534a37c366ec47878a6b0c85703d0bc2', 'system', '管理员', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', null, null, null, '0', null, '4c37a80226134bce8bc91c8fc04a7d2f', '0', '1', '2022-01-30 19:28:47', '1', '2022-02-05 22:12:45'); +INSERT INTO `sys_user` VALUES ('7217ee3f9d6e49f1a7e327183013226b', 'db', null, '6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b', null, null, null, '0', null, '31b365008f994e93850186126fce87cb', '0', '1', '2022-01-16 17:24:56', null, null); +INSERT INTO `sys_user` VALUES ('7e7f4b1017fc4564ad31a05033eb29d1', 'nm', null, '6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b', null, null, null, '0', null, '81b5493cdb31477f9ceea85b2cd08f15', '0', '1', '2022-01-16 17:24:29', '1', '2022-01-16 17:24:38'); +INSERT INTO `sys_user` VALUES ('895757b441fe45b1afb0ed1cb535f35c', 'mxd', null, '6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b', null, null, null, '0', null, '4c37a80226134bce8bc91c8fc04a7d2f', '0', '1', '2022-01-16 17:23:16', '1', '2022-01-16 17:24:45'); +INSERT INTO `sys_user` VALUES ('cbafb7813bd9458eae26e4dc3d05bf5e', 'mxd2', null, '6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b', null, null, null, '0', null, '4c37a80226134bce8bc91c8fc04a7d2f', '0', '1', '2022-01-16 17:23:50', '1', '2022-01-16 17:24:42'); + +-- ---------------------------- +-- Table structure for sys_user_code +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_code`; +CREATE TABLE `sys_user_code` ( + `user_id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户id', + `code_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '权限代码id', + PRIMARY KEY (`user_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户权限code关联表'; + +-- ---------------------------- +-- Records of sys_user_code +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_role`; +CREATE TABLE `sys_user_role` ( + `user_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户id', + `role_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '角色id' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户与角色关联表'; + +-- ---------------------------- +-- Records of sys_user_role +-- ---------------------------- +INSERT INTO `sys_user_role` VALUES ('7e7f4b1017fc4564ad31a05033eb29d1', 'e3448fc792ca463a95a34baf6f089dcd'); +INSERT INTO `sys_user_role` VALUES ('cbafb7813bd9458eae26e4dc3d05bf5e', '1d183eaec667423fa9adb20e24356a86'); +INSERT INTO `sys_user_role` VALUES ('895757b441fe45b1afb0ed1cb535f35c', '3a408f5157c841ea8884ade4fa56d0f4'); +INSERT INTO `sys_user_role` VALUES ('7217ee3f9d6e49f1a7e327183013226b', 'e619e4b665de42acbca1665fec150634'); +INSERT INTO `sys_user_role` VALUES ('1b47d4758336487890147fc5cd64ebb9', 'e619e4b665de42acbca1665fec150634'); +INSERT INTO `sys_user_role` VALUES ('1', '1'); +INSERT INTO `sys_user_role` VALUES ('1', '1d183eaec667423fa9adb20e24356a86'); +INSERT INTO `sys_user_role` VALUES ('534a37c366ec47878a6b0c85703d0bc2', '1'); + +-- ---------------------------- +-- Table structure for t_data_test +-- ---------------------------- +DROP TABLE IF EXISTS `t_data_test`; +CREATE TABLE `t_data_test` ( + `id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名字', + `sex` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '性别', + `head_portrait` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像', + `is_del` int(1) DEFAULT '0' COMMENT '删除标识:0未删除,1已删除', + `create_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + `remarks` text COLLATE utf8mb4_unicode_ci COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='测试生成'; + +-- ---------------------------- +-- Records of t_data_test +-- ---------------------------- +INSERT INTO `t_data_test` VALUES ('ecacf5c78bd043b1aaf06a839f7195b1', '马小东', '1', 'userfiles/2022-05-05/c6aeb598deef48c385b0da831b7c2b85/QQ图片20220505165410.jpg', '0', '1', '2022-03-30 22:43:45', '1', '2022-05-05 16:54:21', '没有'); diff --git a/log.path_IS_UNDEFINED/main/sys-info.log b/log.path_IS_UNDEFINED/main/sys-info.log new file mode 100644 index 0000000..6e06cc4 --- /dev/null +++ b/log.path_IS_UNDEFINED/main/sys-info.log @@ -0,0 +1,691 @@ +2025-03-26 13:47:05 [main] INFO o.s.m.MagicBootApplication - [logStarting,55] - Starting MagicBootApplication using Java 1.8.0_202-ea on DESKTOP-8LVANR3 with PID 19212 (D:\project\Zily\magic-boot\target\classes started by 张光起 in D:\project\Zily) +2025-03-26 13:47:05 [main] INFO o.s.m.MagicBootApplication - [logStartupProfileInfo,679] - The following profiles are active: dev +2025-03-26 13:47:06 [main] INFO o.s.b.w.e.t.TomcatWebServer - [initialize,108] - Tomcat initialized with port(s): 3002 (http) +2025-03-26 13:47:06 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-3002"] +2025-03-26 13:47:06 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +2025-03-26 13:47:06 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.45] +2025-03-26 13:47:06 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +2025-03-26 13:47:06 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - [prepareWebApplicationContext,289] - Root WebApplicationContext: initialization completed in 599 ms +2025-03-26 13:47:06 [main] INFO o.s.a.f.CglibAopProxy - [doValidateClass,263] - Unable to proxy interface-implementing method [public final org.springframework.web.servlet.HandlerExecutionChain org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(javax.servlet.http.HttpServletRequest) throws java.lang.Exception] because it is marked as final: Consider using interface-based JDK proxies instead! +2025-03-26 13:47:06 [main] INFO o.s.a.f.CglibAopProxy - [doValidateClass,263] - Unable to proxy interface-implementing method [public final void org.springframework.web.context.support.WebApplicationObjectSupport.setServletContext(javax.servlet.ServletContext)] because it is marked as final: Consider using interface-based JDK proxies instead! +2025-03-26 13:47:06 [main] INFO o.s.a.f.CglibAopProxy - [doValidateClass,263] - Unable to proxy interface-implementing method [public final void org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(org.springframework.context.ApplicationContext) throws org.springframework.beans.BeansException] because it is marked as final: Consider using interface-based JDK proxies instead! +2025-03-26 13:47:06 [main] INFO c.a.d.s.b.a.DruidDataSourceAutoConfigure - [dataSource,56] - Init DruidDataSource +2025-03-26 13:47:10 [main] INFO c.a.d.p.DruidDataSource - [init,930] - {dataSource-1} inited +2025-03-26 13:47:10 [main] INFO o.s.s.c.ThreadPoolTaskExecutor - [initialize,181] - Initializing ExecutorService 'applicationTaskExecutor' +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [magicNotifyService,244] - 未配置集群通知服务,本实例不会推送通知,集群环境下可能会有问题,如需开启,请引用magic-api-plugin-cluster插件 +2025-03-26 13:47:10 [main] INFO o.s.m.d.m.MagicDynamicDataSource - [put,67] - 注册数据源:default +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicModuleConfiguration - [pageProvider,110] - 未找到分页实现,采用默认分页实现,分页配置:(页码=current,页大小=size,默认首页=1,默认页大小=10,最大页大小=-1) +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicModuleConfiguration - [sqlCache,121] - 未找到SQL缓存实现,采用默认缓存实现(LRU+TTL),缓存配置:(容量=10000,TTL=3600000) +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [magicConfiguration,324] - magic-api工作目录:file://D:\project\Zily\data\magic-api +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [setupMagicModules,289] - 注册模块:log -> interface org.slf4j.Logger +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:db -> class org.ssssssss.magicapi.modules.db.SQLModule +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:http -> class org.ssssssss.magicapi.modules.http.HttpModule +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:env -> class org.ssssssss.magicapi.modules.spring.EnvModule +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:request -> class org.ssssssss.magicapi.modules.servlet.RequestModule +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:response -> class org.ssssssss.magicapi.modules.servlet.ResponseModule +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:magic -> class org.ssssssss.magicapi.core.service.impl.DefaultMagicAPIService +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$16,302] - 自动导入模块:db +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$null$18,310] - 注册扩展:class org.ssssssss.magicapi.modules.db.table.NamedTable -> class org.ssssssss.magicboot.extension.NamedTableFunctionExtension +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$null$18,310] - 注册扩展:class org.ssssssss.magicapi.modules.servlet.ResponseModule -> class org.ssssssss.magicboot.extension.ResponseFunctionExtension +2025-03-26 13:47:10 [main] INFO o.s.s.c.ThreadPoolTaskScheduler - [initialize,181] - Initializing ExecutorService +2025-03-26 13:47:10 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$magicConfiguration$21,376] - 注册请求拦截器:class org.ssssssss.magicboot.interceptor.PermissionInterceptor +2025-03-26 13:47:10 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-3002"] +2025-03-26 13:47:10 [main] INFO o.s.b.w.e.t.TomcatWebServer - [start,220] - Tomcat started on port(s): 3002 (http) with context path '' +2025-03-26 13:47:10 [main] INFO o.s.m.MagicBootApplication - [logStarted,61] - Started MagicBootApplication in 4.982 seconds (JVM running for 5.895) +2025-03-26 13:47:10 [main] INFO o.s.m.d.m.MagicDynamicDataSource - [put,67] - 注册数据源:th +2025-03-26 13:47:30 [SpringContextShutdownHook] INFO o.s.s.c.ThreadPoolTaskExecutor - [shutdown,218] - Shutting down ExecutorService 'applicationTaskExecutor' +2025-03-26 13:47:30 [SpringContextShutdownHook] INFO c.a.d.p.DruidDataSource - [close,1825] - {dataSource-1} closed +2025-03-26 13:47:32 [main] INFO o.s.m.MagicBootApplication - [logStarting,55] - Starting MagicBootApplication using Java 1.8.0_202-ea on DESKTOP-8LVANR3 with PID 20416 (D:\project\Zily\magic-boot\target\classes started by 张光起 in D:\project\Zily) +2025-03-26 13:47:32 [main] INFO o.s.m.MagicBootApplication - [logStartupProfileInfo,679] - The following profiles are active: dev +2025-03-26 13:47:33 [main] INFO o.s.b.w.e.t.TomcatWebServer - [initialize,108] - Tomcat initialized with port(s): 18088 (http) +2025-03-26 13:47:33 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-18088"] +2025-03-26 13:47:33 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +2025-03-26 13:47:33 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.45] +2025-03-26 13:47:33 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +2025-03-26 13:47:33 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - [prepareWebApplicationContext,289] - Root WebApplicationContext: initialization completed in 488 ms +2025-03-26 13:47:33 [main] INFO o.s.a.f.CglibAopProxy - [doValidateClass,263] - Unable to proxy interface-implementing method [public final org.springframework.web.servlet.HandlerExecutionChain org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(javax.servlet.http.HttpServletRequest) throws java.lang.Exception] because it is marked as final: Consider using interface-based JDK proxies instead! +2025-03-26 13:47:33 [main] INFO o.s.a.f.CglibAopProxy - [doValidateClass,263] - Unable to proxy interface-implementing method [public final void org.springframework.web.context.support.WebApplicationObjectSupport.setServletContext(javax.servlet.ServletContext)] because it is marked as final: Consider using interface-based JDK proxies instead! +2025-03-26 13:47:33 [main] INFO o.s.a.f.CglibAopProxy - [doValidateClass,263] - Unable to proxy interface-implementing method [public final void org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(org.springframework.context.ApplicationContext) throws org.springframework.beans.BeansException] because it is marked as final: Consider using interface-based JDK proxies instead! +2025-03-26 13:47:33 [main] INFO c.a.d.s.b.a.DruidDataSourceAutoConfigure - [dataSource,56] - Init DruidDataSource +2025-03-26 13:47:37 [main] INFO c.a.d.p.DruidDataSource - [init,930] - {dataSource-1} inited +2025-03-26 13:47:37 [main] INFO o.s.s.c.ThreadPoolTaskExecutor - [initialize,181] - Initializing ExecutorService 'applicationTaskExecutor' +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [magicNotifyService,244] - 未配置集群通知服务,本实例不会推送通知,集群环境下可能会有问题,如需开启,请引用magic-api-plugin-cluster插件 +2025-03-26 13:47:37 [main] INFO o.s.m.d.m.MagicDynamicDataSource - [put,67] - 注册数据源:default +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicModuleConfiguration - [pageProvider,110] - 未找到分页实现,采用默认分页实现,分页配置:(页码=current,页大小=size,默认首页=1,默认页大小=10,最大页大小=-1) +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicModuleConfiguration - [sqlCache,121] - 未找到SQL缓存实现,采用默认缓存实现(LRU+TTL),缓存配置:(容量=10000,TTL=3600000) +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [magicConfiguration,324] - magic-api工作目录:file://D:\project\Zily\data\magic-api +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [setupMagicModules,289] - 注册模块:log -> interface org.slf4j.Logger +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:db -> class org.ssssssss.magicapi.modules.db.SQLModule +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:http -> class org.ssssssss.magicapi.modules.http.HttpModule +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:env -> class org.ssssssss.magicapi.modules.spring.EnvModule +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:request -> class org.ssssssss.magicapi.modules.servlet.RequestModule +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:response -> class org.ssssssss.magicapi.modules.servlet.ResponseModule +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:magic -> class org.ssssssss.magicapi.core.service.impl.DefaultMagicAPIService +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$16,302] - 自动导入模块:db +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$null$18,310] - 注册扩展:class org.ssssssss.magicapi.modules.db.table.NamedTable -> class org.ssssssss.magicboot.extension.NamedTableFunctionExtension +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$null$18,310] - 注册扩展:class org.ssssssss.magicapi.modules.servlet.ResponseModule -> class org.ssssssss.magicboot.extension.ResponseFunctionExtension +2025-03-26 13:47:37 [main] INFO o.s.s.c.ThreadPoolTaskScheduler - [initialize,181] - Initializing ExecutorService +2025-03-26 13:47:37 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$magicConfiguration$21,376] - 注册请求拦截器:class org.ssssssss.magicboot.interceptor.PermissionInterceptor +2025-03-26 13:47:37 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-18088"] +2025-03-26 13:47:37 [main] INFO o.s.b.w.e.t.TomcatWebServer - [start,220] - Tomcat started on port(s): 18088 (http) with context path '' +2025-03-26 13:47:37 [main] INFO o.s.m.MagicBootApplication - [logStarted,61] - Started MagicBootApplication in 4.597 seconds (JVM running for 5.079) +2025-03-26 13:47:37 [main] INFO o.s.m.d.m.MagicDynamicDataSource - [put,67] - 注册数据源:th +2025-03-26 13:47:49 [http-nio-18088-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-03-26 13:47:49 [http-nio-18088-exec-1] INFO o.s.w.s.DispatcherServlet - [initServletBean,525] - Initializing Servlet 'dispatcherServlet' +2025-03-26 13:47:49 [http-nio-18088-exec-1] INFO o.s.w.s.DispatcherServlet - [initServletBean,547] - Completed initialization in 1 ms +2025-03-26 13:47:53 [http-nio-18088-exec-10] ERROR o.s.m.c.w.MagicExceptionHandler - [exceptionHandler,28] - magic-api调用接口出错 +org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select id,create_date,tag,type,name,create_by from magic_backup_record_v2 where create_date < ? order by create_date desc]; nested exception is java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) + at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) + at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713) + at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:744) + at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:757) + at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:815) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.backupList(MagicDatabaseBackupService.java:92) + at org.ssssssss.magicapi.backup.web.MagicBackupController.backups(MagicBackupController.java:39) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.ssssssss.magicapi.core.config.MagicCorsFilter.doFilter(MagicCorsFilter.java:41) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:748) +Caused by: java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3188) + at com.alibaba.druid.wall.WallFilter.preparedStatement_executeQuery(WallFilter.java:640) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3185) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeQuery(FilterEventAdapter.java:465) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3185) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeQuery(PreparedStatementProxyImpl.java:181) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:228) + at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:722) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:651) + ... 62 common frames omitted +2025-03-26 13:48:19 [http-nio-18088-exec-4] WARN o.s.m.b.s.MagicDatabaseBackupService - [doBackup,86] - 备份失败 +org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [insert into magic_backup_record_v2(id,create_date,tag,type,name,create_by,content) values(?,?,?,?,?,?,?)]; nested exception is java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) + at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:960) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1015) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1025) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.doBackup(MagicDatabaseBackupService.java:84) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.doBackup(MagicDatabaseBackupService.java:159) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.onFileEvent(MagicDatabaseBackupService.java:136) + at sun.reflect.GeneratedMethodAccessor81.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:344) + at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:229) + at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:166) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:391) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.lambda$saveFile$126(DefaultMagicResourceService.java:561) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.writeLock(DefaultMagicResourceService.java:892) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.saveFile(DefaultMagicResourceService.java:510) + at org.ssssssss.magicapi.core.web.MagicResourceController.saveFile(MagicResourceController.java:92) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.ssssssss.magicapi.core.config.MagicCorsFilter.doFilter(MagicCorsFilter.java:41) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:748) +Caused by: java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3201) + at com.alibaba.druid.wall.WallFilter.preparedStatement_executeUpdate(WallFilter.java:654) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3199) + at com.alibaba.druid.filter.FilterAdapter.preparedStatement_executeUpdate(FilterAdapter.java:1091) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeUpdate(FilterEventAdapter.java:491) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3199) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeUpdate(PreparedStatementProxyImpl.java:194) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:256) + at org.springframework.jdbc.core.JdbcTemplate.lambda$update$2(JdbcTemplate.java:965) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:651) + ... 77 common frames omitted +2025-03-26 13:48:19 [http-nio-18088-exec-7] WARN o.s.m.b.s.MagicDatabaseBackupService - [doBackup,86] - 备份失败 +org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [insert into magic_backup_record_v2(id,create_date,tag,type,name,create_by,content) values(?,?,?,?,?,?,?)]; nested exception is java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) + at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:960) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1015) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1025) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.doBackup(MagicDatabaseBackupService.java:84) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.doBackup(MagicDatabaseBackupService.java:159) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.onFileEvent(MagicDatabaseBackupService.java:136) + at sun.reflect.GeneratedMethodAccessor81.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:344) + at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:229) + at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:166) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:391) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.lambda$saveFile$126(DefaultMagicResourceService.java:561) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.writeLock(DefaultMagicResourceService.java:892) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.saveFile(DefaultMagicResourceService.java:510) + at org.ssssssss.magicapi.core.web.MagicResourceController.saveFile(MagicResourceController.java:92) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.ssssssss.magicapi.core.config.MagicCorsFilter.doFilter(MagicCorsFilter.java:41) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:748) +Caused by: java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3201) + at com.alibaba.druid.wall.WallFilter.preparedStatement_executeUpdate(WallFilter.java:654) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3199) + at com.alibaba.druid.filter.FilterAdapter.preparedStatement_executeUpdate(FilterAdapter.java:1091) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeUpdate(FilterEventAdapter.java:491) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3199) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeUpdate(PreparedStatementProxyImpl.java:194) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:256) + at org.springframework.jdbc.core.JdbcTemplate.lambda$update$2(JdbcTemplate.java:965) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:651) + ... 77 common frames omitted +2025-03-26 13:48:19 [http-nio-18088-exec-6] WARN o.s.m.b.s.MagicDatabaseBackupService - [doBackup,86] - 备份失败 +org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [insert into magic_backup_record_v2(id,create_date,tag,type,name,create_by,content) values(?,?,?,?,?,?,?)]; nested exception is java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) + at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:960) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1015) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1025) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.doBackup(MagicDatabaseBackupService.java:84) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.doBackup(MagicDatabaseBackupService.java:159) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.onFileEvent(MagicDatabaseBackupService.java:136) + at sun.reflect.GeneratedMethodAccessor81.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:344) + at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:229) + at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:166) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:391) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.lambda$saveFile$126(DefaultMagicResourceService.java:561) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.writeLock(DefaultMagicResourceService.java:892) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.saveFile(DefaultMagicResourceService.java:510) + at org.ssssssss.magicapi.core.web.MagicResourceController.saveFile(MagicResourceController.java:92) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.ssssssss.magicapi.core.config.MagicCorsFilter.doFilter(MagicCorsFilter.java:41) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:748) +Caused by: java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3201) + at com.alibaba.druid.wall.WallFilter.preparedStatement_executeUpdate(WallFilter.java:654) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3199) + at com.alibaba.druid.filter.FilterAdapter.preparedStatement_executeUpdate(FilterAdapter.java:1091) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeUpdate(FilterEventAdapter.java:491) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3199) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeUpdate(PreparedStatementProxyImpl.java:194) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:256) + at org.springframework.jdbc.core.JdbcTemplate.lambda$update$2(JdbcTemplate.java:965) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:651) + ... 77 common frames omitted +2025-03-26 13:48:19 [http-nio-18088-exec-9] WARN o.s.m.b.s.MagicDatabaseBackupService - [doBackup,86] - 备份失败 +org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [insert into magic_backup_record_v2(id,create_date,tag,type,name,create_by,content) values(?,?,?,?,?,?,?)]; nested exception is java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) + at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:960) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1015) + at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1025) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.doBackup(MagicDatabaseBackupService.java:84) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.doBackup(MagicDatabaseBackupService.java:159) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.onFileEvent(MagicDatabaseBackupService.java:136) + at sun.reflect.GeneratedMethodAccessor81.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:344) + at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:229) + at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:166) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:391) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.lambda$saveFile$126(DefaultMagicResourceService.java:561) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.writeLock(DefaultMagicResourceService.java:892) + at org.ssssssss.magicapi.core.service.impl.DefaultMagicResourceService.saveFile(DefaultMagicResourceService.java:510) + at org.ssssssss.magicapi.core.web.MagicResourceController.saveFile(MagicResourceController.java:92) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.ssssssss.magicapi.core.config.MagicCorsFilter.doFilter(MagicCorsFilter.java:41) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:748) +Caused by: java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3201) + at com.alibaba.druid.wall.WallFilter.preparedStatement_executeUpdate(WallFilter.java:654) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3199) + at com.alibaba.druid.filter.FilterAdapter.preparedStatement_executeUpdate(FilterAdapter.java:1091) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeUpdate(FilterEventAdapter.java:491) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3199) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeUpdate(PreparedStatementProxyImpl.java:194) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:256) + at org.springframework.jdbc.core.JdbcTemplate.lambda$update$2(JdbcTemplate.java:965) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:651) + ... 77 common frames omitted +2025-03-26 13:48:24 [http-nio-18088-exec-3] INFO o.s.m.d.m.MagicDynamicDataSource - [delete,117] - 删除数据源:th-1740016868074:失败 +2025-03-26 13:48:26 [http-nio-18088-exec-10] ERROR o.s.m.c.w.MagicExceptionHandler - [exceptionHandler,28] - magic-api调用接口出错 +org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select id,create_date,tag,type,name,create_by from magic_backup_record_v2 where create_date < ? order by create_date desc]; nested exception is java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) + at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) + at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713) + at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:744) + at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:757) + at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:815) + at org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService.backupList(MagicDatabaseBackupService.java:92) + at org.ssssssss.magicapi.backup.web.MagicBackupController.backups(MagicBackupController.java:39) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.ssssssss.magicapi.core.config.MagicCorsFilter.doFilter(MagicCorsFilter.java:41) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:748) +Caused by: java.sql.SQLSyntaxErrorException: Table 'zycx.magic_backup_record_v2' doesn't exist + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3188) + at com.alibaba.druid.wall.WallFilter.preparedStatement_executeQuery(WallFilter.java:640) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3185) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeQuery(FilterEventAdapter.java:465) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3185) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeQuery(PreparedStatementProxyImpl.java:181) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:228) + at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:722) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:651) + ... 62 common frames omitted +2025-03-26 13:49:36 [SpringContextShutdownHook] INFO o.s.s.c.ThreadPoolTaskExecutor - [shutdown,218] - Shutting down ExecutorService 'applicationTaskExecutor' +2025-03-26 13:49:36 [SpringContextShutdownHook] INFO c.a.d.p.DruidDataSource - [close,1825] - {dataSource-1} closed +2025-03-26 13:49:39 [main] INFO o.s.m.MagicBootApplication - [logStarting,55] - Starting MagicBootApplication using Java 1.8.0_202-ea on DESKTOP-8LVANR3 with PID 13100 (D:\project\Zily\magic-boot\target\classes started by 张光起 in D:\project\Zily) +2025-03-26 13:49:39 [main] INFO o.s.m.MagicBootApplication - [logStartupProfileInfo,679] - The following profiles are active: dev +2025-03-26 13:49:40 [main] INFO o.s.b.w.e.t.TomcatWebServer - [initialize,108] - Tomcat initialized with port(s): 18088 (http) +2025-03-26 13:49:40 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-18088"] +2025-03-26 13:49:40 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +2025-03-26 13:49:40 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.45] +2025-03-26 13:49:40 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +2025-03-26 13:49:40 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - [prepareWebApplicationContext,289] - Root WebApplicationContext: initialization completed in 467 ms +2025-03-26 13:49:40 [main] INFO o.s.a.f.CglibAopProxy - [doValidateClass,263] - Unable to proxy interface-implementing method [public final org.springframework.web.servlet.HandlerExecutionChain org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(javax.servlet.http.HttpServletRequest) throws java.lang.Exception] because it is marked as final: Consider using interface-based JDK proxies instead! +2025-03-26 13:49:40 [main] INFO o.s.a.f.CglibAopProxy - [doValidateClass,263] - Unable to proxy interface-implementing method [public final void org.springframework.web.context.support.WebApplicationObjectSupport.setServletContext(javax.servlet.ServletContext)] because it is marked as final: Consider using interface-based JDK proxies instead! +2025-03-26 13:49:40 [main] INFO o.s.a.f.CglibAopProxy - [doValidateClass,263] - Unable to proxy interface-implementing method [public final void org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(org.springframework.context.ApplicationContext) throws org.springframework.beans.BeansException] because it is marked as final: Consider using interface-based JDK proxies instead! +2025-03-26 13:49:40 [main] INFO c.a.d.s.b.a.DruidDataSourceAutoConfigure - [dataSource,56] - Init DruidDataSource +2025-03-26 13:49:44 [main] INFO c.a.d.p.DruidDataSource - [init,930] - {dataSource-1} inited +2025-03-26 13:49:44 [main] INFO o.s.s.c.ThreadPoolTaskExecutor - [initialize,181] - Initializing ExecutorService 'applicationTaskExecutor' +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [magicNotifyService,244] - 未配置集群通知服务,本实例不会推送通知,集群环境下可能会有问题,如需开启,请引用magic-api-plugin-cluster插件 +2025-03-26 13:49:44 [main] INFO o.s.m.d.m.MagicDynamicDataSource - [put,67] - 注册数据源:default +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicModuleConfiguration - [pageProvider,110] - 未找到分页实现,采用默认分页实现,分页配置:(页码=current,页大小=size,默认首页=1,默认页大小=10,最大页大小=-1) +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicModuleConfiguration - [sqlCache,121] - 未找到SQL缓存实现,采用默认缓存实现(LRU+TTL),缓存配置:(容量=10000,TTL=3600000) +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [magicConfiguration,324] - magic-api工作目录:file://D:\project\Zily\data\magic-api +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [setupMagicModules,289] - 注册模块:log -> interface org.slf4j.Logger +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:db -> class org.ssssssss.magicapi.modules.db.SQLModule +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:http -> class org.ssssssss.magicapi.modules.http.HttpModule +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:env -> class org.ssssssss.magicapi.modules.spring.EnvModule +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:request -> class org.ssssssss.magicapi.modules.servlet.RequestModule +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:response -> class org.ssssssss.magicapi.modules.servlet.ResponseModule +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$15,294] - 注册模块:magic -> class org.ssssssss.magicapi.core.service.impl.DefaultMagicAPIService +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$setupMagicModules$16,302] - 自动导入模块:db +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$null$18,310] - 注册扩展:class org.ssssssss.magicapi.modules.db.table.NamedTable -> class org.ssssssss.magicboot.extension.NamedTableFunctionExtension +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$null$18,310] - 注册扩展:class org.ssssssss.magicapi.modules.servlet.ResponseModule -> class org.ssssssss.magicboot.extension.ResponseFunctionExtension +2025-03-26 13:49:44 [main] INFO o.s.s.c.ThreadPoolTaskScheduler - [initialize,181] - Initializing ExecutorService +2025-03-26 13:49:44 [main] INFO o.s.m.s.b.s.MagicAPIAutoConfiguration - [lambda$magicConfiguration$21,376] - 注册请求拦截器:class org.ssssssss.magicboot.interceptor.PermissionInterceptor +2025-03-26 13:49:44 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-18088"] +2025-03-26 13:49:44 [main] INFO o.s.b.w.e.t.TomcatWebServer - [start,220] - Tomcat started on port(s): 18088 (http) with context path '' +2025-03-26 13:49:44 [main] INFO o.s.m.MagicBootApplication - [logStarted,61] - Started MagicBootApplication in 4.663 seconds (JVM running for 5.124) +2025-03-26 13:49:44 [http-nio-18088-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-03-26 13:49:44 [http-nio-18088-exec-1] INFO o.s.w.s.DispatcherServlet - [initServletBean,525] - Initializing Servlet 'dispatcherServlet' +2025-03-26 13:49:44 [http-nio-18088-exec-1] INFO o.s.w.s.DispatcherServlet - [initServletBean,547] - Completed initialization in 0 ms +2025-03-26 14:27:53 [SpringContextShutdownHook] INFO o.s.s.c.ThreadPoolTaskExecutor - [shutdown,218] - Shutting down ExecutorService 'applicationTaskExecutor' +2025-03-26 14:27:53 [SpringContextShutdownHook] INFO c.a.d.p.DruidDataSource - [close,1825] - {dataSource-1} closed diff --git a/magic-boot/magic-boot.iml b/magic-boot/magic-boot.iml new file mode 100644 index 0000000..1daccae --- /dev/null +++ b/magic-boot/magic-boot.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/magic-boot/pom.xml b/magic-boot/pom.xml new file mode 100644 index 0000000..f4f4773 --- /dev/null +++ b/magic-boot/pom.xml @@ -0,0 +1,121 @@ + + + 4.0.0 + + org.ssssssss + magic-boot-parent + 0.0.1 + + org.ssssssss + magic-boot + 0.0.1 + magic-boot + magic-boot + + 1.8 + 2.0.2 + 1.1.10 + 5.7.22 + 1.26.0 + 4.1.2 + 4.6.0 + + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.ssssssss + magic-api-spring-boot-starter + ${magic-api.version} + + + mysql + mysql-connector-java + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + cn.hutool + hutool-all + ${hutool-all.version} + + + cn.dev33 + sa-token-spring-boot-starter + ${sa-token.version} + + + org.ssssssss + magic-api-plugin-task + ${magic-api.version} + + + org.ssssssss + magic-api-plugin-component + ${magic-api.version} + + + org.apache.poi + poi-ooxml + ${poi.version} + + + com.aliyun + aliyun-java-sdk-core + ${aliyun-core.version} + + + + com.alibaba + fastjson + 1.2.37 + + + + org.apache.httpcomponents + httpclient + + + + com.xuxueli + xxl-job-core + 2.4.0 + + + org.projectlombok + lombok + 1.16.10 + + + com.microsoft.sqlserver + mssql-jdbc + 7.4.1.jre8 + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + magic-boot + org.ssssssss.magicboot.MagicBootApplication + + + + + + diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/MagicBootApplication.java b/magic-boot/src/main/java/org/ssssssss/magicboot/MagicBootApplication.java new file mode 100644 index 0000000..9133e1f --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/MagicBootApplication.java @@ -0,0 +1,13 @@ +package org.ssssssss.magicboot; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MagicBootApplication { + + public static void main(String[] args) { + SpringApplication.run(MagicBootApplication.class, args); + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/configuration/MagicBootConfiguration.java b/magic-boot/src/main/java/org/ssssssss/magicboot/configuration/MagicBootConfiguration.java new file mode 100644 index 0000000..e46826c --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/configuration/MagicBootConfiguration.java @@ -0,0 +1,19 @@ +package org.ssssssss.magicboot.configuration; + +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Configuration +public class MagicBootConfiguration { + + @Bean + public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { + LocalDateTimeSerializer localDateTimeSerializer = new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeSerializer); + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/configuration/WebConfiguration.java b/magic-boot/src/main/java/org/ssssssss/magicboot/configuration/WebConfiguration.java new file mode 100644 index 0000000..06e0a92 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/configuration/WebConfiguration.java @@ -0,0 +1,22 @@ +package org.ssssssss.magicboot.configuration; + +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; +import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; +import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.ssssssss.magicboot.model.Global; + +import java.util.concurrent.Executors; + +@Configuration +public class WebConfiguration implements WebMvcConfigurer { + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler(Global.USER_FILES_BASE_URL + "**").addResourceLocations("file:" + Global.getDir() + Global.USER_FILES_BASE_URL); + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/extension/NamedTableFunctionExtension.java b/magic-boot/src/main/java/org/ssssssss/magicboot/extension/NamedTableFunctionExtension.java new file mode 100644 index 0000000..2d2de30 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/extension/NamedTableFunctionExtension.java @@ -0,0 +1,32 @@ +package org.ssssssss.magicboot.extension; + +import org.springframework.stereotype.Component; +import org.ssssssss.magicapi.modules.db.table.NamedTable; +import org.ssssssss.magicboot.model.MagicBootConstants; +import org.ssssssss.script.annotation.Comment; +import org.ssssssss.script.functions.ExtensionMethod; +import org.ssssssss.script.runtime.RuntimeContext; + +import java.util.Map; + +@Component +public class NamedTableFunctionExtension implements ExtensionMethod { + + @Override + public Class support() { + return NamedTable.class; + } + + @Comment("保存到表中,当主键有值时则修改,否则插入") + public static Object saveOrUpdate(NamedTable namedTable, RuntimeContext runtimeContext, @Comment("各项列和值") Map data){ + namedTable.setAttribute(MagicBootConstants.COMMON_FIELD, true); + namedTable.save(runtimeContext, data,true); + return namedTable.getAttribute(MagicBootConstants.ID); + } + + @Comment("保存到表中,当主键有值时则修改,否则插入") + public static Object saveOrUpdate(NamedTable namedTable, RuntimeContext runtimeContext){ + return saveOrUpdate(namedTable, runtimeContext, null); + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/extension/ResponseFunctionExtension.java b/magic-boot/src/main/java/org/ssssssss/magicboot/extension/ResponseFunctionExtension.java new file mode 100644 index 0000000..fbbf370 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/extension/ResponseFunctionExtension.java @@ -0,0 +1,40 @@ +package org.ssssssss.magicboot.extension; + +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.ssssssss.magicapi.core.context.RequestContext; +import org.ssssssss.magicapi.modules.servlet.ResponseModule; +import org.ssssssss.script.annotation.Comment; +import org.ssssssss.script.functions.ExtensionMethod; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Component +public class ResponseFunctionExtension implements ExtensionMethod { + + @Override + public Class support() { + return ResponseModule.class; + } + + private HttpServletResponse getResponse() { + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + if (requestAttributes instanceof ServletRequestAttributes) { + return ((ServletRequestAttributes) requestAttributes).getResponse(); + } + return null; + } + + @Comment("转发") + public ResponseModule.NullValue dispatcher(ResponseModule responseModule, String url) throws ServletException, IOException { + HttpServletRequest request = RequestContext.getHttpServletRequest(); + request.getRequestDispatcher(url).forward(request, getResponse()); + return responseModule.end(); + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/HttpClientResult.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/HttpClientResult.java new file mode 100644 index 0000000..36be841 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/HttpClientResult.java @@ -0,0 +1,62 @@ +package org.ssssssss.magicboot.fxapi; + +import java.io.Serializable; + +/** + * Description: 封装httpClient响应结果 + * + * @author gengchunjing + * @date Created on 2019年11月6日 + */ +public class HttpClientResult implements Serializable { + + private static final long serialVersionUID = 2168152194164783950L; + + /** + * 响应状态码 + */ + private int code; + + /** + * 响应数据 + */ + private String content; + + public HttpClientResult() { + } + + public HttpClientResult(int code) { + this.code = code; + } + + public HttpClientResult(String content) { + this.content = content; + } + + public HttpClientResult(int code, String content) { + this.code = code; + this.content = content; +} + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + @Override + public String toString() { + return "HttpClientResult [code=" + code + ", content=" + content + "]"; + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/HttpClientUtils.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/HttpClientUtils.java new file mode 100644 index 0000000..b2ac4b4 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/HttpClientUtils.java @@ -0,0 +1,324 @@ +package org.ssssssss.magicboot.fxapi; + +import org.apache.http.HttpStatus; +import org.apache.http.NameValuePair; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.*; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +/** + * Description: httpClient工具类 + * + * @author gengchunjing + * @date Created on 2019年11月6日 + */ +public class HttpClientUtils { + + // 编码格式。发送编码格式统一用UTF-8 + private static final String ENCODING = "UTF-8"; + + // 设置连接超时时间,单位毫秒。 + private static final int CONNECT_TIMEOUT = 60000; + + // 请求获取数据的超时时间(即响应时间),单位毫秒。 + private static final int SOCKET_TIMEOUT = 60000; + + /** + * 发送get请求;不带请求头和请求参数 + * + * @param url 请求地址 + * @return + * @throws Exception + */ + public static HttpClientResult doGet(String url) throws Exception { + return doGet(url, null, null); + } + + /** + * 发送get请求;带请求参数 + * + * @param url 请求地址 + * @param params 请求参数集合 + * @return + * @throws Exception + */ + public static HttpClientResult doGet(String url, Map params) throws Exception { + return doGet(url, null, params); + } + + /** + * 发送get请求;带请求头和请求参数 + * + * @param url 请求地址 + * @param headers 请求头集合 + * @param params 请求参数集合 + * @return + * @throws Exception + */ + public static HttpClientResult doGet(String url, Map headers, Map params) throws Exception { + // 创建httpClient对象 + CloseableHttpClient httpClient = HttpClients.createDefault(); + + // 创建访问的地址 + URIBuilder uriBuilder = new URIBuilder(url); + if (params != null) { + Set> entrySet = params.entrySet(); + for (Entry entry : entrySet) { + uriBuilder.setParameter(entry.getKey(), entry.getValue()); + } + } + + // 创建http对象 + HttpGet httpGet = new HttpGet(uriBuilder.build()); + /** + * setConnectTimeout:设置连接超时时间,单位毫秒。 + * setConnectionRequestTimeout:设置从connect Manager(连接池)获取Connection + * 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。 + * setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。 + */ + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build(); + httpGet.setConfig(requestConfig); + + // 设置请求头 + packageHeader(headers, httpGet); + + // 创建httpResponse对象 + CloseableHttpResponse httpResponse = null; + + try { + // 执行请求并获得响应结果 + return getHttpClientResult(httpResponse, httpClient, httpGet); + } finally { + // 释放资源 + release(httpResponse, httpClient); + } + } + + /** + * 发送post请求;不带请求头和请求参数 + * + * @param url 请求地址 + * @return + * @throws Exception + */ + public static HttpClientResult doPost(String url) throws Exception { + return doPost(url, null, null); + } + + /** + * 发送post请求;带请求参数 + * + * @param url 请求地址 + * @param params 参数集合 + * @return + * @throws Exception + */ + public static HttpClientResult doPost(String url, Map params) throws Exception { + return doPost(url, null, params); + } + + /** + * 发送post请求;带Json请求参数 + * + * @param url 请求地址 + * @param json 参数集合 + * @return + * @throws Exception + */ + public static HttpClientResult doPostJson(String url,String json) throws Exception { + return doPostJson(url, null, json); + } + /** + * 发送post请求;带请求头和请求参数 + * + * @param url 请求地址 + * @param headers 请求头集合 + * @param params 请求参数集合 + * @return + * @throws Exception + */ + public static HttpClientResult doPost(String url, Map headers, Map params) throws Exception { + // 创建httpClient对象 + CloseableHttpClient httpClient = HttpClients.createDefault(); + + // 创建http对象 + HttpPost httpPost = new HttpPost(url); + /** + * setConnectTimeout:设置连接超时时间,单位毫秒。 + * setConnectionRequestTimeout:设置从connect Manager(连接池)获取Connection + * 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。 + * setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。 + */ + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build(); + httpPost.setConfig(requestConfig); + + packageHeader(headers, httpPost); + + // 封装请求参数 + packageParam(params,httpPost); + + // 创建httpResponse对象 + CloseableHttpResponse httpResponse = null; + + try { + // 执行请求并获得响应结果 + return getHttpClientResult(httpResponse, httpClient, httpPost); + } finally { + // 释放资源 + release(httpResponse, httpClient); + } + } + + /** + * 发送post请求;带请求头和请求参数 POST+JOSN + * + * @param url 请求地址 + * @param headers 请求头集合 + * @param json json参数集合 + * @return + * @throws Exception + */ + public static HttpClientResult doPostJson(String url, Map headers,String json) throws Exception { + // 创建httpClient对象 + CloseableHttpClient httpClient = HttpClients.createDefault(); + + // 创建http对象 + HttpPost httpPost = new HttpPost(url); + /** + * setConnectTimeout:设置连接超时时间,单位毫秒。 + * setConnectionRequestTimeout:设置从connect Manager(连接池)获取Connection + * 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。 + * setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。 + */ + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build(); + httpPost.setConfig(requestConfig); + //封装请求头 + packageHeader(headers, httpPost); + + // 封装请求参数 + packageParam_json(json, httpPost); + + // 创建httpResponse对象 + CloseableHttpResponse httpResponse = null; + + try { + // 执行请求并获得响应结果 + return getHttpClientResult(httpResponse, httpClient, httpPost); + } finally { + // 释放资源 + release(httpResponse, httpClient); + } + } + /** + * Description: 封装请求头 + * @param params + * @param httpMethod + */ + public static void packageHeader(Map params, HttpRequestBase httpMethod) { + // 封装请求头 + if (params != null) { + Set> entrySet = params.entrySet(); + for (Entry entry : entrySet) { + // 设置到请求头到HttpRequestBase对象中 + httpMethod.setHeader(entry.getKey(), entry.getValue()); + } + } + } + + /** + * Description: 封装请求参数 + * + * @param params + * @param httpMethod + * @throws UnsupportedEncodingException + */ + public static void packageParam(Map params, HttpEntityEnclosingRequestBase httpMethod) + throws UnsupportedEncodingException { + // 封装请求参数 + if (params != null) { + List nvps = new ArrayList(); + Set> entrySet = params.entrySet(); + for (Entry entry : entrySet) { + nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + // 设置到请求的http对象中 + httpMethod.setEntity(new UrlEncodedFormEntity(nvps, ENCODING)); + } + + } + + /** + * Description: 获得响应结果 + * + * @param httpResponse + * @param httpClient + * @param httpMethod + * @return + * @throws Exception + */ + public static HttpClientResult getHttpClientResult(CloseableHttpResponse httpResponse, + CloseableHttpClient httpClient, HttpRequestBase httpMethod) throws Exception { + // 执行请求 + httpResponse = httpClient.execute(httpMethod); + + // 获取返回结果 + if (httpResponse != null && httpResponse.getStatusLine() != null) { + String content = ""; + if (httpResponse.getEntity() != null) { + content = EntityUtils.toString(httpResponse.getEntity(), ENCODING); + } + return new HttpClientResult(httpResponse.getStatusLine().getStatusCode(), content); + } + return new HttpClientResult(HttpStatus.SC_INTERNAL_SERVER_ERROR); + } + + /** + * Description: 释放资源 + * + * @param httpResponse + * @param httpClient + * @throws IOException + */ + public static void release(CloseableHttpResponse httpResponse, CloseableHttpClient httpClient) throws IOException { + // 释放资源 + if (httpResponse != null) { + httpResponse.close(); + } + if (httpClient != null) { + httpClient.close(); + } + } + /** + * Description: 封装请求参数 json + * + * @param json + * @param httpMethod + * @throws UnsupportedEncodingException + */ + public static void packageParam_json(String json,HttpEntityEnclosingRequestBase httpMethod) + throws UnsupportedEncodingException { + // 封装请求参数 + if(json!= null){ + StringEntity s = new StringEntity(json,ENCODING); + s.setContentEncoding(ENCODING); + s.setContentType("application/json"); + httpMethod.setEntity(s); + } + + } +} \ No newline at end of file diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/NewFXAPI.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/NewFXAPI.java new file mode 100644 index 0000000..5791a10 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/NewFXAPI.java @@ -0,0 +1,1283 @@ +package org.ssssssss.magicboot.fxapi; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class NewFXAPI { + private Logger logger = LoggerFactory.getLogger(NewFXAPI.class); + public JSONObject unlock(String id,String apiName, Boolean state) { + logger.error("解锁"); + XKTokenAccess xktonken = new XKTokenAccess(); + + String Xkjson = "{\n" + + " \"corpAccessToken\":\"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\":\"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + " \"corpId\":\"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + " \"data\":{\n" + + " \n" + + " \"dataObjectApiName\":\""+apiName+"\",\n" + + " \"dataIds\": [\n" + + " \"" + id + "\"\n" + + " ],\n" + + " \"detailObjStrategy\": 1\n" + + " \n" + + " }\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/object/unlock"; + if (state) { + url = "https://open.fxiaoke.com/cgi/crm/v2/object/lock"; + } + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + logger.error("请求url" + url); + logger.error("请求json" + Xkjson); + logger.error("解锁" + e); + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + logger.error("解锁" + SAVEJSON1); + return SAVEJSON1; + } + /** + * 查询未同步的纷享信息 + */ + public JSONObject getSynchronizedObj(String methodName,String apiName,String fieldName,String fieldValue) { + System.out.println(methodName+"-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \""+fieldName+"\",\n" + + "\t\t\t\t\"field_values\": [\""+fieldValue+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"life_status\",\n" + + "\t\t\t\t\"field_values\": [\"normal\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \""+apiName+"\"\n" + + "\t},\n" + + " \"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_255BE81C377A37FF810EAA9BCC0F9852\",\n" + + "\t\"corpId\": \"FSCID_866389E052568BE610EF4DA1A4476ADD\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/F/query"; + System.out.println(methodName+"-请求url-"+url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName+"-请求json-"+SAVEJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + Xkjson); + logger.error(methodName+"-获取纷享待同步数据" + e); + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + /** + * 查询未同步的纷享信息 + */ + public JSONObject getSynchronizedObjLife(String methodName,String apiName,String fieldName,String status) { + System.out.println(methodName+"-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \""+fieldName+"\",\n" + + "\t\t\t\t\"field_values\": [\""+status+"\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \""+apiName+"\"\n" + + "\t},\n" + + " \"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + System.out.println(methodName+"-请求url-"+url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName+"-请求json-"+SAVEJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + Xkjson); + logger.error(methodName+"-获取纷享待同步数据" + e); + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + /** + * 查询未同步的纷享信息-不带生命状态 + */ + public JSONObject getV2SynchronizedObjLife(String methodName,String apiName,String fieldName,String status) { + System.out.println(methodName+"-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n"+ + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \""+fieldName+"\",\n" + + "\t\t\t\t\"field_values\": [\""+status+"\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \""+apiName+"\"\n" + + "\t},\n" + + " \"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + System.out.println(methodName+"-请求url-"+url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName+"-请求json-"+SAVEJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + Xkjson); + logger.error(methodName+"-获取纷享待同步数据" + e); + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + /** + * 获取销客对象描述 + */ + //apiNmae+id + public JSONObject getXKName(String apiNmae) { + logger.error("获取销客对象描述" + apiNmae); + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + " \"corpId\": \"" + xktonken.getCorpAccessToken().getCorpId() + "\",\n" + + " \"apiName\": \"" + apiNmae + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/object/describe"; + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + logger.error("请求url" + url); + logger.error("请求json" + SAVEJSON); + logger.error("获取销客对象描述 请求失败" + e); + + } + logger.error("获取销客对象描述 返回结果" + rtn.getContent()); + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + + return SAVEJSON1; + } + /** + * 修改同步字段-成功 + * + * @param id + * @param state 未同步 已同步 同步失败 + * @param code 金蝶编码 + */ + public void upSynchronized(String methodName,String apiName,String fieldName,String id, String state, String code) { + System.out.println(methodName+"-修改同步字段 "); + JSONObject jsonObject = new JSONObject(); + + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + "\t\"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \""+apiName+"\",\n" + + "\t\t\t\"_id\": \"" + id + "\",\n" + + "\"field_ZahGO__c\": \"标示修改\",\n" + + "\"field_b05kt__c\": \""+code+"\",\n" + + "\t\t\t\"field_53zPP__c\": \"" + state + "\"\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/update"; + + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, SAVEJSON.toString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段 请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段-返回结果" + rtn.getContent()); + + jsonObject = JSON.parseObject(rtn.getContent()); + } + + /** + * 修改同步字段-失败 + * + * @param id + * @param state 未同步 已同步 同步失败 + */ + public JSONObject unSynchronized(String methodName,String apiName,String fieldName,String id, String state) { + System.out.println(methodName+"-修改同步字段 "); + JSONObject jsonObject = new JSONObject(); + + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + "\t\"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \""+apiName+"\",\n" + + "\t\t\t\"_id\": \"" + id + "\",\n" + + "\"field_ZahGO__c\": \"标示修改\",\n" + + "\t\t\t\"field_53zPP__c\": \"" + state + "\"\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/update"; + + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, SAVEJSON.toString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段 请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段-返回结果" + rtn.getContent()); + + jsonObject = JSON.parseObject(rtn.getContent()); + return jsonObject; + } + + /** + * 查询未同步的纷享信息 V2 + */ + public JSONObject getV2SynchronizedObj(String methodName,String apiName,String fieldName,String status) { + System.out.println(methodName+"-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + xktonken.getCorpAccessToken().getCorpAccessToken(); + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \""+fieldName+"\",\n" + + "\t\t\t\t\"field_values\": [\""+status+"\"]\n" + + "\t\t\t}" + + ",{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"life_status\",\n" + + "\t\t\t\t\"field_values\": [\"normal\"]\n" + + "\t\t\t}" + + "]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \""+apiName+"\"\n" + + "\t},\n" + + " \"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + + System.out.println(methodName+"-请求url-"+url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName+"-请求json-"+SAVEJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + Xkjson); + logger.error(methodName+"-获取纷享待同步数据" + e); + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + + + /** + * 插入联系人信息 V2 + */ + public String getV2lianxirenObj(String name,String tel,String add,String account) { + XKTokenAccess xktonken = new XKTokenAccess(); + xktonken.getCorpAccessToken().getCorpAccessToken(); + String Xkjson = "{\n" + + " \"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + " \"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + " \"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + " \"data\": {\n" + + " \"object_data\": {\n" + + " \"dataObjectApiName\": \"ContactObj\",\n" + + "\t\t\"name\": \""+name+"\",\n" + + "\t\t\"mobile1\": \""+tel+"\",\n" + + " \"tel1\": \""+tel+"\",\n" + + "\t\t\"owner\": [\n" + + "\t\t\t\"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\"\n" + + "\t\t],\n" + + " \"add\": \""+add+"\",\n" + + "\t\t\"record_type\": \"default__c\",\n" + + "\t\t\"account_id\": \""+account+"\",\n" + + "\t\t\"field_53zPP__c\": \"sq4x2104A\"\n" + + " }\n" + + " }\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/create"; + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + System.out.println(SAVEJSON1); + String str=null; + if (SAVEJSON1.getInteger("errorCode") == 0 ) { + str=SAVEJSON1.getString("dataId"); + } + return str; + } + + /** + * 查询联系人信息 V2 + */ + public String queryV2lianxirenObj(String name,String tel,String add,String account) { + XKTokenAccess xktonken = new XKTokenAccess(); + xktonken.getCorpAccessToken().getCorpAccessToken(); + String Xkjson = "{\n" + + "\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 2000,\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"name\",\n" + + "\t\t\t\t\"field_values\": [\""+name+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"add\",\n" + + "\t\t\t\t\"field_values\": [\""+add+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"account_id\",\n" + + "\t\t\t\t\"field_values\": [\""+account+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"tel1\",\n" + + "\t\t\t\t\"field_values\": [\""+tel+"\"]\n" + + "\t\t\t}],\n" + + "\t\t\n" + + "\t\t\t\"fieldProjection\": [\n" + + "\t\t\t\t\"_id\"\n" + + "\t\t\t]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"ContactObj\"\n" + + "\t},\n" + + " \"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + " \"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + " \"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + System.out.println(SAVEJSON1); + String str=null; + if (SAVEJSON1.getInteger("errorCode") == 0 && SAVEJSON1.getJSONObject("data").getInteger("total") > 0) { + str=SAVEJSON1.getJSONObject("data").getJSONArray("dataList").getJSONObject(0).getString("_id"); + } + return str; + } + + /** + * 获取部门 V2 + */ + public String queryV2bumenObj(String name) { + XKTokenAccess xktonken = new XKTokenAccess(); + xktonken.getCorpAccessToken().getCorpAccessToken(); + String Xkjson = "{\n" + + "\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 2000,\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"name\",\n" + + "\t\t\t\t\"field_values\": [\""+name+"\"]\n" + + "\t\t\t}],\n" + + "\t\t\n" + + "\t\t\t\"fieldProjection\": [\n" + + "\t\t\t\t\"_id\"\n" + + "\t\t\t]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"DepartmentObj\"\n" + + "\t},\n" + + " \"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + " \"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + " \"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + System.out.println(SAVEJSON1); + String str=null; + if (SAVEJSON1.getInteger("errorCode") == 0 && SAVEJSON1.getJSONObject("data").getInteger("total") > 0) { + str=SAVEJSON1.getJSONObject("data").getJSONArray("dataList").getJSONObject(0).getString("_id"); + } + return str; + } + /** + * 修改同步字段-成功 + * + * @param id + * @param state 未同步 已同步 同步失败 + * @param code 金蝶编码 + */ + public JSONObject upV2Synchronized(String methodName,String apiName,String fieldName,String id, String state, String code) { + System.out.println(methodName+"-修改同步字段 "); + JSONObject jsonObject = new JSONObject(); + + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + "\t\"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \""+apiName+"\",\n" + + "\t\t\t\"_id\": \"" + id + "\",\n" + + "\"field_ZahGO__c\": \"标示修改\",\n" + + "\"field_b05kt__c\": \""+code+"\",\n" + + "\t\t\t\"field_53zPP__c\": \"" + state + "\"\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/update"; + + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, SAVEJSON.toString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段 请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段-返回结果" + rtn.getContent()); + + jsonObject = JSON.parseObject(rtn.getContent()); + return jsonObject; + } + + /** + * 修改同步字段-失败 + * + * @param id + * @param state 未同步 已同步 同步失败 + */ + public JSONObject unV2Synchronized(String methodName,String apiName,String fieldName,String id, String state, String value1, String value2) { + System.out.println(methodName+"-修改同步字段 "); + JSONObject jsonObject = new JSONObject(); + + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + "\t\"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \""+apiName+"\",\n" + + "\t\t\t\"_id\": \"" + id + "\",\n" + + "\t\t\t\"erp_id\": \"" + value1 + "\",\n" + + "\t\t\t\"erp_code\": \"" + value2 + "\",\n" + + "\t\t\t\"field_GfGJw__c\": \"同步成功\",\n" + + "\t\t\t\"field_vnR8m__c\": \"" + state + "\"\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/update"; + + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, SAVEJSON.toString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段 请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段-返回结果" + rtn.getContent()); + + jsonObject = JSON.parseObject(rtn.getContent()); + return jsonObject; + } + + /** + * 纷享单据-插入 + * @return + */ + public JSONObject insertFXData(String methodName, JSONObject saveJson) { + + + + + XKTokenAccess xktonken = new XKTokenAccess(); + saveJson.put("corpAccessToken", xktonken.getCorpAccessToken().getCorpAccessToken()); + saveJson.put("corpId", xktonken.getCorpAccessToken().getCorpId()); + saveJson.put("currentOpenUserId", "FSUID_76A55AEDDFB561F2F2EFA2B978D07407"); + System.out.println(methodName+"-纷享单据-插入 "); + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/create"; + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, saveJson.toJSONString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + saveJson); + logger.error(methodName+"-请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + saveJson); + logger.error(methodName+"-返回结果" + rtn.getContent()); + JSONObject jsonObject = JSON.parseObject(rtn.getContent()); + return jsonObject; + } + /** + * 纷享单据-修改 + * @return + */ + public JSONObject updateFXData(String methodName, JSONObject saveJson) { + XKTokenAccess xktonken = new XKTokenAccess(); + saveJson.put("corpAccessToken", xktonken.getCorpAccessToken().getCorpAccessToken()); + saveJson.put("corpId", xktonken.getCorpAccessToken().getCorpId()); + saveJson.put("currentOpenUserId", "FSUID_76A55AEDDFB561F2F2EFA2B978D07407"); + System.out.println(methodName+"-纷享单据-修改 "); + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/update"; + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, saveJson.toJSONString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + saveJson); + logger.error(methodName+"-请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + saveJson); + logger.error(methodName+"-返回结果" + rtn.getContent()); + JSONObject jsonObject = JSON.parseObject(rtn.getContent()); + return jsonObject; + } + /** + * 纷享单据-插入 + * @return + */ + public JSONObject insertV2FXData(String methodName, JSONObject saveJson) { + XKTokenAccess xktonken = new XKTokenAccess(); + saveJson.put("corpAccessToken", xktonken.getCorpAccessToken().getCorpAccessToken()); + saveJson.put("corpId", xktonken.getCorpAccessToken().getCorpId()); + saveJson.put("currentOpenUserId", "FSUID_76A55AEDDFB561F2F2EFA2B978D07407"); + System.out.println(methodName+"-纷享单据-插入 "); + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/create"; + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, saveJson.toJSONString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + saveJson); + logger.error(methodName+"-请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + saveJson); + logger.error(methodName+"-返回结果" + rtn.getContent()); + JSONObject jsonObject = JSON.parseObject(rtn.getContent()); + return jsonObject; + } + /** + * 纷享单据-修改 + * @return + */ + public JSONObject updateV2FXData(String methodName, JSONObject saveJson) { + XKTokenAccess xktonken = new XKTokenAccess(); + saveJson.put("corpAccessToken", xktonken.getCorpAccessToken().getCorpAccessToken()); + saveJson.put("corpId", xktonken.getCorpAccessToken().getCorpId()); + saveJson.put("currentOpenUserId", "FSUID_76A55AEDDFB561F2F2EFA2B978D07407"); + System.out.println(methodName+"-纷享单据-修改 "); + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/update"; + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, saveJson.toJSONString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + saveJson); + logger.error(methodName+"-请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + saveJson); + logger.error(methodName+"-返回结果" + rtn.getContent()); + JSONObject jsonObject = JSON.parseObject(rtn.getContent()); + return jsonObject; + } + /** + * 纷享单据-修改 + * @return + */ + public JSONObject ZDYchangeOwner(String methodName,String ApiName,String _id,String ownerId) { + + String str="{\n" + + " \"data\": {\n" + + " \"dataObjectApiName\":\""+ApiName+"\",\n" + + " \"Data\": [\n" + + " {\n" + + " \"objectDataId\": \""+_id+"\",\n" + + " \"ownerId\": [\n" + + " \""+ownerId+"\"\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + "}\n"; + JSONObject saveJson =JSON.parseObject(str); ; + XKTokenAccess xktonken = new XKTokenAccess(); + saveJson.put("corpAccessToken", xktonken.getCorpAccessToken().getCorpAccessToken()); + saveJson.put("corpId", xktonken.getCorpAccessToken().getCorpId()); + saveJson.put("currentOpenUserId", "FSUID_76A55AEDDFB561F2F2EFA2B978D07407"); + System.out.println(methodName+"-纷享单据-修改 "); + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/changeOwner"; + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, saveJson.toJSONString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + saveJson); + logger.error(methodName+"-请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + saveJson); + logger.error(methodName+"-返回结果" + rtn.getContent()); + JSONObject jsonObject = JSON.parseObject(rtn.getContent()); + return jsonObject; + } + public String getXKyonghuId(String name) { + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + "\t \"nickName\": \""+name+"\"\n" + + "\t\n" + + "}\n"; + String url = "https://open.fxiaoke.com/cgi/user/getByNickName"; + System.out.println(url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(SAVEJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + logger.error("请求url" + url); + logger.error("请求json" + Xkjson); + logger.error("获取纷享待同步数据" + e); + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + //logger.error("获取纷享待同步数据"+SAVEJSON1); + String str=null; + if (SAVEJSON1.getInteger("errorCode") == 0 ) { + str=SAVEJSON1.getJSONArray("empList").getJSONObject(0).getString("openUserId"); + } + return str; + } + + /** + * 查询未同步的纷享信息 + */ + public JSONObject getSynchronizedObj1111(String methodName,String apiName) { + System.out.println(methodName+"-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\"data\": {\n" + + "\t\t\"dataObjectApiName\": \""+apiName+"\",\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"limit\": 2000,\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"orders\": [\n" + + " {\n" + + " \"isAsc\": false\n" + + " }\n" + + " ],\n" + + + "\t\t\t\"fieldProjection\": [\"field_b05kt__c\"]\n" + + "\t\t}\n" + + "\t},\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + "\t\"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + System.out.println(methodName+"-请求url-"+url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName+"-请求json-"+SAVEJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + Xkjson); + logger.error(methodName+"-获取纷享待同步数据" + e); + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + /** + * 查询未同步的纷享信息 + */ + public JSONObject getSynchronizedObjoffsetAdd(String methodName,String apiName,int offset) { + System.out.println(methodName+"-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": "+offset+",\n" + + "\t\t\t\"limit\": 1000,\n" + + " \t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"life_status\",\n" + + "\t\t\t\t\"field_values\": [\"normal\"]\n" + + "\t\t\t}],\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + + "\t\t\t\"fieldProjection\": [\"field_b05kt__c\"]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \""+apiName+"\"\n" + + "\t},\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + System.out.println(methodName+"-请求url-"+url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName+"-请求json-"+SAVEJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + Xkjson); + logger.error(methodName+"-获取纷享待同步数据" + e); + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + + public JSONObject ysdOffsetQuery(String strartTime,String endTime,Long offset) { + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": "+offset+",\n" + + "\t\t\t\"limit\": 1000,\n" + + " \n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"LTE\",\n" + + "\t\t\t\t\"field_name\": \"field_1x3K6__c\",\n" + + "\t\t\t\t\"field_values\": [\""+endTime+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"GTE\",\n" + + "\t\t\t\t\"field_name\": \"field_1x3K6__c\",\n" + + "\t\t\t\t\"field_values\": [\""+strartTime+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"life_status\",\n" + + "\t\t\t\t\"field_values\": [\"normal\"]\n" + + "\t\t\t}],\n" + + " \"fieldProjection\": [\n" + + "\t\t\t\t\"_id\",\"field_1x3K6__c\",\"name\",\"field_ChJhm__c\"\n" + + "\t\t\t],\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"object_2O3hf__c\"\n" + + "\t},\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + public JSONObject ysdOffsetQueryFahuo(String strartTime,String endTime,Long offset) { + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": "+offset+",\n" + + "\t\t\t\"limit\": 1000,\n" + + " \n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"LTE\",\n" + + "\t\t\t\t\"field_name\": \"delivery_date\",\n" + + "\t\t\t\t\"field_values\": [\""+endTime+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"GTE\",\n" + + "\t\t\t\t\"field_name\": \"delivery_date\",\n" + + "\t\t\t\t\"field_values\": [\""+strartTime+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"life_status\",\n" + + "\t\t\t\t\"field_values\": [\"normal\"]\n" + + "\t\t\t}],\n" + + " \"fieldProjection\": [\n" + + "\t\t\t\t\"field_upUZ2__c\"\n" + + "\t\t\t],\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"DeliveryNoteObj\"\n" + + "\t},\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + public JSONObject ysdOffsetQueryHuiKuan(String strartTime,String endTime,Long offset) { + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": "+offset+",\n" + + "\t\t\t\"limit\": 1000,\n" + + " \n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"LTE\",\n" + + "\t\t\t\t\"field_name\": \"payment_time\",\n" + + "\t\t\t\t\"field_values\": [\""+endTime+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"GTE\",\n" + + "\t\t\t\t\"field_name\": \"payment_time\",\n" + + "\t\t\t\t\"field_values\": [\""+strartTime+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"life_status\",\n" + + "\t\t\t\t\"field_values\": [\"normal\"]\n" + + "\t\t\t}],\n" + + " \"fieldProjection\": [\n" + + "\t\t\t\t\"_id\",\"field_uhaec__c\"\n" + + "\t\t\t],\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"PaymentObj\"\n" + + "\t},\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println("-请求url-"+url); + System.out.println("-请求json-"+SAVEJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + + public JSONObject ysdOffsetQueryDd(String strartTime,String endTime,Long offset) { + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": "+offset+",\n" + + "\t\t\t\"limit\": 1000,\n" + + " \n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"LTE\",\n" + + "\t\t\t\t\"field_name\": \"order_time\",\n" + + "\t\t\t\t\"field_values\": [\""+endTime+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"GTE\",\n" + + "\t\t\t\t\"field_name\": \"order_time\",\n" + + "\t\t\t\t\"field_values\": [\""+strartTime+"\"]\n" + + "\t\t\t}],\n" + + " \"fieldProjection\": [\n" + + "\t\t\t\t\"field_b05kt__c\"\n" + + "\t\t\t],\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"SalesOrderObj\"\n" + + "\t},\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println("-请求url-"+url); + System.out.println("-请求json-"+SAVEJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + public JSONObject ysdOffsetQueryV2(String strartTime,String endTime,Long offset) { + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": "+offset+",\n" + + "\t\t\t\"limit\": 1000,\n" + + " \n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"LTE\",\n" + + "\t\t\t\t\"field_name\": \"field_1x3K6__c\",\n" + + "\t\t\t\t\"field_values\": [\""+endTime+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"GTE\",\n" + + "\t\t\t\t\"field_name\": \"field_1x3K6__c\",\n" + + "\t\t\t\t\"field_values\": [\""+strartTime+"\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"life_status\",\n" + + "\t\t\t\t\"field_values\": [\"normal\"]\n" + + "\t\t\t}],\n" + + " \"fieldProjection\": [\n" + + "\t\t\t\t\"_id\",\"field_1x3K6__c\",\"name\",\"field_ChJhm__c\"\n" + + "\t\t\t],\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"object_2O3hf__c\"\n" + + "\t},\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + + + /** + * 查询未同步的纷享信息 V2 + */ + public JSONObject uploadFile(String methodName,String apiName,String fieldName,String status) { + System.out.println(methodName+"-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + xktonken.getCorpAccessToken().getCorpAccessToken(); + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \""+fieldName+"\",\n" + + "\t\t\t\t\"field_values\": [\""+status+"\"]\n" + + "\t\t\t}" + + ",{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"life_status\",\n" + + "\t\t\t\t\"field_values\": [\"normal\"]\n" + + "\t\t\t}" + + "]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \""+apiName+"\"\n" + + "\t},\n" + + " \"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/media/upload"; + + System.out.println(methodName+"-请求url-"+url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName+"-请求json-"+SAVEJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + Xkjson); + logger.error(methodName+"-获取纷享待同步数据" + e); + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } + + /** + * 修改同步字段-成功 + * + * @param id + * @param state 未同步 已同步 同步失败 + * @param code 金蝶编码 + */ + public void upSynFileFi(String methodName,String apiName,String fieldName,String id, String state) { + System.out.println(methodName+"-修改同步字段 "); + JSONObject jsonObject = new JSONObject(); + + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + "\t\"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \""+apiName+"\",\n" + + "\t\t\t\"_id\": \"" + id + "\",\n" + + "\"field_ZahGO__c\": \"标示修改\",\n" + + "\t\t\t\""+fieldName+"\": " + state + "\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/update"; + System.out.println(saveJSON); + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, SAVEJSON.toString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段 请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段-返回结果" + rtn.getContent()); + + //jsonObject = JSON.parseObject(rtn.getContent()); + } + + /** + * 修改同步字段-成功 + * + * @param id + * @param state 未同步 已同步 同步失败 + * @param code 金蝶编码 + */ + public void upSynddcode(String methodName,String apiName,String fieldName,String id, String state) { + System.out.println(methodName+"-修改同步字段 "); + JSONObject jsonObject = new JSONObject(); + + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\",\n" + + "\t\"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \""+apiName+"\",\n" + + "\t\t\t\"_id\": \"" + id + "\",\n" + + "\t\t\t\""+fieldName+"\": " + state + "\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/update"; + System.out.println(saveJSON); + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, SAVEJSON.toString()); + + } catch (Exception e) { + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段 请求失败" + e); + } + logger.error(methodName+"-请求url" + url); + logger.error(methodName+"-请求json" + SAVEJSON); + logger.error(methodName+"-修改客户是否同步字段-返回结果" + rtn.getContent()); + + } + + public JSONObject ysdOffsetQuery234234(String strartTime,String endTime,Long offset) { + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\"corpAccessToken\": \""+ xktonken.getCorpAccessToken().getCorpAccessToken() +"\",\n" + + "\t\"currentOpenUserId\": \"FSUID_76A55AEDDFB561F2F2EFA2B978D07407\",\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": "+offset+",\n" + + "\t\t\t\"limit\": 1000,\n" + + " \n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"life_status\",\n" + + "\t\t\t\t\"field_values\": [\"normal\"]\n" + + "\t\t\t}],\n" + + " \"fieldProjection\": [\n" + + "\t\t\t\t\"_id\",\"field_1x3K6__c\",\"name\",\"field_ChJhm__c\"\n" + + "\t\t\t],\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"object_2O3hf__c\"\n" + + "\t},\n" + + "\t\"corpId\": \"FSCID_27CC6C1AF6EC6C7F4B26A02D5301470D\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + HttpClientResult rtn = null; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + + } catch (Exception e) { + + } + + JSONObject SAVEJSON1 = JSON.parseObject(rtn.getContent()); + return SAVEJSON1; + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/XKTokenAccess.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/XKTokenAccess.java new file mode 100644 index 0000000..bb5a09e --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/XKTokenAccess.java @@ -0,0 +1,110 @@ +package org.ssssssss.magicboot.fxapi; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.ssssssss.magicboot.fxapi.model.AppAccessToken; +import org.ssssssss.magicboot.fxapi.model.CorpAccessToken; +import org.ssssssss.magicboot.fxapi.model.XKopenAPI; + +import java.util.HashMap; +import java.util.Map; + +/** + * 纷享请求token + */ +public class XKTokenAccess { + /** + * 验证连接 + */ + public static void main(String[] args) { + System.out.println(new XKTokenAccess().getCorpAccessToken()); + } + private final Logger log = LoggerFactory.getLogger(XKTokenAccess.class); + + + private static final String KEY_EXPIRES_IN = "expiresIn"; + private static final String KEY_TOKEN = "token"; + private static final String APP_ACCESS_TOKEN_KEY_PREX = "appAccessToken_"; + private static final String CORP_ACCESS_TOKEN_KEY_PREX = "corpAccessToken_"; + + private static final String appId = "FSAID_131ee7a"; + private static final String appSecret= "b9d85f718d46460aaf5c45b0afa27792"; + private static final String permanentCode= "334912202A8400E338E6A7BD8C45C219"; + + private static final String prefix = "https://open.fxiaoke.com"; + + private static Map> accessTokenMap= new HashMap(); + + public static Map> accessTokenMap() { + return accessTokenMap; + } + + public AppAccessToken getAppAccessToken() { + String key = APP_ACCESS_TOKEN_KEY_PREX.concat(appId); + Map token = accessTokenMap.get(key); + if(token != null){ + long expiresIn = (Long) token.get(KEY_EXPIRES_IN); + + if (System.currentTimeMillis() < expiresIn) { + return (AppAccessToken) token.get(KEY_TOKEN); + } + accessTokenMap.remove(key); + } + String appAccessToken = null; + XKopenAPI XKAPI = new XKopenAPI(); + XKAPI.setAppId(appId); + XKAPI.setAppSecret(appSecret); + String param = JSON.toJSONString(XKAPI); + + AppAccessToken appToken =null; + try { + String url = prefix + "/cgi/appAccessToken/get"; + HttpClientResult result = HttpClientUtils.doPostJson(url,param); + appToken = JSON.toJavaObject(JSONObject.parseObject(result.getContent()),AppAccessToken.class); + } catch (Exception e) { + e.printStackTrace(); + } + token = new HashMap(); + // 减去5分钟,以免过时 + token.put(KEY_EXPIRES_IN, (appToken.getExpiresIn() - 5 * 60) * 1000 + System.currentTimeMillis()); + token.put(KEY_TOKEN, appAccessToken); + accessTokenMap.put(key, token); + return appToken; + } + + public CorpAccessToken getCorpAccessToken() { + String key = CORP_ACCESS_TOKEN_KEY_PREX.concat(appId); + Map token = accessTokenMap.get(key); + if(token != null){ + long expiresIn = (Long) token.get(KEY_EXPIRES_IN); + + if (System.currentTimeMillis() < expiresIn) { + return (CorpAccessToken) token.get(KEY_TOKEN); + } + accessTokenMap.remove(key); + } + String corpAccessToken = null; + XKopenAPI XKAPI = new XKopenAPI(); + XKAPI.setAppId(appId); + XKAPI.setAppSecret(appSecret); + XKAPI.setPermanentCode(permanentCode); + String param = JSON.toJSONString(XKAPI); + CorpAccessToken corpToken =null; + + try { + String url = prefix + "/cgi/corpAccessToken/get/V2"; + HttpClientResult result = HttpClientUtils.doPostJson(url,param); + System.out.println(result); + corpToken = JSON.toJavaObject(JSONObject.parseObject(result.getContent()),CorpAccessToken.class); + } catch (Exception e) { + e.printStackTrace(); + } + token = new HashMap(); + // 减去5分钟,以免过时 + token.put(KEY_EXPIRES_IN, (corpToken.getExpiresIn() - 5 * 60) * 1000 + System.currentTimeMillis()); + token.put(KEY_TOKEN, corpToken); + accessTokenMap.put(key, token); + return corpToken; + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/AppAccessToken.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/AppAccessToken.java new file mode 100644 index 0000000..3976215 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/AppAccessToken.java @@ -0,0 +1,51 @@ +package org.ssssssss.magicboot.fxapi.model; + +public class AppAccessToken { + private String appAccessToken; + private Long expiresIn; + private String errorCode; + private String errorMessage; + + public String getAppAccessToken() { + return appAccessToken; + } + + public void setAppAccessToken(String appAccessToken) { + this.appAccessToken = appAccessToken; + } + + public Long getExpiresIn() { + return expiresIn; + } + + public void setExpiresIn(Long expiresIn) { + this.expiresIn = expiresIn; + } + + public String getErrorCode() { + return errorCode; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + @Override + public String toString() { + return "AppAccessToken{" + + "appAccessToken='" + appAccessToken + '\'' + + ", expiresIn=" + expiresIn + + ", errorCode='" + errorCode + '\'' + + ", errorMessage='" + errorMessage + '\'' + + '}'; + } +} + diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CorpAccessToken.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CorpAccessToken.java new file mode 100644 index 0000000..5928ca1 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CorpAccessToken.java @@ -0,0 +1,59 @@ +package org.ssssssss.magicboot.fxapi.model; + +public class CorpAccessToken { + private String corpAccessToken; + private Long expiresIn; + private String errorCode; + private String errorMessage; + private String corpId; + public String getCorpAccessToken() { + return corpAccessToken; + } + + public void setCorpAccessToken(String corpAccessToken) { + this.corpAccessToken = corpAccessToken; + } + + public Long getExpiresIn() { + return expiresIn; + } + + public void setExpiresIn(Long expiresIn) { + this.expiresIn = expiresIn; + } + + public String getErrorCode() { + return errorCode; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public String getCorpId() { + return corpId; + } + + public void setCorpId(String corpId) { + this.corpId = corpId; + } + + @Override + public String toString() { + return "CorpAccessToken{" + + "corpAccessToken='" + corpAccessToken + '\'' + + ", expiresIn=" + expiresIn + + ", errorCode='" + errorCode + '\'' + + ", errorMessage='" + errorMessage + '\'' + + ", corpId='" + corpId + '\'' + + '}'; + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiCaseInfo.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiCaseInfo.java new file mode 100644 index 0000000..d5d6d1b --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiCaseInfo.java @@ -0,0 +1,22 @@ +package org.ssssssss.magicboot.fxapi.model; + +import lombok.Data; + +@Data +public class CrmApiCaseInfo { + + private String id;//主键 + private String createTime;//创建人 + private String createBy;//创建时间 + private String updateTime;//修改人 + private String uodateBy;//修改时间 + private String status;//状态 + private String beginField;//开始字段 + private String endField;//结束字段 + private String jcId;//集成表id + + private String AFieldName;// + private String AFieldKey;// + private String BFieldValue;// + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiField.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiField.java new file mode 100644 index 0000000..27de182 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiField.java @@ -0,0 +1,18 @@ +package org.ssssssss.magicboot.fxapi.model; + +import lombok.Data; + +@Data +public class CrmApiField { + + private String field_id;//主键 + private String createTime;//创建人 + private String createBy;//创建时间 + private String updateTime;//修改人 + private String uodateBy;//修改时间 + private String status;//状态 + private String fieldName;//字段名称 + private String fieldKey;//字段值 + private String fieldValue;//字段取值参数 + private String apiId;//接口主键 +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiInfo.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiInfo.java new file mode 100644 index 0000000..7e795fc --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmApiInfo.java @@ -0,0 +1,19 @@ +package org.ssssssss.magicboot.fxapi.model; + +import lombok.Data; + +@Data +public class CrmApiInfo { + + private String apiId;//主键 + private String createTime;//创建人 + private String createBy;//创建时间 + private String updateTime;//修改人 + private String uodateBy;//修改时间 + private String status;//状态 + private String apiName;//接口名称 + private String apiType;//接口类型 + private String remark;//备注 + private String apiUrl;//接口路径 + private String apiParam;//接口参数 +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmFXApiParam.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmFXApiParam.java new file mode 100644 index 0000000..64e36f1 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/CrmFXApiParam.java @@ -0,0 +1,41 @@ +package org.ssssssss.magicboot.fxapi.model; + +import lombok.Data; + +@Data +public class CrmFXApiParam { + + private String operator;//主键 + private String fieldKey;//字段值 + private Object fieldValue;//字段取值参数 + + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + public String getFieldKey() { + return fieldKey; + } + + public void setFieldKey(String fieldKey) { + this.fieldKey = fieldKey; + } + + public Object getFieldValue() { + return fieldValue; + } + + public void setFieldValue(Object fieldValue) { + this.fieldValue = fieldValue; + } + + public CrmFXApiParam(String operator, String fieldKey, Object fieldValue) { + this.fieldValue = fieldValue; + this.fieldKey = fieldKey; + this.operator = operator; + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/Token.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/Token.java new file mode 100644 index 0000000..fbdafd9 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/Token.java @@ -0,0 +1,69 @@ +package org.ssssssss.magicboot.fxapi.model; + +import java.util.Date; + +public class Token { + /* 令牌 */ + private String Token; + + private String code; + + /* 有效期 默认1小时 3600s */ + private int Validity; + + private String IPAddress; + + private String Language; + + // 更新时间 + private Date Create; + + public String getToken() { + return Token; + } + + public void setToken(String token) { + Token = token; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public int getValidity() { + return Validity; + } + + public void setValidity(int validity) { + Validity = validity; + } + + public String getIPAddress() { + return IPAddress; + } + + public void setIPAddress(String iPAddress) { + IPAddress = iPAddress; + } + + public String getLanguage() { + return Language; + } + + public void setLanguage(String language) { + Language = language; + } + + public Date getCreate() { + return Create; + } + + public void setCreate(Date create) { + Create = create; + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/XKopenAPI.java b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/XKopenAPI.java new file mode 100644 index 0000000..18a6851 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/fxapi/model/XKopenAPI.java @@ -0,0 +1,31 @@ +package org.ssssssss.magicboot.fxapi.model; + +public class XKopenAPI { + private String appId; + private String appSecret; + private String permanentCode; + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getAppSecret() { + return appSecret; + } + + public void setAppSecret(String appSecret) { + this.appSecret = appSecret; + } + + public String getPermanentCode() { + return permanentCode; + } + + public void setPermanentCode(String permanentCode) { + this.permanentCode = permanentCode; + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/interceptor/NamedTableHandlerInterceptor.java b/magic-boot/src/main/java/org/ssssssss/magicboot/interceptor/NamedTableHandlerInterceptor.java new file mode 100644 index 0000000..3365c57 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/interceptor/NamedTableHandlerInterceptor.java @@ -0,0 +1,35 @@ +package org.ssssssss.magicboot.interceptor; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.IdUtil; +import org.springframework.stereotype.Component; +import org.ssssssss.magicapi.modules.db.inteceptor.NamedTableInterceptor; +import org.ssssssss.magicapi.modules.db.model.SqlMode; +import org.ssssssss.magicapi.modules.db.table.NamedTable; + +import java.util.Date; + +import static org.ssssssss.magicboot.model.MagicBootConstants.*; + +@Component +public class NamedTableHandlerInterceptor implements NamedTableInterceptor { + + @Override + public void preHandle(SqlMode sqlMode, NamedTable namedTable) { + if(Boolean.TRUE == namedTable.getAttribute(COMMON_FIELD)){ + if(sqlMode == SqlMode.INSERT) { + String id = IdUtil.simpleUUID(); + namedTable.setAttribute(namedTable.getPrimary(), id); + namedTable.column(namedTable.getPrimary(), id); + namedTable.column(CREATE_BY, StpUtil.getLoginId()); + namedTable.column(CREATE_DATE, new Date()); + } + if(sqlMode == SqlMode.UPDATE){ + namedTable.setAttribute(namedTable.getPrimary(), namedTable.getColumns().get(namedTable.getPrimary())); + namedTable.column(UPDATE_BY, StpUtil.getLoginId()); + namedTable.column(UPDATE_DATE, new Date()); + } + } + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/interceptor/PermissionInterceptor.java b/magic-boot/src/main/java/org/ssssssss/magicboot/interceptor/PermissionInterceptor.java new file mode 100644 index 0000000..1d4f7d5 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/interceptor/PermissionInterceptor.java @@ -0,0 +1,87 @@ +package org.ssssssss.magicboot.interceptor; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.extra.servlet.ServletUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; +import org.ssssssss.magicapi.core.context.RequestEntity; +import org.ssssssss.magicapi.core.interceptor.RequestInterceptor; +import org.ssssssss.magicapi.core.model.ApiInfo; +import org.ssssssss.magicapi.core.model.Options; +import org.ssssssss.magicapi.core.service.MagicAPIService; +import org.ssssssss.magicapi.core.service.MagicResourceService; +import org.ssssssss.magicapi.utils.PathUtils; +import org.ssssssss.magicboot.model.StatusCode; +import org.ssssssss.script.MagicScriptContext; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Objects; + +@Component +@Order(1) +public class PermissionInterceptor implements RequestInterceptor, HandlerInterceptor { + + @Autowired + MagicAPIService magicAPIService; + + @Autowired + MagicResourceService magicResourceService; + + @Autowired + private JdbcTemplate template; + + /* + * 当返回对象时,直接将此对象返回到页面,返回null时,继续执行后续操作 + */ + @Override + public Object preHandle(ApiInfo info, MagicScriptContext context, HttpServletRequest request, HttpServletResponse response) { + String requireLogin = Objects.toString(info.getOptionValue(Options.REQUIRE_LOGIN), ""); + if(requireLogin.equals("false")){ + return null; + } + if(!StpUtil.isLogin()){ +// return StatusCode.CERTIFICATE_EXPIRED.json(); + return null; + } else { + // TODO + List permissions = (List) magicAPIService.execute("post", "/system/security/permissions", new HashMap()); + String permission = Objects.toString(info.getOptionValue(Options.PERMISSION), ""); + if (StringUtils.isNotBlank(permission) && !permissions.contains(permission)) { + return StatusCode.FORBIDDEN.json(); + } + } + return null; + } + + @Override + public Object postHandle(RequestEntity requestEntity, Object returnValue) throws Exception { + if(StpUtil.isLogin()){ + try { + HttpServletRequest request = requestEntity.getRequest(); + ApiInfo info = requestEntity.getApiInfo(); + template.update("insert into sys_oper_log(api_name, api_path, api_method, cost_time, create_by, create_date, user_agent, user_ip) values(?,?,?,?,?,?,?,?)", +// PathUtils.replaceSlash(groupServiceProvider.getFullName(info.getGroupId()) + "/" + info.getName()).replace("/","-"), + PathUtils.replaceSlash(String.format("/%s/%s", magicResourceService.getGroupName(info.getGroupId()), info.getName())), + request.getRequestURI(), + request.getMethod(), + System.currentTimeMillis() - requestEntity.getRequestTime(), + StpUtil.getLoginId(), + new Date(requestEntity.getRequestTime()), + request.getHeader("User-Agent"), + ServletUtil.getClientIP(request)); + } catch (Exception ignored){ + ignored.printStackTrace(); + } + } + return null; + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/model/CodeCacheMap.java b/magic-boot/src/main/java/org/ssssssss/magicboot/model/CodeCacheMap.java new file mode 100644 index 0000000..b5687a5 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/model/CodeCacheMap.java @@ -0,0 +1,22 @@ +package org.ssssssss.magicboot.model; + +import java.util.HashMap; +import java.util.Map; + +public class CodeCacheMap { + + private static Map map = new HashMap(); + + public static void put(String key, String value){ + map.put(key, value); + } + + public static void remove(String key){ + map.remove(key); + } + + public static String get(String key){ + return map.get(key); + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/model/CorpAccessU9Token.java b/magic-boot/src/main/java/org/ssssssss/magicboot/model/CorpAccessU9Token.java new file mode 100644 index 0000000..2a3eaa4 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/model/CorpAccessU9Token.java @@ -0,0 +1,63 @@ +package org.ssssssss.magicboot.model; + +public class CorpAccessU9Token { + + private Long resCode; + private String data; + private String errorCode; + private String errorMessage; + + private String resMsg; + + + public Long getResCode() { + return resCode; + } + + public void setResCode(Long resCode) { + this.resCode = resCode; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getErrorCode() { + return errorCode; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public String getResMsg() { + return resMsg; + } + + public void setResMsg(String resMsg) { + this.resMsg = resMsg; + } + + @Override + public String toString() { + return "CorpAccessU9Token{" + + ", resCode=" + resCode + + ", data='" + data + '\'' + + ", errorCode='" + errorCode + '\'' + + ", errorMessage='" + errorMessage + '\'' + + ", resMsg='" + resMsg + '\'' + + '}'; + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/model/Global.java b/magic-boot/src/main/java/org/ssssssss/magicboot/model/Global.java new file mode 100644 index 0000000..ce93cbe --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/model/Global.java @@ -0,0 +1,47 @@ +package org.ssssssss.magicboot.model; + +import cn.hutool.core.util.StrUtil; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.ssssssss.magicboot.utils.WebUtils; + +@Component +public class Global { + + /** + * 文件上的根目录 + */ + public static String dir; + + public final static String USER_FILES_BASE_URL = "/userfiles/"; + + public static String getDir() { + return dir; + } + + @Value("${upload.dir:D:/mb/}") + public void setDir(String dir) { + this.dir = dir; + } + + /** + * 获取上传文件的根目录 + * + * @return + */ + public static String getUserFilesBaseDir() { + String dir = getDir(); + if (StrUtil.isBlank(dir)) { + try { + dir = WebUtils.getHttpServletRequest().getSession().getServletContext().getRealPath("/"); + } catch (Exception e) { + return ""; + } + } + if (!dir.endsWith("/")) { + dir += "/"; + } + return dir; + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/model/MagicBootConstants.java b/magic-boot/src/main/java/org/ssssssss/magicboot/model/MagicBootConstants.java new file mode 100644 index 0000000..ea5d796 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/model/MagicBootConstants.java @@ -0,0 +1,37 @@ +package org.ssssssss.magicboot.model; + +/** + * Magic Boot 中使用的常量 + */ +public class MagicBootConstants { + + /** + * 设置通用字段 + */ + public static final String COMMON_FIELD = "setCommonField"; + + /** + * id + */ + public static final String ID = "id"; + + /** + * 创建人 + */ + public static final String CREATE_BY = "createBy"; + + /** + * 修改人 + */ + public static final String UPDATE_BY = "updateBy"; + + /** + * 创建时间 + */ + public static final String CREATE_DATE = "createDate"; + + /** + * 修改时间 + */ + public static final String UPDATE_DATE = "updateDate"; +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/model/StatusCode.java b/magic-boot/src/main/java/org/ssssssss/magicboot/model/StatusCode.java new file mode 100644 index 0000000..a36713c --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/model/StatusCode.java @@ -0,0 +1,23 @@ +package org.ssssssss.magicboot.model; + +import org.ssssssss.magicapi.core.model.JsonBean; + +public enum StatusCode { + + CERTIFICATE_EXPIRED(402, "凭证已过期"), + FORBIDDEN(403, "禁止访问"); + + StatusCode(int code, String message) { + this.code = code; + this.message = message; + } + + private int code; + + private String message; + + public JsonBean json(){ + return new JsonBean<>(this.code, this.message); + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/model/UeditorConfig.java b/magic-boot/src/main/java/org/ssssssss/magicboot/model/UeditorConfig.java new file mode 100644 index 0000000..550a9bf --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/model/UeditorConfig.java @@ -0,0 +1,348 @@ +package org.ssssssss.magicboot.model; + +import org.ssssssss.magicboot.utils.WebUtils; + +public class UeditorConfig { + + private String imageActionName ="uploadImage";//执行上传图片的action名称 + + private String imageFieldName = "file";//提交的图片表单名称 + + private long imageMaxSize = 2048000;//上传大小限制,单位B + + private String[] imageAllowFiles = new String[]{".png", ".jpg", ".jpeg", ".gif", ".bmp"};/* 上传图片格式显示 */ + + private boolean imageCompressEnable = true;//是否压缩图片,默认是true + + private int imageCompressBorder = 1600;//图片压缩最长边限制 + + private String imageInsertAlign = "none";//插入的图片浮动方式 + + private String imageUrlPrefix = WebUtils.getUeditorPrefix();//图片访问路径前缀 + + /* 上传保存路径,可以自定义保存路径和文件名格式 */ + /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ + /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ + /* {time} 会替换成时间戳 */ + /* {yyyy} 会替换成四位年份 */ + /* {yy} 会替换成两位年份 */ + /* {mm} 会替换成两位月份 */ + /* {dd} 会替换成两位日期 */ + /* {hh} 会替换成两位小时 */ + /* {ii} 会替换成两位分钟 */ + /* {ss} 会替换成两位秒 */ + /* 非法字符 \ : * ? " < > | */ + /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */ + private String imagePathFormat = "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}"; + + /*抓取远程图片配置*/ + private String catcherLocalDomain[] = new String[]{"127.0.0.1", "localhost", "img.baidu.com"}; + + private String catcherActionName = "catchimage";/* 执行抓取远程图片的action名称 */ + + private String catcherFieldName = "source";/* 提交的图片列表表单名称 */ + + private String catcherPathFormat ="/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}"; /* 上传保存路径,可以自定义保存路径和文件名格式 */ + + private long catcherMaxSize= 2048000; /* 上传大小限制,单位B */ + + private String catcherAllowFiles[] = new String[]{".png", ".jpg", ".jpeg", ".gif", ".bmp"}; /* 抓取图片格式显示 */ + + /* 上传文件配置 */ + private String fileActionName = "uploadFile"; + + private String fileFieldName = "file"; /* 提交的文件表单名称 */ + + private String filePathFormat = "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}"; /* 上传保存路径,可以自定义保存路径和文件名格式 */ + + private String fileUrlPrefix = WebUtils.getUeditorPrefix(); /* 文件访问路径前缀 */ + + private long fileMaxSize = 51200000; /* 上传大小限制,单位B,默认50MB */ + + /* 上传文件格式显示 */ + private String[] fileAllowFiles = new String[]{".png", ".jpg", ".jpeg", ".gif", ".bmp",".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4",".mp3", ".wav", ".mid",".rar", ".zip", ".tar", ".gz", ".7z",".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt"}; + + /* 列出指定目录下的图片 */ + private String imageManagerActionName = "listimage";/* 执行图片管理的action名称 */ + + private String imageManagerListPath = "/upload/image/"; /* 指定要列出图片的目录 */ + + private int imageManagerListSize = 20; /* 每次列出文件数量 */ + + private String imageManagerUrlPrefix = WebUtils.getUeditorPrefix(); /* 图片访问路径前缀 */ + + private String imageManagerInsertAlign = "none"; /* 插入的图片浮动方式 */ + + private String[] imageManagerAllowFiles = new String[]{".png", ".jpg", ".jpeg", ".gif", ".bmp"}; /* 列出的文件类型 */ + + /* 列出指定目录下的文件 */ + private String fileManagerActionName = "listfile";/* 执行文件管理的action名称 */ + + private String fileManagerListPath = "/upload/file/"; /* 指定要列出文件的目录 */ + + private String fileManagerUrlPrefix = WebUtils.getUeditorPrefix(); /* 文件访问路径前缀 */ + + private int fileManagerListSize = 20; /* 每次列出文件数量 */ + + /* 列出的文件类型 */ + private String fileManagerAllowFiles[] = new String[]{".png", ".jpg", ".jpeg", ".gif", ".bmp",".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4",".mp3", ".wav", ".mid",".rar", ".zip", ".tar", ".gz", ".7z",".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt"}; + + public String getImageActionName() { + return imageActionName; + } + + public void setImageActionName(String imageActionName) { + this.imageActionName = imageActionName; + } + + public String getImageFieldName() { + return imageFieldName; + } + + public void setImageFieldName(String imageFieldName) { + this.imageFieldName = imageFieldName; + } + + public long getImageMaxSize() { + return imageMaxSize; + } + + public void setImageMaxSize(long imageMaxSize) { + this.imageMaxSize = imageMaxSize; + } + + public String[] getImageAllowFiles() { + return imageAllowFiles; + } + + public void setImageAllowFiles(String[] imageAllowFiles) { + this.imageAllowFiles = imageAllowFiles; + } + + public boolean isImageCompressEnable() { + return imageCompressEnable; + } + + public void setImageCompressEnable(boolean imageCompressEnable) { + this.imageCompressEnable = imageCompressEnable; + } + + public int getImageCompressBorder() { + return imageCompressBorder; + } + + public void setImageCompressBorder(int imageCompressBorder) { + this.imageCompressBorder = imageCompressBorder; + } + + public String getImageInsertAlign() { + return imageInsertAlign; + } + + public void setImageInsertAlign(String imageInsertAlign) { + this.imageInsertAlign = imageInsertAlign; + } + + public String getImageUrlPrefix() { + return imageUrlPrefix; + } + + public void setImageUrlPrefix(String imageUrlPrefix) { + this.imageUrlPrefix = imageUrlPrefix; + } + + public String getImagePathFormat() { + return imagePathFormat; + } + + public void setImagePathFormat(String imagePathFormat) { + this.imagePathFormat = imagePathFormat; + } + + public String[] getCatcherLocalDomain() { + return catcherLocalDomain; + } + + public void setCatcherLocalDomain(String[] catcherLocalDomain) { + this.catcherLocalDomain = catcherLocalDomain; + } + + public String getCatcherActionName() { + return catcherActionName; + } + + public void setCatcherActionName(String catcherActionName) { + this.catcherActionName = catcherActionName; + } + + public String getCatcherFieldName() { + return catcherFieldName; + } + + public void setCatcherFieldName(String catcherFieldName) { + this.catcherFieldName = catcherFieldName; + } + + public String getCatcherPathFormat() { + return catcherPathFormat; + } + + public void setCatcherPathFormat(String catcherPathFormat) { + this.catcherPathFormat = catcherPathFormat; + } + + public long getCatcherMaxSize() { + return catcherMaxSize; + } + + public void setCatcherMaxSize(long catcherMaxSize) { + this.catcherMaxSize = catcherMaxSize; + } + + public String[] getCatcherAllowFiles() { + return catcherAllowFiles; + } + + public void setCatcherAllowFiles(String[] catcherAllowFiles) { + this.catcherAllowFiles = catcherAllowFiles; + } + + public String getFileActionName() { + return fileActionName; + } + + public void setFileActionName(String fileActionName) { + this.fileActionName = fileActionName; + } + + public String getFileFieldName() { + return fileFieldName; + } + + public void setFileFieldName(String fileFieldName) { + this.fileFieldName = fileFieldName; + } + + public String getFilePathFormat() { + return filePathFormat; + } + + public void setFilePathFormat(String filePathFormat) { + this.filePathFormat = filePathFormat; + } + + public String getFileUrlPrefix() { + return fileUrlPrefix; + } + + public void setFileUrlPrefix(String fileUrlPrefix) { + this.fileUrlPrefix = fileUrlPrefix; + } + + public long getFileMaxSize() { + return fileMaxSize; + } + + public void setFileMaxSize(long fileMaxSize) { + this.fileMaxSize = fileMaxSize; + } + + public String[] getFileAllowFiles() { + return fileAllowFiles; + } + + public void setFileAllowFiles(String[] fileAllowFiles) { + this.fileAllowFiles = fileAllowFiles; + } + + public String getImageManagerActionName() { + return imageManagerActionName; + } + + public void setImageManagerActionName(String imageManagerActionName) { + this.imageManagerActionName = imageManagerActionName; + } + + public String getImageManagerListPath() { + return imageManagerListPath; + } + + public void setImageManagerListPath(String imageManagerListPath) { + this.imageManagerListPath = imageManagerListPath; + } + + public int getImageManagerListSize() { + return imageManagerListSize; + } + + public void setImageManagerListSize(int imageManagerListSize) { + this.imageManagerListSize = imageManagerListSize; + } + + public String getImageManagerUrlPrefix() { + return imageManagerUrlPrefix; + } + + public void setImageManagerUrlPrefix(String imageManagerUrlPrefix) { + this.imageManagerUrlPrefix = imageManagerUrlPrefix; + } + + public String getImageManagerInsertAlign() { + return imageManagerInsertAlign; + } + + public void setImageManagerInsertAlign(String imageManagerInsertAlign) { + this.imageManagerInsertAlign = imageManagerInsertAlign; + } + + public String[] getImageManagerAllowFiles() { + return imageManagerAllowFiles; + } + + public void setImageManagerAllowFiles(String[] imageManagerAllowFiles) { + this.imageManagerAllowFiles = imageManagerAllowFiles; + } + + public String getFileManagerActionName() { + return fileManagerActionName; + } + + public void setFileManagerActionName(String fileManagerActionName) { + this.fileManagerActionName = fileManagerActionName; + } + + public String getFileManagerListPath() { + return fileManagerListPath; + } + + public void setFileManagerListPath(String fileManagerListPath) { + this.fileManagerListPath = fileManagerListPath; + } + + public String getFileManagerUrlPrefix() { + return fileManagerUrlPrefix; + } + + public void setFileManagerUrlPrefix(String fileManagerUrlPrefix) { + this.fileManagerUrlPrefix = fileManagerUrlPrefix; + } + + public int getFileManagerListSize() { + return fileManagerListSize; + } + + public void setFileManagerListSize(int fileManagerListSize) { + this.fileManagerListSize = fileManagerListSize; + } + + public String[] getFileManagerAllowFiles() { + return fileManagerAllowFiles; + } + + public void setFileManagerAllowFiles(String[] fileManagerAllowFiles) { + this.fileManagerAllowFiles = fileManagerAllowFiles; + } + + + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/provider/ExceptionResultProvider.java b/magic-boot/src/main/java/org/ssssssss/magicboot/provider/ExceptionResultProvider.java new file mode 100644 index 0000000..59a0177 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/provider/ExceptionResultProvider.java @@ -0,0 +1,28 @@ +package org.ssssssss.magicboot.provider; + +import cn.dev33.satoken.exception.DisableLoginException; +import org.springframework.stereotype.Component; +import org.ssssssss.magicapi.core.context.RequestEntity; +import org.ssssssss.magicapi.core.interceptor.ResultProvider; +import org.ssssssss.magicapi.core.model.JsonBean; + +@Component +public class ExceptionResultProvider implements ResultProvider { + + @Override + public Object buildResult(RequestEntity requestEntity, int code, String message, Object data) { + long timestamp = System.currentTimeMillis(); + return new JsonBean<>(code, message, data, (int) (timestamp - requestEntity.getRequestTime())); + } + + @Override + public Object buildException(RequestEntity requestEntity, Throwable throwable) { + if(throwable.getCause() instanceof DisableLoginException){ + return buildResult(requestEntity, 500, "此账号已被临时封禁,请联系管理员"); + } + if(throwable.getCause()!=null ){ + return buildResult(requestEntity, 500, String.valueOf(throwable.getCause())); + } + return buildResult(requestEntity, 500, "系统内部出现错误"); + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/utils/AddressUtil.java b/magic-boot/src/main/java/org/ssssssss/magicboot/utils/AddressUtil.java new file mode 100644 index 0000000..3ac7140 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/utils/AddressUtil.java @@ -0,0 +1,22 @@ +package org.ssssssss.magicboot.utils; + +import cn.hutool.core.net.Ipv4Util; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; + +public class AddressUtil { + + public static String getAddress(String ip){ + try { + if(Ipv4Util.isInnerIP(ip)){ + return "内网IP"; + } + return JSONUtil.parseObj(HttpUtil.get("https://whois.pconline.com.cn/ipJson.jsp?json=true&ip=" + ip)).getStr("addr"); + }catch(IllegalArgumentException e){ + return "内网IP"; + }catch(Exception e){ + return "未知"; + } + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/utils/FileUtils.java b/magic-boot/src/main/java/org/ssssssss/magicboot/utils/FileUtils.java new file mode 100644 index 0000000..1e370e0 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/utils/FileUtils.java @@ -0,0 +1,55 @@ +package org.ssssssss.magicboot.utils; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdUtil; +import org.springframework.web.multipart.MultipartFile; +import org.ssssssss.magicboot.model.Global; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class FileUtils { + + public static Map createFileAttr(String originalFilename){ + String ret = Global.USER_FILES_BASE_URL + DateUtil.today() + "/" + IdUtil.simpleUUID() + "/"; + String suffix = FileUtil.getSuffix(originalFilename); + Map map = new HashMap<>(); + map.put("ret", ret); + map.put("filePath", ret.substring(1) + originalFilename); + map.put("fileNames", originalFilename); + map.put("suffix", suffix); + return map; + } + + public static Map saveFile(MultipartFile file) { + Map fileAttr = createFileAttr(file.getOriginalFilename()); + String fileNames = fileAttr.get("fileNames"); + String ret = fileAttr.get("ret"); + String suffix = fileAttr.get("suffix"); + String realPath = Global.getUserFilesBaseDir() + ret; + FileUtil.mkdir(FileUtil.normalize(realPath)); + File tempFile = new File(realPath + fileNames); + if (!tempFile.getParentFile().exists()) { + tempFile.getParentFile().mkdir(); + } + try { + if (!tempFile.exists()) { + file.transferTo(tempFile); + } + } catch (IOException e) { + e.printStackTrace(); + } + Map params = new HashMap<>(); + params.put("state", "SUCCESS"); + params.put("original", file.getName()); + params.put("name", file.getName()); + params.put("size", file.getSize() + ""); + params.put("type", suffix); + params.put("url", fileAttr.get("filePath")); + return params; + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/utils/WebUtils.java b/magic-boot/src/main/java/org/ssssssss/magicboot/utils/WebUtils.java new file mode 100644 index 0000000..7e98059 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/utils/WebUtils.java @@ -0,0 +1,25 @@ +package org.ssssssss.magicboot.utils; + +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.ssssssss.magicboot.model.Global; + +import javax.servlet.http.HttpServletRequest; + +public class WebUtils { + + public static HttpServletRequest getHttpServletRequest(){ + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } + + public static String getContextUrl() { + HttpServletRequest request = getHttpServletRequest(); + StringBuffer url = request.getRequestURL(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(request.getServletContext().getContextPath()).append("/").toString(); + } + + public static String getUeditorPrefix(){ + return getContextUrl(); + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/APIUtil.java b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/APIUtil.java new file mode 100644 index 0000000..e9ba0e3 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/APIUtil.java @@ -0,0 +1,84 @@ +package org.ssssssss.magicboot.zdyutils; + +import com.alibaba.fastjson.JSONObject; +import org.ssssssss.magicboot.fxapi.HttpClientResult; +import org.ssssssss.magicboot.fxapi.HttpClientUtils; + +public class APIUtil { + public static void endApi(String dept, Boolean sendFlag, String syn_type, + String dataId, String nameData, String endtime, + String mark_id, StringBuffer stringBuffer) { + JSONObject jsonObjectData = new JSONObject(); + jsonObjectData.put("log_type", dept); //业务类型 + jsonObjectData.put("log_status", !sendFlag);//同步状态 0同步成功 1同步失败 + jsonObjectData.put("syn_type", syn_type);//同步类型 0新增 1修改 2删除 + jsonObjectData.put("data_id", dataId);//数据id + jsonObjectData.put("data_name", nameData);//数据名称 + jsonObjectData.put("mark", endtime);//标识 + jsonObjectData.put("res_body", "同步成功");//返回值 + jsonObjectData.put("mark_id", mark_id);//目标对象id + if (sendFlag) { + jsonObjectData.put("res_body", stringBuffer.toString());//返回值 + } + //回写 + MagicApi.saveDataLog(jsonObjectData); + + } + public static void endApi(String dept, Boolean sendFlag, String syn_type, + String dataId, String nameData, String endtime, + String mark_id, StringBuffer stringBuffer, + String sendUrl, String sendBody, String sendRes) { + JSONObject jsonObjectData = new JSONObject(); + jsonObjectData.put("log_type", dept); //业务类型 + jsonObjectData.put("log_status", !sendFlag);//同步状态 0同步成功 1同步失败 + jsonObjectData.put("syn_type", syn_type);//同步类型 0新增 1修改 2删除 + jsonObjectData.put("data_id", dataId);//数据id + jsonObjectData.put("data_name", nameData);//数据名称 + jsonObjectData.put("mark", endtime);//标识 + jsonObjectData.put("res_body", "同步成功");//返回值 + jsonObjectData.put("mark_id", mark_id);//目标对象id + jsonObjectData.put("send_url", sendUrl);//返回值 + jsonObjectData.put("send_body", sendBody);//返回值 + jsonObjectData.put("send_res", sendRes);//返回值 + if (sendFlag) { + jsonObjectData.put("res_body", stringBuffer.toString());//返回值 + } + //回写 + MagicApi.saveDataLog(jsonObjectData); + + } + + public static void main(String[] args) { + APIUtil.kcLog( "1", "1", "1","1"); + } + public static void kcLog(String stock_code, String pro_code, + String batch, String qty) { + JSONObject apiLog = new JSONObject(); + apiLog.put("stock_code", stock_code); // + apiLog.put("pro_code", pro_code);// + apiLog.put("batch", batch);// + apiLog.put("qty", qty);// + //回写 + MagicApi.saveApiDataLog(apiLog); + } + + /** + * 请求分享接口 + * + * @param Xkjson + */ + public static String FXApiObj(String url, String Xkjson) { + HttpClientResult rtn = null; + boolean flag = true; + try { + rtn = HttpClientUtils.doPostJson(url, Xkjson); + return rtn.getContent(); + } catch (Exception e) { + flag = false; + } + //APIUtil.apiLog(url, Xkjson, rtn.toString(), flag, JsonData.strDataId, ""); + return null; + } + + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/FXHTTP.java b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/FXHTTP.java new file mode 100644 index 0000000..c30be19 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/FXHTTP.java @@ -0,0 +1,1034 @@ +package org.ssssssss.magicboot.zdyutils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.context.XxlJobHelper; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.ssssssss.magicboot.fxapi.XKTokenAccess; +import org.ssssssss.magicboot.fxapi.model.CrmFXApiParam; +import org.ssssssss.magicboot.zdyutils.APIUtil; +import org.ssssssss.magicboot.zdyutils.FXTIC; +import org.ssssssss.magicboot.zdyutils.GcjJson; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; + +public class FXHTTP { + private final Logger log = LoggerFactory.getLogger(FXHTTP.class); + /** + * 插入信息 V2 + * + * @param Xkjson + */ + public String saveV2ZDYObj(JSONObject Xkjson) { + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/create"; + return APIUtil.FXApiObj(url, Xkjson.toJSONString()); + } + public String saveV2BOM(JSONObject Xkjson) { + String url = "https://open.fxiaoke.com/cgi/crm/v2/special/bom/saveBomTree"; + return APIUtil.FXApiObj(url, Xkjson.toJSONString()); + } + /** + * 修改同步字段 + * + * @param id + * @param state 未同步 已同步 同步失败 + * @param code 金蝶编码 + */ + public String invalid(Boolean urlFlag,String methodName, String apiName, String id) { + JSONObject jsonObject = new JSONObject(); + + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\",\n" + + "\t\"data\": {\n" + + "\t\t\t\"dataObjectApiName\": \"" + apiName + "\",\n" + + "\t\t\t\"object_data_id\": \"" + id + "\",\n" + + "\t}\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/invalid"; + if(urlFlag){ + url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/invalid"; + } + System.out.println(methodName+"-作废"+saveJSON); + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + //请求接口 + String result= APIUtil.FXApiObj(url, SAVEJSON.toString()); + System.out.println(methodName+"-作废返回"+result); + return result; + } + /** + * 插入信息 V2 + * + * @param Xkjson + */ + public String updateV2ZDYObj(JSONObject Xkjson) { + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/update"; + return APIUtil.FXApiObj(url, Xkjson.toJSONString()); + } + + /** + * 插入信息 V2 + * + * @param Xkjson + */ + public String saveV2Obj(JSONObject Xkjson) { + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/create"; + return APIUtil.FXApiObj(url, Xkjson.toJSONString()); + } + + /** + * 插入信息 V2 + * + * @param Xkjson + */ + public String updateV2Obj(JSONObject Xkjson) { + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/update"; + return APIUtil.FXApiObj(url, Xkjson.toJSONString()); + } + /** + * 查询未同步的纷享信息 + */ + public JSONObject getQueryProductCategory(String methodName) { + log.info(methodName + "-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + //获取时间戳 + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t},\n" + + " \"corpId\": \"" + xktonken.getCorpAccessToken().getCorpId() + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/data/queryProductCategory"; + log.info(methodName + "-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + log.info(methodName + "-请求json-" + SAVEJSON); + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + /** + * 查详情 + */ + public JSONObject getSynDataGetObj(String methodName, String apiName, String id) { + XKTokenAccess xktonken = new XKTokenAccess(); + //获取时间戳 + String saveJSON = "{\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\",\n" + + "\t\"data\": {\n" + + "\t\t\t\"dataObjectApiName\": \"" + apiName + "\",\n" + + "\t\t\t\"objectDataId\": \"" + id + "\"\n" + + "\t}\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/get"; + String jsonStr = APIUtil.FXApiObj(url, saveJSON); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + + /** + * 自定义详情 + */ + public JSONObject getSynDataZDYGetObj(String methodName, String apiName, String id) { + XKTokenAccess xktonken = new XKTokenAccess(); + //获取时间戳 + String saveJSON = "{\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\",\n" + + "\t\"data\": {\n" + + "\t\t\t\"dataObjectApiName\": \"" + apiName + "\",\n" + + "\t\t\t\"objectDataId\": \"" + id + "\"\n" + + "\t}\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/get"; + String jsonStr = APIUtil.FXApiObj(url, saveJSON); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + + /** + * 查询未同步的纷享信息 + */ + public String getDataBYKH(String apiName, String fieldName, String fieldValue, String jsonPath) { + XKTokenAccess xktonken = new XKTokenAccess(); + String str = null; + //获取时间戳 + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"" + fieldName + "\",\n" + + "\t\t\t\t\"field_values\": [\"" + fieldValue + "\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + System.out.println("-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println("-请求json-" + SAVEJSON); + + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + + if (SAVEJSON1 != null && "0".equals(SAVEJSON1.getString("errorCode"))) { + try { + str = (String) GcjJson.getNodeValue(SAVEJSON1, jsonPath); + } catch (Exception e) { + e.printStackTrace(); + } + } + return str; + } + + /** + * 查询未同步的纷享信息 + */ + public String getDataBYKHID(String apiName, String fieldName, String fieldValue, String fieldName2, String fieldValue2, String jsonPath) { + XKTokenAccess xktonken = new XKTokenAccess(); + String str = null; + //获取时间戳 + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [" + + "{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"" + fieldName + "\",\n" + + "\t\t\t\t\"field_values\": [\"" + fieldValue + "\"]\n" + + "\t\t\t}," + + "{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"" + fieldValue2 + "\",\n" + + "\t\t\t\t\"field_values\": [\"" + fieldName2 + "\"]\n" + + "\t\t\t}" + + "]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + System.out.println("-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println("-请求json-" + SAVEJSON); + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + + if (SAVEJSON1 != null && "0".equals(SAVEJSON1.getString("errorCode"))) { + try { + str = (String) GcjJson.getNodeValue(SAVEJSON1, jsonPath); + } catch (Exception e) { + e.printStackTrace(); + } + } + return str; + } + + /** + * 查询未同步的纷享信息 + */ + public String getDataBYID(String apiName, String fieldName, String fieldValue, String jsonPath) { + try { + Thread.sleep(100); + } catch (Exception e) { + e.printStackTrace(); + } + XKTokenAccess xktonken = new XKTokenAccess(); + String str = null; + //获取时间戳 + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"" + fieldName + "\",\n" + + "\t\t\t\t\"field_values\": [\"" + fieldValue + "\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + System.out.println("-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println("-请求json-" + SAVEJSON); + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + + if (SAVEJSON1 != null && "0".equals(SAVEJSON1.getString("errorCode"))) { + try { + if (StringUtils.isNoneBlank(jsonPath)) { + if(SAVEJSON1.getJSONObject("data")!=null && SAVEJSON1.getJSONObject("data").getInteger("total")<1){ + return (String) GcjJson.getNodeValue(SAVEJSON1, jsonPath); + } + return GcjJson.getNodeValue(SAVEJSON1, jsonPath).toString(); + } + return SAVEJSON1.toJSONString(); + + + } catch (Exception e) { + e.printStackTrace(); + } + } + return str; + } + + /** + * 查询未同步的纷享信息 + */ + public String getDataDYHS(JSONObject Xkjson) { + String str = ""; + //获取时间戳 + String url = "https://open.fxiaoke.com/cgi/crm/v2/special/function"; + System.out.println("-请求url-" + url); + System.out.println("-请求json-" + Xkjson); + String jsonStr = APIUtil.FXApiObj(url, Xkjson.toJSONString()); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + + if (SAVEJSON1 != null && "1".equals(SAVEJSON1.getJSONObject("data").getString("code"))) { + try { + str = SAVEJSON1.getJSONObject("data").getJSONObject("data").toJSONString(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + return str; + } + + /** + * 查询未同步的纷享信息 + */ + public JSONObject getDataBYIDRES(String apiName, String fieldName, String fieldValue, String jsonPath) { + XKTokenAccess xktonken = new XKTokenAccess(); + JSONObject str = null; + //获取时间戳 + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"" + fieldName + "\",\n" + + "\t\t\t\t\"field_values\": [\"" + fieldValue + "\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + System.out.println("-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println("-请求json-" + SAVEJSON); + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + + if (SAVEJSON1 != null && "0".equals(SAVEJSON1.getString("errorCode"))) { + try { + return SAVEJSON1; + } catch (Exception e) { + e.printStackTrace(); + } + } + return str; + } + + /** + * 查询未同步的纷享信息 + */ + public String getDataZDYBYID(String apiName, String fieldName, String fieldValue, String jsonPath) { + XKTokenAccess xktonken = new XKTokenAccess(); + String str = null; + //获取时间戳 + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"" + fieldName + "\",\n" + + "\t\t\t\t\"field_values\": [\"" + fieldValue + "\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + System.out.println("-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println("-请求json-" + SAVEJSON); + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + + if (SAVEJSON1 != null && "0".equals(SAVEJSON1.getString("errorCode"))) { + try { + if (StringUtils.isNoneBlank(jsonPath)) { + if(SAVEJSON1.getJSONObject("data")!=null && SAVEJSON1.getJSONObject("data").getInteger("total")<1){ + return (String) GcjJson.getNodeValue(SAVEJSON1, jsonPath); + } + return GcjJson.getNodeValue(SAVEJSON1, jsonPath).toString(); + } + return SAVEJSON1.toJSONString(); + + + } catch (Exception e) { + e.printStackTrace(); + } + } + return str; + } + +// public static void main(String[] args) { +// List paramList = Arrays.asList( +// new CrmFXApiParam("=", "id", "123"), +// new CrmFXApiParam("!=", "name", "张三") +// ); +// new FXHTTP().getSynNewDataObj(false,"","",paramList); +// } + /** + * 查询未同步的纷享信息 + */ + public JSONObject getSynNewDataObj(Boolean urlFlag,String methodName, String apiName, List CrmFXApiParam) { + System.out.println(methodName + "-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + // 构建json + JSONObject obj = new JSONObject(); + LinkedHashMap map = new LinkedHashMap(); + map.put("body.corpId", FXTIC.CORPID); + map.put("body.corpAccessToken", xktonken.getCorpAccessToken().getCorpAccessToken()); + map.put("body.currentOpenUserId", FXTIC.CURRENTOPENUSERID); + + map.put("body.data.search_query_info.offset", 0); + map.put("body.data.search_query_info.limit", 999); + map.put("body.data.search_query_info.orders[0].fieldName", "create_time"); + map.put("body.data.search_query_info.orders[0].isAsc", "true"); + + for (int i = 0; i < CrmFXApiParam.size(); i++) { + map.put("body.data.search_query_info.filters["+i+"].operator", CrmFXApiParam.get(i).getOperator()); + map.put("body.data.search_query_info.filters["+i+"].field_name", CrmFXApiParam.get(i).getFieldKey()); + map.put("body.data.search_query_info.filters["+i+"].field_values", CrmFXApiParam.get(i).getFieldValue()); + } + + + map.put("body.data.dataObjectApiName", apiName); + + try { + for (Object key : map.keySet()) { + GcjJson.setNodeValue(obj, key.toString(), map.get(key)); + } + } catch (Exception e) { + + } + + System.out.println(obj); + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + if(urlFlag){ + url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + } + System.out.println(methodName + "-请求url-" + url); + System.out.println(methodName + "-请求json-" + obj.toJSONString()); + String jsonStr= APIUtil.FXApiObj(url,obj.toJSONString()); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + + /** + * 查询未同步的纷享信息 + */ + public JSONObject getSynDataObj(String methodName, String apiName, String fieldName, String fieldValue) { + System.out.println(methodName + "-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + //获取时间戳 + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 999,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"fieldName\": \"create_time\",\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"" + fieldName + "\",\n" + + "\t\t\t\t\"field_values\": [\"" + fieldValue + "\"]\n" + + "\t\t\t},{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"life_status\",\n" + + "\t\t\t\t\"field_values\": [\"normal\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + System.out.println(methodName + "-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName + "-请求json-" + SAVEJSON); + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + /** + * 查询未同步的纷享信息 + */ + public JSONObject getSynDataZDYObj(String methodName, String apiName, String fieldName, String fieldValue) { + //System.out.println(methodName + "-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + //获取时间戳 + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 999,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"fieldName\": \"create_time\",\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"" + fieldName + "\",\n" + + "\t\t\t\t\"field_values\": [\"" + fieldValue + "\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + System.out.println(methodName + "-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName + "-请求json-" + SAVEJSON); + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + /** + * 获取销客对象描述 + */ + //apiNmae+id + public JSONObject getXKName(String apiNmae) { + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"apiName\": \"" + apiNmae + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + System.out.println(Xkjson); + + String jsonStr = APIUtil.FXApiObj(FXTIC.URL_DESCRIBE, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + + /** + * 查询未同步的纷享信息 + */ + public JSONObject getSynDataOrderObj(String methodName, String apiName, String fieldName, String fieldValue) { + System.out.println(methodName + "-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + long current = System.currentTimeMillis(); + long daytime2 = current - (current + TimeZone.getDefault().getRawOffset()) % (1000 * 3600 * 3); + //获取时间戳 + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 999,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"fieldName\": \"create_time\",\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"" + fieldName + "\",\n" + + "\t\t\t\t\"field_values\": [\"" + fieldValue + "\"]\n" + + "\t\t\t}" + + "{\n" + + "\t\t\t\t\"operator\": \"GT\",\n" + + "\t\t\t\t\"field_name\": \"last_modified_time\",\n" + + "\t\t\t\t\"field_values\": [\"" + daytime2 + "\"]\n" + + "\t\t\t}\n" + + "]\n" + + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + System.out.println(methodName + "-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName + "-请求json-" + SAVEJSON); + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + + + return SAVEJSON1; + } + + /** + * 查询未同步的纷享信息 + */ + public JSONObject getSynDataDateObj(String methodName, String apiName, String fieldName, String fieldValue) { + System.out.println(methodName + "-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + //获取时间戳 + long current = System.currentTimeMillis(); + long daytime2 = current - (1000 * 3600 * 1); + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"fieldName\": \"create_time\",\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"GT\",\n" + + "\t\t\t\t\"field_name\": \"last_modified_time\",\n" + + "\t\t\t\t\"field_values\": [\"" + daytime2 + "\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + System.out.println(methodName + "-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName + "-请求json-" + SAVEJSON); + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + + public JSONObject getCrmFileData(String crmId) { + + XKTokenAccess xktonken = new XKTokenAccess(); + + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"postId\": \""+ crmId +"\",\n" + + "\t\t\"api_name\": \"CstmCtrl_n4Bw6__c\",\n" + + "\t\t\t\"parameters\": [{\n" + + "\t\t\t\t\"name\": \"crmId\",\n" + + "\t\t\t\t\"type\": \"String\",\n" + + "\t\t\t\t\"value\": \"" + crmId + "\"\n" + + "\t\t\t}]\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/special/function"; + System.out.println("-附件查询请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println("-附件查询请求json-" + SAVEJSON); + String jsonStr = APIUtil.FXApiObj(url, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + + + /** + * 查询未同步的纷享信息 + */ + public JSONObject getSynDataZDYDateObj(String methodName, String apiName, String fieldName, String fieldValue) { + System.out.println(methodName + "-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + //获取时间戳 + long current = System.currentTimeMillis(); + long daytime2 = current - (current + TimeZone.getDefault().getRawOffset()) % (1000 * 3600 * 4); + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 999,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"fieldName\": \"create_time\",\n" + + "\t\t\t\t\"isAsc\": true\n" + + "\t\t\t}],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"GT\",\n" + + "\t\t\t\t\"field_name\": \"last_modified_time\",\n" + + "\t\t\t\t\"field_values\": [\"" + daytime2 + "\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + System.out.println(methodName + "-请求url-" + FXTIC.URL_FX_ZDYQUERY); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName + "-请求json-" + SAVEJSON); + + String jsonStr = APIUtil.FXApiObj(FXTIC.URL_FX_ZDYQUERY, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + + /** + * 查询未同步的纷享信息 + */ + public JSONObject getZDYSynDataObj(String methodName, String apiName, String fieldName, String fieldValue) { + System.out.println(methodName + "-查询未同步的纷享信息 "); + XKTokenAccess xktonken = new XKTokenAccess(); + String Xkjson = "{\n" + + "\t\n" + + "\t\"data\": {\n" + + "\t\t\"search_query_info\": {\n" + + "\t\t\t\"offset\": 0,\n" + + "\t\t\t\"limit\": 20,\n" + + "\t\t\t\"orders\": [{\n" + + "\t\t\t\t\"isAsc\": false\n" + + "\t\t\t}],\n" + +// "\t\t\t\"fieldProjection\": [\"life_status\"],\n" + + "\t\t\t\"filters\": [{\n" + + "\t\t\t\t\"operator\": \"EQ\",\n" + + "\t\t\t\t\"field_name\": \"" + fieldName + "\",\n" + + "\t\t\t\t\"field_values\": [\"" + fieldValue + "\"]\n" + + "\t\t\t}]\n" + + "\t\t},\n" + + "\t\t\"dataObjectApiName\": \"" + apiName + "\"\n" + + "\t},\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/query"; + System.out.println(methodName + "-请求url-" + url); + JSONObject SAVEJSON = JSON.parseObject(Xkjson); + System.out.println(methodName + "-请求json-" + SAVEJSON); + + String jsonStr = APIUtil.FXApiObj(FXTIC.URL_FX_ZDYQUERY, Xkjson); + JSONObject SAVEJSON1 = JSON.parseObject(jsonStr); + return SAVEJSON1; + } + + /** + * 修改同步字段 + * + * @param id + * @param state 未同步 已同步 同步失败 + * @param code 金蝶编码 + */ + public void upSynField(String methodName, String apiName, String fieldName, String id, String state) { + System.out.println(methodName + "-修改同步字段 "); + JSONObject jsonObject = new JSONObject(); + + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\",\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \"" + apiName + "\",\n" + + "\t\t\t\"_id\": \"" + id + "\",\n" + + "\t\t\t\"" + fieldName + "\": \"" + state + "\"\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/data/update"; + System.out.println(saveJSON); + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + //请求接口 + APIUtil.FXApiObj(FXTIC.URL_FX_UPDATE, SAVEJSON.toString()); + } + + /** + * 修改订单明细 + */ + public void upSynDDFieldParam(String methodName, String apiName, String id, Map paramMap) { + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\",\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \"" + apiName + "\",\n" + + "\t\t\t\"_id\": \"" + id + "\"\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + for (String key : paramMap.keySet()) { + SAVEJSON.getJSONObject("data").getJSONObject("object_data").put(key, paramMap.get(key)); + } + System.out.println("修改json" + SAVEJSON); + + //请求接口 + APIUtil.FXApiObj(FXTIC.URL_FX_UPDATE, SAVEJSON.toString()); + } + + /** + * 修改同步字段 + * + * @param id + * @param state 未同步 已同步 同步失败 + * @param code 金蝶编码 + */ + public void upSynFieldParam(String methodName, String apiName, String id, Map paramMap) { + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\",\n" + + " \"triggerWorkFlow\": false,\n" + + " \"triggerApprovalFlow\": false,\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \"" + apiName + "\",\n" + + "\t\t\t\"_id\": \"" + id + "\"\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + for (String key : paramMap.keySet()) { + SAVEJSON.getJSONObject("data").getJSONObject("object_data").put(key, paramMap.get(key)); + } + System.out.println("修改json" + SAVEJSON); + XxlJobHelper.log( "--修改json---"+ SAVEJSON); + log.info( "--修改json---"+ SAVEJSON); + //请求接口 + + String strss= APIUtil.FXApiObj(FXTIC.URL_FX_UPDATE, SAVEJSON.toString()); + log.info("修改" + strss); + } + + public void upSynFieldParamcdx(String methodName, String apiName, String id, Map paramMap, Map paramMapcdx) { + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\",\n" + + " \"triggerWorkFlow\": false,\n" + + " \"triggerApprovalFlow\": false,\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \"" + apiName + "\",\n" + + "\t\t\t\"_id\": \"" + id + "\"\n" + + "\t\t},\n" + + "\t\t\"details\": {\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + for (String key : paramMap.keySet()) { + SAVEJSON.getJSONObject("data").getJSONObject("object_data").put(key, paramMap.get(key)); + } + + for (String key : paramMapcdx.keySet()) { + SAVEJSON.getJSONObject("data").getJSONObject("details").put(key, paramMapcdx.get(key)); + } + System.out.println("修改json" + SAVEJSON); + XxlJobHelper.log( "--修改json---"+ SAVEJSON); + log.info( "--修改json---"+ SAVEJSON); + //请求接口 + + String strss= APIUtil.FXApiObj(FXTIC.URL_FX_UPDATE, SAVEJSON.toString()); + log.info("修改" + strss); + } + + /** + * 解锁 + * + * @param id + * @param state 未同步 已同步 同步失败 + * @param code 金蝶编码 + */ + public void lock(boolean state, String id, String apiName) { + XKTokenAccess xktonken = new XKTokenAccess(); + + String Xkjson = "{\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\",\n" + + + " \"data\":{\n" + + " \n" + + " \"dataObjectApiName\":\"" + apiName + "\",\n" + + " \"dataIds\": [\n" + + " \"" + id + "\"\n" + + " ],\n" + + " \"detailObjStrategy\": 1\n" + + " \n" + + " }\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/crm/v2/object/unlock"; + if (state) { + url = "https://open.fxiaoke.com/cgi/crm/v2/object/lock"; + } + //请求接口 + APIUtil.FXApiObj(url, Xkjson); + } + + /** + * 修改同步字段-成功 + * + * @param id + * @param state 未同步 已同步 同步失败 + * @param code 金蝶编码 + */ + public void upSynZDYFieldParam(String methodName, String apiName, String id, Map paramMap) { + XKTokenAccess xktonken = new XKTokenAccess(); + String saveJSON = "{\n" + + " \"corpId\": \"" + FXTIC.CORPID + "\",\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"currentOpenUserId\": \"" + FXTIC.CURRENTOPENUSERID + "\",\n" + + " \"triggerWorkFlow\": false,\n" + + " \"triggerApprovalFlow\": false,\n" + + "\t\"data\": {\n" + + "\t\t\"object_data\": {\n" + + "\t\t\t\"dataObjectApiName\": \"" + apiName + "\",\n" + + + "\t\t\t\"_id\": \"" + id + "\"\n" + + "\t\t}\n" + + "\t}\n" + + "}"; + + JSONObject SAVEJSON = JSON.parseObject(saveJSON); + for (String key : paramMap.keySet()) { + SAVEJSON.getJSONObject("data").getJSONObject("object_data").put(key, paramMap.get(key)); + } + System.out.println("zdyxiuga" + SAVEJSON); + //请求接口 + APIUtil.FXApiObj(FXTIC.URL_FX_ZDYUP, SAVEJSON.toString()); + } + + public static void main(String[] args) { + new FXHTTP().sendMsg("1000", "失败原因,失败原因,失败原因,失败原因", "6422818e32c0df0001c842ab", "客户同步异常", "AccountObj"); + } + + //发送用户信息 + public void sendMsg(String userID, String content, String dataId, String title, String objDescApiName) { + System.out.println(("发送用户信息" + userID + "内容=" + content)); + if (content != null && content.equals("订单产品编号必填-1054")) { + content = "纷享销售订单未创建,请先创建销售订单"; + } + content = content.replaceAll("\"", "\\\\\""); + XKTokenAccess xktonken = new XKTokenAccess(); + + String Xkjson = "{\n" + + " \"corpAccessToken\": \"" + xktonken.getCorpAccessToken().getCorpAccessToken() + "\",\n" + + " \"corpId\":\"" + xktonken.getCorpAccessToken().getCorpId() + "\",\n" + + "\n" + + " \"toUser\":[\n" + + " \"" + userID + "\",\n" + + " \"" + FXTIC.CURRENTOPENUSERID + "\"\n" + + " ],\n" + + " \"msgType\":\"composite\",\n" + + " \"composite\":{\n" + + " \"head\":{\n" + + " \"title\":\"" + title + "\"\n" + + " },\n" + + " \"first\":{\n" + + " \"content\":\"失败原因\"\n" + + " },\n" + + " \"form\":[\n" + + " ],\n" + + " \"remark\":{\n" + + " \"content\":\"" + content + "\"\n" + + " },\n" + + " \"link\":{\n" + + " \"title\":\"详情\",\n" + + " \"url\":\"fs://CRM/udobj?{\\\"objDescApiName\\\":\\\"" + objDescApiName + "\\\",\\\"objDataId\\\":\\\"" + dataId + "\\\"}\"\n" + + " }\n" + + " }\n" + + "}"; + String url = "https://open.fxiaoke.com/cgi/message/send"; + //请求接口 + APIUtil.FXApiObj(url, Xkjson); + + } + + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/FXTIC.java b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/FXTIC.java new file mode 100644 index 0000000..38ae2b0 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/FXTIC.java @@ -0,0 +1,23 @@ +package org.ssssssss.magicboot.zdyutils; + +public class FXTIC { + // + public static String URL_FX_CREATE="https://open.fxiaoke.com/cgi/crm/v2/data/create"; + public static String URL_FX_UPDATE="https://open.fxiaoke.com/cgi/crm/v2/data/update"; + public static String URL_FX_QUERY="https://open.fxiaoke.com/cgi/crm/v2/data/query"; + + public static String URL_FX_ZDYQUERY="https://open.fxiaoke.com/cgi/crm/custom/v2/data/query"; + public static String URL_FX_ZDYCR="https://open.fxiaoke.com/cgi/crm/custom/v2/data/create"; + public static String URL_FX_ZDYUP="https://open.fxiaoke.com/cgi/crm/custom/v2/data/update"; + //加锁 + public static String URL_FX_LOCK="https://open.fxiaoke.com/cgi/crm/v2/object/lock"; + //解锁 + public static String URL_FX_UNLOCK="https://open.fxiaoke.com/cgi/crm/v2/object/unlock"; + + public static String CURRENTOPENUSERID="FSUID_0097DB273ACDA67353E1C0BAB997D8AC"; + public static String CORPID="FSCID_79069F6B50BC5CCF704283C5DEFD5670"; + + public static String URL_DESCRIBE="https://open.fxiaoke.com/cgi/crm/v2/object/describe"; + + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/GcjJson.java b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/GcjJson.java new file mode 100644 index 0000000..a8628f3 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/GcjJson.java @@ -0,0 +1,172 @@ +package org.ssssssss.magicboot.zdyutils; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class GcjJson { + /** + * 获取节点值 + * @param jsonPath + * @return + * @throws Exception + */ + public static synchronized Object getNodeValue(JSONObject obj, String jsonPath) throws Exception { + String[] nodes = jsonPath.split("\\."); + + for (int i = 1; i < nodes.length; i++) { + if (obj != null) { + obj = getObj(obj, nodes[i]); + } + if ((i+1) == nodes.length) { + try { + return obj.get(nodes[i]); + } catch(Exception e) { + //return "JSONException:" + e.getMessage() + ", NodeString:" + obj.toString(); + return null; + } + } + } + return null; + } + /** + * 获取节点值 + * @param jsonPath + * @return + * @throws Exception + */ + public static synchronized String getNodeStrValue(JSONObject obj, String jsonPath) throws Exception { + String[] nodes = jsonPath.split("\\."); + + for (int i = 1; i < nodes.length; i++) { + if (obj != null) { + obj = getObj(obj, nodes[i]); + } + if ((i+1) == nodes.length) { + try { + return obj.get(nodes[i])+""; + } catch(Exception e) { + //return "JSONException:" + e.getMessage() + ", NodeString:" + obj.toString(); + return ""; + } + } + } + return ""; + } + /** + * 对节点进行解析 + * + * @param obj + * @param node + * @return + */ + private static JSONObject getObj(JSONObject obj, String node) { + try { + if(node.contains("[")) { + JSONArray arr = obj.getJSONArray(node.substring(0, node.indexOf("["))); + for(int i = 0; i < arr.size(); i++) { + if ((i + "").equals(node.substring(node.indexOf("["), node.indexOf("]")).replace("[", ""))) { + return arr.getJSONObject(i); + } + } + } else { + return obj.getJSONObject(node); + } + } catch(Exception e) { + return obj; + } + return null; + } + public static String detailString(JSONObject jsonp, String getValue, String unitlabasdal) { + JSONArray objUnit = new JSONArray(); + String unitlabal = ""; + objUnit = jsonp.getJSONObject("data").getJSONObject("describe").getJSONObject("fields").getJSONObject(getValue).getJSONArray("options"); + //循环遍历 获取id 对应的值 + for (int i = 0; i < objUnit.size(); i++) { + if (objUnit.getJSONObject(i).getString("value") != null && objUnit.getJSONObject(i).getString("value").equals(unitlabasdal)) { + unitlabal = objUnit.getJSONObject(i).getString("label"); + break; + } + } + return unitlabal; + } + public static String detailStrVal(JSONObject jsonp, String getValue, String unitlabasdal) { + JSONArray objUnit = new JSONArray(); + String unitlabal = ""; + objUnit = jsonp.getJSONObject("data").getJSONObject("describe").getJSONObject("fields").getJSONObject(getValue).getJSONArray("options"); + //循环遍历 获取id 对应的值 + for (int i = 0; i < objUnit.size(); i++) { + if (objUnit.getJSONObject(i).getString("label") != null && objUnit.getJSONObject(i).getString("label").equals(unitlabasdal)) { + unitlabal = objUnit.getJSONObject(i).getString("value"); + break; + } + } + return unitlabal; + } + public static synchronized void setNodeValue(JSONObject obj, String jsonPath, Object value) throws Exception { + String[] nodes = jsonPath.split("\\."); + for (int i = 1; i < nodes.length; i++) { + if ((i + 1) == nodes.length) { + try { + + if (nodes[i].contains("[")) { + String nodesIndexS=nodes[i]; + int leftIndex = nodesIndexS.indexOf("["); // 获取左中括号的位置 + int rightIndex = nodesIndexS.indexOf("]"); // 获取右中括号的位置 + int num =0; + if (leftIndex != -1 && rightIndex != -1) { + String numStr = nodesIndexS.substring(leftIndex + 1, rightIndex); // 截取中括号内的字符串 + num = Integer.parseInt(numStr); // 将数字字符串转换成int类型 + } + JSONArray jsonArray = obj.getJSONArray(nodes[i]); + if(jsonArray==null){ + jsonArray= new JSONArray(); + } + obj.put(nodes[i].replace("["+num+"]", ""), jsonArray); + jsonArray.add(value); + continue; + } + + obj.put(nodes[i], value); + } catch (Exception e) { + throw new Exception("Set value error:" + e.getMessage() + ", NodeString:" + obj.toString()); + } + } else { + + if (nodes[i].contains("[")) { + String[] parts = nodes[i].split("\\["); + String str=parts[1]; + String nodesIndexS=str.substring(0, str.length() - 1); + int num =Integer.valueOf(nodesIndexS); + + JSONArray jsonArray = obj.getJSONArray(parts[0]); + if(jsonArray==null){ + jsonArray= new JSONArray(); + } + JSONObject nextObj =null; + if(jsonArray.size()>num){ + nextObj = jsonArray.getJSONObject(num); + } + if(nextObj==null){ + nextObj = new JSONObject(); + nextObj.put(nodes[i + 1], nextObj); + jsonArray.add(nextObj); + }else{ + nextObj.put(nodes[i + 1], new JSONObject()); + } + obj.put(parts[0], jsonArray); + + obj = nextObj; + continue; + } + JSONObject nextObj = obj.getJSONObject(nodes[i]); + if (nextObj == null) { + nextObj = new JSONObject(); + obj.put(nodes[i], nextObj); + } + obj = nextObj; + } + } + } + +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/HttpSend.java b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/HttpSend.java new file mode 100644 index 0000000..44b6d2d --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/HttpSend.java @@ -0,0 +1,49 @@ +package org.ssssssss.magicboot.zdyutils; + +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; + +public class HttpSend { + public static synchronized String sendMagicGet(String url,String jsonPath){ + System.out.println(url); + try { + String obj = HttpRequest.get(url) + .timeout(130000) + .execute() + .body(); + JSONObject res = JSONObject.parseObject(obj); + if(res!=null && "200".equals(res.getString("code"))){ + if(StringUtils.isNoneBlank(jsonPath)){ + return (String) GcjJson.getNodeValue(res,jsonPath); + } + return obj; + }else{ + System.out.println("Magic:"+url); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + public static synchronized String sendMagicPost(String url,JSONObject jsonPath){ + try { + String obj = HttpRequest.post(url) + .timeout(30000) + .form(jsonPath) + .execute() + .body(); + JSONObject res = JSONObject.parseObject(obj); + if(res!=null && "200".equals(res.getString("code"))){ + return obj; + }else{ + System.out.println("NC"+res); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/JsonData.java b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/JsonData.java new file mode 100644 index 0000000..e40130b --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/JsonData.java @@ -0,0 +1,24 @@ +package org.ssssssss.magicboot.zdyutils; + +import cn.hutool.core.io.file.FileWriter; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; + +import java.io.File; +import java.nio.charset.Charset; + +public class JsonData { + private static final String filePath = "D:\\java\\MSAPIjdk2022\\MSAPIjdk2022\\json/datajson.json"; + public static String strDataId; + + + public static JSONObject getKey() { + JSONObject json = JSONUtil.readJSONObject(new File(filePath), Charset.forName("utf-8")); + return json; + } + + public static void putKey(JSONObject json) { + FileWriter writer = new FileWriter(filePath); + writer.write(String.valueOf(json), false); + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/MagicApi.java b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/MagicApi.java new file mode 100644 index 0000000..aa6af8e --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/MagicApi.java @@ -0,0 +1,457 @@ +package org.ssssssss.magicboot.zdyutils; + +import com.alibaba.fastjson.JSONObject; + +import java.net.URLEncoder; + +public class MagicApi { + public static void main(String[] args) { +// JSONObject data= new JSONObject(); +// data.put("log_type","0"); +// data.put("log_status","0"); +// data.put("syn_type","0"); +// data.put("data_id","12312"); +// data.put("data_name","测试同步"); +// data.put("mark","21312312"); +// data.put("res_body","同步成功"); +// +// saveDataLog(data); + System.out.println(getkhzinfo("1001S3100000004DW7BE")); + } + + public static void saveApiDataLog(JSONObject data) { + try { + String res = HttpSend.sendMagicPost( + "http://127.0.0.1:3002/SYNCLOG/STOCK/SAVE" + , data); + } catch (Exception e) { + e.printStackTrace(); + } + } + public static void saveDataLog(JSONObject data) { + System.out.println(data); + try { + String res = HttpSend.sendMagicPost( + "http://127.0.0.1:3002/send/log/save" + , data); + } catch (Exception e) { + e.printStackTrace(); + } + } + public static void saveDataLogSbbom(JSONObject data) { + System.out.println(data); + try { + String res = HttpSend.sendMagicPost( + "http://127.0.0.1:3002/send/log/savesbbom" + , data); + } catch (Exception e) { + e.printStackTrace(); + } + } + public static void saveDataWLLog(JSONObject data) { + //System.out.println(data.toJSONString()); + try { + String res = HttpSend.sendMagicPost( + "http://127.0.0.1:3002/cpfx/save" + , data); + } catch (Exception e) { + e.printStackTrace(); + } + } + public static String getWNRES(String url,String jsonPath) { + System.out.println(url); + try { + return HttpSend.sendMagicGet(url + , jsonPath); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public static String getYHXXID(String name) { + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002/NCC/ZHRY/V_CRM_PSNDOC?NAME=" + URLEncoder.encode(name, "UTF-8") + , "JSON.data[0].PK_PSNDOC"); + + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public static String getZUZHICODE(String name) { + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002/NCC/ZHRY/V_CRM_ORG?PK_ORG=" + name + , "JSON.data[0].ORG_CODE"); + + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static JSONObject getKC(String stock_code, String pro_code, + String batch, String qty) { + + try { + String res = HttpSend.sendMagicGet( + "http://127.0.0.1:3002/SYNCLOG/GELOGDATA" + + "?stock_code=" + URLEncoder.encode(stock_code, "UTF-8") + + "&pro_code=" + URLEncoder.encode(pro_code, "UTF-8")+ + "&batch=" + URLEncoder.encode(batch, "UTF-8")+ + "&qty=" + URLEncoder.encode(qty, "UTF-8") + , ""); + JSONObject resJson = JSONObject.parseObject(res); + + if (resJson!=null && resJson.getJSONArray("data").size() > 0) { + return resJson.getJSONArray("data").getJSONObject(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static JSONObject getDataLog(String type, String dataId) { + + try { + String res = HttpSend.sendMagicGet( + "http://127.0.0.1:3002/SYNCLOG/GELOGDATA?type=" + URLEncoder.encode(type, "UTF-8") + "&dataId=" + URLEncoder.encode(dataId, "UTF-8") + , ""); + JSONObject resJson = JSONObject.parseObject(res); + + if (resJson.getJSONArray("data").size() > 0) { + return resJson.getJSONArray("data").getJSONObject(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public static String getkhzinfo(String name) { + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002/NCC/KH/V_CRM_CUSTOMER?DATAID=" + URLEncoder.encode(name, "UTF-8") + , "JSON.data[0].CODE"); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String getTaxCode(String name) { + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002/NCC/WL/V_CRM_TAXCODE?NAME=" + URLEncoder.encode(name, "UTF-8") + , "JSON.data[0].PK_TAXCODE"); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String getData(String table,String TS) { + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002"+table+"?TS=" + URLEncoder.encode(TS, "UTF-8") + , null); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String getData2(String table,String TS,String GT) { + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002"+table+"?TS=" + URLEncoder.encode(TS, "UTF-8") + ">="+ URLEncoder.encode(GT, "UTF-8") + , null); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String getDataStr(String table,String jsonPath) { + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002"+table + , jsonPath); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public static String getZIData(String table,String NAME,String TS) { + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002"+table+"?NAME=" + URLEncoder.encode(TS, "UTF-8") + , null); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String khfl(String name) { + + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002/NCC/KH/V_CRM_CUSTCLASS?NAME=" + URLEncoder.encode(name, "UTF-8") + , "JSON.data[0].PK_CUSTCLASS"); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String khgjqy(String name) { + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002/NCC/KH/V_CRM_COUNTRYZONE?NAME=" + URLEncoder.encode(name, "UTF-8") + , "JSON.data[0].PK_COUNTRY"); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String khshq(String name) { + + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002/NCC/KH/V_CRM_REGION?NAME=" + URLEncoder.encode(name, "UTF-8") + , "JSON.data[0].PK_REGION"); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static String bibie(String name) { + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002/NCC/KH/V_CRM_CURRTYPE?NAME=" + URLEncoder.encode(name, "UTF-8") + , "JSON.data[0].PK_CURRTYPE"); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String khyh(String name) { + try { + return HttpSend.sendMagicGet( + "http://127.0.0.1:3002/NCC/KH/V_CRM_BANKDOC?PKBANKDOC=" + URLEncoder.encode(name, "UTF-8") + , "JSON.data[0].PK_BANKTYPE"); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static void saveSendSYNData(JSONObject data) { + System.out.println(data.toJSONString()); + try { + String res = HttpSend.sendMagicPost( + "http://127.0.0.1:3002/syn/save" + , data); + } catch (Exception e) { + e.printStackTrace(); + } + } + public static void saveSendSYNDataSBBom(JSONObject data) { + System.out.println(data.toJSONString()); + try { + String res = HttpSend.sendMagicPost( + "http://127.0.0.1:3002/syn/savesbbom" + , data); + } catch (Exception e) { + e.printStackTrace(); + } + } + public static void updateSendSYUPDATENData(JSONObject data) { + System.out.println(data.toJSONString()); + try { + String res = HttpSend.sendMagicPost( + "http://127.0.0.1:3002/syn/update" + , data); + } catch (Exception e) { + e.printStackTrace(); + } + } + public static void updateSendSYUPDATENDataSbBom(JSONObject data) { + System.out.println(data.toJSONString()); + try { + String res = HttpSend.sendMagicPost( + "http://127.0.0.1:3002/syn/updatesbbom" + , data); + } catch (Exception e) { + e.printStackTrace(); + } + } + public static JSONObject getSendSYNDataCRM(String type, String syn, String dataId) { + + try { + String res = HttpSend.sendMagicGet( + "http://127.0.0.1:3002/syn/query?sendType=" + URLEncoder.encode(type, "UTF-8") + + "&crmId=" + URLEncoder.encode(dataId, "UTF-8") + + "&sendSyn=" + URLEncoder.encode(syn, "UTF-8") + , ""); + JSONObject resJson = JSONObject.parseObject(res); + + if (resJson.getJSONArray("data").size() > 0) { + return resJson.getJSONArray("data").getJSONObject(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static JSONObject getSendSYNDataSBBom(String type, String syn, String dataId) { + + try { + String res = HttpSend.sendMagicGet( + "http://127.0.0.1:3002/syn/querysbbom?sendType=" + URLEncoder.encode(type, "UTF-8") + + "&crmId=" + URLEncoder.encode(dataId, "UTF-8") + + "&sendSyn=" + URLEncoder.encode(syn, "UTF-8") + , ""); + JSONObject resJson = JSONObject.parseObject(res); + + if (resJson.getJSONArray("data").size() > 0) { + return resJson.getJSONArray("data").getJSONObject(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + public static JSONObject getSendSYNDataCRM(String type, String syn, String dataId, String sendStatus3) { + + try { + String res = HttpSend.sendMagicGet( + "http://127.0.0.1:3002/syn/query?sendType=" + URLEncoder.encode(type, "UTF-8") + + "&crmId=" + URLEncoder.encode(dataId, "UTF-8") + + "&sendSyn=" + URLEncoder.encode(syn, "UTF-8") + + "&sendStatus3="+sendStatus3 + , ""); + JSONObject resJson = JSONObject.parseObject(res); + + if (resJson.getJSONArray("data").size() > 0) { + return resJson.getJSONArray("data").getJSONObject(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public static JSONObject getSendSYNDataDSF(String type, String syn, String dataId) { + + try { + String res = HttpSend.sendMagicGet( + "http://127.0.0.1:3002/syn/query?sendType=" + URLEncoder.encode(type, "UTF-8") + + "&dsfId=" + URLEncoder.encode(dataId, "UTF-8") + + "&sendSyn=" + URLEncoder.encode(syn, "UTF-8") + , ""); + JSONObject resJson = JSONObject.parseObject(res); + + if (resJson.getJSONArray("data").size() > 0) { + return resJson.getJSONArray("data").getJSONObject(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public static JSONObject getSendSYNDataDSF2(String type, String syn, String dataId) { + + try { + String res = HttpSend.sendMagicGet( + "http://127.0.0.1:3002/syn/query2?sendType=" + URLEncoder.encode(type, "UTF-8") + + "&dsfId=" + URLEncoder.encode(dataId, "UTF-8") + + "&sendSyn=" + URLEncoder.encode(syn, "UTF-8") + , ""); + JSONObject resJson = JSONObject.parseObject(res); + + if (resJson.getJSONArray("data").size() > 0) { + return resJson.getJSONArray("data").getJSONObject(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public static JSONObject getSendUnit(String name) { + + try { + String res = HttpSend.sendMagicGet( + "http://127.0.0.1:3002/syn/queryunit?name=" + URLEncoder.encode(name, "UTF-8") + , ""); + JSONObject resJson = JSONObject.parseObject(res); + + if (resJson.getJSONArray("data").size() > 0) { + return resJson.getJSONArray("data").getJSONObject(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + public static JSONObject getSendSYNDataDSF(String type, String syn, String dataId, String sendStatus3) { + + try { + String res = HttpSend.sendMagicGet( + "http://127.0.0.1:3002/syn/query?sendType=" + URLEncoder.encode(type, "UTF-8") + + "&dsfId=" + URLEncoder.encode(dataId, "UTF-8") + + "&sendSyn=" + URLEncoder.encode(syn, "UTF-8") + + "&sendStatus3="+sendStatus3 + , ""); + JSONObject resJson = JSONObject.parseObject(res); + + if (resJson.getJSONArray("data").size() > 0) { + return resJson.getJSONArray("data").getJSONObject(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static JSONObject getSendSYNDataDSFBom(String type, String syn, String dataId, String sendStatus3) { + + try { + String res = HttpSend.sendMagicGet( + "http://127.0.0.1:3002/syn/querysbbom?sendType=" + URLEncoder.encode(type, "UTF-8") + + "&crmId=" + URLEncoder.encode(dataId, "UTF-8") + + "&sendSyn=" + URLEncoder.encode(syn, "UTF-8") + + "&sendStatus3="+sendStatus3 + , ""); + JSONObject resJson = JSONObject.parseObject(res); + + if (resJson.getJSONArray("data").size() > 0) { + return resJson.getJSONArray("data").getJSONObject(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/ThPost.java b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/ThPost.java new file mode 100644 index 0000000..f9ef98f --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/ThPost.java @@ -0,0 +1,113 @@ +package org.ssssssss.magicboot.zdyutils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.ssssssss.magicboot.fxapi.HttpClientResult; +import org.ssssssss.magicboot.fxapi.HttpClientUtils; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +public class ThPost { + private static final Logger log = LoggerFactory.getLogger(ThPost.class); + + public static void main(String[] args) { + String delResult = ThPost.deleteObj("PayBill","1002312130000048"); + System.out.println("delReslut ========= "+ delResult); + } + + public static String approveObj(String keyWord ,String U9ID) { + String delReslut = ""; + try { + LinkedHashMap map1 = new LinkedHashMap(); + U9TokenAccess tonken = new U9TokenAccess(); + String token = tonken.getCorpAccessU9Token().getData(); + + map1.put("token",token); + String delUrl = "http://192.168.1.21/U9C/webapi/"+keyWord+"/Approve"; + JSONObject delData = new JSONObject(); + JSONArray delArray = new JSONArray(); + delData.put("ID",U9ID); + delArray.add(delData); + System.out.println("ApproveArray ========== " +keyWord +"ID : "+delArray); + HttpClientResult rtn = HttpClientUtils.doPostJson(delUrl,map1, delArray.toJSONString()); + delReslut = rtn.getContent(); + } catch (Exception e) { +// e.printStackTrace(); + log.info("审批接口传输错误"+e); + } + return delReslut; + } + + public static String submitObj(String keyWord ,String dataId) { + String delReslut = ""; + try { + LinkedHashMap map1 = new LinkedHashMap(); + U9TokenAccess tonken = new U9TokenAccess(); + String token = tonken.getCorpAccessU9Token().getData(); + + map1.put("token",token); + String delUrl = "http://192.168.1.21/U9C/webapi/"+keyWord+"/Submit"; + JSONObject delData = new JSONObject(); + JSONArray delArray = new JSONArray(); + delData.put("ID",dataId); + delArray.add(delData); + System.out.println("submitArray ========== " +keyWord +"ID : "+delArray); + HttpClientResult rtn = HttpClientUtils.doPostJson(delUrl,map1, delArray.toJSONString()); + delReslut = rtn.getContent(); + } catch (Exception e) { +// e.printStackTrace(); + log.info("提交接口传输错误"+e); + } + return delReslut; + } + + public static String deleteObj(String keyWord ,String dataId) { + String delReslut = ""; + try { + LinkedHashMap map1 = new LinkedHashMap(); + U9TokenAccess tonken = new U9TokenAccess(); + String token = tonken.getCorpAccessU9Token().getData(); + + map1.put("token",token); + String delUrl = "http://192.168.1.21/U9C/webapi/"+keyWord+"/Delete"; + JSONObject delData = new JSONObject(); + JSONArray delArray = new JSONArray(); + delData.put("ID",dataId); + delArray.add(delData); + System.out.println("delArray ========== " +keyWord +"ID : "+delArray); + HttpClientResult rtn = HttpClientUtils.doPostJson(delUrl,map1, delArray.toJSONString()); + delReslut = rtn.getContent(); + } catch (Exception e) { +// e.printStackTrace(); + log.info("删除接口传输错误"+e); + } + return delReslut; + } + + public static String getCreateReturnData (String methodName,String content ,String dataId ,String apiName , + String U9ID_CrmApiName, String U9Code_CrmApiName ,FXHTTP fxapi){ + JSONObject contentJson = JSON.parseObject(content); + JSONObject getReData = contentJson.getJSONArray("Data").getJSONObject(0); + String U9ID = ""; + try { + U9ID = GcjJson.getNodeStrValue(getReData,"JSON.ID"); + String U9Code = GcjJson.getNodeStrValue(getReData,"JSON.Code"); + Map dataMap = new HashMap<>(); + dataMap.put(U9ID_CrmApiName,U9ID); + dataMap.put(U9Code_CrmApiName,U9Code); + fxapi.upSynZDYFieldParam(methodName, apiName,dataId,dataMap); + if (U9ID.equals("")){ + return null; + } + } catch (Exception e) { + log.error(methodName+"数据回写异常",e); + } + return U9ID; + + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/U9TokenAccess.java b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/U9TokenAccess.java new file mode 100644 index 0000000..d81e9f1 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/zdyutils/U9TokenAccess.java @@ -0,0 +1,90 @@ +package org.ssssssss.magicboot.zdyutils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.ssssssss.magicboot.fxapi.HttpClientResult; +import org.ssssssss.magicboot.fxapi.HttpClientUtils; + +import org.ssssssss.magicboot.fxapi.model.CorpAccessToken; +import org.ssssssss.magicboot.fxapi.model.XKopenAPI; +import org.ssssssss.magicboot.model.CorpAccessU9Token; + + +import java.util.HashMap; +import java.util.Map; + +/** + * u9请求token + */ +public class U9TokenAccess { + /** + * 验证连接 + */ + public static void main(String[] args) { + System.out.println(new U9TokenAccess().getCorpAccessU9Token()); + } + private final Logger log = LoggerFactory.getLogger(U9TokenAccess.class); + + private static final String KEY_TOKEN = "token"; + private static final String clientid = "crm"; + + //测试 + // private static final String clientsecret = "00dcb146d019426f9ccf6889c6d26624"; + + private static final String clientsecret = "765f536b447e4960b0bcc07851e87936"; //正式 + + private static final String entCode = "03"; + private static final String userCode = "admin"; + private static final String orgCode = "01"; + private static final String CORP_ACCESS_TOKEN_KEY_PREX = "corpAccessU9Token_"; + private static final String KEY_EXPIRES_IN = "expiresIn"; + + // private static final String prefix = "http://60.211.244.254:9111/U9C/webapi/OAuth2/AuthLogin";//测试 + + private static final String prefix = "http://192.168.1.21/U9C/webapi/OAuth2/AuthLogin"; + + private static Map> accessTokenMap= new HashMap(); + + public static Map> accessTokenMap() { + return accessTokenMap; + } + + public CorpAccessU9Token getCorpAccessU9Token() { + String key = CORP_ACCESS_TOKEN_KEY_PREX; + Map token = accessTokenMap.get(key); + if(token != null){ + long expiresIn = (Long) token.get(KEY_EXPIRES_IN); + + if (System.currentTimeMillis() < expiresIn) { + return (CorpAccessU9Token) token.get(KEY_TOKEN); + } + accessTokenMap.remove(key); + } + Map map = new HashMap<>(); + map.put("clientid",clientid); + map.put("clientsecret",clientsecret); + map.put("entCode",entCode); + map.put("userCode",userCode); + map.put("orgCode",orgCode); + // String param = JSON.toJSONString(map); + CorpAccessU9Token corpToken =null; + + try { + String url = prefix; + HttpClientResult result = HttpClientUtils.doGet(url,map); + System.out.println(result); + corpToken = JSON.toJavaObject(JSONObject.parseObject(result.getContent()),CorpAccessU9Token.class); + } catch (Exception e) { + e.printStackTrace(); + } + token = new HashMap(); + // 减去10分钟,以免过时 + token.put(KEY_EXPIRES_IN, (300 - 60) * 1000 + System.currentTimeMillis()); + if (corpToken != null) { + token.put(KEY_TOKEN, corpToken); + } + accessTokenMap.put(key, token); + return corpToken; + } +} diff --git a/magic-boot/src/main/resources/application.yml b/magic-boot/src/main/resources/application.yml new file mode 100644 index 0000000..e56f2be --- /dev/null +++ b/magic-boot/src/main/resources/application.yml @@ -0,0 +1,118 @@ +server: + port: 18088 + compression: + enabled: true + min-response-size: 128 + +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 200MB + max-request-size: 200MB + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + url: jdbc:mysql://116.204.34.35:13300/zycx?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8 + username: root + password: root + druid: + # 下面为连接池的补充设置,应用到上面所有数据源中 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + max-active: 1000 + # 配置获取连接等待超时的时间 + max-wait: 360000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + time-between-eviction-runs-millis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 + test-while-idle: true + test-on-borrow: false + test-on-return: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + pool-prepared-statements: true + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall + use-global-data-source-stat: true + # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 + connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 + # 配置监控服务器 + stat-view-servlet: + login-username: admin + login-password: 123456 + reset-enable: false + url-pattern: /druid/* + # 添加IP白名单 + #allow: + # 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高 + #deny: + web-stat-filter: + # 添加过滤规则 + url-pattern: /* + # 忽略过滤格式 + exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" +# 上传路径 +upload: + dir: D:/mb/ + +magic-api: + web: /magic/web + show-sql: true #配置打印SQL + sql-column-case: camel + resource: + location: data/magic-api + backup: #备份相关配置 + enable: true #是否启用 + max-history: -1 #备份保留天数,-1为永久保留 + table-name: magic_backup_record_v2 #使用数据库存储备份时的表名 + page: + page: current + size: size + cache: + enable: true #开启缓存,默认是不开启的 + ttl: 3600000 #有效期1小时,默认-1 即永不过期 + response-code: + success: 200 #执行成功的code值 + invalid: 400 #参数验证未通过的code值 + exception: 500 #执行出现异常的code值 + crud: # CRUD相关配置 + logic-delete-column: is_del #逻辑删除列 + logic-delete-value: 1 #逻辑删除值 +# security: +# username: admin +# password: 123456 + +# Sa-Token配置 +sa-token: + # token名称 (同时也是cookie名称) + token-name: token + # token有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: uuid + # 是否输出操作日志 + is-log: false + +oss: + enable: false + endpoint: "" + accessKeyId: "" + accessKeySecret: "" + roleArn: "" + roleSessionName: "" + bucket: "" + bucketDomain: "" \ No newline at end of file diff --git a/magic-boot/src/main/resources/logback-spring.xml b/magic-boot/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..f8b3bee --- /dev/null +++ b/magic-boot/src/main/resources/logback-spring.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/sys-error.log + + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + ${log.path}/sys-api.log + + + ${log.path}/sys-api.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/magic-boot/src/main/resources/logback.xml b/magic-boot/src/main/resources/logback.xml new file mode 100644 index 0000000..0ffc547 --- /dev/null +++ b/magic-boot/src/main/resources/logback.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + + ${log.path}/main/sys-info.log + + + + ${log.path}/main/sys-info.%d{yyyy-MM-dd}.log + + 60 + + + ${CONSOLE_LOG_PATTERN} + + + + INFO + + ACCEPT + + ACCEPT + + + + + + + diff --git a/magic-boot/target/classes/application.yml b/magic-boot/target/classes/application.yml new file mode 100644 index 0000000..e56f2be --- /dev/null +++ b/magic-boot/target/classes/application.yml @@ -0,0 +1,118 @@ +server: + port: 18088 + compression: + enabled: true + min-response-size: 128 + +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 200MB + max-request-size: 200MB + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + url: jdbc:mysql://116.204.34.35:13300/zycx?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8 + username: root + password: root + druid: + # 下面为连接池的补充设置,应用到上面所有数据源中 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + max-active: 1000 + # 配置获取连接等待超时的时间 + max-wait: 360000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + time-between-eviction-runs-millis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 + test-while-idle: true + test-on-borrow: false + test-on-return: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + pool-prepared-statements: true + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall + use-global-data-source-stat: true + # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 + connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 + # 配置监控服务器 + stat-view-servlet: + login-username: admin + login-password: 123456 + reset-enable: false + url-pattern: /druid/* + # 添加IP白名单 + #allow: + # 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高 + #deny: + web-stat-filter: + # 添加过滤规则 + url-pattern: /* + # 忽略过滤格式 + exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" +# 上传路径 +upload: + dir: D:/mb/ + +magic-api: + web: /magic/web + show-sql: true #配置打印SQL + sql-column-case: camel + resource: + location: data/magic-api + backup: #备份相关配置 + enable: true #是否启用 + max-history: -1 #备份保留天数,-1为永久保留 + table-name: magic_backup_record_v2 #使用数据库存储备份时的表名 + page: + page: current + size: size + cache: + enable: true #开启缓存,默认是不开启的 + ttl: 3600000 #有效期1小时,默认-1 即永不过期 + response-code: + success: 200 #执行成功的code值 + invalid: 400 #参数验证未通过的code值 + exception: 500 #执行出现异常的code值 + crud: # CRUD相关配置 + logic-delete-column: is_del #逻辑删除列 + logic-delete-value: 1 #逻辑删除值 +# security: +# username: admin +# password: 123456 + +# Sa-Token配置 +sa-token: + # token名称 (同时也是cookie名称) + token-name: token + # token有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: uuid + # 是否输出操作日志 + is-log: false + +oss: + enable: false + endpoint: "" + accessKeyId: "" + accessKeySecret: "" + roleArn: "" + roleSessionName: "" + bucket: "" + bucketDomain: "" \ No newline at end of file diff --git a/magic-boot/target/classes/logback-spring.xml b/magic-boot/target/classes/logback-spring.xml new file mode 100644 index 0000000..f8b3bee --- /dev/null +++ b/magic-boot/target/classes/logback-spring.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/sys-error.log + + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + ${log.path}/sys-api.log + + + ${log.path}/sys-api.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/magic-boot/target/classes/logback.xml b/magic-boot/target/classes/logback.xml new file mode 100644 index 0000000..0ffc547 --- /dev/null +++ b/magic-boot/target/classes/logback.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + + ${log.path}/main/sys-info.log + + + + ${log.path}/main/sys-info.%d{yyyy-MM-dd}.log + + 60 + + + ${CONSOLE_LOG_PATTERN} + + + + INFO + + ACCEPT + + ACCEPT + + + + + + + diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/MagicBootApplication.class b/magic-boot/target/classes/org/ssssssss/magicboot/MagicBootApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..a4d628312aaabb8f6ce2680db4b31e39557d077a GIT binary patch literal 760 zcmb7CO;6iE5PcgG9NbVspil}NdJC!Ay&x_@NHkJUp{<%K95}7bVm7sRqxBm2TRpYv zfgiw+sygdLN>us6N}k#IdNXg*cd7;KNndf?ROESfBQ(c z^XW8Iv2e=hJ~hdN(hNJ@tKmf437!g_@R74hC;f5=VH1Mgst7Z*FQmIQ*I$JdnRL=p zVmLB|jpZlh2i>b``oZ_1*tbGEmC3Qn6|p$i+PHEk0y&$JnEEMhJode@KX^$)6wbs( z->9Upl8?%i|5>%rz$(MLXKW(Cn-=zQK%5q9_!3QI>==3_P}MZE{!1IBx3dN9GwLp_ zbC8NW?^kT_sFEkqbMnFQ!JMXlqDH@vKQ%B%SC-i5l}@yH4BU;USfm%ZTcFF3_s0g NDLdFA?b~hx{{Z|b$PoYl literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/configuration/MagicBootConfiguration.class b/magic-boot/target/classes/org/ssssssss/magicboot/configuration/MagicBootConfiguration.class new file mode 100644 index 0000000000000000000000000000000000000000..05f38b30926cbaecf284d3e31b3a0300d1038eaf GIT binary patch literal 2462 zcmcIm-E!MR6#mvpqgqvnNkdCpC~ZlposcN~p_I6x#A<`-*w7)F0GDfP?Q9}xJ<>Wf zyZ{$G0xtnKlqoYj0K+peoR#FnX-y`b2F=*Jd-j~~{2%GBf1dvd;123GY+SK$^)#;8 zcptMi3b;N^cXJlzZG4CY3yT(9hKc(!lKNAIv2taTVcb)`V3=yiNPO83TO!`zt$--g z4b|qsCXb~#=frWnB@>2~hKjpxl0R<9yRzL2ywC+WtQR5iC{96nnG_W{|Pr0L3U6~ z?RC|U+hR?c+PyTo@)o!GE@!wq(uxt`_YRe zWc-a>^k}}yrj7epVW^i!ruEee)L%p8)aUavvvX-m!$PYv^ zn+aB5F61G~Awd(pVfN!+W-5=C&D&?#e~$;jy3~Rq^?CYsrMWPCKgu75%Lko#$im!j zT%|^^=@SAN0|gWg{ZG=#rIpcoYVH}>ue2%P4f>x*i4LY{Z&--|CA>*1eN5miaT(zT zffZ<-`2&UTrpJEA_%obp%s(e_{6h2$%Y43oq$f$<;GN54a=b}cn890wdyejm-t)w4 zo9ZAwqh%%6Qkq`Qm?%Krj?4f%Qi literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/configuration/WebConfiguration.class b/magic-boot/target/classes/org/ssssssss/magicboot/configuration/WebConfiguration.class new file mode 100644 index 0000000000000000000000000000000000000000..ceeb02f90de56dafdc5d28e10c6138a449ce8ac0 GIT binary patch literal 1464 zcmb_cYflqF6g>lNw=Rold5JGXe6&Sa<*g+qg7Fax8ZZ#zr`hhX3~YDF?iBQA`2~zd ze}F&AcxPL*6fnWCALh=TojLd1bMMU0UtfO!n8cikE({sCZD2TyJ0|Ypo`L%&G8oDt zuWi9ZJBnG1Xy<{6QH&X|4LmgPh#@m41F4=ewC4+}45@|C6%1Wv8HlA?)e+Hq?)bEl zD~A>CukuK0zphp?RUi(9KZOwUXi|=xVf#q7DWL2!nSdyI2 z{-iqmm=-Q0M~rj;+vkC2uPCh_!|*B9sZyzZ`=uW`+-K;tYb5Rl z(T?q6(ZINc2~0Bdw*t=Br0c3p1Ey=xD;Q@EEfO=zmGWOr1jF-z{<^ zpSRAIs3?Z{1nNx9L1kFntsDxb$-h23$SEC0cjI^$Gr0K=8%T z-`Np?%P^WhDO@XqM)CAPPpIdTl<3J9j-RAEqr$@mT0AeU64Dg0NiY4Z=+_~}5H8YN zMir-rt&J?TGmYKk*<=~nbnyV}bMm`~#!Rx<$F=i1*;W&+WTar7kN`s$F4a0HI4 ZxJF^GQ=l{>N2hQj8E;~ctmb+P_zj!$uY~{r literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/controller/PLMBomController.class b/magic-boot/target/classes/org/ssssssss/magicboot/controller/PLMBomController.class new file mode 100644 index 0000000000000000000000000000000000000000..dffb0da5dc1494e5737de579af23ad817dd23739 GIT binary patch literal 11860 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 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/controller/U9BomController.class b/magic-boot/target/classes/org/ssssssss/magicboot/controller/U9BomController.class new file mode 100644 index 0000000000000000000000000000000000000000..6e97b64c6a993eba346d7d9d6b06cfceb7f1a16d GIT binary patch literal 13453 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 CV6P4U literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G2CKController.class b/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G2CKController.class new file mode 100644 index 0000000000000000000000000000000000000000..09f270cffb19b6edc3fe41c693b0bc0b7ece45c5 GIT binary patch literal 7428 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 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G3KCController.class b/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G3KCController.class new file mode 100644 index 0000000000000000000000000000000000000000..18fbb0288db6668f09c142a2c41479e94e858350 GIT binary patch literal 7531 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 C%48J) literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G4KHController.class b/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G4KHController.class new file mode 100644 index 0000000000000000000000000000000000000000..96757498d068aae7acd51f6cf999b842009ce98d GIT binary patch literal 7645 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 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G8SKDController.class b/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G8SKDController.class new file mode 100644 index 0000000000000000000000000000000000000000..f82eb982d951b3402dc953ffeae538dce1ba61d0 GIT binary patch literal 2189 zcmb7G+jA3D9R5z5bkl8slHMzLqhcs63o3{yqNNw8y-=D`!Qy3;Jx!M;yXo!;v=j6|SfBOT#J1Cks zg)sx;CYms&hY16dG2Ao}#VrF$_K%y*=~i5b_EbEQH?28(tk zPf23N&)WGVJ8<=PO&C$DZYW^Q_(9GJYd@=C=iF?@_m!3P_0PI_H9b8(=6fpe^LZJJ zFipXBJ%R4z^2|f~k!|H|FK4Ay;Ci`{N*Q*LW8jWM)B@(jMphP;>wBSr2LkQ0Qmy*V zydBsDsboM$GbdGg(;K&y%@$YupkOP3Q`KZjZYV457K(XE136jI>Y^NeFVN4Wf(F_bLgxHL@P>xD;&Q7c_PPSO0g$1sSU6c=IBz>m_>c)!V+GhH;$6%L2nM#N9Z~Yp4DS3l1d` z$+yX$H9KoLj?VF^!10QCol$WN;j=hC#}{$f$Z&J*>32yJM;3IKSTT@`V->DIPsOZZ zuiPlPc}J3V$98`Ie&^fo{(f5i=jpGhI38jxjywtmyf}PaLOa!eJ^O0s$De9O0)t0% zehB#l&K_aBk8Dh|SLE%?Lz(5i8>om}-@5CCrDD+!lyoM%tnZLX^}Q_6l|1|~7^unX z_>G)9XhWQRv~S}itrLlkGCGI(l+jg2cY~sb!oFx-vyEQb_oZ6u2~);4`YC%U729j; z3U6BwK$Ddwh(a&%I?V>p5T8Mgmx<3D5n5%7>um1{rC;NR3Iq?T9o3LDsT;yDyG}si z0+*tR(L7wlCH8(AF5bf11nDyF@Grt8UjFOo;@1_f&J*T;m%avL^GM}N#2O$?vBKk& ekMOy+3=!ge#=cHz6Fz{}CiwOt=h3>wjsE~j1UeW1 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/extension/NamedTableFunctionExtension.class b/magic-boot/target/classes/org/ssssssss/magicboot/extension/NamedTableFunctionExtension.class new file mode 100644 index 0000000000000000000000000000000000000000..729704d2c06fa3f9bdeb274065387ee2c2dc8a18 GIT binary patch literal 2253 zcmcgt-ES0C6#w1bZKqwPUyBy1q6HPU+rkwAzjm#bl|B_ptk%T0ySul`;C!qzcdEV_ zqe)FjBuIiL`oM#R7YM%8qA2hF9i2v={11%h&JN2?TT6YhN$2dGd(OGP^YxoQ{{H26 z04FheRx^RSMu0{R}H*oplqPR&|9%wOHDImixZ0s zxvJNY3`294E6;^aP5SSMnoXL*oL3k2qVO&Ko+xwbf)y}K&v|~62gx6IMANF*JWp}? zv660Jc`iRE9NCDyW<$5GNOk7HS((8I!dA=k6~o@*#N0)(EVwP)Ca>Be2F9Bp9tDVDFu6XtmSHL# zW@nJpQ7VVf9gWM{flGxp+Z6>M5ElN_=4H!Nv)djC{Uig%> zl0HqwjsLd^yM(%JtHzS{E?R*_Q!(SZo)UUcDUD58BqbLe6JGTkN4mP>Jc{j9GL+gkw)8A5>0$ZE^FQDLjg0gZ&7m%5%X4)>O$=g);rLd9dBo;0@U1>E zDbfB*y|P47r-`I!uL31pMQt7oB)vM0=gwNvZWwso#5CS8@g`L{?g)=6` z@C0@FU+&ly@zKUSq`LMVF&s@rOeSq9;mm+{ShKxr3?mOiP&T#{F41W`gY!$8EZ^_$ zSYi>ArBpMDwz(E+vOH4U&639-2+gt#=Qj=7&McHBlyVAFhbzry3ew?iAa&=G_~9UZ z&`dB4&_^&wlIDe;!}P{UGLk)|pTT~j9~q3$vo}@_pg_O1BN<>X9wW){I7Z1zJ0GPt zeU>d`Zj`seUG$vxzLnEsChC}M&X!y2DXJkgfo1SaWboj{pnhNMxNWNXN8uET*CrY;zn ebYL0@Obw+!(}A+(`V6MXB147NN4hD;fPVmd;*aeB literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/extension/ResponseFunctionExtension.class b/magic-boot/target/classes/org/ssssssss/magicboot/extension/ResponseFunctionExtension.class new file mode 100644 index 0000000000000000000000000000000000000000..aeb18c9210dba4cc969b0af3fe7da6ee364e7550 GIT binary patch literal 2488 zcmbVNT~ixX7=BI?*pfurLW{Q5YL!|(O4ll_mQXCEAZUO}Dqe3khp;r+UC*8c{0rVV zUiu%rs5iBBMyKBTKb-MLIF8SLBq4;c(9C4d?)&|`U+2$%fBhZ6G``NGh+773=kYN< zF>oi39A@$;VYYy~n9HMpnF2n=y*x6QH*nv;f`JDD{j-ki=sAJx*!ZSEZo#WbfzxHj zm1|+MD%B&a+8|}9?Acah(^5|Kof30;+X)0_%bu#6LHaYBR^73yo~KQ@ucaF}o@;K% z!1vrhE`_eGNmy)gN&-d@`o5>M!0_03dB@td%!cLG&4q>)1mq7?oVsi2P%(^=UWwU> zISLi(Qn#E4Or&D_W+2sWLuzwdYu{YvqmmF>vQ#~*JoVVzlU399TuoeNszhXmlxgv`ini>>tCk<<$-tsOzUBnJrR{C03@j1UTG(JZ z8zDgzS6o-B7;fbIyRjqkY59)X^lD*425n3&468A{bRcyVB5~`b@mDf5+769S231KW!#o4C0{NlbX{iv4$1D_dK7C5si^|n`g zXhj9nQZbhoHbPfBO}Xg=4*PcAbv=Gqnz)DyxM-kU#46SdtQYYRUmDmbqJl?7d*e|F3`3` z9yWRGP za3O7ZYR^(NPEz8dW3YQ-lBIhDH@WUg(Vd!=E)Csp)u`*5JW11)aD~@+5xie`>F0QI zRq%O+UnWn%vv1-Th@bhA!C5~0W8x5o_#P=z0K+)PlLf>Gr6T1ienq_OQ057bgQ_D3 zRI{n->#@uml;e(|Vr0VRnc;c<8M5WcKal$og~=DlJw@LW5gE(jStP!ACJG%KtRK-{n8g_jky-f`R`4g+<)x literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/HttpClientResult.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/HttpClientResult.class new file mode 100644 index 0000000000000000000000000000000000000000..68cc83633e9824cc91ca513223c9d9566cf182bd GIT binary patch literal 1570 zcmb7D+fEZv6kUhj$6~R8qJUUXU?_!AKv20nh#}TgG@vBJ_%Ln9GNjBj?bH~*$p=jY z5>5O7AN>lS`~ef=Ix}N|X?d_o&pwyE*I8@rGvEJw`37JSs|tFNPaug|In2eNDF`DU z$88z!$YDN?g*X=F^ll7GF)YV$PoS@9G)%p=Yc!gsZM`f!5)e-WdN*vV>FAcTtJhja zWHj^R*U$X#ErD>^t{BWI2*k>^9L<+ z5+FBxgq~9rNe8SCvo66(iInlOeI$94q$iN&S%khZNcgd?@H0mU1>v)VA0zzu1@KaJ z8$RR1kNfa@jFMxj%|4eucSoA&z%7mwykn9MPr3JGy|T89lrMu&@?8=(%esU#Uuu@3 zZW6{bU1Ri2|BRjwJnVrqJ?d`eT>PNn6K%uSnJo>E2F&(aHirnbGfqU?45QtQo}`>k zPN9zhPV-$ksqHSEays83kJA!4EnmQ?OLzDQ`kb~YRQjZTMR@N7k#zJJu^c@+Mm(MH Z<{^f(!r>T~g0xr8&{lmT1ahvpnZE#w1}Ojl literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/HttpClientUtils.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/HttpClientUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..6c700558e62c024dfdd80fcd41c7f471a35d7303 GIT binary patch literal 8989 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 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/NewFXAPI.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/NewFXAPI.class new file mode 100644 index 0000000000000000000000000000000000000000..4c6ddcc1ba426b4ad5f392fdbf4e4b272bec9f75 GIT binary patch literal 29270 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 Yo%q$ddHVu_qMCV2&~{P<&Q-zsFU$MqWdHyG literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/AppAccessToken.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/AppAccessToken.class new file mode 100644 index 0000000000000000000000000000000000000000..bd1a9cd6f15ba65bd9cd843f12d772a8ce85f0bb GIT binary patch literal 1794 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 jI=%vUevoxE>)}H`gr_*d@z1+ literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiField.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiField.class new file mode 100644 index 0000000000000000000000000000000000000000..f6664c6e1e971a7144c7f1e1816715aa98cbac03 GIT binary patch literal 5610 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 KOi##Kc={KN-Jrn$ literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/interceptor/NamedTableHandlerInterceptor.class b/magic-boot/target/classes/org/ssssssss/magicboot/interceptor/NamedTableHandlerInterceptor.class new file mode 100644 index 0000000000000000000000000000000000000000..3ff873d20f210544b31a68563c9528cde7ddbc5e GIT binary patch literal 2028 zcmbVN+fo}x5IrNXR+5)HHnHPeoDdr@W-*W}jvXW*RsxtHghMV)R@$*xv$w29Q2Y?@ z@dLJ#s(e6xC=aPh<;+S30d{Z&s%B@pr+dyhJw5vKpWprfFoTMLn>k#>L>3k%Gq{z* z6sEKEe3-*W_*gGL(Zi>D_$-6j9B$+D4DJ}Xn?tt_oWU2`Id>j;6f&64V8OtmfiDf* z6G-2716SP<=olH@5a=v~juhxwas#>2@GCN2w<{hk{Yzoh_BQO;)$5kAQ*F6*fw`qH zu37cgpXJ*%w^|89Wx0WpaaBetjI9;hmrfFQ&kh_<#>FG&tUxx3Wz!+>Xyhdc?Z~zK z&}n$GZaEb_m7Z1l#arfN_U!#i!)^mHtJ$VpM>BhD@7R`S2Q{mtVmGJ}j!|!B7MMIc z_i-!&x!{ni!1USir?3fhm6ToGUbdr_(!I-4ZH3ON9WymWrRup-*r2$Jt}f5j|B`n? z6BM|#)(DjA%MG{gQjEDE2$ikeFkrH=Cdx?Df27aY4dZRA&XZ)Q_9AH&LO%)v87PWl zy`tPr9hPSNK|>yDsVT{V-T`rRNw}GO>&m1NTj=V%Wep zCe~0gv95X5e24F;LDMu(GxH{OY$(^Ww86v=7&h@E9vb+` z#Lu7vnMUL!DHz(EHbd{eg3;?;6wyL$Bde(#_Wk`CqMkg$z&<4 zxj~U{(Q&qiLZ{2C^Ks z_+uk5#2=p&zieBMm$|a|75ttXdy3SriTh2C>BQKBE1a9n4R{N0b0zQ&-enRU{1-a; z59~fc$9R9|0nY8izwrd=eM~)ru`)h>fXvMUWM52j561h?KZAJyJ?r`%-J4I*qgRaT z-N$6Ikx_j*@;Ulb(9!(^hcSa~F&b_MG~6kI1O_+`a=bvE7YT9*V`Mr*u6gb%lFUPr z*dmP`Dx#^45&jTvaP=NDkw}ZAp1qIZg!nE#z%>%SPJbGyzmcED21Z;J KF;!E$ao}Ir5;gw- literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/interceptor/PermissionInterceptor.class b/magic-boot/target/classes/org/ssssssss/magicboot/interceptor/PermissionInterceptor.class new file mode 100644 index 0000000000000000000000000000000000000000..569ed3ff91a9c506755fe61981c249886b60514c GIT binary patch literal 5004 zcma)A`F|W`8UIeQ$!sRmCJm*M7HfbOk~Ha5ib9i8nzPxEi);@9YMks&Hk0noEHkrd z-j)h!LM`GgSnvD3ufM<_^yA0xJ2TzvZq_tyKQr(9?(;nF^L(Fk z`uu;Neg?oz_@{zKq-rn&Q^72bMv+#Kffa?Vpbc3C_rR&ai{VD$MUj&+r$9xj7RPX0 z#=PKsm4a8}HMOY2Yisa2+^g{MdIfL58^z;Ig8RNG-YnxSQM^^`?iW`*P>Z+W?PB!~ zanm~$ybBN3;@xU4V<#!3ZpgHZkz8iVa1QD;T|&ce0f@0w^G{Z)U1*4XhUr_Zye#M4@h#Jnbw9(%9fxk69_1UN`Z*DCjy8R5tBwq zXe~CYI8uuNkRT@l8zq$B_W#i!lM`4h;f6Ir!|-y9zB$R)W{wmH6xE}JQf)gvk4$^v!!j*Dn#j0=53paZ!QZd}c^<#l0X zIfj>WtiyUb=O^KEen0&C6)G(Jo8n#FOXgzj@ zQEylxgm(n$mk|3Ew4lz7I!VJJb=92ExRM=5Qn44e%J`&;PvO%tKBMBZ_?!gD_`HfQ z;0%eU^|WiKcmii-d{M=dcuHlbdI_^acvHgFnmbRmGR)#c&Y_pI<$R*W8+=s!d>hc+ z8HR|A1r_J8C}I8bZz2~}ED0r^R&gF*QgK1t_>77#<5?A7!B=H`O~u#o4He(Sw^Ve1 zrrd8b?;Wp+#msJ^9+NgNpG@1SW>%(2i;>sXBvx77n+aBoMMh;?Q-aD*iUz`^W3W0; zPR-|+N$%U4auhwOrwDPlHnS~FK6Y;NZEZz=TNv-9?q~hhw!8eN;uh>t@ohXO<9QX| z!9^9{#d9jYhwsbyfr=mEqKqG@_^~+ri6Hx_il5=
`q%J`LvUyIFe@LLtX!|#iL z>!qr~i+^Bn9iqbRT|!|Mf5gQioq}Q}<4-F7jK9eEtBSwj?-H(9Ry!Z4D*l06*+y43 z=CySW342zu=37N!;|bHdpzAOfecqB-K4whi+eA=7oFb;?RW1xl^QfQujL3E4eRmv+ zjrUCsjUI@N}mJ%U#U!gry~ox!t=pSNH6rhNZde)p0L-h@F&; z%XGs|!cm3ffe*_=${-b!U+GLoA;xi*5HTkmDAXdZ)GwZ8ho&J(-6_>g)PKDG2Ic{>*g47RKk`*ReEN0CoWpFmEg2N zJENjE=qy6)*efH@&z8Wi?2lf~4FaM(-*hF@%UTH_~#qvzW~Joso30CF}XM^D*AHjugTrDbEeK(f$sPf-&90PJ$F;K91tTAxtxH=)*^QY>A4&wmV@JqcB z6}S<*Ax1ZjV36=quB!RInQw?OqvWhYj7cSDmE3dc<8vQ*G`>0Tp{n&9q$jwjz-@dA zp}5uiQPo)0P`v>81gfMni-?{S z@75<#)1Wleo`*Vd4(pb%K7waa*HKN@`aG-LC@*5e32bVtZj_hMP=S+B&fBb=E;T#1%o0%VW1cR;Sq|d^dUTgS_%VB6Q~n-bjJd&9N}YAM}&yIpy8_e=mj)R zR5om`^4~n%(imC5)k}C`1>zGCvDq45#ETZu#BKW$u90|N#l^K^QN4)kC~w;Wwi}DM zK0ZN!Z-`Gs&!c%FJU@q)_(Xkmdqe9Ib_k*Ma(m?kv@N1NzJQ%a9!GSfeF3}Z00uKX za*D85`i|(w2I}6;(_Y%q$6Y`F_h^9d#t7FSt-Kv3!SrbReT4EM+W#*q@W^>8+YZn*m308k@!|T z4pl)yocU0QS=%CR6D0O9J2N}`n}^rGet-J`;4vNOZ zO$}WQ4;a*dj~VK{6F%j35_`UVz{fibdf#(LJWe9P@Z|jIZf5#?@<#5?yl0OX zm0fS-#e0;b)jnb1&e<$glNH4a2P z43FRNhzBAT5!F2I&2HKU{k3V+aSd3yT0O+Ax(*){ofNkhkQLa5e~Ign;}!&vtpZB zQ1LzFo_3+}+;w3>{|>|ky=8;mHX}*B(_SM>!6lSQr;(6cB9BcwqrKcY1^b+aER(FH z&I(pYmzOC3m$6E_P9wZRAbI%(RMIHo3zSax462HEGlr3#nQ3~-S<7N^71zj;-0P$< z+#p?7$PIGH1nan&CwNY~Om4~qXDBK2{5mz*DAZ}@d`T^{l&aIWzMT`F=EPb?EGzhl w$|s6dFzb7zz^l#ks<`uaeoeY4m-!vq`%_fELXi`oKZIm9#VT1FWGT4&2SU5-mjD0& literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/model/CorpAccessU9Token.class b/magic-boot/target/classes/org/ssssssss/magicboot/model/CorpAccessU9Token.class new file mode 100644 index 0000000000000000000000000000000000000000..734b06b9b58257e91f11ae795e2bc9784c12afb1 GIT binary patch literal 1980 zcmb7^-BQy~5P7q`@1<7w~Cx zM$3%O_y9hXN)o=yM!{rMXJ*5G9n60jBl2_BGmNMfDDBN7_| zJdT0@Yhlar>o56Bf)9Zz{^(!>xx>~Jhno(#Xb)!(y z^oyNp6|a7`ajbn%T8JI3E5_SySyE=ffo~NSZ96;?8Mgz$#t#+aOsl<-b-Ae+ijF7( z=H25R8R<)E_e8+7ro*T+r*%$QMNF~pXdDJOwz2N1-O5rkHFS%fK=7GVTNMM%P!2;(FsNKC>QgR$N)m}z$})kaOx8BAYG z_$imNrl=^w0X!q|oIyC3qWLMNY5#)3P%dT9Ofiiew)R$OWQy`kSPuo=hYW-K|GhqD z?Sa3poGVoW$56hwP+BzxOJ1+yc>KOfagh4_&1{>_X>$8dXG(*Q;SPSH3H*$M;G@3d z%15o|8oSRmJ^yC0y?Qd@dNqn&S51uhmTL1t6 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/model/Global.class b/magic-boot/target/classes/org/ssssssss/magicboot/model/Global.class new file mode 100644 index 0000000000000000000000000000000000000000..3f6b94cc6ce98a36c9c846a3edcb7821ef18e0ba GIT binary patch literal 1834 zcma)7Yf~Fl7=BI&*^n$!LMg>!OUtDswQQ^P2DO!NX)B?{q=5CtY?1@nve}KhCrHQf zhv*;hE9wjdo$&|wqtxeYGF%3#&CH(N^Pcy8-sioY{Pp+me*(CJZ&JwMb{Bf_PKwLB zDazhU;eC9N#)tSQjVVkgaW{>RanHd0BtA)D26+RsDRkquUgq>NZ(zZ|1A&gJ69{Aq z&+Tp7a&2$ZDyhKnHm3#pR!Z~5^@T@;`OxJU=!I@f%vRnl>$8l$CHnn^|B0}+GUrLOu?_%?y4O)dfyhtRm}+n#tMG0X@%{d zRkt^tO4;|7RVSEhJ#hW9?UGbtQ>r;l`TRuoEYgXvecnHD`dG6&wvY{v6^Wh;kq3fyV&YUrG7Xp`^!V9P2?+Y7A?yQ2Kyg=HTaSW!|) zvvXT#hb%|GZ#G=tu1+$~Q*%>Ry=?u!)G~^dPzDQ*E5p1U$|xj3gZ^Wz=XWZyp?MIn zyQJ*O){@1SOZD%B{-VB3|ds4+s)%(k0#$0A#OV%4Z+omOR~$8?nctH|2ZS4oB;`$OQ`e>sSB zhg!^Ao}?hxDZJP5a&1N zgX^1=SbVd+(V2S*@k^v~iEAPfc43I$W=jEY;WBq!dZZ}P#zWBw5dRgiUGCX-TwAt% z++D>rbVQo>xr_14$gSP@4Y4CfsYra0MuU;F3oW&_Gd*`Y3QiP_J2{g!MVic>6Gx qQQBoGOH0E*6ot>Nt&Oq1>ihj%s0)MOP7!R{f{Z{s4cJ zc+;jBaAg)Z^PRbzxpU_0`{NV93HEf1V6}*~BGw5dv)O1guiEv?npGu~ttas!3|IJF z<2DYJ-#sNvn1LU~!jD_R?MV$AgxqCS!zN+Oys2H>)!LN@4O@)&*VQ3z6UNisMANXt zLb^W?b_t_r%2)9@VPyZHMaY{$M-rwi<;$y{XUp(T*e)w&D{zF{5}`^s74z|&hZIGpMk>RJLs){emIX RC2rvcEMkfO#D>XWD?iq$hWr2k literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/model/StatusCode.class b/magic-boot/target/classes/org/ssssssss/magicboot/model/StatusCode.class new file mode 100644 index 0000000000000000000000000000000000000000..b2348f446399d158e1915f1f7a9471d37a6c6cd4 GIT binary patch literal 1559 zcmb7EU2oH76n@^ssa@l?iCa3#$Ht(HBn2`y*cdHc+ccdr1&W%kqS~a%O}*gCu_q_t zdR%e8UF>Gkq+RR|wv~@gLwsECf55swG3_}{qy{Jwwe^0T_k29hImiC{zrP*>IET;r zq2WW5yYo5@>G;TmjgMuzAUB`LbWz8oiGEBO7&dUpq-a{?pBmV2U`DpHI_4CHi>0OI z@dyIlIZbnR++sWh*UtAtU#(Cj{ihEw-yYhlG++1>Xtkw2ZuSabXpC-TH|*S!`v z4Ms^{c3aoO^{Y9IRcvO z!C4}vsW-0WG~JoiupQOh1y3q5w9{2*q+u)^lOEH}wnrF9eZ~u1l+1BRvlUvV!`dP&9Ss2EMg7wd@H=p1BW&6&Pe}BAV zVZX=*cY0j%ppdHhVL)0VO!3a$;@XB=Ymxf--l`XUr`haHW%o1bwG^+k8|}60s+Dsq zGiUil+x$JGX2t|0z?Hx#Nk|&vm6-t22PLnf$=}0a9D%~yJRRdIkGTo;0Ewqa{?3!a zJDmICJJCOicj-^`&v6wC)7J8TBJ~uS=qFy#KSqhw(ZX?wjd6~Y!tw7!l?g>McJ>w5 z6tC?3#NjRU<&WHlo*&ch!}x>Jj#HZi8IEA~@wJe_06~M0l46OIFD!B{e+Wz-LLI+kQokEoQ~#9(z*+eD^%7fNV%az7YT V(Mii7krWYkaKDeU)Jfoj{{h@bWx)Ud literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/model/UeditorConfig.class b/magic-boot/target/classes/org/ssssssss/magicboot/model/UeditorConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..ad3866eee15b84d142ce82878020cb2d466acf6b GIT binary patch literal 9558 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 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/provider/ExceptionResultProvider.class b/magic-boot/target/classes/org/ssssssss/magicboot/provider/ExceptionResultProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..5103af4c982de7860e2583d0b5e155257156d617 GIT binary patch literal 2075 zcmbVN-%ndr9RD0zxb&_A0bygJ;IFN~wu{4AXD7NbP_PW7NV52JXwS+W?LGD0Q#PIq zF-{+h(`1S6$!N@CVieQ`$S@|p_~74RNB885&&Kb$Ev4AT%r)ux@jc(4pYMqe z0q{KLO|;^q2@698o-=U@!zPhWn|J|H69K$v;tXCg5NpO+6D@ez#0Xw##;XR-88~lX zl%eUY?bvFBArR@GX9$kUlwfF$+m5)H&n^gejxS`0(jJ#do|)&at?y-GP%YXX!{?Rflr5cE;pH=Grc94999YQPnN*3)uoS7Iisx)A zDP2K}qr^33&5C#O!c$|8veim#B7TK0b1TE0w3Sel<9>lBB^5iwIqgvZnYwY zQ~%#MA(r$JV-pNUR(Kvy`)JkpM4TzExJGjCt?V5`NZBN;cs9qtCK(=?5^7PVX1L3< zLJ5~pZt;<-Aj$CdLx5Ffdv4K{S9LP$gA-D_?+l%F#R$NJ;>o2co-5abnUHxmDaLJG zF+CMm_b2_N4xgcWHc$D>ih0|!$%%80BNf*rLZJ?n5|Pu%ysQzpD%~Z^BOHWOD>-3} z%4|+L!cnm>+R$#`LKtHhXXvl3#7g;ODNz|~(v!}4!5ssyh4DHj3`~ac2F4A0-JOru@87&tTw7y^)`s^$jYb9a@1kQkU8}5ul}(*SnanBaQoB|6 z>^@bA6-r8$p)HwrT}sCsC3MQpWb{;^fkK5m^dCm*_A?cFTBvf1Ykkx)k?Qu1OX_gq z+6zcisD(1L&GSs2B--{KCn%D%aH%_&_1pAihOWp&wZbw7>5N4lXqZ%W!>+8JogI5d zE4{_gOwo+;yhmOg+80NKhYVkOh*qxSYIRhV(NdN9(s*Pz8mS7Q&V($FQ9MZ>jaE>` z>3b8Pom!374!T*iGuj&mHo<;8M?t?qFBr;0A&lXcQlAp=lGwIJc(T;$_wPbOew2=6cbC z$9?WzJVEq;&(}wh1WEb`p2E|#KSR{EAYDQ1AV#2%{tVCJXxYabB%p<($2ZXYD?+!> zGBDW2{%SWja9~{%e?x~)(dR9MHMzubP#;M&;6u_y_CO~MN+&_lLqHrS(>jj6l8H(j n(MlXq97BX$=_jrr8algtpF<74&&P<^fB}CUBxNPsPXPY_VNp_Z literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/utils/AddressUtil.class b/magic-boot/target/classes/org/ssssssss/magicboot/utils/AddressUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..4510ca4402ac5e8a4d7af9d9fa7e37224b802617 GIT binary patch literal 1334 zcma)6TTc@~6#j-nw=B!W0wUlIL~N^cL=lyX2nbSAE(uDa4<^fY(k^ayH@j2x59qs( zCMG`l;uF3A(dZBGe<=ULc&2SEfs(k%o-^k%Gv9a4+5P$F>kj~9$mlqOVI9|yh#{#V zrK1tUF(%?F7Vl;+ZI&Nc3!yOIdG2GQ~Ps4qN=#=f+@&Q96k=$fxocD5q zp*?H6VzpG<62TL5%OOuZ>sh9=X$H2ktIkGQutSDa)(i4HtUkPG=51@s^CT}x+X?w> zE*FR}d`iY7gPs?%>R}j8WVg*7lRKuH=NmGx-TY+oq>F(OgrOsWjN^#B>C6WCQc<{a z;k6}vX?reR(0wHBsK3GX6^#@3F|=+-(|WmL`ej;`5;1hF2wCuQ>t+ZF$AC<#O9!4m~%$9r`odw3wDbNetWmw1H_nFffCM8fFd5p-;oSfk#-N z7MfIV4T}aIV~Js~cK2yTW9Y0U{VN&G#_tcG4?lilNc?YqsVcRT*0#2VB^mmONTDP> z&*7FA2<{5WGycw)8VH7FJIuJQ2vnWA>y5*60%H2UaB~bJ^%73Bv|3%7g_!gzQ^nAg zs5@9aHE^mGe2GK_ScC?ZT33s!4)EoTwbe>I=9@t%h$I8A3#-n~N=XP<@2NpzOBWOB zV_!#gYaJ38KnMK_)YAYOadeXGB8!t|q?=OvU|-7NZj#ZmQ^Q$W8P0RNP#5Ot^OJGX3ows_6xqi#t zZT4rWNpw4DGrPxhZMlz>F@MPR1e&@XchK;nA0uZD+Ub7B@r|NyXFX$!owfR;)Gkn$ zb}iGlq-uljy8=s^x`)k!rja%CgGS1C?fhW-@=ztcjUKZ=x2cY6588P%D;@J@E(mCn zACqt`pE-HOfdPAz+niaD$pn^V$IZGtnZt!rLaQ$~?U)?fWX)O`UytPvIhkFi%h-I& zB`DP?doXYMMVGO5{dBIwRl<614$&^&!U{F%DV%My{Ck?Skq0Mo&qS z&|L*u!T4r|S=o-!wR7`m+A8?AlV@770s0864D0(Jt`ShBYgpoHDfTitqN1|=*$}#^Wr!|H*>VFP5EYegd_+Ur{Gxy&#^Dq2;{rK(Emo@x^dT1PSH(A z$k)j@15U4y+|qFqRtn6%l98Q7JDag2%dgQOId)st*qU|v&8$F;QS>ZVqU9Mnp2rIc zUexgtjtdAw!OJ>c!Eqh0;<$p>bezCRfoYexz0LH7h!hdh@jBj!Y9PVZ@g`0YJRNVz z18&0_9jEa&d3$BVI^K~M@8YD6_wc@e9$1hWGGm$N2RhE+LmeOCV`;+W6Py*8Ua~7= zkd99!ELEP*mKRV`eH%A!PNf)FshxFvCbNr$EgkdhBfR5td?B;{QUHA9vpdSow@V>$TgtY>Y+4C!6P|^Ttro zcbu$|c3jKI5DsG#7s(*v<2xCXWS-F!4ZgBN=soue?_iE~WkO%gvvUPfv9D{B>?kLk zpp%`V0)|f2gO;C)Mr7l4<-#y33q_*1rrbP)w!Lg5Mw;?GA{7UsSM2wK0ndTc)KzX1 z&3&?nk?ou`>MN;b@vm}q`5_Y*$wT_sNRqK$r|DUnY_?!^-f?qgmJB1}xsi<2HIyHD z`O7B)jET>@nh{@>wY-J{-^%;)B66-&zDurgYt;69jxoMm_X}vgYv#QHzEd4GZggzP zTE2a!NP7Cg$lL9jY1uQpM2^l-N(IsLu28w6LrZ8m{N(ot%<3Te=;_PY4m93A00}M6U`-Q zdP^jow$^%Pm8NGBLd*x5c8o$1#T)w}x4_Rn=FGqkbH7_g=)jeUVAMgtjHLIFI>l z@p>Y(U<@~$h8~Fv_ez0^n&$fW1uUxIwAI>_dX}RhLS60>OA<>%6e-`xfExuS_RFr= zH$~S|yl7FY1rKd>VxcmsY5NKnc1ehEkrV;nz`8f`pb7-!ML znBu(C!A|-r0WoH=`r&Eod0O~vJ)iC3ElUymo1rTT?o@D>f>hb>ZeU8Mg1&f(Oxx%X Ol4%bQ+RI%9?*0ckAs;UQ literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/utils/WebUtils.class b/magic-boot/target/classes/org/ssssssss/magicboot/utils/WebUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..4bc28638678397f4780e2bf367146f6e12360dca GIT binary patch literal 1488 zcmb7E+g8&+6x~Bh18KNbs0c+7MOr|{3o6P*E{aqtu)yMT+D=O_G&P+9pQSGqd~o^f zN4Y%H1WJMBs(DD}TxRF&bN0;dKRmlLs!ZwijB%a zMz|l%j7^?M%E_AcuIXCJ_MJhwXO$VoQjS~TW&hy^X2Hs497pnswCpnfBr<8Wm}TfI z2)QO@X-Bw+wvgN6OGT6=Ln59??VE?@F)w=&zDHU7YARuL5XOpAl;T*XU7MlT-^*>Y zSl~O-wTcBw)7&%gv8JH|6$RK|%fAS>T*>E!OQ7BK@3hES(s8$3k++T+^c|<-X2q(d zy3}#TbxN@@a09&>W(~|?o?)@prIM;I@0thV$ZSw{eH8FkPd=M4M3sBj**w{ECAo=)PQQlw$X4 Hf4Kh_NdbgF literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/yyU9/U9API.class b/magic-boot/target/classes/org/ssssssss/magicboot/yyU9/U9API.class new file mode 100644 index 0000000000000000000000000000000000000000..4e1e51d73faaf7253ba3aee447accf0d0908fc50 GIT binary patch literal 3954 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

2(X|sWwd28HEJI2kl zW86%;ftzVJa5L=&Zl)dMM$dLS!rrvkrIQLb(_WuWwWG?7EmX~$P#q}^gA%}z(7L9_3SMuWD9yILpT zs|vo8j-MhChH#gnz%I7w2!YwHqIoPj1_ua${0!nCC7I124pEY^4`PgxoLv1l%=Xk& z)ZH34f##qgXd*Kh$3&dLm;9C)^oR*;)E%^a9#gc@xbql})4Loc g8z64boz@s1d?5)PFQ`0{9drXa;C#kO-aByWFZ@$QuK)l5 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/FXHTTP.class b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/FXHTTP.class new file mode 100644 index 0000000000000000000000000000000000000000..b82a0f93f521dc7d203221eff255f0a8011ab58f GIT binary patch literal 23790 zcmdUX34B!5_5V3{lFXaQunmijE5rpvLfAwIh_Xr)0)~APhh!24CYd-hkwvj?Sgm{2 zTI-GrxGQSd>rU&AVr^?(T1#-NSi5L{tu6oWx%a&{FGE6*5B2{kkeU1LyX!gMv)&tC z{?Epr6VV_wBS<&%a6g|EL2Adt zEiRMq(*k@tPq28Ryetp$B%W;X8B$qc@f3@vT0BkKO}BVPkZ1BNi)ROT4$rlCUXah^ z`9VI5qcQ_pEU>uJ;wp<{7FQQ?4KK7fE@LjTc(KI^i)$^eli`vU*IRtH#VL!^7H2GO zu=pH{msq^i;$;>umm$v$(g;2;$Se4KKmWkb7X;~KzR==}^09mQQx)Wk`4T^`4DzM? zLyIqyUYA?^Bl*4}$XD`JLLn^eYKyP2_*#pvv-rn;zCK75LW3LR`$mg@V)0ED|5SS1 zZ1K-5zQy8OExyg-+Y9*)zSH8nWZA1MzFVH}@$yW`PgE%ch4&qSp0LD z_GycsF?EA?q3&6WpR@RRi(jz#MT@tZSHIgx7XLzq`=!M%S^ToauUP!5#jjcXx>UbW z$lLfKi{F&*wL+n{EZ%PM+ZO-I&+i2J*Zdoce{1o(7XQxT_bh(j;twqT(Bj`){0AB0 zqaYv#vi;HG9TqoPywl>3rS21pKehNXi$AycPZob+@h;)rmlpro;;$_Ji^YGn_-_{f z-Quq;{>I{eSp0uXzC^NyDLf&Wswqh)ss}A9nUJihiKT`y6%3Ep#WN$&rq^-Pnes*_ zt71$YCdBJv118WX;UVZqd}}PGwiqti=yX5OA^t#nvyA*RJ^W6Ry}jEv}5YgW`FFgA(fB~v@lM` ziLuPWWYy$oDq0)M#8TKyz^ri8q=`)ac-=WzTNTs1UY_owlF39YS~tv7Wv^^sYFgZo zA8Qac0x;T@pTO0#z`n1ND>ZKT< zWajBplV~@xvND!VgQk{jTnLZil#$cNnqomJmTpL7nA%OrL@O6hjMi)3LmB${pITjv zgU(}W-%wu_&3IUA(^0dz(0Qq!4yuV|&S;3GmQ7A2s~RdZqtUM>nOdgdum_Wl+XoK& zg#us!xaX|AKT}7{Gi6!bm}n+?YAmCtp5{YOU2wqG?O9!`^lx!*X3YZo0ZfJ24ak$bT3M^}G-lTLDZr)YUBy^bEIwdc z*%xFw(*qHsX36SoP?pD*2r4uv7kO9Yi2T0L$+Qs-TQVV@7FF3cN;%HNWnlH<7zEC% z6tNc3w_yJ0RPDH#BkSW@En>;J^PqQ9w70J|TF(?|_8O|EYJ4=k5Q+jrb!%=lmeo6! zV@$J7>CEuG>#ABi3V^=-0MT>5*0e7?5b3fN zlLmlCQ8|V&fF?6f_o(~YD0UY1bWBynQo6UlvLTg<)j>t`X^`fs=(0>)3rVMJYhW#= z8w(zVjPXQF@W+&2nW`;=5$Td`j5WCJWodZ!t~S_EkH>MMO>*pFs{(D9?KR>1QX~FI zemaAtGj-CFjv1q;wQ)J#%jfSrw-y^gsZ3+liwA%waecH2a$mzLHLn@I*R_MnB1Hnu ze>2q`kR|TpjIxmqS?1VO0tHiP_%-32H&eE`~eXYxZ7QY(q_Y@N9>$5E3so^J=4UxM1CS&DnD(JykSS1EzFt;Whlb zbgZswVj9k1K|?y060_m2Ox9(zkQY=zZbf4AGx3ag=IxUU7LAFeE1|HBz6ef9Hl!+J zBIDqLalQKrs6+HLJ;QXY4g=cs*8TjS5bstLqAm1urojs{nfi2TNlCIkR@b+BX*>$= zv9B1M%9?lyv`9&1Lpp=Ua|V>i5>XX{=!O(4I-8>!;t8l#@a5cKcm1cRGMTC`t12q(UKCOV z%I{ZJNCoH>rbCPR=r+2AaiX<9ZJGvEp6D<%dJft@9?WGA=OoN^Q(hG>R@Vuhhe|@Z9?B(5 zpeP-SrYaZC*E^dZud7bFuuoQ3r(+pB_A@w7#B1a7IKX~RitCd`#T+drfueYNWV#a1 z)zL&cCZe%op6OW~Pe@SjX$s|)ie{22R27Xq!%!zsq@#)Xb%-sb-jy)t1#$olF+B?2 z9a}WdOo30Zw{NkfO^nmRBu{ovuoQmJH0(la4-xH=-Fj#NNikB}-- zN5MzWRb|j&*(x^<45_2V0t~eG(8ng=zEH)ljtQw_RZkeT?7*WJMpIK_SY=&h%&&Td z)N!ge?5JQiq>dL+&(964w_Cid9_JszHA*gPstCTPnlt5gcSE+MU zC$u?24iar*8m(_fO`dQCwsJwTY8gzLX#9}suMk>xajQHk9wac;x$2y$NWYN%_uT{F zeGRZfYM>f~%+=mnYRE%b?X8UwgE{@?_0{k-w!hF=-T4v%Fde^d{k8mnu9;Lr3^7$m zoghp)dT*U=$(kd2W-wAv^ZGg%3aJy-5LlkQ8sZk>xsVzvYB6MQM@wT!l}cTEr_Kms zNDWiNVSuyi6M8o@lp%GJ8sS$bhtw%*Bm%^c8l^gh)MzzamNzD(#;S2*laRQ2^+2em zp+konjkAYta(N?~#lsv&^*FjqXn!D7*TwrG+KG5|Y`z3q4QXdtMk9I@UtKa)8%^x1 z?(1ayCy&*GKEl}IQxzfkC}0(Wgw%L?C8WyKX?}HjNKH@^L#kZBH_x7_1qF5L)aHwH z)OG^N4+KbBwO{`oj2r+uF&(z&#_N;m zjPYEV3|@qzuJs(9&eV?1q!RP%28~)Wc>erK!-XOp59%B{81Gnahj%&&;jk-%G?9SA z#92u9 z9usVhX%Q4ouCODPGw2naG%551He!Y=U|-DQgjGz-F|1Z3I1Q3htQpDF;&F-O5)7$5 zz~*m9*4L+!08jH4`@N?Q#WtZdY>MG`dt5JLgZyd=VrDfJ;k#Kj(-C@~##@YKqBs(> zX=nD1SgFcXGYxTeCqykObplbnV;z!;3T=VlAZl;BtJBQ1E34A3Yx4n^h8DRs@Rpq} zMP?n?2&7NWWtL%~{mpCriP(~2yRoSOd&F*7*SU5gh8gHn9D>+Rd zn%BQyKbVH0P4_(h$&>dsU42K>Eq8vo`O1BNWIA~8paBDh^dAx%IH0m$RW-)zUpZvZ zfan6Gahe`kwezxdHvTtX)UhfA|-uKVo5Fx^G}+tS=aRR%BH&>Ebia$1bBUeP2~9L4Hq=s z@Q7(Eaph&VG;P|5y+Btrt-Q=UdfUM91%G{W=fYx6mpsZL9s}#~OpR1^avh;01qX*tM1*ss7}Rdqp8Jv z8J;QA@~DY;-JboN-F))seLF8+=@QT0E5dOsxLR^$qbnwsG*kiAC!af4G^Zy|H@B#C zF38b&Zc!ie3gTW?W!H9_TeQNno~+~@w^zxl#Yt|oCRQT(L*&e}ahiRq1Xo(u*}+d5 z@q9R2QHEGqVq@fIvXwd~eo*ekfpO7FG{gatoKu*)1Wd}CLZM7j z&X$dNhvn(j;(1@sRssn3PQl2@Wz%r#n|$xlO~TXpEhM|g)Ga;BpsH77ML3j)6EGnu7)7b?Xh!HmZdYXS~&)6 z0EFxl=XkPYGOlN2Fi0#~i3X6wde-BWh@N?BPuk4HG2E z`DgZq56lmq%W%8_Uk-F?gW`5W;LD@m+};+jl|`+bbJq(*o9P9c9v-4OY}&I5c!lrS z5SvsjhdE_lvSt^OmyRz7F%N70-ase|D<5_#@Mt!O%Nx11fO7#`0n5`kIbl6rPU(eS z`pMo|bB*Z^QGg@;DKbYVN26*zk17z$qtbO73wGR|tXs3@juk*3|H5dxJhl`g=GE!1 zX40@XqJ@ya^*|UWwXMpuJ&cF+hH&27RnAnvV>6}UsSi!7m@t3L*eRnc%0`U^3G74h zsmOy(j3*LuO$}-c2jm`uCog9MwFZG>V%1T7)2TTd9dsNwa1Zhe@QQ4JRb$< zWqJj@UPa%0Mzu`yS_{)ytxh9@_t>9lUZ*$AZul+?QHZIxY@)!dbrdYk-$aEdgh~rG zQ9BgchdVS<$FR0-?VL{?h*fb>QNeqSdl;@6@j>=!JH09NrzyzLr}=? z(`+070uvn%;uZr4eNpO1bLm7ni-u4Q4W-32j4lTluB8!lE1gUm=@d=BdP4-4Oqcy<>o1NrzDtU{y{1X%V2k7&NK_ zAd_?v)zf8kHr-DtdYsaOX1G@unmI1|cAfFGsV8qj$dX`lvl zKE?{tPP{F^h(7ulAon{OO~A_Z34LnlP5;7o0CjOk!#G6WL&HFOw4!0O!srLOXjRkS z(6}@|JV1yN$rtK?EJ7VCVr8}R5m*(`a!h|7718-rK`UuGT}t!mhoIGEni6x(;#^9^ zZAxIlTJXg_#I@jy?mkOXCl4bXq{TfS<8{{5DZr?PCVq@)8pY z;a2Ju9vUeOmp0O{MjC!IMIwcfy!CX_Gc=;KU^Q%QC=zOWCfR1E$;yi?$k~yb)r!g%-fIIS+2l#c*tHgT=cK?0Fb2%Ck_OuK|ABAgXUc2!9R0 zJ&zGC0p;F;efolSY0LPo3-5O|sKq6Em%fAm3%uW@KWjmk(pM;ng?m#2Js-Var@v@H zKNBkuh2Y0(mf9BXVwz!Fxcg|3RtQ0?t5_?9LT&5%liH2tg|w}64IK)$q0{CLb`Lcl z68q_|1&-kpgZCwV{*0fm@Wb>s`n$n~ItKLWfVy1{HvC*_Il6jJY>WgyMWc2M3tWts z(kfp3d&Nrtc=0$U1}`3`B%o1{iTiIee*i20MDK6We>X<> zH@Nj5`kYzg<)@(LP8%=ng|04McDZ=j<>F z6@G&sgQ$Nv+D5I!E}(7rs4g^WJ&h5v=L=*`aS--DqkW>ywNFLf78*Ot7s;Elp2pow zgQ1yDZKUyAsfS$(mo?I9jdXh6Dr%qARFB!kMw);k!kx!FYD*X{3_h9OWIspnOL-QD z^>=4JSiWs_b|$POaexXqgx@xk-!Lqsj@*tS+@22Ojx?E%qB=g7QrwfSlTruJ~+jjGG%L$gW`W1A=r zOm#qvlCAVmvXvf6M(IVcLUHEvu{OW0^y=s-Tj`1aB$1m1TY0Um^ctzwR(e}tGsO!s zN^b}il!+?a4XEv#=A+=)z3aaJbKGPeO+M&gq6@+kCx*+*J*q}*m;4yZC^~d&}ZUmi4P?ZJcS?YBid*IB)Y+6 z_h2nSSRaoC%g51?d@2p$@idCdsEkji1w0X~K7$&#oR;t;I*%vQ`D~(w@z~Q6{D{RW zkli`VL&*u9S7@dvykD+a;iFNA=fn-oLx^*tWRA)>JMu!_3a{sUV#-q<9Sfj5zG-{J$W{Sat?)f9{5>LXL1@G z%77~kbTOYpxA79XkC#Fqm(#O+9=*UTXe*zO^Ue!hA7g7)+~6nJ;)aq$%;ICb?uZ*o zj*s!WEp7q$FGk!#@M!)5;VFQxQ}6m13D?Is-Sshg+2Zyv;_0loX&>W-mL<(){yzE` z-?|o|+_ngv|I1i7P{Qr>QOR0l}4 z{~L~&(35X8@!MJ5t%IDNu2Ofg=;ZB?uB$-0Zi>Xe;i)?AnKlE(>EgVYxJN(F zSWC#)>EcY^dYWaIXLs^_oPC-To@>|73!f<^-(ah&70KH`^O;uB^%1}0W1oc;bw!vI z4KFZji{y2+Hc+KPfKt^+F*D4bt*cvVUDI0Yg)Oy?OY2MUi}$;0u+K#>c(SWTTD*a9 zv-iqa}lC6B`h3zlTJJFqgP2UCGsukvyHWJfDsPuU~{Ww3UkZmvlV8 zM1%Nc$kHn`iC?AJ{5npIa6LD1hIjJ0{4xK4Kjqu_GyXY$&M)(y_)Y%8ktw7*#??4&44c2bnzhOFjcM@78WR_Dj_{hY7W`5?ZN3m|KLn3c1P zI>-J@mLz~3nJh_=B^{?T?|QTVMw2w@Q1b7_;+m&PIjBR&5B*RLgox&rZ>fu)L;s{> zN5O&OZ>bw%NhgH#`8L9&{s4y*4o#`gkg>F|}X|w7^FRFv+Rduk2g~^M*;XnY#2Eur;=x=DoOV;2G zt!hD5l*G0J0*L*MMQ=dLP;vzYw2Y=}#{21ZBqt>sZo%%`5CETS2sj*bGTlzN#)uLm zfe7u$3vEs{?h8XCyx%W|obg|0NN;SP)R7cWJ!phFf##|qbe0-Q=c`g$sfN+rYB)Wl zPNFB&2oEzFU1l`8%xH9((daUx(Pl=#WyV~W8E3i7Sm`q3A(t6Xw9Sl8P8J>c2Jyp* z&a#=|X38@lyq$h)KvBz5+v#$^8@TVjmd??s?rda|lgw3P$x`F!I8{dD)C8KS%4xcq zMDuV}RPtUU%$i(MoyB2|TZ?9DWGWg*hiGK_KnjDxJfyk}3iCAz^BJ80H~0+>@}9@A zl5YAcM+$qoQtCo-JuNx0pd0?Kr=^XwY-O|yEk8SUqMMv*L3f;oQMy5vSA@?;X+J<4 zgcd2xS(?@&h3@)Hb~2RHNNbT$R*Mu$GruIIMCTywl%>9o?bHm4sF_rxW>HTyn@ZJO zXptq*BFpI(buMjC=g~821%05-r;pVSXqURkH8PTMapHroTmXON0{ANzz+buAcQwc9)aeT~2OyIl0~CnkGq_F$mV1T-D7idnajx)E+<#HoP5dU z6Sc`XiqO~N=I$rg4wRcKjN7}PtG))~z5(O@K{I@X z)ZlAR%X}T^CSOOo-PegW`#RHBUl)4KXRiAgKX;qUv~4cawz*8(<}z)Y%d|&qrZvzU z*Uz2d`niTx7A_Ate(q~FtAeew>M%as)?Kr0R;|fl)fFzvJ;A@ZwByF*9ni+3%p@*u zL7QEPR@%?F3I%fj@;9k zk-bf&m6)$PMSMM|$afSS?>m~t_>QH^eEsN3Uw^v6H-K*O4WiY)6ST}2@~?5pzs4p1 z8khWQT=K8cr|@$2u!fI-ROBPzxKv-nDZquF6`Cb}oa%SiC-W9viCYnpu@AsSXs4ye zkiTm_rZE?4B+S628Vn~Y??~GYiI*EvFwOJGo{Edpz@I>dA@aUiMk zW2W4kMX{Z;kh9_d(i^8D^B%q)ACW*LFA~^5Hz;bP8)vNE?TJ^zKM|gR)vkWKPM%!m zm~?|-&M*r2hJ!gHsKPg%X8Fo!h3_=_sqb_!W&%Csn?%q0j4v%0BUaF%I3W}gf)*~D zo^#psoXe)?G;<^xe2#l?5$G4d=1eqLfvm3FjVhp7xJn^0pg$Y(>-I;Xy@dQdC2wD2 zhx{gE|AC*6)*-)~5F^r;pnqVl7zq!1;Ku~`$AFi|vdv2sGQ8x-e)94r5Z4u!@12(p z?tbcFv2P3AyqhK_ z0U~igWDy{;7!XMSBDH`>9lhyG(k@?${^d*a!9H`Ns2T#}feX9{Cw~-i;DS2I8XKV8rq$fgqGX(5nO@`5raW#t65G8VN@7n~#t+ zGDeMLlS<8?XIHlhJ^Q^2Jv@v4DGlraJ)~e;fS$hj;#&gfEd}(J1A3PMdY1!wKLYfw z0Q9b+r+rt`yS{7aec!e8jqf_{?E5kI^WDfN`F_H)eK)yom;=KgJ#FhR=yIHNIe?tw z0&3JuKy{4cHn4NX7ILYh=(v-l(%ngI>XZW`V)hCtJd zaTLZ7?WT_nY6uxj-23!sw-yxKx71E&HI1h8SS&}=^~Tsn+Z_*W*N2NSFDw`Cbtrv0 zT;qT?&tYS(ona{ohTI`+XNe%tx9J(tU}a)*eygb$Qm-&3Ujt9JcvkiMB+ zzsFJOn($t`{u~JZJP7|H2>%u&XFDY4ZAi|qAUW?qY5xXx{kNI{|I2ngfWr=)_G+Y$ zhCjjJZ`VzvZ~}I3_`dM!@S5=b;RhP&!K_cJZ}|J(qb|Pp_4dsT|E@fM2colFvPQyh z0KQm$jn<6KH826<^KABL$A`cS9rr$LONNO!`)s8SeZr6En|=l1M<@0PKNfzxk=7z1 znscH43E?IVh8%zK$?S7)6vI#9Lr>6%f+zxGaf4K82Yn+-T2?oq zAfCEEyjjk_^o>N1XzCLH-yeXEkEq1=M;hR3qG7(BaLqpfT0W%(zR&2qLfc#XsN9;ABFR6?hQTxnwl## fq78invJ3sY=3{KasD$wdBN4{H2bbbg@v#2~nB2D` literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/FXTIC.class b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/FXTIC.class new file mode 100644 index 0000000000000000000000000000000000000000..d0f839cf32e8f0a561df77df161fd60ff1cf9327 GIT binary patch literal 1427 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 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/HttpSend.class b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/HttpSend.class new file mode 100644 index 0000000000000000000000000000000000000000..81200dd12cc2467a719c95afc629663fc86c766b GIT binary patch literal 2543 zcma)8TXz#x6#h<mU#kzH%iHqF2cP^W{s0&1cP2?MG^~)Ubz&)%e^5p1@1(XjwuVv(zVrdV>9IC?25o>(s5UeO5}2xFu^sw+ z|GLDU8u^nTP$?6fUC5ud!y8qj^1+=mfDv;rU7V%dVH)xiO zT-9@&f{|mD_@#1P@vM?2xT0!gvXyG`)q3R$IqW%2 zl6(CW_B-DVSDN%MRQ5Ys=)U8!ESjcOr#ILer(cmneoE7HQ{M0R%@Aziv3_pT6&%4K zUX$v_t5LN#jz{=pa2A|9MxR6cz(oLWa_sasHN3^OUKhYoyv?T(9K&%+QCS!W@ekyG zL}0Xr;OII+(T*BAYtU-!Pvh(8O2z-cXfzU!cGsZS(DMvKpB#@A@(XGCv3M}Krr4FfbeP{Upt{$3fYVZT_T`x-BAlh^SqF8gx=_xw5Ndwv1E z^r(wc-RPn3yE*n_7v*~~#HR_~`saCd&teY}*h}3(YVT)fKfsKJmQ{q1yM8IF4fY5L<#IF^)7NDjg zUU7LEXBu2~(7xhwi6kEAt4@-|u^I+nVzPf5lO5YAJ4m|XH4N>bOt~A!93f2*vYP8u zogp<~CTI+1H_6*Y@O=#P00TY9Fpo3P3S`399^+@yI2P!*N(x2M0Hzug4N{^`(X}lU gEp1S=M6Iy~MMDU_z(k#*O@^jgGbHd14-4Sz|HhVp0ssI2 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/JsonData.class b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/JsonData.class new file mode 100644 index 0000000000000000000000000000000000000000..0a01a1892201aa231e08680fdbe8928328dc11ce GIT binary patch literal 1300 zcma)6Yg5xe6g>-V(}wV{JQYC^#kNQnD=Gr&DCi7O9!?cThcDYUZBt9)BwHN(Rr*C3 znehksqa5!h!Pen1=EL2+n{&_Jdvb4n{r>S2z#N|I=*DdgcQj1JaaTtNQgNhpWH7Dc z9%eLTbtI6|!7;0L_ci1g;uWi5ZVOpsNapL}K=6jJtGpmx%dRdmbT2!$CxtC{M5Adk zBs}S^2q{*}46!B4w&XL0&QyAbA+qe03DKLkY;&`@Uo_pfqS&C5WZo%>#*T0;<%fq6 zS+hKbOx|&;+zTJRFRE6l=s1#pDIYea)$sV5=h*5-N+wn{<+^#uFqTT^OE#}HrQ-Y+lNkp~DDx+?Fzz}W9%FMimIRg*zNW)_T^LWBA(Ngz6&MCnXB$eXIpRZYDz#J-u4hWV9IOml#c?-DG=}VX!2#bnktF(X zD`US})erBeff#yRQ&#GH-}aVFyo;@cH!obmkaco!?>Xwvy{17=fVD8=$ll=}-_DlIrNf V4cw$OC+J<22Avj$TVy*h`3K~dK|%lk literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/MagicApi.class b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/MagicApi.class new file mode 100644 index 0000000000000000000000000000000000000000..32a8482a696b4803c769a5dbf7fcc40712a2f906 GIT binary patch literal 10507 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 literal 0 HcmV?d00001 diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/ThPost.class b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/ThPost.class new file mode 100644 index 0000000000000000000000000000000000000000..215bfc9e84684c0b83a94e6be55663d307bf6241 GIT binary patch literal 5775 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 + + + 4.0.0 + pom + + magic-boot + + + + org.springframework.boot + spring-boot-starter-parent + 2.4.5 + + + + org.ssssssss + magic-boot-parent + 0.0.1 + magic-boot-parent + magic-boot-parent + +