Commit 4bd6d9e23c6a10afaf11253a827e31828f80f424

Authored by xp.Huang
1 parent ce7aceb2

fix:修复一个租户两个角色时,保存菜单时数据库联合主键冲突

... ... @@ -249,13 +249,17 @@ public class SysRoleServiceImpl extends AbstractBaseService<RoleMapper, SysRoleE
249 249 .eq(SysRoleEntity::getRoleType, RoleEnum.CUSTOMER_USER.name()));
250 250 customerRoles.forEach(cr -> menuMapper.removeMenuFromRole(cr.getId(), removeMenus));
251 251 }
252   - newMenus.forEach(
253   - menu -> {
254   - SysTenantMenuEntity tenantMenu = new SysTenantMenuEntity();
255   - tenantMenu.setMenuId(menu);
256   - tenantMenu.setTenantId(updateTenantId);
257   - tenantMenuMapper.insert(tenantMenu);
258   - });
  252 + if (!newMenus.isEmpty()) {
  253 + // 如果新增的菜单,在该租户下的另外一个角色已经存在了,就不需要再插入数据库
  254 + List<String> chechResultList = checkNewMenus(updateTenantId, newMenus);
  255 + chechResultList.forEach(
  256 + menu -> {
  257 + SysTenantMenuEntity tenantMenu = new SysTenantMenuEntity();
  258 + tenantMenu.setMenuId(menu);
  259 + tenantMenu.setTenantId(updateTenantId);
  260 + tenantMenuMapper.insert(tenantMenu);
  261 + });
  262 + }
259 263 });
260 264 }
261 265 cacheUtils.invalidateCacheName(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY);
... ... @@ -283,4 +287,27 @@ public class SysRoleServiceImpl extends AbstractBaseService<RoleMapper, SysRoleE
283 287 }
284 288 return baseMapper.findRoleInfo(roleDTO);
285 289 }
  290 +
  291 + private List<String> checkNewMenus(String tenantId, List<String> newMenus) {
  292 + List<SysTenantMenuEntity> existEntities =
  293 + tenantMenuMapper.selectList(
  294 + new LambdaQueryWrapper<SysTenantMenuEntity>()
  295 + .eq(SysTenantMenuEntity::getTenantId, tenantId)
  296 + .in(SysTenantMenuEntity::getMenuId, newMenus));
  297 + if (!existEntities.isEmpty()) {
  298 + List<String> existMenuIds =
  299 + existEntities.stream().map(SysTenantMenuEntity::getMenuId).collect(Collectors.toList());
  300 + List<String> tempList = existMenuIds;
  301 + for (String newMenu : newMenus) {
  302 + for (String menuId : existMenuIds) {
  303 + if (Objects.equals(menuId, newMenu)) {
  304 + tempList.remove(newMenu);
  305 + break;
  306 + }
  307 + }
  308 + }
  309 + return tempList;
  310 + }
  311 + return newMenus;
  312 + }
286 313 }
... ...