From 5920c3b8e42fcd43f9d725188883b77faaee3b52 Mon Sep 17 00:00:00 2001 From: lzq <2495532633@qq.com> Date: Sun, 7 Dec 2025 14:26:23 +0800 Subject: [PATCH] 1 --- .../njzscloud/common/gen/TplController.java | 74 +++++------------ .../com/njzscloud/common/gen/TplMapper.java | 11 +++ .../com/njzscloud/common/gen/TplService.java | 80 ++++++++++++++++++- .../common/gen/support/DbMetaData.java | 30 +++---- .../common/gen/support/Generator.java | 2 +- .../resources/templates/java/controller.btl | 1 + .../main/resources/templates/java/entity.btl | 4 +- .../main/resources/templates/java/service.btl | 2 +- .../src/main/resources/templates/ts/api.btl | 2 +- .../src/main/resources/templates/ts/d.btl | 2 +- .../main/resources/templates/ts/form_vue.btl | 48 +++++++---- .../src/main/resources/templates/ts/page.btl | 2 +- .../main/resources/templates/ts/page_vue.btl | 3 +- 13 files changed, 161 insertions(+), 100 deletions(-) diff --git a/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplController.java b/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplController.java index 9a796a3..76861ed 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplController.java +++ b/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplController.java @@ -1,14 +1,9 @@ package com.njzscloud.common.gen; import cn.hutool.core.date.DateTime; -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.ZipUtil; -import com.njzscloud.common.core.tuple.Tuple3; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.njzscloud.common.core.utils.Mime; import com.njzscloud.common.core.utils.R; -import com.njzscloud.common.gen.support.Generator; import com.njzscloud.common.mp.support.PageParam; import com.njzscloud.common.mp.support.PageResult; import com.njzscloud.common.mvc.util.ServletUtil; @@ -17,10 +12,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -63,56 +55,22 @@ public class TplController { } @PostMapping("/download") - public void download(@RequestParam("tplNames") String[] tplNames, + public void download(@RequestParam("lang") String lang, @RequestParam("tableName") String tableName, @RequestBody(required = false) Map data, HttpServletResponse response) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - String[] paths = new String[tplNames.length]; - InputStream[] ins = new InputStream[tplNames.length]; - for (int i = 0; i < tplNames.length; i++) { - String tplName = tplNames[i]; - Tuple3 res = Generator.generate(tplName, tableName, data); - String res0 = res.get_0(); - String res1 = res.get_1(); - String res2 = res.get_2(); - StringBuilder pathBuilder = new StringBuilder(); - if (StrUtil.isNotBlank(res0)) { - pathBuilder.append(res0); - if (!res0.endsWith("/")) pathBuilder.append("/"); - } - if (StrUtil.isNotBlank(res1)) pathBuilder.append(res1); - else pathBuilder.append(IdUtil.fastSimpleUUID()).append(".txt"); - paths[i] = pathBuilder.toString(); - ins[i] = new ByteArrayInputStream(res2.getBytes()); - } - ZipUtil.zip(out, paths, ins); + ByteArrayOutputStream out = tplService.download(lang, tableName, data); ServletUtil.download(response, out.toByteArray(), Mime.ZIP, DateTime.now() + ".zip"); } @PostMapping("/preview") - public R preview(@RequestParam("tplNames") String[] tplNames, + public R preview(@RequestParam("lang") String lang, @RequestParam("tableName") String tableName, @RequestBody(required = false) Map data) { - Map> map = new HashMap<>(); - for (String tplName : tplNames) { - Tuple3 res = Generator.generate(tplName, tableName, data); - String res0 = res.get_0(); - String res1 = res.get_1(); - String res2 = res.get_2(); - StringBuilder pathBuilder = new StringBuilder(); - if (StrUtil.isNotBlank(res0)) { - pathBuilder.append(res0); - if (!res0.endsWith("/")) pathBuilder.append("/"); - } - if (StrUtil.isNotBlank(res1)) pathBuilder.append(res1); - else pathBuilder.append(IdUtil.fastSimpleUUID()).append(".txt"); - map.put(tplName, MapUtil.builder() - .put("path", pathBuilder.toString()) - .put("content", res2) - .build()); - } + + Map> map = tplService.preview(lang, tableName, data); + return R.success(map); } @@ -120,18 +78,24 @@ public class TplController { /** * 获取表信息 */ - @GetMapping("/list_table") - public R>> listTable(@RequestParam(value = "tableName", required = false) String tableName) { - return R.success(tplService.listTable(tableName)); + @GetMapping("/table/paging") + public R>> tablePaging(PageParam pageParam, + @RequestParam(value = "tableSchema", required = false) String tableSchema, + @RequestParam(value = "tableName", required = false) String tableName + ) { + return R.success(tplService.tablePaging(pageParam, tableSchema, tableName)); } /** * 获取所有模板 */ - @GetMapping("/list") - public R listAll() { - return R.success(tplService.list()); + @GetMapping("/list_all") + public R listAll(@RequestParam("lang") String lang) { + return R.success(tplService + .list(Wrappers.lambdaQuery(TplEntity.class) + .eq(TplEntity::getLang, lang) + .orderByAsc(TplEntity::getTplName))); } diff --git a/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplMapper.java b/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplMapper.java index 8b14995..6117a4b 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplMapper.java +++ b/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplMapper.java @@ -1,7 +1,14 @@ package com.njzscloud.common.gen; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.Map; /** * 代码模板 @@ -9,4 +16,8 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface TplMapper extends BaseMapper { + @Select("SELECT TABLE_SCHEMA tableSchema, TABLE_NAME tableName, TABLE_COMMENT tableComment\n" + + "FROM information_schema.TABLES\n" + + "${ew.customSqlSegment}") + IPage> tablePaging(Page page, @Param("ew") QueryWrapper ew); } diff --git a/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplService.java b/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplService.java index 7d911b2..0c0de92 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplService.java +++ b/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/TplService.java @@ -2,11 +2,17 @@ package com.njzscloud.common.gen; import cn.hutool.core.lang.Assert; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.ZipUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njzscloud.common.core.ex.Exceptions; +import com.njzscloud.common.core.tuple.Tuple2; +import com.njzscloud.common.core.tuple.Tuple3; import com.njzscloud.common.gen.support.DbMetaData; +import com.njzscloud.common.gen.support.Generator; import com.njzscloud.common.gen.support.TemplateEngine; import com.njzscloud.common.gen.support.Tpl; import com.njzscloud.common.mp.support.PageParam; @@ -16,6 +22,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.util.List; import java.util.Map; @@ -104,7 +113,74 @@ public class TplService extends ServiceImpl implements ISe private final DbMetaData dbMetaData; - public List> listTable(String tableName) { - return dbMetaData.getTables(tableName); + public PageResult> tablePaging(PageParam pageParam, String tableSchema, String tableName) { + pageParam.setOrders("TABLE_NAME"); + if (StrUtil.isBlank(tableSchema)) { + tableSchema = dbMetaData.getDatabaseName(); + } + Assert.notBlank(tableSchema, () -> Exceptions.exception("数据库名称获取失败")); + return PageResult.of(baseMapper.tablePaging(pageParam.toPage(), Wrappers.query() + .eq("TABLE_SCHEMA", tableSchema) + .like(StrUtil.isNotBlank(tableName), "TABLE_NAME", tableName) + )); + } + + public Map> preview(String lang, String tableName, Map data) { + Map> map = MapUtil.newHashMap(); + List tplNames = this.list(Wrappers.lambdaQuery(TplEntity.class) + .eq(TplEntity::getLang, lang)) + .stream() + .map(TplEntity::getTplName) + .toList(); + + for (String tplName : tplNames) { + + Tuple2 res = generate(tplName, tableName, data); + + map.put(tplName, MapUtil.builder() + .put("path", res.get_0()) + .put("content", res.get_1()) + .build()); + } + return map; + } + + public ByteArrayOutputStream download(String lang, String tableName, Map data) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + List tplNames = this.list(Wrappers.lambdaQuery(TplEntity.class) + .eq(TplEntity::getLang, lang)) + .stream() + .map(TplEntity::getTplName) + .toList(); + if (tplNames.isEmpty()) { + return out; + } + int size = tplNames.size(); + String[] paths = new String[size]; + InputStream[] ins = new InputStream[size]; + for (int i = 0; i < size; i++) { + String tplName = tplNames.get(i); + Tuple2 res = generate(tplName, tableName, data); + paths[i] = res.get_0(); + ins[i] = new ByteArrayInputStream(res.get_1().getBytes()); + } + ZipUtil.zip(out, paths, ins); + + return out; + } + + private Tuple2 generate(String tplName, String tableName, Map data) { + Tuple3 res = Generator.generate(tplName, tableName, data); + String res0 = res.get_0(); + String res1 = res.get_1(); + String res2 = res.get_2(); + StringBuilder pathBuilder = new StringBuilder(); + if (StrUtil.isNotBlank(res0)) { + pathBuilder.append(res0.trim()); + if (!res0.endsWith("/")) pathBuilder.append("/"); + } + if (StrUtil.isNotBlank(res1)) pathBuilder.append(res1.trim()); + else pathBuilder.append(IdUtil.fastSimpleUUID()).append(".txt"); + return Tuple2.of(pathBuilder.toString(), res2); } } diff --git a/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/support/DbMetaData.java b/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/support/DbMetaData.java index 2369aa6..5ea4b06 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/support/DbMetaData.java +++ b/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/support/DbMetaData.java @@ -19,7 +19,16 @@ import java.util.Map; public class DbMetaData { private final DataSource dataSource; - public List> getMetaData(String tableName) { + public String getDatabaseName() { + try (Connection conn = dataSource.getConnection()) { + return conn.getCatalog(); + } catch (Exception e) { + log.error("获取数据库名称失败", e); + return null; + } + } + + public List> getTableMetaData(String tableName) { try (Connection connection = dataSource.getConnection()) { return getTables(connection, tableName); } catch (Exception e) { @@ -71,23 +80,4 @@ public class DbMetaData { return tableInfos; } - public List> getTables(String tableName) { - try (Connection connection = dataSource.getConnection()) { - List> tableInfos = new ArrayList<>(); - DatabaseMetaData metaData = connection.getMetaData(); - try (ResultSet tablesData = metaData.getTables(null, null, StrUtil.isNotBlank(tableName) ? tableName : "%", new String[]{"TABLE"})) { - while (tablesData.next()) { - String tableName_ = tablesData.getString("TABLE_NAME"); - tableInfos.add(MapUtil.builder() - .put("name", tableName_) - .put("comment", tablesData.getString("REMARKS")) - .build()); - } - } - return tableInfos; - } catch (Exception e) { - log.error("获取数据库元数据失败", e); - return Collections.emptyList(); - } - } } diff --git a/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/support/Generator.java b/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/support/Generator.java index 75863db..0b686be 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/support/Generator.java +++ b/njzscloud-common/njzscloud-common-gen/src/main/java/com/njzscloud/common/gen/support/Generator.java @@ -26,7 +26,7 @@ public class Generator { Assert.notBlank(tableName, () -> Exceptions.clierr("未指定表名称")); data.put("tableName", tableName); - List> table = dbMetaData.getMetaData(tableName); + List> table = dbMetaData.getTableMetaData(tableName); TplEntity tplEntity = tplService.getOne(Wrappers.lambdaQuery() .eq(TplEntity::getTplName, tplName)); diff --git a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/controller.btl b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/controller.btl index feb0f69..423e238 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/controller.btl +++ b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/controller.btl @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*; import com.njzscloud.common.core.utils.R; import com.njzscloud.common.mp.support.PageParam; import com.njzscloud.common.mp.support.PageResult; +import java.util.List; import ${basePackage}.${moduleName}.pojo.entity.${entityClass}; import ${basePackage}.${moduleName}.service.${serviceClass}; diff --git a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/entity.btl b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/entity.btl index 6486dcc..5ee6d59 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/entity.btl +++ b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/entity.btl @@ -8,7 +8,7 @@ var serviceInstance = entityName + "Service"; var mapperClass = upperFirst(entityName) + "Mapper"; var baseUrl = isBlank(prefix) ? table.name : subAfter(table.name, prefix); %> -package ${basePackage}.${moduleName}.entity; +package ${basePackage}.${moduleName}.pojo.entity; import lombok.Getter; import lombok.Setter; @@ -16,7 +16,7 @@ import lombok.experimental.Accessors; import com.baomidou.mybatisplus.annotation.*; import lombok.ToString; <%for(column in table.columns) { - var map = sqlDataTypeMap(column.dataType); + var map = javaType(column.dataType); %> <%if(!isBlank(map.importStatement)){%> ${map.importStatement} diff --git a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/service.btl b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/service.btl index 127dca2..4eb9437 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/service.btl +++ b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/java/service.btl @@ -10,7 +10,6 @@ var baseUrl = isBlank(prefix) ? table.name : subAfter(table.name, prefix); %> package ${basePackage}.${moduleName}.service; -import java.util.List; import lombok.extern.slf4j.Slf4j; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -20,6 +19,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.njzscloud.common.mp.support.PageParam; import com.njzscloud.common.mp.support.PageResult; +import java.util.List; import ${basePackage}.${moduleName}.pojo.entity.${entityClass}; import ${basePackage}.${moduleName}.mapper.${mapperClass}; diff --git a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/api.btl b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/api.btl index 2c49def..d038c49 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/api.btl +++ b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/api.btl @@ -4,7 +4,7 @@ var lcc = toCamelCase(ulc); var ucc = upperFirst(lcc); var dc = toDashCase(lcc); -var pageVueName = ucc + "vue"; +var pageVueName = ucc + ".vue"; var formVueName = ucc + "Form.vue"; var pageTsName = dc + ".ts"; var apiTsName = dc + "-api.ts"; diff --git a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/d.btl b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/d.btl index 9bbab11..5548772 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/d.btl +++ b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/d.btl @@ -4,7 +4,7 @@ var lcc = toCamelCase(ulc); var ucc = upperFirst(lcc); var dc = toDashCase(lcc); -var pageVueName = ucc + "vue"; +var pageVueName = ucc + ".vue"; var formVueName = ucc + "Form.vue"; var pageTsName = dc + ".ts"; var apiTsName = dc + "-api.ts"; diff --git a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/form_vue.btl b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/form_vue.btl index 57b7bff..6d9ab11 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/form_vue.btl +++ b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/form_vue.btl @@ -4,7 +4,7 @@ var lcc = toCamelCase(ulc); var ucc = upperFirst(lcc); var dc = toDashCase(lcc); -var pageVueName = ucc + "vue"; +var pageVueName = ucc + ".vue"; var formVueName = ucc + "Form.vue"; var pageTsName = dc + ".ts"; var apiTsName = dc + "-api.ts"; @@ -14,17 +14,20 @@ var dTsName = dc + ".d.ts"; - + <% for(column in table.columns) { var map = tsType(column.dataType); %> - + @@ -40,21 +43,38 @@ var dTsName = dc + ".d.ts"; diff --git a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/page.btl b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/page.btl index 9617fc2..a00a8d1 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/page.btl +++ b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/page.btl @@ -4,7 +4,7 @@ var lcc = toCamelCase(ulc); var ucc = upperFirst(lcc); var dc = toDashCase(lcc); -var pageVueName = ucc + "vue"; +var pageVueName = ucc + ".vue"; var formVueName = ucc + "Form.vue"; var pageTsName = dc + ".ts"; var apiTsName = dc + "-api.ts"; diff --git a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/page_vue.btl b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/page_vue.btl index 8cecdbf..fe75122 100644 --- a/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/page_vue.btl +++ b/njzscloud-common/njzscloud-common-gen/src/main/resources/templates/ts/page_vue.btl @@ -4,7 +4,7 @@ var lcc = toCamelCase(ulc); var ucc = upperFirst(lcc); var dc = toDashCase(lcc); -var pageVueName = ucc + "vue"; +var pageVueName = ucc + ".vue"; var formVueName = ucc + "Form.vue"; var pageTsName = dc + ".ts"; var apiTsName = dc + "-api.ts"; @@ -74,7 +74,6 @@ var dTsName = dc + ".d.ts"; :total="pagination.total" @change="pageChangeHandler"/> <${ucc}Form ref="${lcc}Form" @edit-succ="paging"/> -