From 44bd079c068dfa88c4ee0c1893086a15813a995f Mon Sep 17 00:00:00 2001 From: gx_ma <1773945958@qq.com> Date: Thu, 24 Apr 2025 16:48:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90):?= =?UTF-8?q?=20=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=A4=9A=E6=95=B0=E6=8D=AE=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fastbee/common/core/page/PageDomain.java | 77 ++++++++ .../common/core/page/TableDataInfo.java | 37 ++++ .../com/fastbee/common/utils/StringUtils.java | 2 + .../fastbee-plugs/fastbee-generator/pom.xml | 42 +++++ .../generator/controller/GenController.java | 23 ++- .../fastbee/generator/domain/GenTable.java | 34 ++++ .../mapper/GenTableColumnMapper.java | 6 +- .../generator/mapper/GenTableMapper.java | 8 +- .../service/GenTableServiceImpl.java | 176 +++++++++++++++--- .../generator/service/IGenTableService.java | 19 +- .../fastbee/generator/util/VelocityUtils.java | 16 +- .../mapper/generator/GenTableColumnMapper.xml | 30 +++ .../mapper/generator/GenTableMapper.xml | 18 +- .../src/main/resources/vm/sql/dameng/sql.vm | 19 ++ .../src/main/resources/vm/sql/oracle/sql.vm | 19 ++ .../src/main/resources/vm/sql/postgres/sql.vm | 20 ++ .../main/resources/vm/sql/sqlserver/sql.vm | 19 ++ springboot/pom.xml | 1 + 18 files changed, 521 insertions(+), 45 deletions(-) create mode 100644 springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/dameng/sql.vm create mode 100644 springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/oracle/sql.vm create mode 100644 springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/postgres/sql.vm create mode 100644 springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/sqlserver/sql.vm diff --git a/springboot/fastbee-common/src/main/java/com/fastbee/common/core/page/PageDomain.java b/springboot/fastbee-common/src/main/java/com/fastbee/common/core/page/PageDomain.java index 6d2cd75d..e5c4f45e 100644 --- a/springboot/fastbee-common/src/main/java/com/fastbee/common/core/page/PageDomain.java +++ b/springboot/fastbee-common/src/main/java/com/fastbee/common/core/page/PageDomain.java @@ -1,6 +1,15 @@ package com.fastbee.common.core.page; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fastbee.common.exception.ServiceException; import com.fastbee.common.utils.StringUtils; +import com.fastbee.common.utils.sql.SqlUtil; + +import java.util.ArrayList; +import java.util.List; /** * 分页数据 @@ -24,6 +33,16 @@ public class PageDomain /** 分页参数合理化 */ private Boolean reasonable = true; + /** + * 当前记录起始索引 默认值 + */ + public static final int DEFAULT_PAGE_NUM = 1; + + /** + * 每页显示记录数 默认值 默认查全部 + */ + public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE; + public String getOrderBy() { if (StringUtils.isEmpty(orderByColumn)) @@ -33,6 +52,64 @@ public class PageDomain return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc; } + /** + * 构建分页对象 + */ + public Page build() { + Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM); + Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE); + if (pageNum <= 0) { + pageNum = DEFAULT_PAGE_NUM; + } + Page page = new Page<>(pageNum, pageSize); + List orderItems = buildOrderItem(); + if (CollUtil.isNotEmpty(orderItems)) { + page.addOrder(orderItems); + } + return page; + } + + /** + * 构建排序 + * + * 支持的用法如下: + * {isAsc:"asc",orderByColumn:"id"} order by id asc + * {isAsc:"asc",orderByColumn:"id,createTime"} order by id asc,create_time asc + * {isAsc:"desc",orderByColumn:"id,createTime"} order by id desc,create_time desc + * {isAsc:"asc,desc",orderByColumn:"id,createTime"} order by id asc,create_time desc + */ + private List buildOrderItem() { + if (StringUtils.isBlank(orderByColumn) || StringUtils.isBlank(isAsc)) { + return null; + } + String orderBy = SqlUtil.escapeOrderBySql(orderByColumn); + orderBy = StringUtils.toUnderScoreCase(orderBy); + + // 兼容前端排序类型 + isAsc = StringUtils.replaceEach(isAsc, new String[]{"ascending", "descending"}, new String[]{"asc", "desc"}); + + String[] orderByArr = orderBy.split(StringUtils.SLASH); + String[] isAscArr = isAsc.split(StringUtils.SLASH); + if (isAscArr.length != 1 && isAscArr.length != orderByArr.length) { + throw new ServiceException("排序参数有误"); + } + + List list = new ArrayList<>(); + // 每个字段各自排序 + for (int i = 0; i < orderByArr.length; i++) { + String orderByStr = orderByArr[i]; + String isAscStr = isAscArr.length == 1 ? isAscArr[0] : isAscArr[i]; + if ("asc".equals(isAscStr)) { + list.add(OrderItem.asc(orderByStr)); + } else if ("desc".equals(isAscStr)) { + list.add(OrderItem.desc(orderByStr)); + } else { + throw new ServiceException("排序参数有误"); + } + } + return list; + } + public Integer getPageNum() { return pageNum; diff --git a/springboot/fastbee-common/src/main/java/com/fastbee/common/core/page/TableDataInfo.java b/springboot/fastbee-common/src/main/java/com/fastbee/common/core/page/TableDataInfo.java index d84cb2c0..dd63ed4e 100644 --- a/springboot/fastbee-common/src/main/java/com/fastbee/common/core/page/TableDataInfo.java +++ b/springboot/fastbee-common/src/main/java/com/fastbee/common/core/page/TableDataInfo.java @@ -1,5 +1,8 @@ package com.fastbee.common.core.page; +import cn.hutool.http.HttpStatus; +import com.baomidou.mybatisplus.core.metadata.IPage; + import java.io.Serializable; import java.util.List; @@ -43,6 +46,40 @@ public class TableDataInfo implements Serializable this.total = total; } + /** + * 根据分页对象构建表格分页数据对象 + */ + public static TableDataInfo build(IPage page) { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + rspData.setRows(page.getRecords()); + rspData.setTotal(page.getTotal()); + return rspData; + } + + /** + * 根据数据列表构建表格分页数据对象 + */ + public static TableDataInfo build(List list) { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + rspData.setRows(list); + rspData.setTotal(list.size()); + return rspData; + } + + /** + * 构建表格分页数据对象 + */ + public static TableDataInfo build() { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + return rspData; + } + public long getTotal() { return total; diff --git a/springboot/fastbee-common/src/main/java/com/fastbee/common/utils/StringUtils.java b/springboot/fastbee-common/src/main/java/com/fastbee/common/utils/StringUtils.java index fe855364..8c0c39a4 100644 --- a/springboot/fastbee-common/src/main/java/com/fastbee/common/utils/StringUtils.java +++ b/springboot/fastbee-common/src/main/java/com/fastbee/common/utils/StringUtils.java @@ -22,6 +22,8 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils /** 星号 */ private static final char ASTERISK = '*'; + public static final String SLASH = "/"; + /** * 获取参数不为空值 * diff --git a/springboot/fastbee-plugs/fastbee-generator/pom.xml b/springboot/fastbee-plugs/fastbee-generator/pom.xml index 404e3919..cb694427 100644 --- a/springboot/fastbee-plugs/fastbee-generator/pom.xml +++ b/springboot/fastbee-plugs/fastbee-generator/pom.xml @@ -33,6 +33,48 @@ com.fastbee fastbee-common + + com.fastbee + fastbee-framework + + + + org.anyline + anyline-environment-spring-data-jdbc + ${anyline.version} + + + + org.anyline + anyline-data-jdbc-mysql + ${anyline.version} + + + + org.anyline + anyline-data-jdbc-dm + ${anyline.version} + + + + + + + + + + + + + + + + + + + + + diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/controller/GenController.java b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/controller/GenController.java index c30a3ebf..950cf81f 100644 --- a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/controller/GenController.java +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/controller/GenController.java @@ -6,6 +6,9 @@ import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; +import com.fastbee.common.core.page.PageDomain; +import com.fastbee.common.core.page.TableSupport; +import com.fastbee.framework.mybatis.helper.DataBaseHelper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.io.IOUtils; @@ -86,9 +89,8 @@ public class GenController extends BaseController @GetMapping("/db/list") public TableDataInfo dataList(GenTable genTable) { - startPage(); - List list = genTableService.selectDbTableList(genTable); - return getDataTable(list); + PageDomain pageDomain = TableSupport.buildPageRequest(); + return genTableService.selectDbTableList(genTable,pageDomain); } /** @@ -113,12 +115,12 @@ public class GenController extends BaseController @PreAuthorize("@ss.hasPermi('tool:gen:import')") @Log(title = "代码生成", businessType = BusinessType.IMPORT) @PostMapping("/importTable") - public AjaxResult importTableSave(String tables) + public AjaxResult importTableSave(String tables,String dataName) { String[] tableNames = Convert.toStrArray(tables); // 查询表信息 - List tableList = genTableService.selectDbTableListByNames(tableNames); - genTableService.importGenTable(tableList); + List tableList = genTableService.selectDbTableListByNames(tableNames,dataName); + genTableService.importGenTable(tableList,dataName); return success(); } @@ -227,4 +229,13 @@ public class GenController extends BaseController response.setContentType("application/octet-stream; charset=UTF-8"); IOUtils.write(data, response.getOutputStream()); } + + /** + * 查询数据源名称列表 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:list')") + @GetMapping(value = "/getDataNames") + public AjaxResult getCurrentDataSourceNameList() { + return success(DataBaseHelper.getDataSourceNameList()); + } } \ No newline at end of file diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/domain/GenTable.java b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/domain/GenTable.java index 8048c173..e42a9396 100644 --- a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/domain/GenTable.java +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/domain/GenTable.java @@ -4,6 +4,9 @@ import java.util.List; import javax.validation.Valid; import javax.validation.constraints.NotBlank; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import org.apache.commons.lang3.ArrayUtils; @@ -17,14 +20,23 @@ import com.fastbee.common.utils.StringUtils; * @author ruoyi */ @ApiModel(value = "GenTable", description = "业务表 gen_table") +@TableName("gen_table") public class GenTable extends BaseEntity { private static final long serialVersionUID = 1L; /** 编号 */ @ApiModelProperty("编号") + @TableId(value = "table_id") private Long tableId; + /** + * 数据源名称 + */ + @NotBlank(message = "数据源名称不能为空") + private String dataName; + + /** 表名称 */ @ApiModelProperty(value = "表名称", required = true) @NotBlank(message = "表名称不能为空") @@ -122,6 +134,20 @@ public class GenTable extends BaseEntity @ApiModelProperty("上级菜单名称字段") private String parentMenuName; + /* + * 菜单id列表 + */ + @TableField(exist = false) + private List menuIds; + + public List getMenuIds() { + return menuIds; + } + + public void setMenuIds(List menuIds) { + this.menuIds = menuIds; + } + public Long getTableId() { return tableId; @@ -396,4 +422,12 @@ public class GenTable extends BaseEntity } return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY); } + + public String getDataName() { + return dataName; + } + + public void setDataName(String dataName) { + this.dataName = dataName; + } } \ No newline at end of file diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/mapper/GenTableColumnMapper.java b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/mapper/GenTableColumnMapper.java index a4a5cce0..a0d2d044 100644 --- a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/mapper/GenTableColumnMapper.java +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/mapper/GenTableColumnMapper.java @@ -1,6 +1,8 @@ package com.fastbee.generator.mapper; import java.util.List; + +import com.fastbee.common.mybatis.mapper.BaseMapperX; import com.fastbee.generator.domain.GenTableColumn; /** @@ -8,7 +10,7 @@ import com.fastbee.generator.domain.GenTableColumn; * * @author ruoyi */ -public interface GenTableColumnMapper +public interface GenTableColumnMapper extends BaseMapperX { /** * 根据表名称查询列信息 @@ -57,4 +59,6 @@ public interface GenTableColumnMapper * @return 结果 */ public int deleteGenTableColumnByIds(Long[] ids); + + boolean batchInsert(List list); } diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/mapper/GenTableMapper.java b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/mapper/GenTableMapper.java index 21ba4c8e..9f31458b 100644 --- a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/mapper/GenTableMapper.java +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/mapper/GenTableMapper.java @@ -1,6 +1,9 @@ package com.fastbee.generator.mapper; import java.util.List; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.fastbee.common.mybatis.mapper.BaseMapperX; import com.fastbee.generator.domain.GenTable; /** @@ -8,7 +11,7 @@ import com.fastbee.generator.domain.GenTable; * * @author ruoyi */ -public interface GenTableMapper +public interface GenTableMapper extends BaseMapperX { /** * 查询业务列表 @@ -80,4 +83,7 @@ public interface GenTableMapper * @return 结果 */ public int deleteGenTableByIds(Long[] ids); + + @DS("") + List selectTableNameList(String dataName); } diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/service/GenTableServiceImpl.java b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/service/GenTableServiceImpl.java index 269067fc..8f8f735c 100644 --- a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/service/GenTableServiceImpl.java +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/service/GenTableServiceImpl.java @@ -4,13 +4,24 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.StringWriter; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.fastbee.common.core.page.PageDomain; +import com.fastbee.common.core.page.TableDataInfo; +import com.fastbee.common.utils.MessageUtils; +import com.fastbee.common.utils.spring.SpringUtils; +import org.anyline.metadata.Column; +import org.anyline.metadata.Table; +import org.anyline.proxy.ServiceProxy; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.velocity.Template; @@ -37,6 +48,8 @@ import com.fastbee.generator.util.GenUtils; import com.fastbee.generator.util.VelocityInitializer; import com.fastbee.generator.util.VelocityUtils; +import javax.annotation.Resource; + /** * 业务 服务层实现 * @@ -53,6 +66,11 @@ public class GenTableServiceImpl implements IGenTableService @Autowired private GenTableColumnMapper genTableColumnMapper; + @Resource + private IdentifierGenerator identifierGenerator; + + private static final String[] TABLE_IGNORE = new String[]{"sj_", "act_", "flw_", "gen_"}; + /** * 查询业务信息 * @@ -85,10 +103,61 @@ public class GenTableServiceImpl implements IGenTableService * @param genTable 业务信息 * @return 数据库表集合 */ + @DS("#genTable.dataName") @Override - public List selectDbTableList(GenTable genTable) + public TableDataInfo selectDbTableList(GenTable genTable, PageDomain pageDomain) { - return genTableMapper.selectDbTableList(genTable); + // 获取查询条件 + String tableName = genTable.getTableName(); + String tableComment = genTable.getTableComment(); + + LinkedHashMap> tablesMap = ServiceProxy.metadata().tables(); + if (CollUtil.isEmpty(tablesMap)) { + return TableDataInfo.build(); + } + List tableNames = genTableMapper.selectTableNameList(genTable.getDataName()); + String[] tableArrays; + if (CollUtil.isNotEmpty(tableNames)) { + tableArrays = tableNames.toArray(new String[0]); + } else { + tableArrays = new String[0]; + } + // 过滤并转换表格数据 + List tables = tablesMap.values().stream() + .filter(x -> !StringUtils.containsAnyIgnoreCase(x.getName(), TABLE_IGNORE)) + .filter(x -> { + if (CollUtil.isEmpty(tableNames)) { + return true; + } + return !StringUtils.equalsAnyIgnoreCase(x.getName(), tableArrays); + }) + .filter(x -> { + boolean nameMatches = true; + boolean commentMatches = true; + // 进行表名称的模糊查询 + if (StringUtils.isNotBlank(tableName)) { + nameMatches = StringUtils.containsIgnoreCase(x.getName(), tableName); + } + // 进行表描述的模糊查询 + if (StringUtils.isNotBlank(tableComment)) { + commentMatches = StringUtils.containsIgnoreCase(x.getComment(), tableComment); + } + // 同时匹配名称和描述 + return nameMatches && commentMatches; + }) + .map(x -> { + GenTable gen = new GenTable(); + gen.setTableName(x.getName()); + gen.setTableComment(x.getComment()); + gen.setCreateTime(x.getCreateTime()); + gen.setUpdateTime(x.getUpdateTime()); + return gen; + }).collect(Collectors.toList()); + IPage page = pageDomain.build(); + page.setTotal(tables.size()); + // 手动分页 set数据 + page.setRecords(CollUtil.page((int) page.getCurrent() - 1, (int) page.getSize(), tables)); + return TableDataInfo.build(page); } /** @@ -97,10 +166,33 @@ public class GenTableServiceImpl implements IGenTableService * @param tableNames 表名称组 * @return 数据库表集合 */ + @DS("#dataName") @Override - public List selectDbTableListByNames(String[] tableNames) + public List selectDbTableListByNames(String[] tableNames,String dataName) { - return genTableMapper.selectDbTableListByNames(tableNames); + Set tableNameSet = new HashSet<>(Arrays.asList(tableNames)); + LinkedHashMap> tablesMap = ServiceProxy.metadata().tables(); + + if (CollUtil.isEmpty(tablesMap)) { + return new ArrayList<>(); + } + + List> tableList = tablesMap.values().stream() + .filter(x -> !StringUtils.containsAnyIgnoreCase(x.getName(), TABLE_IGNORE)) + .filter(x -> tableNameSet.contains(x.getName())).collect(Collectors.toList()); + + if (CollUtil.isEmpty(tableList)) { + return new ArrayList<>(); + } + return tableList.stream().map(x -> { + GenTable gen = new GenTable(); + gen.setDataName(dataName); + gen.setTableName(x.getName()); + gen.setTableComment(x.getComment()); + gen.setCreateTime(x.getCreateTime()); + gen.setUpdateTime(x.getUpdateTime()); + return gen; + }).collect(Collectors.toList()); } /** @@ -156,33 +248,57 @@ public class GenTableServiceImpl implements IGenTableService * @param tableList 导入表列表 */ @Override - @Transactional - public void importGenTable(List tableList) + @DSTransactional + public void importGenTable(List tableList, String dataName) { String operName = SecurityUtils.getUsername(); - try - { - for (GenTable table : tableList) - { + try { + for (GenTable table : tableList) { String tableName = table.getTableName(); GenUtils.initTable(table, operName); - int row = genTableMapper.insertGenTable(table); - if (row > 0) - { + int row = genTableMapper.insert(table); + if (row > 0) { // 保存列信息 - List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); - for (GenTableColumn column : genTableColumns) - { + List genTableColumns = SpringUtils.getAopProxy(this).selectDbTableColumnsByName(tableName, dataName); + List saveColumns = new ArrayList<>(); + for (GenTableColumn column : genTableColumns) { GenUtils.initColumnField(column, table); - genTableColumnMapper.insertGenTableColumn(column); + saveColumns.add(column); + } + if (CollUtil.isNotEmpty(saveColumns)) { + genTableColumnMapper.batchInsert(saveColumns); } } } + } catch (Exception e) { + throw new ServiceException(StringUtils.format(MessageUtils.message("import.fail.[{}]"), e.getMessage())); } - catch (Exception e) - { - throw new ServiceException("导入失败:" + e.getMessage()); - } + } + + /** + * 根据表名称查询列信息 + * + * @param tableName 表名称 + * @param dataName 数据源名称 + * @return 列信息 + */ + @DS("#dataName") + @Override + public List selectDbTableColumnsByName(String tableName, String dataName) { + LinkedHashMap columns = ServiceProxy.metadata().columns(tableName); + List tableColumns = new ArrayList<>(); + columns.forEach((columnName, column) -> { + GenTableColumn tableColumn = new GenTableColumn(); + tableColumn.setIsPk(String.valueOf(column.isPrimaryKey())); + tableColumn.setColumnName(column.getName()); + tableColumn.setColumnComment(column.getComment()); + tableColumn.setColumnType(column.getTypeName().toLowerCase()); + tableColumn.setSort(column.getPosition()); + tableColumn.setIsRequired(column.isNullable() == 0 ? "1" : "0"); + tableColumn.setIsIncrement(column.isAutoIncrement() == -1 ? "0" : "1"); + tableColumns.add(tableColumn); + }); + return tableColumns; } /** @@ -197,6 +313,12 @@ public class GenTableServiceImpl implements IGenTableService Map dataMap = new LinkedHashMap<>(); // 查询表信息 GenTable table = genTableMapper.selectGenTableById(tableId); + + List menuIds = new ArrayList<>(); + for (int i = 0; i < 6; i++) { + menuIds.add(identifierGenerator.nextId(null).longValue()); + } + table.setMenuIds(menuIds); // 设置主子表信息 setSubTable(table); // 设置主键列信息 @@ -206,7 +328,7 @@ public class GenTableServiceImpl implements IGenTableService VelocityContext context = VelocityUtils.prepareContext(table); // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + List templates = VelocityUtils.getTemplateList(table.getTplCategory(),table.getDataName()); for (String template : templates) { // 渲染模板 @@ -254,7 +376,7 @@ public class GenTableServiceImpl implements IGenTableService VelocityContext context = VelocityUtils.prepareContext(table); // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + List templates = VelocityUtils.getTemplateList(table.getTplCategory(),table.getDataName()); for (String template : templates) { if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) @@ -367,7 +489,7 @@ public class GenTableServiceImpl implements IGenTableService VelocityContext context = VelocityUtils.prepareContext(table); // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + List templates = VelocityUtils.getTemplateList(table.getTplCategory(),table.getDataName()); for (String template : templates) { // 渲染模板 diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/service/IGenTableService.java b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/service/IGenTableService.java index d03dba4d..a6ff6c3c 100644 --- a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/service/IGenTableService.java +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/service/IGenTableService.java @@ -2,7 +2,11 @@ package com.fastbee.generator.service; import java.util.List; import java.util.Map; + +import com.fastbee.common.core.page.PageDomain; +import com.fastbee.common.core.page.TableDataInfo; import com.fastbee.generator.domain.GenTable; +import com.fastbee.generator.domain.GenTableColumn; /** * 业务 服务层 @@ -25,7 +29,7 @@ public interface IGenTableService * @param genTable 业务信息 * @return 数据库表集合 */ - public List selectDbTableList(GenTable genTable); + public TableDataInfo selectDbTableList(GenTable genTable, PageDomain page); /** * 查询据库列表 @@ -33,7 +37,7 @@ public interface IGenTableService * @param tableNames 表名称组 * @return 数据库表集合 */ - public List selectDbTableListByNames(String[] tableNames); + public List selectDbTableListByNames(String[] tableNames,String dataName); /** * 查询所有表信息 @@ -71,7 +75,16 @@ public interface IGenTableService * * @param tableList 导入表列表 */ - public void importGenTable(List tableList); + public void importGenTable(List tableList,String dataName); + + /** + * 根据表名称查询列信息 + * + * @param tableName 表名称 + * @param dataName 数据源名称 + * @return 列信息 + */ + List selectDbTableColumnsByName(String tableName, String dataName); /** * 预览代码 diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/util/VelocityUtils.java b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/util/VelocityUtils.java index 270c438e..d9570732 100644 --- a/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/util/VelocityUtils.java +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/java/com/fastbee/generator/util/VelocityUtils.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; + +import com.fastbee.framework.mybatis.helper.DataBaseHelper; import org.apache.velocity.VelocityContext; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; @@ -126,7 +128,7 @@ public class VelocityUtils * * @return 模板列表 */ - public static List getTemplateList(String tplCategory) + public static List getTemplateList(String tplCategory,String dataName) { List templates = new ArrayList(); templates.add("vm/java/domain.java.vm"); @@ -135,7 +137,17 @@ public class VelocityUtils templates.add("vm/java/serviceImpl.java.vm"); templates.add("vm/java/controller.java.vm"); templates.add("vm/xml/mapper.xml.vm"); - templates.add("vm/sql/sql.vm"); + if (DataBaseHelper.isOracle(dataName)) { + templates.add("vm/sql/oracle/sql.vm"); + } else if (DataBaseHelper.isPostgerSql(dataName)) { + templates.add("vm/sql/postgres/sql.vm"); + } else if (DataBaseHelper.isSqlServer(dataName)) { + templates.add("vm/sql/sqlserver/sql.vm"); + } else if (DataBaseHelper.isDm(dataName)) { + templates.add("vm/sql/dameng/sql.vm"); + } else { + templates.add("vm/sql/sql.vm"); + } templates.add("vm/js/api.js.vm"); if (GenConstants.TPL_CRUD.equals(tplCategory)) { diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml index 725a249d..45c650bb 100644 --- a/springboot/fastbee-plugs/fastbee-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -124,4 +124,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + insert into gen_table_column ( + table_id,column_name,column_comment,column_type,java_type,java_field,is_pk,is_increment,is_required, + is_insert,is_edit,is_list,is_query,query_type,html_type,dict_type,sort,create_by,create_time + )values + + ( + #{item.tableId}, + #{item.columnName}, + #{item.columnComment}, + #{item.columnType}, + #{item.javaType}, + #{item.javaField}, + COALESCE(#{item.isPk}, '1'), + COALESCE(#{item.isIncrement}, '1'), + COALESCE(#{item.isRequired}, '1'), + COALESCE(#{item.isInsert}, '1'), + COALESCE(#{item.isEdit}, '1'), + COALESCE(#{item.isList}, '1'), + COALESCE(#{item.isQuery}, '1'), + COALESCE(#{item.queryType}, 'EQ'), + COALESCE(#{item.htmlType}, 'input'), + COALESCE(#{item.dictType}, 'default_dict_type'), + COALESCE(#{item.sort}, 0), + COALESCE(#{item.createBy}, 'admin'), + CURRENT_TIMESTAMP + ) + + + \ No newline at end of file diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/mapper/generator/GenTableMapper.xml index 14d523d5..02814921 100644 --- a/springboot/fastbee-plugs/fastbee-generator/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -6,6 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -54,7 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table + select table_id, data_name, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table - + insert into gen_table ( + data_name, table_name, table_comment, class_name, @@ -151,6 +153,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_by, create_time )values( + #{dataName}, #{tableName}, #{tableComment}, #{className}, @@ -171,6 +174,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update gen_table + data_name = #{dataName}, table_name = #{tableName}, table_comment = #{tableComment}, sub_table_name = #{subTableName}, @@ -199,4 +203,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + \ No newline at end of file diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/dameng/sql.vm b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/dameng/sql.vm new file mode 100644 index 00000000..6b198070 --- /dev/null +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/dameng/sql.vm @@ -0,0 +1,19 @@ +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[0]}, '${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate, null, null, '${functionName}菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[1]}, '${functionName}查询', ${table.menuIds[0]}, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 'admin', sysdate, null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[2]}, '${functionName}新增', ${table.menuIds[0]}, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 'admin', sysdate, null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[3]}, '${functionName}修改', ${table.menuIds[0]}, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 'admin', sysdate, null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[4]}, '${functionName}删除', ${table.menuIds[0]}, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 'admin', sysdate, null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[5]}, '${functionName}导出', ${table.menuIds[0]}, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 'admin', sysdate, null, null, ''); diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/oracle/sql.vm b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/oracle/sql.vm new file mode 100644 index 00000000..6b198070 --- /dev/null +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/oracle/sql.vm @@ -0,0 +1,19 @@ +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[0]}, '${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate, null, null, '${functionName}菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[1]}, '${functionName}查询', ${table.menuIds[0]}, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 'admin', sysdate, null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[2]}, '${functionName}新增', ${table.menuIds[0]}, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 'admin', sysdate, null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[3]}, '${functionName}修改', ${table.menuIds[0]}, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 'admin', sysdate, null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[4]}, '${functionName}删除', ${table.menuIds[0]}, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 'admin', sysdate, null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[5]}, '${functionName}导出', ${table.menuIds[0]}, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 'admin', sysdate, null, null, ''); diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/postgres/sql.vm b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/postgres/sql.vm new file mode 100644 index 00000000..774c6a61 --- /dev/null +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/postgres/sql.vm @@ -0,0 +1,20 @@ +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[0]}, '${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', now(), null, null, '${functionName}菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[1]}, '${functionName}查询', ${table.menuIds[0]}, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 'admin', now(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[2]}, '${functionName}新增', ${table.menuIds[0]}, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 'admin', now(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[3]}, '${functionName}修改', ${table.menuIds[0]}, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 'admin', now(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[4]}, '${functionName}删除', ${table.menuIds[0]}, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 'admin', now(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[5]}, '${functionName}导出', ${table.menuIds[0]}, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 'admin', now(), null, null, ''); + diff --git a/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/sqlserver/sql.vm b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/sqlserver/sql.vm new file mode 100644 index 00000000..03b4d5e5 --- /dev/null +++ b/springboot/fastbee-plugs/fastbee-generator/src/main/resources/vm/sql/sqlserver/sql.vm @@ -0,0 +1,19 @@ +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[0]}, '${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', getdate(), null, null, '${functionName}菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[1]}, '${functionName}查询', ${table.menuIds[0]}, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 'admin', getdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[2]}, '${functionName}新增', ${table.menuIds[0]}, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 'admin', getdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[3]}, '${functionName}修改', ${table.menuIds[0]}, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 'admin', getdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[4]}, '${functionName}删除', ${table.menuIds[0]}, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 'admin', getdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(${table.menuIds[5]}, '${functionName}导出', ${table.menuIds[0]}, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 'admin', getdate(), null, null, ''); diff --git a/springboot/pom.xml b/springboot/pom.xml index 3d063f0f..930599ea 100644 --- a/springboot/pom.xml +++ b/springboot/pom.xml @@ -60,6 +60,7 @@ 1.2.13 5.7.12 5.3.39 + 8.7.2-20241022