Commit 6c5c32c845468706274f6c074ef6222748d8611d

Authored by YunaiV
1 parent 1bea2ea7

抽象出 ToolCodegenBuilder 类,负责 table 和 column 的构建,让 ToolCodegenService 专注于逻辑的组合

src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenBuilder.java 0 → 100644
  1 +package cn.iocoder.dashboard.modules.tool.service.codegen.impl;
  2 +
  3 +import cn.hutool.core.map.MapUtil;
  4 +import cn.hutool.core.util.StrUtil;
  5 +import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
  6 +import cn.iocoder.dashboard.modules.tool.convert.codegen.CodegenConvert;
  7 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenColumnDO;
  8 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenTableDO;
  9 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolInformationSchemaColumnDO;
  10 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolInformationSchemaTableDO;
  11 +import cn.iocoder.dashboard.modules.tool.enums.codegen.ToolCodegenColumnHtmlTypeEnum;
  12 +import cn.iocoder.dashboard.modules.tool.enums.codegen.ToolCodegenColumnListConditionEnum;
  13 +import cn.iocoder.dashboard.modules.tool.enums.codegen.ToolCodegenTemplateTypeEnum;
  14 +import com.google.common.collect.Sets;
  15 +import org.springframework.stereotype.Component;
  16 +
  17 +import java.math.BigDecimal;
  18 +import java.util.*;
  19 +
  20 +/**
  21 + * 代码生成器的 Builder,负责:
  22 + * 1. 将数据库的表 {@link ToolInformationSchemaTableDO} 定义,构建成 {@link ToolCodegenTableDO}
  23 + * 2. 将数据库的列 {@link ToolInformationSchemaColumnDO} 构定义,建成 {@link ToolCodegenColumnDO}
  24 + */
  25 +@Component
  26 +public class ToolCodegenBuilder {
  27 +
  28 + /**
  29 + * 字段名与 {@link ToolCodegenColumnListConditionEnum} 的默认映射
  30 + * 注意,字段的匹配以后缀的方式
  31 + */
  32 + private static final Map<String, ToolCodegenColumnListConditionEnum> columnListOperationConditionMappings =
  33 + MapUtil.<String, ToolCodegenColumnListConditionEnum>builder()
  34 + .put("name", ToolCodegenColumnListConditionEnum.LIKE)
  35 + .put("time", ToolCodegenColumnListConditionEnum.BETWEEN)
  36 + .put("date", ToolCodegenColumnListConditionEnum.BETWEEN)
  37 + .build();
  38 +
  39 + /**
  40 + * 字段名与 {@link ToolCodegenColumnHtmlTypeEnum} 的默认映射
  41 + * 注意,字段的匹配以后缀的方式
  42 + */
  43 + private static final Map<String, ToolCodegenColumnHtmlTypeEnum> columnHtmlTypeMappings =
  44 + MapUtil.<String, ToolCodegenColumnHtmlTypeEnum>builder()
  45 + .put("status", ToolCodegenColumnHtmlTypeEnum.RADIO)
  46 + .put("sex", ToolCodegenColumnHtmlTypeEnum.RADIO)
  47 + .put("type", ToolCodegenColumnHtmlTypeEnum.SELECT)
  48 + .put("image", ToolCodegenColumnHtmlTypeEnum.UPLOAD_IMAGE)
  49 + .put("file", ToolCodegenColumnHtmlTypeEnum.UPLOAD_FILE)
  50 + .put("content", ToolCodegenColumnHtmlTypeEnum.EDITOR)
  51 + .build();
  52 +
  53 + /**
  54 + * 新增操作,不需要传递的字段
  55 + */
  56 + private static final Set<String> CREATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id");
  57 + /**
  58 + * 修改操作,不需要传递的字段
  59 + */
  60 + private static final Set<String> UPDATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet();
  61 + /**
  62 + * 列表操作的条件,不需要传递的字段
  63 + */
  64 + private static final Set<String> LIST_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id");
  65 + /**
  66 + * 列表操作的结果,不需要返回的字段
  67 + */
  68 + private static final Set<String> LIST_OPERATION_RESULT_EXCLUDE_COLUMN = Sets.newHashSet();
  69 +
  70 + /**
  71 + * Java 类型与 MySQL 类型的映射关系
  72 + */
  73 + private static final Map<String, Set<String>> javaTypeMappings = MapUtil.<String, Set<String>>builder()
  74 + .put(Boolean.class.getSimpleName(), Sets.newHashSet("bit"))
  75 + .put(Integer.class.getSimpleName(), Sets.newHashSet("tinyint", "smallint", "mediumint", "int"))
  76 + .put(Long.class.getSimpleName(), Collections.singleton("bigint"))
  77 + .put(Double.class.getSimpleName(), Sets.newHashSet("float", "double"))
  78 + .put(BigDecimal.class.getSimpleName(), Sets.newHashSet("decimal", "numeric"))
  79 + .put(String.class.getSimpleName(), Sets.newHashSet("tinytext", "text", "mediumtext", "longtext", // 长文本
  80 + "char", "varchar", "nvarchar", "varchar2")) // 短文本
  81 + .put(Date.class.getSimpleName(), Sets.newHashSet("datetime", "time", "date", "timestamp"))
  82 + .build();
  83 +
  84 + static {
  85 + // 处理 OPERATION 相关的字段
  86 + Arrays.stream(BaseDO.class.getDeclaredFields()).forEach(field -> {
  87 + CREATE_OPERATION_EXCLUDE_COLUMN.add(field.getName());
  88 + UPDATE_OPERATION_EXCLUDE_COLUMN.add(field.getName());
  89 + LIST_OPERATION_EXCLUDE_COLUMN.add(field.getName());
  90 + LIST_OPERATION_RESULT_EXCLUDE_COLUMN.add(field.getName());
  91 + });
  92 + LIST_OPERATION_EXCLUDE_COLUMN.remove("create_time"); // 创建时间,还是可能需要传递的
  93 + LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("create_time"); // 创建时间,还是需要返回的
  94 + }
  95 +
  96 + public ToolCodegenTableDO buildTable(ToolInformationSchemaTableDO schemaTable) {
  97 + ToolCodegenTableDO table = CodegenConvert.INSTANCE.convert(schemaTable);
  98 + initTableDefault(table);
  99 + return table;
  100 + }
  101 +
  102 + /**
  103 + * 初始化 Table 表的默认字段
  104 + *
  105 + * @param table 表定义
  106 + */
  107 + private void initTableDefault(ToolCodegenTableDO table) {
  108 + table.setModuleName(StrUtil.subBefore(table.getTableName(),
  109 + '_', false)); // 第一个 _ 前缀的前面,作为 module 名字
  110 + table.setBusinessName(StrUtil.subAfter(table.getTableName(),
  111 + '_', false)); // 第一个 _ 前缀的后面,作为 module 名字
  112 + table.setBusinessName(StrUtil.toCamelCase(table.getBusinessName())); // 可能存在多个 _ 的情况,转换成驼峰
  113 + table.setClassName(StrUtil.upperFirst(StrUtil.toCamelCase(table.getTableName()))); // 驼峰 + 首字母大写
  114 + table.setClassComment(StrUtil.subBefore(table.getTableComment(), // 去除结尾的表,作为类描述
  115 + '表', true));
  116 + table.setAuthor("芋艿"); // TODO 稍后改成创建人
  117 + table.setTemplateType(ToolCodegenTemplateTypeEnum.CRUD.getType());
  118 + }
  119 +
  120 + public List<ToolCodegenColumnDO> buildColumns(List<ToolInformationSchemaColumnDO> schemaColumns) {
  121 + List<ToolCodegenColumnDO> columns = CodegenConvert.INSTANCE.convertList(schemaColumns);
  122 + columns.forEach(this::initColumnDefault);
  123 + return columns;
  124 + }
  125 +
  126 + /**
  127 + * 初始化 Column 列的默认字段
  128 + *
  129 + * @param column 列定义
  130 + */
  131 + private void initColumnDefault(ToolCodegenColumnDO column) {
  132 + // 处理 Java 相关的字段的默认值
  133 + processColumnJava(column);
  134 + // 处理 CRUD 相关的字段的默认值
  135 + processColumnOperation(column);
  136 + // 处理 UI 相关的字段的默认值
  137 + processColumnUI(column);
  138 + }
  139 +
  140 + private void processColumnJava(ToolCodegenColumnDO column) {
  141 + // 处理 javaField 字段
  142 + column.setJavaField(StrUtil.toCamelCase(column.getColumnName()));
  143 + // 处理 dictType 字段,暂无
  144 + // 处理 javaType 字段
  145 + String dbType = StrUtil.subBefore(column.getColumnType(), '(', false);
  146 + javaTypeMappings.entrySet().stream()
  147 + .filter(entry -> entry.getValue().contains(dbType))
  148 + .findFirst().ifPresent(entry -> column.setJavaType(entry.getKey()));
  149 + if (column.getJavaType() == null) {
  150 + throw new IllegalStateException(String.format("column(%s) 的数据库类型(%s) 找不到匹配的 Java 类型",
  151 + column.getColumnName(), column.getColumnType()));
  152 + }
  153 + }
  154 +
  155 + private void processColumnOperation(ToolCodegenColumnDO column) {
  156 + // 处理 createOperation 字段
  157 + column.setCreateOperation(!CREATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField())
  158 + && !column.getPrimaryKey()); // 对于主键,创建时无需传递
  159 + // 处理 updateOperation 字段
  160 + column.setUpdateOperation(!UPDATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField())
  161 + || column.getPrimaryKey()); // 对于主键,更新时需要传递
  162 + // 处理 listOperation 字段
  163 + column.setListOperation(!LIST_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField())
  164 + && !column.getPrimaryKey()); // 对于主键,列表过滤不需要传递
  165 + // 处理 listOperationCondition 字段
  166 + columnListOperationConditionMappings.entrySet().stream()
  167 + .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey()))
  168 + .findFirst().ifPresent(entry -> column.setListOperationCondition(entry.getValue().getCondition()));
  169 + if (column.getListOperationCondition() == null) {
  170 + column.setListOperationCondition(ToolCodegenColumnListConditionEnum.EQ.getCondition());
  171 + }
  172 + // 处理 listOperationResult 字段
  173 + column.setListOperationResult(!LIST_OPERATION_RESULT_EXCLUDE_COLUMN.contains(column.getJavaField()));
  174 + }
  175 +
  176 + private void processColumnUI(ToolCodegenColumnDO column) {
  177 + // 基于后缀进行匹配
  178 + columnHtmlTypeMappings.entrySet().stream()
  179 + .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey()))
  180 + .findFirst().ifPresent(entry -> column.setHtmlType(entry.getValue().getType()));
  181 + // 如果是 Boolean 类型时,设置为 radio 类型.
  182 + // 其它类型,因为字段名可以相对保障,所以不进行处理。例如说 date 对应 datetime 类型.
  183 + if (Boolean.class.getSimpleName().equals(column.getJavaType())) {
  184 + column.setHtmlType(ToolCodegenColumnHtmlTypeEnum.RADIO.getType());
  185 + }
  186 + // 兜底,设置默认为 input 类型
  187 + if (column.getHtmlType() == null) {
  188 + column.setHtmlType(ToolCodegenColumnHtmlTypeEnum.INPUT.getType());
  189 + }
  190 + }
  191 +
  192 +}
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java
1 1 package cn.iocoder.dashboard.modules.tool.service.codegen.impl;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4   -import cn.hutool.core.map.MapUtil;
5   -import cn.hutool.core.util.StrUtil;
6   -import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
7   -import cn.iocoder.dashboard.modules.tool.convert.codegen.CodegenConvert;
8   -import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.*;
9   -import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.*;
10   -import cn.iocoder.dashboard.modules.tool.enums.codegen.*;
  4 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.ToolCodegenColumnMapper;
  5 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.ToolCodegenTableMapper;
  6 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.ToolInformationSchemaColumnMapper;
  7 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.ToolInformationSchemaTableMapper;
  8 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenColumnDO;
  9 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenTableDO;
  10 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolInformationSchemaColumnDO;
  11 +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolInformationSchemaTableDO;
