实现类
public Result saveManualPermission(ManualsPermissionVO manualsPermissionVO) {
// 检查权限列表是否为空,为空直接返回成功结果
if (manualsPermissionVO.getPermissions() == null || manualsPermissionVO.getPermissions().isEmpty()) {
return Result.OK();
}
String manualId = manualsPermissionVO.getManualId();
List<Map<String, String>> permissionLists = manualsPermissionVO.getPermissions();
List<TManualsPermission> toBeSavedOrUpdate = new ArrayList<>();
for (Map<String, String> permissions : permissionLists) {
Set<String> userIds = permissions.keySet();
userIds = new HashSet<>(userIds);
// 批量查询已存在的权限
LambdaQueryWrapper<TManualsPermission> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(TManualsPermission::getUserId, userIds).eq(TManualsPermission::getManualId, manualId);
List<TManualsPermission> existingPermissions = manualsPermissionMapper.selectList(queryWrapper);
for (Map.Entry<String, String> entry : permissions.entrySet()) {
String userId = entry.getKey();
String permission = entry.getValue();
// 处理权限数据:"1"表示允许,其它值均视为禁止
boolean hasPermission = "1".equals(permission);
TManualsPermission existingPermission = existingPermissions.stream()
.filter(p -> p.getUserId().equals(userId))
.findFirst()
.orElse(null);
if (existingPermission != null) {
existingPermission.setPermission(hasPermission);
existingPermission.setUpdateTime(TimeHelper.getCurrentTime());
existingPermission.setUpdateId(UserHandle.getUserId());
toBeSavedOrUpdate.add(existingPermission);
} else {
TManualsPermission manualsPermission = new TManualsPermission();
manualsPermission.setPkId(String.valueOf(DbId.generate()));
manualsPermission.setUserId(userId);
manualsPermission.setManualId(manualId);
manualsPermission.setPermission(hasPermission);
manualsPermission.setCreateTime(TimeHelper.getCurrentTime());
manualsPermission.setCreateId(UserHandle.getUserId());
toBeSavedOrUpdate.add(manualsPermission);
}
}
}
// 执行批量插入或更新
if (!toBeSavedOrUpdate.isEmpty()) {
try {
manualsPermissionMapper.insertOrUpdateBatch(toBeSavedOrUpdate);
} catch (Exception e) {
log.error("授权异常,请联系管理员", e);
return Result.error("授权异常,请联系管理员");
}
}
return Result.OK();
}
Xml文件中的SQL
<insert id="insertOrUpdateBatch">
INSERT INTO t_manuals_permission (
pk_id,
user_id,
manual_id,
is_permission,
create_time,
create_id,
update_time,
update_id
) VALUES
<foreach item="item" index="index" collection="list" open="(" separator="),(" close=")">
#{item.pkId},
#{item.userId},
#{item.manualId},
#{item.isPermission},
#{item.createTime},
#{item.createId},
#{item.updateTime},
#{item.updateId}
</foreach>
ON DUPLICATE KEY UPDATE
is_permission = VALUES(is_permission),
update_time = VALUES(update_time),
update_id = VALUES(update_id)
</insert>