commit d28a4f7303166776920c6e28812b3d00b97328f5 Author: 张光起 <1198568182@qq.com> Date: Wed Mar 26 14:32:15 2025 +0800 1 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 0000000..a4d6283 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/MagicBootApplication.class differ 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 0000000..05f38b3 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/configuration/MagicBootConfiguration.class differ 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 0000000..ceeb02f Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/configuration/WebConfiguration.class differ 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 0000000..dffb0da Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/controller/PLMBomController.class differ 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 0000000..6e97b64 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/controller/U9BomController.class differ 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 0000000..09f270c Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G2CKController.class differ 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 0000000..18fbb02 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G3KCController.class differ 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 0000000..9675749 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G4KHController.class differ 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 0000000..f82eb98 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/cooooo/G8SKDController.class differ 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 0000000..729704d Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/extension/NamedTableFunctionExtension.class differ 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 0000000..aeb18c9 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/extension/ResponseFunctionExtension.class differ 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 0000000..68cc836 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/HttpClientResult.class differ 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 0000000..6c70055 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/HttpClientUtils.class differ 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 0000000..4c6ddcc Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/NewFXAPI.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/XKTokenAccess.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/XKTokenAccess.class new file mode 100644 index 0000000..94c4bcb Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/XKTokenAccess.class differ 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 0000000..bd1a9cd Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/AppAccessToken.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CorpAccessToken.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CorpAccessToken.class new file mode 100644 index 0000000..dab3585 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CorpAccessToken.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiCaseInfo.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiCaseInfo.class new file mode 100644 index 0000000..cb61993 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiCaseInfo.class differ 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 0000000..f6664c6 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiField.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiInfo.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiInfo.class new file mode 100644 index 0000000..7caae9e Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmApiInfo.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmFXApiParam.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmFXApiParam.class new file mode 100644 index 0000000..6cec6ab Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/CrmFXApiParam.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/Token.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/Token.class new file mode 100644 index 0000000..31617cb Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/Token.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/XKopenAPI.class b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/XKopenAPI.class new file mode 100644 index 0000000..b3b7c50 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/fxapi/model/XKopenAPI.class differ 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 0000000..3ff873d Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/interceptor/NamedTableHandlerInterceptor.class differ 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 0000000..569ed3f Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/interceptor/PermissionInterceptor.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/model/CodeCacheMap.class b/magic-boot/target/classes/org/ssssssss/magicboot/model/CodeCacheMap.class new file mode 100644 index 0000000..193350e Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/model/CodeCacheMap.class differ 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 0000000..734b06b Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/model/CorpAccessU9Token.class differ 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 0000000..3f6b94c Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/model/Global.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/model/MagicBootConstants.class b/magic-boot/target/classes/org/ssssssss/magicboot/model/MagicBootConstants.class new file mode 100644 index 0000000..433c31d Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/model/MagicBootConstants.class differ 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 0000000..b2348f4 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/model/StatusCode.class differ 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 0000000..ad3866e Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/model/UeditorConfig.class differ 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 0000000..5103af4 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/provider/ExceptionResultProvider.class differ 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 0000000..4510ca4 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/utils/AddressUtil.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/utils/FileUtils.class b/magic-boot/target/classes/org/ssssssss/magicboot/utils/FileUtils.class new file mode 100644 index 0000000..55fb393 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/utils/FileUtils.class differ 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 0000000..4bc2863 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/utils/WebUtils.class differ 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 0000000..4e1e51d Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/yyU9/U9API.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/APIUtil.class b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/APIUtil.class new file mode 100644 index 0000000..53bf24e Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/APIUtil.class differ 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 0000000..b82a0f9 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/FXHTTP.class differ 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 0000000..d0f839c Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/FXTIC.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/GcjJson.class b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/GcjJson.class new file mode 100644 index 0000000..d0a5624 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/GcjJson.class differ 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 0000000..81200dd Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/HttpSend.class differ 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 0000000..0a01a18 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/JsonData.class differ 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 0000000..32a8482 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/MagicApi.class differ 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 0000000..215bfc9 Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/ThPost.class differ diff --git a/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/U9TokenAccess.class b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/U9TokenAccess.class new file mode 100644 index 0000000..61e3c9a Binary files /dev/null and b/magic-boot/target/classes/org/ssssssss/magicboot/zdyutils/U9TokenAccess.class differ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..338bcaf --- /dev/null +++ b/pom.xml @@ -0,0 +1,24 @@ + + + + 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 + +