From 693f70da11701e777203e263d7da41abb648dd0f Mon Sep 17 00:00:00 2001 From: guyue <1721849008@qq.com> Date: 星期三, 16 七月 2025 20:16:29 +0800 Subject: [PATCH] 对比采集,实时状态 --- src/main/java/com/linghu/controller/CollectController.java | 59 ++++++++++++++++++++++++++++++++++------------------------- 1 files changed, 34 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/linghu/controller/CollectController.java b/src/main/java/com/linghu/controller/CollectController.java index 1ace567..629e9c0 100644 --- a/src/main/java/com/linghu/controller/CollectController.java +++ b/src/main/java/com/linghu/controller/CollectController.java @@ -141,7 +141,7 @@ // ... 原有逻辑 ... int maxConcurrentUsers = searchTaskRequest.getConfig() != null ? searchTaskRequest.getConfig().getMax_concurrent_users() : 3; - List<List<UserDto>> userBatches = splitUsersIntoBatches(searchTaskRequest.getUsers(), maxConcurrentUsers, keywordId); + List<List<UserDto>> userBatches = splitUsersIntoBatches(searchTaskRequest.getUsers(), maxConcurrentUsers, keywordId,searchTaskRequest.getIs_first()); // 创建批次队列并存入全局映射 @@ -368,13 +368,14 @@ // .then(); // } - private List<List<UserDto>> splitUsersIntoBatches(List<UserDto> users, int batchSize,Integer keywordId) { + private List<List<UserDto>> splitUsersIntoBatches(List<UserDto> users, int batchSize,Integer keywordId,Boolean isFirst) { Keyword keyword = keywordService.getById(keywordId); - if (null==keyword.getNum()){ - keyword.setNum(0); + if (isFirst){ + keyword.setNum(1); + }else { + keyword.setNum(keyword.getNum()+1); } - keyword.setNum(keyword.getNum()+1); keywordService.updateById(keyword); List<List<UserDto>> batches = new ArrayList<>(); @@ -642,13 +643,13 @@ // if (keywordTasks.stream().allMatch(task -> // "completed".equals(task.getStatus()) || "false".equals(task.getStatus()) || "canceled".equals(task.getStatus()) // )) { - keyword.setStatus("canceled"); + keyword.setStatus("completed"); keywordService.updateById(keyword); // log.info("关键词 {} 所有任务已完成,更新状态为 completed", keywordId); // } //更新提问词状态为取消 - questionService.update(new LambdaUpdateWrapper<Question>().eq(Question::getKeyword_id, keywordId).set(Question::getStatus, "canceled")); + questionService.update(new LambdaUpdateWrapper<Question>().eq(Question::getKeyword_id, keywordId).isNull(Question::getResponse).set(Question::getStatus, "canceled")); // 更新订单状态 String orderId = keyword.getOrder_id(); @@ -835,9 +836,9 @@ * @param domain 平台域名 * @return 已存在或新创建的Platform */ - private Platform getOrCreatePlatform(String domain) { + private Platform getOrCreatePlatform(String domain,String platformName) { // 1. 先尝试查询已存在的平台 - Platform platform = platformService.getPlatformByDomain(domain); + Platform platform = platformService.getPlatformByDomain(domain,platformName); if (platform != null) { return platform; } @@ -856,7 +857,12 @@ // 2.2 构建新平台对象 Platform newPlatform = new Platform(); newPlatform.setDomain(domain); - newPlatform.setPlatform_name(domain); // 平台名称默认使用域名,可根据实际需求调整 + if (platformName != null) { + newPlatform.setPlatform_name(platformName); + }else { + newPlatform.setPlatform_name(domain); + } + // 平台名称默认使用域名,可根据实际需求调整 newPlatform.setType_id(defaultType.getType_id()); newPlatform.setCreate_time(LocalDateTime.now()); // 补充创建时间 @@ -867,7 +873,7 @@ } catch (DuplicateKeyException e) { // 3. 若捕获到重复键异常,说明并发创建了,重新查询即可(此时数据库中已存在该平台) log.warn("平台domain={}已存在,无需重复创建", domain, e); - return platformService.getPlatformByDomain(domain); // 重新查询,一定能获取到 + return platformService.getPlatformByDomain(domain,platformName); // 重新查询,一定能获取到 } catch (Exception e) { // 处理其他异常(如数据库连接失败等) log.error("创建平台失败,domain={}", domain, e); @@ -944,6 +950,18 @@ System.out.println("订单[" + orderId + "]下无关键词,跳过状态更新"); return; } + boolean allValid2 = orderKeywords.stream() + .allMatch(k -> "completed".equals(k.getStatus()) || "false".equals(k.getStatus()) || "canceled".equals(k.getStatus())); + if (allValid2) { + Orders orders = orderService.getById(orderId); + if (orders != null) { + orders.setStatus(1); // 假设Orders有Integer类型的status字段 + orderService.updateById(orders); + System.out.println("订单[" + orderId + "]所有关键词采集完成或者取消,已更新状态为1"); + } else { + System.out.println("未找到订单[" + orderId + "],无法更新状态"); + } + } // 3. 检查所有关键词的状态是否均为 completed 或 false boolean allValid = orderKeywords.stream() .allMatch(k -> "completed".equals(k.getStatus()) || "false".equals(k.getStatus())); @@ -959,18 +977,7 @@ System.out.println("未找到订单[" + orderId + "],无法更新状态"); } } - boolean allValid2 = orderKeywords.stream() - .allMatch(k -> "completed".equals(k.getStatus()) || "false".equals(k.getStatus()) || "canceled".equals(k.getStatus())); - if (allValid) { - Orders orders = orderService.getById(orderId); - if (orders != null) { - orders.setStatus(1); // 假设Orders有Integer类型的status字段 - orderService.updateById(orders); - System.out.println("订单[" + orderId + "]所有关键词采集完成或者取消,已更新状态为1"); - } else { - System.out.println("未找到订单[" + orderId + "],无法更新状态"); - } - } + Orders orders = orderService.getById(keyword.getOrder_id()); @@ -1075,7 +1082,9 @@ reference.setNum(keyword.getNum()); reference.setTask_id(result.getTask_id()); reference.setKeyword_id(keyword.getKeyword_id()); - reference.setCreate_time(LocalDateTime.now()); + if (null!=ref.getPublish_time()) { + reference.setCreate_time(ref.getPublish_time().atStartOfDay()); + } /* // 处理平台和类型关联 Platform platform = platformService.getPlatformByDomain(reference.getDomain()); @@ -1108,7 +1117,7 @@ } */ // 关键:使用优化后的方法获取平台,避免重复创建 - Platform platform = getOrCreatePlatform(ref.getDomain()); + Platform platform = getOrCreatePlatform(ref.getDomain(),ref.getPlatform_name()); reference.setPlatform_id(platform.getPlatform_id()); reference.setType_id(platform.getType_id()); // 直接从平台获取类型ID,更可靠 // 添加到结果列表 -- Gitblit v1.7.1