Browse Source

feat: 防止重复抓取合并件

master
buaixuexideshitongxue 1 month ago
parent
commit
4f63c060ad
  1. 49
      src/main/java/com/biutag/supervision/service/MailBoxCaptureService.java

49
src/main/java/com/biutag/supervision/service/MailBoxCaptureService.java

@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.biutag.supervision.constants.enums.AccountabilityTargetEnum;
import com.biutag.supervision.constants.enums.BusinessTypeEnum;
@ -50,9 +52,11 @@ import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
@ -110,6 +114,7 @@ public class MailBoxCaptureService {
log.info("【局长信箱抓取新信件】查询到投诉举报信件信件数量:{}", mailList.size());
Map<String, String> involveProblemMapping = loadMayorMailboxInvolveProblemMapping();
Set<String> mergedMailboxOriginIds = loadMergedMailboxOriginIds();
// 3. 遍历处理
int successCount = 0;
@ -118,6 +123,11 @@ public class MailBoxCaptureService {
for (Mail mail : mailList) {
try {
if (mergedMailboxOriginIds.contains(mail.getId())) {
skipCount++;
log.info("【局长信箱抓取新信件】跳过已合并源件: mailId={}", mail.getId());
continue;
}
// 每条记录在独立事务中执行
boolean success = Boolean.TRUE.equals(transactionTemplate.execute(status -> {
return doCaptureSingleMail(mail, involveProblemMapping);
@ -262,6 +272,45 @@ public class MailBoxCaptureService {
return exists;
}
/**
* 从合并历史中提取已合并的局长信箱源件编号供抓取任务排除
*/
private Set<String> loadMergedMailboxOriginIds() {
Set<String> originIds = new HashSet<>();
List<ComplaintCollection> mergedRecords = complaintCollectionMapper.selectList(
new LambdaQueryWrapper<ComplaintCollection>()
.select(ComplaintCollection::getMergeHistory)
.isNotNull(ComplaintCollection::getMergeHistory)
.ne(ComplaintCollection::getMergeHistory, "")
);
for (ComplaintCollection record : mergedRecords) {
try {
JSONObject history = JSON.parseObject(record.getMergeHistory());
JSONArray merges = history == null ? null : history.getJSONArray("merges");
if (CollectionUtil.isEmpty(merges)) {
continue;
}
for (Object merge : merges) {
JSONObject mergeRecord = JSON.parseObject(JSON.toJSONString(merge));
if (mergeRecord == null) {
continue;
}
if (ComplaintCollectionSourceTableEnum.MAYOR_MAILBOX.getCode()
.equals(mergeRecord.getString("sourceTable"))) {
String originId = mergeRecord.getString("originId");
if (StrUtil.isNotBlank(originId)) {
originIds.add(originId);
}
}
}
} catch (Exception e) {
log.warn("【局长信箱抓取新信件】解析合并历史失败,已跳过该记录: {}", e.getMessage());
}
}
return originIds;
}
// ==================== 单位查询 ====================
/**

Loading…
Cancel
Save