From faa95a5b183a42a6c3fcf1d6a41d81caa33da3bc Mon Sep 17 00:00:00 2001
From: guyue <1721849008@qq.com>
Date: 星期三, 30 七月 2025 17:42:00 +0800
Subject: [PATCH] 修改定时器抢占

---
 src/main/java/com/linghu/controller/CollectController.java |   34 ++++++++++++++++++++++++++++++++--
 1 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/linghu/controller/CollectController.java b/src/main/java/com/linghu/controller/CollectController.java
index d61cf93..0200878 100644
--- a/src/main/java/com/linghu/controller/CollectController.java
+++ b/src/main/java/com/linghu/controller/CollectController.java
@@ -469,7 +469,9 @@
                 keywordService.updateById(keyword);
 
                 //更新提问词状态为取消
-                questionService.update(new LambdaUpdateWrapper<Question>().eq(Question::getKeyword_id, keywordId).isNull(Question::getResponse).set(Question::getStatus, "cancelled"));
+                questionService.update(new LambdaUpdateWrapper<Question>().eq(Question::getKeyword_id, keywordId).isNull(Question::getResponse).set(Question::getStatus, "cancelled").set(Question::getError, "任务已取消"));
+//        将所有提问词设置eroor为已取消
+//                questionService.update(new LambdaUpdateWrapper<Question>().eq(Question::getKeyword_id, keywordId).set(Question::getStatus, "failed").set(Question::getError, "任务已取消"));
 
                 // 更新订单状态
                 String orderId = keyword.getOrder_id();
@@ -1181,6 +1183,22 @@
             log.info("无有效引用数据,跳过批量保存");
             return;
         }
+//        // 在合并到 compositeKeyMap 之前
+//        validReferences = validReferences.stream()
+//                .collect(Collectors.toMap(
+//                        ref -> ref.getQuestion_id()
+//                                + "|" + ref.getPlatform_id()
+//                                + "|" + ref.getType_id()
+//                                + "|" + ref.getUrl()
+//                                + "|" + ref.getDomain()
+//                                + "|" + ref.getKeyword_id()
+//                                + "|" + ref.getNum(),
+//                        ref -> ref,
+//                        (r1, r2) -> r1  // 碰到同 key 就保第一个
+//                ))
+//                .values()
+//                .stream()
+//                .collect(Collectors.toList());
 
         // 2. 查询数据库中已存在的引用并过滤 null
         LambdaQueryWrapper<Reference> dbRefWrapper = new LambdaQueryWrapper<>();
@@ -1209,6 +1227,7 @@
                     .findFirst();
 
             Reference finalRef = existingRef.orElse(validRefGroup.get(0));
+// 重复次数 = 老的 + (这一组里一共抓到多少-1)
             int repetitionNum = (finalRef.getRepetition_num() == null ? 1 : finalRef.getRepetition_num())
                     + (validRefGroup.size() - 1);
             finalRef.setRepetition_num(repetitionNum);
@@ -1247,7 +1266,13 @@
             log.warn("引用核心字段为空,跳过映射:{}", ref);
             return;
         }
-        String key = ref.getTitle() + "|" + ref.getUrl() + "|" + ref.getDomain();
+        String key = ref.getQuestion_id() + "|"
+                + ref.getPlatform_id() + "|"
+                + ref.getType_id() + "|"
+                + ref.getTitle() + "|"
+                + ref.getUrl() + "|"
+                + ref.getDomain() + "|"
+                + ref.getNum();
         map.computeIfAbsent(key, k -> new ArrayList<>()).add(ref);
     }
 
@@ -1315,6 +1340,11 @@
             } else if (userResult.getError().contains("信息错误")) {
                 userWrapper.set(User::getStatus, "信息错误");
                 userService.update(userWrapper);
+                // 批量更新问题状态为失败
+                questionService.update(new LambdaUpdateWrapper<Question>()
+                        .eq(Question::getKeyword_id, keyword.getKeyword_id())
+                        .set(Question::getStatus, "failed")
+                        .set(Question::getError, "账户信息错误"));
             }
         }
     }

--
Gitblit v1.7.1