sometimes, sql is just better!
{
LambdaQueryWrapper<SourceConfig> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(SourceConfig::getId, list.stream().map(HandoverResourceInfo::getId).collect(Collectors.toList()));
queryWrapper.and(wrapper -> wrapper.eq(SourceConfig::getCreateUser, handoverOrder.getFromUser()).or()
.eq(SourceConfig::getUpdateUser, handoverOrder.getFromUser()));
List<SourceConfig> sourceList = sourceConfigService.list(queryWrapper);
// 获取变更
if (ObjectUtils.isNotEmpty(sourceList)) {
List<SourceConfig> updateList = new ArrayList<>();
sourceList.forEach(item -> {
boolean update = false;
if (item.getCreateUser().equals(handoverOrder.getFromUser())) {
item.setCreateUser(handoverOrder.getToUser());
update = true;
}
if (item.getUpdateUser().equals(handoverOrder.getFromUser())) {
item.setUpdateUser(handoverOrder.getToUser());
update = true;
}
if (ObjectUtils.isNotEmpty(item.getUsers())) {
String finalUsers = replaceFromArrayStr(item.getUsers(), handoverOrder.getFromUser(), handoverOrder.getToUser());
item.setUsers(finalUsers);
update = true;
}
if (update) {
item.setUpdateUser(currentUser);
item.setUpdateTime(new Date());
updateList.add(item);
}
});
//执行变更
if (updateList.size() > 0) {
log.info("update source size: {}", updateList.size());
sourceConfigService.saveOrUpdateBatch(updateList);
}
}
}
private static String replaceFromArrayStr(String listStr, String target, String to) {
String[] array = listStr.split(",");
for (int i = 0; i < array.length; i++) {
if (array[i].equals(target)) {
array[i] = to;
}
}
return Joiner.on(",").join(
Arrays.stream(array).filter(Objects::nonNull).collect(Collectors.toList()));
}
<update id="updateSourceConfig">
update d_source_config
set `update_user` = replace(update_user, #{fromUser}, #{toUser}),
`create_user` = replace(create_user, #{fromUser}, #{toUser}),
`users` = replace(users, #{fromUser}, #{toUser})
where id in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item.id}
</foreach>
</update>
No Comments
Leave a comment Cancel