add:企标发布稿文件出现文件重复,编写去重接口

This commit is contained in:
wxyclub
2023-10-24 22:11:52 +08:00
parent 326c5c997d
commit 45fb0a749f
3 changed files with 65 additions and 0 deletions
@@ -83,4 +83,12 @@ public class SarBussStandFileController extends BaseController<SarBussStandFile>
//非在线编辑文件可转换pdf
return sarBussStandFileEOService.batchUpdateSarBussFileMQ();
}
@ApiOperation(value = "企标发布稿重复问题,去重处理")
@GetMapping("/batchUpdateSarBussFileRepeat")
public ResponseMessage<String> batchUpdateSarBussFileRepeat() throws Exception {
String result = sarBussStandFileEOService.batchUpdateSarBussFileRepeat();
return Result.success(result);
}
}
@@ -21,4 +21,6 @@ public interface ISarBussStandFileService extends IService<SarBussStandFile> {
ResponseMessage<List<SarBussStandFile>> batchUpdateSarBussFile();
ResponseMessage<List<SarBussStandFile>> batchUpdateSarBussFileMQ();
String batchUpdateSarBussFileRepeat();
}
@@ -7,11 +7,15 @@ import com.adc.da.common.UseModuleEnum;
import com.adc.da.http.ResponseMessage;
import com.adc.da.http.Result;
import com.adc.da.mq.CreateOnlineEditingFileMQService;
import com.adc.da.slrs.sarBussStandAttrInfo.entity.SarBussStandAttrInfo;
import com.adc.da.slrs.sarBussStandAttrInfo.service.ISarBussStandAttrInfoService;
import com.adc.da.slrs.sarBussStandFile.entity.SarBussStandFile;
import com.adc.da.slrs.sarBussStandFile.dao.SarBussStandFileDao;
import com.adc.da.slrs.sarBussStandFile.service.ISarBussStandFileService;
import com.adc.da.slrs.sarBussionessStand.service.impl.SarBussionessStandServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -20,7 +24,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* <p>
@@ -47,6 +56,9 @@ public class SarBussStandFileServiceImpl extends ServiceImpl<SarBussStandFileDao
@Autowired
private CreateOnlineEditingFileMQService createOnlineEditingFileMQService;
@Resource
private ISarBussStandAttrInfoService standAttrInfoService;
@Override
public List<SarBussStandFile> selectFileByAttId(String attId) throws Exception{
return sarStandFileEODao.selectFileByAttId(attId);
@@ -140,4 +152,47 @@ public class SarBussStandFileServiceImpl extends ServiceImpl<SarBussStandFileDao
}
return Result.success(sarBussStandFileArrayList);
}
@Override
public String batchUpdateSarBussFileRepeat() {
// 获取所有企标详情的企标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);
// 对文件名做去重
List<SarBussStandFile> collect = sarBussStandFileList.stream()
.filter(distinctByKey(SarBussStandFile::getFileName))
// .sorted(Comparator.comparing(SarBussStandFile::getCreationTime))
.collect(Collectors.toList());
// 如果长度不相等,说明执行了去重,需要修改,重新放回企标详情表中
String fbgbuss = collect.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));
}
}