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 package cn.iocoder.dashboard.modules.tool.service.codegen.impl; 1 package cn.iocoder.dashboard.modules.tool.service.codegen.impl;
2 2
3 import cn.hutool.core.collection.CollUtil; 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 import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService; 12 import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService;
12 -import com.google.common.collect.Sets;  
13 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
14 import org.springframework.transaction.annotation.Transactional; 14 import org.springframework.transaction.annotation.Transactional;
15 15
16 import javax.annotation.Resource; 16 import javax.annotation.Resource;
17 -import java.math.BigDecimal;  
18 -import java.util.*; 17 +import java.util.List;
19 18
20 /** 19 /**
21 * 代码生成 Service 实现类 20 * 代码生成 Service 实现类
@@ -25,74 +24,6 @@ import java.util.*; @@ -25,74 +24,6 @@ import java.util.*;
25 @Service 24 @Service
26 public class ToolCodegenServiceImpl implements ToolCodegenService { 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 @Resource 27 @Resource
97 private ToolInformationSchemaTableMapper informationSchemaTableMapper; 28 private ToolInformationSchemaTableMapper informationSchemaTableMapper;
98 @Resource 29 @Resource
@@ -102,6 +33,11 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { @@ -102,6 +33,11 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
102 @Resource 33 @Resource
103 private ToolCodegenColumnMapper codegenColumnMapper; 34 private ToolCodegenColumnMapper codegenColumnMapper;
104 35
  36 + @Resource
  37 + private ToolCodegenBuilder codegenBuilder;
  38 + @Resource
  39 + private ToolCodegenEngine codegenEngine;
  40 +
105 @Override 41 @Override
106 @Transactional 42 @Transactional
107 public Long createCodegenTable(String tableName) { 43 public Long createCodegenTable(String tableName) {
@@ -119,102 +55,16 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { @@ -119,102 +55,16 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
119 throw new RuntimeException(""); // TODO 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 codegenTableMapper.insert(table); 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 columns.forEach(column -> { 63 columns.forEach(column -> {
129 - initColumnDefault(column);  
130 column.setTableId(table.getId()); 64 column.setTableId(table.getId());
131 codegenColumnMapper.insert(column); // TODO 批量插入 65 codegenColumnMapper.insert(column); // TODO 批量插入
132 }); 66 });
133 return table.getId(); 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 }