From 5b5654b56edcbdb0e0bda16aedc703d979c2c169 Mon Sep 17 00:00:00 2001 From: Parker Date: Tue, 28 Feb 2023 11:31:36 +0800 Subject: [PATCH 1/3] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9EventBug=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=20=E9=80=82=E9=85=8D=E4=BA=8E=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpringEventBus.java} | 7 +++---- .../java/org/opsli/core/log/aspect/OperateLogAspect.java | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) rename opsli-base-support/opsli-core/src/main/java/org/opsli/core/{log/bus/OperationLogEventBus.java => eventbus/SpringEventBus.java} (89%) diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/log/bus/OperationLogEventBus.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/eventbus/SpringEventBus.java similarity index 89% rename from opsli-base-support/opsli-core/src/main/java/org/opsli/core/log/bus/OperationLogEventBus.java rename to opsli-base-support/opsli-core/src/main/java/org/opsli/core/eventbus/SpringEventBus.java index 4c09676e..c4c3c129 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/log/bus/OperationLogEventBus.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/eventbus/SpringEventBus.java @@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package org.opsli.core.log.bus; +package org.opsli.core.eventbus; import com.google.common.eventbus.AsyncEventBus; import com.google.common.eventbus.EventBus; @@ -21,7 +21,6 @@ import com.google.common.eventbus.SubscriberExceptionContext; import com.google.common.eventbus.SubscriberExceptionHandler; import lombok.extern.slf4j.Slf4j; import org.opsli.common.thread.ThreadPoolFactory; -import org.opsli.core.eventbus.AbstractSpringEventBus; import org.springframework.stereotype.Component; import java.util.concurrent.ThreadPoolExecutor; @@ -34,11 +33,11 @@ import java.util.concurrent.TimeUnit; */ @Component @Slf4j -public class OperationLogEventBus extends AbstractSpringEventBus implements SubscriberExceptionHandler { +public class SpringEventBus extends AbstractSpringEventBus implements SubscriberExceptionHandler { private final EventBus eventBus; - public OperationLogEventBus() { + public SpringEventBus() { // 异步事件配置线程池 eventBus = new AsyncEventBus( ThreadPoolFactory.createInitThreadPool(5, 10, 60, TimeUnit.SECONDS, diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/log/aspect/OperateLogAspect.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/log/aspect/OperateLogAspect.java index fe5b2bff..061688a5 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/log/aspect/OperateLogAspect.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/log/aspect/OperateLogAspect.java @@ -29,7 +29,7 @@ import org.opsli.core.base.dto.LoginUserDto; import org.opsli.core.holder.UserContextHolder; import org.opsli.core.log.annotation.OperateLogger; import org.opsli.core.log.bean.OperationLog; -import org.opsli.core.log.bus.OperationLogEventBus; +import org.opsli.core.eventbus.SpringEventBus; import org.opsli.core.log.enums.LogLevelEnum; import org.opsli.core.log.enums.LogScopeEnum; import org.opsli.core.utils.UserTokenUtil; @@ -57,7 +57,7 @@ public class OperateLogAspect { private static final String RE = "\\$\\{([\\w\\.\\-\\/\\+\\$\\#\\@\\!\\^\\&\\(\\)]+)\\}"; @Resource - private OperationLogEventBus operationLogEventBus; + private SpringEventBus springEventBus; @Pointcut("@annotation(org.opsli.core.log.annotation.OperateLogger)") public void operationLog(){} @@ -156,7 +156,7 @@ public class OperateLogAspect { } // 存入数据库 if(annotation.db()){ - operationLogEventBus.post(operationLog); + springEventBus.post(operationLog); } } -- Gitee From ec1467768497875e799d946e7d64ec198ff9ee95 Mon Sep 17 00:00:00 2001 From: Parker Date: Thu, 16 Mar 2023 20:58:51 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E8=8F=9C=E5=8D=95=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E9=A1=B5=20=E8=8E=B7=E5=8F=96=E7=88=B6=E7=BA=A7=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=20=E4=B8=BA=E7=A9=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../opsli/api/web/system/menu/MenuApi.java | 8 +++ .../api/web/system/role/RoleMenuRefApi.java | 20 +++++++ .../wrapper/system/user/UserRoleRefModel.java | 6 +-- .../system/menu/web/MenuRestController.java | 23 ++++++++ .../role/service/IRoleMenuRefService.java | 8 +++ .../service/impl/RoleMenuRefServiceImpl.java | 32 +++++++++++ .../role/web/RoleMenuRefRestController.java | 54 +++++++++++++++++++ 7 files changed, 148 insertions(+), 3 deletions(-) diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java index bc3af3ca..6c179a7d 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java @@ -100,6 +100,14 @@ public interface MenuApi { ResultWrapper> findList(); + /** + * 菜单 查一条 + * @param parentId 父级ID + * @return ResultWrapper + */ + @GetMapping("/getParent") + ResultWrapper getParent(String parentId); + /** * 菜单 查一条 * @param model 模型 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java index 922be080..3668b5b5 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java @@ -18,6 +18,7 @@ package org.opsli.api.web.system.role; import org.opsli.api.base.result.ResultWrapper; import org.opsli.api.wrapper.system.role.RoleMenuRefModel; import org.opsli.api.wrapper.system.role.RoleModel; +import org.opsli.common.annotation.ApiVersion; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -54,6 +55,15 @@ public interface RoleMenuRefApi { @GetMapping("/getPerms") ResultWrapper getPerms(RoleMenuRefModel model); + /** + * 获得当前已有权限 + * @param model 角色Id + * @return ResultWrapper + */ + @ApiVersion(2) + @GetMapping("/getPerms") + ResultWrapper getPermsV2(RoleMenuRefModel model); + /** * 设置权限 * @param model roleId 角色Id @@ -63,4 +73,14 @@ public interface RoleMenuRefApi { @PostMapping("/setPerms") ResultWrapper setPerms(@RequestBody RoleMenuRefModel model); + /** + * 设置权限 + * @param model roleId 角色Id + * @param model permsIds 权限Id 数组 + * @return ResultWrapper + */ + @PostMapping("/setPerms") + @ApiVersion(2) + ResultWrapper setPermsV2(@RequestBody RoleMenuRefModel model); + } diff --git a/opsli-api/src/main/java/org/opsli/api/wrapper/system/user/UserRoleRefModel.java b/opsli-api/src/main/java/org/opsli/api/wrapper/system/user/UserRoleRefModel.java index 941bb414..854d1f73 100644 --- a/opsli-api/src/main/java/org/opsli/api/wrapper/system/user/UserRoleRefModel.java +++ b/opsli-api/src/main/java/org/opsli/api/wrapper/system/user/UserRoleRefModel.java @@ -17,9 +17,7 @@ package org.opsli.api.wrapper.system.user; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import io.swagger.annotations.ApiModelProperty; -import lombok.Builder; -import lombok.Data; -import lombok.EqualsAndHashCode; +import lombok.*; import org.opsli.common.annotation.validator.Validator; import org.opsli.common.annotation.validator.ValidatorLenMax; import org.opsli.common.enums.ValidatorType; @@ -35,6 +33,8 @@ import java.io.Serializable; @Data @EqualsAndHashCode(callSuper = false) @ExcelIgnoreUnannotated +@AllArgsConstructor +@NoArgsConstructor @Builder public class UserRoleRefModel implements Serializable { diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java index 78829ca7..464418c3 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java @@ -287,6 +287,29 @@ public class MenuRestController extends BaseRestController getParent(String parentId) { + if(StringUtils.isBlank(parentId)){ + return ResultWrapper.getSuccessResultWrapper(null); + } + MenuModel model; + if(StringUtils.equals(MenuConstants.GEN_ID, parentId)){ + // 生成根节点菜单 + model = getGenMenuModel(); + }else{ + model = IService.get(parentId); + } + + return ResultWrapper.getSuccessResultWrapper(model); + } + /** * 菜单 查询分页 * @param pageNo 当前页 diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/IRoleMenuRefService.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/IRoleMenuRefService.java index f922901d..8f3450c7 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/IRoleMenuRefService.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/IRoleMenuRefService.java @@ -42,6 +42,14 @@ public interface IRoleMenuRefService { */ boolean setPerms(String roleId,String[] permsIds); + /** + * 保存权限(兼容Vue3) + * @param roleId 角色ID + * @param permsIds 权限集合 + * @return boolean + */ + boolean setPermsV2(String roleId,String[] permsIds); + /** * 根据角色ID 移除对应 权限数据 * @param roleIds 角色ID diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/impl/RoleMenuRefServiceImpl.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/impl/RoleMenuRefServiceImpl.java index dc8fc0a3..d7509ad3 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/impl/RoleMenuRefServiceImpl.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/impl/RoleMenuRefServiceImpl.java @@ -88,6 +88,38 @@ public class RoleMenuRefServiceImpl extends ServiceImpl list = Lists.newArrayListWithCapacity(permsIds.length); + for (String permsId : permsIds) { + SysRoleMenuRef entity = new SysRoleMenuRef(); + entity.setRoleId(roleId); + entity.setMenuId(permsId); + list.add(entity); + } + boolean ret = super.saveBatch(list); + if(ret){ + // 清除缓存 + this.clearCache(roleId); + } + return ret; + } + + @Override @Transactional(rollbackFor = Exception.class) public boolean delPermsByMenuIds(List menuIds){ diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java index 040b1a58..893a9a1d 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java @@ -19,6 +19,7 @@ import com.google.common.collect.Lists; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.opsli.common.annotation.ApiVersion; import org.opsli.core.log.annotation.OperateLogger; import org.opsli.core.log.enums.ModuleEnum; import org.opsli.core.log.enums.OperationTypeEnum; @@ -37,6 +38,7 @@ import org.opsli.modulars.system.SystemMsg; import org.opsli.modulars.system.menu.entity.SysMenu; import org.opsli.modulars.system.role.service.IRoleMenuRefService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import java.util.List; import java.util.Map; @@ -93,6 +95,31 @@ public class RoleMenuRefRestController implements RoleMenuRefApi { return ResultWrapper.getSuccessResultWrapper(permsIds); } + /** + * 获得当前已有权限 (针对Vue3 兼容) + * @param model roleId 角色Id + * @return ResultWrapper + */ + @PreAuthorize("hasAuthority('system_role_setMenuPerms')") + @Override + @ApiVersion(2) + public ResultWrapper getPermsV2(RoleMenuRefModel model) { + if(model == null){ + return ResultWrapper.getCustomResultWrapper(SystemMsg.EXCEPTION_ROLE_ID_NOT_NULL); + } + + List perms = iRoleMenuRefService.getPerms(model.getRoleId()); + List permsIds = Lists.newArrayListWithCapacity(perms.size()); + if(!perms.isEmpty()){ + for (SysMenu perm : perms) { + permsIds.add(perm.getId()); + } + } + + return ResultWrapper.getSuccessResultWrapper(permsIds); + } + + /** * 设置菜單权限 * @param model 模型 @@ -120,6 +147,33 @@ public class RoleMenuRefRestController implements RoleMenuRefApi { } + /** + * 设置菜單权限 + * @param model 模型 + * @return ResultWrapper + */ + @PreAuthorize("hasAuthority('system_role_setMenuPerms')") + @OperateLogger(description = "设置菜單权限", + module = ModuleEnum.MODULE_ROLE, operationType = OperationTypeEnum.UPDATE, db = true) + @Override + public ResultWrapper setPermsV2(RoleMenuRefModel model) { + // 演示模式 不允许操作 + this.demoError(); + + if(model == null){ + return ResultWrapper.getErrorResultWrapper().setMsg("设置权限失败"); + } + + boolean ret = iRoleMenuRefService.setPermsV2(model.getRoleId(), + model.getPermsIds()); + if(ret){ + return ResultWrapper.getSuccessResultWrapper(); + } + // 权限设置失败 + return ResultWrapper.getCustomResultWrapper(SystemMsg.EXCEPTION_ROLE_PERMS_ERROR); + } + + /** * 演示模式 */ -- Gitee From 7c06309c7810d0c598debc71bd7b5dfaa3340103 Mon Sep 17 00:00:00 2001 From: Parker Date: Thu, 16 Mar 2023 21:03:47 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E5=8D=87=E7=BA=A7SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... => 2.1.0 \345\215\207\347\272\247SQL.sql" | 10 ++ .../opsli-boot.sql" | 125 +++++------------- 2 files changed, 42 insertions(+), 93 deletions(-) create mode 100644 "db-file/2.0\347\211\210\346\234\254/2.0 => 2.1.0 \345\215\207\347\272\247SQL.sql" diff --git "a/db-file/2.0\347\211\210\346\234\254/2.0 => 2.1.0 \345\215\207\347\272\247SQL.sql" "b/db-file/2.0\347\211\210\346\234\254/2.0 => 2.1.0 \345\215\207\347\272\247SQL.sql" new file mode 100644 index 00000000..8fbcb51e --- /dev/null +++ "b/db-file/2.0\347\211\210\346\234\254/2.0 => 2.1.0 \345\215\207\347\272\247SQL.sql" @@ -0,0 +1,10 @@ +-- 删除vue2 组件菜单 +delete from sys_menu +where parent_ids like '0,1314068325453574145,1314071137365307394%' + or parent_ids like '0,1314068325453574145,1314123690283114498%'; + + +-- 清理用户权限垃圾数据 +delete ref from sys_role_menu_ref ref +left join sys_menu m on m.id = ref.menu_id +where m.id is null; diff --git "a/db-file/2.0\347\211\210\346\234\254/opsli-boot.sql" "b/db-file/2.0\347\211\210\346\234\254/opsli-boot.sql" index 3b1bcbcd..25d29954 100644 --- "a/db-file/2.0\347\211\210\346\234\254/opsli-boot.sql" +++ "b/db-file/2.0\347\211\210\346\234\254/opsli-boot.sql" @@ -1,17 +1,17 @@ /* Navicat Premium Data Transfer - Source Server : OPSLI 快速开发平台 + Source Server : 个人阿里云2 Source Server Type : MySQL Source Server Version : 50733 - Source Host : 127.0.0.1 - Source Schema : opsli-boot + Source Host : 8.140.114.57:3306 + Source Schema : demo-opsli Target Server Type : MySQL Target Server Version : 50733 File Encoding : 65001 - Date: 10/02/2023 14:08:31 + Date: 16/03/2023 21:01:34 */ SET NAMES utf8mb4; @@ -449,7 +449,7 @@ CREATE TABLE `gen_template` ( BEGIN; INSERT INTO `gen_template` VALUES (1398253704724828162, 'Form表单', '0', '默认Form表单', 48, 1313694379541635074, '2021-05-28 20:23:56', 1, '2022-08-07 00:10:00'); INSERT INTO `gen_template` VALUES (1560567740523188225, '测试', '0', '默认Form表单', 0, 1465171199435362305, '2022-08-19 18:01:58', 1465171199435362305, '2022-08-19 18:01:58'); -INSERT INTO `gen_template` VALUES (1587326578832019457, '测试2', '0', '默认Form表单', 0, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); +INSERT INTO `gen_template` VALUES (1587326578832019457, '测试2', '0', '默认Form表单', 1, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2023-03-16 15:33:01'); COMMIT; -- ---------------------------- @@ -501,18 +501,18 @@ INSERT INTO `gen_template_detail` VALUES (1560567740594491393, 15605677405231882 INSERT INTO `gen_template_detail` VALUES (1560567740602880001, 1560567740523188225, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', '${model.tableHumpName}ManagementEdit.vue', '\n\n\n', '0', 0, 1465171199435362305, '2022-08-19 18:01:58', 1465171199435362305, '2022-08-19 18:01:58'); INSERT INTO `gen_template_detail` VALUES (1560567740615462914, 1560567740523188225, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', '${model.tableHumpName}ManagementImport.vue', '\n\n\n', '0', 0, 1465171199435362305, '2022-08-19 18:01:58', 1465171199435362305, '2022-08-19 18:01:58'); INSERT INTO `gen_template_detail` VALUES (1560567740619657217, 1560567740523188225, '1', 'src/views/modules/${moduleName}/${subModuleName}', 'index.vue', '\n\n\n', '0', 0, 1465171199435362305, '2022-08-19 18:01:58', 1465171199435362305, '2022-08-19 18:01:58'); -INSERT INTO `gen_template_detail` VALUES (1587326578840408065, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/entity', '${model.tableHumpName}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, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578848796674, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/mapper', '${model.tableHumpName}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, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578852990978, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/mapper/xml', '${model.tableHumpName}Mapper.xml', '\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\n\n#else\n\n#end\n\n\n', '0', 0, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578869768193, 1587326578832019457, '0', 'org/opsli/api/wrapper/${moduleName}/${subModuleName}', '${model.tableHumpName}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, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578878156802, 1587326578832019457, '0', 'org/opsli/api/web/${moduleName}/${subModuleName}', '${model.tableHumpName}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 org.opsli.api.base.result.ResultWrapper;\nimport org.springframework.web.bind.annotation.*;\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 ResultWrapper\n */\n @GetMapping(\"/get\")\n ResultWrapper<#(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 ResultWrapper\n */\n @GetMapping(\"/findPage\")\n ResultWrapper 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 ResultWrapper\n */\n @PostMapping(\"/insert\")\n ResultWrapper insert(@RequestBody #(data.model.tableHumpName)Model model);\n\n /**\n * #(data.codeTitle) 修改\n * @param model 模型\n * @return ResultWrapper\n */\n @PostMapping(\"/update\")\n ResultWrapper update(@RequestBody #(data.model.tableHumpName)Model model);\n\n /**\n * #(data.codeTitle) 删除\n * @param id ID\n * @return ResultWrapper\n */\n @PostMapping(\"/del\")\n ResultWrapper del(String id);\n\n /**\n * #(data.codeTitle) 批量删除\n * @param ids ID 数组\n * @return ResultWrapper\n */\n @PostMapping(\"/delAll\")\n ResultWrapper delAll(String ids);\n\n /**\n * #(data.codeTitle) Excel 导出认证\n *\n * @param type 类型\n * @param request request\n */\n @GetMapping(\"/excel/auth/{type}\")\n ResultWrapper exportExcelAuth(\n @PathVariable(\"type\") String type,\n HttpServletRequest request);\n\n /**\n * #(data.codeTitle) Excel 导出\n *\n * @param certificate 凭证\n * @param response response\n */\n @GetMapping(\"/excel/export/{certificate}\")\n void exportExcel(\n @PathVariable(\"certificate\") String certificate,\n HttpServletResponse response);\n\n /**\n * #(data.codeTitle) Excel 导入\n * @param request 文件流 request\n * @return ResultWrapper\n */\n @PostMapping(\"/importExcel\")\n ResultWrapper importExcel(MultipartHttpServletRequest request);\n\n}', '0', 0, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578882351106, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/web', '${model.tableHumpName}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 java.util.Optional;\nimport cn.hutool.core.convert.Convert;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport lombok.extern.slf4j.Slf4j;\nimport #(apiPath).base.result.ResultWrapper;\nimport org.opsli.common.annotation.ApiRestController;\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 org.springframework.security.access.prepost.PreAuthorize;\nimport org.opsli.core.log.enums.*;\nimport org.opsli.core.log.annotation.OperateLogger;\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(\"/{ver}/#(data.moduleName)/#(data.subModuleName)\")\n#else\n@ApiRestController(\"/{ver}/#(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 ResultWrapper\n */\n @ApiOperation(value = \"获得单条#(data.codeTitleBrief)\", notes = \"获得单条#(data.codeTitleBrief) - ID\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_select\')\")\n #end\n @Override\n public ResultWrapper<#(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 ResultWrapper.getSuccessResultWrapper(model);\n }\n\n /**\n * #(data.codeTitleBrief) 查询分页\n * @param pageNo 当前页\n * @param pageSize 每页条数\n * @param request request\n * @return ResultWrapper\n */\n @ApiOperation(value = \"获得分页数据\", notes = \"获得分页数据 - 查询构造器\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_select\')\")\n #end\n @Override\n public ResultWrapper findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\n\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(IService.getEntityClass(), 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 ResultWrapper.getSuccessResultWrapper(page.getPageData());\n }\n\n /**\n * #(data.codeTitleBrief) 新增\n * @param model 模型\n * @return ResultWrapper\n */\n @ApiOperation(value = \"新增#(data.codeTitleBrief)数据\", notes = \"新增#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_insert\')\")\n #end\n @OperateLogger(description = \"新增#(data.codeTitleBrief)数据\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.INSERT, db = true)\n @Override\n public ResultWrapper insert(#(data.model.tableHumpName)Model model) {\n // 调用新增方法\n IService.insert(model);\n return ResultWrapper.getSuccessResultWrapperByMsg(\"新增#(data.codeTitleBrief)成功\");\n }\n\n /**\n * #(data.codeTitleBrief) 修改\n * @param model 模型\n * @return ResultWrapper\n */\n @ApiOperation(value = \"修改#(data.codeTitleBrief)数据\", notes = \"修改#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_update\')\")\n #end \n @OperateLogger(description = \"修改#(data.codeTitleBrief)数据\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.UPDATE, db = true)\n @Override\n public ResultWrapper update(#(data.model.tableHumpName)Model model) {\n // 调用修改方法\n IService.update(model);\n return ResultWrapper.getSuccessResultWrapperByMsg(\"修改#(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 @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_delete\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_delete\')\")\n #end \n @OperateLogger(description = \"删除#(data.codeTitleBrief)数据\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.DELETE, db = true)\n @Override\n public ResultWrapper del(String id){\n IService.delete(id);\n return ResultWrapper.getSuccessResultWrapperByMsg(\"删除#(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 @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_delete\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_delete\')\")\n #end \n @OperateLogger(description = \"批量删除#(data.codeTitleBrief)数据\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.DELETE, db = true)\n @Override\n public ResultWrapper delAll(String ids){\n String[] idArray = Convert.toStrArray(ids);\n IService.deleteAll(idArray);\n return ResultWrapper.getSuccessResultWrapperByMsg(\"批量删除#(data.codeTitleBrief)成功\");\n }\n\n /**\n * #(data.codeTitleBrief) Excel 导出认证\n *\n * @param type 类型\n * @param request request\n */\n @ApiOperation(value = \"Excel 导出认证\", notes = \"Excel 导出认证\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAnyAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\', \'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\')\")\n #else\n @PreAuthorize(\"hasAnyAuthority(\'#(data.moduleName.toLowerCase())_export\', \'#(data.moduleName.toLowerCase())_import\')\")\n #end\n @Override\n public ResultWrapper exportExcelAuth(String type, HttpServletRequest request) {\n Optional certificateOptional =\n super.excelExportAuth(type, #(data.model.tableHumpName)RestApi.SUB_TITLE, request);\n if(!certificateOptional.isPresent()){\n return ResultWrapper.getErrorResultWrapper();\n }\n return ResultWrapper.getSuccessResultWrapper(certificateOptional.get());\n }\n\n\n /**\n * #(data.codeTitleBrief) Excel 导出\n * @param response response\n */\n @ApiOperation(value = \"导出Excel\", notes = \"导出Excel\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_export\')\")\n #end\n @OperateLogger(description = \"#(data.codeTitleBrief) 导出Excel\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.SELECT, db = true)\n @Override\n public void exportExcel(String certificate, HttpServletResponse response) {\n // 导出Excel\n super.excelExport(certificate, response);\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 @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_import\')\")\n #end \n @OperateLogger(description = \"#(data.codeTitleBrief) Excel 导入\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.INSERT, db = true)\n @Override\n public ResultWrapper importExcel(MultipartHttpServletRequest request) {\n return super.importExcel(request);\n }\n\n}', '0', 0, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578890739714, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/service/impl', '${model.tableHumpName}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, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578894934017, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/service', 'I${model.tableHumpName}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, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578907516929, 1587326578832019457, '1', 'src/api/${moduleName}/${subModuleName}', '${model.tableHumpName}ManagementApi.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\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 * 导出Excel 目前只支持一层参数传递\n * @param params 参数\n * @returns file\n */\n export async function doExportExcel(params) {\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let authURL = \"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/auth/export\";\n #else\n let authURL = \"/api/v1/#(data.moduleName)/excel/auth/export\";\n #end\n\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let downloadURL = \"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/export/\";\n #else\n let downloadURL = \"/api/v1/#(data.moduleName)/excel/export/\";\n #end\n\n\n // 认证\n const { data } = await request({\n url: authURL,\n method: \"get\",\n params: params,\n });\n \n if (data) {\n // 下载文件\n downloadFileByData(downloadURL + data, params);\n }\n }\n \n /**\n * 下载模版\n * @returns file\n */\n export async function doDownloadTemplate() {\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let authURL = \"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/auth/import-template-export\";\n #else\n let authURL = \"/api/v1/#(data.moduleName)/excel/auth/import-template-export\";\n #end\n\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let downloadURL = \"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/export/\";\n #else\n let downloadURL = \"/api/v1/#(data.moduleName)/excel/export/\";\n #end\n\n // 认证\n const { data } = await request({\n url: authURL,\n method: \"get\",\n });\n \n if (data) {\n // 下载文件\n downloadFileByData(downloadURL + data, {});\n }\n }\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}', '0', 0, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578941071361, 1587326578832019457, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', '${model.tableHumpName}ManagementEdit.vue', '\n\n\n', '0', 0, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578970431489, 1587326578832019457, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', '${model.tableHumpName}ManagementImport.vue', '\n\n\n', '0', 0, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); -INSERT INTO `gen_template_detail` VALUES (1587326578974625794, 1587326578832019457, '1', 'src/views/modules/${moduleName}/${subModuleName}', 'index.vue', '\n\n\n', '0', 0, 1465171199435362305, '2022-11-01 14:12:02', 1465171199435362305, '2022-11-01 14:12:02'); +INSERT INTO `gen_template_detail` VALUES (1636269320320135169, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/entity', '${model.tableHumpName}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, 1465171199435362305, '2023-03-16 15:33:01', 1465171199435362305, '2023-03-16 15:33:01'); +INSERT INTO `gen_template_detail` VALUES (1636269320626319362, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/mapper', '${model.tableHumpName}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, 1465171199435362305, '2023-03-16 15:33:01', 1465171199435362305, '2023-03-16 15:33:01'); +INSERT INTO `gen_template_detail` VALUES (1636269320836034562, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/mapper/xml', '${model.tableHumpName}Mapper.xml', '\n\n#if(data.subModuleName != null && data.subModuleName != \"\")\n\n#else\n\n#end\n\n\n', '0', 0, 1465171199435362305, '2023-03-16 15:33:01', 1465171199435362305, '2023-03-16 15:33:01'); +INSERT INTO `gen_template_detail` VALUES (1636269321125441538, 1587326578832019457, '0', 'org/opsli/api/wrapper/${moduleName}/${subModuleName}', '${model.tableHumpName}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, 1465171199435362305, '2023-03-16 15:33:01', 1465171199435362305, '2023-03-16 15:33:01'); +INSERT INTO `gen_template_detail` VALUES (1636269321419042817, 1587326578832019457, '0', 'org/opsli/api/web/${moduleName}/${subModuleName}', '${model.tableHumpName}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 org.opsli.api.base.result.ResultWrapper;\nimport org.springframework.web.bind.annotation.*;\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 ResultWrapper\n */\n @GetMapping(\"/get\")\n ResultWrapper<#(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 ResultWrapper\n */\n @GetMapping(\"/findPage\")\n ResultWrapper 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 ResultWrapper\n */\n @PostMapping(\"/insert\")\n ResultWrapper insert(@RequestBody #(data.model.tableHumpName)Model model);\n\n /**\n * #(data.codeTitle) 修改\n * @param model 模型\n * @return ResultWrapper\n */\n @PostMapping(\"/update\")\n ResultWrapper update(@RequestBody #(data.model.tableHumpName)Model model);\n\n /**\n * #(data.codeTitle) 删除\n * @param id ID\n * @return ResultWrapper\n */\n @PostMapping(\"/del\")\n ResultWrapper del(String id);\n\n /**\n * #(data.codeTitle) 批量删除\n * @param ids ID 数组\n * @return ResultWrapper\n */\n @PostMapping(\"/delAll\")\n ResultWrapper delAll(String ids);\n\n /**\n * #(data.codeTitle) Excel 导出认证\n *\n * @param type 类型\n * @param request request\n */\n @GetMapping(\"/excel/auth/{type}\")\n ResultWrapper exportExcelAuth(\n @PathVariable(\"type\") String type,\n HttpServletRequest request);\n\n /**\n * #(data.codeTitle) Excel 导出\n *\n * @param certificate 凭证\n * @param response response\n */\n @GetMapping(\"/excel/export/{certificate}\")\n void exportExcel(\n @PathVariable(\"certificate\") String certificate,\n HttpServletResponse response);\n\n /**\n * #(data.codeTitle) Excel 导入\n * @param request 文件流 request\n * @return ResultWrapper\n */\n @PostMapping(\"/importExcel\")\n ResultWrapper importExcel(MultipartHttpServletRequest request);\n\n}', '0', 0, 1465171199435362305, '2023-03-16 15:33:01', 1465171199435362305, '2023-03-16 15:33:01'); +INSERT INTO `gen_template_detail` VALUES (1636269322043994114, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/web', '${model.tableHumpName}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 java.util.Optional;\nimport cn.hutool.core.convert.Convert;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport lombok.extern.slf4j.Slf4j;\nimport #(apiPath).base.result.ResultWrapper;\nimport org.opsli.common.annotation.ApiRestController;\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 org.springframework.security.access.prepost.PreAuthorize;\nimport org.opsli.core.log.enums.*;\nimport org.opsli.core.log.annotation.OperateLogger;\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(\"/{ver}/#(data.moduleName)/#(data.subModuleName)\")\n#else\n@ApiRestController(\"/{ver}/#(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 ResultWrapper\n */\n @ApiOperation(value = \"获得单条#(data.codeTitleBrief)\", notes = \"获得单条#(data.codeTitleBrief) - ID\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_select\')\")\n #end\n @Override\n public ResultWrapper<#(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 ResultWrapper.getSuccessResultWrapper(model);\n }\n\n /**\n * #(data.codeTitleBrief) 查询分页\n * @param pageNo 当前页\n * @param pageSize 每页条数\n * @param request request\n * @return ResultWrapper\n */\n @ApiOperation(value = \"获得分页数据\", notes = \"获得分页数据 - 查询构造器\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_select\')\")\n #end\n @Override\n public ResultWrapper findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\n\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(IService.getEntityClass(), 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 ResultWrapper.getSuccessResultWrapper(page.getPageData());\n }\n\n /**\n * #(data.codeTitleBrief) 新增\n * @param model 模型\n * @return ResultWrapper\n */\n @ApiOperation(value = \"新增#(data.codeTitleBrief)数据\", notes = \"新增#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_insert\')\")\n #end\n @OperateLogger(description = \"新增#(data.codeTitleBrief)数据\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.INSERT, db = true)\n @Override\n public ResultWrapper insert(#(data.model.tableHumpName)Model model) {\n // 调用新增方法\n IService.insert(model);\n return ResultWrapper.getSuccessResultWrapperByMsg(\"新增#(data.codeTitleBrief)成功\");\n }\n\n /**\n * #(data.codeTitleBrief) 修改\n * @param model 模型\n * @return ResultWrapper\n */\n @ApiOperation(value = \"修改#(data.codeTitleBrief)数据\", notes = \"修改#(data.codeTitleBrief)数据\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_update\')\")\n #end \n @OperateLogger(description = \"修改#(data.codeTitleBrief)数据\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.UPDATE, db = true)\n @Override\n public ResultWrapper update(#(data.model.tableHumpName)Model model) {\n // 调用修改方法\n IService.update(model);\n return ResultWrapper.getSuccessResultWrapperByMsg(\"修改#(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 @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_delete\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_delete\')\")\n #end \n @OperateLogger(description = \"删除#(data.codeTitleBrief)数据\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.DELETE, db = true)\n @Override\n public ResultWrapper del(String id){\n IService.delete(id);\n return ResultWrapper.getSuccessResultWrapperByMsg(\"删除#(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 @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_delete\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_delete\')\")\n #end \n @OperateLogger(description = \"批量删除#(data.codeTitleBrief)数据\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.DELETE, db = true)\n @Override\n public ResultWrapper delAll(String ids){\n String[] idArray = Convert.toStrArray(ids);\n IService.deleteAll(idArray);\n return ResultWrapper.getSuccessResultWrapperByMsg(\"批量删除#(data.codeTitleBrief)成功\");\n }\n\n /**\n * #(data.codeTitleBrief) Excel 导出认证\n *\n * @param type 类型\n * @param request request\n */\n @ApiOperation(value = \"Excel 导出认证\", notes = \"Excel 导出认证\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAnyAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\', \'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\')\")\n #else\n @PreAuthorize(\"hasAnyAuthority(\'#(data.moduleName.toLowerCase())_export\', \'#(data.moduleName.toLowerCase())_import\')\")\n #end\n @Override\n public ResultWrapper exportExcelAuth(String type, HttpServletRequest request) {\n Optional certificateOptional =\n super.excelExportAuth(type, #(data.model.tableHumpName)RestApi.SUB_TITLE, request);\n if(!certificateOptional.isPresent()){\n return ResultWrapper.getErrorResultWrapper();\n }\n return ResultWrapper.getSuccessResultWrapper(certificateOptional.get());\n }\n\n\n /**\n * #(data.codeTitleBrief) Excel 导出\n * @param response response\n */\n @ApiOperation(value = \"导出Excel\", notes = \"导出Excel\")\n #if(data.subModuleName != null && data.subModuleName != \"\")\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_export\')\")\n #end\n @OperateLogger(description = \"#(data.codeTitleBrief) 导出Excel\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.SELECT, db = true)\n @Override\n public void exportExcel(String certificate, HttpServletResponse response) {\n // 导出Excel\n super.excelExport(certificate, response);\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 @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\')\")\n #else\n @PreAuthorize(\"hasAuthority(\'#(data.moduleName.toLowerCase())_import\')\")\n #end \n @OperateLogger(description = \"#(data.codeTitleBrief) Excel 导入\",\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.INSERT, db = true)\n @Override\n public ResultWrapper importExcel(MultipartHttpServletRequest request) {\n return super.importExcel(request);\n }\n\n}', '0', 0, 1465171199435362305, '2023-03-16 15:33:01', 1465171199435362305, '2023-03-16 15:33:01'); +INSERT INTO `gen_template_detail` VALUES (1636269322362761217, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/service/impl', '${model.tableHumpName}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, 1465171199435362305, '2023-03-16 15:33:02', 1465171199435362305, '2023-03-16 15:33:02'); +INSERT INTO `gen_template_detail` VALUES (1636269322618613761, 1587326578832019457, '0', '${packageName}/${moduleName}/${subModuleName}/service', 'I${model.tableHumpName}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, 1465171199435362305, '2023-03-16 15:33:02', 1465171199435362305, '2023-03-16 15:33:02'); +INSERT INTO `gen_template_detail` VALUES (1636269323503611906, 1587326578832019457, '1', 'src/api/${moduleName}/${subModuleName}', '${model.tableHumpName}ManagementApi.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\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 * 导出Excel 目前只支持一层参数传递\n * @param params 参数\n * @returns file\n */\n export async function doExportExcel(params) {\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let authURL = \"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/auth/export\";\n #else\n let authURL = \"/api/v1/#(data.moduleName)/excel/auth/export\";\n #end\n\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let downloadURL = \"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/export/\";\n #else\n let downloadURL = \"/api/v1/#(data.moduleName)/excel/export/\";\n #end\n\n\n // 认证\n const { data } = await request({\n url: authURL,\n method: \"get\",\n params: params,\n });\n \n if (data) {\n // 下载文件\n downloadFileByData(downloadURL + data, params);\n }\n }\n \n /**\n * 下载模版\n * @returns file\n */\n export async function doDownloadTemplate() {\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let authURL = \"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/auth/import-template-export\";\n #else\n let authURL = \"/api/v1/#(data.moduleName)/excel/auth/import-template-export\";\n #end\n\n #if(data.subModuleName != null && data.subModuleName != \"\")\n let downloadURL = \"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/export/\";\n #else\n let downloadURL = \"/api/v1/#(data.moduleName)/excel/export/\";\n #end\n\n // 认证\n const { data } = await request({\n url: authURL,\n method: \"get\",\n });\n \n if (data) {\n // 下载文件\n downloadFileByData(downloadURL + data, {});\n }\n }\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}', '0', 0, 1465171199435362305, '2023-03-16 15:33:02', 1465171199435362305, '2023-03-16 15:33:02'); +INSERT INTO `gen_template_detail` VALUES (1636269323784630273, 1587326578832019457, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', '${model.tableHumpName}ManagementEdit.vue', '\n\n\n', '0', 0, 1465171199435362305, '2023-03-16 15:33:02', 1465171199435362305, '2023-03-16 15:33:02'); +INSERT INTO `gen_template_detail` VALUES (1636269324023705602, 1587326578832019457, '1', 'src/views/modules/${moduleName}/${subModuleName}/components', '${model.tableHumpName}ManagementImport.vue', '\n\n\n', '0', 0, 1465171199435362305, '2023-03-16 15:33:02', 1465171199435362305, '2023-03-16 15:33:02'); +INSERT INTO `gen_template_detail` VALUES (1636269324262780929, 1587326578832019457, '1', 'src/views/modules/${moduleName}/${subModuleName}', 'index.vue', '\n\n\n', '0', 0, 1465171199435362305, '2023-03-16 15:33:02', 1465171199435362305, '2023-03-16 15:33:02'); COMMIT; -- ---------------------------- @@ -548,6 +548,16 @@ CREATE TABLE `operation_log` ( KEY `idx_tenant` (`tenant_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='业务操作日志'; +-- ---------------------------- +-- Records of operation_log +-- ---------------------------- +BEGIN; +INSERT INTO `operation_log` VALUES (1636269325479129089, '0', '09', 'org.opsli.modulars.generator.template.web.GenTemplateRestController.updateAndDetail', '[{\"izApi\":false,\"remark\":\"默认Form表单\",\"updateTime\":1667283122000,\"version\":0,\"tableType\":\"0\",\"tempName\":\"测试2\",\"createBy\":\"1465171199435362305\",\"izManual\":false,\"createTime\":1667283122000,\"updateBy\":\"1465171199435362305\",\"detailList\":[{\"fileName\":\"${model.tableHumpName}Entity.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1587326578832019457\",\"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\":\"${model.tableHumpName}Mapper.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1587326578832019457\",\"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\":\"${model.tableHumpName}Mapper.xml\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1587326578832019457\",\"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.tableHumpName}Model.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1587326578832019457\",\"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\":\"${model.tableHumpName}RestApi.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1587326578832019457\",\"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 org.opsli.api.base.result.ResultWrapper;\\nimport org.springframework.web.bind.annotation.*;\\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 ResultWrapper\\n */\\n @GetMapping(\\\"/get\\\")\\n ResultWrapper<#(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 ResultWrapper\\n */\\n @GetMapping(\\\"/findPage\\\")\\n ResultWrapper 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 ResultWrapper\\n */\\n @PostMapping(\\\"/insert\\\")\\n ResultWrapper insert(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 修改\\n * @param model 模型\\n * @return ResultWrapper\\n */\\n @PostMapping(\\\"/update\\\")\\n ResultWrapper update(@RequestBody #(data.model.tableHumpName)Model model);\\n\\n /**\\n * #(data.codeTitle) 删除\\n * @param id ID\\n * @return ResultWrapper\\n */\\n @PostMapping(\\\"/del\\\")\\n ResultWrapper del(String id);\\n\\n /**\\n * #(data.codeTitle) 批量删除\\n * @param ids ID 数组\\n * @return ResultWrapper\\n */\\n @PostMapping(\\\"/delAll\\\")\\n ResultWrapper delAll(String ids);\\n\\n /**\\n * #(data.codeTitle) Excel 导出认证\\n *\\n * @param type 类型\\n * @param request request\\n */\\n @GetMapping(\\\"/excel/auth/{type}\\\")\\n ResultWrapper exportExcelAuth(\\n @PathVariable(\\\"type\\\") String type,\\n HttpServletRequest request);\\n\\n /**\\n * #(data.codeTitle) Excel 导出\\n *\\n * @param certificate 凭证\\n * @param response response\\n */\\n @GetMapping(\\\"/excel/export/{certificate}\\\")\\n void exportExcel(\\n @PathVariable(\\\"certificate\\\") String certificate,\\n HttpServletResponse response);\\n\\n /**\\n * #(data.codeTitle) Excel 导入\\n * @param request 文件流 request\\n * @return ResultWrapper\\n */\\n @PostMapping(\\\"/importExcel\\\")\\n ResultWrapper importExcel(MultipartHttpServletRequest request);\\n\\n}\"},{\"fileName\":\"${model.tableHumpName}RestController.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1587326578832019457\",\"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 java.util.Optional;\\nimport cn.hutool.core.convert.Convert;\\nimport io.swagger.annotations.Api;\\nimport io.swagger.annotations.ApiOperation;\\nimport lombok.extern.slf4j.Slf4j;\\nimport #(apiPath).base.result.ResultWrapper;\\nimport org.opsli.common.annotation.ApiRestController;\\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 org.springframework.security.access.prepost.PreAuthorize;\\nimport org.opsli.core.log.enums.*;\\nimport org.opsli.core.log.annotation.OperateLogger;\\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(\\\"/{ver}/#(data.moduleName)/#(data.subModuleName)\\\")\\n#else\\n@ApiRestController(\\\"/{ver}/#(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 ResultWrapper\\n */\\n @ApiOperation(value = \\\"获得单条#(data.codeTitleBrief)\\\", notes = \\\"获得单条#(data.codeTitleBrief) - ID\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\')\\\")\\n #else\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_select\')\\\")\\n #end\\n @Override\\n public ResultWrapper<#(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 ResultWrapper.getSuccessResultWrapper(model);\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 查询分页\\n * @param pageNo 当前页\\n * @param pageSize 每页条数\\n * @param request request\\n * @return ResultWrapper\\n */\\n @ApiOperation(value = \\\"获得分页数据\\\", notes = \\\"获得分页数据 - 查询构造器\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_select\')\\\")\\n #else\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_select\')\\\")\\n #end\\n @Override\\n public ResultWrapper findPage(Integer pageNo, Integer pageSize, HttpServletRequest request) {\\n\\n QueryBuilder<#(data.model.tableHumpName)> queryBuilder = new WebQueryBuilder<>(IService.getEntityClass(), 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 ResultWrapper.getSuccessResultWrapper(page.getPageData());\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 新增\\n * @param model 模型\\n * @return ResultWrapper\\n */\\n @ApiOperation(value = \\\"新增#(data.codeTitleBrief)数据\\\", notes = \\\"新增#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_insert\')\\\")\\n #else\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_insert\')\\\")\\n #end\\n @OperateLogger(description = \\\"新增#(data.codeTitleBrief)数据\\\",\\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.INSERT, db = true)\\n @Override\\n public ResultWrapper insert(#(data.model.tableHumpName)Model model) {\\n // 调用新增方法\\n IService.insert(model);\\n return ResultWrapper.getSuccessResultWrapperByMsg(\\\"新增#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) 修改\\n * @param model 模型\\n * @return ResultWrapper\\n */\\n @ApiOperation(value = \\\"修改#(data.codeTitleBrief)数据\\\", notes = \\\"修改#(data.codeTitleBrief)数据\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_update\')\\\")\\n #else\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_update\')\\\")\\n #end \\n @OperateLogger(description = \\\"修改#(data.codeTitleBrief)数据\\\",\\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.UPDATE, db = true)\\n @Override\\n public ResultWrapper update(#(data.model.tableHumpName)Model model) {\\n // 调用修改方法\\n IService.update(model);\\n return ResultWrapper.getSuccessResultWrapperByMsg(\\\"修改#(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 @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_delete\')\\\")\\n #else\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_delete\')\\\")\\n #end \\n @OperateLogger(description = \\\"删除#(data.codeTitleBrief)数据\\\",\\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.DELETE, db = true)\\n @Override\\n public ResultWrapper del(String id){\\n IService.delete(id);\\n return ResultWrapper.getSuccessResultWrapperByMsg(\\\"删除#(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 @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_delete\')\\\")\\n #else\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_delete\')\\\")\\n #end \\n @OperateLogger(description = \\\"批量删除#(data.codeTitleBrief)数据\\\",\\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.DELETE, db = true)\\n @Override\\n public ResultWrapper delAll(String ids){\\n String[] idArray = Convert.toStrArray(ids);\\n IService.deleteAll(idArray);\\n return ResultWrapper.getSuccessResultWrapperByMsg(\\\"批量删除#(data.codeTitleBrief)成功\\\");\\n }\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出认证\\n *\\n * @param type 类型\\n * @param request request\\n */\\n @ApiOperation(value = \\\"Excel 导出认证\\\", notes = \\\"Excel 导出认证\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @PreAuthorize(\\\"hasAnyAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\', \'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\')\\\")\\n #else\\n @PreAuthorize(\\\"hasAnyAuthority(\'#(data.moduleName.toLowerCase())_export\', \'#(data.moduleName.toLowerCase())_import\')\\\")\\n #end\\n @Override\\n public ResultWrapper exportExcelAuth(String type, HttpServletRequest request) {\\n Optional certificateOptional =\\n super.excelExportAuth(type, #(data.model.tableHumpName)RestApi.SUB_TITLE, request);\\n if(!certificateOptional.isPresent()){\\n return ResultWrapper.getErrorResultWrapper();\\n }\\n return ResultWrapper.getSuccessResultWrapper(certificateOptional.get());\\n }\\n\\n\\n /**\\n * #(data.codeTitleBrief) Excel 导出\\n * @param response response\\n */\\n @ApiOperation(value = \\\"导出Excel\\\", notes = \\\"导出Excel\\\")\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_export\')\\\")\\n #else\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_export\')\\\")\\n #end\\n @OperateLogger(description = \\\"#(data.codeTitleBrief) 导出Excel\\\",\\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.SELECT, db = true)\\n @Override\\n public void exportExcel(String certificate, HttpServletResponse response) {\\n // 导出Excel\\n super.excelExport(certificate, response);\\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 @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import\')\\\")\\n #else\\n @PreAuthorize(\\\"hasAuthority(\'#(data.moduleName.toLowerCase())_import\')\\\")\\n #end \\n @OperateLogger(description = \\\"#(data.codeTitleBrief) Excel 导入\\\",\\n module = ModuleEnum.MODULE_UNKNOWN, operationType = OperationTypeEnum.INSERT, db = true)\\n @Override\\n public ResultWrapper importExcel(MultipartHttpServletRequest request) {\\n return super.importExcel(request);\\n }\\n\\n}\"},{\"fileName\":\"${model.tableHumpName}ServiceImpl.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1587326578832019457\",\"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\":\"I${model.tableHumpName}Service.java\",\"izApi\":false,\"type\":\"0\",\"version\":0,\"parentId\":\"1587326578832019457\",\"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\":\"${model.tableHumpName}ManagementApi.js\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1587326578832019457\",\"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\\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 * 导出Excel 目前只支持一层参数传递\\n * @param params 参数\\n * @returns file\\n */\\n export async function doExportExcel(params) {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let authURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/auth/export\\\";\\n #else\\n let authURL = \\\"/api/v1/#(data.moduleName)/excel/auth/export\\\";\\n #end\\n\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let downloadURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/export/\\\";\\n #else\\n let downloadURL = \\\"/api/v1/#(data.moduleName)/excel/export/\\\";\\n #end\\n\\n\\n // 认证\\n const { data } = await request({\\n url: authURL,\\n method: \\\"get\\\",\\n params: params,\\n });\\n \\n if (data) {\\n // 下载文件\\n downloadFileByData(downloadURL + data, params);\\n }\\n }\\n \\n /**\\n * 下载模版\\n * @returns file\\n */\\n export async function doDownloadTemplate() {\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let authURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/auth/import-template-export\\\";\\n #else\\n let authURL = \\\"/api/v1/#(data.moduleName)/excel/auth/import-template-export\\\";\\n #end\\n\\n #if(data.subModuleName != null && data.subModuleName != \\\"\\\")\\n let downloadURL = \\\"/api/v1/#(data.moduleName)/#(data.subModuleName)/excel/export/\\\";\\n #else\\n let downloadURL = \\\"/api/v1/#(data.moduleName)/excel/export/\\\";\\n #end\\n\\n // 认证\\n const { data } = await request({\\n url: authURL,\\n method: \\\"get\\\",\\n });\\n \\n if (data) {\\n // 下载文件\\n downloadFileByData(downloadURL + data, {});\\n }\\n }\\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}\"},{\"fileName\":\"${model.tableHumpName}ManagementEdit.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1587326578832019457\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"${model.tableHumpName}ManagementImport.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1587326578832019457\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}/components\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"},{\"fileName\":\"index.vue\",\"izApi\":false,\"type\":\"1\",\"version\":0,\"parentId\":\"1587326578832019457\",\"path\":\"src/views/modules/${moduleName}/${subModuleName}\",\"izManual\":false,\"ignoreFileName\":\"0\",\"fileContent\":\"\\n\\n\\n\"}],\"id\":\"1587326578832019457\"}]', 1465171199435362305, 'admin', '系统管理员', '\'系统管理员\'=> 修改代码模板数据', 'update', 1382, '{\"msg\":\"修改代码模板成功\",\"code\":0,\"timestamp\":1678951982064}', 0, '2', 0, 1465171199435362305, '2023-03-16 15:33:02', 1465171199435362305, '2023-03-16 15:33:02'); +INSERT INTO `operation_log` VALUES (1636271746741776386, '0', '06', 'org.opsli.modulars.system.tenant.web.TenantRestController.enableTenant', '[\"1622770870786297857\",\"1\"]', 1, 'system', '超级管理员', '\'超级管理员\'=> 变更租户状态账户', 'update', 231, '{\"msg\":\"请求成功\",\"code\":0,\"timestamp\":1678952559489}', 0, '2', 0, 1, '2023-03-16 15:42:40', 1, '2023-03-16 15:42:40'); +INSERT INTO `operation_log` VALUES (1636271751330344961, '0', '06', 'org.opsli.modulars.system.tenant.web.TenantRestController.enableTenant', '[\"1622770870786297857\",\"0\"]', 1, 'system', '超级管理员', '\'超级管理员\'=> 变更租户状态账户', 'update', 116, '{\"msg\":\"请求成功\",\"code\":0,\"timestamp\":1678952560564}', 0, '2', 0, 1, '2023-03-16 15:42:41', 1, '2023-03-16 15:42:41'); +INSERT INTO `operation_log` VALUES (1636284175458615297, '0', '06', 'org.opsli.modulars.system.tenant.web.TenantRestController.del', '[\"1611211035120865281\"]', 1465171199435362305, 'admin', '系统管理员', '\'系统管理员\'=> 删除租户数据', 'delete', 202, '{\"msg\":\"删除租户成功\",\"code\":0,\"timestamp\":1678955522714}', 0, '2', 0, 1465171199435362305, '2023-03-16 16:32:03', 1465171199435362305, '2023-03-16 16:32:03'); +COMMIT; + -- ---------------------------- -- Table structure for sys_area -- ---------------------------- @@ -4045,6 +4055,7 @@ CREATE TABLE `sys_login_logs` ( KEY `idx_loginfrom` (`login_from`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='登录信息表'; + -- ---------------------------- -- Table structure for sys_logs -- ---------------------------- @@ -4137,42 +4148,6 @@ INSERT INTO `sys_menu` VALUES (1313885644824522754, 4, '0,1460639200696160257,4, INSERT INTO `sys_menu` VALUES (1314066547072872450, 0, '0,1314066547072872450', '首页', NULL, 'home', '0,1', '1', '/', 'Layout', 'index', 1, '0', '0', '0', 13, 1, '2020-10-07 23:54:14', 1, '2021-11-25 13:46:11', '2022-04-29 17:22:11'); INSERT INTO `sys_menu` VALUES (1314066863436640258, 1314066547072872450, '0,1314066547072872450,1314066863436640258', '首页', NULL, 'home', '0,1', '1', 'index', 'views/index/index', NULL, 1, '0', '0', '0', 1, 1, '2020-10-07 23:55:29', 1, '2021-11-24 16:58:05', '2022-04-29 17:28:43'); INSERT INTO `sys_menu` VALUES (1314068325453574145, 0, '0,1314068325453574145', '开发工具', NULL, 'tools', '0', '1', '/deve', 'Layout', NULL, 100, '0', '0', '0', 1, 1, '2020-10-08 00:01:18', 1, '2021-11-26 18:56:20', '2022-04-29 17:22:11'); -INSERT INTO `sys_menu` VALUES (1314071137365307394, 1314068325453574145, '0,1314068325453574145,1314071137365307394', '组件', NULL, '', '0', '1', 'vab', 'EmptyLayout', NULL, 3, '0', '0', '0', 1, 1, '2020-10-08 00:12:28', 1, '2020-11-15 16:36:56', '2022-04-29 17:28:43'); -INSERT INTO `sys_menu` VALUES (1314074765178187777, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314074765178187777', '外链', NULL, NULL, '0', '3', 'https://github.com/hiparker/opsli-boot?utm_source=gold_browser_extension', NULL, NULL, 1, '0', '0', '0', 0, 1, '2020-10-08 00:26:53', 1, '2020-10-08 00:30:21', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314075128635600897, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314075128635600897', '图标', NULL, NULL, '0', '1', 'icon', 'EmptyLayout', NULL, 2, '0', '0', '0', 0, 1, '2020-10-08 00:28:20', 1, '2020-10-08 00:48:16', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314075267769053186, 1314075128635600897, '0,1314068325453574145,1314071137365307394,1314075128635600897,1314075267769053186', '常规图标', NULL, NULL, '0', '1', 'awesomeIcon', 'views/vab/icon/index', NULL, 1, '0', '0', '0', 0, 1, '2020-10-08 00:28:53', 1, '2020-10-08 00:48:19', '2022-04-29 17:30:23'); -INSERT INTO `sys_menu` VALUES (1314075542684708865, 1314075128635600897, '0,1314068325453574145,1314071137365307394,1314075128635600897,1314075542684708865', '小清新图标', NULL, NULL, '0', '1', 'remixIcon', 'views/vab/icon/remixIcon', NULL, 2, '0', '0', '0', 0, 1, '2020-10-08 00:29:58', 1, '2020-10-08 00:48:22', '2022-04-29 17:30:23'); -INSERT INTO `sys_menu` VALUES (1314075764852797442, 1314075128635600897, '0,1314068325453574145,1314071137365307394,1314075128635600897,1314075764852797442', '多彩图标', NULL, NULL, '0', '1', 'colorfulIcon', 'views/vab/icon/colorfulIcon', NULL, 3, '0', '0', '0', 0, 1, '2020-10-08 00:30:51', 1, '2020-10-08 00:48:25', '2022-04-29 17:30:23'); -INSERT INTO `sys_menu` VALUES (1314075970382082050, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314075970382082050', '表格', NULL, NULL, '0', '1', 'table', 'EmptyLayout', NULL, 3, '0', '0', '0', 0, 1, '2020-10-08 00:31:40', 1, '2020-10-08 00:48:31', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314076169481498625, 1314075970382082050, '0,1314068325453574145,1314071137365307394,1314075970382082050,1314076169481498625', '综合表格', NULL, NULL, '0', '1', 'comprehensiveTable', 'views/vab/table/index', NULL, 1, '0', '0', '0', 0, 1, '2020-10-08 00:32:28', 1, '2020-10-08 00:48:34', '2022-04-29 17:30:23'); -INSERT INTO `sys_menu` VALUES (1314076280542474242, 1314075970382082050, '0,1314068325453574145,1314071137365307394,1314075970382082050,1314076280542474242', '行内编辑', NULL, NULL, '0', '1', 'inlineEditTable', 'views/vab/table/inlineEditTable', NULL, 2, '0', '0', '0', 0, 1, '2020-10-08 00:32:54', 1, '2020-10-08 00:32:54', '2022-04-29 17:30:23'); -INSERT INTO `sys_menu` VALUES (1314076678317682689, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314076678317682689', '地图', NULL, NULL, '0', '1', 'map', 'views/vab/map/index', NULL, 4, '0', '0', '0', 0, 1, '2020-10-08 00:34:29', 1, '2020-10-08 00:34:29', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314077008057085954, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314077008057085954', 'WebSocket', NULL, NULL, '0', '1', 'websocket', 'views/vab/webSocket/index', NULL, 5, '0', '0', '0', 0, 1, '2020-10-08 00:35:48', 1, '2020-10-08 00:35:48', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314077108560998402, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314077108560998402', '表单', NULL, NULL, '0', '1', 'form', 'views/vab/form/index', NULL, 6, '0', '0', '0', 0, 1, '2020-10-08 00:36:12', 1, '2020-10-08 00:36:12', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314077229235318786, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314077229235318786', '常用组件', NULL, NULL, '0', '1', 'element', 'views/vab/element/index', NULL, 7, '0', '0', '0', 0, 1, '2020-10-08 00:36:40', 1, '2020-10-08 00:36:52', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314077399507283970, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314077399507283970', '树', NULL, NULL, '0', '1', 'tree', 'views/vab/tree/index', NULL, 8, '0', '0', '0', 0, 1, '2020-10-08 00:37:21', 1, '2020-10-08 00:37:21', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314077518340304897, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314077518340304897', '卡片', NULL, NULL, '0', '1', 'card', 'views/vab/card/index', NULL, 9, '0', '0', '0', 0, 1, '2020-10-08 00:37:49', 1, '2020-10-08 00:37:49', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314077631905280001, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314077631905280001', '滚动侦测', NULL, NULL, '0', '1', 'betterscroll', 'views/vab/betterScroll/index', NULL, 10, '0', '0', '0', 0, 1, '2020-10-08 00:38:16', 1, '2020-10-08 00:38:16', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314077729003417602, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314077729003417602', '验证码', NULL, NULL, '0', '1', 'verify', 'views/vab/verify/index', NULL, 11, '0', '0', '0', 0, 1, '2020-10-08 00:38:40', 1, '2020-10-08 00:38:40', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314120834868060162, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314120834868060162', '放大镜', NULL, NULL, '0', '1', 'magnifier', 'views/vab/magnifier/index', NULL, 12, '0', '0', '0', 0, 1, '2020-10-08 03:29:57', 1, '2020-10-08 03:30:45', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314121004749955073, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314121004749955073', '图表', NULL, NULL, '0', '1', 'echarts', 'views/vab/echarts/index', NULL, 13, '0', '0', '0', 0, 1, '2020-10-08 03:30:37', 1, '2020-10-08 03:30:54', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314121200103858178, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314121200103858178', 'Loading', NULL, NULL, '0', '1', 'loading', 'views/vab/loading/index', NULL, 14, '0', '0', '0', 0, 1, '2020-10-08 03:31:24', 1, '2020-10-08 03:31:24', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314121675192672257, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314121675192672257', '视频播放器', NULL, NULL, '0', '1', 'player', 'views/vab/player/index', NULL, 15, '0', '0', '0', 0, 1, '2020-10-08 03:33:17', 1, '2020-10-08 03:33:17', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314121808793837570, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314121808793837570', 'Markdown编辑器', NULL, NULL, '0', '1', 'markdownEditor', 'views/vab/markdownEditor/index', NULL, 16, '0', '0', '0', 0, 1, '2020-10-08 03:33:49', 1, '2020-10-08 03:33:49', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314121928784486402, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314121928784486402', '富文本编辑器', NULL, NULL, '0', '1', 'editor', 'views/vab/editor/index', NULL, 17, '0', '0', '0', 0, 1, '2020-10-08 03:34:18', 1, '2020-10-08 03:35:21', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314122020136427521, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314122020136427521', '二维码', NULL, NULL, '0', '1', 'qrCode', 'views/vab/qrCode/index', NULL, 18, '0', '0', '0', 0, 1, '2020-10-08 03:34:39', 1, '2020-10-08 03:35:26', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314122123047870466, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314122123047870466', '返回顶部', NULL, NULL, '0', '1', 'backToTop', 'views/vab/backToTop/index', NULL, 20, '0', '0', '0', 0, 1, '2020-10-08 03:35:04', 1, '2020-10-08 03:37:41', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314122353273217025, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314122353273217025', '图像拖拽比对', NULL, NULL, '0', '1', 'imgComparison', 'views/vab/imgComparison/index', NULL, 19, '0', '0', '0', 0, 1, '2020-10-08 03:35:59', 1, '2020-10-08 03:35:59', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314122457908518914, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314122457908518914', '代码生成机', NULL, NULL, '0', '1', 'codeGenerator', 'views/vab/codeGenerator/index', NULL, 21, '0', '0', '0', 1, 1, '2020-10-08 03:36:24', 1313694379541635074, '2020-10-11 17:21:34', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314122556776652802, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314122556776652802', 'markdown阅读器', NULL, NULL, '0', '1', 'markdown', 'views/vab/markdown/index', NULL, 22, '0', '0', '0', 0, 1, '2020-10-08 03:36:47', 1, '2020-10-08 03:37:58', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314122628184678401, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314122628184678401', '小组件', NULL, NULL, '0', '1', 'smallComponents', 'views/vab/smallComponents/index', NULL, 23, '0', '0', '0', 0, 1, '2020-10-08 03:37:04', 1, '2020-10-08 03:38:03', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314122717041008641, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314122717041008641', '上传', NULL, NULL, '0', '1', 'upload', 'views/vab/upload/index', NULL, 24, '0', '0', '0', 0, 1, '2020-10-08 03:37:26', 1, '2020-10-08 03:38:10', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314123071354839041, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314123071354839041', 'Sticky吸附', NULL, NULL, '0', '1', 'sticky', 'views/vab/sticky/index', NULL, 25, '0', '0', '0', 0, 1, '2020-10-08 03:38:50', 1, '2020-10-08 03:38:59', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314123272790482945, 1314071137365307394, '0,1314068325453574145,1314071137365307394,1314123272790482945', '错误日志模拟', NULL, NULL, '0', '1', 'errorLog', 'views/vab/errorLog/index', NULL, 26, '0', '0', '0', 0, 1, '2020-10-08 03:39:38', 1, '2020-10-08 03:39:38', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314123690283114498, 1314068325453574145, '0,1314068325453574145,1314123690283114498', '商城', NULL, NULL, '0', '1', 'mall', 'EmptyLayout', NULL, 4, '0', '0', '0', 1, 1, '2020-10-08 03:41:18', 1, '2020-11-15 16:37:13', '2022-04-29 17:28:43'); -INSERT INTO `sys_menu` VALUES (1314123894637993985, 1314123690283114498, '0,1314068325453574145,1314123690283114498,1314123894637993985', '支付', NULL, NULL, '0', '1', 'pay', 'views/mall/pay/index', NULL, 1, '0', '0', '0', 0, 1, '2020-10-08 03:42:06', 1, '2020-10-08 03:42:06', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314123990633029633, 1314123690283114498, '0,1314068325453574145,1314123690283114498,1314123990633029633', '商品列表', NULL, NULL, '0', '1', 'goodsList', 'views/mall/goodsList/index', NULL, 2, '0', '0', '0', 0, 1, '2020-10-08 03:42:29', 1, '2020-10-08 03:43:01', '2022-04-29 17:29:44'); -INSERT INTO `sys_menu` VALUES (1314124102365093890, 1314123690283114498, '0,1314068325453574145,1314123690283114498,1314124102365093890', '商品详情', NULL, NULL, '0', '1', 'goodsDetail', 'views/mall/goodsDetail/index', NULL, 3, '0', '0', '0', 0, 1, '2020-10-08 03:42:56', 1, '2020-10-08 03:42:56', '2022-04-29 17:29:44'); INSERT INTO `sys_menu` VALUES (1314610817013919745, 0, '0,1314610817013919745', '运维工具', NULL, 'laptop-code', '0', '1', '/devops', 'Layout', 'noRedirect', 99, '0', '0', '0', 1, 1, '2020-10-09 11:56:58', 1, '2020-11-13 11:05:54', '2022-04-29 17:22:11'); INSERT INTO `sys_menu` VALUES (1314616518671085570, 1504776412970254338, '0,1504776412970254338,1314616518671085570', '行为日志', NULL, NULL, '0,1', '1', 'logs', 'views/modules/system/operationLogsManagement/index', NULL, 2, '0', '0', '0', 3, 1, '2020-10-09 12:19:37', 1, '2022-07-26 19:33:51', '2022-07-26 19:33:51'); INSERT INTO `sys_menu` VALUES (1314782679522099201, 1314616518671085570, '0,1504776412970254338,1314616518671085570,1314782679522099201', '查看', 'system_op_logs_select', NULL, '0,1', '2', NULL, NULL, NULL, 1, '0', '0', '0', 2, 1, '2020-10-09 23:19:53', 1, '2022-07-26 20:09:12', '2022-07-26 20:09:11'); @@ -4469,42 +4444,6 @@ INSERT INTO `sys_role_menu_ref` VALUES (1465888361674375171, 1314066863436640258 INSERT INTO `sys_role_menu_ref` VALUES (1465888325360091138, 1314066863436640258, 1448924738452385794); INSERT INTO `sys_role_menu_ref` VALUES (1504780316143403010, 1314066863436640258, 1463431580473810945); INSERT INTO `sys_role_menu_ref` VALUES (1505730836832075820, 1314068325453574145, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990356, 1314071137365307394, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990357, 1314074765178187777, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990358, 1314075128635600897, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990359, 1314075267769053186, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990360, 1314075542684708865, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990361, 1314075764852797442, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990362, 1314075970382082050, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990363, 1314076169481498625, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990364, 1314076280542474242, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990365, 1314076678317682689, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990366, 1314077008057085954, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990367, 1314077108560998402, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990368, 1314077229235318786, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990369, 1314077399507283970, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990370, 1314077518340304897, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990371, 1314077631905280001, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990372, 1314077729003417602, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990373, 1314120834868060162, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990374, 1314121004749955073, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990375, 1314121200103858178, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990376, 1314121675192672257, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990377, 1314121808793837570, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990378, 1314121928784486402, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990379, 1314122020136427521, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099201, 1314122123047870466, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836894990380, 1314122353273217025, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099202, 1314122457908518914, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099203, 1314122556776652802, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099204, 1314122628184678401, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099205, 1314122717041008641, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099206, 1314123071354839041, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099207, 1314123272790482945, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099208, 1314123690283114498, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099209, 1314123894637993985, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099210, 1314123990633029633, 2); -INSERT INTO `sys_role_menu_ref` VALUES (1505730836962099211, 1314124102365093890, 2); INSERT INTO `sys_role_menu_ref` VALUES (1505730836832075816, 1314610817013919745, 2); INSERT INTO `sys_role_menu_ref` VALUES (1505730836832075814, 1314616518671085570, 2); INSERT INTO `sys_role_menu_ref` VALUES (1504780316210511897, 1314616518671085570, 1463431580473810945); @@ -4749,11 +4688,11 @@ INSERT INTO `sys_tenant` VALUES (1595243760765210626, '高老师', '0', NULL, '0 INSERT INTO `sys_tenant` VALUES (1601907714795081729, '231321', '0', NULL, '0', 0, 1465171199435362305, '2022-12-11 19:52:16', 1465171199435362305, '2022-12-11 19:52:16', '2022-12-11 19:52:15'); INSERT INTO `sys_tenant` VALUES (1601907816146243586, 'zhouwenchuntest', '0', NULL, '0', 0, 1465171199435362305, '2022-12-11 19:52:40', 1465171199435362305, '2022-12-11 19:52:40', '2022-12-11 19:52:40'); INSERT INTO `sys_tenant` VALUES (1602474137640603649, '贾洪振', '0', NULL, '0', 0, 1465171199435362305, '2022-12-13 09:23:02', 1465171199435362305, '2022-12-13 09:23:02', '2022-12-13 09:23:01'); -INSERT INTO `sys_tenant` VALUES (1611211035120865281, '往npm包里投毒真有你的', '0', '往npm包里投毒真有你的', '0', 0, 1465171199435362305, '2023-01-06 12:00:20', 1465171199435362305, '2023-01-06 12:00:20', '2023-01-06 12:00:20'); +INSERT INTO `sys_tenant` VALUES (1611211035120865281, '往npm包里投毒真有你的', '0', '往npm包里投毒真有你的', '1', 0, 1465171199435362305, '2023-01-06 12:00:20', 1465171199435362305, '2023-01-06 12:00:20', '2023-03-16 16:32:02'); INSERT INTO `sys_tenant` VALUES (1612628029653225473, '通天塔', '0', NULL, '0', 0, 1465171199435362305, '2023-01-10 09:50:58', 1465171199435362305, '2023-01-10 09:50:58', '2023-01-10 09:50:58'); INSERT INTO `sys_tenant` VALUES (1620957150565208065, 'itower', '0', NULL, '0', 0, 1465171199435362305, '2023-02-02 09:27:55', 1465171199435362305, '2023-02-02 09:27:55', '2023-02-02 09:27:55'); INSERT INTO `sys_tenant` VALUES (1621920063346020354, '11', '0', '111', '0', 0, 1465171199435362305, '2023-02-05 01:14:12', 1465171199435362305, '2023-02-05 01:14:12', '2023-02-05 01:14:11'); -INSERT INTO `sys_tenant` VALUES (1622770870786297857, 'test1', '0', '1231', '0', 0, 1465171199435362305, '2023-02-07 09:35:00', 1465171199435362305, '2023-02-07 09:35:00', '2023-02-07 09:34:59'); +INSERT INTO `sys_tenant` VALUES (1622770870786297857, 'test1', '0', '1231', '0', 0, 1465171199435362305, '2023-02-07 09:35:00', 1465171199435362305, '2023-02-07 09:35:00', '2023-03-16 15:42:40'); COMMIT; -- ---------------------------- @@ -4794,11 +4733,11 @@ CREATE TABLE `sys_user` ( -- Records of sys_user -- ---------------------------- BEGIN; -INSERT INTO `sys_user` VALUES (1, 'system', 'TS{MTY1OTM2NzA0MjMzOA==}$2a$10$FtVMZrf/LeM4ikU2ZXO8XuhmRDpJmIxLVm6Fa3ZEM8jVgZ2CFhuH6', '2', '1', '超级管理员', '15321010110', '112', 'http://upload.bedebug.com/20220802/1660928576913664278HC1G.jpg', '101.254.99.178', 'meet.parker@foxmail.com', '没有自学能力的人没有未来', '', '0', '0', 0, '1', '0', 95, 1, '2020-09-25 15:03:22', 1, '2021-05-04 01:59:11', '2022-12-21 12:28:05'); +INSERT INTO `sys_user` VALUES (1, 'system', 'TS{MTY1OTM2NzA0MjMzOA==}$2a$10$FtVMZrf/LeM4ikU2ZXO8XuhmRDpJmIxLVm6Fa3ZEM8jVgZ2CFhuH6', '2', '1', '超级管理员', '15321010110', '112', 'http://upload.bedebug.com/20220802/1660928576913664278HC1G.jpg', '127.0.0.1', 'meet.parker@foxmail.com', '没有自学能力的人没有未来', '', '0', '0', 0, '1', '0', 95, 1, '2020-09-25 15:03:22', 1, '2021-05-04 01:59:11', '2023-03-15 18:07:53'); INSERT INTO `sys_user` VALUES (1313694379541635074, 'demo', 'TS{MTY1ODI5ODUzMzMwOA==}$2a$10$TS0LnHPhQT87rEpFi1A60.BeTQ80vCRGGL.5CPTqb61eCzP8HzueK', '2', '1', '租户内部管理员', '13301225424', 'test_001', 'http://upload.bedebug.com/20221110/1668464727159353180HTZ2.', '114.254.3.131', 'meet.parker1@foxmail.com', NULL, NULL, '1', '0', 1, '0', '0', 6, 1, '2020-10-06 23:15:22', 1465879900211294210, '2021-12-01 16:42:13', '2023-02-09 17:12:54'); INSERT INTO `sys_user` VALUES (1315218541317750785, 'zhangsan', 'TS{MTY1ODI5ODUzMzMwOA==}$2a$10$TS0LnHPhQT87rEpFi1A60.BeTQ80vCRGGL.5CPTqb61eCzP8HzueK', '2', '1', '张三', '55555555555', '123123', NULL, '', 'meet.parker3@foxmail.com', NULL, NULL, '1', '0', 1, '0', '0', 3, 1, '2020-10-11 17:11:50', 1, '2021-06-11 17:44:11', '2022-08-09 14:01:18'); INSERT INTO `sys_user` VALUES (1315224823500120066, 'lyf', 'TS{MTY1ODI5ODUzMzMwOA==}$2a$10$TS0LnHPhQT87rEpFi1A60.BeTQ80vCRGGL.5CPTqb61eCzP8HzueK', '2', '1', '刘亦菲', '44444444444', '0101001', NULL, '', 'meet.parker4@foxmail.com', NULL, NULL, '1', '0', 1, '0', '0', 0, 1313694379541635074, '2020-10-11 17:36:48', 1313694379541635074, '2020-10-11 17:36:48', '2022-08-09 14:01:22'); -INSERT INTO `sys_user` VALUES (1465171199435362305, 'admin', 'TS{MTY1OTM2NDMzMzM5Nw==}$2a$10$2GTqJeztWRLOYDoB2EStm.FoncwpHG4GGtieD7qZbND1.cwjXx34u', '2', '1', '系统管理员', '33333333333', '01001', 'http://upload.bedebug.com/20230129/1677023327994752686FP9H.', '101.254.99.178', 'meet.parker5@foxmail.com', NULL, NULL, '1', '0', 0, '1', '0', 6, 1, '2021-11-29 12:10:10', 1, '2022-07-26 20:16:02', '2023-02-10 13:35:35'); +INSERT INTO `sys_user` VALUES (1465171199435362305, 'admin', 'TS{MTY1OTM2NDMzMzM5Nw==}$2a$10$2GTqJeztWRLOYDoB2EStm.FoncwpHG4GGtieD7qZbND1.cwjXx34u', '2', '1', '系统管理员', '33333333333', '01001', 'http://upload.bedebug.com/20230129/1677023327994752686FP9H.', '127.0.0.1', 'meet.parker5@foxmail.com', NULL, NULL, '1', '0', 0, '1', '0', 6, 1, '2021-11-29 12:10:10', 1, '2022-07-26 20:16:02', '2023-03-16 14:14:26'); INSERT INTO `sys_user` VALUES (1465879900211294210, 'tenant', 'TS{MTY1ODI5ODUzMzMwOA==}$2a$10$TS0LnHPhQT87rEpFi1A60.BeTQ80vCRGGL.5CPTqb61eCzP8HzueK', '2', '1', '租户管理员', '17310558930', '123123', 'http://upload.bedebug.com/20221009/16672105798907736096ML5.', '223.71.37.166', 'meet.parker2@foxmail.com', NULL, NULL, '0', '1', 1, '0', '0', 1, 1, '2021-12-01 11:06:17', 1, '2021-12-01 11:06:53', '2023-02-08 18:16:16'); INSERT INTO `sys_user` VALUES (1465886867659096066, 'dept', 'TS{MTY1ODI5ODUzMzMwOA==}$2a$10$TS0LnHPhQT87rEpFi1A60.BeTQ80vCRGGL.5CPTqb61eCzP8HzueK', '2', '1', '部门管理员', '22222222222', '123213213', 'http://upload.bedebug.com/20220809/16610489376695984679HUA.jpg', '120.224.166.16', 'meet.parker6@foxmail.com', NULL, NULL, '1', '0', 1, '0', '0', 0, 1313694379541635074, '2021-12-01 11:33:59', 1313694379541635074, '2021-12-01 11:33:59', '2023-02-09 14:51:23'); INSERT INTO `sys_user` VALUES (1465991640378986498, 'songyi', 'TS{MTY1ODI5ODUzMzMwOA==}$2a$10$TS0LnHPhQT87rEpFi1A60.BeTQ80vCRGGL.5CPTqb61eCzP8HzueK', '2', '1', '宋轶', '11111111111', '432431', 'http://upload.bedebug.com/20220822/166175310218424251KMW8P.jpg', '116.30.140.40', 'meet.parker7@foxmail.com', NULL, NULL, '1', '0', 1, '0', '0', 0, 1465886867659096066, '2021-12-01 18:30:19', 1465886867659096066, '2021-12-01 18:30:19', '2023-02-10 08:58:27'); -- Gitee