From c4abb3711bcee356935339f7c9fd9e2b58dee2bf Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期日, 13 七月 2025 00:05:02 +0800 Subject: [PATCH] 修改bug --- src/main/java/com/linghu/controller/CollectController.java | 75 ++++++++++++++++++++++++++++++++++--- 1 files changed, 68 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/linghu/controller/CollectController.java b/src/main/java/com/linghu/controller/CollectController.java index 6bc388f..4f1f7bd 100644 --- a/src/main/java/com/linghu/controller/CollectController.java +++ b/src/main/java/com/linghu/controller/CollectController.java @@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; +import org.springframework.dao.DuplicateKeyException; import org.springframework.http.*; import org.springframework.web.reactive.function.client.WebClient; @@ -496,9 +497,6 @@ }) .onErrorResume(e -> { System.out.println("获取任务结果失败"); - if (e.getMessage().contains("登陆失败")){ - - } TaskResultResponse result = new TaskResultResponse(); result.setDetail("获取任务结果失败: " + e.getMessage()); return Mono.just(result); @@ -570,7 +568,50 @@ // } // }); // } + /** + * 获取或创建平台(确保同一domain只创建一次) + * @param domain 平台域名 + * @return 已存在或新创建的Platform + */ + private Platform getOrCreatePlatform(String domain) { + // 1. 先尝试查询已存在的平台 + Platform platform = platformService.getPlatformByDomain(domain); + if (platform != null) { + return platform; + } + // 2. 若不存在,尝试创建(处理并发场景) + try { + // 2.1 获取或创建“默认”类型(Type也需避免重复,建议Type表的type_name也加唯一约束) + Type defaultType = typeService.getOne(new LambdaQueryWrapper<Type>() + .eq(Type::getType_name, "默认")); + if (defaultType == null) { + defaultType = new Type(); + defaultType.setType_name("默认"); + typeService.save(defaultType); // 若Type可能重复,此处也需处理DuplicateKeyException + } + + // 2.2 构建新平台对象 + Platform newPlatform = new Platform(); + newPlatform.setDomain(domain); + newPlatform.setPlatform_name(domain); // 平台名称默认使用域名,可根据实际需求调整 + newPlatform.setType_id(defaultType.getType_id()); + newPlatform.setCreate_time(LocalDateTime.now()); // 补充创建时间 + + // 2.3 尝试保存,若因唯一约束冲突失败,则捕获异常 + platformService.save(newPlatform); + return newPlatform; // 保存成功,返回新创建的平台 + + } catch (DuplicateKeyException e) { + // 3. 若捕获到重复键异常,说明并发创建了,重新查询即可(此时数据库中已存在该平台) + log.warn("平台domain={}已存在,无需重复创建", domain, e); + return platformService.getPlatformByDomain(domain); // 重新查询,一定能获取到 + } catch (Exception e) { + // 处理其他异常(如数据库连接失败等) + log.error("创建平台失败,domain={}", domain, e); + throw new RuntimeException("创建平台失败", e); + } + } private Mono<Void> updateQuestionAndReference(TaskResultResponse result) { return Mono.fromRunnable(() -> { try { @@ -728,14 +769,14 @@ return reference; }) .collect(Collectors.toList());*/ -// 初始化引用列表(避免null) + // 初始化引用列表(避免null) List<Reference> references = new ArrayList<>(); List<TaskResultResponse.Reference> originalReferences = questionResult.getReferences(); if (originalReferences == null) { originalReferences = Collections.emptyList(); } -// 遍历原始引用列表,转换为Reference对象 + // 遍历原始引用列表,转换为Reference对象 for (TaskResultResponse.Reference ref : originalReferences) { // 注意:需将“原引用类型”替换为实际类型(如QuestionResult中的引用类型) Reference reference = new Reference(); // 设置基本字段 @@ -748,7 +789,7 @@ reference.setKeyword_id(keyword.getKeyword_id()); reference.setCreate_time(LocalDateTime.now()); - // 处理平台和类型关联 + /* // 处理平台和类型关联 Platform platform = platformService.getPlatformByDomain(reference.getDomain()); if (platform == null) { // 平台不存在,创建新平台(类型默认为“默认”) @@ -777,7 +818,11 @@ reference.setType_id(type.getType_id()); } } - +*/ + // 关键:使用优化后的方法获取平台,避免重复创建 + Platform platform = getOrCreatePlatform(ref.getDomain()); + reference.setPlatform_id(platform.getPlatform_id()); + reference.setType_id(platform.getType_id()); // 直接从平台获取类型ID,更可靠 // 添加到结果列表 references.add(reference); } @@ -838,6 +883,22 @@ 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); + + }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); + } + } + } // 4. 批量更新问题 -- Gitblit v1.7.1