diff --git a/src/main/java/com/biutag/supervision/service/MailBoxCaptureService.java b/src/main/java/com/biutag/supervision/service/MailBoxCaptureService.java index e37504b..740d280 100644 --- a/src/main/java/com/biutag/supervision/service/MailBoxCaptureService.java +++ b/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 involveProblemMapping = loadMayorMailboxInvolveProblemMapping(); + Set 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 loadMergedMailboxOriginIds() { + Set originIds = new HashSet<>(); + List mergedRecords = complaintCollectionMapper.selectList( + new LambdaQueryWrapper() + .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; + } + // ==================== 单位查询 ==================== /**