11 12 import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService;
12   -import com.google.common.collect.Sets;
13 13 import org.springframework.stereotype.Service;
14 14 import org.springframework.transaction.annotation.Transactional;
15 15  
16 16 import javax.annotation.Resource;
17   -import java.math.BigDecimal;
18   -import java.util.*;
  17 +import java.util.List;
19 18  
20 19 /**
21 20 * 代码生成 Service 实现类
... ... @@ -25,74 +24,6 @@ import java.util.*;
25 24 @Service
26 25 public class ToolCodegenServiceImpl implements ToolCodegenService {
27 26  
28   - /**
29   - * 字段名与 {@link ToolCodegenColumnListConditionEnum} 的默认映射
30   - * 注意,字段的匹配以后缀的方式
31   - */
32   - private static final Map<String, ToolCodegenColumnListConditionEnum> columnListOperationConditionMappings =
33   - MapUtil.<String, ToolCodegenColumnListConditionEnum>builder()
34   - .put("name", ToolCodegenColumnListConditionEnum.LIKE)
35   - .put("time", ToolCodegenColumnListConditionEnum.BETWEEN)
36   - .put("date", ToolCodegenColumnListConditionEnum.BETWEEN)
37   - .build();
38   -
39   - /**
40   - * 字段名与 {@link ToolCodegenColumnHtmlTypeEnum} 的默认映射
41   - * 注意,字段的匹配以后缀的方式
42   - */
43   - private static final Map<String, ToolCodegenColumnHtmlTypeEnum> columnHtmlTypeMappings =
44   - MapUtil.<String, ToolCodegenColumnHtmlTypeEnum>builder()
45   - .put("status", ToolCodegenColumnHtmlTypeEnum.RADIO)
46   - .put("sex", ToolCodegenColumnHtmlTypeEnum.RADIO)
47   - .put("type", ToolCodegenColumnHtmlTypeEnum.SELECT)
48   - .put("image", ToolCodegenColumnHtmlTypeEnum.UPLOAD_IMAGE)
49   - .put("file", ToolCodegenColumnHtmlTypeEnum.UPLOAD_FILE)
50   - .put("content", ToolCodegenColumnHtmlTypeEnum.EDITOR)
51   - .build();
52   -
53   - /**
54   - * 新增操作,不需要传递的字段
55   - */
56   - private static final Set<String> CREATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id");
57   - /**
58   - * 修改操作,不需要传递的字段
59   - */
60   - private static final Set<String> UPDATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet();
61   - /**
62   - * 列表操作的条件,不需要传递的字段
63   - */
64   - private static final Set<String> LIST_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id");
65   - /**
66   - * 列表操作的结果,不需要返回的字段
67   - */
68   - private static final Set<String> LIST_OPERATION_RESULT_EXCLUDE_COLUMN = Sets.newHashSet();
69   -
70   - /**
71   - * Java 类型与 MySQL 类型的映射关系
72   - */
73   - private static final Map<String, Set<String>> javaTypeMappings = MapUtil.<String, Set<String>>builder()
74   - .put(Boolean.class.getSimpleName(), Sets.newHashSet("bit"))
75   - .put(Integer.class.getSimpleName(), Sets.newHashSet("tinyint", "smallint", "mediumint", "int"))
76   - .put(Long.class.getSimpleName(), Collections.singleton("bigint"))
77   - .put(Double.class.getSimpleName(), Sets.newHashSet("float", "double"))
78   - .put(BigDecimal.class.getSimpleName(), Sets.newHashSet("decimal", "numeric"))
79   - .put(String.class.getSimpleName(), Sets.newHashSet("tinytext", "text", "mediumtext", "longtext", // 长文本
80   - "char", "varchar", "nvarchar", "varchar2")) // 短文本
81   - .put(Date.class.getSimpleName(), Sets.newHashSet("datetime", "time", "date", "timestamp"))
82   - .build();
83   -
84   - static {
85   - // 处理 OPERATION 相关的字段
86   - Arrays.stream(BaseDO.class.getDeclaredFields()).forEach(field -> {
87   - CREATE_OPERATION_EXCLUDE_COLUMN.add(field.getName());
88   - UPDATE_OPERATION_EXCLUDE_COLUMN.add(field.getName());
89   - LIST_OPERATION_EXCLUDE_COLUMN.add(field.getName());
90   - LIST_OPERATION_RESULT_EXCLUDE_COLUMN.add(field.getName());
91   - });
92   - LIST_OPERATION_EXCLUDE_COLUMN.remove("create_time"); // 创建时间,还是可能需要传递的
93   - LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("create_time"); // 创建时间,还是需要返回的
94   - }
95   -
96 27 @Resource
97 28 private ToolInformationSchemaTableMapper informationSchemaTableMapper;
98 29 @Resource
... ... @@ -102,6 +33,11 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
102 33 @Resource
103 34 private ToolCodegenColumnMapper codegenColumnMapper;
104 35  
  36 + @Resource
  37 + private ToolCodegenBuilder codegenBuilder;
  38 + @Resource
  39 + private ToolCodegenEngine codegenEngine;
  40 +
