Commit 15dd67d647d7a9baf8b04ef8b303cbc629426566
Committed by
Gitee
!287 fix:(同步失败,不存在改变)代码生成,修改字段注解都不能修改
Merge pull request !287 from halfninety/master
Showing
1 changed file
with
18 additions
and
2 deletions
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,6 +28,7 @@ import java.util.ArrayList; | ||
| 28 | import java.util.List; | 28 | import java.util.List; |
| 29 | import java.util.Map; | 29 | import java.util.Map; |
| 30 | import java.util.Set; | 30 | import java.util.Set; |
| 31 | +import java.util.function.BiPredicate; | ||
| 31 | import java.util.stream.Collectors; | 32 | import java.util.stream.Collectors; |
| 32 | 33 | ||
| 33 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 34 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| @@ -154,12 +155,27 @@ public class CodegenServiceImpl implements CodegenService { | @@ -154,12 +155,27 @@ public class CodegenServiceImpl implements CodegenService { | ||
| 154 | // 构建 CodegenColumnDO 数组,只同步新增的字段 | 155 | // 构建 CodegenColumnDO 数组,只同步新增的字段 |
| 155 | List<CodegenColumnDO> codegenColumns = codegenColumnMapper.selectListByTableId(tableId); | 156 | List<CodegenColumnDO> codegenColumns = codegenColumnMapper.selectListByTableId(tableId); |
| 156 | Set<String> codegenColumnNames = CollectionUtils.convertSet(codegenColumns, CodegenColumnDO::getColumnName); | 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 | Set<String> tableFieldNames = CollectionUtils.convertSet(tableFields, TableField::getName); | 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 | .map(CodegenColumnDO::getId).collect(Collectors.toSet()); | 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 | if (CollUtil.isEmpty(tableFields) && CollUtil.isEmpty(deleteColumnIds)) { | 179 | if (CollUtil.isEmpty(tableFields) && CollUtil.isEmpty(deleteColumnIds)) { |
| 164 | throw exception(CODEGEN_SYNC_NONE_CHANGE); | 180 | throw exception(CODEGEN_SYNC_NONE_CHANGE); |
| 165 | } | 181 | } |