Commit 15dd67d647d7a9baf8b04ef8b303cbc629426566

Authored by 芋道源码
Committed by Gitee
2 parents 62a6a993 38161f05

!287 fix:(同步失败,不存在改变)代码生成,修改字段注解都不能修改

Merge pull request !287 from halfninety/master
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java
... ... @@ -28,6 +28,7 @@ import java.util.ArrayList;
28 28 import java.util.List;
29 29 import java.util.Map;
30 30 import java.util.Set;
  31 +import java.util.function.BiPredicate;
31 32 import java.util.stream.Collectors;
32 33  
33 34 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
... ... @@ -154,12 +155,27 @@ public class CodegenServiceImpl implements CodegenService {
154 155 // 构建 CodegenColumnDO 数组,只同步新增的字段
155 156 List<CodegenColumnDO> codegenColumns = codegenColumnMapper.selectListByTableId(tableId);
156 157 Set<String> codegenColumnNames = CollectionUtils.convertSet(codegenColumns, CodegenColumnDO::getColumnName);
  158 +
  159 + //计算需要修改的字段,插入时重新插入,删除时将原来的删除
  160 + BiPredicate<TableField, CodegenColumnDO> pr =
  161 + (tableField, codegenColumn) -> tableField.getType().equals(codegenColumn.getDataType())
  162 + && tableField.getMetaInfo().isNullable() == codegenColumn.getNullable()
  163 + && tableField.isKeyFlag() == codegenColumn.getPrimaryKey()
  164 + && tableField.getComment().equals(codegenColumn.getColumnComment());
  165 + Map<String, CodegenColumnDO> codegenColumnDOMap = CollectionUtils.convertMap(codegenColumns, CodegenColumnDO::getColumnName);
  166 + //需要修改的字段
  167 + Set<String> modifyFieldNames = tableFields.stream()
  168 + .filter(tableField -> codegenColumnDOMap.get(tableField.getColumnName()) != null
  169 + && !pr.test(tableField, codegenColumnDOMap.get(tableField.getColumnName())))
  170 + .map(TableField::getColumnName)
  171 + .collect(Collectors.toSet());
157 172 // 计算需要删除的字段
158 173 Set<String> tableFieldNames = CollectionUtils.convertSet(tableFields, TableField::getName);
159   - Set<Long> deleteColumnIds = codegenColumns.stream().filter(column -> !tableFieldNames.contains(column.getColumnName()))
  174 + Set<Long> deleteColumnIds = codegenColumns.stream()
  175 + .filter(column -> (!tableFieldNames.contains(column.getColumnName())) || modifyFieldNames.contains(column.getColumnName()))
160 176 .map(CodegenColumnDO::getId).collect(Collectors.toSet());
161 177 // 移除已经存在的字段
162   - tableFields.removeIf(column -> codegenColumnNames.contains(column.getColumnName()));
  178 + tableFields.removeIf(column -> codegenColumnNames.contains(column.getColumnName()) && (!modifyFieldNames.contains(column.getColumnName())));
163 179 if (CollUtil.isEmpty(tableFields) && CollUtil.isEmpty(deleteColumnIds)) {
164 180 throw exception(CODEGEN_SYNC_NONE_CHANGE);
165 181 }
... ...