fix: 产品标准去除重复文件接口

This commit is contained in:
wxyclub
2023-11-20 10:32:13 +08:00
parent 31a775e2d0
commit 5f1032a92b
3 changed files with 68 additions and 0 deletions
@@ -91,4 +91,11 @@ public class SarBussStandFileController extends BaseController<SarBussStandFile>
String result = sarBussStandFileEOService.batchUpdateSarBussFileRepeat();
return Result.success(result);
}
@ApiOperation(value = "企标发布稿重复问题,去重处理,产品标准下划线和斜杠问题")
@GetMapping("/batchUpdateSarBussFileRepeat2")
public ResponseMessage<String> batchUpdateSarBussFileRepeat2() throws Exception {
String result = sarBussStandFileEOService.batchUpdateSarBussFileRepeat2();
return Result.success(result);
}
}
@@ -23,4 +23,5 @@ public interface ISarBussStandFileService extends IService<SarBussStandFile> {
ResponseMessage<List<SarBussStandFile>> batchUpdateSarBussFileMQ();
String batchUpdateSarBussFileRepeat();
String batchUpdateSarBussFileRepeat2();
}
@@ -191,6 +191,66 @@ public class SarBussStandFileServiceImpl extends ServiceImpl<SarBussStandFileDao
}
return "去重成功";
}
@Override
public String batchUpdateSarBussFileRepeat2() {
// 获取所有企标详情的企标ID和发布稿字段
LambdaQueryWrapper<SarBussStandAttrInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SarBussStandAttrInfo::getValidFlag,"0");
wrapper.isNotNull(SarBussStandAttrInfo::getFbgbuss);
wrapper.ne(SarBussStandAttrInfo::getFbgbuss,"");
wrapper.select(SarBussStandAttrInfo::getStandId,SarBussStandAttrInfo::getFbgbuss);
List<SarBussStandAttrInfo> allStand = standAttrInfoService.list(wrapper);
// 转换为Map
Map<String,String> fbBussMap = new HashMap<>();
allStand.forEach(each -> fbBussMap.put(each.getStandId(),each.getFbgbuss()));
// 循环每条数据
for (Map.Entry<String, String> entry : fbBussMap.entrySet()) {
// 把发布告文件做分割
List<String> attIdList = Arrays.asList(entry.getValue().split(","));
// 根据发布稿文件查询发布告的具体信息,获取原文件名
LambdaQueryWrapper<SarBussStandFile> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(SarBussStandFile::getValidFlag,"0");
wrapper1.in(SarBussStandFile::getAttId, attIdList);
List<SarBussStandFile> sarBussStandFileList = sarStandFileEODao.selectList(wrapper1);
sarBussStandFileList.forEach(each -> {
String fileName = each.getFileName().replace("/", "").replace("_", "");
each.setFileName(fileName);
});
// 使用 HashMap 记录已经出现过的 fileName
Map<String, SarBussStandFile> fileNameMap = new HashMap<>();
// 最终的结果列表
List<SarBussStandFile> deduplicatedList = new ArrayList<>();
// 遍历原始列表
for (SarBussStandFile file : sarBussStandFileList) {
String fileName = file.getFileName();
// 如果 fileName 已经在 map 中
if (fileNameMap.containsKey(fileName)) {
// 比较 createTime,保留更新时间较新的对象
SarBussStandFile existingFile = fileNameMap.get(fileName);
if (file.getCreationTime().after(existingFile.getCreationTime())) {
fileNameMap.put(fileName, file);
}
} else {
// 如果 fileName 不存在,将该 fileName 加入 map,并将当前对象加入结果列表
fileNameMap.put(fileName, file);
deduplicatedList.add(file);
}
}
// 如果长度不相等,说明执行了去重,需要修改,重新放回企标详情表中
String fbgbuss = deduplicatedList.stream().map(SarBussStandFile::getAttId).collect(Collectors.joining(","));
if (fbgbuss.length() != entry.getValue().length()) {
LambdaUpdateWrapper<SarBussStandAttrInfo> wrapper2 = new LambdaUpdateWrapper<>();
wrapper2.eq(SarBussStandAttrInfo::getStandId,entry.getKey());
wrapper2.set(SarBussStandAttrInfo::getFbgbuss,fbgbuss);
standAttrInfoService.update(wrapper2);
logger.info("出现重复的企标:"+ entry.getKey() + ",去重后发布稿包含:" + fbgbuss + "---去重前发布稿包含:" + entry.getValue());
}
}
return "去重成功";
}
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));