guyue
8 天以前 a9e958ce3675c4950ceddd3fd6f939cdf0d2bc5a
src/main/java/com/linghu/controller/CollectController.java
@@ -220,7 +220,7 @@
                        return Mono.just(ResponseResult.success("任务已被取消"));
                    }
                    // 如果任务状态是"submitted"或"running",继续轮询
                    if (!"completed".equalsIgnoreCase(statusResponse.getStatus()) && !"failed".equalsIgnoreCase(statusResponse.getStatus()) && !"cancelled".equalsIgnoreCase(statusResponse.getStatus()) ) {
                    if (!"completed".equalsIgnoreCase(statusResponse.getStatus()) && !"failed".equalsIgnoreCase(statusResponse.getStatus()) && !"cancelled".equalsIgnoreCase(statusResponse.getStatus()) && !("ERROR".equalsIgnoreCase(statusResponse.getStatus()) && statusResponse.getMessage().contains("Task not found")) ) {
                        return Mono.delay(Duration.ofSeconds(5))  // 延迟 5 秒后再次查询
                                .flatMap(aLong -> waitForTaskCompletion(taskId, batchQueue, searchTaskRequest, keywordId));  // 递归调用继续等待
                    } else {
@@ -589,7 +589,8 @@
     */
    private Platform getOrCreatePlatform(String domain,String platformName) {
        // 1. 先尝试查询已存在的平台
        Platform platform = platformService.getPlatformByDomain(domain,platformName);
        Platform platform = platformService.getPlatformByDomain(domain);
        if (platform != null) {
            return platform;
        }
@@ -624,7 +625,7 @@
        } catch (DuplicateKeyException e) {
            // 3. 若捕获到重复键异常,说明并发创建了,重新查询即可(此时数据库中已存在该平台)
            log.warn("平台domain={}已存在,无需重复创建", domain, e);
            return platformService.getPlatformByDomain(domain,platformName); // 重新查询,一定能获取到
            return platformService.getPlatformByDomain(domain); // 重新查询,一定能获取到
        } catch (Exception e) {
            // 处理其他异常(如数据库连接失败等)
            log.error("创建平台失败,domain={}", domain, e);
@@ -650,14 +651,14 @@
                    System.out.println("未找到关联的关键词,task_id: " + result.getTask_id());
                    //报错
                    throw new Exception("未找到关联的关键词,task_id: " + result.getTask_id());
//                    return;
                }
                LambdaQueryWrapper<KeywordTask> keywordTaskWrapper2 = new LambdaQueryWrapper<>();
                keywordTaskWrapper2.eq(KeywordTask::getKeyword_id, keyword.getKeyword_id());
                List<KeywordTask> keywordTasks = keywordTaskService.list(keywordTaskWrapper2);
                //如果全部为completed  关键词也为completed  ,如果关联关系没有任务id,或者状态为running  ,关键词为submitted,
                if (keywordTasks.stream().allMatch(task -> "completed".equals(task.getStatus()) || "false".equals(task.getStatus()) || "cancelled".equals(task.getStatus()) ||"canceled".equals(task.getStatus())) ) {
                //如果全部为completed 或者错误、取消、任务不存在 关键词也为completed  ,如果关联关系没有任务id,或者状态为running  ,关键词为submitted,
                if (keywordTasks.stream().allMatch(task -> "completed".equals(task.getStatus()) || "false".equals(task.getStatus()) || "cancelled".equals(task.getStatus()) ||"canceled".equals(task.getStatus()) || "nonentity".equals(task.getStatus())) ) {
                    keyword.setStatus("completed");
                    keywordService.updateById(keyword);
@@ -724,11 +725,27 @@
                List<Reference> allReferences = new ArrayList<>();
                List<Reference> resultList = new ArrayList<>();
                // 4. 新增:统计所有提问词的结果状态
                boolean allEmptyReferences = true; // 所有提问词引用数据为空
                boolean allSystemBusy = true;      // 所有提问词系统繁忙
                // 遍历结果
                for (UserResult userResult : result.getResults()) {
                    //更新账号状态
                    if ( "failed".equals(userResult.getStatus())){
                        if (userResult.getError().contains("登录失败")){
                            LambdaUpdateWrapper<User> userWrapper =  new LambdaUpdateWrapper<>();
                            userWrapper.eq(User::getUser_email, userResult.getUser_email());
                            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, "账户登录失败"));
                        }else if (userResult.getError().contains("信息错误")){
                            LambdaUpdateWrapper<User> userWrapper =  new LambdaUpdateWrapper<>();
                            userWrapper.eq(User::getUser_email, userResult.getUser_email());
                            userWrapper.set(User::getStatus, "信息错误");
                            userService.update(userWrapper);
                        }
                    }
                    for (QuestionResult questionResult : userResult.getQuestions_results()) {
                        try {
                            Question question = questionMap.get(questionResult.getQuestion());
@@ -765,15 +782,13 @@
                                String finalStatus = determineFinalStatus(allResults);
                                if ("success".equals(finalStatus)){
                                    question.setStatus("success");
                                    question.setError("");
                                }else if ("no_results".equals(finalStatus)){
                                    question.setStatus("failed");
                                    question.setStatus("success");
                                    question.setError("采集结果无引用数据");
                                }else if ("busyness".equals(finalStatus)){
                                    question.setStatus("failed");
                                    question.setError("DeepSeek繁忙,请稍后尝试");
                                }else if ("failed".equals(finalStatus)){
                                    question.setStatus("failed");
                                    question.setError("所有账号登录失败");
                                }
                                // 更新问题对象
@@ -876,25 +891,7 @@
                            System.out.println("处理问题结果失败: " + e.getMessage());
                        }
                    }
                    //更新账号状态
                    if ( "failed".equals(userResult.getStatus())){
                        if (userResult.getError().contains("登录失败")){
                            LambdaUpdateWrapper<User> userWrapper =  new LambdaUpdateWrapper<>();
                            userWrapper.eq(User::getUser_email, userResult.getUser_email());
                            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, "账户登录失败"));
                        }else if (userResult.getError().contains("信息错误")){
                            LambdaUpdateWrapper<User> userWrapper =  new LambdaUpdateWrapper<>();
                            userWrapper.eq(User::getUser_email, userResult.getUser_email());
                            userWrapper.set(User::getStatus, "信息错误");
                            userService.update(userWrapper);
                        }
                    }
                }
@@ -921,7 +918,6 @@
        int totalCount = results.size();
        int emptyResponseCount = 0;
        int systemBusyCount = 0;
        int failedCount = 0;
        for (QuestionResultList result : results) {
            // 判断回答是否为空
@@ -933,9 +929,7 @@
            if ("success".equals(result.getStatus())  && (result.getResponse().isEmpty()|| result.getResponse().contains("WebDriver连接中断") || result.getResponse().contains("响应超时"))) {
                systemBusyCount++;
            }
            if ("failed".equals(result.getStatus()) && result.getError().contains("登录失败")){
                failedCount++;
            }
        }
        // 全返回系统繁忙
@@ -946,9 +940,7 @@
        if (emptyResponseCount == totalCount) {
            return "no_results";
        }
        if (failedCount == totalCount) {
            return "failed";
        }
        // 系统繁忙比例超过阈值(可配置,这里设为70%)
//        double busyRate = (double) systemBusyCount / totalCount;