查询数据递增编号确保名称唯一,copy就完事~

背景:现需求要实现分享资源给其他人时入库的数据名称要唯一。

实现思路:后台查询该条分享数据时,将创建者改为接受者,并且先拼接分享文件名称到库里查询是否存在重名数据,若存在,需要递增拼接的编号,暂定拼接编号从(1)开始。

//@Param recipientId 接收者
//@Param baseNameWithExtension 文件名全称
//返回 新的文件名字
public String generateUniqueName(Long recipientId, String baseNameWithExtension) {

        String[] parts = baseNameWithExtension.split("\\.(?=[^\\.]+$)"); // 使用正则确保只按最后一个点分割
        if (parts.length != 2) {  
            throw new IllegalArgumentException("baseNameWithExtension must contain exactly     one dot for the extension");  
        } 
        String baseName = parts[0];
        String extension = parts[1];
        String uniqueName = baseName;
        int count = 1;

        while (hasBaseName(recipientId, uniqueName, extension)) {
            uniqueName = baseName + "(" + count++ + ")";
        }
        return uniqueName + "." + extension;
    }

    private Boolean hasBaseName(Long recipientId, String uniqueName, String extension) {
        LambdaQueryWrapper<ResourceDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(ResourceDO::getCreator, recipientId.toString())
                .eq(ResourceDO::getName, uniqueName + "." + extension);
        return resourceMapper.selectCount(lambdaQueryWrapper) > 0;
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值