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
\n \n \n
\n \n \n #for(column : data.model.moreQueryList)\n\n ### 字典\n #if(column.showType == \"2\")\n \n \n \n \n \n #else if(column.showType == \"3\")\n ### 时间\n \n \n \n \n #else if(column.showType == \"4\")\n ### 日期\n \n \n \n #else\n #if(column.queryType == \"EQ\" || column.queryType == \"LIKE\")\n \n \n \n #else if(column.queryType == \"RANGE\")\n \n \n \n -
\n \n \n \n #end\n #end\n #end\n\n\n \n \n\n \n
\n
\n \n\n \n
\n \n 添加 \n\n 导入 \n\n 导出 \n\n 0\"\n icon=\"el-icon-delete\"\n type=\"danger\"\n @click=\"handleDelete\"\n > 批量删除 \n\n \n \n \n ### 代码生成器 简要只展示2个\n #for(column : data.model.briefQueryList)\n\n ### 字典\n #if(column.showType == \"2\")\n \n \n \n \n \n #else if(column.showType == \"3\")\n ### 时间\n \n \n \n \n #else if(column.showType == \"4\")\n ### 日期\n \n \n \n #else\n #if(column.queryType == \"EQ\" || column.queryType == \"LIKE\")\n \n \n \n #else if(column.queryType == \"RANGE\")\n \n \n \n -
\n \n \n \n #end\n #end\n #end\n\n \n \n 查询\n \n\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\n \n 更多\n \n #end\n\n \n \n \n \n\n
\n \n\n \n \n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\n \n \n\n #for(column : data.model.columnList)\n ### 字典\n #if(column.showType == \"2\" && column.izShowList == \"1\")\n \n\n \n \n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\n \n \n\n \n\n #else\n #if(column.izShowList == \"1\")\n \n\n #end\n #end\n #end\n\n \n \n 编辑 \n 删除 \n \n\n \n \n
\n\n
\n
\n\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 (1398292023609384961, 1398253704724828162, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', 'Edit.vue', '\n \n \n \n #for(column : data.model.formList)\n ### 文本框\n #if(column.showType == \"0\")\n \n \n \n \n \n ### 文本域\n #else if(column.showType == \"1\")\n \n \n \n \n \n ### 字典\n #else if(column.showType == \"2\")\n \n \n \n \n \n \n \n ### 日期时间\n #else if(column.showType == \"3\")\n \n \n \n \n \n ### 日期\n #else if(column.showType == \"4\")\n \n \n \n \n \n #end\n\n #end\n \n\n \n \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 (1398292023676493826, 1398253704724828162, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', 'Import.vue', '\n \n \n \n 将文件拖到此处,或点击导入
\n 只能上传xls/xlsx文件,且不超过5MB
\n \n\n \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 (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 \n #for(column : data.model.formList)\n ### 文本框\n #if(column.showType == \"0\")\n \n \n \n \n \n ### 文本域\n #else if(column.showType == \"1\")\n \n \n \n \n \n ### 字典\n #else if(column.showType == \"2\")\n \n \n \n \n \n \n \n ### 日期时间\n #else if(column.showType == \"3\")\n \n \n \n \n \n ### 日期\n #else if(column.showType == \"4\")\n \n \n \n \n \n #end\n\n #end\n \n\n \n \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 (1399705819196407810, 1398253704724828162, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', 'Import.vue', '\n \n \n \n 将文件拖到此处,或点击导入
\n 只能上传xls/xlsx文件,且不超过5MB
\n \n\n \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 (1399705819322236929, 1398253704724828162, '1', 'src/views/modules/${moduleName}/${subModuleName}', 'index.vue', '\n \n\n
\n \n \n
\n \n \n #for(column : data.model.moreQueryList)\n\n ### 字典\n #if(column.showType == \"2\")\n \n \n \n \n \n #else if(column.showType == \"3\")\n ### 时间\n \n \n \n \n #else if(column.showType == \"4\")\n ### 日期\n \n \n \n #else\n #if(column.queryType == \"EQ\" || column.queryType == \"LIKE\")\n \n \n \n #else if(column.queryType == \"RANGE\")\n \n \n \n -
\n \n \n \n #end\n #end\n #end\n\n\n \n \n\n \n
\n
\n \n\n \n
\n \n 添加 \n\n 导入 \n\n 导出 \n\n 0\"\n icon=\"el-icon-delete\"\n type=\"danger\"\n @click=\"handleDelete\"\n > 批量删除 \n\n \n \n \n ### 代码生成器 简要只展示2个\n #for(column : data.model.briefQueryList)\n\n ### 字典\n #if(column.showType == \"2\")\n \n \n \n \n \n #else if(column.showType == \"3\")\n ### 时间\n \n \n \n \n #else if(column.showType == \"4\")\n ### 日期\n \n \n \n #else\n #if(column.queryType == \"EQ\" || column.queryType == \"LIKE\")\n \n \n \n #else if(column.queryType == \"RANGE\")\n \n \n \n -
\n \n \n \n #end\n #end\n #end\n\n \n \n 查询\n \n\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\n \n 更多\n \n #end\n\n \n \n \n \n\n
\n \n\n \n \n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\n \n \n\n #for(column : data.model.columnList)\n ### 字典\n #if(column.showType == \"2\" && column.izShowList == \"1\")\n \n\n \n \n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\n \n \n\n \n\n #else\n #if(column.izShowList == \"1\")\n \n\n #end\n #end\n #end\n\n \n \n 编辑 \n 删除 \n \n\n \n \n
\n\n
\n
\n\n
\n\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
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\n\\n\\n\"},{\"fileName\":\"Edit.vue\",\"izApi\":false,\"type\":\"1\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\\n \\n \\n \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"fileContent\":\"\\n \\n \\n \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n \\n \\n \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n \\n\\n
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n \\n \\n \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n \\n\\n
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n \\n \\n \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n \\n\\n
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n \\n \\n \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n \\n\\n
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n \\n \\n \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n \\n\\n
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"Import.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023676493826\",\"fileContent\":\"\\n \\n \\n \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1398253704724828162\",\"path\":\"\",\"izManual\":false,\"id\":\"1398292023479361537\",\"fileContent\":\"\\n \\n\\n
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\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 \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\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
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\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 \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\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
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\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 \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\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
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\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 \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\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
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\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 \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\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
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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 \\n #for(column : data.model.formList)\\n ### 文本框\\n #if(column.showType == \\\"0\\\")\\n \\n \\n \\n \\n \\n ### 文本域\\n #else if(column.showType == \\\"1\\\")\\n \\n \\n \\n \\n \\n ### 字典\\n #else if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n \\n \\n ### 日期时间\\n #else if(column.showType == \\\"3\\\")\\n \\n \\n \\n \\n \\n ### 日期\\n #else if(column.showType == \\\"4\\\")\\n \\n \\n \\n \\n \\n #end\\n\\n #end\\n \\n\\n \\n \\n \\n\\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 \\n 将文件拖到此处,或点击导入
\\n 只能上传xls/xlsx文件,且不超过5MB
\\n \\n\\n \\n \\n\\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
\\n \\n \\n
\\n \\n \\n #for(column : data.model.moreQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n\\n \\n \\n\\n \\n
\\n
\\n \\n\\n \\n
\\n \\n 添加 \\n\\n 导入 \\n\\n 导出 \\n\\n 0\\\"\\n icon=\\\"el-icon-delete\\\"\\n type=\\\"danger\\\"\\n @click=\\\"handleDelete\\\"\\n > 批量删除 \\n\\n \\n \\n \\n ### 代码生成器 简要只展示2个\\n #for(column : data.model.briefQueryList)\\n\\n ### 字典\\n #if(column.showType == \\\"2\\\")\\n \\n \\n \\n \\n \\n #else if(column.showType == \\\"3\\\")\\n ### 时间\\n \\n \\n \\n \\n #else if(column.showType == \\\"4\\\")\\n ### 日期\\n \\n \\n \\n #else\\n #if(column.queryType == \\\"EQ\\\" || column.queryType == \\\"LIKE\\\")\\n \\n \\n \\n #else if(column.queryType == \\\"RANGE\\\")\\n \\n \\n \\n -
\\n \\n \\n \\n #end\\n #end\\n #end\\n\\n \\n \\n 查询\\n \\n\\n #if(data.model.moreQueryList != null && data.model.moreQueryList.size() > 0)\\n \\n 更多\\n \\n #end\\n\\n \\n \\n \\n \\n\\n
\\n \\n\\n \\n \\n {{(queryForm.pageNo - 1) * queryForm.pageSize + scope.$index + 1}}\\n \\n \\n\\n #for(column : data.model.columnList)\\n ### 字典\\n #if(column.showType == \\\"2\\\" && column.izShowList == \\\"1\\\")\\n \\n\\n \\n \\n {{ $getDictNameByValue(\'#(column.dictTypeCode)\', scope.row.#(column.fieldHumpName)) }}\\n \\n \\n\\n \\n\\n #else\\n #if(column.izShowList == \\\"1\\\")\\n \\n\\n #end\\n #end\\n #end\\n\\n \\n \\n 编辑 \\n 删除 \\n \\n\\n \\n \\n
\\n\\n
\\n
\\n\\n
\\n\\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