1. 随笔

sql > code @ sometimes

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>
Comments to: sql > code @ sometimes

Your email address will not be published. Required fields are marked *