|
|
|
@ -11,6 +11,7 @@ import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Comparator; |
|
|
|
import java.util.HashSet; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Set; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
@ -28,15 +29,21 @@ public class GridTableUserServiceImpl extends ServiceImpl<GridTableUserDao, Grid |
|
|
|
return; |
|
|
|
} |
|
|
|
GridTableUser first = gridTableUsers.get(0); |
|
|
|
// 用"整组替换"代替逐行 update,减少锁竞争和死锁概率 |
|
|
|
// 用“整组替换”代替逐行 update,减少锁竞争和死锁概率 |
|
|
|
lambdaUpdate() |
|
|
|
.eq(GridTableUser::getUserId, first.getUserId()) |
|
|
|
.eq(GridTableUser::getFunctionId, first.getFunctionId()) |
|
|
|
.eq(GridTableUser::getTableId, first.getTableId()) |
|
|
|
.remove(); |
|
|
|
|
|
|
|
gridTableUsers.sort(Comparator.comparing(GridTableUser::getSortLv, Comparator.nullsLast(Integer::compareTo))); |
|
|
|
this.saveBatch(gridTableUsers); |
|
|
|
|
|
|
|
// 按 columnProp 去重:防止 grid_table_default 历史重复行传播到 user 表 |
|
|
|
Set<String> seen = new HashSet<>(); |
|
|
|
List<GridTableUser> deduped = gridTableUsers.stream() |
|
|
|
.filter(item -> seen.add(item.getColumnProp())) |
|
|
|
.sorted(Comparator.comparing(GridTableUser::getSortLv, Comparator.nullsLast(Integer::compareTo))) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
this.saveBatch(deduped); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|