From 7517810dc0cfce81fa61e6441cd942cc11aaf757 Mon Sep 17 00:00:00 2001 From: Parker Date: Sun, 20 Dec 2020 20:57:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E5=99=A8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E5=AF=BC=E5=85=A5=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../opsli/core/creater/msg/CreaterMsg.java | 6 +- .../creater/strategy/create/CodeBuilder.java | 2 + .../create/foreend/VueCodeBuilder.java | 70 +++++-- .../opsli/core/creater/utils/EnjoyUtil.java | 2 - .../table/service/impl/TableServiceImpl.java | 6 + .../src/main/resources/creater.yaml | 2 +- .../backend/web/TemplateRestController.html | 10 +- .../tpl/foreend/api/TemplateApi.html | 55 ++++++ .../tpl/foreend/components/TemplateEdit.html | 6 +- .../foreend/components/TemplateImport.html | 182 ++++++++++++++++++ .../tpl/foreend/index/TemplateIndex.html | 42 +++- .../resources/tpl/readme/TemplateReadMe.html | 4 +- 12 files changed, 359 insertions(+), 28 deletions(-) create mode 100755 opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/components/TemplateImport.html diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/msg/CreaterMsg.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/msg/CreaterMsg.java index 06483789..816bdd4f 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/msg/CreaterMsg.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/msg/CreaterMsg.java @@ -47,6 +47,8 @@ public enum CreaterMsg implements BaseMsg { */ EXCEPTION_IMPORT_NULL(50120,"未选中表,无法导入"), EXCEPTION_IMPORT_TABLE_NULL(50121,"暂无{}该表"), + EXCEPTION_IMPORT_FIELD_NULL(50122,"暂未获得表字段"), + /** * 生成 @@ -58,8 +60,8 @@ public enum CreaterMsg implements BaseMsg { ; - private int code; - private String message; + private final int code; + private final String message; CreaterMsg(int code, String message){ this.code = code; diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/strategy/create/CodeBuilder.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/strategy/create/CodeBuilder.java index acb38961..78ed7e59 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/strategy/create/CodeBuilder.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/strategy/create/CodeBuilder.java @@ -126,6 +126,8 @@ public enum CodeBuilder { fileList.add(VueCodeBuilder.INSTANCE.createIndex(builderModel, dataStr)); // edit fileList.add(VueCodeBuilder.INSTANCE.createEdit(builderModel, dataStr)); + // import + fileList.add(VueCodeBuilder.INSTANCE.createImport(builderModel, dataStr)); // 前api fileList.add(VueCodeBuilder.INSTANCE.createApi(builderModel, dataStr)); diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/strategy/create/foreend/VueCodeBuilder.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/strategy/create/foreend/VueCodeBuilder.java index 556fa250..5306910a 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/strategy/create/foreend/VueCodeBuilder.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/strategy/create/foreend/VueCodeBuilder.java @@ -75,11 +75,11 @@ public enum VueCodeBuilder { List briefQueryList = new ArrayList<>(2); // 更多检索 List moreQueryList = new ArrayList<>(); - for (int i = 0; i < columnList.size(); i++) { - if(StringUtils.isNotBlank(columnList.get(i).getQueryType()) && - columnList.get(i).getIzShowList().equals(DictType.NO_YES_YES.getCode()) - ){ - queryList.add(columnList.get(i)); + for (CreaterTableColumnModel createrTableColumnModel : columnList) { + if (StringUtils.isNotBlank(createrTableColumnModel.getQueryType()) && + createrTableColumnModel.getIzShowList().equals(DictType.NO_YES_YES.getCode()) + ) { + queryList.add(createrTableColumnModel); } } // 筛选数据 @@ -130,7 +130,7 @@ public enum VueCodeBuilder { List columnList = builderModel.getModel().getColumnList(); List> formList = new ArrayList<>(); Map> valiDict = new HashMap<>(); - Set validataTypes = new HashSet<>(); + Set validateTypesSet = new HashSet<>(); // 处理验证数据 for (CreaterTableColumnModel columnModel : columnList) { // 数据库字段名转驼峰 @@ -159,7 +159,7 @@ public enum VueCodeBuilder { ); } - validataTypes.addAll(validateTypeList); + validateTypesSet.addAll(validateTypeList); valiDict.put(columnModel.getFieldName(), validateTypeList); } } @@ -188,17 +188,17 @@ public enum VueCodeBuilder { } } - StringBuilder validataTypeStb = new StringBuilder(); - for (String validataType : validataTypes) { - validataTypeStb.append(validataType); - validataTypeStb.append(", "); + StringBuilder validateTypeStb = new StringBuilder(); + for (String validateType : validateTypesSet) { + validateTypeStb.append(validateType); + validateTypeStb.append(", "); } String codeStr = EnjoyUtil.render("/foreend/components/TemplateEdit.html", this.createKv(builderModel) .set("formList", formList) .set("valiDict", valiDict) - .set("validataTypes", validataTypeStb.toString()) + .set("validateTypes", validateTypeStb.toString()) ); StringBuilder path = new StringBuilder(); @@ -223,6 +223,52 @@ public enum VueCodeBuilder { return entityMap; } + + /** + * 生成 Import + * @param builderModelTmp + * @return + */ + public Map createImport(CreaterBuilderModel builderModelTmp, String dataStr){ + CreaterBuilderModel builderModel = + WrapperUtil.cloneTransformInstance(builderModelTmp, CreaterBuilderModel.class); + List columnList = builderModel.getModel().getColumnList(); + // 处理数据 + for (CreaterTableColumnModel columnModel : columnList) { + // 数据库字段名转驼峰 + columnModel.setFieldName( + HumpUtil.underlineToHump( + columnModel.getFieldName() + ) + ); + } + + String codeStr = EnjoyUtil.render("/foreend/components/TemplateImport.html", + this.createKv(builderModel) + ); + + StringBuilder path = new StringBuilder(); + path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.FOREEND_PATH) + .append("/").append("vue") + .append("/").append("views").append("/").append("modules") + .append("/").append(builderModel.getModuleName()) + .append("/").append("components").append("/"); + if(StringUtils.isNotBlank(builderModel.getSubModuleName())){ + path = new StringBuilder(); + path.append(CodeBuilder.BASE_PATH).append(dataStr).append(CodeBuilder.FOREEND_PATH) + .append("/").append("vue") + .append("/").append("views").append("/").append("modules") + .append("/").append(builderModel.getModuleName()) + .append("/").append(builderModel.getSubModuleName()) + .append("/").append("components").append("/"); + } + Map entityMap = new HashMap<>(); + entityMap.put(ZipUtils.FILE_PATH, path.toString()); + entityMap.put(ZipUtils.FILE_NAME, builderModel.getModel().getTableName()+"ManagementImport.vue"); + entityMap.put(ZipUtils.FILE_DATA, codeStr); + return entityMap; + } + /** * 生成 Api * @param builderModelTmp diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/utils/EnjoyUtil.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/utils/EnjoyUtil.java index d9824195..08148f59 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/utils/EnjoyUtil.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/core/creater/utils/EnjoyUtil.java @@ -27,8 +27,6 @@ public final class EnjoyUtil { */ public static String render(String templateFileName, Kv kv) { - //ClassPathResource resource = new ClassPathResource(templateFileName); - // (InputStream inputStream = resource.getInputStream()) String str = ""; ClassPathResource resource = new ClassPathResource(BASE_PATH + templateFileName); try (InputStream inputStream = resource.getInputStream()){ diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/service/impl/TableServiceImpl.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/service/impl/TableServiceImpl.java index e00e7b4b..8ea02857 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/service/impl/TableServiceImpl.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/service/impl/TableServiceImpl.java @@ -15,6 +15,7 @@ */ package org.opsli.modulars.creater.table.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import org.opsli.common.enums.DictType; import org.opsli.common.utils.WrapperUtil; @@ -214,6 +215,11 @@ public class TableServiceImpl extends CrudServiceImpl columns = ImportTableUtil.findColumns(tableName); + if(CollUtil.isEmpty(columns)){ + // 暂未获得表字段 + throw new CreaterException(CreaterMsg.EXCEPTION_IMPORT_FIELD_NULL); + } + List columnModels = new ArrayList<>(); for (int i = 0; i < columns.size(); i++) { DatabaseColumn column = columns.get(i); diff --git a/opsli-modulars/opsli-modulars-creater/src/main/resources/creater.yaml b/opsli-modulars/opsli-modulars-creater/src/main/resources/creater.yaml index 9e167453..dd0efc3c 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/resources/creater.yaml +++ b/opsli-modulars/opsli-modulars-creater/src/main/resources/creater.yaml @@ -17,9 +17,9 @@ opsli: - sys_tenant - sys_user - sys_user_role_ref + - sys_user_org_ref - sys_area - sys_org - - sys_org_user_ref # 排除字段 diff --git a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html index 56a1bf7a..261facfe 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html +++ b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html @@ -35,6 +35,7 @@ import org.opsli.core.persistence.querybuilder.WebQueryBuilder; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; #if(data.subModuleName != null && data.subModuleName != "") import #(data.packageName+"."+data.moduleName+"."+data.subModuleName).entity.#(data.model.tableName); @@ -191,6 +192,7 @@ public class #(data.model.tableName)RestController extends BaseRestController<#( /** * #(data.codeTitleBrief) Excel 导出 + * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解 * * 导出时,Token认证和方法权限认证 全部都由自定义完成 * 因为在 导出不成功时,需要推送错误信息, @@ -220,23 +222,25 @@ public class #(data.model.tableName)RestController extends BaseRestController<#( /** * #(data.codeTitleBrief) Excel 导入 + * 注:这里 RequiresPermissions 引入的是 Shiro原生鉴权注解 * @param request 文件流 request * @return ResultVo */ @ApiOperation(value = "导入Excel", notes = "导入Excel") #if(data.subModuleName != null && data.subModuleName != "") - @RequiresPermissionsCus("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import") + @RequiresPermissions("#(data.moduleName.toLowerCase())_#(data.subModuleName.toLowerCase())_import") #else - @RequiresPermissionsCus("#(data.moduleName.toLowerCase())_import") + @RequiresPermissions("#(data.moduleName.toLowerCase())_import") #end @EnableLog @Override public ResultVo importExcel(MultipartHttpServletRequest request) { - return super.excelImport(request); + return super.importExcel(request); } /** * #(data.codeTitleBrief) Excel 下载导入模版 + * 注:这里 RequiresPermissionsCus 引入的是 自定义鉴权注解 * @param response response * @return ResultVo */ diff --git a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/api/TemplateApi.html b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/api/TemplateApi.html index a9c217ef..ef45f02e 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/api/TemplateApi.html +++ b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/api/TemplateApi.html @@ -1,4 +1,5 @@ import request from "@/utils/request"; +import {downloadFileByData} from "@/utils/download"; export function getList(data) { return request({ @@ -61,3 +62,57 @@ export function doDeleteAll(data) { }); } + +/** +* 导出Excel 目前只支持一层参数传递 +* @param data +* @returns file +*/ +export function doExportExcel(data) { + #if(data.subModuleName != null && data.subModuleName != "") + let requestURL = "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/exportExcel"; + #else + let requestURL = "#(apiPath)/#(data.moduleName)/exportExcel"; + #end + // 下载文件 + downloadFileByData(requestURL, data); +} + + +/** +* 下载模版 +* @returns file +*/ +export function doDownloadTemplate() { + let data = {}; + #if(data.subModuleName != null && data.subModuleName != "") + let requestURL = "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel/template"; + #else + let requestURL = "#(apiPath)/#(data.moduleName)/importExcel/template"; + #end + // 下载文件 + downloadFileByData(requestURL, data); +} + +/** +* 导入Excel +* @returns file +*/ +export function doImportExcel(data) { + return request({ + #if(data.subModuleName != null && data.subModuleName != "") + url: "#(apiPath)/#(data.moduleName)/#(data.subModuleName)/importExcel", + #else + url: "#(apiPath)/#(data.moduleName)/importExcel", + #end + method: "post", + // 最长超时时间 50秒 + timeout: 50000, + headers: { + 'Content-Type': 'multipart/form-data' + }, + data, + }); +} + + diff --git a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/components/TemplateEdit.html b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/components/TemplateEdit.html index e590bdb2..3062df52 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/components/TemplateEdit.html +++ b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/components/TemplateEdit.html @@ -46,7 +46,7 @@ @@ -58,7 +58,7 @@ @@ -86,7 +86,7 @@ #end import { formateDate } from "@/utils/format"; import { isNull } from "@/utils/validate"; - import { #(validataTypes) getMsg} from "@/utils/valiargs"; + import { #(validateTypes) getMsg} from "@/utils/valiargs"; export default { name: "#(data.model.tableName)ManagementEdit", diff --git a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/components/TemplateImport.html b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/components/TemplateImport.html new file mode 100755 index 00000000..e2b085d1 --- /dev/null +++ b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/components/TemplateImport.html @@ -0,0 +1,182 @@ + + + diff --git a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/index/TemplateIndex.html b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/index/TemplateIndex.html index f5e54a92..1c6f18cf 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/index/TemplateIndex.html +++ b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/foreend/index/TemplateIndex.html @@ -100,6 +100,28 @@ @click="handleInsert" > 添加 + 导入 + + 导出 + + +