From dc585bdb28d5aad6ecf309ab48dbf4676efcde1c Mon Sep 17 00:00:00 2001 From: wangzhibiao Date: Mon, 14 Sep 2026 03:04:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(generator):=20=E9=80=82=E9=85=8DKingbase=20?= =?UTF-8?q?V2=E5=85=83=E6=95=B0=E6=8D=AE=E4=B8=8E=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/constant/GenConstants.java | 6 +- .../service/GenTableServiceImpl.java | 66 ++++++++++++++++++- .../mapper/generator/GenTableColumnMapper.xml | 8 ++- .../mapper/generator/GenTableMapper.xml | 4 +- .../src/main/resources/vm/java/domain.java.vm | 5 ++ .../main/resources/vm/java/sub-domain.java.vm | 5 ++ 6 files changed, 85 insertions(+), 9 deletions(-) diff --git a/RuoYi-Vue/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java b/RuoYi-Vue/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java index 7d899d496..ab06acd92 100644 --- a/RuoYi-Vue/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java +++ b/RuoYi-Vue/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java @@ -2,7 +2,7 @@ package com.ruoyi.common.constant; /** * 代码生成通用常量 - * + * * @author ruoyi */ public class GenConstants @@ -32,7 +32,7 @@ public class GenConstants public static final String PARENT_MENU_NAME = "parentMenuName"; /** 数据库字符串类型 */ - public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" }; + public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2", "character varying" }; /** 数据库文本类型 */ public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" }; @@ -42,7 +42,7 @@ public class GenConstants /** 数据库数字类型 */ public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", - "bit", "bigint", "float", "double", "decimal" }; + "bit", "bigint", "float", "double", "decimal", "numeric" }; /** 页面不需要编辑字段 */ public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" }; diff --git a/RuoYi-Vue/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/RuoYi-Vue/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java index fe4312f5a..330a59cbc 100644 --- a/RuoYi-Vue/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java +++ b/RuoYi-Vue/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java @@ -4,13 +4,20 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.StringWriter; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import javax.sql.DataSource; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.velocity.Template; @@ -46,6 +53,9 @@ public class GenTableServiceImpl implements IGenTableService { private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class); + @Autowired + private DataSource dataSource; + @Autowired private GenTableMapper genTableMapper; @@ -180,7 +190,7 @@ public class GenTableServiceImpl implements IGenTableService if (row > 0) { // 保存列信息 - List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + List genTableColumns = selectDbTableColumnsByName(tableName); for (GenTableColumn column : genTableColumns) { GenUtils.initColumnField(column, table); @@ -299,7 +309,7 @@ public class GenTableServiceImpl implements IGenTableService List tableColumns = table.getColumns(); Map tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity())); - List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + List dbTableColumns = selectDbTableColumnsByName(tableName); if (StringUtils.isEmpty(dbTableColumns)) { throw new ServiceException("同步数据失败,原表结构不存在"); @@ -528,4 +538,54 @@ public class GenTableServiceImpl implements IGenTableService } return genPath + File.separator + VelocityUtils.getFileName(template, table); } -} \ No newline at end of file + + /** + * 查询表列信息并补充自增列元数据 + */ + private List selectDbTableColumnsByName(String tableName) + { + List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + fillColumnIncrementByJdbc(tableName, dbTableColumns); + return dbTableColumns; + } + + /** + * 通过 JDBC DatabaseMetaData 补充自增/Identity列元数据,兼顾跨数据库方言 + */ + private void fillColumnIncrementByJdbc(String tableName, List columns) + { + if (StringUtils.isEmpty(columns)) + { + return; + } + try (Connection conn = dataSource.getConnection()) + { + DatabaseMetaData meta = conn.getMetaData(); + String catalog = conn.getCatalog(); + String schema = conn.getSchema(); + Set autoCols = new HashSet<>(); + try (ResultSet rs = meta.getColumns(catalog, schema, tableName, null)) + { + while (rs.next()) + { + if ("YES".equalsIgnoreCase(rs.getString("IS_AUTOINCREMENT"))) + { + autoCols.add(rs.getString("COLUMN_NAME")); + } + } + } + for (GenTableColumn column : columns) + { + if (autoCols.contains(column.getColumnName())) + { + column.setIsIncrement("1"); + } + } + } + catch (SQLException e) + { + log.error("通过 JDBC DatabaseMetaData 读取自增列失败,已中止 Generator 元数据初始化", e); + throw new ServiceException("读取数据库自增列元数据失败,请检查数据库连接与元数据权限"); + } + } +} diff --git a/RuoYi-Vue/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/RuoYi-Vue/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml index c896a15db..2dc324976 100644 --- a/RuoYi-Vue/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml +++ b/RuoYi-Vue/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -40,7 +40,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/RuoYi-Vue/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/RuoYi-Vue/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml index 056940139..460f238d4 100644 --- a/RuoYi-Vue/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/RuoYi-Vue/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -79,7 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select table_name, table_comment, create_time, update_time from information_schema.tables - where table_name NOT LIKE 'qrtz\_%' and table_name NOT LIKE 'gen\_%' and table_schema = (select current_schema()) + where table_name NOT LIKE 'qrtz\_%' and table_name NOT LIKE 'gen\_%' and table_name NOT LIKE 'bak\_v1\_%' and table_schema = (select current_schema()) and table_name in #{name} diff --git a/RuoYi-Vue/ruoyi-generator/src/main/resources/vm/java/domain.java.vm b/RuoYi-Vue/ruoyi-generator/src/main/resources/vm/java/domain.java.vm index b236ef00c..de72c7b17 100644 --- a/RuoYi-Vue/ruoyi-generator/src/main/resources/vm/java/domain.java.vm +++ b/RuoYi-Vue/ruoyi-generator/src/main/resources/vm/java/domain.java.vm @@ -40,8 +40,13 @@ public class ${ClassName} extends ${Entity} #if($parentheseIndex != -1) @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") #elseif($column.javaType == 'Date') +#if($column.columnType == 'date') @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") +#end #else @Excel(name = "${comment}") #end diff --git a/RuoYi-Vue/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm b/RuoYi-Vue/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm index a3f53ebab..cc7db2d2d 100644 --- a/RuoYi-Vue/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm +++ b/RuoYi-Vue/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm @@ -31,8 +31,13 @@ public class ${subClassName} extends BaseEntity #if($parentheseIndex != -1) @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") #elseif($column.javaType == 'Date') +#if($column.columnType == 'date') @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") +#end #else @Excel(name = "${comment}") #end