105 41 @Override
106 42 @Transactional
107 43 public Long createCodegenTable(String tableName) {
... ... @@ -119,102 +55,16 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
119 55 throw new RuntimeException(""); // TODO
120 56 }
121 57  
122   - // 将 table 插入到数据库
123   - ToolCodegenTableDO table = CodegenConvert.INSTANCE.convert(schemaTable);
124   - initTableDefault(table);
  58 + // 构建 ToolCodegenTableDO 对象,插入到 DB 中
  59 + ToolCodegenTableDO table = codegenBuilder.buildTable(schemaTable);
125 60 codegenTableMapper.insert(table);
126   - // 将 column 插入到数据库
127   - List<ToolCodegenColumnDO> columns = CodegenConvert.INSTANCE.convertList(schemaColumns);
  61 + // 构建 ToolCodegenColumnDO 数组,插入到 DB 中
  62 + List<ToolCodegenColumnDO> columns = codegenBuilder.buildColumns(schemaColumns);
128 63 columns.forEach(column -> {
129   - initColumnDefault(column);
130 64 column.setTableId(table.getId());
131 65 codegenColumnMapper.insert(column); // TODO 批量插入
132 66 });
133 67 return table.getId();
134 68 }
135 69  
136   - /**
137   - * 初始化 Table 表的默认字段
138   - *
139   - * @param table 表定义
140   - */
141   - private void initTableDefault(ToolCodegenTableDO table) {
142   - table.setModuleName(StrUtil.subBefore(table.getTableName(),
143   - '_', false)); // 第一个 _ 前缀的前面,作为 module 名字
144   - table.setBusinessName(StrUtil.subAfter(table.getTableName(),
145   - '_', false)); // 第一个 _ 前缀的后面,作为 module 名字
146   - table.setBusinessName(StrUtil.toCamelCase(table.getBusinessName())); // 可能存在多个 _ 的情况,转换成驼峰
147   - table.setClassName(StrUtil.upperFirst(StrUtil.toCamelCase(table.getTableName()))); // 驼峰 + 首字母大写
148   - table.setClassComment(StrUtil.subBefore(table.getTableComment(), // 去除结尾的表,作为类描述
149   - '表', true));
150   - table.setAuthor("芋艿"); // TODO 稍后改成创建人
151   - table.setTemplateType(ToolCodegenTemplateTypeEnum.CRUD.getType());
152   - }
153   -
154   - /**
155   - * 初始化 Column 列的默认字段
156   - *
157   - * @param column 列定义
158   - */
159   - private void initColumnDefault(ToolCodegenColumnDO column) {
160   - // 处理 Java 相关的字段的默认值
161   - processColumnJava(column);
162   - // 处理 CRUD 相关的字段的默认值
163   - processColumnOperation(column);
164   - // 处理 UI 相关的字段的默认值
165   - processColumnUI(column);
166   - }
167   -
168   - private void processColumnJava(ToolCodegenColumnDO column) {
169   - // 处理 javaField 字段
170   - column.setJavaField(StrUtil.toCamelCase(column.getColumnName()));
171   - // 处理 dictType 字段,暂无
172   - // 处理 javaType 字段
173   - String dbType = StrUtil.subBefore(column.getColumnType(), '(', false);
174   - javaTypeMappings.entrySet().stream()
175   - .filter(entry -> entry.getValue().contains(dbType))
176   - .findFirst().ifPresent(entry -> column.setJavaType(entry.getKey()));
177   - if (column.getJavaType() == null) {
178   - throw new IllegalStateException(String.format("column(%s) 的数据库类型(%s) 找不到匹配的 Java 类型",
179   - column.getColumnName(), column.getColumnType()));
180   - }
181   - }
182   -
183   - private void processColumnOperation(ToolCodegenColumnDO column) {
184   - // 处理 createOperation 字段
185   - column.setCreateOperation(!CREATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField())
186   - && !column.getPrimaryKey()); // 对于主键,创建时无需传递
187   - // 处理 updateOperation 字段
188   - column.setUpdateOperation(!UPDATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField())
189   - || column.getPrimaryKey()); // 对于主键,更新时需要传递
190   - // 处理 listOperation 字段
191   - column.setListOperation(!LIST_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField())
192   - && !column.getPrimaryKey()); // 对于主键,列表过滤不需要传递
193   - // 处理 listOperationCondition 字段
194   - columnListOperationConditionMappings.entrySet().stream()
195   - .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey()))
196   - .findFirst().ifPresent(entry -> column.setListOperationCondition(entry.getValue().getCondition()));
197   - if (column.getListOperationCondition() == null) {
198   - column.setListOperationCondition(ToolCodegenColumnListConditionEnum.EQ.getCondition());
199   - }
200   - // 处理 listOperationResult 字段
201   - column.setListOperationResult(!LIST_OPERATION_RESULT_EXCLUDE_COLUMN.contains(column.getJavaField()));
202   - }
203   -
204   - private void processColumnUI(ToolCodegenColumnDO column) {
205   - // 基于后缀进行匹配
206   - columnHtmlTypeMappings.entrySet().stream()
207   - .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey()))
208   - .findFirst().ifPresent(entry -> column.setHtmlType(entry.getValue().getType()));
209   - // 如果是 Boolean 类型时,设置为 radio 类型.
210   - // 其它类型,因为字段名可以相对保障,所以不进行处理。例如说 date 对应 datetime 类型.
211   - if (Boolean.class.getSimpleName().equals(column.getJavaType())) {
212   - column.setHtmlType(ToolCodegenColumnHtmlTypeEnum.RADIO.getType());
213   - }
214   - // 兜底,设置默认为 input 类型
215   - if (column.getHtmlType() == null) {
216   - column.setHtmlType(ToolCodegenColumnHtmlTypeEnum.INPUT.getType());
217   - }
218   - }
219   -
220 70 }
... ...