diff --git a/db-file/opsli-boot.sql b/db-file/opsli-boot.sql index d8258d12..0dd5bbe7 100644 --- a/db-file/opsli-boot.sql +++ b/db-file/opsli-boot.sql @@ -11,7 +11,7 @@ Target Server Version : 50733 File Encoding : 65001 - Date: 31/05/2021 19:45:22 + Date: 01/06/2021 20:37:34 */ SET NAMES utf8mb4; @@ -44,15 +44,8 @@ CREATE TABLE `gen_logs` ( -- ---------------------------- -- Records of gen_logs -- ---------------------------- -INSERT INTO `gen_logs` VALUES (1340631269252005889, 1340630022558056449, '', 'org.opsli.modulars', 'gentest', 'carinfo', '汽车信息', '汽车信息', 'Parker', 0, 0, 1313694379541635074, '2020-12-20 20:12:57', 1313694379541635074, '2021-02-04 18:48:21'); -INSERT INTO `gen_logs` VALUES (1358361017146384386, 1358360266068172802, '', 'org.opsli.modulars', 'sys', 'options', '系统参数', '系统参数', 'Parker', 0, 0, 1313694379541635074, '2021-02-07 18:24:38', 1313694379541635074, '2021-04-29 11:42:46'); -INSERT INTO `gen_logs` VALUES (1359429290382323714, 1359428685312028674, '', 'org.opsli.modulars.gentest', 'other', 'crypto', '非对称加密管理', '非对称加密', 'Parker', 0, 0, 1313694379541635074, '2021-02-10 17:09:34', 1313694379541635074, '2021-05-26 20:49:11'); -INSERT INTO `gen_logs` VALUES (1397803193668128769, 1397801878237925377, '', 'org.opsli.modulars', 'generator', 'template', '生成模板', '生成模板', '周鹏程', 0, 0, 1313694379541635074, '2021-05-27 14:33:46', 1313694379541635074, '2021-05-27 14:33:46'); -INSERT INTO `gen_logs` VALUES (1397803206473338882, 1397801878237925377, '', 'org.opsli.modulars', 'generator', 'template', '生成模板', '生成模板', '周鹏程', 0, 0, 1313694379541635074, '2021-05-27 14:33:49', 1313694379541635074, '2021-05-27 14:33:49'); -INSERT INTO `gen_logs` VALUES (1398204700121088001, 1398204004021813249, '', 'org.opsli.modulars', 'generator', 'template', '代码模板详情', '代码模板详情', '周鹏程', 1398253704724828162, 0, 1313694379541635074, '2021-05-28 17:09:13', 1313694379541635074, '2021-05-31 19:41:06'); -INSERT INTO `gen_logs` VALUES (1398204718194343938, 1398204004021813249, '', 'org.opsli.modulars', 'generator', 'template', '代码模板详情', '代码模板详情', '周鹏程', 0, 0, 1313694379541635074, '2021-05-28 17:09:17', 1313694379541635074, '2021-05-28 17:09:17'); -INSERT INTO `gen_logs` VALUES (1398205543524204546, 1398204004021813249, '', 'org.opsli.modulars', 'generator', 'template', '代码模板详情', '代码模板详情', '周鹏程', 0, 0, 1313694379541635074, '2021-05-28 17:12:34', 1313694379541635074, '2021-05-28 17:12:34'); -INSERT INTO `gen_logs` VALUES (1398205562738311169, 1398204004021813249, '', 'org.opsli.modulars', 'generator', 'template', '代码模板详情', '代码模板详情', '周鹏程', 0, 0, 1313694379541635074, '2021-05-28 17:12:38', 1313694379541635074, '2021-05-28 17:12:38'); +INSERT INTO `gen_logs` VALUES (1340631269252005889, 1340630022558056449, '', 'org.opsli.modulars', 'gentest', 'carinfo', '汽车信息', '汽车信息', 'Parker', 1398253704724828162, 0, 1313694379541635074, '2020-12-20 20:12:57', 1313694379541635074, '2021-06-01 20:33:43'); +INSERT INTO `gen_logs` VALUES (1359429290382323714, 1359428685312028674, '', 'org.opsli.modulars.gentest', 'other', 'crypto', '非对称加密管理', '非对称加密', 'Parker', 1398253704724828162, 0, 1313694379541635074, '2021-02-10 17:09:34', 1313694379541635074, '2021-06-01 20:34:18'); -- ---------------------------- -- Table structure for gen_table @@ -81,11 +74,8 @@ CREATE TABLE `gen_table` ( -- ---------------------------- INSERT INTO `gen_table` VALUES (1340630022558056449, 'test_car', 'test_car', '0', '测试汽车', 'mysql', '1', NULL, 1, 1313694379541635074, '2020-12-20 20:08:00', 1313694379541635074, '2020-12-20 20:10:48'); INSERT INTO `gen_table` VALUES (1356152016136482817, 'test_car_copy1', 'test_car_copy1', '0', '测试', 'mysql', '1', NULL, 0, 1313694379541635074, '2021-02-01 16:06:51', 1313694379541635074, '2021-02-01 16:06:51'); -INSERT INTO `gen_table` VALUES (1358360266068172802, 'sys_options', 'sys_options', '0', '系统参数', 'mysql', '0', NULL, 1, 1313694379541635074, '2021-02-07 18:21:39', 1313694379541635074, '2021-02-07 18:23:54'); INSERT INTO `gen_table` VALUES (1359428685312028674, 'other_crypto_asymmetric', 'other_crypto_asymmetric', '0', '非对称加密表', 'mysql', '0', NULL, 12, 1313694379541635074, '2021-02-10 17:07:10', 1313694379541635074, '2021-05-26 20:39:14'); INSERT INTO `gen_table` VALUES (1397541427197468673, 'test_user', 'test_user', '0', '某系统用户', 'mysql', '0', NULL, 1, 1313694379541635074, '2021-05-26 21:13:36', 1313694379541635074, '2021-05-26 21:29:06'); -INSERT INTO `gen_table` VALUES (1397801878237925377, 'gen_template', 'gen_template', '0', '代码生成器 - 模板', 'mysql', '1', NULL, 1, 1313694379541635074, '2021-05-27 14:28:32', 1313694379541635074, '2021-05-27 14:30:55'); -INSERT INTO `gen_table` VALUES (1398204004021813249, 'gen_template_detail', 'gen_template_detail', '0', '代码生成器 - 表信息', 'mysql', '0', NULL, 1, 1313694379541635074, '2021-05-28 17:06:27', 1313694379541635074, '2021-05-28 17:07:54'); -- ---------------------------- -- Table structure for gen_table_column @@ -148,15 +138,6 @@ INSERT INTO `gen_table_column` VALUES (1356152017050841090, 1356152016136482817, INSERT INTO `gen_table_column` VALUES (1356152017096978433, 1356152016136482817, 'create_time', 'datetime', NULL, NULL, '创建日期', '0', '1', NULL, NULL, NULL, 'String', NULL, NULL, 10, NULL, 0, 1313694379541635074, '2021-02-01 16:06:52', 1313694379541635074, '2021-02-01 16:06:52'); INSERT INTO `gen_table_column` VALUES (1356152017138921473, 1356152016136482817, 'update_by', 'bigint', 19, 0, '修改用户', '0', '1', NULL, NULL, NULL, 'String', NULL, NULL, 11, NULL, 0, 1313694379541635074, '2021-02-01 16:06:52', 1313694379541635074, '2021-02-01 16:06:52'); INSERT INTO `gen_table_column` VALUES (1356152017180864513, 1356152016136482817, 'update_time', 'datetime', NULL, NULL, '修改日期', '0', '1', NULL, NULL, NULL, 'String', NULL, NULL, 12, NULL, 0, 1313694379541635074, '2021-02-01 16:06:52', 1313694379541635074, '2021-02-01 16:06:52'); -INSERT INTO `gen_table_column` VALUES (1358360833129684994, 1358360266068172802, 'id', 'bigint', 19, 0, '唯一主键', '1', '1', '0', '0', NULL, 'String', NULL, NULL, 0, '', 0, 1313694379541635074, '2021-02-07 18:23:54', 1313694379541635074, '2021-02-07 18:23:54'); -INSERT INTO `gen_table_column` VALUES (1358360833175822337, 1358360266068172802, 'option_code', 'varchar', 100, 0, '参数编号', '0', '1', '1', '1', 'EQ', 'String', '0', NULL, 1, 'IS_GENERAL', 0, 1313694379541635074, '2021-02-07 18:23:54', 1313694379541635074, '2021-02-07 18:23:54'); -INSERT INTO `gen_table_column` VALUES (1358360833221959682, 1358360266068172802, 'option_name', 'varchar', 200, 0, '参数名称', '0', '1', '1', '1', 'LIKE', 'String', '0', NULL, 2, 'IS_GENERAL_WITH_CHINESE', 0, 1313694379541635074, '2021-02-07 18:23:54', 1313694379541635074, '2021-02-07 18:23:54'); -INSERT INTO `gen_table_column` VALUES (1358360833259708417, 1358360266068172802, 'option_value', 'varchar', 500, 0, '参数值', '0', '1', '1', '1', '', 'String', '0', NULL, 3, '', 0, 1313694379541635074, '2021-02-07 18:23:54', 1313694379541635074, '2021-02-07 18:23:54'); -INSERT INTO `gen_table_column` VALUES (1358360833305845762, 1358360266068172802, 'version', 'int', 10, 0, '版本(乐观锁)', '0', '1', '0', '0', NULL, 'Integer', NULL, NULL, 4, '', 0, 1313694379541635074, '2021-02-07 18:23:54', 1313694379541635074, '2021-02-07 18:23:54'); -INSERT INTO `gen_table_column` VALUES (1358360833347788801, 1358360266068172802, 'create_by', 'bigint', 19, 0, '创建用户', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 5, '', 0, 1313694379541635074, '2021-02-07 18:23:54', 1313694379541635074, '2021-02-07 18:23:54'); -INSERT INTO `gen_table_column` VALUES (1358360833385537538, 1358360266068172802, 'create_time', 'datetime', 0, 0, '创建日期', '0', '1', '0', '0', NULL, 'Date', NULL, NULL, 6, '', 0, 1313694379541635074, '2021-02-07 18:23:54', 1313694379541635074, '2021-02-07 18:23:54'); -INSERT INTO `gen_table_column` VALUES (1358360833431674882, 1358360266068172802, 'update_by', 'bigint', 19, 0, '修改用户', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 7, '', 0, 1313694379541635074, '2021-02-07 18:23:54', 1313694379541635074, '2021-02-07 18:23:54'); -INSERT INTO `gen_table_column` VALUES (1358360833469423618, 1358360266068172802, 'update_time', 'datetime', 0, 0, '修改日期', '0', '1', '0', '0', NULL, 'Date', NULL, NULL, 8, '', 0, 1313694379541635074, '2021-02-07 18:23:54', 1313694379541635074, '2021-02-07 18:23:54'); INSERT INTO `gen_table_column` VALUES (1397532779008155650, 1359428685312028674, 'id', 'bigint', 19, 0, '唯一主键', '1', '1', '0', '0', NULL, 'String', NULL, NULL, 0, '', 0, 1313694379541635074, '2021-05-26 20:39:14', 1313694379541635074, '2021-05-26 20:39:14'); INSERT INTO `gen_table_column` VALUES (1397532779071070210, 1359428685312028674, 'public_key', 'blob', 2000, 0, '公钥', '0', '1', '1', '1', '', 'Byte[]', '1', NULL, 1, '', 0, 1313694379541635074, '2021-05-26 20:39:14', 1313694379541635074, '2021-05-26 20:39:14'); INSERT INTO `gen_table_column` VALUES (1397532779104624641, 1359428685312028674, 'private_key', 'varchar', 2000, 0, '私钥', '0', '1', '1', '1', '', 'String', '1', NULL, 2, '', 0, 1313694379541635074, '2021-05-26 20:39:14', 1313694379541635074, '2021-05-26 20:39:14'); @@ -180,25 +161,6 @@ INSERT INTO `gen_table_column` VALUES (1397545330886537218, 1397541427197468673, INSERT INTO `gen_table_column` VALUES (1397545330903314433, 1397541427197468673, 'update_by', 'bigint', 19, 0, '修改用户', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 11, '', 0, 1313694379541635074, '2021-05-26 21:29:07', 1313694379541635074, '2021-05-26 21:29:07'); INSERT INTO `gen_table_column` VALUES (1397545330920091649, 1397541427197468673, 'update_time', 'datetime', 0, 0, '修改日期', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 12, '', 0, 1313694379541635074, '2021-05-26 21:29:07', 1313694379541635074, '2021-05-26 21:29:07'); INSERT INTO `gen_table_column` VALUES (1397545330928480257, 1397541427197468673, 'ts', 'timestamp', 0, 0, '时间戳', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 13, '', 0, 1313694379541635074, '2021-05-26 21:29:07', 1313694379541635074, '2021-05-26 21:29:07'); -INSERT INTO `gen_table_column` VALUES (1397802477998231554, 1397801878237925377, 'id', 'bigint', 19, 0, '主键', '1', '1', '0', '0', NULL, 'String', NULL, NULL, 0, '', 0, 1313694379541635074, '2021-05-27 14:30:55', 1313694379541635074, '2021-05-27 14:30:55'); -INSERT INTO `gen_table_column` VALUES (1397802478023397378, 1397801878237925377, 'temp_name', 'varchar', 100, 0, '模板名称', '0', '1', '1', '1', 'LIKE', 'String', '0', NULL, 1, 'IS_GENERAL_WITH_CHINESE', 0, 1313694379541635074, '2021-05-27 14:30:55', 1313694379541635074, '2021-05-27 14:30:55'); -INSERT INTO `gen_table_column` VALUES (1397802478040174593, 1397801878237925377, 'table_type', 'varchar', 30, 0, '表类型', '0', '1', '1', '1', 'EQ', 'String', '2', 'table_type', 2, '', 0, 1313694379541635074, '2021-05-27 14:30:55', 1313694379541635074, '2021-05-27 14:30:55'); -INSERT INTO `gen_table_column` VALUES (1397802478056951810, 1397801878237925377, 'remark', 'varchar', 255, 0, '备注信息', '0', '0', '0', '1', '', 'String', '1', NULL, 3, '', 0, 1313694379541635074, '2021-05-27 14:30:55', 1313694379541635074, '2021-05-27 14:30:55'); -INSERT INTO `gen_table_column` VALUES (1397802478065340418, 1397801878237925377, 'version', 'int', 10, 0, '版本(乐观锁)', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 4, '', 0, 1313694379541635074, '2021-05-27 14:30:55', 1313694379541635074, '2021-05-27 14:30:55'); -INSERT INTO `gen_table_column` VALUES (1397802478082117633, 1397801878237925377, 'create_by', 'bigint', 19, 0, '创建用户', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 5, '', 0, 1313694379541635074, '2021-05-27 14:30:55', 1313694379541635074, '2021-05-27 14:30:55'); -INSERT INTO `gen_table_column` VALUES (1397802478098894849, 1397801878237925377, 'create_time', 'datetime', 0, 0, '创建日期', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 6, '', 0, 1313694379541635074, '2021-05-27 14:30:55', 1313694379541635074, '2021-05-27 14:30:55'); -INSERT INTO `gen_table_column` VALUES (1397802478107283458, 1397801878237925377, 'update_by', 'bigint', 19, 0, '修改用户', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 7, '', 0, 1313694379541635074, '2021-05-27 14:30:55', 1313694379541635074, '2021-05-27 14:30:55'); -INSERT INTO `gen_table_column` VALUES (1397802478124060673, 1397801878237925377, 'update_time', 'datetime', 0, 0, '修改日期', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 8, '', 0, 1313694379541635074, '2021-05-27 14:30:55', 1313694379541635074, '2021-05-27 14:30:55'); -INSERT INTO `gen_table_column` VALUES (1398204372311064578, 1398204004021813249, 'id', 'bigint', 19, 0, '主键', '1', '1', '0', '0', NULL, 'String', NULL, NULL, 0, '', 0, 1313694379541635074, '2021-05-28 17:07:54', 1313694379541635074, '2021-05-28 17:07:54'); -INSERT INTO `gen_table_column` VALUES (1398204372311064579, 1398204004021813249, 'parent_id', 'bigint', 19, 0, '父级ID', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 1, '', 0, 1313694379541635074, '2021-05-28 17:07:54', 1313694379541635074, '2021-05-28 17:07:54'); -INSERT INTO `gen_table_column` VALUES (1398204372311064580, 1398204004021813249, 'path', 'varchar', 255, 0, '路径', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 2, '', 0, 1313694379541635074, '2021-05-28 17:07:54', 1313694379541635074, '2021-05-28 17:07:54'); -INSERT INTO `gen_table_column` VALUES (1398204372780826625, 1398204004021813249, 'file_name', 'varchar', 100, 0, '文件名', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 3, 'IS_NOT_NULL', 0, 1313694379541635074, '2021-05-28 17:07:55', 1313694379541635074, '2021-05-28 17:07:55'); -INSERT INTO `gen_table_column` VALUES (1398204372780826626, 1398204004021813249, 'file_content', 'varchar', 100, 0, '文件内容', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 4, '', 0, 1313694379541635074, '2021-05-28 17:07:55', 1313694379541635074, '2021-05-28 17:07:55'); -INSERT INTO `gen_table_column` VALUES (1398204372780826627, 1398204004021813249, 'version', 'int', 10, 0, '版本(乐观锁)', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 5, '', 0, 1313694379541635074, '2021-05-28 17:07:55', 1313694379541635074, '2021-05-28 17:07:55'); -INSERT INTO `gen_table_column` VALUES (1398204372780826628, 1398204004021813249, 'create_by', 'bigint', 19, 0, '创建用户', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 6, '', 0, 1313694379541635074, '2021-05-28 17:07:55', 1313694379541635074, '2021-05-28 17:07:55'); -INSERT INTO `gen_table_column` VALUES (1398204372780826629, 1398204004021813249, 'create_time', 'datetime', 0, 0, '创建日期', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 7, '', 0, 1313694379541635074, '2021-05-28 17:07:55', 1313694379541635074, '2021-05-28 17:07:55'); -INSERT INTO `gen_table_column` VALUES (1398204372780826630, 1398204004021813249, 'update_by', 'bigint', 19, 0, '修改用户', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 8, '', 0, 1313694379541635074, '2021-05-28 17:07:55', 1313694379541635074, '2021-05-28 17:07:55'); -INSERT INTO `gen_table_column` VALUES (1398204372780826631, 1398204004021813249, 'update_time', 'datetime', 0, 0, '修改日期', '0', '1', '0', '0', NULL, 'String', NULL, NULL, 9, '', 0, 1313694379541635074, '2021-05-28 17:07:55', 1313694379541635074, '2021-05-28 17:07:55'); -- ---------------------------- -- Table structure for gen_template @@ -220,8 +182,7 @@ CREATE TABLE `gen_template` ( -- ---------------------------- -- Records of gen_template -- ---------------------------- -INSERT INTO `gen_template` VALUES (1397828582130040834, '12312', '0', '123123', 9, 1, '2021-05-27 16:14:39', 1313694379541635074, '2021-05-28 20:12:43'); -INSERT INTO `gen_template` VALUES (1398253704724828162, 'Form表单', '0', '', 20, 1313694379541635074, '2021-05-28 20:23:56', 1313694379541635074, '2021-05-31 16:52:58'); +INSERT INTO `gen_template` VALUES (1398253704724828162, 'Form表单', '0', '', 28, 1313694379541635074, '2021-05-28 20:23:56', 1313694379541635074, '2021-06-01 20:34:07'); -- ---------------------------- -- Table structure for gen_template_detail @@ -234,6 +195,7 @@ CREATE TABLE `gen_template_detail` ( `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '路径', `file_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件名', `file_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件内容', + `ignore_file_name` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '忽略文件名', `version` int(11) NOT NULL COMMENT '版本(乐观锁)', `create_by` bigint(19) NOT NULL COMMENT '创建用户', `create_time` datetime(0) NOT NULL COMMENT '创建日期', @@ -246,18 +208,18 @@ CREATE TABLE `gen_template_detail` ( -- ---------------------------- -- Records of gen_template_detail -- ---------------------------- -INSERT INTO `gen_template_detail` VALUES (1398290849854382081, 1398253704724828162, '0', 'org/opsli/api/web/${moduleName}/${subModuleName}', 'RestApi.java', '/**\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\n *

\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *

\n * http://www.apache.org/licenses/LICENSE-2.0\n *

\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(apiPath).web.#(data.moduleName+\".\"+data.subModuleName);\n#else\npackage #(apiPath).web.#(data.moduleName);\n#end\n\nimport #(apiPath).base.result.ResultVo;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\nimport #(apiPath).wrapper.#(data.moduleName+\".\"+data.subModuleName).#(data.model.tableHumpName)Model;\n#else\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\n#end\n\n\n/**\n * #(data.codeTitle) Api\n *\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\n *\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\npublic interface #(data.model.tableHumpName)RestApi {\n\n /** 标题 */\n String TITLE = \"#(data.codeTitle)\";\n /** 子标题 */\n String SUB_TITLE = \"#(data.codeTitleBrief)\";\n\n /**\n * #(data.codeTitle) 查一条\n * @param model 模型\n * @return ResultVo\n */\n @GetMapping(\"/get\")\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\n\n /**\n * #(data.codeTitle) 查询分页\n * @param pageNo 当前页\n * @param pageSize 每页条数\n * @param request request\n * @return ResultVo\n */\n @GetMapping(\"/findPage\")\n ResultVo findPage(\n @RequestParam(name = \"pageNo\", defaultValue = \"1\") Integer pageNo,\n @RequestParam(name = \"pageSize\", defaultValue = \"10\") Integer pageSize,\n HttpServletRequest request\n );\n\n /**\n * #(data.codeTitle) 新增\n * @param model 模型\n * @return ResultVo\n */\n @PostMapping(\"/insert\")\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\n\n /**\n * #(data.codeTitle) 修改\n * @param model 模型\n * @return ResultVo\n */\n @PostMapping(\"/update\")\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\n\n /**\n * #(data.codeTitle) 删除\n * @param id ID\n * @return ResultVo\n */\n @PostMapping(\"/del\")\n ResultVo del(String id);\n\n /**\n * #(data.codeTitle) 批量删除\n * @param ids ID 数组\n * @return ResultVo\n */\n @PostMapping(\"/delAll\")\n ResultVo delAll(String ids);\n\n /**\n * #(data.codeTitle) Excel 导出\n *\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\n * 因为在 导出不成功时,需要推送错误信息,\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\n * response 推送 javascript代码 alert 提示报错信息\n *\n * @param request request\n * @param response response\n */\n @GetMapping(\"/exportExcel\")\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\n\n /**\n * #(data.codeTitle) Excel 导入\n * @param request 文件流 request\n * @return ResultVo\n */\n @PostMapping(\"/importExcel\")\n ResultVo importExcel(MultipartHttpServletRequest request);\n\n /**\n * #(data.codeTitle) Excel 下载导入模版\n * @param response response\n * @return ResultVo\n */\n @GetMapping(\"/importExcel/template\")\n void importTemplate(HttpServletResponse response);\n\n}\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398290849921490945, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/entity', 'Entity.java', '/**\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\n *

\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *

\n * http://www.apache.org/licenses/LICENSE-2.0\n *

\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).entity;\n#else\npackage #(data.packageName+\".\"+data.moduleName).entity;\n#end\n\n#for(pkg : data.model.entityPkgList)\nimport #(pkg);\n#end\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableLogic;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport org.opsli.core.base.entity.BaseEntity;\n\n/**\n * #(data.codeTitle) Entity\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\n@Data\n@EqualsAndHashCode(callSuper = false)\npublic class #(data.model.tableHumpName) extends BaseEntity {\n\n\n #for(column : data.model.columnList)\n ### 不等于 删除字段 和 不等于 租户字段放入上边\n #if(column.fieldHumpName != \"deleted\" && column.fieldHumpName != \"tenantId\")\n /** #(column.fieldComments) */\n #if(!column.izNotNull)\n @TableField(updateStrategy = FieldStrategy.IGNORED)\n #end\n private #(column.javaType) #(column.fieldHumpName);\n\n #end\n #end\n\n // ========================================\n\n ### 专门处理 删除字段 和 租户字段\n #for(column : data.model.columnList)\n #if(column.fieldHumpName == \"deleted\")\n /** 逻辑删除字段 */\n @TableLogic\n private Integer deleted;\n #else if(column.fieldHumpName == \"tenantId\")\n /** 多租户字段 */\n private String tenantId;\n #end\n\n #end\n\n}\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398290849984405505, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/mapper', 'Mapper.java', '/**\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\n *

\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *

\n * http://www.apache.org/licenses/LICENSE-2.0\n *

\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).mapper;\n#else\npackage #(data.packageName+\".\"+data.moduleName).mapper;\n#end\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n#if(data.subModuleName != null && data.subModuleName != \"\")\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).entity.#(data.model.tableHumpName);\n#else\nimport #(data.packageName+\".\"+data.moduleName).entity.#(data.model.tableHumpName);\n#end\n\n/**\n * #(data.codeTitle) Mapper\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\n@Mapper\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\n\n}\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398290849984405506, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/mapper/xml', 'MapperXML.xml', '\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\n\n#else\n\n#end\n\n\n\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398290850047320066, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/service', 'Service.java', '/**\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\n *

\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *

\n * http://www.apache.org/licenses/LICENSE-2.0\n *

\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).service;\n#else\npackage #(data.packageName+\".\"+data.moduleName).service;\n#end\n\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\n\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName+\".\"+data.subModuleName).#(data.model.tableHumpName)Model;\n#else\nimport #(data.packageName+\".\"+data.moduleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\n#end\n\n/**\n * #(data.codeTitle) Service\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\n\n}\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398290850110234625, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/service/impl', 'ServiceImpl.java', '/**\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\n *

\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *

\n * http://www.apache.org/licenses/LICENSE-2.0\n *

\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).service.impl;\n#else\npackage #(data.packageName+\".\"+data.moduleName).service.impl;\n#end\n\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName+\".\"+data.subModuleName).#(data.model.tableHumpName)Model;\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\n#else\nimport #(data.packageName+\".\"+data.moduleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\nimport #(data.packageName+\".\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\nimport #(data.packageName+\".\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\n#end\n\n\n/**\n * #(data.codeTitle) Service Impl\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\n@Service\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\n implements I#(data.model.tableHumpName)Service {\n\n @Autowired(required = false)\n private #(data.model.tableHumpName)Mapper mapper;\n\n}\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398290850173149186, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/web', 'RestController.java', '/**\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\n *

\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *

\n * http://www.apache.org/licenses/LICENSE-2.0\n *

\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).web;\n#else\npackage #(data.packageName+\".\"+data.moduleName).web;\n#end\n\nimport cn.hutool.core.util.ReflectUtil;\nimport cn.hutool.core.convert.Convert;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport lombok.extern.slf4j.Slf4j;\nimport org.opsli.common.annotation.RequiresPermissionsCus;\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\nimport #(apiPath).base.result.ResultVo;\nimport org.opsli.common.annotation.ApiRestController;\nimport org.opsli.common.annotation.EnableLog;\nimport org.opsli.core.base.controller.BaseRestController;\nimport org.opsli.core.persistence.Page;\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.lang.reflect.Method;\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName+\".\"+data.subModuleName).#(data.model.tableHumpName)Model;\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\nimport #(apiPath).web.#(data.moduleName+\".\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\n#else\nimport #(data.packageName+\".\"+data.moduleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\nimport #(data.packageName+\".\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\n#end\n\n/**\n * #(data.codeTitle) Controller\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\n@Slf4j\n#if(data.subModuleName != null && data.subModuleName != \"\")\n@ApiRestController(\"/#(data.moduleName)/#(data.subModuleName)\")\n#else\n@ApiRestController(\"/#(data.moduleName)\")\n#end\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\n implements #(data.model.tableHumpName)RestApi {\n\n\n /**\n * #(data.codeTitleBrief) 查一条\n * @param model 模型\n * @return ResultVo\n */\n @ApiOperation(value = \"获得单条#(data.codeTitleBrief)\", notes = \"获得单条#(data.codeTitleBrief) - ID\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_select\")\n #end\n @Override\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\n // 如果系统内部调用 则直接查数据库\n if(model != null && model.getIzApi() != null && model.getIzApi()){\n model = IService.get(model);\n }\n return ResultVo.success(model);\n }\n\n /**\n * #(data.codeTitleBrief) 查询分页\n * @param pageNo 当前页\n * @param pageSize 每页条数\n * @param request request\n * @return ResultVo\n */\n @ApiOperation(value = \"获得分页数据\", notes = \"获得分页数据 - 查询构造器\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_select\")\n #end\n @Override\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\n\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\n page.setQueryWrapper(queryBuilder.build());\n page = IService.findPage(page);\n\n return ResultVo.success(page.getPageData());\n }\n\n /**\n * #(data.codeTitleBrief) 新增\n * @param model 模型\n * @return ResultVo\n */\n @ApiOperation(value = \"新增#(data.codeTitleBrief)数据\", notes = \"新增#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_insert\")\n #end\n @EnableLog\n @Override\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\n // 调用新增方法\n IService.insert(model);\n return ResultVo.success(\"新增#(data.codeTitleBrief)成功\");\n }\n\n /**\n * #(data.codeTitleBrief) 修改\n * @param model 模型\n * @return ResultVo\n */\n @ApiOperation(value = \"修改#(data.codeTitleBrief)数据\", notes = \"修改#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_update\")\n #end\n @EnableLog\n @Override\n public ResultVo update(#(data.model.tableHumpName)Model model) {\n // 调用修改方法\n IService.update(model);\n return ResultVo.success(\"修改#(data.codeTitleBrief)成功\");\n }\n\n\n /**\n * #(data.codeTitleBrief) 删除\n * @param id ID\n * @return ResultVo\n */\n @ApiOperation(value = \"删除#(data.codeTitleBrief)数据\", notes = \"删除#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_update\")\n #end\n @EnableLog\n @Override\n public ResultVo del(String id){\n IService.delete(id);\n return ResultVo.success(\"删除#(data.codeTitleBrief)成功\");\n }\n\n /**\n * #(data.codeTitleBrief) 批量删除\n * @param ids ID 数组\n * @return ResultVo\n */\n @ApiOperation(value = \"批量删除#(data.codeTitleBrief)数据\", notes = \"批量删除#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_update\")\n #end\n @EnableLog\n @Override\n public ResultVo delAll(String ids){\n String[] idArray = Convert.toStrArray(ids);\n IService.deleteAll(idArray);\n return ResultVo.success(\"批量删除#(data.codeTitleBrief)成功\");\n }\n\n\n /**\n * #(data.codeTitleBrief) Excel 导出\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\n *\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\n * 因为在 导出不成功时,需要推送错误信息,\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\n * response 推送 javascript代码 alert 提示报错信息\n *\n * @param request request\n * @param response response\n */\n @ApiOperation(value = \"导出Excel\", notes = \"导出Excel\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissionsCus(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\")\n #else\n @RequiresPermissionsCus(\"#(data.moduleName.toLowerCase())_export\")\n #end\n @EnableLog\n @Override\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\n // 当前方法\n Method method = ReflectUtil.getMethodByName(this.getClass(), \"exportExcel\");\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\n }\n\n /**\n * #(data.codeTitleBrief) Excel 导入\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\n * @param request 文件流 request\n * @return ResultVo\n */\n @ApiOperation(value = \"导入Excel\", notes = \"导入Excel\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_import\")\n #end\n @EnableLog\n @Override\n public ResultVo importExcel(MultipartHttpServletRequest request) {\n return super.importExcel(request);\n }\n\n /**\n * #(data.codeTitleBrief) Excel 下载导入模版\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\n * @param response response\n */\n @ApiOperation(value = \"导出Excel模版\", notes = \"导出Excel模版\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissionsCus(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\")\n #else\n @RequiresPermissionsCus(\"#(data.moduleName.toLowerCase())_import\")\n #end\n @Override\n public void importTemplate(HttpServletResponse response) {\n // 当前方法\n Method method = ReflectUtil.getMethodByName(this.getClass(), \"importTemplate\");\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\n }\n\n}\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398290850298978306, 1398253704724828162, '0', 'org/opsli/api/wrapper/${moduleName}/${subModuleName}', 'Model.java', '/**\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\n *

\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *

\n * http://www.apache.org/licenses/LICENSE-2.0\n *

\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(apiPath).wrapper.#(data.moduleName+\".\"+data.subModuleName);\n#else\npackage #(apiPath).wrapper.#(data.moduleName);\n#end\n\n#for(pkg : data.model.entityPkgList)\nimport #(pkg);\n#end\nimport com.alibaba.excel.annotation.ExcelProperty;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport #(apiPath).base.warpper.ApiWrapper;\nimport org.opsli.common.annotation.validator.Validator;\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\nimport org.opsli.common.enums.ValidatorType;\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport org.springframework.format.annotation.DateTimeFormat;\n\n/**\n* #(data.codeTitle) Model\n*\n* @author #(data.authorName)\n* @date #(currTime)\n*/\n@Data\n@EqualsAndHashCode(callSuper = false)\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\n\n #for(column : data.model.columnList)\n ### 不等于 删除字段 和 不等于 租户字段放入上边\n #if(column.fieldHumpName != \"deleted\" && column.fieldHumpName != \"tenantId\")\n /** #(column.fieldComments) */\n @ApiModelProperty(value = \"#(column.fieldComments)\")\n @ExcelProperty(value = \"#(column.fieldComments)\", order = #(column.sort))\n #if(column.dictTypeCode != null && column.dictTypeCode != \"\")\n @ExcelInfo( dictType = \"#(column.dictTypeCode)\" )\n #else\n @ExcelInfo\n #end\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\n @Validator({\n #for(typeAndComma : column.validateTypeAndCommaList)\n ValidatorType.#(typeAndComma)\n #end\n })\n #end\n #if(column.fieldLength != null && column.fieldLength > 0)\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\n #else\n @ValidatorLenMax(#(column.fieldLength))\n #end\n #end\n ### 日期处理\n #if(column.javaType == \"Date\")\n #if(column.showType == \"4\")\n @JsonFormat(timezone = \"GMT+8\", pattern = \"yyyy-MM-dd\")\n @DateTimeFormat(pattern = \"yyyy-MM-dd\")\n #else\n @JsonFormat(timezone = \"GMT+8\", pattern = \"yyyy-MM-dd HH:mm:ss\")\n @DateTimeFormat(pattern = \"yyyy-MM-dd HH:mm:ss\")\n #end\n #end\n private #(column.javaType) #(column.fieldHumpName);\n\n #end\n #end\n\n\n}\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398292023416446977, 1398253704724828162, '1', 'src/api/${moduleName}/${subModuleName}', 'Api.js', 'import request from \"@/utils/request\";\nimport {downloadFileByData} from \"@/utils/download\";\n\nexport function getList(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/findPage\",\n #else\n url: \"#(apiPath)/#(data.moduleName)/findPage\",\n #end\n method: \"get\",\n params: data,\n });\n}\n\n\nexport function doInsert(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/insert\",\n #else\n url: \"#(apiPath)/#(data.moduleName)/insert\",\n #end\n method: \"post\",\n data,\n });\n}\n\nexport function doUpdate(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/update\",\n #else\n url: \"#(apiPath)/#(data.moduleName)/update\",\n #end\n method: \"post\",\n data,\n });\n}\n\nexport function doDelete(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/del\",\n #else\n url: \"#(apiPath)/#(data.moduleName)/del\",\n #end\n method: \"post\",\n params: data,\n });\n}\n\nexport function doDeleteAll(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/delAll\",\n #else\n url: \"#(apiPath)/#(data.moduleName)/delAll\",\n #end\n method: \"post\",\n params: data,\n });\n}\n\n\n/**\n* 导出Excel 目前只支持一层参数传递\n* @param data\n* @returns file\n*/\nexport function doExportExcel(data) {\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let requestURL = \"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/exportExcel\";\n #else\n let requestURL = \"#(apiPath)/#(data.moduleName)/exportExcel\";\n #end\n // 下载文件\n downloadFileByData(requestURL, data);\n}\n\n\n/**\n* 下载模版\n* @returns file\n*/\nexport function doDownloadTemplate() {\n let data = {};\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let requestURL = \"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel/template\";\n #else\n let requestURL = \"#(apiPath)/#(data.moduleName)/importExcel/template\";\n #end\n // 下载文件\n downloadFileByData(requestURL, data);\n}\n\n/**\n* 导入Excel\n* @returns file\n*/\nexport function doImportExcel(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel\",\n #else\n url: \"#(apiPath)/#(data.moduleName)/importExcel\",\n #end\n method: \"post\",\n // 最长超时时间 3 分钟\n timeout: 180000,\n headers: {\n \"Content-Type\": \"multipart/form-data\"\n },\n data,\n });\n}\n\n\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398292023479361537, 1398253704724828162, '1', 'src/views/modules/${moduleName}/${subModuleName}', 'index.vue', '\n\n\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398292023609384961, 1398253704724828162, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', 'Edit.vue', '\n\n\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); -INSERT INTO `gen_template_detail` VALUES (1398292023676493826, 1398253704724828162, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', 'Import.vue', '\n\n\n', 0, 1313694379541635074, '2021-05-31 16:52:58', 1313694379541635074, '2021-05-31 16:52:58'); +INSERT INTO `gen_template_detail` VALUES (1399705818550484994, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/entity', 'Entity.java', '#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).entity;\n#else\npackage #(data.packageName+\".\"+data.moduleName).entity;\n#end\n\n#for(pkg : data.model.entityPkgList)\nimport #(pkg);\n#end\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableLogic;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport org.opsli.core.base.entity.BaseEntity;\n\n/**\n * #(data.codeTitle) Entity\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\n@Data\n@EqualsAndHashCode(callSuper = false)\npublic class #(data.model.tableHumpName) extends BaseEntity {\n\n\n #for(column : data.model.columnList)\n ### 不等于 删除字段 和 不等于 租户字段放入上边\n #if(column.fieldHumpName != \"deleted\" && column.fieldHumpName != \"tenantId\")\n /** #(column.fieldComments) */\n #if(!column.izNotNull)\n @TableField(updateStrategy = FieldStrategy.IGNORED)\n #end\n private #(column.javaType) #(column.fieldHumpName);\n\n #end\n #end\n\n // ========================================\n\n ### 专门处理 删除字段 和 租户字段\n #for(column : data.model.columnList)\n #if(column.fieldHumpName == \"deleted\")\n /** 逻辑删除字段 */\n @TableLogic\n private Integer deleted;\n #else if(column.fieldHumpName == \"tenantId\")\n /** 多租户字段 */\n private String tenantId;\n #end\n\n #end\n\n}', '1', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705818613399554, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/mapper', 'Mapper.java', '#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).mapper;\n#else\npackage #(data.packageName+\".\"+data.moduleName).mapper;\n#end\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n#if(data.subModuleName != null && data.subModuleName != \"\")\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).entity.#(data.model.tableHumpName);\n#else\nimport #(data.packageName+\".\"+data.moduleName).entity.#(data.model.tableHumpName);\n#end\n\n/**\n * #(data.codeTitle) Mapper\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\n@Mapper\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\n\n}', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705818613399555, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/mapper/xml', 'Mapper.xml', '\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\n\n#else\n\n#end\n\n\n', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705818680508418, 1398253704724828162, '0', 'org/opsli/api/wrapper/${moduleName}/${subModuleName}', 'Model.java', '#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(apiPath).wrapper.#(data.moduleName+\".\"+data.subModuleName);\n#else\npackage #(apiPath).wrapper.#(data.moduleName);\n#end\n\n#for(pkg : data.model.entityPkgList)\nimport #(pkg);\n#end\nimport com.alibaba.excel.annotation.ExcelProperty;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport #(apiPath).base.warpper.ApiWrapper;\nimport org.opsli.common.annotation.validator.Validator;\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\nimport org.opsli.common.enums.ValidatorType;\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport org.springframework.format.annotation.DateTimeFormat;\n\n/**\n* #(data.codeTitle) Model\n*\n* @author #(data.authorName)\n* @date #(currTime)\n*/\n@Data\n@EqualsAndHashCode(callSuper = false)\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\n\n #for(column : data.model.columnList)\n ### 不等于 删除字段 和 不等于 租户字段放入上边\n #if(column.fieldHumpName != \"deleted\" && column.fieldHumpName != \"tenantId\")\n /** #(column.fieldComments) */\n @ApiModelProperty(value = \"#(column.fieldComments)\")\n @ExcelProperty(value = \"#(column.fieldComments)\", order = #(column.sort))\n #if(column.dictTypeCode != null && column.dictTypeCode != \"\")\n @ExcelInfo( dictType = \"#(column.dictTypeCode)\" )\n #else\n @ExcelInfo\n #end\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\n @Validator({\n #for(typeAndComma : column.validateTypeAndCommaList)\n ValidatorType.#(typeAndComma)\n #end\n })\n #end\n #if(column.fieldLength != null && column.fieldLength > 0)\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\n #else\n @ValidatorLenMax(#(column.fieldLength))\n #end\n #end\n ### 日期处理\n #if(column.javaType == \"Date\")\n #if(column.showType == \"4\")\n @JsonFormat(timezone = \"GMT+8\", pattern = \"yyyy-MM-dd\")\n @DateTimeFormat(pattern = \"yyyy-MM-dd\")\n #else\n @JsonFormat(timezone = \"GMT+8\", pattern = \"yyyy-MM-dd HH:mm:ss\")\n @DateTimeFormat(pattern = \"yyyy-MM-dd HH:mm:ss\")\n #end\n #end\n private #(column.javaType) #(column.fieldHumpName);\n\n #end\n #end\n\n\n}', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705818743422977, 1398253704724828162, '0', 'org/opsli/api/web/${moduleName}/${subModuleName}', 'RestApi.java', '#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(apiPath).web.#(data.moduleName+\".\"+data.subModuleName);\n#else\npackage #(apiPath).web.#(data.moduleName);\n#end\n\nimport #(apiPath).base.result.ResultVo;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\nimport #(apiPath).wrapper.#(data.moduleName+\".\"+data.subModuleName).#(data.model.tableHumpName)Model;\n#else\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\n#end\n\n\n/**\n * #(data.codeTitle) Api\n *\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\n *\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\npublic interface #(data.model.tableHumpName)RestApi {\n\n /** 标题 */\n String TITLE = \"#(data.codeTitle)\";\n /** 子标题 */\n String SUB_TITLE = \"#(data.codeTitleBrief)\";\n\n /**\n * #(data.codeTitle) 查一条\n * @param model 模型\n * @return ResultVo\n */\n @GetMapping(\"/get\")\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\n\n /**\n * #(data.codeTitle) 查询分页\n * @param pageNo 当前页\n * @param pageSize 每页条数\n * @param request request\n * @return ResultVo\n */\n @GetMapping(\"/findPage\")\n ResultVo findPage(\n @RequestParam(name = \"pageNo\", defaultValue = \"1\") Integer pageNo,\n @RequestParam(name = \"pageSize\", defaultValue = \"10\") Integer pageSize,\n HttpServletRequest request\n );\n\n /**\n * #(data.codeTitle) 新增\n * @param model 模型\n * @return ResultVo\n */\n @PostMapping(\"/insert\")\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\n\n /**\n * #(data.codeTitle) 修改\n * @param model 模型\n * @return ResultVo\n */\n @PostMapping(\"/update\")\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\n\n /**\n * #(data.codeTitle) 删除\n * @param id ID\n * @return ResultVo\n */\n @PostMapping(\"/del\")\n ResultVo del(String id);\n\n /**\n * #(data.codeTitle) 批量删除\n * @param ids ID 数组\n * @return ResultVo\n */\n @PostMapping(\"/delAll\")\n ResultVo delAll(String ids);\n\n /**\n * #(data.codeTitle) Excel 导出\n *\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\n * 因为在 导出不成功时,需要推送错误信息,\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\n * response 推送 javascript代码 alert 提示报错信息\n *\n * @param request request\n * @param response response\n */\n @GetMapping(\"/exportExcel\")\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\n\n /**\n * #(data.codeTitle) Excel 导入\n * @param request 文件流 request\n * @return ResultVo\n */\n @PostMapping(\"/importExcel\")\n ResultVo importExcel(MultipartHttpServletRequest request);\n\n /**\n * #(data.codeTitle) Excel 下载导入模版\n * @param response response\n */\n @GetMapping(\"/importExcel/template\")\n void importTemplate(HttpServletResponse response);\n\n}', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705818806337537, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/web', 'RestController.java', '#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).web;\n#else\npackage #(data.packageName+\".\"+data.moduleName).web;\n#end\n\nimport cn.hutool.core.util.ReflectUtil;\nimport cn.hutool.core.convert.Convert;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport lombok.extern.slf4j.Slf4j;\nimport org.opsli.common.annotation.RequiresPermissionsCus;\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\nimport #(apiPath).base.result.ResultVo;\nimport org.opsli.common.annotation.ApiRestController;\nimport org.opsli.common.annotation.EnableLog;\nimport org.opsli.core.base.controller.BaseRestController;\nimport org.opsli.core.persistence.Page;\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.lang.reflect.Method;\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName+\".\"+data.subModuleName).#(data.model.tableHumpName)Model;\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\nimport #(apiPath).web.#(data.moduleName+\".\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\n#else\nimport #(data.packageName+\".\"+data.moduleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\nimport #(data.packageName+\".\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\n#end\n\n/**\n * #(data.codeTitle) Controller\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\n@Slf4j\n#if(data.subModuleName != null && data.subModuleName != \"\")\n@ApiRestController(\"/#(data.moduleName)/#(data.subModuleName)\")\n#else\n@ApiRestController(\"/#(data.moduleName)\")\n#end\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\n implements #(data.model.tableHumpName)RestApi {\n\n\n /**\n * #(data.codeTitleBrief) 查一条\n * @param model 模型\n * @return ResultVo\n */\n @ApiOperation(value = \"获得单条#(data.codeTitleBrief)\", notes = \"获得单条#(data.codeTitleBrief) - ID\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_select\")\n #end\n @Override\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\n // 如果系统内部调用 则直接查数据库\n if(model != null && model.getIzApi() != null && model.getIzApi()){\n model = IService.get(model);\n }\n return ResultVo.success(model);\n }\n\n /**\n * #(data.codeTitleBrief) 查询分页\n * @param pageNo 当前页\n * @param pageSize 每页条数\n * @param request request\n * @return ResultVo\n */\n @ApiOperation(value = \"获得分页数据\", notes = \"获得分页数据 - 查询构造器\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_select\")\n #end\n @Override\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\n\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\n page.setQueryWrapper(queryBuilder.build());\n page = IService.findPage(page);\n\n return ResultVo.success(page.getPageData());\n }\n\n /**\n * #(data.codeTitleBrief) 新增\n * @param model 模型\n * @return ResultVo\n */\n @ApiOperation(value = \"新增#(data.codeTitleBrief)数据\", notes = \"新增#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_insert\")\n #end\n @EnableLog\n @Override\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\n // 调用新增方法\n IService.insert(model);\n return ResultVo.success(\"新增#(data.codeTitleBrief)成功\");\n }\n\n /**\n * #(data.codeTitleBrief) 修改\n * @param model 模型\n * @return ResultVo\n */\n @ApiOperation(value = \"修改#(data.codeTitleBrief)数据\", notes = \"修改#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_update\")\n #end\n @EnableLog\n @Override\n public ResultVo update(#(data.model.tableHumpName)Model model) {\n // 调用修改方法\n IService.update(model);\n return ResultVo.success(\"修改#(data.codeTitleBrief)成功\");\n }\n\n\n /**\n * #(data.codeTitleBrief) 删除\n * @param id ID\n * @return ResultVo\n */\n @ApiOperation(value = \"删除#(data.codeTitleBrief)数据\", notes = \"删除#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_update\")\n #end\n @EnableLog\n @Override\n public ResultVo del(String id){\n IService.delete(id);\n return ResultVo.success(\"删除#(data.codeTitleBrief)成功\");\n }\n\n /**\n * #(data.codeTitleBrief) 批量删除\n * @param ids ID 数组\n * @return ResultVo\n */\n @ApiOperation(value = \"批量删除#(data.codeTitleBrief)数据\", notes = \"批量删除#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_update\")\n #end\n @EnableLog\n @Override\n public ResultVo delAll(String ids){\n String[] idArray = Convert.toStrArray(ids);\n IService.deleteAll(idArray);\n return ResultVo.success(\"批量删除#(data.codeTitleBrief)成功\");\n }\n\n\n /**\n * #(data.codeTitleBrief) Excel 导出\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\n *\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\n * 因为在 导出不成功时,需要推送错误信息,\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\n * response 推送 javascript代码 alert 提示报错信息\n *\n * @param request request\n * @param response response\n */\n @ApiOperation(value = \"导出Excel\", notes = \"导出Excel\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissionsCus(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\")\n #else\n @RequiresPermissionsCus(\"#(data.moduleName.toLowerCase())_export\")\n #end\n @EnableLog\n @Override\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\n // 当前方法\n Method method = ReflectUtil.getMethodByName(this.getClass(), \"exportExcel\");\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\n }\n\n /**\n * #(data.codeTitleBrief) Excel 导入\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\n * @param request 文件流 request\n * @return ResultVo\n */\n @ApiOperation(value = \"导入Excel\", notes = \"导入Excel\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\")\n #else\n @RequiresPermissions(\"#(data.moduleName.toLowerCase())_import\")\n #end\n @EnableLog\n @Override\n public ResultVo importExcel(MultipartHttpServletRequest request) {\n return super.importExcel(request);\n }\n\n /**\n * #(data.codeTitleBrief) Excel 下载导入模版\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\n * @param response response\n */\n @ApiOperation(value = \"导出Excel模版\", notes = \"导出Excel模版\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @RequiresPermissionsCus(\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\")\n #else\n @RequiresPermissionsCus(\"#(data.moduleName.toLowerCase())_import\")\n #end\n @Override\n public void importTemplate(HttpServletResponse response) {\n // 当前方法\n Method method = ReflectUtil.getMethodByName(this.getClass(), \"importTemplate\");\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\n }\n\n}', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705818873446402, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/service', 'Service.java', '#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).service;\n#else\npackage #(data.packageName+\".\"+data.moduleName).service;\n#end\n\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\n\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName+\".\"+data.subModuleName).#(data.model.tableHumpName)Model;\n#else\nimport #(data.packageName+\".\"+data.moduleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\n#end\n\n/**\n * #(data.codeTitle) Service\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\n\n}', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705818940555265, 1398253704724828162, '0', '${packageName}/${moduleName}/${subModuleName}/service/impl', 'ServiceImpl.java', '#if(data.subModuleName != null && data.subModuleName != \"\")\npackage #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).service.impl;\n#else\npackage #(data.packageName+\".\"+data.moduleName).service.impl;\n#end\n\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName+\".\"+data.subModuleName).#(data.model.tableHumpName)Model;\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\nimport #(data.packageName+\".\"+data.moduleName+\".\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\n#else\nimport #(data.packageName+\".\"+data.moduleName).entity.#(data.model.tableHumpName);\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\nimport #(data.packageName+\".\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\nimport #(data.packageName+\".\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\n#end\n\n\n/**\n * #(data.codeTitle) Service Impl\n *\n * @author #(data.authorName)\n * @date #(currTime)\n */\n@Service\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\n implements I#(data.model.tableHumpName)Service {\n\n @Autowired(required = false)\n private #(data.model.tableHumpName)Mapper mapper;\n\n}', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705819007664129, 1398253704724828162, '1', 'src/api/${moduleName}/${subModuleName}', 'Api.js', 'import request from \"@/utils/request\";\nimport {downloadFileByData} from \"@/utils/download\";\n\nexport function getList(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"/api/v1/#(data.moduleName)/#(data.subModuleName)/findPage\",\n #else\n url: \"/api/v1/#(data.moduleName)/findPage\",\n #end\n method: \"get\",\n params: data,\n });\n}\n\n\nexport function doInsert(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"/api/v1/#(data.moduleName)/#(data.subModuleName)/insert\",\n #else\n url: \"/api/v1/#(data.moduleName)/insert\",\n #end\n method: \"post\",\n data,\n });\n}\n\nexport function doUpdate(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"/api/v1/#(data.moduleName)/#(data.subModuleName)/update\",\n #else\n url: \"/api/v1/#(data.moduleName)/update\",\n #end\n method: \"post\",\n data,\n });\n}\n\nexport function doDelete(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"/api/v1/#(data.moduleName)/#(data.subModuleName)/del\",\n #else\n url: \"/api/v1/#(data.moduleName)/del\",\n #end\n method: \"post\",\n params: data,\n });\n}\n\nexport function doDeleteAll(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"/api/v1/#(data.moduleName)/#(data.subModuleName)/delAll\",\n #else\n url: \"/api/v1/#(data.moduleName)/delAll\",\n #end\n method: \"post\",\n params: data,\n });\n}\n\n\n/**\n* 导出Excel 目前只支持一层参数传递\n* @param data\n* @returns file\n*/\nexport function doExportExcel(data) {\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let requestURL = \"/api/v1/#(data.moduleName)/#(data.subModuleName)/exportExcel\";\n #else\n let requestURL = \"/api/v1/#(data.moduleName)/exportExcel\";\n #end\n // 下载文件\n downloadFileByData(requestURL, data);\n}\n\n\n/**\n* 下载模版\n* @returns file\n*/\nexport function doDownloadTemplate() {\n let data = {};\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let requestURL = \"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel/template\";\n #else\n let requestURL = \"/api/v1/#(data.moduleName)/importExcel/template\";\n #end\n // 下载文件\n downloadFileByData(requestURL, data);\n}\n\n/**\n* 导入Excel\n* @returns file\n*/\nexport function doImportExcel(data) {\n return request({\n #if(data.subModuleName != null && data.subModuleName != \"\")\n url: \"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel\",\n #else\n url: \"/api/v1/#(data.moduleName)/importExcel\",\n #end\n method: \"post\",\n // 最长超时时间 3 分钟\n timeout: 180000,\n headers: {\n \"Content-Type\": \"multipart/form-data\"\n },\n data,\n });\n}\n\n\n', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705819133493250, 1398253704724828162, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', 'Edit.vue', '\n\n\n', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705819196407810, 1398253704724828162, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', 'Import.vue', '\n\n\n', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); +INSERT INTO `gen_template_detail` VALUES (1399705819322236929, 1398253704724828162, '1', 'src/views/modules/${moduleName}/${subModuleName}', 'index.vue', '\n\n\n', '0', 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07'); -- ---------------------------- -- Table structure for sys_area @@ -6008,6 +5970,215 @@ INSERT INTO `sys_logs` VALUES (1389565970968530946, '1', '系统配置-菜单管 INSERT INTO `sys_logs` VALUES (1389565981458485249, '1', '系统配置-菜单管理-删除', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36', '/opsli-boot/api/v1/sys/menu/del', 'POST', 58, '[\"1389564960657113089\"]', NULL, 0, 1, '2021-05-04 21:02:02', 1, '2021-05-04 21:02:02', '2021-05-04 21:02:01'); INSERT INTO `sys_logs` VALUES (1389566022705270785, '1', '开发工具-代码生成器-生成菜单', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36', '/opsli-boot/api/v1/creater/logs/createMenu', 'POST', 129, '[\"0\",\"1359428685312028674\"]', NULL, 0, 1, '2021-05-04 21:02:11', 1, '2021-05-04 21:02:11', '2021-05-04 21:02:11'); INSERT INTO `sys_logs` VALUES (1389566237814345729, '1', '系统配置-菜单管理-删除', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36', '/opsli-boot/api/v1/sys/menu/del', 'POST', 44, '[\"1389566022105485314\"]', NULL, 0, 1, '2021-05-04 21:03:03', 1, '2021-05-04 21:03:03', '2021-05-04 21:03:02'); +INSERT INTO `sys_logs` VALUES (1392758276877180929, '1', '测试模块-业务测试-修改', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36', '/opsli-boot/api/v1/test/update', 'POST', 65, '[{\"izApi\":false,\"remark\":\"测试备注2098171765\",\"type\":\"4\",\"version\":0,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1614340077000,\"name\":\"测试名称1807858151\",\"id\":\"1365267351108235265\"}]', NULL, 0, 1313694379541635074, '2021-05-13 16:27:04', 1313694379541635074, '2021-05-13 16:27:04', '2021-05-13 16:27:04'); +INSERT INTO `sys_logs` VALUES (1392758325900206082, '1', '测试模块-业务测试-修改', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36', '/opsli-boot/api/v1/test/update', 'POST', 9, '[{\"izApi\":false,\"remark\":\"测试备注2098171765\",\"type\":\"4\",\"version\":1,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1614340077000,\"name\":\"测试名称1807858151\",\"id\":\"1365267351108235265\"}]', NULL, 0, 1313694379541635074, '2021-05-13 16:27:16', 1313694379541635074, '2021-05-13 16:27:16', '2021-05-13 16:27:15'); +INSERT INTO `sys_logs` VALUES (1396787668100014081, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 99, '[{\"dictValue\":\"IS_IPV4\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":7,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605595938000,\"typeId\":\"1328591039258980353\",\"dictName\":\"Ipv4\",\"id\":\"1328591774579191810\"}]', NULL, 0, 1, '2021-05-24 19:18:26', 1, '2021-05-24 19:18:26', '2021-05-24 19:18:25'); +INSERT INTO `sys_logs` VALUES (1396787752216780802, '1', '系统配置-字典管理-增加', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/insert', 'POST', 98, '[{\"dictValue\":\"IS_IPV6\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":7,\"izLock\":\"1\",\"izManual\":false,\"typeId\":\"1328591039258980353\",\"dictName\":\"Ipv6\"}]', NULL, 0, 1, '2021-05-24 19:18:46', 1, '2021-05-24 19:18:46', '2021-05-24 19:18:45'); +INSERT INTO `sys_logs` VALUES (1396787839554772994, '1', '系统配置-字典管理-增加', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/insert', 'POST', 76, '[{\"dictValue\":\"IS_IP\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":7,\"izLock\":\"1\",\"izManual\":false,\"typeId\":\"1328591039258980353\",\"dictName\":\"Ip\"}]', NULL, 0, 1, '2021-05-24 19:19:07', 1, '2021-05-24 19:19:07', '2021-05-24 19:19:06'); +INSERT INTO `sys_logs` VALUES (1396789225763856386, '1', '系统配置-字典管理-增加', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/insert', 'POST', 195, '[{\"dictValue\":\"IS_INTEGER\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":1,\"izLock\":\"1\",\"izManual\":false,\"typeId\":\"1328591039258980353\",\"dictName\":\"整数\"}]', NULL, 0, 1, '2021-05-24 19:24:37', 1, '2021-05-24 19:24:37', '2021-05-24 19:24:37'); +INSERT INTO `sys_logs` VALUES (1396789344286498817, '1', '系统配置-字典管理-增加', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/insert', 'POST', 114, '[{\"dictValue\":\"IS_DECIMAL\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":1,\"izLock\":\"1\",\"izManual\":false,\"typeId\":\"1328591039258980353\",\"dictName\":\"浮点数\"}]', NULL, 0, 1, '2021-05-24 19:25:05', 1, '2021-05-24 19:25:05', '2021-05-24 19:25:05'); +INSERT INTO `sys_logs` VALUES (1396789437794312194, '1', '系统配置-字典管理-增加', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/insert', 'POST', 109, '[{\"dictValue\":\"IS_PRIMES\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":1,\"izLock\":\"1\",\"izManual\":false,\"typeId\":\"1328591039258980353\",\"dictName\":\"质数_素数\"}]', NULL, 0, 1, '2021-05-24 19:25:28', 1, '2021-05-24 19:25:28', '2021-05-24 19:25:27'); +INSERT INTO `sys_logs` VALUES (1396789503506472962, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 104, '[{\"dictValue\":\"IS_INTEGER\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":2,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1621855477000,\"typeId\":\"1328591039258980353\",\"dictName\":\"整数\",\"id\":\"1396789224945967105\"}]', NULL, 0, 1, '2021-05-24 19:25:43', 1, '2021-05-24 19:25:43', '2021-05-24 19:25:43'); +INSERT INTO `sys_logs` VALUES (1396789530178052098, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 98, '[{\"dictValue\":\"IS_DECIMAL\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":3,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1621855505000,\"typeId\":\"1328591039258980353\",\"dictName\":\"浮点数\",\"id\":\"1396789343724462082\"}]', NULL, 0, 1, '2021-05-24 19:25:50', 1, '2021-05-24 19:25:50', '2021-05-24 19:25:49'); +INSERT INTO `sys_logs` VALUES (1396789549538959362, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 98, '[{\"dictValue\":\"IS_PRIMES\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":4,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1621855528000,\"typeId\":\"1328591039258980353\",\"dictName\":\"质数_素数\",\"id\":\"1396789437249052674\"}]', NULL, 0, 1, '2021-05-24 19:25:54', 1, '2021-05-24 19:25:54', '2021-05-24 19:25:54'); +INSERT INTO `sys_logs` VALUES (1396789604459175938, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 96, '[{\"dictValue\":\"IS_LETTER\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":5,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605595892000,\"typeId\":\"1328591039258980353\",\"dictName\":\"纯字母\",\"id\":\"1328591581578293249\"}]', NULL, 0, 1, '2021-05-24 19:26:07', 1, '2021-05-24 19:26:07', '2021-05-24 19:26:07'); +INSERT INTO `sys_logs` VALUES (1396789618744975361, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 89, '[{\"dictValue\":\"IS_UPPER_CASE\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":6,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605595903000,\"typeId\":\"1328591039258980353\",\"dictName\":\"大写\",\"id\":\"1328591630144139266\"}]', NULL, 0, 1, '2021-05-24 19:26:11', 1, '2021-05-24 19:26:11', '2021-05-24 19:26:10'); +INSERT INTO `sys_logs` VALUES (1396789644221177858, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 92, '[{\"dictValue\":\"IS_LOWER_CASE\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":7,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605595926000,\"typeId\":\"1328591039258980353\",\"dictName\":\"小写\",\"id\":\"1328591723169607682\"}]', NULL, 0, 1, '2021-05-24 19:26:17', 1, '2021-05-24 19:26:17', '2021-05-24 19:26:16'); +INSERT INTO `sys_logs` VALUES (1396789700210941954, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 90, '[{\"dictValue\":\"IS_IP\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":8,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1621855147000,\"typeId\":\"1328591039258980353\",\"dictName\":\"Ip\",\"id\":\"1396787839189868545\"}]', NULL, 0, 1, '2021-05-24 19:26:30', 1, '2021-05-24 19:26:30', '2021-05-24 19:26:30'); +INSERT INTO `sys_logs` VALUES (1396789727469723649, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 93, '[{\"dictValue\":\"IS_IPV4\",\"izApi\":false,\"version\":1,\"typeCode\":\"validate_type\",\"sortNo\":9,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605595938000,\"typeId\":\"1328591039258980353\",\"dictName\":\"Ipv4\",\"id\":\"1328591774579191810\"}]', NULL, 0, 1, '2021-05-24 19:26:37', 1, '2021-05-24 19:26:37', '2021-05-24 19:26:36'); +INSERT INTO `sys_logs` VALUES (1396789769958023169, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 87, '[{\"dictValue\":\"IS_IPV6\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":10,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1621855126000,\"typeId\":\"1328591039258980353\",\"dictName\":\"Ipv6\",\"id\":\"1396787751738630146\"}]', NULL, 0, 1, '2021-05-24 19:26:47', 1, '2021-05-24 19:26:47', '2021-05-24 19:26:46'); +INSERT INTO `sys_logs` VALUES (1396789871573426177, '1', '系统配置-字典管理-删除', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/del', 'POST', 68, '[\"1328591535440949250\"]', NULL, 0, 1, '2021-05-24 19:27:11', 1, '2021-05-24 19:27:11', '2021-05-24 19:27:11'); +INSERT INTO `sys_logs` VALUES (1396789957627961345, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 86, '[{\"dictValue\":\"IS_MONEY\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":11,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605595951000,\"typeId\":\"1328591039258980353\",\"dictName\":\"金额\",\"id\":\"1328591832049545218\"}]', NULL, 0, 1, '2021-05-24 19:27:32', 1, '2021-05-24 19:27:32', '2021-05-24 19:27:31'); +INSERT INTO `sys_logs` VALUES (1396789977655762945, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 88, '[{\"dictValue\":\"IS_EMAIL\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":12,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605595964000,\"typeId\":\"1328591039258980353\",\"dictName\":\"邮箱\",\"id\":\"1328591886462251009\"}]', NULL, 0, 1, '2021-05-24 19:27:36', 1, '2021-05-24 19:27:36', '2021-05-24 19:27:36'); +INSERT INTO `sys_logs` VALUES (1396790006437076994, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 85, '[{\"dictValue\":\"IS_MOBILE\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":13,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605595977000,\"typeId\":\"1328591039258980353\",\"dictName\":\"手机号\",\"id\":\"1328591938366763010\"}]', NULL, 0, 1, '2021-05-24 19:27:43', 1, '2021-05-24 19:27:43', '2021-05-24 19:27:43'); +INSERT INTO `sys_logs` VALUES (1396790104869003266, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 92, '[{\"dictValue\":\"IS_CITIZENID\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":14,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605595992000,\"typeId\":\"1328591039258980353\",\"dictName\":\"18位身份证\",\"id\":\"1328592000949972993\"}]', NULL, 0, 1, '2021-05-24 19:28:07', 1, '2021-05-24 19:28:07', '2021-05-24 19:28:06'); +INSERT INTO `sys_logs` VALUES (1396790155494252545, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 90, '[{\"dictValue\":\"IS_CHINESE\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":15,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605596024000,\"typeId\":\"1328591039258980353\",\"dictName\":\"汉字\",\"id\":\"1328592136035921921\"}]', NULL, 0, 1, '2021-05-24 19:28:19', 1, '2021-05-24 19:28:19', '2021-05-24 19:28:18'); +INSERT INTO `sys_logs` VALUES (1396790209441390593, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 89, '[{\"dictValue\":\"IS_GENERAL\",\"izApi\":false,\"version\":1,\"typeCode\":\"validate_type\",\"sortNo\":16,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605595862000,\"typeId\":\"1328591039258980353\",\"dictName\":\"字母数字和下划线\",\"id\":\"1328591456541896705\"}]', NULL, 0, 1, '2021-05-24 19:28:32', 1, '2021-05-24 19:28:32', '2021-05-24 19:28:31'); +INSERT INTO `sys_logs` VALUES (1396790241435541505, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 87, '[{\"dictValue\":\"IS_GENERAL_WITH_CHINESE\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":17,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605596074000,\"typeId\":\"1328591039258980353\",\"dictName\":\"汉字或字母或数字或下划线\",\"id\":\"1328592345788870658\"}]', NULL, 0, 1, '2021-05-24 19:28:39', 1, '2021-05-24 19:28:39', '2021-05-24 19:28:39'); +INSERT INTO `sys_logs` VALUES (1396790368531341313, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 116, '[{\"dictValue\":\"IS_ZIPCODE\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":18,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605596003000,\"typeId\":\"1328591039258980353\",\"dictName\":\"邮编\",\"id\":\"1328592049868140546\"}]', NULL, 0, 1, '2021-05-24 19:29:10', 1, '2021-05-24 19:29:10', '2021-05-24 19:29:09'); +INSERT INTO `sys_logs` VALUES (1396790387548315649, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 89, '[{\"dictValue\":\"URL\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":19,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605596012000,\"typeId\":\"1328591039258980353\",\"dictName\":\"URL\",\"id\":\"1328592085637165058\"}]', NULL, 0, 1, '2021-05-24 19:29:14', 1, '2021-05-24 19:29:14', '2021-05-24 19:29:14'); +INSERT INTO `sys_logs` VALUES (1396790410910588929, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 85, '[{\"dictValue\":\"IS_MAC\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":20,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605596086000,\"typeId\":\"1328591039258980353\",\"dictName\":\"MAC地址\",\"id\":\"1328592395894026242\"}]', NULL, 0, 1, '2021-05-24 19:29:20', 1, '2021-05-24 19:29:20', '2021-05-24 19:29:19'); +INSERT INTO `sys_logs` VALUES (1396790439243112450, '1', '系统配置-字典管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/update', 'POST', 86, '[{\"dictValue\":\"IS_PLATE_NUMBER\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":21,\"createBy\":\"1\",\"izLock\":\"1\",\"izManual\":false,\"createTime\":1605596096000,\"typeId\":\"1328591039258980353\",\"dictName\":\"中国车牌\",\"id\":\"1328592440106184705\"}]', NULL, 0, 1, '2021-05-24 19:29:26', 1, '2021-05-24 19:29:26', '2021-05-24 19:29:26'); +INSERT INTO `sys_logs` VALUES (1396790553709862914, '1', '系统配置-字典管理-增加', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/dict/detail/insert', 'POST', 96, '[{\"dictValue\":\"IS_SECURITY_PASSWORD\",\"izApi\":false,\"version\":0,\"typeCode\":\"validate_type\",\"sortNo\":22,\"izLock\":\"1\",\"izManual\":false,\"typeId\":\"1328591039258980353\",\"dictName\":\"安全密码\"}]', NULL, 0, 1, '2021-05-24 19:29:54', 1, '2021-05-24 19:29:54', '2021-05-24 19:29:53'); +INSERT INTO `sys_logs` VALUES (1396793879830618114, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/creater/table/update', 'POST', 205, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"sort\":3,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":4,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1612948101000,\"version\":2,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', NULL, 0, 1, '2021-05-24 19:43:07', 1, '2021-05-24 19:43:07', '2021-05-24 19:43:06'); +INSERT INTO `sys_logs` VALUES (1396793942480936962, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/creater/table/update', 'POST', 65, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"sort\":3,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":4,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621856586000,\"version\":3,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1\",\"id\":\"1359428685312028674\"}]', NULL, 0, 1, '2021-05-24 19:43:22', 1, '2021-05-24 19:43:22', '2021-05-24 19:43:21'); +INSERT INTO `sys_logs` VALUES (1396793989901737986, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/creater/table/update', 'POST', 68, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"sort\":3,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":4,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621856602000,\"version\":4,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1\",\"id\":\"1359428685312028674\"}]', NULL, 0, 1, '2021-05-24 19:43:33', 1, '2021-05-24 19:43:33', '2021-05-24 19:43:33'); +INSERT INTO `sys_logs` VALUES (1396794125688135682, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/creater/table/update', 'POST', 50, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621856613000,\"version\":5,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1\",\"id\":\"1359428685312028674\"}]', NULL, 0, 1, '2021-05-24 19:44:05', 1, '2021-05-24 19:44:05', '2021-05-24 19:44:05'); +INSERT INTO `sys_logs` VALUES (1396794167035584513, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/creater/table/update', 'POST', 49, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621856645000,\"version\":6,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1\",\"id\":\"1359428685312028674\"}]', NULL, 0, 1, '2021-05-24 19:44:15', 1, '2021-05-24 19:44:15', '2021-05-24 19:44:15'); +INSERT INTO `sys_logs` VALUES (1396794220043198465, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/creater/logs/create', 'GET', 301, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1, '2021-05-24 19:44:28', 1, '2021-05-24 19:44:28', '2021-05-24 19:44:27'); +INSERT INTO `sys_logs` VALUES (1396794244626014210, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/creater/logs/create', 'GET', 37, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1, '2021-05-24 19:44:34', 1, '2021-05-24 19:44:34', '2021-05-24 19:44:33'); +INSERT INTO `sys_logs` VALUES (1396795448076664833, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/creater/logs/create', 'GET', 391, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1, '2021-05-24 19:49:21', 1, '2021-05-24 19:49:21', '2021-05-24 19:49:20'); +INSERT INTO `sys_logs` VALUES (1396795592843067394, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/creater/logs/create', 'GET', 62, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1, '2021-05-24 19:49:55', 1, '2021-05-24 19:49:55', '2021-05-24 19:49:55'); +INSERT INTO `sys_logs` VALUES (1396795610203291650, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/creater/logs/create', 'GET', 40, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1, '2021-05-24 19:49:59', 1, '2021-05-24 19:49:59', '2021-05-24 19:49:59'); +INSERT INTO `sys_logs` VALUES (1396803309217382402, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/creater/table/update', 'POST', 104, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621856655000,\"version\":7,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1\",\"id\":\"1359428685312028674\"}]', NULL, 0, 1313694379541635074, '2021-05-24 20:20:35', 1313694379541635074, '2021-05-24 20:20:35', '2021-05-24 20:20:34'); +INSERT INTO `sys_logs` VALUES (1396803340838240258, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/creater/table/update', 'POST', 66, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621858835000,\"version\":8,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', NULL, 0, 1313694379541635074, '2021-05-24 20:20:42', 1313694379541635074, '2021-05-24 20:20:42', '2021-05-24 20:20:42'); +INSERT INTO `sys_logs` VALUES (1397160288851017729, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 166, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621858842000,\"version\":9,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', NULL, 0, 1313694379541635074, '2021-05-25 19:59:05', 1313694379541635074, '2021-05-25 19:59:05', '2021-05-25 19:59:05'); +INSERT INTO `sys_logs` VALUES (1397160339518210050, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 239, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-25 19:59:18', 1313694379541635074, '2021-05-25 19:59:18', '2021-05-25 19:59:17'); +INSERT INTO `sys_logs` VALUES (1397160362398138370, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 28, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-25 19:59:23', 1313694379541635074, '2021-05-25 19:59:23', '2021-05-25 19:59:23'); +INSERT INTO `sys_logs` VALUES (1397163244014960642, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 305, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-25 20:10:50', 1313694379541635074, '2021-05-25 20:10:50', '2021-05-25 20:10:50'); +INSERT INTO `sys_logs` VALUES (1397163264118259713, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 58, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-25 20:10:55', 1313694379541635074, '2021-05-25 20:10:55', '2021-05-25 20:10:54'); +INSERT INTO `sys_logs` VALUES (1397163318824566786, '1', '开发工具-代码生成器-同步', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/sync', 'POST', 158, '[\"1359428685312028674\"]', NULL, 0, 1313694379541635074, '2021-05-25 20:11:08', 1313694379541635074, '2021-05-25 20:11:08', '2021-05-25 20:11:07'); +INSERT INTO `sys_logs` VALUES (1397384081787830273, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 172, '[{\"comments\":\"非对称加密表\",\"izSync\":\"1\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621943945000,\"version\":10,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', NULL, 0, 1313694379541635074, '2021-05-26 10:48:22', 1313694379541635074, '2021-05-26 10:48:22', '2021-05-26 10:48:21'); +INSERT INTO `sys_logs` VALUES (1397384151434248194, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 413, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 10:48:39', 1313694379541635074, '2021-05-26 10:48:39', '2021-05-26 10:48:38'); +INSERT INTO `sys_logs` VALUES (1397384172368019457, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 47, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 10:48:43', 1313694379541635074, '2021-05-26 10:48:43', '2021-05-26 10:48:43'); +INSERT INTO `sys_logs` VALUES (1397387487835308033, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 85323, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 11:01:54', 1313694379541635074, '2021-05-26 11:01:54', '2021-05-26 11:01:53'); +INSERT INTO `sys_logs` VALUES (1397389275044966401, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 401, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 11:09:00', 1313694379541635074, '2021-05-26 11:09:00', '2021-05-26 11:09:00'); +INSERT INTO `sys_logs` VALUES (1397389299350958082, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 67, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 11:09:06', 1313694379541635074, '2021-05-26 11:09:06', '2021-05-26 11:09:05'); +INSERT INTO `sys_logs` VALUES (1397414740409380866, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 305, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 12:50:11', 1313694379541635074, '2021-05-26 12:50:11', '2021-05-26 12:50:11'); +INSERT INTO `sys_logs` VALUES (1397414753399140354, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 55, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 12:50:15', 1313694379541635074, '2021-05-26 12:50:15', '2021-05-26 12:50:14'); +INSERT INTO `sys_logs` VALUES (1397415162628947969, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 439, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 12:51:52', 1313694379541635074, '2021-05-26 12:51:52', '2021-05-26 12:51:52'); +INSERT INTO `sys_logs` VALUES (1397415182694498306, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 62, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 12:51:57', 1313694379541635074, '2021-05-26 12:51:57', '2021-05-26 12:51:56'); +INSERT INTO `sys_logs` VALUES (1397416795282841602, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 387, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 12:58:21', 1313694379541635074, '2021-05-26 12:58:21', '2021-05-26 12:58:21'); +INSERT INTO `sys_logs` VALUES (1397416812836003841, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 64, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 12:58:26', 1313694379541635074, '2021-05-26 12:58:26', '2021-05-26 12:58:25'); +INSERT INTO `sys_logs` VALUES (1397531927438659586, '2', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 284, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Byte[]\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"id\":\"1397384081368399874\",\"fieldType\":\"blob\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"id\":\"1397384081401954306\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"id\":\"1397384081418731522\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"id\":\"1397384081443897346\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"id\":\"1397384081460674562\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"id\":\"1397384081477451778\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"id\":\"1397384081502617601\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"id\":\"1397384081519394817\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621997302000,\"version\":11,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', '参数验证错误: Java字段类型,不是字母,数字或下划线! ', 0, 1313694379541635074, '2021-05-26 20:35:51', 1313694379541635074, '2021-05-26 20:35:51', '2021-05-26 20:35:51'); +INSERT INTO `sys_logs` VALUES (1397531947244163074, '2', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 53, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Byte[]\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"id\":\"1397384081368399874\",\"fieldType\":\"blob\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"id\":\"1397384081401954306\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"id\":\"1397384081418731522\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"id\":\"1397384081443897346\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"id\":\"1397384081460674562\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"id\":\"1397384081477451778\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"id\":\"1397384081502617601\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"id\":\"1397384081519394817\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621997302000,\"version\":11,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', '参数验证错误: Java字段类型,不是字母,数字或下划线! ', 0, 1313694379541635074, '2021-05-26 20:35:56', 1313694379541635074, '2021-05-26 20:35:56', '2021-05-26 20:35:55'); +INSERT INTO `sys_logs` VALUES (1397531952923250689, '2', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 25, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Byte[]\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"id\":\"1397384081368399874\",\"fieldType\":\"blob\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"id\":\"1397384081401954306\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"id\":\"1397384081418731522\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"id\":\"1397384081443897346\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"id\":\"1397384081460674562\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"id\":\"1397384081477451778\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"id\":\"1397384081502617601\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"id\":\"1397384081519394817\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621997302000,\"version\":11,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', '参数验证错误: Java字段类型,不是字母,数字或下划线! ', 0, 1313694379541635074, '2021-05-26 20:35:57', 1313694379541635074, '2021-05-26 20:35:57', '2021-05-26 20:35:57'); +INSERT INTO `sys_logs` VALUES (1397531955846680577, '2', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 18, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Byte[]\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"id\":\"1397384081368399874\",\"fieldType\":\"blob\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"id\":\"1397384081401954306\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"id\":\"1397384081418731522\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"id\":\"1397384081443897346\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"id\":\"1397384081460674562\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"id\":\"1397384081477451778\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"id\":\"1397384081502617601\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"id\":\"1397384081519394817\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621997302000,\"version\":11,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', '参数验证错误: Java字段类型,不是字母,数字或下划线! ', 0, 1313694379541635074, '2021-05-26 20:35:58', 1313694379541635074, '2021-05-26 20:35:58', '2021-05-26 20:35:57'); +INSERT INTO `sys_logs` VALUES (1397531958606532609, '2', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 17, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Byte[]\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"id\":\"1397384081368399874\",\"fieldType\":\"blob\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"id\":\"1397384081401954306\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"id\":\"1397384081418731522\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"id\":\"1397384081443897346\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"id\":\"1397384081460674562\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"id\":\"1397384081477451778\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"id\":\"1397384081502617601\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"id\":\"1397384081519394817\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621997302000,\"version\":11,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', '参数验证错误: Java字段类型,不是字母,数字或下划线! ', 0, 1313694379541635074, '2021-05-26 20:35:58', 1313694379541635074, '2021-05-26 20:35:58', '2021-05-26 20:35:58'); +INSERT INTO `sys_logs` VALUES (1397531960745627649, '2', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 18, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Byte[]\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"id\":\"1397384081368399874\",\"fieldType\":\"blob\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"id\":\"1397384081401954306\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"id\":\"1397384081418731522\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"id\":\"1397384081443897346\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"id\":\"1397384081460674562\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"id\":\"1397384081477451778\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"id\":\"1397384081502617601\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"updateTime\":1621997302000,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1621997302000,\"updateBy\":\"1313694379541635074\",\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"id\":\"1397384081519394817\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621997302000,\"version\":11,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', '参数验证错误: Java字段类型,不是字母,数字或下划线! ', 0, 1313694379541635074, '2021-05-26 20:35:59', 1313694379541635074, '2021-05-26 20:35:59', '2021-05-26 20:35:58'); +INSERT INTO `sys_logs` VALUES (1397532779830239234, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 179, '[{\"comments\":\"非对称加密表\",\"izSync\":\"0\",\"oldTableName\":\"other_crypto_asymmetric\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"唯一主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"public_key\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Byte[]\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"公钥\",\"fieldType\":\"blob\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"private_key\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"1\",\"fieldComments\":\"私钥\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":2000},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"IS_INTEGER,IS_LETTER,IS_IP,IS_UPPER_CASE,IS_LOWER_CASE\",\"fieldName\":\"crypto_type\",\"izApi\":false,\"sort\":4,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Integer\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"showType\":\"0\",\"fieldComments\":\"加解密类别\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"Date\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1359428685312028674\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1621997302000,\"version\":11,\"tableName\":\"other_crypto_asymmetric\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1612948030000,\"updateBy\":\"1313694379541635074\",\"id\":\"1359428685312028674\"}]', NULL, 0, 1313694379541635074, '2021-05-26 20:39:14', 1313694379541635074, '2021-05-26 20:39:14', '2021-05-26 20:39:14'); +INSERT INTO `sys_logs` VALUES (1397532799413444609, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 284, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 20:39:19', 1313694379541635074, '2021-05-26 20:39:19', '2021-05-26 20:39:18'); +INSERT INTO `sys_logs` VALUES (1397534693762478081, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 344, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 20:46:51', 1313694379541635074, '2021-05-26 20:46:51', '2021-05-26 20:46:50'); +INSERT INTO `sys_logs` VALUES (1397534704487313410, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 54, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.system\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 20:46:53', 1313694379541635074, '2021-05-26 20:46:53', '2021-05-26 20:46:53'); +INSERT INTO `sys_logs` VALUES (1397535071228866562, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 46, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.test\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 20:48:21', 1313694379541635074, '2021-05-26 20:48:21', '2021-05-26 20:48:20'); +INSERT INTO `sys_logs` VALUES (1397535080045293569, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 42, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.test\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 20:48:23', 1313694379541635074, '2021-05-26 20:48:23', '2021-05-26 20:48:22'); +INSERT INTO `sys_logs` VALUES (1397535275072040961, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 38, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.gentest\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 20:49:09', 1313694379541635074, '2021-05-26 20:49:09', '2021-05-26 20:49:09'); +INSERT INTO `sys_logs` VALUES (1397535281959088130, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 42, '[{\"moduleName\":\"other\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.gentest\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-26 20:49:11', 1313694379541635074, '2021-05-26 20:49:11', '2021-05-26 20:49:10'); +INSERT INTO `sys_logs` VALUES (1397541401696100354, '1', '开发工具-代码生成器-删除', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/del', 'POST', 77, '[\"1329754301400883202\"]', NULL, 0, 1313694379541635074, '2021-05-26 21:13:30', 1313694379541635074, '2021-05-26 21:13:30', '2021-05-26 21:13:29'); +INSERT INTO `sys_logs` VALUES (1397541428589977602, '1', '开发工具-代码生成器-导入数据表', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/importTables', 'POST', 277, '[\"test_user\"]', NULL, 0, 1313694379541635074, '2021-05-26 21:13:36', 1313694379541635074, '2021-05-26 21:13:36', '2021-05-26 21:13:36'); +INSERT INTO `sys_logs` VALUES (1397545331582791681, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 242, '[{\"comments\":\"某系统用户\",\"izSync\":\"1\",\"oldTableName\":\"test_user\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"name\",\"izApi\":false,\"sort\":1,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"0\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"名称\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":50},{\"validateType\":\"\",\"fieldName\":\"money\",\"izApi\":false,\"sort\":2,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":2,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"金钱\",\"fieldType\":\"double\",\"izPk\":\"0\",\"fieldLength\":6},{\"validateType\":\"\",\"fieldName\":\"age\",\"izApi\":false,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"年龄\",\"fieldType\":\"smallint\",\"izPk\":\"0\",\"fieldLength\":5},{\"validateType\":\"\",\"fieldName\":\"birth\",\"izApi\":false,\"sort\":4,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"生日\",\"fieldType\":\"date\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"iz_usable\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"是否启用\",\"fieldType\":\"char\",\"izPk\":\"0\",\"fieldLength\":1},{\"validateType\":\"\",\"fieldName\":\"tenant_id\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"0\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"多租户ID\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"deleted\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"删除标记:0未删除,1删除\",\"fieldType\":\"char\",\"izPk\":\"0\",\"fieldLength\":1},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"版本号(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":9,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":10,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":11,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":12,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"ts\",\"izApi\":false,\"sort\":13,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397541427197468673\",\"fieldComments\":\"时间戳\",\"fieldType\":\"timestamp\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1622034816000,\"version\":0,\"tableName\":\"test_user\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1622034816000,\"updateBy\":\"1313694379541635074\",\"id\":\"1397541427197468673\"}]', NULL, 0, 1313694379541635074, '2021-05-26 21:29:07', 1313694379541635074, '2021-05-26 21:29:07', '2021-05-26 21:29:06'); +INSERT INTO `sys_logs` VALUES (1397801879072591873, '1', '开发工具-代码生成器-导入数据表', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/importTables', 'POST', 154, '[\"gen_template\"]', NULL, 0, 1313694379541635074, '2021-05-27 14:28:33', 1313694379541635074, '2021-05-27 14:28:33', '2021-05-27 14:28:32'); +INSERT INTO `sys_logs` VALUES (1397802478325387265, '1', '开发工具-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 92, '[{\"comments\":\"代码生成器 - 模板\",\"izSync\":\"1\",\"oldTableName\":\"gen_template\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397801878237925377\",\"fieldComments\":\"主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"IS_GENERAL_WITH_CHINESE\",\"fieldName\":\"temp_name\",\"izApi\":false,\"sort\":1,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"LIKE\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397801878237925377\",\"showType\":\"0\",\"fieldComments\":\"模板名称\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"dictTypeCode\":\"table_type\",\"validateType\":\"\",\"fieldName\":\"table_type\",\"izApi\":false,\"sort\":2,\"izShowList\":\"1\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"EQ\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397801878237925377\",\"showType\":\"2\",\"fieldComments\":\"表类型\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":30},{\"validateType\":\"\",\"fieldName\":\"remark\",\"izApi\":false,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"1\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"queryType\":\"\",\"izNotNull\":\"0\",\"izManual\":false,\"tableId\":\"1397801878237925377\",\"showType\":\"1\",\"fieldComments\":\"备注信息\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":255},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":4,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397801878237925377\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397801878237925377\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397801878237925377\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397801878237925377\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1397801878237925377\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1622096912000,\"version\":0,\"tableName\":\"gen_template\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1622096912000,\"updateBy\":\"1313694379541635074\",\"id\":\"1397801878237925377\"}]', NULL, 0, 1313694379541635074, '2021-05-27 14:30:55', 1313694379541635074, '2021-05-27 14:30:55', '2021-05-27 14:30:55'); +INSERT INTO `sys_logs` VALUES (1397803195203244033, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 348, '[{\"moduleName\":\"generator\",\"izApi\":false,\"izManual\":false,\"authorName\":\"周鹏程\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-27 14:33:46', 1313694379541635074, '2021-05-27 14:33:46', '2021-05-27 14:33:46'); +INSERT INTO `sys_logs` VALUES (1397803206704025601, '1', '开发工具-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 44, '[{\"moduleName\":\"generator\",\"izApi\":false,\"izManual\":false,\"authorName\":\"周鹏程\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-27 14:33:49', 1313694379541635074, '2021-05-27 14:33:49', '2021-05-27 14:33:49'); +INSERT INTO `sys_logs` VALUES (1397807288994979842, '1', '系统配置-菜单管理-增加', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/menu/insert', 'POST', 63, '[{\"hidden\":\"0\",\"icon\":\"\",\"izApi\":false,\"menuName\":\"开发向导\",\"type\":\"1\",\"version\":0,\"parentId\":\"1314068325453574145\",\"sortNo\":1,\"izManual\":false,\"alwaysShow\":\"0\"}]', NULL, 0, 1, '2021-05-27 14:50:02', 1, '2021-05-27 14:50:02', '2021-05-27 14:50:02'); +INSERT INTO `sys_logs` VALUES (1397807338563264514, '1', '系统配置-菜单管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/menu/update', 'POST', 40, '[{\"hidden\":\"0\",\"icon\":\"\",\"izApi\":false,\"menuName\":\"代码生成器\",\"type\":\"1\",\"version\":2,\"parentId\":\"1397807288445526017\",\"url\":\"creater\",\"sortNo\":1,\"component\":\"views/modules/generator/table/index\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1605429521000,\"id\":\"1327893773049262082\",\"alwaysShow\":\"0\"}]', NULL, 0, 1, '2021-05-27 14:50:14', 1, '2021-05-27 14:50:14', '2021-05-27 14:50:14'); +INSERT INTO `sys_logs` VALUES (1397807399783325697, '1', '开发工具-开发向导-代码生成器-生成菜单', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/createMenu', 'POST', 72, '[\"1397807288445526017\",\"1397801878237925377\"]', NULL, 0, 1, '2021-05-27 14:50:29', 1, '2021-05-27 14:50:29', '2021-05-27 14:50:28'); +INSERT INTO `sys_logs` VALUES (1397807484655067138, '1', '系统配置-菜单管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/menu/update', 'POST', 55, '[{\"hidden\":\"0\",\"izApi\":false,\"menuName\":\"代码模板\",\"type\":\"1\",\"version\":0,\"parentId\":\"1397807288445526017\",\"url\":\"template\",\"sortNo\":1,\"component\":\"views/modules/generator/template/index\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622098229000,\"id\":\"1397807399338729473\",\"alwaysShow\":\"0\"}]', NULL, 0, 1, '2021-05-27 14:50:49', 1, '2021-05-27 14:50:49', '2021-05-27 14:50:49'); +INSERT INTO `sys_logs` VALUES (1397807506482225154, '1', '系统配置-菜单管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/menu/update', 'POST', 12, '[{\"hidden\":\"0\",\"izApi\":false,\"menuName\":\"代码模板\",\"type\":\"1\",\"version\":1,\"parentId\":\"1397807288445526017\",\"url\":\"template\",\"sortNo\":2,\"component\":\"views/modules/generator/template/index\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622098229000,\"id\":\"1397807399338729473\",\"alwaysShow\":\"0\"}]', NULL, 0, 1, '2021-05-27 14:50:54', 1, '2021-05-27 14:50:54', '2021-05-27 14:50:54'); +INSERT INTO `sys_logs` VALUES (1397810155332001794, '1', '系统配置-菜单管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/menu/update', 'POST', 11, '[{\"hidden\":\"0\",\"icon\":\"\",\"izApi\":false,\"menuName\":\"开发向导\",\"type\":\"1\",\"version\":0,\"parentId\":\"1314068325453574145\",\"url\":\"generator\",\"sortNo\":1,\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622098202000,\"id\":\"1397807288445526017\",\"alwaysShow\":\"1\"}]', NULL, 0, 1, '2021-05-27 15:01:26', 1, '2021-05-27 15:01:26', '2021-05-27 15:01:25'); +INSERT INTO `sys_logs` VALUES (1397810504180654082, '1', '系统配置-菜单管理-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/menu/update', 'POST', 10, '[{\"hidden\":\"0\",\"icon\":\"\",\"izApi\":false,\"menuName\":\"开发向导\",\"type\":\"1\",\"version\":1,\"parentId\":\"1314068325453574145\",\"url\":\"generator\",\"sortNo\":1,\"component\":\"EmptyLayout\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622098202000,\"id\":\"1397807288445526017\",\"alwaysShow\":\"1\"}]', NULL, 0, 1, '2021-05-27 15:02:49', 1, '2021-05-27 15:02:49', '2021-05-27 15:02:48'); +INSERT INTO `sys_logs` VALUES (1397811478496501761, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/update', 'POST', 6, '[{\"izApi\":false,\"version\":1,\"tableType\":\"0\",\"tempName\":\"test_user\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622034816000,\"id\":\"1397541427197468673\"}]', NULL, 0, 1, '2021-05-27 15:06:41', 1, '2021-05-27 15:06:41', '2021-05-27 15:06:41'); +INSERT INTO `sys_logs` VALUES (1397811486981578753, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/update', 'POST', 6, '[{\"izApi\":false,\"version\":12,\"tableType\":\"0\",\"tempName\":\"other_crypto_asymmetric\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948030000,\"id\":\"1359428685312028674\"}]', NULL, 0, 1, '2021-05-27 15:06:43', 1, '2021-05-27 15:06:43', '2021-05-27 15:06:43'); +INSERT INTO `sys_logs` VALUES (1397812303159607297, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/update', 'POST', 569, '[{\"izApi\":false,\"version\":13,\"tableType\":\"0\",\"tempName\":\"other_crypto_asymmetric\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948030000,\"id\":\"1359428685312028674\"}]', NULL, 0, 1, '2021-05-27 15:09:58', 1, '2021-05-27 15:09:58', '2021-05-27 15:09:57'); +INSERT INTO `sys_logs` VALUES (1397812315700576258, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/update', 'POST', 12, '[{\"izApi\":false,\"version\":14,\"tableType\":\"0\",\"tempName\":\"other_crypto_asymmetric\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948030000,\"id\":\"1359428685312028674\"}]', NULL, 0, 1, '2021-05-27 15:10:01', 1, '2021-05-27 15:10:01', '2021-05-27 15:10:00'); +INSERT INTO `sys_logs` VALUES (1397812332804947970, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/update', 'POST', 8, '[{\"izApi\":false,\"version\":2,\"tableType\":\"0\",\"tempName\":\"test_user\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622034816000,\"id\":\"1397541427197468673\"}]', NULL, 0, 1, '2021-05-27 15:10:05', 1, '2021-05-27 15:10:05', '2021-05-27 15:10:04'); +INSERT INTO `sys_logs` VALUES (1397812391449706497, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/update', 'POST', 9, '[{\"izApi\":false,\"version\":3,\"tableType\":\"0\",\"tempName\":\"test_user\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622034816000,\"id\":\"1397541427197468673\"}]', NULL, 0, 1, '2021-05-27 15:10:19', 1, '2021-05-27 15:10:19', '2021-05-27 15:10:18'); +INSERT INTO `sys_logs` VALUES (1397827797891661826, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/update', 'POST', 7, '[{\"izApi\":false,\"version\":4,\"tableType\":\"0\",\"tempName\":\"test_user\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622034816000,\"id\":\"1397541427197468673\"}]', NULL, 0, 1, '2021-05-27 16:11:32', 1, '2021-05-27 16:11:32', '2021-05-27 16:11:32'); +INSERT INTO `sys_logs` VALUES (1397827814178144258, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/update', 'POST', 8, '[{\"izApi\":false,\"version\":5,\"tableType\":\"0\",\"tempName\":\"test_user\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622034816000,\"id\":\"1397541427197468673\"}]', NULL, 0, 1, '2021-05-27 16:11:36', 1, '2021-05-27 16:11:36', '2021-05-27 16:11:35'); +INSERT INTO `sys_logs` VALUES (1397827827893518337, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/update', 'POST', 6, '[{\"izApi\":false,\"version\":6,\"tableType\":\"0\",\"tempName\":\"test_user\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622034816000,\"id\":\"1397541427197468673\"}]', NULL, 0, 1, '2021-05-27 16:11:39', 1, '2021-05-27 16:11:39', '2021-05-27 16:11:39'); +INSERT INTO `sys_logs` VALUES (1397827836445704193, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/update', 'POST', 7, '[{\"izApi\":false,\"version\":7,\"tableType\":\"0\",\"tempName\":\"test_user\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622034816000,\"id\":\"1397541427197468673\"}]', NULL, 0, 1, '2021-05-27 16:11:41', 1, '2021-05-27 16:11:41', '2021-05-27 16:11:41'); +INSERT INTO `sys_logs` VALUES (1397828553701048322, '1', '开发工具-开发向导-代码生成器-同步', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/sync', 'POST', 255, '[\"1397801878237925377\"]', NULL, 0, 1, '2021-05-27 16:14:32', 1, '2021-05-27 16:14:32', '2021-05-27 16:14:32'); +INSERT INTO `sys_logs` VALUES (1397828582264258561, '1', '开发工具-开发向导-代码模板-新增', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/insert', 'POST', 10, '[{\"izApi\":false,\"remark\":\"123123\",\"version\":0,\"tableType\":\"0\",\"tempName\":\"12312\",\"izManual\":false}]', NULL, 0, 1, '2021-05-27 16:14:39', 1, '2021-05-27 16:14:39', '2021-05-27 16:14:39'); +INSERT INTO `sys_logs` VALUES (1398101354458628097, '1', '系统配置-角色管理-设置权限', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/role/perms/setPerms', 'POST', 96, '[{\"permsIds\":[\"1314066547072872450\",\"1314066863436640258\",\"1313806847370620930\",\"1313789204920131585\",\"1313789308506857474\",\"1313789400169177089\",\"1313789529840279554\",\"1313864645827678210\",\"1313864777918894082\",\"1335619974709936130\",\"1370051609388388353\",\"1370404146704654337\",\"4\",\"1313867061172195330\",\"1313867122731995137\",\"1313867360502894594\",\"1313867409949544450\",\"1313885644824522754\",\"1332662450423635969\",\"1332662689314414594\",\"1332662758860169217\",\"1332662809711910913\",\"1332662858294534146\",\"1315201380721446914\",\"1315201734892670977\",\"1315201809668722690\",\"1315201864219840513\",\"1315201925477650433\",\"1380173787882696705\",\"1312756531833356289\",\"1313867556498526209\",\"1314884045724717057\",\"1313867617949274113\",\"1313867682814185474\",\"1313867732508299265\",\"1387633500164599809\",\"1387633799226863618\",\"1387633960401383426\",\"1387634089447534594\",\"1387634157474951169\",\"1335439751687208961\",\"1335440004809261058\",\"1335439904372457474\",\"1335440081128816642\",\"1335440153140822017\",\"1360233188433977345\",\"1360233383397810177\",\"1327085543511293954\",\"1327085856930660353\",\"1327086205548625921\",\"1327086298750255105\",\"1327086378794352642\",\"1327086433609711617\",\"1337796232345407489\",\"1337796311940714498\",\"1330365141900591105\",\"1330365525440331778\",\"1330365570587820033\",\"1330365615181660162\",\"1330365717015166977\",\"1337719928086458369\",\"1337720128930705409\",\"1340626549594677250\",\"1340626612895113217\",\"1340626666078887937\",\"1340626895356321793\",\"1340626939119689729\",\"1340626988251766786\",\"1340627032942075906\",\"1314610817013919745\",\"1351012936860155906\",\"1351013587816136705\",\"1314616518671085570\",\"1314782679522099201\",\"1314782733087555586\",\"1314799744349913090\",\"1314068325453574145\",\"1397807288445526017\",\"1327893773049262082\",\"1327894701135491073\",\"1327894767283859457\",\"1327894837093855234\",\"1327894965179510785\",\"1327903778221699074\",\"1329374800267452417\",\"1327895061598171137\",\"1389555212654223361\",\"1397807399338729473\",\"1397807399363895298\",\"1397807399389061121\",\"1397807399414226945\",\"1397807399439392770\",\"1397807399456169985\",\"1397807399481335810\",\"1314786106243301378\",\"1314071137365307394\",\"1314074765178187777\",\"1314075128635600897\",\"1314075267769053186\",\"1314075542684708865\",\"1314075764852797442\",\"1314075970382082050\",\"1314076169481498625\",\"1314076280542474242\",\"1314076678317682689\",\"1314077008057085954\",\"1314077108560998402\",\"1314077229235318786\",\"1314077399507283970\",\"1314077518340304897\",\"1314077631905280001\",\"1314077729003417602\",\"1314120834868060162\",\"1314121004749955073\",\"1314121200103858178\",\"1314121675192672257\",\"1314121808793837570\",\"1314121928784486402\",\"1314122020136427521\",\"1314122353273217025\",\"1314122123047870466\",\"1314122457908518914\",\"1314122556776652802\",\"1314122628184678401\",\"1314122717041008641\",\"1314123071354839041\",\"1314123272790482945\",\"1314123690283114498\",\"1314123894637993985\",\"1314123990633029633\",\"1314124102365093890\",\"1\",\"3\"],\"roleId\":\"2\"}]', NULL, 0, 1, '2021-05-28 10:18:33', 1, '2021-05-28 10:18:33', '2021-05-28 10:18:33'); +INSERT INTO `sys_logs` VALUES (1398204006051856386, '1', '开发工具-开发向导-代码生成器-导入数据表', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/importTables', 'POST', 458, '[\"gen_template_detail\"]', NULL, 0, 1313694379541635074, '2021-05-28 17:06:27', 1313694379541635074, '2021-05-28 17:06:27', '2021-05-28 17:06:27'); +INSERT INTO `sys_logs` VALUES (1398204372973764610, '1', '开发工具-开发向导-代码生成器-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/update', 'POST', 227, '[{\"comments\":\"代码生成器 - 表信息\",\"izSync\":\"1\",\"oldTableName\":\"gen_template_detail\",\"columnList\":[{\"validateType\":\"\",\"fieldName\":\"id\",\"izApi\":false,\"sort\":0,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1398204004021813249\",\"fieldComments\":\"主键\",\"fieldType\":\"bigint\",\"izPk\":\"1\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"parent_id\",\"izApi\":false,\"sort\":1,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1398204004021813249\",\"fieldComments\":\"父级ID\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"path\",\"izApi\":false,\"sort\":2,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1398204004021813249\",\"fieldComments\":\"路径\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":255},{\"validateType\":\"IS_NOT_NULL\",\"fieldName\":\"file_name\",\"izApi\":false,\"sort\":3,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1398204004021813249\",\"fieldComments\":\"文件名\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"file_content\",\"izApi\":false,\"sort\":4,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1398204004021813249\",\"fieldComments\":\"文件内容\",\"fieldType\":\"varchar\",\"izPk\":\"0\",\"fieldLength\":100},{\"validateType\":\"\",\"fieldName\":\"version\",\"izApi\":false,\"sort\":5,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1398204004021813249\",\"fieldComments\":\"版本(乐观锁)\",\"fieldType\":\"int\",\"izPk\":\"0\",\"fieldLength\":10},{\"validateType\":\"\",\"fieldName\":\"create_by\",\"izApi\":false,\"sort\":6,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1398204004021813249\",\"fieldComments\":\"创建用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"create_time\",\"izApi\":false,\"sort\":7,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1398204004021813249\",\"fieldComments\":\"创建日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0},{\"validateType\":\"\",\"fieldName\":\"update_by\",\"izApi\":false,\"sort\":8,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1398204004021813249\",\"fieldComments\":\"修改用户\",\"fieldType\":\"bigint\",\"izPk\":\"0\",\"fieldLength\":19},{\"validateType\":\"\",\"fieldName\":\"update_time\",\"izApi\":false,\"sort\":9,\"izShowList\":\"0\",\"izShowForm\":\"0\",\"fieldPrecision\":0,\"version\":0,\"javaType\":\"String\",\"izNotNull\":\"1\",\"izManual\":false,\"tableId\":\"1398204004021813249\",\"fieldComments\":\"修改日期\",\"fieldType\":\"datetime\",\"izPk\":\"0\",\"fieldLength\":0}],\"izApi\":false,\"updateTime\":1622192787000,\"version\":0,\"tableName\":\"gen_template_detail\",\"tableType\":\"0\",\"createBy\":\"1313694379541635074\",\"jdbcType\":\"mysql\",\"izManual\":false,\"createTime\":1622192787000,\"updateBy\":\"1313694379541635074\",\"id\":\"1398204004021813249\"}]', NULL, 0, 1313694379541635074, '2021-05-28 17:07:55', 1313694379541635074, '2021-05-28 17:07:55', '2021-05-28 17:07:54'); +INSERT INTO `sys_logs` VALUES (1398204702377623554, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 513, '[{\"moduleName\":\"generator\",\"izApi\":false,\"izManual\":false,\"authorName\":\"周鹏程\",\"codeTitleBrief\":\"代码模板详情\",\"codeTitle\":\"代码模板详情\",\"tableId\":\"1398204004021813249\",\"packageName\":\"org.opsli.modulars\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-28 17:09:13', 1313694379541635074, '2021-05-28 17:09:13', '2021-05-28 17:09:13'); +INSERT INTO `sys_logs` VALUES (1398204718450196481, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 42, '[{\"moduleName\":\"generator\",\"izApi\":false,\"izManual\":false,\"authorName\":\"周鹏程\",\"codeTitleBrief\":\"代码模板详情\",\"codeTitle\":\"代码模板详情\",\"tableId\":\"1398204004021813249\",\"packageName\":\"org.opsli.modulars\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-28 17:09:17', 1313694379541635074, '2021-05-28 17:09:17', '2021-05-28 17:09:16'); +INSERT INTO `sys_logs` VALUES (1398205546753818625, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 810, '[{\"moduleName\":\"generator\",\"izApi\":false,\"izManual\":false,\"authorName\":\"周鹏程\",\"codeTitleBrief\":\"代码模板详情\",\"codeTitle\":\"代码模板详情\",\"tableId\":\"1398204004021813249\",\"packageName\":\"org.opsli.modulars\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-28 17:12:34', 1313694379541635074, '2021-05-28 17:12:34', '2021-05-28 17:12:34'); +INSERT INTO `sys_logs` VALUES (1398205563040301057, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 60, '[{\"moduleName\":\"generator\",\"izApi\":false,\"izManual\":false,\"authorName\":\"周鹏程\",\"codeTitleBrief\":\"代码模板详情\",\"codeTitle\":\"代码模板详情\",\"tableId\":\"1398204004021813249\",\"packageName\":\"org.opsli.modulars\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-28 17:12:38', 1313694379541635074, '2021-05-28 17:12:38', '2021-05-28 17:12:38'); +INSERT INTO `sys_logs` VALUES (1398245480239943682, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 49, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622103279000,\"version\":0,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1\",\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 19:51:15', 1313694379541635074, '2021-05-28 19:51:15', '2021-05-28 19:51:15'); +INSERT INTO `sys_logs` VALUES (1398245974362509313, '2', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 193, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622202675000,\"version\":1,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"path\":\"aaa\",\"izManual\":false,\"fileContent\":\"123123123\"}],\"id\":\"1397828582130040834\"}]', '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\r\n### The error may exist in org/opsli/modulars/generator/template/mapper/GenTemplateDetailMapper.java (best guess)\r\n### The error may involve org.opsli.modulars.generator.template.mapper.GenTemplateDetailMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO gen_template_detail ( id, path, file_name, file_content, create_by, create_time, update_by, update_time, version ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\n; Field \'parent_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value', 0, 1313694379541635074, '2021-05-28 19:53:13', 1313694379541635074, '2021-05-28 19:53:13', '2021-05-28 19:53:13'); +INSERT INTO `sys_logs` VALUES (1398246425095000065, '2', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 87, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622202675000,\"version\":1,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"path\":\"aaa\",\"izManual\":false,\"fileContent\":\"123123123\"}],\"id\":\"1397828582130040834\"}]', '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\r\n### The error may exist in org/opsli/modulars/generator/template/mapper/GenTemplateDetailMapper.java (best guess)\r\n### The error may involve org.opsli.modulars.generator.template.mapper.GenTemplateDetailMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO gen_template_detail ( id, path, file_name, file_content, create_by, create_time, update_by, update_time, version ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\n; Field \'parent_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value', 0, 1313694379541635074, '2021-05-28 19:55:01', 1313694379541635074, '2021-05-28 19:55:01', '2021-05-28 19:55:00'); +INSERT INTO `sys_logs` VALUES (1398246648575905794, '2', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 19599, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622202675000,\"version\":1,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"path\":\"aaa\",\"izManual\":false,\"fileContent\":\"123123123\"}],\"id\":\"1397828582130040834\"}]', '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\r\n### The error may exist in org/opsli/modulars/generator/template/mapper/GenTemplateDetailMapper.java (best guess)\r\n### The error may involve org.opsli.modulars.generator.template.mapper.GenTemplateDetailMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO gen_template_detail ( id, path, file_name, file_content, create_by, create_time, update_by, update_time, version ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\n; Field \'parent_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value', 0, 1313694379541635074, '2021-05-28 19:55:54', 1313694379541635074, '2021-05-28 19:55:54', '2021-05-28 19:55:53'); +INSERT INTO `sys_logs` VALUES (1398246890310422529, '2', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 11038, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622202675000,\"version\":1,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"path\":\"aaa\",\"izManual\":false,\"fileContent\":\"123123123\"}],\"id\":\"1397828582130040834\"}]', '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\r\n### The error may exist in org/opsli/modulars/generator/template/mapper/GenTemplateDetailMapper.java (best guess)\r\n### The error may involve org.opsli.modulars.generator.template.mapper.GenTemplateDetailMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO gen_template_detail ( id, path, file_name, file_content, create_by, create_time, update_by, update_time, version ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\n; Field \'parent_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value', 0, 1313694379541635074, '2021-05-28 19:56:51', 1313694379541635074, '2021-05-28 19:56:51', '2021-05-28 19:56:51'); +INSERT INTO `sys_logs` VALUES (1398247105574686721, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 217, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622202675000,\"version\":1,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"parentId\":\"1397828582130040834\",\"path\":\"aaa\",\"izManual\":false,\"fileContent\":\"123123123\"}],\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 19:57:43', 1313694379541635074, '2021-05-28 19:57:43', '2021-05-28 19:57:42'); +INSERT INTO `sys_logs` VALUES (1398247587693154306, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 45, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622203063000,\"version\":2,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"version\":0,\"parentId\":\"1397828582130040834\",\"path\":\"aaa\",\"izManual\":false,\"id\":\"1398247104815517698\",\"fileContent\":\"1232131231232131231231213\"}],\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 19:59:38', 1313694379541635074, '2021-05-28 19:59:38', '2021-05-28 19:59:37'); +INSERT INTO `sys_logs` VALUES (1398247642110054402, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 37, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622203178000,\"version\":3,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"version\":0,\"parentId\":\"1397828582130040834\",\"path\":\"aaa\",\"izManual\":false,\"id\":\"1398247104815517698\",\"fileContent\":\"123123123\"},{\"fileName\":\"bbbb\",\"izApi\":false,\"parentId\":\"1397828582130040834\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"12312312323\"}],\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 19:59:51', 1313694379541635074, '2021-05-28 19:59:51', '2021-05-28 19:59:50'); +INSERT INTO `sys_logs` VALUES (1398249476241444865, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 11769, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622203191000,\"version\":4,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"version\":0,\"parentId\":\"1397828582130040834\",\"path\":\"aaa\",\"izManual\":false,\"id\":\"1398247104815517698\",\"fileContent\":\"123123123\"}],\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 20:07:08', 1313694379541635074, '2021-05-28 20:07:08', '2021-05-28 20:07:08'); +INSERT INTO `sys_logs` VALUES (1398249614066274306, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 13, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622203191000,\"version\":4,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"updateTime\":1622203063000,\"version\":0,\"parentId\":\"1397828582130040834\",\"path\":\"aaa\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622203063000,\"updateBy\":\"1313694379541635074\",\"id\":\"1398247104815517698\",\"fileContent\":\"123123123\"}],\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 20:07:41', 1313694379541635074, '2021-05-28 20:07:41', '2021-05-28 20:07:40'); +INSERT INTO `sys_logs` VALUES (1398249783662956546, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 36824, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622203616000,\"version\":5,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"version\":0,\"parentId\":\"1397828582130040834\",\"path\":\"aaa\",\"izManual\":false,\"id\":\"1398247104815517698\",\"fileContent\":\"123123123\"}],\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 20:08:21', 1313694379541635074, '2021-05-28 20:08:21', '2021-05-28 20:08:21'); +INSERT INTO `sys_logs` VALUES (1398249843339513858, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 8, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622203616000,\"version\":5,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"updateTime\":1622203699000,\"version\":0,\"parentId\":\"1397828582130040834\",\"path\":\"aaa\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622203699000,\"updateBy\":\"1313694379541635074\",\"id\":\"1398247104815517698\",\"fileContent\":\"123123123\"}],\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 20:08:36', 1313694379541635074, '2021-05-28 20:08:36', '2021-05-28 20:08:35'); +INSERT INTO `sys_logs` VALUES (1398249859181400066, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 38, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622203664000,\"version\":6,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"version\":0,\"parentId\":\"1397828582130040834\",\"path\":\"aaa\",\"izManual\":false,\"id\":\"1398247104815517698\",\"fileContent\":\"123123123\"}],\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 20:08:39', 1313694379541635074, '2021-05-28 20:08:39', '2021-05-28 20:08:39'); +INSERT INTO `sys_logs` VALUES (1398250817525338113, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 74, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622203719000,\"version\":7,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"version\":0,\"parentId\":\"1397828582130040834\",\"path\":\"aaa\",\"izManual\":false,\"id\":\"1398247104815517698\",\"fileContent\":\"123123123\"},{\"fileName\":\"bbbb\",\"izApi\":false,\"parentId\":\"1397828582130040834\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"123213123\"}],\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 20:12:28', 1313694379541635074, '2021-05-28 20:12:28', '2021-05-28 20:12:27'); +INSERT INTO `sys_logs` VALUES (1398250880238571521, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 71, '[{\"izApi\":false,\"remark\":\"123123\",\"updateTime\":1622203948000,\"version\":8,\"tableType\":\"0\",\"tempName\":\"12312\",\"createBy\":\"1\",\"izManual\":false,\"createTime\":1622103279000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"aaa\",\"izApi\":false,\"version\":0,\"parentId\":\"1397828582130040834\",\"path\":\"aaa\",\"izManual\":false,\"id\":\"1398247104815517698\",\"fileContent\":\"123123123\"},{\"fileName\":\"bbbb\",\"izApi\":false,\"version\":0,\"parentId\":\"1397828582130040834\",\"path\":\"\",\"izManual\":false,\"id\":\"1398250817328205825\",\"fileContent\":\"123213123\"},{\"fileName\":\"ccccc\",\"izApi\":false,\"parentId\":\"1397828582130040834\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"12312312312\"}],\"id\":\"1397828582130040834\"}]', NULL, 0, 1313694379541635074, '2021-05-28 20:12:43', 1313694379541635074, '2021-05-28 20:12:43', '2021-05-28 20:12:42'); +INSERT INTO `sys_logs` VALUES (1398252865444597762, '2', '开发工具-开发向导-代码模板-新增', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/insertAndDetail', 'POST', 26, '[{\"izApi\":false,\"remark\":\"\",\"version\":0,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"izManual\":false,\"detailList\":[{\"fileName\":\"123123\",\"izApi\":false,\"path\":\"\",\"izManual\":false,\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"}]}]', '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\r\n### The error may exist in org/opsli/modulars/generator/template/mapper/GenTemplateDetailMapper.java (best guess)\r\n### The error may involve org.opsli.modulars.generator.template.mapper.GenTemplateDetailMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO gen_template_detail ( id, path, file_name, file_content, create_by, create_time, update_by, update_time, version ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\n; Field \'parent_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value', 0, 1313694379541635074, '2021-05-28 20:20:36', 1313694379541635074, '2021-05-28 20:20:36', '2021-05-28 20:20:36'); +INSERT INTO `sys_logs` VALUES (1398252871652167682, '2', '开发工具-开发向导-代码模板-新增', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/insertAndDetail', 'POST', 17, '[{\"izApi\":false,\"remark\":\"\",\"version\":0,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"izManual\":false,\"detailList\":[{\"fileName\":\"123123\",\"izApi\":false,\"path\":\"\",\"izManual\":false,\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"}]}]', '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\r\n### The error may exist in org/opsli/modulars/generator/template/mapper/GenTemplateDetailMapper.java (best guess)\r\n### The error may involve org.opsli.modulars.generator.template.mapper.GenTemplateDetailMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO gen_template_detail ( id, path, file_name, file_content, create_by, create_time, update_by, update_time, version ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value\n; Field \'parent_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'parent_id\' doesn\'t have a default value', 0, 1313694379541635074, '2021-05-28 20:20:38', 1313694379541635074, '2021-05-28 20:20:38', '2021-05-28 20:20:37'); +INSERT INTO `sys_logs` VALUES (1398253708130603009, '1', '开发工具-开发向导-代码模板-新增', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/insertAndDetail', 'POST', 836, '[{\"izApi\":false,\"remark\":\"\",\"version\":0,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"izManual\":false,\"detailList\":[{\"fileName\":\"123123\",\"izApi\":false,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"}]}]', NULL, 0, 1313694379541635074, '2021-05-28 20:23:57', 1313694379541635074, '2021-05-28 20:23:57', '2021-05-28 20:23:56'); +INSERT INTO `sys_logs` VALUES (1398253857045172226, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 68, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622204636000,\"version\":0,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"123123\",\"izApi\":false,\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398253706356412417\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 20:24:32', 1313694379541635074, '2021-05-28 20:24:32', '2021-05-28 20:24:32'); +INSERT INTO `sys_logs` VALUES (1398253969205055489, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 51, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622204672000,\"version\":1,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"123123\",\"izApi\":false,\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398253706356412417\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 20:24:59', 1313694379541635074, '2021-05-28 20:24:59', '2021-05-28 20:24:59'); +INSERT INTO `sys_logs` VALUES (1398286652140412929, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 165, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622204699000,\"version\":2,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"123123\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398253706356412417\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"啊啊啊啊啊\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\"},{\"fileName\":\"123213\",\"izApi\":false,\"type\":\"1\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"13213123213\"},{\"fileName\":\"4324234324\",\"izApi\":false,\"type\":\"1\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 22:34:51', 1313694379541635074, '2021-05-28 22:34:51', '2021-05-28 22:34:51'); +INSERT INTO `sys_logs` VALUES (1398287390056898562, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 118, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622212491000,\"version\":3,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"123123\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398253706356412417\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"啊啊啊啊啊\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651691622401\",\"fileContent\":\"\"},{\"fileName\":\"123213\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651754536961\",\"fileContent\":\"13213123213\"},{\"fileName\":\"4324234324\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651821645825\",\"fileContent\":\"哎哎哎\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 22:37:47', 1313694379541635074, '2021-05-28 22:37:47', '2021-05-28 22:37:47'); +INSERT INTO `sys_logs` VALUES (1398287617279123458, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 84, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622212667000,\"version\":4,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"123123\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398253706356412417\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"啊啊啊啊啊\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651691622401\",\"fileContent\":\"哎哎哎\"},{\"fileName\":\"123213\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651754536961\",\"fileContent\":\"13213123213\"},{\"fileName\":\"4324234324\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651821645825\",\"fileContent\":\"哎哎哎\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 22:38:42', 1313694379541635074, '2021-05-28 22:38:42', '2021-05-28 22:38:41'); +INSERT INTO `sys_logs` VALUES (1398290021512896513, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 56, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622212721000,\"version\":5,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"TemplateRestApi.java\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"123213\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651754536961\",\"fileContent\":\"13213123213\"},{\"fileName\":\"4324234324\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651821645825\",\"fileContent\":\"哎哎哎\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 22:48:15', 1313694379541635074, '2021-05-28 22:48:15', '2021-05-28 22:48:14'); +INSERT INTO `sys_logs` VALUES (1398290850676465665, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 253, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622213295000,\"version\":6,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\"},{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\"},{\"fileName\":\"MapperXML.xml\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\"},{\"fileName\":\"123213\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651754536961\",\"fileContent\":\"13213123213\"},{\"fileName\":\"4324234324\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651821645825\",\"fileContent\":\"哎哎哎\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 22:51:32', 1313694379541635074, '2021-05-28 22:51:32', '2021-05-28 22:51:32'); +INSERT INTO `sys_logs` VALUES (1398291318362333186, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 248, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622213492000,\"version\":7,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849921490945\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\\n\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405505\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\\n\"},{\"fileName\":\"MapperXML.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405506\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850298978306\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\\n\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849854382081\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850173149186\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\\n\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850047320066\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\\n\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850110234625\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\\n\"},{\"fileName\":\"123213\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651754536961\",\"fileContent\":\"13213123213\"},{\"fileName\":\"4324234324\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398286651821645825\",\"fileContent\":\"哎哎哎\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 22:53:24', 1313694379541635074, '2021-05-28 22:53:24', '2021-05-28 22:53:23'); +INSERT INTO `sys_logs` VALUES (1398292024058175489, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 250, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622213604000,\"version\":8,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849921490945\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\\n\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405505\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\\n\"},{\"fileName\":\"MapperXML.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405506\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850298978306\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\\n\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849854382081\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850173149186\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\\n\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850047320066\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\\n\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850110234625\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\\n\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 22:56:12', 1313694379541635074, '2021-05-28 22:56:12', '2021-05-28 22:56:12'); +INSERT INTO `sys_logs` VALUES (1398293234051964930, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 229, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622213772000,\"version\":9,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849921490945\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\\n\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405505\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\\n\"},{\"fileName\":\"MapperXML.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405506\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850298978306\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\\n\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849854382081\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850173149186\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\\n\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850047320066\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\\n\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850110234625\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\\n\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023416446977\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023609384961\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 23:01:01', 1313694379541635074, '2021-05-28 23:01:01', '2021-05-28 23:01:00'); +INSERT INTO `sys_logs` VALUES (1398293766544023554, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 229, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622214060000,\"version\":10,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849921490945\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\\n\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405505\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\\n\"},{\"fileName\":\"MapperXML.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405506\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850298978306\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\\n\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849854382081\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850173149186\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\\n\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850047320066\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\\n\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850110234625\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\\n\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023416446977\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023609384961\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 23:03:08', 1313694379541635074, '2021-05-28 23:03:08', '2021-05-28 23:03:07'); +INSERT INTO `sys_logs` VALUES (1398295182029295617, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 585, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622214187000,\"version\":11,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849921490945\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\\n\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405505\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\\n\"},{\"fileName\":\"MapperXML.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405506\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850298978306\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\\n\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849854382081\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850173149186\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\\n\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850047320066\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\\n\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850110234625\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\\n\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023416446977\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023609384961\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 23:08:45', 1313694379541635074, '2021-05-28 23:08:45', '2021-05-28 23:08:45'); +INSERT INTO `sys_logs` VALUES (1398295532828323841, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 572, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622214524000,\"version\":12,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849921490945\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\\n\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405505\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\\n\"},{\"fileName\":\"MapperXML.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405506\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850298978306\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\\n\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849854382081\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850173149186\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\\n\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850047320066\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\\n\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850110234625\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\\n\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023416446977\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023609384961\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 23:10:09', 1313694379541635074, '2021-05-28 23:10:09', '2021-05-28 23:10:08'); +INSERT INTO `sys_logs` VALUES (1398296005262098433, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 1049, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622214608000,\"version\":13,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849921490945\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\\n\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405505\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\\n\"},{\"fileName\":\"MapperXML.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405506\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850298978306\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\\n\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849854382081\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850173149186\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\\n\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850047320066\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\\n\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850110234625\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\\n\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023416446977\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023609384961\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 23:12:01', 1313694379541635074, '2021-05-28 23:12:01', '2021-05-28 23:12:01'); +INSERT INTO `sys_logs` VALUES (1398296078054244354, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 269, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622214720000,\"version\":14,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849921490945\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\\n\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405505\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\\n\"},{\"fileName\":\"MapperXML.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849984405506\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850298978306\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\\n\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290849854382081\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850173149186\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\\n\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850047320066\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\\n\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398290850110234625\",\"fileContent\":\"/**\\n * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\\n *

\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not\\n * use this file except in compliance with the License. You may obtain a copy of\\n * the License at\\n *

\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *

\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT\\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\\n * License for the specific language governing permissions and limitations under\\n * the License.\\n */\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\\n\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023416446977\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"#(apiPath)/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"#(apiPath)/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023609384961\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-05-28 23:12:19', 1313694379541635074, '2021-05-28 23:12:19', '2021-05-28 23:12:18'); +INSERT INTO `sys_logs` VALUES (1399329287927967745, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 1113, '[{\"moduleName\":\"generator\",\"izApi\":false,\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622192953000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"代码模板详情\",\"codeTitle\":\"代码模板详情\",\"tableId\":\"1398204004021813249\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1398204700121088001\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-31 19:37:55', 1313694379541635074, '2021-05-31 19:37:55', '2021-05-31 19:37:55'); +INSERT INTO `sys_logs` VALUES (1399330048191631361, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 245, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1397828582130040834\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622192953000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"代码模板详情\",\"codeTitle\":\"代码模板详情\",\"tableId\":\"1398204004021813249\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1398204700121088001\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-31 19:40:56', 1313694379541635074, '2021-05-31 19:40:56', '2021-05-31 19:40:56'); +INSERT INTO `sys_logs` VALUES (1399330088612139009, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 49, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622192953000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"代码模板详情\",\"codeTitle\":\"代码模板详情\",\"tableId\":\"1398204004021813249\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1398204700121088001\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-05-31 19:41:06', 1313694379541635074, '2021-05-31 19:41:06', '2021-05-31 19:41:06'); +INSERT INTO `sys_logs` VALUES (1399628438318342146, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 901, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 15:26:38', 1313694379541635074, '2021-06-01 15:26:38', '2021-06-01 15:26:38'); +INSERT INTO `sys_logs` VALUES (1399629062787293185, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 97083, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622192953000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"代码模板详情\",\"codeTitle\":\"代码模板详情\",\"tableId\":\"1398204004021813249\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1398204700121088001\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 15:29:07', 1313694379541635074, '2021-06-01 15:29:07', '2021-06-01 15:29:07'); +INSERT INTO `sys_logs` VALUES (1399629225782140930, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 26015, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 15:29:46', 1313694379541635074, '2021-06-01 15:29:46', '2021-06-01 15:29:45'); +INSERT INTO `sys_logs` VALUES (1399629588753014785, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 86, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 15:31:12', 1313694379541635074, '2021-06-01 15:31:12', '2021-06-01 15:31:12'); +INSERT INTO `sys_logs` VALUES (1399634390501171202, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 1034991, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 15:50:17', 1313694379541635074, '2021-06-01 15:50:17', '2021-06-01 15:50:17'); +INSERT INTO `sys_logs` VALUES (1399648115266379777, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 76818, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 16:44:50', 1313694379541635074, '2021-06-01 16:44:50', '2021-06-01 16:44:49'); +INSERT INTO `sys_logs` VALUES (1399648186670211073, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 5182, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 16:45:07', 1313694379541635074, '2021-06-01 16:45:07', '2021-06-01 16:45:06'); +INSERT INTO `sys_logs` VALUES (1399649968708345857, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 112, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 16:52:11', 1313694379541635074, '2021-06-01 16:52:11', '2021-06-01 16:52:11'); +INSERT INTO `sys_logs` VALUES (1399649991542136833, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 62, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 16:52:17', 1313694379541635074, '2021-06-01 16:52:17', '2021-06-01 16:52:16'); +INSERT INTO `sys_logs` VALUES (1399651352077877249, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 368, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 16:57:41', 1313694379541635074, '2021-06-01 16:57:41', '2021-06-01 16:57:41'); +INSERT INTO `sys_logs` VALUES (1399651405844660225, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 54, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 16:57:54', 1313694379541635074, '2021-06-01 16:57:54', '2021-06-01 16:57:54'); +INSERT INTO `sys_logs` VALUES (1399651434089103361, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 174, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 16:58:01', 1313694379541635074, '2021-06-01 16:58:01', '2021-06-01 16:58:00'); +INSERT INTO `sys_logs` VALUES (1399655259885748225, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 44, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 17:13:13', 1313694379541635074, '2021-06-01 17:13:13', '2021-06-01 17:13:12'); +INSERT INTO `sys_logs` VALUES (1399655362788802562, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 1651, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 17:13:37', 1313694379541635074, '2021-06-01 17:13:37', '2021-06-01 17:13:37'); +INSERT INTO `sys_logs` VALUES (1399655421479698433, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 8667, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 17:13:51', 1313694379541635074, '2021-06-01 17:13:51', '2021-06-01 17:13:51'); +INSERT INTO `sys_logs` VALUES (1399655437296418817, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 24, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 17:13:55', 1313694379541635074, '2021-06-01 17:13:55', '2021-06-01 17:13:55'); +INSERT INTO `sys_logs` VALUES (1399655690531717121, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 23, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 17:14:56', 1313694379541635074, '2021-06-01 17:14:56', '2021-06-01 17:14:55'); +INSERT INTO `sys_logs` VALUES (1399667141862465538, '1', '系统配置-菜单管理-增加', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/menu/insert', 'POST', 47, '[{\"hidden\":\"0\",\"izApi\":false,\"menuName\":\"复制\",\"type\":\"2\",\"version\":0,\"parentId\":\"1397807399338729473\",\"sortNo\":7,\"izManual\":false,\"permissions\":\"generator_template_copy\",\"alwaysShow\":\"0\"}]', NULL, 0, 1, '2021-06-01 18:00:26', 1, '2021-06-01 18:00:26', '2021-06-01 18:00:25'); +INSERT INTO `sys_logs` VALUES (1399667214851743746, '1', '系统配置-角色管理-设置权限', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/system/role/perms/setPerms', 'POST', 117, '[{\"permsIds\":[\"1314066547072872450\",\"1314066863436640258\",\"1313806847370620930\",\"1313789204920131585\",\"1313789308506857474\",\"1313789400169177089\",\"1313789529840279554\",\"1313864645827678210\",\"1313864777918894082\",\"1335619974709936130\",\"1370051609388388353\",\"1370404146704654337\",\"4\",\"1313867061172195330\",\"1313867122731995137\",\"1313867360502894594\",\"1313867409949544450\",\"1313885644824522754\",\"1332662450423635969\",\"1332662689314414594\",\"1332662758860169217\",\"1332662809711910913\",\"1332662858294534146\",\"1315201380721446914\",\"1315201734892670977\",\"1315201809668722690\",\"1315201864219840513\",\"1315201925477650433\",\"1380173787882696705\",\"1312756531833356289\",\"1313867556498526209\",\"1314884045724717057\",\"1313867617949274113\",\"1313867682814185474\",\"1313867732508299265\",\"1387633500164599809\",\"1387633799226863618\",\"1387633960401383426\",\"1387634089447534594\",\"1387634157474951169\",\"1335439751687208961\",\"1335440004809261058\",\"1335439904372457474\",\"1335440081128816642\",\"1335440153140822017\",\"1360233188433977345\",\"1360233383397810177\",\"1327085543511293954\",\"1327085856930660353\",\"1327086205548625921\",\"1327086298750255105\",\"1327086378794352642\",\"1327086433609711617\",\"1337796232345407489\",\"1337796311940714498\",\"1330365141900591105\",\"1330365525440331778\",\"1330365570587820033\",\"1330365615181660162\",\"1330365717015166977\",\"1337719928086458369\",\"1337720128930705409\",\"1340626549594677250\",\"1340626612895113217\",\"1340626666078887937\",\"1340626895356321793\",\"1340626939119689729\",\"1340626988251766786\",\"1340627032942075906\",\"1314610817013919745\",\"1351012936860155906\",\"1351013587816136705\",\"1314616518671085570\",\"1314782679522099201\",\"1314782733087555586\",\"1314799744349913090\",\"1314068325453574145\",\"1397807288445526017\",\"1327893773049262082\",\"1327894701135491073\",\"1327894767283859457\",\"1327894837093855234\",\"1327894965179510785\",\"1327903778221699074\",\"1329374800267452417\",\"1327895061598171137\",\"1389555212654223361\",\"1397807399338729473\",\"1397807399363895298\",\"1397807399389061121\",\"1397807399414226945\",\"1397807399439392770\",\"1397807399456169985\",\"1397807399481335810\",\"1399667141430452225\",\"1314786106243301378\",\"1314071137365307394\",\"1314074765178187777\",\"1314075128635600897\",\"1314075267769053186\",\"1314075542684708865\",\"1314075764852797442\",\"1314075970382082050\",\"1314076169481498625\",\"1314076280542474242\",\"1314076678317682689\",\"1314077008057085954\",\"1314077108560998402\",\"1314077229235318786\",\"1314077399507283970\",\"1314077518340304897\",\"1314077631905280001\",\"1314077729003417602\",\"1314120834868060162\",\"1314121004749955073\",\"1314121200103858178\",\"1314121675192672257\",\"1314121808793837570\",\"1314121928784486402\",\"1314122020136427521\",\"1314122353273217025\",\"1314122123047870466\",\"1314122457908518914\",\"1314122556776652802\",\"1314122628184678401\",\"1314122717041008641\",\"1314123071354839041\",\"1314123272790482945\",\"1314123690283114498\",\"1314123894637993985\",\"1314123990633029633\",\"1314124102365093890\",\"1\",\"3\"],\"roleId\":\"2\"}]', NULL, 0, 1, '2021-06-01 18:00:43', 1, '2021-06-01 18:00:43', '2021-06-01 18:00:43'); +INSERT INTO `sys_logs` VALUES (1399667848539774977, '1', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 324, '[{\"izApi\":false,\"tempName\":\"测试复制\",\"izManual\":false,\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-06-01 18:03:14', 1313694379541635074, '2021-06-01 18:03:14', '2021-06-01 18:03:14'); +INSERT INTO `sys_logs` VALUES (1399680450829459458, '1', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 250, '[{\"izApi\":false,\"tempName\":\"测试复制\",\"izManual\":false,\"id\":\"1399667847319232513\"}]', NULL, 0, 1313694379541635074, '2021-06-01 18:53:19', 1313694379541635074, '2021-06-01 18:53:19', '2021-06-01 18:53:18'); +INSERT INTO `sys_logs` VALUES (1399680523193786370, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/del', 'POST', 10714, '[\"1399680449726357506\"]', NULL, 0, 1313694379541635074, '2021-06-01 18:53:36', 1313694379541635074, '2021-06-01 18:53:36', '2021-06-01 18:53:36'); +INSERT INTO `sys_logs` VALUES (1399680523256700930, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/delAll', 'POST', 1766, '[\"1399680449726357506\"]', NULL, 0, 1313694379541635074, '2021-06-01 18:53:36', 1313694379541635074, '2021-06-01 18:53:36', '2021-06-01 18:53:36'); +INSERT INTO `sys_logs` VALUES (1399681848111431681, '1', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 648, '[{\"izApi\":false,\"tempName\":\"测试复制\",\"izManual\":false,\"id\":\"1399667847319232513\"}]', NULL, 0, 1313694379541635074, '2021-06-01 18:58:52', 1313694379541635074, '2021-06-01 18:58:52', '2021-06-01 18:58:52'); +INSERT INTO `sys_logs` VALUES (1399682129586978818, '2', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 11, '[{\"izApi\":false,\"tempName\":\"测试复制\",\"izManual\":false,\"id\":\"1399681845884256257\"}]', '模板名称重复', 0, 1313694379541635074, '2021-06-01 18:59:59', 1313694379541635074, '2021-06-01 18:59:59', '2021-06-01 18:59:59'); +INSERT INTO `sys_logs` VALUES (1399682207957549057, '2', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 7, '[{\"izApi\":false,\"tempName\":\"测试复制\",\"izManual\":false,\"id\":\"1399667847319232513\"}]', '模板名称重复', 0, 1313694379541635074, '2021-06-01 19:00:18', 1313694379541635074, '2021-06-01 19:00:18', '2021-06-01 19:00:17'); +INSERT INTO `sys_logs` VALUES (1399689933165150210, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/delAll', 'POST', 550, '[\"1399681845884256257\"]', NULL, 0, 1313694379541635074, '2021-06-01 19:31:00', 1313694379541635074, '2021-06-01 19:31:00', '2021-06-01 19:30:59'); +INSERT INTO `sys_logs` VALUES (1399690103168679937, '2', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 28, '[{\"izApi\":false,\"tempName\":\"测试复制\",\"izManual\":false}]', '模板名称重复', 0, 1313694379541635074, '2021-06-01 19:31:40', 1313694379541635074, '2021-06-01 19:31:40', '2021-06-01 19:31:40'); +INSERT INTO `sys_logs` VALUES (1399690804766687233, '1', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 415, '[{\"izApi\":false,\"tempName\":\"1111\",\"izManual\":false}]', NULL, 0, 1313694379541635074, '2021-06-01 19:34:28', 1313694379541635074, '2021-06-01 19:34:28', '2021-06-01 19:34:27'); +INSERT INTO `sys_logs` VALUES (1399690816766590978, '2', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 5, '[{\"izApi\":false,\"tempName\":\"1111\",\"izManual\":false}]', '模板名称重复', 0, 1313694379541635074, '2021-06-01 19:34:30', 1313694379541635074, '2021-06-01 19:34:30', '2021-06-01 19:34:30'); +INSERT INTO `sys_logs` VALUES (1399690846088970242, '2', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 6, '[{\"izApi\":false,\"tempName\":\"1111\",\"izManual\":false}]', '模板名称重复', 0, 1313694379541635074, '2021-06-01 19:34:37', 1313694379541635074, '2021-06-01 19:34:37', '2021-06-01 19:34:37'); +INSERT INTO `sys_logs` VALUES (1399690859481382913, '2', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 5, '[{\"izApi\":false,\"tempName\":\"1111\",\"izManual\":false}]', '模板名称重复', 0, 1313694379541635074, '2021-06-01 19:34:41', 1313694379541635074, '2021-06-01 19:34:41', '2021-06-01 19:34:40'); +INSERT INTO `sys_logs` VALUES (1399690869119893505, '2', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 7, '[{\"izApi\":false,\"tempName\":\"1111\",\"izManual\":false}]', '模板名称重复', 0, 1313694379541635074, '2021-06-01 19:34:43', 1313694379541635074, '2021-06-01 19:34:43', '2021-06-01 19:34:42'); +INSERT INTO `sys_logs` VALUES (1399690884194222082, '1', '开发工具-开发向导-代码模板-复制', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/copy', 'POST', 248, '[{\"izApi\":false,\"tempName\":\"111\",\"izManual\":false}]', NULL, 0, 1313694379541635074, '2021-06-01 19:34:46', 1313694379541635074, '2021-06-01 19:34:46', '2021-06-01 19:34:46'); +INSERT INTO `sys_logs` VALUES (1399691081469116417, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/delAll', 'POST', 36, '[\"1399690883145646081,1399690803101548545\"]', NULL, 0, 1313694379541635074, '2021-06-01 19:35:33', 1313694379541635074, '2021-06-01 19:35:33', '2021-06-01 19:35:33'); +INSERT INTO `sys_logs` VALUES (1399696474593247233, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 219, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 19:56:59', 1313694379541635074, '2021-06-01 19:56:59', '2021-06-01 19:56:59'); +INSERT INTO `sys_logs` VALUES (1399696851023642625, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 58306, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 19:58:29', 1313694379541635074, '2021-06-01 19:58:29', '2021-06-01 19:58:29'); +INSERT INTO `sys_logs` VALUES (1399697671815307265, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 285, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:01:45', 1313694379541635074, '2021-06-01 20:01:45', '2021-06-01 20:01:44'); +INSERT INTO `sys_logs` VALUES (1399698269453295617, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 133331, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:04:07', 1313694379541635074, '2021-06-01 20:04:07', '2021-06-01 20:04:07'); +INSERT INTO `sys_logs` VALUES (1399698427754717185, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 15121, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:04:45', 1313694379541635074, '2021-06-01 20:04:45', '2021-06-01 20:04:44'); +INSERT INTO `sys_logs` VALUES (1399698854441263106, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 44181, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:06:27', 1313694379541635074, '2021-06-01 20:06:27', '2021-06-01 20:06:26'); +INSERT INTO `sys_logs` VALUES (1399699171979436034, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 47303, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:07:42', 1313694379541635074, '2021-06-01 20:07:42', '2021-06-01 20:07:42'); +INSERT INTO `sys_logs` VALUES (1399699982193139714, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 83335, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:10:56', 1313694379541635074, '2021-06-01 20:10:56', '2021-06-01 20:10:55'); +INSERT INTO `sys_logs` VALUES (1399700106046742530, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 55, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:11:25', 1313694379541635074, '2021-06-01 20:11:25', '2021-06-01 20:11:25'); +INSERT INTO `sys_logs` VALUES (1399700232215601154, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 54, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:11:55', 1313694379541635074, '2021-06-01 20:11:55', '2021-06-01 20:11:55'); +INSERT INTO `sys_logs` VALUES (1399700297806127106, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 57, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:12:11', 1313694379541635074, '2021-06-01 20:12:11', '2021-06-01 20:12:10'); +INSERT INTO `sys_logs` VALUES (1399700446527864833, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 360, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:12:46', 1313694379541635074, '2021-06-01 20:12:46', '2021-06-01 20:12:46'); +INSERT INTO `sys_logs` VALUES (1399700591210381313, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 18073, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:13:21', 1313694379541635074, '2021-06-01 20:13:21', '2021-06-01 20:13:20'); +INSERT INTO `sys_logs` VALUES (1399700885377892353, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 128, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:14:31', 1313694379541635074, '2021-06-01 20:14:31', '2021-06-01 20:14:30'); +INSERT INTO `sys_logs` VALUES (1399701732715380738, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 67904, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:17:53', 1313694379541635074, '2021-06-01 20:17:53', '2021-06-01 20:17:52'); +INSERT INTO `sys_logs` VALUES (1399701908033093634, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 62, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:18:35', 1313694379541635074, '2021-06-01 20:18:35', '2021-06-01 20:18:34'); +INSERT INTO `sys_logs` VALUES (1399702438587383809, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 104032, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:20:41', 1313694379541635074, '2021-06-01 20:20:41', '2021-06-01 20:20:41'); +INSERT INTO `sys_logs` VALUES (1399702641893687297, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 5177, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:21:30', 1313694379541635074, '2021-06-01 20:21:30', '2021-06-01 20:21:29'); +INSERT INTO `sys_logs` VALUES (1399702980466294785, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 513, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622549891000,\"version\":22,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/entity\",\"izManual\":false,\"ignoreFileName\":\"1\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\\n\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\\n\"},{\"fileName\":\"MapperXML.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper/xml\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/wrapper/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\\n\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/web/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/web\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\\n\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\\n\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service/impl\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\\n\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/api/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-06-01 20:22:50', 1313694379541635074, '2021-06-01 20:22:50', '2021-06-01 20:22:50'); +INSERT INTO `sys_logs` VALUES (1399703121084530689, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 290, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622550170000,\"version\":23,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/entity\",\"izManual\":false,\"ignoreFileName\":\"1\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\\n\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/wrapper/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\\n\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/web/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\\n\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/web\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\\n\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\\n\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service/impl\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\\n\"},{\"fileName\":\"Mapper.xml\",\"izApi\":false,\"type\":\"0\",\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper/xml\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\\n\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/api/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-06-01 20:23:24', 1313694379541635074, '2021-06-01 20:23:24', '2021-06-01 20:23:23'); +INSERT INTO `sys_logs` VALUES (1399703352886935553, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 279, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622550204000,\"version\":24,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/entity\",\"izManual\":false,\"ignoreFileName\":\"1\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\"},{\"fileName\":\"Mapper.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper/xml\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/wrapper/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/web/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/web\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service/impl\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/api/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-06-01 20:24:19', 1313694379541635074, '2021-06-01 20:24:19', '2021-06-01 20:24:19'); +INSERT INTO `sys_logs` VALUES (1399703380711948289, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 53, '[{\"moduleName\":\"generator\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622097226000,\"authorName\":\"周鹏程\",\"encryptData\":\"null\",\"codeTitleBrief\":\"生成模板\",\"codeTitle\":\"生成模板\",\"tableId\":\"1397801878237925377\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1397803193668128769\",\"subModuleName\":\"template\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:24:26', 1313694379541635074, '2021-06-01 20:24:26', '2021-06-01 20:24:25'); +INSERT INTO `sys_logs` VALUES (1399704132415111170, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 239, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622550259000,\"version\":25,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/entity\",\"izManual\":false,\"ignoreFileName\":\"1\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\"},{\"fileName\":\"Mapper.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper/xml\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/wrapper/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/web/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/web\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service/impl\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/api/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-06-01 20:27:25', 1313694379541635074, '2021-06-01 20:27:25', '2021-06-01 20:27:25'); +INSERT INTO `sys_logs` VALUES (1399704155492171778, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/delAll', 'POST', 25, '[\"1399667847319232513,1397828582130040834\"]', NULL, 0, 1313694379541635074, '2021-06-01 20:27:31', 1313694379541635074, '2021-06-01 20:27:31', '2021-06-01 20:27:30'); +INSERT INTO `sys_logs` VALUES (1399704726160785410, '1', '开发工具-开发向导-代码生成器-删除', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/delAll', 'POST', 41, '[\"1398204004021813249,1397801878237925377\"]', NULL, 0, 1313694379541635074, '2021-06-01 20:29:47', 1313694379541635074, '2021-06-01 20:29:47', '2021-06-01 20:29:46'); +INSERT INTO `sys_logs` VALUES (1399705369478938626, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 250, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622550445000,\"version\":26,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/entity\",\"izManual\":false,\"ignoreFileName\":\"1\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\"},{\"fileName\":\"Mapper.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper/xml\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/wrapper/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/web/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/web\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service/impl\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/api/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"12123\",\"izApi\":false,\"type\":\"1\",\"parentId\":\"1398253704724828162\",\"path\":\"111\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"111\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-06-01 20:32:20', 1313694379541635074, '2021-06-01 20:32:20', '2021-06-01 20:32:20'); +INSERT INTO `sys_logs` VALUES (1399705425233821697, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 39, '[{\"moduleName\":\"other\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.gentest\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:32:33', 1313694379541635074, '2021-06-01 20:32:33', '2021-06-01 20:32:33'); +INSERT INTO `sys_logs` VALUES (1399705666469216258, '1', '开发工具-开发向导-代码生成器-删除', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/table/delAll', 'POST', 6, '[\"1358360266068172802\"]', NULL, 0, 1313694379541635074, '2021-06-01 20:33:31', 1313694379541635074, '2021-06-01 20:33:31', '2021-06-01 20:33:30'); +INSERT INTO `sys_logs` VALUES (1399705716482097154, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 30, '[{\"moduleName\":\"gentest\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1608466377000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"汽车信息\",\"codeTitle\":\"汽车信息\",\"tableId\":\"1340630022558056449\",\"packageName\":\"org.opsli.modulars\",\"id\":\"1340631269252005889\",\"subModuleName\":\"carinfo\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:33:43', 1313694379541635074, '2021-06-01 20:33:43', '2021-06-01 20:33:42'); +INSERT INTO `sys_logs` VALUES (1399705819578089474, '1', '开发工具-开发向导-代码模板-修改', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/template/updateAndDetail', 'POST', 238, '[{\"izApi\":false,\"remark\":\"\",\"updateTime\":1622550740000,\"version\":27,\"tableType\":\"0\",\"tempName\":\"Form表单\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1622204636000,\"updateBy\":\"1313694379541635074\",\"detailList\":[{\"fileName\":\"Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/entity\",\"izManual\":false,\"ignoreFileName\":\"1\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).entity;\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.baomidou.mybatisplus.annotation.FieldStrategy;\\nimport com.baomidou.mybatisplus.annotation.TableField;\\nimport com.baomidou.mybatisplus.annotation.TableLogic;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport org.opsli.core.base.entity.BaseEntity;\\n\\n/**\\n * #(data.codeTitle) Entity\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName) extends BaseEntity {\\n\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n #if(!column.izNotNull)\\n @TableField(updateStrategy = FieldStrategy.IGNORED)\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n // ========================================\\n\\n ### 专门处理 删除字段 和 租户字段\\n #for(column : data.model.columnList)\\n #if(column.fieldHumpName == \\\"deleted\\\")\\n /** 逻辑删除字段 */\\n @TableLogic\\n private Integer deleted;\\n #else if(column.fieldHumpName == \\\"tenantId\\\")\\n /** 多租户字段 */\\n private String tenantId;\\n #end\\n\\n #end\\n\\n}\"},{\"fileName\":\"Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).mapper;\\n#end\\n\\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\\nimport org.apache.ibatis.annotations.Mapper;\\nimport org.apache.ibatis.annotations.Param;\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\n#end\\n\\n/**\\n * #(data.codeTitle) Mapper\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Mapper\\npublic interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> {\\n\\n}\"},{\"fileName\":\"Mapper.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/mapper/xml\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n\\n#else\\n\\n#end\\n\\n\\n\"},{\"fileName\":\"Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/wrapper/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).wrapper.#(data.moduleName);\\n#end\\n\\n#for(pkg : data.model.entityPkgList)\\nimport #(pkg);\\n#end\\nimport com.alibaba.excel.annotation.ExcelProperty;\\nimport io.swagger.annotations.ApiModelProperty;\\nimport lombok.Data;\\nimport lombok.EqualsAndHashCode;\\nimport #(apiPath).base.warpper.ApiWrapper;\\nimport org.opsli.common.annotation.validator.Validator;\\nimport org.opsli.common.annotation.validator.ValidatorLenMax;\\nimport org.opsli.common.annotation.validator.ValidatorLenMin;\\nimport org.opsli.common.enums.ValidatorType;\\nimport org.opsli.plugins.excel.annotation.ExcelInfo;\\nimport com.fasterxml.jackson.annotation.JsonFormat;\\nimport org.springframework.format.annotation.DateTimeFormat;\\n\\n/**\\n* #(data.codeTitle) Model\\n*\\n* @author #(data.authorName)\\n* @date #(currTime)\\n*/\\n@Data\\n@EqualsAndHashCode(callSuper = false)\\npublic class #(data.model.tableHumpName)Model extends ApiWrapper {\\n\\n #for(column : data.model.columnList)\\n ### 不等于 删除字段 和 不等于 租户字段放入上边\\n #if(column.fieldHumpName != \\\"deleted\\\" && column.fieldHumpName != \\\"tenantId\\\")\\n /** #(column.fieldComments) */\\n @ApiModelProperty(value = \\\"#(column.fieldComments)\\\")\\n @ExcelProperty(value = \\\"#(column.fieldComments)\\\", order = #(column.sort))\\n #if(column.dictTypeCode != null && column.dictTypeCode != \\\"\\\")\\n @ExcelInfo( dictType = \\\"#(column.dictTypeCode)\\\" )\\n #else\\n @ExcelInfo\\n #end\\n #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0)\\n @Validator({\\n #for(typeAndComma : column.validateTypeAndCommaList)\\n ValidatorType.#(typeAndComma)\\n #end\\n })\\n #end\\n #if(column.fieldLength != null && column.fieldLength > 0)\\n #if(column.fieldPrecision != null && column.fieldPrecision > 0)\\n @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision))\\n #else\\n @ValidatorLenMax(#(column.fieldLength))\\n #end\\n #end\\n ### 日期处理\\n #if(column.javaType == \\\"Date\\\")\\n #if(column.showType == \\\"4\\\")\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd\\\")\\n #else\\n @JsonFormat(timezone = \\\"GMT+8\\\", pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n @DateTimeFormat(pattern = \\\"yyyy-MM-dd HH:mm:ss\\\")\\n #end\\n #end\\n private #(column.javaType) #(column.fieldHumpName);\\n\\n #end\\n #end\\n\\n\\n}\"},{\"fileName\":\"RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"org/opsli/api/web/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName);\\n#else\\npackage #(apiPath).web.#(data.moduleName);\\n#end\\n\\nimport #(apiPath).base.result.ResultVo;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestParam;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Api\\n *\\n * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping\\n * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起\\n *\\n * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface #(data.model.tableHumpName)RestApi {\\n\\n /** 标题 */\\n String TITLE = \\\"#(data.codeTitle)\\\";\\n /** 子标题 */\\n String SUB_TITLE = \\\"#(data.codeTitleBrief)\\\";\\n\\n /**\\n * #(data.codeTitle) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultVo findPage(\\n @RequestParam(name = \\\"pageNo\\\", defaultValue = \\\"1\\\") Integer pageNo,\\n @RequestParam(name = \\\"pageSize\\\", defaultValue = \\\"10\\\") Integer pageSize,\\n HttpServletRequest request\\n );\\n\\n /**\\n * #(data.codeTitle) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultVo update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultVo del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultVo delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @GetMapping(\\\"/exportExcel\\\")\\n void exportExcel(HttpServletRequest request, HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultVo importExcel(MultipartHttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 下载导入模版\\n * @param response response\\n */\\n @GetMapping(\\\"/importExcel/template\\\")\\n void importTemplate(HttpServletResponse response);\\n\\n}\"},{\"fileName\":\"RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/web\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).web;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).web;\\n#end\\n\\nimport cn.hutool.core.util.ReflectUtil;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport org.opsli.common.annotation.RequiresPermissionsCus;\\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\\nimport #(apiPath).base.result.ResultVo;\\nimport org.opsli.common.annotation.ApiRestController;\\nimport org.opsli.common.annotation.EnableLog;\\nimport org.opsli.core.base.controller.BaseRestController;\\nimport org.opsli.core.persistence.Page;\\nimport org.opsli.core.persistence.querybuilder.QueryBuilder;\\nimport org.opsli.core.persistence.querybuilder.WebQueryBuilder;\\nimport org.springframework.web.multipart.MultipartHttpServletRequest;\\nimport javax.servlet.http.HttpServletRequest;\\nimport javax.servlet.http.HttpServletResponse;\\nimport java.lang.reflect.Method;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)RestApi;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi;\\n#end\\n\\n/**\\n * #(data.codeTitle) Controller\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Api(tags = #(data.model.tableHumpName)RestApi.TITLE)\\n@Slf4j\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n@ApiRestController(\\\"/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/#(data.moduleName)\\\")\\n#end\\npublic class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service>\\n implements #(data.model.tableHumpName)RestApi {\\n\\n\\n /**\\n * #(data.codeTitleBrief) 查一条\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) {\\n // 如果系统内部调用 则直接查数据库\\n if(model != null && model.getIzApi() != null && model.getIzApi()){\\n model = IService.get(model);\\n }\\n return ResultVo.success(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_select\\\")\\n #end\\n @Override\\n public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize);\\n page.setQueryWrapper(queryBuilder.build());\\n page = IService.findPage(page);\\n\\n return ResultVo.success(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_insert\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultVo.success(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultVo.success(\\\"修改#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) 删除\\n * @param id ID\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"删除#(data.codeTitleBrief)数据\\\", notes = \\\"删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo del(String id){\\n IService.delete(id);\\n return ResultVo.success(\\\"删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 批量删除\\n * @param ids ID 数组\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"批量删除#(data.codeTitleBrief)数据\\\", notes = \\\"批量删除#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_update\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultVo.success(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n *\\n * 导出时,Token认证和方法权限认证 全部都由自定义完成\\n * 因为在 导出不成功时,需要推送错误信息,\\n * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时\\n * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死\\n * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段\\n * response 推送 javascript代码 alert 提示报错信息\\n *\\n * @param request request\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_export\\\")\\n #end\\n @EnableLog\\n @Override\\n public void exportExcel(HttpServletRequest request, HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"exportExcel\\\");\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap());\\n super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导入\\n * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解\\n * @param request 文件流 request\\n * @return ResultVo\\n */\\n @ApiOperation(value = \\\"导入Excel\\\", notes = \\\"导入Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissions(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @EnableLog\\n @Override\\n public ResultVo importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 下载导入模版\\n * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel模版\\\", notes = \\\"导出Excel模版\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\\\")\\n #else\\n @RequiresPermissionsCus(\\\"#(data.moduleName.toLowerCase())_import\\\")\\n #end\\n @Override\\n public void importTemplate(HttpServletResponse response) {\\n // 当前方法\\n Method method = ReflectUtil.getMethodByName(this.getClass(), \\\"importTemplate\\\");\\n super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method);\\n }\\n\\n}\"},{\"fileName\":\"Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service;\\n#end\\n\\nimport org.opsli.core.base.service.interfaces.CrudServiceInterface;\\n\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\n#end\\n\\n/**\\n * #(data.codeTitle) Service\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\npublic interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> {\\n\\n}\"},{\"fileName\":\"ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"${packageName}/${moduleName}/${subModuleName}/service/impl\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\npackage #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.impl;\\n#else\\npackage #(data.packageName+\\\".\\\"+data.moduleName).service.impl;\\n#end\\n\\n\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.stereotype.Service;\\nimport org.springframework.transaction.annotation.Transactional;\\nimport org.opsli.core.base.service.impl.CrudServiceImpl;\\n\\n#if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName+\\\".\\\"+data.subModuleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName+\\\".\\\"+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper;\\n#else\\nimport #(data.packageName+\\\".\\\"+data.moduleName).entity.#(data.model.tableHumpName);\\nimport #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).service.I#(data.model.tableHumpName)Service;\\nimport #(data.packageName+\\\".\\\"+data.moduleName).mapper.#(data.model.tableHumpName)Mapper;\\n#end\\n\\n\\n/**\\n * #(data.codeTitle) Service Impl\\n *\\n * @author #(data.authorName)\\n * @date #(currTime)\\n */\\n@Service\\npublic class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model>\\n implements I#(data.model.tableHumpName)Service {\\n\\n @Autowired(required = false)\\n private #(data.model.tableHumpName)Mapper mapper;\\n\\n}\"},{\"fileName\":\"Api.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/api/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"import request from \\\"@/utils/request\\\";\\nimport {downloadFileByData} from \\\"@/utils/download\\\";\\n\\nexport function getList(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/findPage\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/findPage\\\",\\n #end\\n method: \\\"get\\\",\\n params: data,\\n });\\n}\\n\\n\\nexport function doInsert(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/insert\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/insert\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doUpdate(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/update\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/update\\\",\\n #end\\n method: \\\"post\\\",\\n data,\\n });\\n}\\n\\nexport function doDelete(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/del\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/del\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\nexport function doDeleteAll(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/delAll\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/delAll\\\",\\n #end\\n method: \\\"post\\\",\\n params: data,\\n });\\n}\\n\\n\\n/**\\n* 导出Excel 目前只支持一层参数传递\\n* @param data\\n* @returns file\\n*/\\nexport function doExportExcel(data) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/exportExcel\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/exportExcel\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n\\n/**\\n* 下载模版\\n* @returns file\\n*/\\nexport function doDownloadTemplate() {\\n let data = {};\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let requestURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel/template\\\";\\n #else\\n let requestURL = \\\"/api/v1/#(data.moduleName)/importExcel/template\\\";\\n #end\\n // 下载文件\\n downloadFileByData(requestURL, data);\\n}\\n\\n/**\\n* 导入Excel\\n* @returns file\\n*/\\nexport function doImportExcel(data) {\\n return request({\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n url: \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/importExcel\\\",\\n #else\\n url: \\\"/api/v1/#(data.moduleName)/importExcel\\\",\\n #end\\n method: \\\"post\\\",\\n // 最长超时时间 3 分钟\\n timeout: 180000,\\n headers: {\\n \\\"Content-Type\\\": \\\"multipart/form-data\\\"\\n },\\n data,\\n });\\n}\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1398253704724828162\"}]', NULL, 0, 1313694379541635074, '2021-06-01 20:34:07', 1313694379541635074, '2021-06-01 20:34:07', '2021-06-01 20:34:07'); +INSERT INTO `sys_logs` VALUES (1399705862481625090, '1', '开发工具-开发向导-代码生成器-生成', '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', '/opsli-boot/api/v1/generator/logs/create', 'GET', 35, '[{\"moduleName\":\"other\",\"izApi\":false,\"templateId\":\"1398253704724828162\",\"tableType\":\"\",\"createBy\":\"1313694379541635074\",\"izManual\":false,\"createTime\":1612948174000,\"authorName\":\"Parker\",\"encryptData\":\"null\",\"codeTitleBrief\":\"非对称加密\",\"codeTitle\":\"非对称加密管理\",\"tableId\":\"1359428685312028674\",\"packageName\":\"org.opsli.modulars.gentest\",\"id\":\"1359429290382323714\",\"subModuleName\":\"crypto\"},{\"request\":{\"request\":{\"request\":{},\"orgRequest\":{}},\"servletContext\":{},\"session\":{\"servletContext\":{},\"session\":{}},\"httpSessions\":false},\"response\":{\"response\":{},\"status\":200},\"context\":{}}]', NULL, 0, 1313694379541635074, '2021-06-01 20:34:18', 1313694379541635074, '2021-06-01 20:34:18', '2021-06-01 20:34:17'); -- ---------------------------- -- Table structure for sys_menu @@ -6181,6 +6352,7 @@ INSERT INTO `sys_menu` VALUES (1397807399414226945, 1397807399338729473, '修改 INSERT INTO `sys_menu` VALUES (1397807399439392770, 1397807399338729473, '删除', 'generator_template_delete', NULL, '2', NULL, NULL, NULL, 4, '0', '0', '0', 0, 1, '2021-05-27 14:50:29', 1, '2021-05-27 14:50:29', '2021-05-27 14:50:28'); INSERT INTO `sys_menu` VALUES (1397807399456169985, 1397807399338729473, '导入', 'generator_template_import', NULL, '2', NULL, NULL, NULL, 5, '0', '0', '0', 0, 1, '2021-05-27 14:50:29', 1, '2021-05-27 14:50:29', '2021-05-27 14:50:28'); INSERT INTO `sys_menu` VALUES (1397807399481335810, 1397807399338729473, '导出', 'generator_template_export', NULL, '2', NULL, NULL, NULL, 6, '0', '0', '0', 0, 1, '2021-05-27 14:50:29', 1, '2021-05-27 14:50:29', '2021-05-27 14:50:28'); +INSERT INTO `sys_menu` VALUES (1399667141430452225, 1397807399338729473, '复制', 'generator_template_copy', NULL, '2', NULL, NULL, NULL, 7, '0', '0', '0', 0, 1, '2021-06-01 18:00:26', 1, '2021-06-01 18:00:26', '2021-06-01 18:00:25'); -- ---------------------------- -- Table structure for sys_options @@ -6322,134 +6494,144 @@ CREATE TABLE `sys_role_menu_ref` ( -- ---------------------------- -- Records of sys_role_menu_ref -- ---------------------------- -INSERT INTO `sys_role_menu_ref` VALUES (1387734139397865475, 1, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214658805765, 1, 2); INSERT INTO `sys_role_menu_ref` VALUES (1312770352622878721, 1, 1312770323526991874); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139397865476, 3, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139288813573, 4, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214658805766, 3, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588045, 4, 2); INSERT INTO `sys_role_menu_ref` VALUES (1312770352614490113, 4, 1312770323526991874); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139305590791, 1312756531833356289, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139280424962, 1313789204920131585, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139280424963, 1313789308506857474, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139280424964, 1313789400169177089, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139280424965, 1313789529840279554, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139280424961, 1313806847370620930, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139280424966, 1313864645827678210, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139288813569, 1313864777918894082, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139288813574, 1313867061172195330, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139288813575, 1313867122731995137, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139288813576, 1313867360502894594, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139297202178, 1313867409949544450, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139305590792, 1313867556498526209, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139313979394, 1313867617949274113, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139313979395, 1313867682814185474, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139313979396, 1313867732508299265, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139297202179, 1313885644824522754, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139242676226, 1314066547072872450, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588062, 1312756531833356289, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588036, 1313789204920131585, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588037, 1313789308506857474, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588038, 1313789400169177089, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588039, 1313789529840279554, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588035, 1313806847370620930, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588040, 1313864645827678210, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588041, 1313864777918894082, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588046, 1313867061172195330, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588047, 1313867122731995137, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588048, 1313867360502894594, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588049, 1313867409949544450, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588063, 1313867556498526209, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588065, 1313867617949274113, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588066, 1313867682814185474, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588067, 1313867732508299265, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588050, 1313885644824522754, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588033, 1314066547072872450, 2); INSERT INTO `sys_role_menu_ref` VALUES (1315218883463905282, 1314066547072872450, 1313146842146213890); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139272036354, 1314066863436640258, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588034, 1314066863436640258, 2); INSERT INTO `sys_role_menu_ref` VALUES (1315218883476488194, 1314066863436640258, 1313146842146213890); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139355922435, 1314068325453574145, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139364311043, 1314071137365307394, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139364311044, 1314074765178187777, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139364311045, 1314075128635600897, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139364311046, 1314075267769053186, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139364311047, 1314075542684708865, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139364311048, 1314075764852797442, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139372699650, 1314075970382082050, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139372699651, 1314076169481498625, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139372699652, 1314076280542474242, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139372699653, 1314076678317682689, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139372699654, 1314077008057085954, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139372699655, 1314077108560998402, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139372699656, 1314077229235318786, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139372699657, 1314077399507283970, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139372699658, 1314077518340304897, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139372699659, 1314077631905280001, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139381088258, 1314077729003417602, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139381088259, 1314120834868060162, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139381088260, 1314121004749955073, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139381088261, 1314121200103858178, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139381088262, 1314121675192672257, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139381088263, 1314121808793837570, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139381088264, 1314121928784486402, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139381088265, 1314122020136427521, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139389476865, 1314122123047870466, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139381088266, 1314122353273217025, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139389476866, 1314122457908518914, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139389476867, 1314122556776652802, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139389476868, 1314122628184678401, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139389476869, 1314122717041008641, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139389476870, 1314123071354839041, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139389476871, 1314123272790482945, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139389476872, 1314123690283114498, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139389476873, 1314123894637993985, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139389476874, 1314123990633029633, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139397865474, 1314124102365093890, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139347533829, 1314610817013919745, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139347533832, 1314616518671085570, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139347533833, 1314782679522099201, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139347533834, 1314782733087555586, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139364311042, 1314786106243301378, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139355922434, 1314799744349913090, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139305590793, 1314884045724717057, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139305590785, 1315201380721446914, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139305590786, 1315201734892670977, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139305590787, 1315201809668722690, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139305590788, 1315201864219840513, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139305590789, 1315201925477650433, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139322368008, 1327085543511293954, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139322368009, 1327085856930660353, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139322368010, 1327086205548625921, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139330756609, 1327086298750255105, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139330756610, 1327086378794352642, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139330756611, 1327086433609711617, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139355922436, 1327893773049262082, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139355922437, 1327894701135491073, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139355922438, 1327894767283859457, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139355922439, 1327894837093855234, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139355922440, 1327894965179510785, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139355922441, 1327895061598171137, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139355922442, 1327903778221699074, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139364311041, 1329374800267452417, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139330756614, 1330365141900591105, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139330756615, 1330365525440331778, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139339145218, 1330365570587820033, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139339145219, 1330365615181660162, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139339145220, 1330365717015166977, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139297202180, 1332662450423635969, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139297202181, 1332662689314414594, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139297202182, 1332662758860169217, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139297202183, 1332662809711910913, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139297202184, 1332662858294534146, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139313979402, 1335439751687208961, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139322368003, 1335439904372457474, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139322368002, 1335440004809261058, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139322368004, 1335440081128816642, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139322368005, 1335440153140822017, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139288813570, 1335619974709936130, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139339145221, 1337719928086458369, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139339145222, 1337720128930705409, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139330756612, 1337796232345407489, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139330756613, 1337796311940714498, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139339145223, 1340626549594677250, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139339145224, 1340626612895113217, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139339145225, 1340626666078887937, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139339145226, 1340626895356321793, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139347533826, 1340626939119689729, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139347533827, 1340626988251766786, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139347533828, 1340627032942075906, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139347533830, 1351012936860155906, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139347533831, 1351013587816136705, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139322368006, 1360233188433977345, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139322368007, 1360233383397810177, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139288813571, 1370051609388388353, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139288813572, 1370404146704654337, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139305590790, 1380173787882696705, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139313979397, 1387633500164599809, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139313979398, 1387633799226863618, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139313979399, 1387633960401383426, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139313979400, 1387634089447534594, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1387734139313979401, 1387634157474951169, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696923, 1314068325453574145, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696943, 1314071137365307394, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696944, 1314074765178187777, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696945, 1314075128635600897, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696946, 1314075267769053186, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696947, 1314075542684708865, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696948, 1314075764852797442, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696949, 1314075970382082050, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696950, 1314076169481498625, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696951, 1314076280542474242, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696952, 1314076678317682689, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696953, 1314077008057085954, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696954, 1314077108560998402, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696955, 1314077229235318786, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696956, 1314077399507283970, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696957, 1314077518340304897, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696958, 1314077631905280001, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696959, 1314077729003417602, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696960, 1314120834868060162, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696961, 1314121004749955073, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696962, 1314121200103858178, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696963, 1314121675192672257, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696964, 1314121808793837570, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696965, 1314121928784486402, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696966, 1314122020136427521, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696968, 1314122123047870466, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696967, 1314122353273217025, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696969, 1314122457908518914, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696970, 1314122556776652802, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696971, 1314122628184678401, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696972, 1314122717041008641, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696973, 1314123071354839041, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696974, 1314123272790482945, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214658805761, 1314123690283114498, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214658805762, 1314123894637993985, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214658805763, 1314123990633029633, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214658805764, 1314124102365093890, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696916, 1314610817013919745, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696919, 1314616518671085570, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696920, 1314782679522099201, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696921, 1314782733087555586, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696942, 1314786106243301378, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696922, 1314799744349913090, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588064, 1314884045724717057, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588056, 1315201380721446914, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588057, 1315201734892670977, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588058, 1315201809668722690, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588059, 1315201864219840513, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588060, 1315201925477650433, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588080, 1327085543511293954, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588081, 1327085856930660353, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588082, 1327086205548625921, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696897, 1327086298750255105, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696898, 1327086378794352642, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696899, 1327086433609711617, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696925, 1327893773049262082, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696926, 1327894701135491073, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696927, 1327894767283859457, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696928, 1327894837093855234, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696929, 1327894965179510785, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696932, 1327895061598171137, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696930, 1327903778221699074, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696931, 1329374800267452417, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696902, 1330365141900591105, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696903, 1330365525440331778, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696904, 1330365570587820033, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696905, 1330365615181660162, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696906, 1330365717015166977, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588051, 1332662450423635969, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588052, 1332662689314414594, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588053, 1332662758860169217, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588054, 1332662809711910913, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588055, 1332662858294534146, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588073, 1335439751687208961, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588075, 1335439904372457474, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588074, 1335440004809261058, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588076, 1335440081128816642, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588077, 1335440153140822017, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588042, 1335619974709936130, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696907, 1337719928086458369, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696908, 1337720128930705409, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696900, 1337796232345407489, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696901, 1337796311940714498, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696909, 1340626549594677250, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696910, 1340626612895113217, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696911, 1340626666078887937, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696912, 1340626895356321793, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696913, 1340626939119689729, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696914, 1340626988251766786, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696915, 1340627032942075906, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696917, 1351012936860155906, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696918, 1351013587816136705, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588078, 1360233188433977345, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588079, 1360233383397810177, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588043, 1370051609388388353, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588044, 1370404146704654337, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588061, 1380173787882696705, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588068, 1387633500164599809, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588069, 1387633799226863618, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588070, 1387633960401383426, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588071, 1387634089447534594, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214524588072, 1387634157474951169, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696933, 1389555212654223361, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696924, 1397807288445526017, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696934, 1397807399338729473, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696935, 1397807399363895298, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696936, 1397807399389061121, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696937, 1397807399414226945, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696938, 1397807399439392770, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696939, 1397807399456169985, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696940, 1397807399481335810, 2); +INSERT INTO `sys_role_menu_ref` VALUES (1399667214591696941, 1399667141430452225, 2); -- ---------------------------- -- Table structure for sys_tenant @@ -31404,7 +31586,7 @@ INSERT INTO `test_entity` VALUES (1365267350906908674, '测试名称1578189287', INSERT INTO `test_entity` VALUES (1365267350969823233, '测试名称-614538309', '0', '测试备注-1148286614', 1, 1313694379541635074, '2021-02-26 19:47:57', 1313694379541635074, '2021-02-26 19:47:57', 0, '2021-04-08 23:52:08'); INSERT INTO `test_entity` VALUES (1365267351020154881, '测试名称-1195120472', '0', '测试备注-2044902786', 1, 1313694379541635074, '2021-02-26 19:47:57', 1313694379541635074, '2021-02-26 19:47:57', 0, '2021-04-08 23:52:08'); INSERT INTO `test_entity` VALUES (1365267351066292226, '测试名称-1336522563', '2', '测试备注1465469698', 1, 1313694379541635074, '2021-02-26 19:47:57', 1313694379541635074, '2021-02-26 19:47:57', 0, '2021-04-08 23:52:08'); -INSERT INTO `test_entity` VALUES (1365267351108235265, '测试名称1807858151', '4', '测试备注2098171765', 1, 1313694379541635074, '2021-02-26 19:47:57', 1313694379541635074, '2021-02-26 19:47:57', 0, '2021-04-08 23:52:08'); +INSERT INTO `test_entity` VALUES (1365267351108235265, '测试名称1807858151', '4', '测试备注2098171765', 1, 1313694379541635074, '2021-02-26 19:47:57', 1313694379541635074, '2021-05-13 16:27:16', 2, '2021-05-13 16:27:15'); INSERT INTO `test_entity` VALUES (1365267351145984001, '测试名称-625892829', '6', '测试备注-474649170', 1, 1313694379541635074, '2021-02-26 19:47:57', 1313694379541635074, '2021-02-26 19:47:57', 0, '2021-04-08 23:52:08'); INSERT INTO `test_entity` VALUES (1365267351196315649, '测试名称-9640699', '6', '测试备注-175900622', 1, 1313694379541635074, '2021-02-26 19:47:57', 1313694379541635074, '2021-02-26 19:47:57', 0, '2021-04-08 23:52:08'); INSERT INTO `test_entity` VALUES (1365267351246647297, '测试名称-80130324', '0', '测试备注1529625369', 1, 1313694379541635074, '2021-02-26 19:47:57', 1313694379541635074, '2021-02-26 19:47:57', 0, '2021-04-08 23:52:08'); diff --git a/opsli-base-support/opsli-common/src/main/java/org/opsli/common/utils/ZipUtils.java b/opsli-base-support/opsli-common/src/main/java/org/opsli/common/utils/ZipUtils.java index 3e5d6d56..4f650b98 100644 --- a/opsli-base-support/opsli-common/src/main/java/org/opsli/common/utils/ZipUtils.java +++ b/opsli-base-support/opsli-common/src/main/java/org/opsli/common/utils/ZipUtils.java @@ -15,6 +15,8 @@ */ package org.opsli.common.utils; +import lombok.extern.slf4j.Slf4j; + import java.io.*; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -30,6 +32,7 @@ import java.util.zip.ZipOutputStream; * @author Parker * @date 2020-01-07 */ +@Slf4j public class ZipUtils { /** * 缓存区大小 diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/service/impl/CrudServiceImpl.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/service/impl/CrudServiceImpl.java index f5cf68b0..e6dd1a33 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/service/impl/CrudServiceImpl.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/service/impl/CrudServiceImpl.java @@ -101,6 +101,7 @@ public abstract class CrudServiceImpl, T extends BaseEnt model.setUpdateTime(null); } + model.setId(null); T entity = transformM2T(model); boolean ret = super.save(entity); if(ret){ diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/logs/wrapper/GenBuilderModel.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/logs/wrapper/GenBuilderModel.java index 2b444109..7766ccd0 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/logs/wrapper/GenBuilderModel.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/logs/wrapper/GenBuilderModel.java @@ -33,9 +33,6 @@ public class GenBuilderModel extends ApiWrapper { /** 归属表ID */ private String tableId; - /** 表类型 */ - private String tableType; - /** 包名 */ private String packageName; diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/api/GenTemplateRestApi.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/api/GenTemplateRestApi.java index 42966084..76e8647d 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/api/GenTemplateRestApi.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/api/GenTemplateRestApi.java @@ -19,6 +19,7 @@ package org.opsli.modulars.generator.template.api; import org.opsli.api.base.result.ResultVo; import org.opsli.modulars.generator.template.wrapper.GenTemplateAndDetailModel; +import org.opsli.modulars.generator.template.wrapper.GenTemplateCopyModel; import org.opsli.modulars.generator.template.wrapper.GenTemplateModel; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -102,6 +103,14 @@ public interface GenTemplateRestApi { @PostMapping("/updateAndDetail") ResultVo updateAndDetail(@RequestBody GenTemplateAndDetailModel model); + /** + * 复制 代码模板 + * @param model 模型 + * @return ResultVo + */ + @PostMapping("/copy") + ResultVo copy(@RequestBody GenTemplateCopyModel model); + /** * 代码模板 删除 * @param id ID diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/entity/GenTemplateDetail.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/entity/GenTemplateDetail.java index 53354db7..b0198b86 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/entity/GenTemplateDetail.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/entity/GenTemplateDetail.java @@ -55,6 +55,9 @@ public class GenTemplateDetail extends BaseEntity { /** 文件内容 */ private String fileContent; + /** 是否忽略文件名 */ + private String ignoreFileName; + // ======================================== diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/service/IGenTemplateService.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/service/IGenTemplateService.java index f204b49a..750f951b 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/service/IGenTemplateService.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/service/IGenTemplateService.java @@ -23,6 +23,7 @@ import org.opsli.core.base.service.interfaces.CrudServiceInterface; import org.opsli.modulars.generator.template.entity.GenTemplate; import org.opsli.modulars.generator.template.wrapper.GenTemplateAndDetailModel; +import org.opsli.modulars.generator.template.wrapper.GenTemplateCopyModel; import org.opsli.modulars.generator.template.wrapper.GenTemplateModel; @@ -48,5 +49,10 @@ public interface IGenTemplateService extends CrudServiceInterface 0){ + // 重复 + throw new GeneratorException(GeneratorMsg.EXCEPTION_TEMPLATE_NAME_REPEAT); + } + GenTemplateModel insertModel = super.insert( WrapperUtil.transformInstance(model, GenTemplateModel.class)); @@ -90,6 +101,13 @@ public class GenTemplateServiceImpl extends CrudServiceImpl 0){ + // 重复 + throw new GeneratorException(GeneratorMsg.EXCEPTION_TEMPLATE_NAME_REPEAT); + } + GenTemplateModel updateModel = super.update( WrapperUtil.transformInstance(model, GenTemplateModel.class)); @@ -115,6 +133,50 @@ public class GenTemplateServiceImpl extends CrudServiceImpl 0){ + // 重复 + throw new GeneratorException(GeneratorMsg.EXCEPTION_TEMPLATE_NAME_REPEAT); + } + + if(genTemplateModel == null){ + // 暂无该模板 + throw new GeneratorException(GeneratorMsg.EXCEPTION_TEMPLATE_COPY_NULL); + } + + // 设置模板名称 + genTemplateModel.setTempName(model.getTempName()); + + // 获得子类模板 + List genTemplateDetailModelList = + iGenTemplateDetailService.findListByParent(genTemplateModel.getId()); + + GenTemplateModel insertModel = super.insert( + WrapperUtil.transformInstance(genTemplateModel, GenTemplateModel.class)); + + if(insertModel != null){ + // 保存模型明细 + for (GenTemplateDetailModel templateDetailModel : genTemplateDetailModelList) { + templateDetailModel.setParentId(insertModel.getId()); + iGenTemplateDetailService.insert(templateDetailModel); + } + } + + return insertModel; + } + @Override @Transactional(rollbackFor = Exception.class) public boolean delete(String id) { @@ -125,7 +187,7 @@ public class GenTemplateServiceImpl extends CrudServiceImpl wrapper = new QueryWrapper<>(); + + // code 唯一 + wrapper.eq("temp_name", model.getTempName()); + + // 重复校验排除自身 + if(StringUtils.isNotEmpty(model.getId())){ + wrapper.notIn(MyBatisConstants.FIELD_ID, model.getId()); + } + + return super.count(wrapper); + } // ==================== diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateRestController.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateRestController.java index 3e9100a4..24e89a2f 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateRestController.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/web/GenTemplateRestController.java @@ -33,6 +33,7 @@ import org.opsli.core.persistence.querybuilder.QueryBuilder; import org.opsli.core.persistence.querybuilder.WebQueryBuilder; import org.opsli.modulars.generator.template.api.GenTemplateRestApi; import org.opsli.modulars.generator.template.wrapper.GenTemplateAndDetailModel; +import org.opsli.modulars.generator.template.wrapper.GenTemplateCopyModel; import org.opsli.modulars.generator.template.wrapper.GenTemplateModel; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; @@ -105,6 +106,9 @@ public class GenTemplateRestController extends BaseRestController insert(GenTemplateModel model) { + // 演示模式 不允许操作 + super.demoError(); + // 调用新增方法 IService.insert(model); return ResultVo.success("新增代码模板成功"); @@ -120,6 +124,9 @@ public class GenTemplateRestController extends BaseRestController insertAndDetail(GenTemplateAndDetailModel model) { + // 演示模式 不允许操作 + super.demoError(); + // 调用新增方法 IService.insertAndDetail(model); return ResultVo.success("新增代码模板成功"); @@ -135,6 +142,9 @@ public class GenTemplateRestController extends BaseRestController update(GenTemplateModel model) { + // 演示模式 不允许操作 + super.demoError(); + // 调用修改方法 IService.update(model); return ResultVo.success("修改代码模板成功"); @@ -150,11 +160,29 @@ public class GenTemplateRestController extends BaseRestController updateAndDetail(GenTemplateAndDetailModel model) { + // 演示模式 不允许操作 + super.demoError(); + // 调用修改方法 IService.updateAndDetail(model); return ResultVo.success("修改代码模板成功"); } + /** + * 复制 代码模板 + * @param model 模型 + * @return ResultVo + */ + @ApiOperation(value = "新增代码模板数据", notes = "新增代码模板数据") + @RequiresPermissions("generator_template_copy") + @EnableLog + @Override + public ResultVo copy(GenTemplateCopyModel model) { + // 调用复制方法 + IService.copy(model); + return ResultVo.success("复制代码模板成功"); + } + /** * 代码模板 删除 * @param id ID @@ -165,6 +193,9 @@ public class GenTemplateRestController extends BaseRestController del(String id){ + // 演示模式 不允许操作 + super.demoError(); + IService.delete(id); return ResultVo.success("删除代码模板成功"); } @@ -179,6 +210,9 @@ public class GenTemplateRestController extends BaseRestController delAll(String ids){ + // 演示模式 不允许操作 + super.demoError(); + String[] idArray = Convert.toStrArray(ids); IService.deleteAll(idArray); return ResultVo.success("批量删除代码模板成功"); diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/wrapper/GenTemplateCopyModel.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/wrapper/GenTemplateCopyModel.java new file mode 100644 index 00000000..198499a7 --- /dev/null +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/wrapper/GenTemplateCopyModel.java @@ -0,0 +1,53 @@ +/** + * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package org.opsli.modulars.generator.template.wrapper; + + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.opsli.api.base.warpper.ApiWrapper; +import org.opsli.common.annotation.validator.Validator; +import org.opsli.common.annotation.validator.ValidatorLenMax; +import org.opsli.common.enums.ValidatorType; +import org.opsli.plugins.excel.annotation.ExcelInfo; + +/** +* 代码模板 Model +* +* @author 周鹏程 +* @date 2021-05-27 14:33:49 +*/ +@Data +@EqualsAndHashCode(callSuper = false) +public class GenTemplateCopyModel extends ApiWrapper { + + + /** 模板名称 */ + @ApiModelProperty(value = "模板名称") + @ExcelProperty(value = "模板名称", order = 1) + @ExcelInfo + @Validator({ + ValidatorType.IS_GENERAL_WITH_CHINESE, + ValidatorType.IS_NOT_NULL + }) + @ValidatorLenMax(100) + private String tempName; + + +} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/wrapper/GenTemplateDetailModel.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/wrapper/GenTemplateDetailModel.java index 5d053b74..90031c4f 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/wrapper/GenTemplateDetailModel.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/modulars/generator/template/wrapper/GenTemplateDetailModel.java @@ -96,4 +96,14 @@ public class GenTemplateDetailModel extends ApiWrapper { @ValidatorLenMax(20000) private String fileContent; + /** 是否忽略文件名 */ + @ApiModelProperty(value = "文件名") + @ExcelProperty(value = "文件名", order = 6) + @ExcelInfo + @Validator({ + ValidatorType.IS_NOT_NULL + }) + @ValidatorLenMax(1) + private String ignoreFileName; + } diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/enums/CodeType.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/enums/CodeType.java new file mode 100644 index 00000000..5c5fc3ca --- /dev/null +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/enums/CodeType.java @@ -0,0 +1,58 @@ +/** + * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package org.opsli.plugins.generator.enums; + +/** + * 代码类型 + * + * @author Mybatis-plus + * @date 2020-09-22 11:17 + */ +public enum CodeType { + + /** 代码类型 */ + BACKEND("0", "后端"), + FRONTEND("1", "前端"), + ; + + private final String type; + private final String desc; + + public static CodeType getCodeType(String type) { + CodeType[] var = values(); + for (CodeType codeType : var) { + if (codeType.type.equalsIgnoreCase(type)) { + return codeType; + } + } + return BACKEND; + } + + public String getType() { + return this.type; + } + + public String getDesc() { + return this.desc; + } + + // ================ + + CodeType(final String type, final String desc) { + this.type = type; + this.desc = desc; + } +} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/factory/GeneratorFactory.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/factory/GeneratorFactory.java new file mode 100644 index 00000000..0cbf172d --- /dev/null +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/factory/GeneratorFactory.java @@ -0,0 +1,34 @@ +package org.opsli.plugins.generator.factory; + + +/** + * 代码生成器工厂 + * + * @author Parker + * @date 2021年6月1日19:10:36 + */ +public final class GeneratorFactory { + + public static String getJavaHeadAnnotation(){ + return "/**\n"+ + " * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com\n"+ + " *

\n"+ + " * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n"+ + " * use this file except in compliance with the License. You may obtain a copy of\n"+ + " * the License at\n"+ + " *

\n"+ + " * http://www.apache.org/licenses/LICENSE-2.0\n"+ + " *

\n"+ + " * Unless required by applicable law or agreed to in writing, software\n"+ + " * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n"+ + " * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n"+ + " * License for the specific language governing permissions and limitations under\n"+ + " * the License.\n"+ + " */\n"; + } + + + // ======================== + + public GeneratorFactory(){} +} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/msg/GeneratorMsg.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/msg/GeneratorMsg.java index d129ff33..e6d7202c 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/msg/GeneratorMsg.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/msg/GeneratorMsg.java @@ -58,6 +58,13 @@ public enum GeneratorMsg implements BaseMsg { EXCEPTION_CREATE_MENU_CODE_NULL(50143,"生成菜单失败,请先生成代码"), EXCEPTION_CREATE_MENU_PARENT_NULL(50144,"上级菜单不可为空"), + /** + * 模板 + */ + EXCEPTION_TEMPLATE_NAME_REPEAT(50150,"模板名称重复"), + EXCEPTION_TEMPLATE_COPY_NULL(50151,"暂无该模板"), + + /** * 其他 */ diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/CodeBuilder.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/CodeBuilder.java index e84fe48b..e7cdb705 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/CodeBuilder.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/CodeBuilder.java @@ -17,24 +17,28 @@ package org.opsli.plugins.generator.strategy.create; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; -import com.baomidou.mybatisplus.generator.AutoGenerator; -import com.baomidou.mybatisplus.generator.config.GlobalConfig; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.jfinal.kit.Kv; import lombok.extern.slf4j.Slf4j; import org.opsli.api.ApiFlag; -import org.opsli.common.enums.ValidatorType; +import org.opsli.common.enums.DictType; import org.opsli.common.utils.Props; import org.opsli.common.utils.ZipUtils; -import org.opsli.plugins.generator.strategy.create.backend.JavaCodeBuilder; -import org.opsli.plugins.generator.strategy.create.foreend.VueCodeBuilder; -import org.opsli.plugins.generator.strategy.create.readme.ReadMeBuilder; -import org.opsli.plugins.generator.utils.GeneratorHandleUtil; import org.opsli.modulars.generator.logs.wrapper.GenBuilderModel; +import org.opsli.modulars.generator.template.wrapper.GenTemplateDetailModel; +import org.opsli.plugins.generator.enums.CodeType; +import org.opsli.plugins.generator.factory.GeneratorFactory; +import org.opsli.plugins.generator.utils.EnjoyUtil; +import org.opsli.plugins.generator.utils.GenTemplateUtil; +import org.opsli.plugins.generator.utils.GeneratorHandleUtil; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -50,16 +54,21 @@ public enum CodeBuilder { /** 实例对象 */ INSTANCE; - /** 排除字段 */ - private static final List EXCLUDE_FIELDS; - - public static final String API_PATH; + /** Java文件后缀 */ + public static final String JAVA_SUFFIX = "java"; + /** 文件名前缀 */ public static final String FILE_NAME = "OPSLI-CodeCreate"; + /** 文件夹前缀 */ + private static final String FOLDER_PREFIX = "/"; + /** 文件夹点前缀 */ + private static final String POINT_PREFIX = "."; + /** 基础路径前缀 */ public static final String BASE_PATH = "/代码生成-"; - public static final String BACKEND_PATH = "/后端"; - public static final String FOREEND_PATH = "/前端"; - + /** 排除字段 */ + private static final List EXCLUDE_FIELDS; + /** API 地址 */ + public static final String API_PATH; static { Props props = new Props("generator.yaml"); EXCLUDE_FIELDS = props.getList("opsli.exclude-fields"); @@ -74,58 +83,154 @@ public enum CodeBuilder { return; } - String dataStr = DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss"); + String dateStr = DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss"); // 处理表数据 GenBuilderModel genBuilderModel = GeneratorHandleUtil.handleData(builderModel, EXCLUDE_FIELDS); + if(genBuilderModel == null){ + return; + } + - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - OutputStream out = this.getOutputStream(response, dataStr); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + OutputStream out = this.getOutputStream(response, dateStr); try { if(out != null){ - List> fileList = new ArrayList<>(); - // 处理后端代码 ==================== - // entity - fileList.add(JavaCodeBuilder.INSTANCE.createEntity(genBuilderModel, dataStr)); - // mapper - fileList.add(JavaCodeBuilder.INSTANCE.createMapper(genBuilderModel, dataStr)); - // mapper xml - fileList.add(JavaCodeBuilder.INSTANCE.createMapperXML(genBuilderModel, dataStr)); - // service - fileList.add(JavaCodeBuilder.INSTANCE.createService(genBuilderModel, dataStr)); - // service impl - fileList.add(JavaCodeBuilder.INSTANCE.createServiceImpl(genBuilderModel, dataStr)); - // web - fileList.add(JavaCodeBuilder.INSTANCE.createWeb(genBuilderModel, dataStr)); - // model - fileList.add(JavaCodeBuilder.INSTANCE.createModel(genBuilderModel, dataStr)); - // api - fileList.add(JavaCodeBuilder.INSTANCE.createRestApi(genBuilderModel, dataStr)); - - // 处理前端代码 ==================== - // index - fileList.add(VueCodeBuilder.INSTANCE.createIndex(genBuilderModel, dataStr)); - // edit - fileList.add(VueCodeBuilder.INSTANCE.createEdit(genBuilderModel, dataStr)); - // import - fileList.add(VueCodeBuilder.INSTANCE.createImport(genBuilderModel, dataStr)); - // 前api - fileList.add(VueCodeBuilder.INSTANCE.createApi(genBuilderModel, dataStr)); - - // 处理 ReadMe - fileList.add(ReadMeBuilder.INSTANCE.createReadMe(genBuilderModel, dataStr)); + List templateDetailList = + GenTemplateUtil.getTemplateDetailList(genBuilderModel.getTemplateId()); + + List> fileList = + Lists.newArrayListWithCapacity(templateDetailList.size()); + + // 循环处理代码模板 + for (GenTemplateDetailModel templateDetailModel : templateDetailList) { + fileList.add( + this.createCode(genBuilderModel, templateDetailModel, dateStr) + ); + } // 生成zip文件 - ZipUtils.toZip(fileList, baos); + ZipUtils.toZip(fileList, byteArrayOutputStream); // 输出流文件 - IoUtil.write(out,true, baos.toByteArray()); + IoUtil.write(out,true, byteArrayOutputStream.toByteArray()); } }catch (Exception e){ log.error(e.getMessage(), e); } } + /** + * 生成MapperXML + * @param builderModel Build 模型 + * @param templateModel 模板模型 + * @param dataStr 数据字符串 + * @return Map + */ + private Map createCode(final GenBuilderModel builderModel, + final GenTemplateDetailModel templateModel, final String dataStr){ + if(builderModel == null){ + return MapUtil.empty(); + } + + + // 获得分类名称 + CodeType codeType = CodeType.getCodeType(templateModel.getType()); + String typeName = codeType.getDesc(); + + // 包名 + String packageName = builderModel.getPackageName(); + + // 模块名 + String moduleName = builderModel.getModuleName(); + + // 子模块名 + String subModuleName = builderModel.getSubModuleName(); + + // 基础路径 + String basePath = CodeBuilder.BASE_PATH + dataStr + FOLDER_PREFIX + typeName; + // Path路径 + String path = templateModel.getPath(); + if(StrUtil.isNotEmpty(path)){ + path = StrUtil.replace(path, "${packageName}", packageName); + path = StrUtil.replace(path, "${moduleName}", moduleName); + path = StrUtil.replace(path, "${subModuleName}", subModuleName); + // 处理路径 前后加 [/] + path = this.handlePath(path); + } + + // 代码 + String codeStr = EnjoyUtil.renderByStr(templateModel.getFileContent(), + this.createKv(builderModel) + ); + + // 获得模板文件名称 + String templateFileName = templateModel.getFileName(); + String[] templateFileNameArr = StrUtil.split(templateFileName, "."); + + // 模板文件前缀 + String templateFilePrefix = templateFileNameArr[0]; + // 模板文件后缀 + String templateFileSuffix = templateFileNameArr[templateFileNameArr.length-1]; + + // 判断是否是Java 文件 + if(JAVA_SUFFIX.equals(templateFileNameArr[templateFileNameArr.length-1])){ + codeStr = GeneratorFactory.getJavaHeadAnnotation() + codeStr; + } + + // 生成文件名 + String fileName = builderModel.getModel().getTableHumpName(); + if(DictType.NO_YES_NO.getValue().equals(templateModel.getIgnoreFileName()) || + StrUtil.isEmpty(templateModel.getIgnoreFileName()) + ){ + if(templateFileNameArr.length > 1){ + // 判断是否忽略模板文件名 + fileName += templateFilePrefix; + } + } + fileName += StrUtil.prependIfMissing(templateFileSuffix, POINT_PREFIX); + + Map entityMap = Maps.newHashMapWithExpectedSize(3); + entityMap.put(ZipUtils.FILE_PATH, basePath + path); + entityMap.put(ZipUtils.FILE_NAME, fileName); + entityMap.put(ZipUtils.FILE_DATA, codeStr); + + return entityMap; + } + + /** + * 创建 Kv + * @param builderModel Build 模型 + * @return Kv + */ + private Kv createKv(GenBuilderModel builderModel){ + return Kv.by("data", builderModel) + .set("currTime", DateUtil.now()) + .set("apiPath", API_PATH); + } + + /** + * 处理 Path 路径 + * @param path 路径 + * @return String + */ + protected String handlePath(String path) { + if(StrUtil.isEmpty(path)){ + return path; + } + + // . 转换为 [/] + path = StrUtil.replace(path, POINT_PREFIX, FOLDER_PREFIX); + + // 如果 第一位不是 / 则加 / + path = StrUtil.prependIfMissing(path, FOLDER_PREFIX); + + // 如果最后一位 是 / 则减 / + path = StrUtil.appendIfMissing(path, FOLDER_PREFIX); + + // 去除 [//] + return StrUtil.replace(path, "//", FOLDER_PREFIX); + } /** * 导出文件时为Writer生成OutputStream @@ -141,13 +246,4 @@ public enum CodeBuilder { return null; } - public static void main(String[] args) { - // 代码生成器 - AutoGenerator mpg = new AutoGenerator(); - - // 全局配置 - GlobalConfig gc = new GlobalConfig(); - - } - } diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/backend/JavaCodeBuilder.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/backend/JavaCodeBuilder.java deleted file mode 100644 index c4ddec48..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/backend/JavaCodeBuilder.java +++ /dev/null @@ -1,334 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package org.opsli.plugins.generator.strategy.create.backend; - -import cn.hutool.core.date.DateUtil; -import com.jfinal.kit.Kv; -import org.apache.commons.lang3.StringUtils; -import org.opsli.common.utils.WrapperUtil; -import org.opsli.common.utils.ZipUtils; -import org.opsli.plugins.generator.strategy.create.CodeBuilder; -import org.opsli.plugins.generator.utils.EnjoyUtil; -import org.opsli.modulars.generator.logs.wrapper.GenBuilderModel; - -import java.util.HashMap; -import java.util.Map; - -/** - * Java代码构建器 - * - * @author parker - * @date 2020-09-13 19:36 - */ -public enum JavaCodeBuilder { - - /** 实例对象 */ - INSTANCE; - - /** - * 生成Entity - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createEntity(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - - String codeStr = EnjoyUtil.render("/backend/entity/TemplateEntity.html", - this.createKv(builderModel) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append("entity").append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()) - .append("/").append("entity").append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, - builderModel.getModel().getTableHumpName()+".java"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - /** - * 生成Mapper - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createMapper(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - String codeStr = EnjoyUtil.render("/backend/mapper/TemplateMapper.html", - this.createKv(builderModel) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append("mapper").append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()) - .append("/").append("mapper").append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, - builderModel.getModel().getTableHumpName()+"Mapper.java"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - /** - * 生成MapperXML - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createMapperXML(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - String codeStr = EnjoyUtil.render("/backend/mapper/xml/TemplateMapperXML.html", - this.createKv(builderModel) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append("mapper") - .append("/").append("xml").append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()) - .append("/").append("mapper") - .append("/").append("xml").append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, - builderModel.getModel().getTableHumpName()+"Mapper.xml"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - /** - * 生成Service - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createService(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - String codeStr = EnjoyUtil.render("/backend/service/TemplateService.html", - this.createKv(builderModel) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append("service").append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()) - .append("/").append("service").append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, - "I"+builderModel.getModel().getTableHumpName()+"Service.java"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - - /** - * 生成 Service Impl - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createServiceImpl(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - String codeStr = EnjoyUtil.render("/backend/service/impl/TemplateServiceImpl.html", - this.createKv(builderModel) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append("service") - .append("/").append("impl").append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()) - .append("/").append("service") - .append("/").append("impl").append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, - builderModel.getModel().getTableHumpName()+"ServiceImpl.java"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - /** - * 生成 Web - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createWeb(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - String codeStr = EnjoyUtil.render("/backend/web/TemplateRestController.html", - this.createKv(builderModel) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append("web").append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(builderModel.getPackageName().replaceAll("\\.","/")) - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()) - .append("/").append("web").append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, - builderModel.getModel().getTableHumpName()+"RestController.java"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - - /** - * 生成Model - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createModel(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - - String codeStr = EnjoyUtil.render("/backend/model/TemplateModel.html", - this.createKv(builderModel) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(CodeBuilder.API_PATH.replaceAll("\\.","/")) - .append("/").append("wrapper") - .append("/").append(builderModel.getModuleName()).append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(CodeBuilder.API_PATH.replaceAll("\\.","/")) - .append("/").append("wrapper") - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()).append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, - builderModel.getModel().getTableHumpName()+"Model.java"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - - /** - * 生成RestApi - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createRestApi(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - String codeStr = EnjoyUtil.render("/backend/api/TemplateRestApi.html", - this.createKv(builderModel) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(CodeBuilder.API_PATH.replaceAll("\\.","/")) - .append("/").append("web") - .append("/").append(builderModel.getModuleName()).append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.BACKEND_PATH) - .append("/").append(CodeBuilder.API_PATH.replaceAll("\\.","/")) - .append("/").append("web") - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()).append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, - builderModel.getModel().getTableHumpName()+"RestApi.java"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - /** - * 创建 Kv - * @param builderModel Build 模型 - * @return Kv - */ - private Kv createKv(GenBuilderModel builderModel){ - return Kv.by("data", builderModel) - .set("currTime", DateUtil.now()) - .set("apiPath", CodeBuilder.API_PATH); - } - - -} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/foreend/VueCodeBuilder.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/foreend/VueCodeBuilder.java deleted file mode 100644 index aa9e3645..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/foreend/VueCodeBuilder.java +++ /dev/null @@ -1,201 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package org.opsli.plugins.generator.strategy.create.foreend; - -import cn.hutool.core.date.DateUtil; -import com.jfinal.kit.Kv; -import org.apache.commons.lang3.StringUtils; -import org.opsli.common.utils.Props; -import org.opsli.common.utils.WrapperUtil; -import org.opsli.common.utils.ZipUtils; -import org.opsli.plugins.generator.strategy.create.CodeBuilder; -import org.opsli.plugins.generator.utils.EnjoyUtil; -import org.opsli.modulars.generator.logs.wrapper.GenBuilderModel; - -import java.util.*; - -/** - * Vue代码构建器 - * - * @author parker - * @date 2020-09-13 19:36 - */ -public enum VueCodeBuilder { - - /** 实例对象 */ - INSTANCE; - - /** 验证方法前缀 */ - private static final String VALIDATE_PREFIX = "validate_"; - /** 虚拟根路径 */ - private static final String BASE_API_PATH; - static { - Props props = new Props("application.yaml"); - BASE_API_PATH = props.getStr("server.servlet.api.path.global-prefix","/api/v1"); - } - - /** - * 生成 Index - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createIndex(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - - String codeStr = EnjoyUtil.render("/foreend/index/TemplateIndex.html", - this.createKv(builderModel) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.FOREEND_PATH) - .append("/").append("vue") - .append("/").append("views").append("/").append("modules") - .append("/").append(builderModel.getModuleName()).append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.FOREEND_PATH) - .append("/").append("vue") - .append("/").append("views").append("/").append("modules") - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()).append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, "index.vue"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - - /** - * 生成 Edit - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createEdit(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - - String codeStr = EnjoyUtil.render("/foreend/components/TemplateEdit.html", - this.createKv(builderModel)); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.FOREEND_PATH) - .append("/").append("vue") - .append("/").append("views").append("/").append("modules") - .append("/").append(builderModel.getModuleName()) - .append("/").append("components").append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.FOREEND_PATH) - .append("/").append("vue") - .append("/").append("views").append("/").append("modules") - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()) - .append("/").append("components").append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, builderModel.getModel().getTableHumpName()+"ManagementEdit.vue"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - - /** - * 生成 Import - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createImport(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - - String codeStr = EnjoyUtil.render("/foreend/components/TemplateImport.html", - this.createKv(builderModel) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.FOREEND_PATH) - .append("/").append("vue") - .append("/").append("views").append("/").append("modules") - .append("/").append(builderModel.getModuleName()) - .append("/").append("components").append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.FOREEND_PATH) - .append("/").append("vue") - .append("/").append("views").append("/").append("modules") - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()) - .append("/").append("components").append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, builderModel.getModel().getTableHumpName()+"ManagementImport.vue"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - /** - * 生成 Api - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createApi(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - - String codeStr = EnjoyUtil.render("/foreend/api/TemplateApi.html", - this.createKv(builderModel) - .set("apiPath", BASE_API_PATH) - ); - - StringBuilder path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.FOREEND_PATH) - .append("/").append("vue").append("/").append("api") - .append("/").append(builderModel.getModuleName()).append("/"); - if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ - path = new StringBuilder(); - path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.FOREEND_PATH) - .append("/").append("vue").append("/").append("api") - .append("/").append(builderModel.getModuleName()) - .append("/").append(builderModel.getSubModuleName()).append("/"); - } - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, path.toString()); - entityMap.put(ZipUtils.FILE_NAME, builderModel.getModel().getTableHumpName()+"Management.js"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - /** - * 创建 Kv - * @param builderModel Build 模型 - * @return Kv - */ - private Kv createKv(GenBuilderModel builderModel){ - return Kv.by("data", builderModel) - .set("currTime", DateUtil.now()); - } - - -} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/readme/ReadMeBuilder.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/readme/ReadMeBuilder.java deleted file mode 100644 index ad60c20f..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/strategy/create/readme/ReadMeBuilder.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package org.opsli.plugins.generator.strategy.create.readme; - -import cn.hutool.core.date.DateUtil; -import com.jfinal.kit.Kv; -import org.opsli.common.utils.WrapperUtil; -import org.opsli.common.utils.ZipUtils; -import org.opsli.plugins.generator.strategy.create.CodeBuilder; -import org.opsli.plugins.generator.utils.EnjoyUtil; -import org.opsli.modulars.generator.logs.wrapper.GenBuilderModel; - -import java.util.HashMap; -import java.util.Map; - -/** - * ReadMe 构建器 - * - * @author parker - * @date 2020-09-13 19:36 - */ -public enum ReadMeBuilder { - - /** 实例对象 */ - INSTANCE; - - /** - * 生成 ReadMe - * @param builderModelTmp Build 模型 - * @param dataStr 数据字符串 - * @return Map - */ - public Map createReadMe(GenBuilderModel builderModelTmp, String dataStr){ - GenBuilderModel builderModel = - WrapperUtil.transformInstance(builderModelTmp, GenBuilderModel.class, true); - - String codeStr = EnjoyUtil.render("/readme/TemplateReadMe.html", - this.createKv(builderModel) - ); - - Map entityMap = new HashMap<>(); - entityMap.put(ZipUtils.FILE_PATH, CodeBuilder.BASE_PATH + dataStr + "/"); - entityMap.put(ZipUtils.FILE_NAME, "README.md"); - entityMap.put(ZipUtils.FILE_DATA, codeStr); - return entityMap; - } - - /** - * 创建 Kv - * @param builderModel Build 模型 - * @return Kv - */ - private Kv createKv(GenBuilderModel builderModel){ - return Kv.by("data", builderModel) - .set("currTime", DateUtil.now()); - } - - -} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/utils/EnjoyUtil.java b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/utils/EnjoyUtil.java index 404f41b4..9012895c 100644 --- a/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/utils/EnjoyUtil.java +++ b/opsli-modulars/opsli-modulars-generator/src/main/java/org/opsli/plugins/generator/utils/EnjoyUtil.java @@ -70,6 +70,21 @@ public final class EnjoyUtil { .renderToString(kv); } + /** + * 根据具体魔板生成文件 + * @param template 模板 + * @param kv 渲染参数 + * @return String + */ + public static String renderByStr(final String template, Kv kv) { + + return Engine.use() + // 开启预热模式 + .setDevMode(true) + .getTemplateByString(template) + .renderToString(kv); + } + private EnjoyUtil(){} } diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/api/TemplateRestApi.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/api/TemplateRestApi.html deleted file mode 100644 index 4b5b6cb6..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/api/TemplateRestApi.html +++ /dev/null @@ -1,142 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -#if(data.subModuleName != null && data.subModuleName != "") -package #(apiPath).web.#(data.moduleName+"."+data.subModuleName); -#else -package #(apiPath).web.#(data.moduleName); -#end - -import #(apiPath).base.result.ResultVo; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -#if(data.subModuleName != null && data.subModuleName != "") -import #(apiPath).wrapper.#(data.moduleName+"."+data.subModuleName).#(data.model.tableHumpName)Model; -#else -import #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model; -#end - - -/** - * #(data.codeTitle) Api - * - * 对外 API 直接 暴露 @GetMapping 或者 @PostMapping - * 对内也推荐 单机版 不需要设置 Mapping 但是调用方法得从Controller写起 - * - * 这样写法虽然比较绕,但是当单体项目想要改造微服务架构时 时非常容易的 - * - * @author #(data.authorName) - * @date #(currTime) - */ -public interface #(data.model.tableHumpName)RestApi { - - /** 标题 */ - String TITLE = "#(data.codeTitle)"; - /** 子标题 */ - String SUB_TITLE = "#(data.codeTitleBrief)"; - - /** - * #(data.codeTitle) 查一条 - * @param model 模型 - * @return ResultVo - */ - @GetMapping("/get") - ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model); - - /** - * #(data.codeTitle) 查询分页 - * @param pageNo 当前页 - * @param pageSize 每页条数 - * @param request request - * @return ResultVo - */ - @GetMapping("/findPage") - ResultVo findPage( - @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, - HttpServletRequest request - ); - - /** - * #(data.codeTitle) 新增 - * @param model 模型 - * @return ResultVo - */ - @PostMapping("/insert") - ResultVo insert(@RequestBody #(data.model.tableHumpName)Model model); - - /** - * #(data.codeTitle) 修改 - * @param model 模型 - * @return ResultVo - */ - @PostMapping("/update") - ResultVo update(@RequestBody #(data.model.tableHumpName)Model model); - - /** - * #(data.codeTitle) 删除 - * @param id ID - * @return ResultVo - */ - @PostMapping("/del") - ResultVo del(String id); - - /** - * #(data.codeTitle) 批量删除 - * @param ids ID 数组 - * @return ResultVo - */ - @PostMapping("/delAll") - ResultVo delAll(String ids); - - /** - * #(data.codeTitle) Excel 导出 - * - * 导出时,Token认证和方法权限认证 全部都由自定义完成 - * 因为在 导出不成功时,需要推送错误信息, - * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时 - * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死 - * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段 - * response 推送 javascript代码 alert 提示报错信息 - * - * @param request request - * @param response response - */ - @GetMapping("/exportExcel") - void exportExcel(HttpServletRequest request, HttpServletResponse response); - - /** - * #(data.codeTitle) Excel 导入 - * @param request 文件流 request - * @return ResultVo - */ - @PostMapping("/importExcel") - ResultVo importExcel(MultipartHttpServletRequest request); - - /** - * #(data.codeTitle) Excel 下载导入模版 - * @param response response - * @return ResultVo - */ - @GetMapping("/importExcel/template") - void importTemplate(HttpServletResponse response); - -} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/entity/TemplateEntity.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/entity/TemplateEntity.html deleted file mode 100644 index 64320fa2..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/entity/TemplateEntity.html +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -#if(data.subModuleName != null && data.subModuleName != "") -package #(data.packageName+"."+data.moduleName+"."+data.subModuleName).entity; -#else -package #(data.packageName+"."+data.moduleName).entity; -#end - -#for(pkg : data.model.entityPkgList) -import #(pkg); -#end -import com.baomidou.mybatisplus.annotation.FieldStrategy; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.opsli.core.base.entity.BaseEntity; - -/** - * #(data.codeTitle) Entity - * - * @author #(data.authorName) - * @date #(currTime) - */ -@Data -@EqualsAndHashCode(callSuper = false) -public class #(data.model.tableHumpName) extends BaseEntity { - - - #for(column : data.model.columnList) - ### 不等于 删除字段 和 不等于 租户字段放入上边 - #if(column.fieldHumpName != "deleted" && column.fieldHumpName != "tenantId") - /** #(column.fieldComments) */ - #if(!column.izNotNull) - @TableField(updateStrategy = FieldStrategy.IGNORED) - #end - private #(column.javaType) #(column.fieldHumpName); - - #end - #end - - // ======================================== - - ### 专门处理 删除字段 和 租户字段 - #for(column : data.model.columnList) - #if(column.fieldHumpName == "deleted") - /** 逻辑删除字段 */ - @TableLogic - private Integer deleted; - #else if(column.fieldHumpName == "tenantId") - /** 多租户字段 */ - private String tenantId; - #end - - #end - -} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/mapper/TemplateMapper.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/mapper/TemplateMapper.html deleted file mode 100644 index 6822dfac..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/mapper/TemplateMapper.html +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -#if(data.subModuleName != null && data.subModuleName != "") -package #(data.packageName+"."+data.moduleName+"."+data.subModuleName).mapper; -#else -package #(data.packageName+"."+data.moduleName).mapper; -#end - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -#if(data.subModuleName != null && data.subModuleName != "") -import #(data.packageName+"."+data.moduleName+"."+data.subModuleName).entity.#(data.model.tableHumpName); -#else -import #(data.packageName+"."+data.moduleName).entity.#(data.model.tableHumpName); -#end - -/** - * #(data.codeTitle) Mapper - * - * @author #(data.authorName) - * @date #(currTime) - */ -@Mapper -public interface #(data.model.tableHumpName)Mapper extends BaseMapper<#(data.model.tableHumpName)> { - -} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/mapper/xml/TemplateMapperXML.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/mapper/xml/TemplateMapperXML.html deleted file mode 100644 index 2c6fd78d..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/mapper/xml/TemplateMapperXML.html +++ /dev/null @@ -1,10 +0,0 @@ - - -#if(data.subModuleName != null && data.subModuleName != "") - -#else - -#end - - - diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/model/TemplateModel.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/model/TemplateModel.html deleted file mode 100644 index 4485ddea..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/model/TemplateModel.html +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -#if(data.subModuleName != null && data.subModuleName != "") -package #(apiPath).wrapper.#(data.moduleName+"."+data.subModuleName); -#else -package #(apiPath).wrapper.#(data.moduleName); -#end - -#for(pkg : data.model.entityPkgList) -import #(pkg); -#end -import com.alibaba.excel.annotation.ExcelProperty; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import #(apiPath).base.warpper.ApiWrapper; -import org.opsli.common.annotation.validator.Validator; -import org.opsli.common.annotation.validator.ValidatorLenMax; -import org.opsli.common.annotation.validator.ValidatorLenMin; -import org.opsli.common.enums.ValidatorType; -import org.opsli.plugins.excel.annotation.ExcelInfo; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; - -/** -* #(data.codeTitle) Model -* -* @author #(data.authorName) -* @date #(currTime) -*/ -@Data -@EqualsAndHashCode(callSuper = false) -public class #(data.model.tableHumpName)Model extends ApiWrapper { - - #for(column : data.model.columnList) - ### 不等于 删除字段 和 不等于 租户字段放入上边 - #if(column.fieldHumpName != "deleted" && column.fieldHumpName != "tenantId") - /** #(column.fieldComments) */ - @ApiModelProperty(value = "#(column.fieldComments)") - @ExcelProperty(value = "#(column.fieldComments)", order = #(column.sort)) - #if(column.dictTypeCode != null && column.dictTypeCode != "") - @ExcelInfo( dictType = "#(column.dictTypeCode)" ) - #else - @ExcelInfo - #end - #if(column.validateTypeAndCommaList != null && column.validateTypeAndCommaList.size() > 0) - @Validator({ - #for(typeAndComma : column.validateTypeAndCommaList) - ValidatorType.#(typeAndComma) - #end - }) - #end - #if(column.fieldLength != null && column.fieldLength > 0) - #if(column.fieldPrecision != null && column.fieldPrecision > 0) - @ValidatorLenMax(#(column.fieldLength+column.fieldPrecision)) - #else - @ValidatorLenMax(#(column.fieldLength)) - #end - #end - ### 日期处理 - #if(column.javaType == "Date") - #if(column.showType == "4") - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern = "yyyy-MM-dd") - #else - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - #end - #end - private #(column.javaType) #(column.fieldHumpName); - - #end - #end - - -} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/service/TemplateService.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/service/TemplateService.html deleted file mode 100644 index ac8d58cc..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/service/TemplateService.html +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -#if(data.subModuleName != null && data.subModuleName != "") -package #(data.packageName+"."+data.moduleName+"."+data.subModuleName).service; -#else -package #(data.packageName+"."+data.moduleName).service; -#end - -import org.opsli.core.base.service.interfaces.CrudServiceInterface; - - -#if(data.subModuleName != null && data.subModuleName != "") -import #(data.packageName+"."+data.moduleName+"."+data.subModuleName).entity.#(data.model.tableHumpName); -import #(apiPath).wrapper.#(data.moduleName+"."+data.subModuleName).#(data.model.tableHumpName)Model; -#else -import #(data.packageName+"."+data.moduleName).entity.#(data.model.tableHumpName); -import #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model; -#end - -/** - * #(data.codeTitle) Service - * - * @author #(data.authorName) - * @date #(currTime) - */ -public interface I#(data.model.tableHumpName)Service extends CrudServiceInterface<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> { - -} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/service/impl/TemplateServiceImpl.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/service/impl/TemplateServiceImpl.html deleted file mode 100644 index df345a17..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/service/impl/TemplateServiceImpl.html +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -#if(data.subModuleName != null && data.subModuleName != "") -package #(data.packageName+"."+data.moduleName+"."+data.subModuleName).service.impl; -#else -package #(data.packageName+"."+data.moduleName).service.impl; -#end - - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.opsli.core.base.service.impl.CrudServiceImpl; - -#if(data.subModuleName != null && data.subModuleName != "") -import #(data.packageName+"."+data.moduleName+"."+data.subModuleName).entity.#(data.model.tableHumpName); -import #(apiPath).wrapper.#(data.moduleName+"."+data.subModuleName).#(data.model.tableHumpName)Model; -import #(data.packageName+"."+data.moduleName+"."+data.subModuleName).service.I#(data.model.tableHumpName)Service; -import #(data.packageName+"."+data.moduleName+"."+data.subModuleName).mapper.#(data.model.tableHumpName)Mapper; -#else -import #(data.packageName+"."+data.moduleName).entity.#(data.model.tableHumpName); -import #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model; -import #(data.packageName+"."+data.moduleName).service.I#(data.model.tableHumpName)Service; -import #(data.packageName+"."+data.moduleName).mapper.#(data.model.tableHumpName)Mapper; -#end - - -/** - * #(data.codeTitle) Service Impl - * - * @author #(data.authorName) - * @date #(currTime) - */ -@Service -public class #(data.model.tableHumpName)ServiceImpl extends CrudServiceImpl<#(data.model.tableHumpName)Mapper, #(data.model.tableHumpName), #(data.model.tableHumpName)Model> - implements I#(data.model.tableHumpName)Service { - - @Autowired(required = false) - private #(data.model.tableHumpName)Mapper mapper; - -} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/web/TemplateRestController.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/web/TemplateRestController.html deleted file mode 100644 index a7560a9f..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/backend/web/TemplateRestController.html +++ /dev/null @@ -1,256 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -#if(data.subModuleName != null && data.subModuleName != "") -package #(data.packageName+"."+data.moduleName+"."+data.subModuleName).web; -#else -package #(data.packageName+"."+data.moduleName).web; -#end - -import cn.hutool.core.util.ReflectUtil; -import cn.hutool.core.convert.Convert; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.opsli.common.annotation.RequiresPermissionsCus; -import org.apache.shiro.authz.annotation.RequiresPermissions; -import #(apiPath).base.result.ResultVo; -import org.opsli.common.annotation.ApiRestController; -import org.opsli.common.annotation.EnableLog; -import org.opsli.core.base.controller.BaseRestController; -import org.opsli.core.persistence.Page; -import org.opsli.core.persistence.querybuilder.QueryBuilder; -import org.opsli.core.persistence.querybuilder.WebQueryBuilder; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.lang.reflect.Method; - -#if(data.subModuleName != null && data.subModuleName != "") -import #(data.packageName+"."+data.moduleName+"."+data.subModuleName).entity.#(data.model.tableHumpName); -import #(apiPath).wrapper.#(data.moduleName+"."+data.subModuleName).#(data.model.tableHumpName)Model; -import #(data.packageName+"."+data.moduleName+"."+data.subModuleName).service.I#(data.model.tableHumpName)Service; -import #(apiPath).web.#(data.moduleName+"."+data.subModuleName).#(data.model.tableHumpName)RestApi; -#else -import #(data.packageName+"."+data.moduleName).entity.#(data.model.tableHumpName); -import #(apiPath).wrapper.#(data.moduleName).#(data.model.tableHumpName)Model; -import #(data.packageName+"."+data.moduleName).service.I#(data.model.tableHumpName)Service; -import #(apiPath).web.#(data.moduleName).#(data.model.tableHumpName)RestApi; -#end - -/** - * #(data.codeTitle) Controller - * - * @author #(data.authorName) - * @date #(currTime) - */ -@Api(tags = #(data.model.tableHumpName)RestApi.TITLE) -@Slf4j -#if(data.subModuleName != null && data.subModuleName != "") -@ApiRestController("/#(data.moduleName)/#(data.subModuleName)") -#else -@ApiRestController("/#(data.moduleName)") -#end -public class #(data.model.tableHumpName)RestController extends BaseRestController<#(data.model.tableHumpName), #(data.model.tableHumpName)Model, I#(data.model.tableHumpName)Service> - implements #(data.model.tableHumpName)RestApi { - - - /** - * #(data.codeTitleBrief) 查一条 - * @param model 模型 - * @return ResultVo - */ - @ApiOperation(value = "获得单条#(data.codeTitleBrief)", notes = "获得单条#(data.codeTitleBrief) - ID") - #if(data.subModuleName != null && data.subModuleName != "") - @RequiresPermissions("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select") - #else - @RequiresPermissions("#(data.moduleName.toLowerCase())_select") - #end - @Override - public ResultVo<#(data.model.tableHumpName)Model> get(#(data.model.tableHumpName)Model model) { - // 如果系统内部调用 则直接查数据库 - if(model != null && model.getIzApi() != null && model.getIzApi()){ - model = IService.get(model); - } - return ResultVo.success(model); - } - - /** - * #(data.codeTitleBrief) 查询分页 - * @param pageNo 当前页 - * @param pageSize 每页条数 - * @param request request - * @return ResultVo - */ - @ApiOperation(value = "获得分页数据", notes = "获得分页数据 - 查询构造器") - #if(data.subModuleName != null && data.subModuleName != "") - @RequiresPermissions("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select") - #else - @RequiresPermissions("#(data.moduleName.toLowerCase())_select") - #end - @Override - public ResultVo findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) { - - QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - Page<#(data.model.tableHumpName), #(data.model.tableHumpName)Model> page = new Page<>(pageNo, pageSize); - page.setQueryWrapper(queryBuilder.build()); - page = IService.findPage(page); - - return ResultVo.success(page.getPageData()); - } - - /** - * #(data.codeTitleBrief) 新增 - * @param model 模型 - * @return ResultVo - */ - @ApiOperation(value = "新增#(data.codeTitleBrief)数据", notes = "新增#(data.codeTitleBrief)数据") - #if(data.subModuleName != null && data.subModuleName != "") - @RequiresPermissions("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert") - #else - @RequiresPermissions("#(data.moduleName.toLowerCase())_insert") - #end - @EnableLog - @Override - public ResultVo insert(#(data.model.tableHumpName)Model model) { - // 调用新增方法 - IService.insert(model); - return ResultVo.success("新增#(data.codeTitleBrief)成功"); - } - - /** - * #(data.codeTitleBrief) 修改 - * @param model 模型 - * @return ResultVo - */ - @ApiOperation(value = "修改#(data.codeTitleBrief)数据", notes = "修改#(data.codeTitleBrief)数据") - #if(data.subModuleName != null && data.subModuleName != "") - @RequiresPermissions("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update") - #else - @RequiresPermissions("#(data.moduleName.toLowerCase())_update") - #end - @EnableLog - @Override - public ResultVo update(#(data.model.tableHumpName)Model model) { - // 调用修改方法 - IService.update(model); - return ResultVo.success("修改#(data.codeTitleBrief)成功"); - } - - - /** - * #(data.codeTitleBrief) 删除 - * @param id ID - * @return ResultVo - */ - @ApiOperation(value = "删除#(data.codeTitleBrief)数据", notes = "删除#(data.codeTitleBrief)数据") - #if(data.subModuleName != null && data.subModuleName != "") - @RequiresPermissions("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update") - #else - @RequiresPermissions("#(data.moduleName.toLowerCase())_update") - #end - @EnableLog - @Override - public ResultVo del(String id){ - IService.delete(id); - return ResultVo.success("删除#(data.codeTitleBrief)成功"); - } - - /** - * #(data.codeTitleBrief) 批量删除 - * @param ids ID 数组 - * @return ResultVo - */ - @ApiOperation(value = "批量删除#(data.codeTitleBrief)数据", notes = "批量删除#(data.codeTitleBrief)数据") - #if(data.subModuleName != null && data.subModuleName != "") - @RequiresPermissions("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update") - #else - @RequiresPermissions("#(data.moduleName.toLowerCase())_update") - #end - @EnableLog - @Override - public ResultVo delAll(String ids){ - String[] idArray = Convert.toStrArray(ids); - IService.deleteAll(idArray); - return ResultVo.success("批量删除#(data.codeTitleBrief)成功"); - } - - - /** - * #(data.codeTitleBrief) Excel 导出 - * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解 - * - * 导出时,Token认证和方法权限认证 全部都由自定义完成 - * 因为在 导出不成功时,需要推送错误信息, - * 前端直接走下载流,当失败时无法获得失败信息,即使前后端换一种方式后端推送二进制文件前端再次解析也是最少2倍的耗时 - * ,且如果数据量过大,前端进行渲染时直接会把浏览器卡死 - * 而直接开启socket接口推送显然是太过浪费资源了,所以目前采用Java最原始的手段 - * response 推送 javascript代码 alert 提示报错信息 - * - * @param request request - * @param response response - */ - @ApiOperation(value = "导出Excel", notes = "导出Excel") - #if(data.subModuleName != null && data.subModuleName != "") - @RequiresPermissionsCus("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export") - #else - @RequiresPermissionsCus("#(data.moduleName.toLowerCase())_export") - #end - @EnableLog - @Override - public void exportExcel(HttpServletRequest request, HttpServletResponse response) { - // 当前方法 - Method method = ReflectUtil.getMethodByName(this.getClass(), "exportExcel"); - QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(entityClazz, request.getParameterMap()); - super.excelExport(#(data.model.tableHumpName)RestApi.SUB_TITLE, queryBuilder.build(), response, method); - } - - /** - * #(data.codeTitleBrief) Excel 导入 - * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解 - * @param request 文件流 request - * @return ResultVo - */ - @ApiOperation(value = "导入Excel", notes = "导入Excel") - #if(data.subModuleName != null && data.subModuleName != "") - @RequiresPermissions("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import") - #else - @RequiresPermissions("#(data.moduleName.toLowerCase())_import") - #end - @EnableLog - @Override - public ResultVo importExcel(MultipartHttpServletRequest request) { - return super.importExcel(request); - } - - /** - * #(data.codeTitleBrief) Excel 下载导入模版 - * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解 - * @param response response - */ - @ApiOperation(value = "导出Excel模版", notes = "导出Excel模版") - #if(data.subModuleName != null && data.subModuleName != "") - @RequiresPermissionsCus("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import") - #else - @RequiresPermissionsCus("#(data.moduleName.toLowerCase())_import") - #end - @Override - public void importTemplate(HttpServletResponse response) { - // 当前方法 - Method method = ReflectUtil.getMethodByName(this.getClass(), "importTemplate"); - super.importTemplate(#(data.model.tableHumpName)RestApi.SUB_TITLE, response, method); - } - -} diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/api/TemplateApi.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/api/TemplateApi.html deleted file mode 100644 index 8e8eb077..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/api/TemplateApi.html +++ /dev/null @@ -1,118 +0,0 @@ -import request from "@/utils/request"; -import {downloadFileByData} from "@/utils/download"; - -export function getList(data) { - return request({ - #if(data.subModuleName != null && data.subModuleName != "") - url: "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/findPage", - #else - url: "#(apiPath)/#(data.moduleName)/findPage", - #end - method: "get", - params: data, - }); -} - - -export function doInsert(data) { - return request({ - #if(data.subModuleName != null && data.subModuleName != "") - url: "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/insert", - #else - url: "#(apiPath)/#(data.moduleName)/insert", - #end - method: "post", - data, - }); -} - -export function doUpdate(data) { - return request({ - #if(data.subModuleName != null && data.subModuleName != "") - url: "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/update", - #else - url: "#(apiPath)/#(data.moduleName)/update", - #end - method: "post", - data, - }); -} - -export function doDelete(data) { - return request({ - #if(data.subModuleName != null && data.subModuleName != "") - url: "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/del", - #else - url: "#(apiPath)/#(data.moduleName)/del", - #end - method: "post", - params: data, - }); -} - -export function doDeleteAll(data) { - return request({ - #if(data.subModuleName != null && data.subModuleName != "") - url: "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/delAll", - #else - url: "#(apiPath)/#(data.moduleName)/delAll", - #end - method: "post", - params: data, - }); -} - - -/** -* 导出Excel 目前只支持一层参数传递 -* @param data -* @returns file -*/ -export function doExportExcel(data) { - #if(data.subModuleName != null && data.subModuleName != "") - let requestURL = "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/exportExcel"; - #else - let requestURL = "#(apiPath)/#(data.moduleName)/exportExcel"; - #end - // 下载文件 - downloadFileByData(requestURL, data); -} - - -/** -* 下载模版 -* @returns file -*/ -export function doDownloadTemplate() { - let data = {}; - #if(data.subModuleName != null && data.subModuleName != "") - let requestURL = "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel/template"; - #else - let requestURL = "#(apiPath)/#(data.moduleName)/importExcel/template"; - #end - // 下载文件 - downloadFileByData(requestURL, data); -} - -/** -* 导入Excel -* @returns file -*/ -export function doImportExcel(data) { - return request({ - #if(data.subModuleName != null && data.subModuleName != "") - url: "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel", - #else - url: "#(apiPath)/#(data.moduleName)/importExcel", - #end - method: "post", - // 最长超时时间 3 分钟 - timeout: 180000, - headers: { - "Content-Type": "multipart/form-data" - }, - data, - }); -} - - diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/components/TemplateEdit.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/components/TemplateEdit.html deleted file mode 100644 index d7f572b5..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/components/TemplateEdit.html +++ /dev/null @@ -1,187 +0,0 @@ - - - diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/components/TemplateImport.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/components/TemplateImport.html deleted file mode 100644 index afec4f43..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/components/TemplateImport.html +++ /dev/null @@ -1,183 +0,0 @@ - - - diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/index/TemplateIndex.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/index/TemplateIndex.html deleted file mode 100644 index 7317fe9b..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/foreend/index/TemplateIndex.html +++ /dev/null @@ -1,543 +0,0 @@ - - - diff --git a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/readme/TemplateReadMe.html b/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/readme/TemplateReadMe.html deleted file mode 100644 index 95a3ff1e..00000000 --- a/opsli-modulars/opsli-modulars-generator/src/main/resources/tpl/readme/TemplateReadMe.html +++ /dev/null @@ -1,58 +0,0 @@ -> Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - -#[[## OPSLI 代码生成器]]# -> 生成 #(data.codeTitle)[#(data.model.tableHumpName)] 代码 , 生成时间:#(currTime) - -> 作者: #(data.authorName) - -#[[### 后端]]# -> -``` -将 包目录下 后端代码 分别拷贝至 `api` 包下 和 `modulars` 下工程 - -api -试例: org.opsli.api.wrapper.模块名 - org.opsli.api.web.模块名 - -modulars -试例: org.opsli.modulars.模块名 -``` - -#[[### 前端]]# -``` -views 包里的代码为 vue展示层,拷贝至对应目录即可 - -试例: /src/views/modules/模块名/index.vue - -试例: /src/views/modules/模块名/components/代码名Edit.vue -``` -``` -api 包里的代码为 api接口层,拷贝至对应目录即可 - -试例: /src/api/模块名/api.js - -``` - -#[[### 菜单权限]]# -``` -需要增加对应菜单的操作权限 - -菜单配置: -类型:菜单 -主路径:`#(data.moduleName.toLowerCase())` (如果主路径存在,则不需要创建主路径) -子路径:`#(data.subModuleName.toLowerCase())` -#if(data.subModuleName != null && data.subModuleName != "") -组件路径: `views/modules/#(data.moduleName.toLowerCase())/#(data.subModuleName.toLowerCase())/index` -#else -组件路径: `views/modules/#(data.moduleName.toLowerCase())/index` -#end - -类型:按钮 -查看: `select` -新增: `insert` -修改: `update` -删除: `delete` -导入: `import` -导出: `export` - -```