背景:现需求要实现分享资源给其他人时入库的数据名称要唯一。
实现思路:后台查询该条分享数据时,将创建者改为接受者,并且先拼接分享文件名称到库里查询是否存在重名数据,若存在,需要递增拼接的编号,暂定拼接编号从(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;
}