From 8e0decd25b9ec86b02d58de53dee1451f83d1566 Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期四, 10 七月 2025 23:48:35 +0800
Subject: [PATCH] 新增

---
 src/main/java/com/linghu/controller/CollectController.java  |   36 ++++++++++-
 src/main/java/com/linghu/service/impl/OrderServiceImpl.java |   16 +++++
 src/main/java/com/linghu/controller/QuestionController.java |   84 ++++++++++++++-------------
 src/main/java/com/linghu/model/dto/KeywordDto.java          |    1 
 4 files changed, 91 insertions(+), 46 deletions(-)

diff --git a/src/main/java/com/linghu/controller/CollectController.java b/src/main/java/com/linghu/controller/CollectController.java
index e0fdeeb..fb6d23f 100644
--- a/src/main/java/com/linghu/controller/CollectController.java
+++ b/src/main/java/com/linghu/controller/CollectController.java
@@ -223,13 +223,14 @@
                        log.warn(errorMsg);
                        return Mono.just(ResponseResult.error(503, errorMsg));
                    }
+                   Integer keywordId = searchTaskRequest.getKeyword_id();
 
                    int maxConcurrentUsers = searchTaskRequest.getConfig() != null ?
                            searchTaskRequest.getConfig().getMax_concurrent_users() : 3;
-                   List<List<UserDto>> userBatches = splitUsersIntoBatches(searchTaskRequest.getUsers(), maxConcurrentUsers);
+                   List<List<UserDto>> userBatches = splitUsersIntoBatches(searchTaskRequest.getUsers(), maxConcurrentUsers,keywordId);
 
                    // 获取 keywordId
-                   Integer keywordId = searchTaskRequest.getKeyword_id();
+
                    //分割
 
      
@@ -381,14 +382,39 @@
                 .onStatus(HttpStatus::isError, response -> response.bodyToMono(TaskCancelResponse.class)
                         .flatMap(errorBody -> Mono.error(new RuntimeException(errorBody.getDetail()))))
                 .bodyToMono(TaskCancelResponse.class)
+                .flatMap(cancelResponse -> {
+                    // 更新关键词状态
+                    Mono<Void> updateKeyword = Mono.fromRunnable(() -> {
+                                LambdaUpdateWrapper<Keyword> updateWrapper = new LambdaUpdateWrapper<>();
+                                updateWrapper.eq(Keyword::getTask_id, taskId);
+                                updateWrapper.set(Keyword::getStatus, "canceled"); // 统一使用"canceled"
+                                keywordService.update(updateWrapper);
+                            })
+                            .subscribeOn(Schedulers.boundedElastic())
+                            .then();
+
+                    // 更新关键词任务状态
+                    Mono<Void> updateKeywordTask = Mono.fromRunnable(() -> {
+                                LambdaUpdateWrapper<KeywordTask> updateWrapper = new LambdaUpdateWrapper<>();
+                                updateWrapper.eq(KeywordTask::getTask_id, taskId);
+                                updateWrapper.set(KeywordTask::getStatus, "canceled"); // 统一使用"canceled"
+                                keywordTaskService.update(updateWrapper);
+                            })
+                            .subscribeOn(Schedulers.boundedElastic())
+                            .then();
+
+                    // 并行执行两个更新操作,并在完成后返回cancelResponse
+                    return Mono.when(updateKeyword, updateKeywordTask)
+                            .thenReturn(cancelResponse);
+                })
                 .map(data -> ResponseResult.success(data))
                 .onErrorResume(e -> {
                     if (e.getMessage().contains("任务不存在")) {
-                        return Mono.just(ResponseResult.error(200, "任务不存在"));
+                        return Mono.just(ResponseResult.error(200, e.getMessage()));
                     } else if (e.getMessage().contains("无法取消")) {
-                        return Mono.just(ResponseResult.error(200, "任务已完成,无法取消"));
+                        return Mono.just(ResponseResult.error(200, e.getMessage()));
                     }
-                    return Mono.just(ResponseResult.error(500, "取消任务失败: " + e.getMessage()));
+                    return Mono.just(ResponseResult.error(500,  e.getMessage()));
                 });
     }
 
diff --git a/src/main/java/com/linghu/controller/QuestionController.java b/src/main/java/com/linghu/controller/QuestionController.java
index 5b6732f..be640e1 100644
--- a/src/main/java/com/linghu/controller/QuestionController.java
+++ b/src/main/java/com/linghu/controller/QuestionController.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.linghu.listener.QuestionExcelListener;
 import com.linghu.model.common.ResponseResult;
@@ -27,6 +28,8 @@
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
+
+import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
 
 @RestController
 @RequestMapping("/question")
