package com.linghu.controller; 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; import com.linghu.model.dto.KeywordDto; import com.linghu.model.entity.Question; import com.linghu.model.excel.KeywordExcel; import com.linghu.model.excel.QuestionExcel; import com.linghu.service.QuestionService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; 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") @Api(value = "提问词相关接口", tags = "订单管理-提问词") public class QuestionController { @Autowired private QuestionService questionService; @PostMapping @ApiOperation(value = "添加提问词") @Transactional public ResponseResult> add(@RequestBody KeywordDto keywordDto) { List 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()); boolean success = questionService.saveBatch(questionList); if (success) { return ResponseResult.success(questionList); } return ResponseResult.error("添加提问词失败"); } // @DeleteMapping("/{questionId}") // @ApiOperation(value = "删除提问词") // public ResponseResult delete(@PathVariable Integer questionId) { // // boolean success = questionService.removeById(questionId); // if (success) { // return ResponseResult.success(); // } // return ResponseResult.error("删除提问词失败"); // } @PutMapping @ApiOperation(value = "修改提问词") @Transactional public ResponseResult> update(@RequestBody KeywordDto keywordDto) { //查询question的状态 //遍历 for (Question q : keywordDto.getQuestionList()) { if ("success".equals(q.getStatus())) { return ResponseResult.error("该提问词已采集"); } } questionService.updateBatchById(keywordDto.getQuestionList()); // if (!"notSubmitted".equals(keywordDto.getStatus() )){ // return ResponseResult.error("该关键词已提交或者已采集完成不允许修改提问词!"); // } // LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); // queryWrapper.eq(Question::getKeyword_id, keywordDto.getKeyword_id()); // questionService.remove(queryWrapper); // List 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); return ResponseResult.success(); } @PutMapping("/update") @ApiOperation(value = "修改单个提问词") public ResponseResult update(@RequestBody Question questions) { boolean success = questionService.updateById(questions); if (success) { return ResponseResult.success(); } return ResponseResult.error("更新提问词失败"); } @DeleteMapping("/batch") @Transactional @ApiOperation(value = "批量删除提问词") public ResponseResult batchDelete(@RequestBody List questionIds) { System.out.println(questionIds.toString()); questionService.removeByIds(questionIds); return ResponseResult.success(); } @GetMapping("/list") @ApiOperation("根据关键词查询提问词列表") public ResponseResult> list(Integer keyword_id) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Question::getKeyword_id, keyword_id); List list = questionService.list(queryWrapper); return ResponseResult.success(list); } // 下载模板 @PostMapping("/downloadTemplate") @ApiOperation("下载模板") public ResponseEntity downloadTemplate() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); EasyExcel.write(out, QuestionExcel.class).sheet("提问词模板").doWrite(new ArrayList<>()); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=question_template.xlsx") .contentType(MediaType.APPLICATION_OCTET_STREAM) .body(out.toByteArray()); } // 导入文件 @PostMapping("/import") @ApiOperation("导入提问词词数据") public ResponseResult importPlatforms(@RequestParam("file") MultipartFile file) { try { if (file.isEmpty()) { return ResponseResult.error("上传文件不能为空"); } // 创建数据监听器 QuestionExcelListener listener = new QuestionExcelListener(); EasyExcel.read(file.getInputStream(), QuestionExcel.class, listener) .sheet() .doRead(); // 获取并合并关键词 String mergedKeywords = String.join("\n", listener.getMergedKeywords()); return ResponseResult.success(mergedKeywords); } catch (IOException e) { return ResponseResult.error("文件读取失败:" + e.getMessage()); } catch (Exception e) { return ResponseResult.error("导入失败:" + e.getMessage()); } } }