guyue
2025-07-18 7c6eb5045dad89fabc0eb5fd96b9fc9e6c454247
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<>();
@@ -429,6 +430,11 @@
                                        keywordTask.setTask_id(taskResponse.getTask_id());
                                        keywordTask.setStatus("pending");
                                        keywordTaskService.updateById(keywordTask);
                                    }
                                    //将提问词列表的状态转为pending
                                    for (String questionName : batchRequest.getQuestions()) {
                                        questionService.update(new LambdaUpdateWrapper<Question>().eq(Question::getKeyword_id, keyword.getKeyword_id()).eq(Question::getQuestion,questionName).set(Question::getStatus, "pending"));
                                    }
//                                    KeywordTask taskToUpdate = keywordTaskService.getOne(new LambdaQueryWrapper<KeywordTask>()
//                                            .eq(KeywordTask::getKeyword_id, keyword.getKeyword_id())
@@ -642,13 +648,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 +841,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 +862,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 +878,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);
@@ -1076,7 +1087,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());
@@ -1109,7 +1122,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,更可靠
                                    // 添加到结果列表