@@ -74,57 +77,58 @@
     @ApiOperation(value = "修改提问词")
     @Transactional
     public ResponseResult<List<Question>> update(@RequestBody KeywordDto keywordDto) {
-        if (!"notSubmitted".equals(keywordDto.getStatus() )){
-            return ResponseResult.error("该关键词已提交或者已采集完成不允许修改提问词!");
+        //查询question的状态
+       //遍历
+        for (Question q : keywordDto.getQuestionList()) {
+            if ("success".equals(q.getStatus())) {
+                return ResponseResult.error("该提问词已采集");
+            }
         }
-        LambdaQueryWrapper<Question> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(Question::getKeyword_id, keywordDto.getKeyword_id());
-        questionService.remove(queryWrapper);
+         questionService.updateBatchById(keywordDto.getQuestionList());
 
-        List<Question> questionList = Arrays.stream(keywordDto.getQuestions().split("\\n"))
-                .filter(q -> !q.trim().isEmpty())
-                .map(q -> {
-                    Question question = new Question();
-                    question.setKeyword_id(keywordDto.getKeyword_id());
-                    question.setQuestion(q.trim());
-                    question.setStatus("pending");
+//        if (!"notSubmitted".equals(keywordDto.getStatus() )){
+//            return ResponseResult.error("该关键词已提交或者已采集完成不允许修改提问词!");
+//        }
+//        LambdaQueryWrapper<Question> queryWrapper = new LambdaQueryWrapper<>();
+//        queryWrapper.eq(Question::getKeyword_id, keywordDto.getKeyword_id());
+//        questionService.remove(queryWrapper);
 
-                    return question;
-                }).collect(Collectors.toList());
+//        List<Question> questionList = Arrays.stream(keywordDto.getQuestions().split("\\n"))
+//                .filter(q -> !q.trim().isEmpty())
+//                .map(q -> {
+//                    Question question = new Question();
+//                    question.setKeyword_id(keywordDto.getKeyword_id());
+//                    question.setQuestion(q.trim());
+//                    question.setStatus("pending");
+//
+//                    return question;
+//                }).collect(Collectors.toList());
 
-         questionService.saveBatch(questionList);
+//         questionService.saveBatch(questionList);
 
          return ResponseResult.success();
 
 
     }
 
-//    @PutMapping
-//    @ApiOperation(value = "修改提问词")
-//    public ResponseResult<Void> update(@RequestBody Question questions) {
-//        boolean success = questionService.updateById(questions);
-//        if (success) {
-//            return ResponseResult.success();
-//        }
-//        return ResponseResult.error("更新提问词失败");
-//    }
+    @PutMapping("/update")
+    @ApiOperation(value = "修改单个提问词")
+    public ResponseResult<Void> update(@RequestBody Question questions) {
+        boolean success = questionService.updateById(questions);
+        if (success) {
+            return ResponseResult.success();
+        }
+        return ResponseResult.error("更新提问词失败");
+    }
 
-    // @DeleteMapping("/batch")
-    // @Transactional
-    // public ResponseResult<Void> batchDelete(@RequestBody List<Integer>
-    // questionIds) {
-    // List<Question> questions = questionIds.stream().map(id -> {
-    // Question question = new Question();
-    // question.setQuestion_id(id);
-    // return question;
-    // }).collect(Collectors.toList());
-
-    // boolean success = questionService.updateBatchById(questions);
-    // if (success) {
-    // return ResponseResult.success();
-    // }
-    // return ResponseResult.error("批量删除提问词失败");
-    // }
+     @DeleteMapping("/batch")
+     @Transactional
+     @ApiOperation(value = "批量删除提问词")
+     public ResponseResult<Void> batchDelete(@RequestBody List<Integer> questionIds) {
+         System.out.println(questionIds.toString());
+        questionService.removeByIds(questionIds);
+        return ResponseResult.success();
+     }
 
     @GetMapping("/list")
     @ApiOperation("根据关键词查询提问词列表")
diff --git a/src/main/java/com/linghu/model/dto/KeywordDto.java b/src/main/java/com/linghu/model/dto/KeywordDto.java
index 634adc8..6bd1896 100644
--- a/src/main/java/com/linghu/model/dto/KeywordDto.java
+++ b/src/main/java/com/linghu/model/dto/KeywordDto.java
@@ -17,4 +17,5 @@
     private String questions;
 
     private List<Question> questionList;
+    private List<String> taskIdList;
 }
\ No newline at end of file
diff --git a/src/main/java/com/linghu/service/impl/OrderServiceImpl.java b/src/main/java/com/linghu/service/impl/OrderServiceImpl.java
index c3b8602..11e5c29 100644
--- a/src/main/java/com/linghu/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/linghu/service/impl/OrderServiceImpl.java
@@ -8,15 +8,18 @@
 import com.linghu.model.dto.KeywordDto;
 import com.linghu.model.dto.OrderDto;
 import com.linghu.model.entity.Keyword;
+import com.linghu.model.entity.KeywordTask;
 import com.linghu.model.entity.Orders;
 import com.linghu.model.entity.Question;
 import com.linghu.service.KeywordService;
+import com.linghu.service.KeywordTaskService;
 import com.linghu.service.OrderService;
 import com.linghu.mapper.OrderMapper;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 import com.linghu.service.QuestionService;
@@ -41,6 +44,8 @@
     private QuestionService questionService;
     @Autowired
     private OrderMapper orderMapper;
+    @Autowired
+    private KeywordTaskService keywordTaskService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -112,7 +117,17 @@
         for (Keyword keyword : keywords) {
             KeywordDto dto = new KeywordDto();
             BeanUtils.copyProperties(keyword, dto);
+            LambdaQueryWrapper<KeywordTask> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(KeywordTask::getKeyword_id, keyword.getKeyword_id());
+            List<KeywordTask> keywordTasks = keywordTaskService.list(queryWrapper);
 
+            // 提取 task_id 列表
+            List<String> taskIdList = keywordTasks.stream()
+                    .map(KeywordTask::getTask_id)
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toList());
+
+            dto.setTaskIdList(taskIdList); // 设置 task_id 列表
             // 查询该关键词下的所有提问词
             List<Question> questions = questionService.lambdaQuery()
                     .eq(Question::getKeyword_id, keyword.getKeyword_id())
@@ -122,7 +137,6 @@
         }
         return keywordDtos;
     }
-
     @Override
     public Page<String> getClientList(String clientName, Integer pageNum, Integer pageSize) {
         Page<Orders> page = new Page<>(pageNum, pageSize);

--
Gitblit v1.7.1