package com.linghu.controller; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.linghu.config.FinalStatus; import com.linghu.listener.KeywordExcelListener; import com.linghu.model.common.ResponseResult; import com.linghu.model.dto.ExportFeedDTO; import com.linghu.model.dto.ExportGetResultByPlatformIdDTO; import com.linghu.model.dto.ExportGetResultDTO; import com.linghu.model.dto.ExportStaticsDTO; import com.linghu.model.entity.*; import com.linghu.model.excel.*; import com.linghu.model.validator.UpdateGroup; import com.linghu.model.vo.*; import com.linghu.model.vo.KeywordStaticsListVO; import com.linghu.model.vo.PlatformProportionVO; import com.linghu.model.vo.ResultListVO; import com.linghu.service.KeywordService; import com.linghu.service.OrderService; import com.linghu.service.ReferenceService; 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.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.validation.Valid; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("/keyword") @Api(value = "采集详情相关接口", tags = "订单列表-采集列表-采集详情") public class KeywordController { @Autowired private KeywordService keywordService; @Autowired private ReferenceService referenceService; @Autowired private OrderService orderService; /** * 关键词统计 EChart图 */ @GetMapping("/statics") @ApiOperation(value = "EChart图") public ResponseResult statics(@RequestParam("id") Integer keywordId, @RequestParam(value = "questionId", required = false) Integer questionId) { return keywordService.statics(keywordId, questionId); } @GetMapping("/getTime") @ApiOperation(value = "查看时间") public ResponseResult getTime(@RequestParam("id") Integer keywordId,@RequestParam(value = "questionId", required = false) Integer questionId) { return keywordService.getTimeVOResponseResult(keywordId, questionId); } @PostMapping(value = "/exportStatics") @ApiOperation(value = "EChart图导出") public ResponseEntity exportStatics(@Valid @RequestBody ExportStaticsDTO exportStaticsDTO) { return keywordService.exportEChart(exportStaticsDTO); } /** * 根据类别查看 */ @GetMapping("/getResultByTypeId") @ApiOperation(value = "根据类别查看") public ResponseResult > getResultByTypeId(@RequestParam("keywordId") Integer keywordId, @RequestParam(value = "questionId", required = false) Integer questionId, @RequestParam(value = "typeId", required = false) Integer typeId, @RequestParam(value = "isNow") Integer isNow) { return keywordService.getByTypeId(keywordId, questionId, typeId, isNow); } /** * 导出:根据类别查看 */ @PostMapping(value = "/exportGetResultByTypeId") @ApiOperation(value = "导出:根据类别查看") public ResponseEntity exportGetResultByTypeId(@Valid @RequestBody ExportGetResultDTO dto) { return keywordService.exportResult(dto); } /** * 根据平台查看 */ @PostMapping("/getResultByPlatformId") @ApiOperation(value = "根据平台查看") public ResponseResult> getResultByPlatformId(@RequestParam("keywordId") Integer keywordId, @RequestParam(value = "questionId", required = false) Integer questionId, @RequestParam(value = "platformId", required = false) Integer platformId, @RequestParam(value = "isNow") Integer isNow) { return keywordService.getResultByPlatform(keywordId, questionId, platformId, isNow); } /** * 根据平台查看 0-当前轮 1-代表前1轮 2-代表前2轮 */ @PostMapping("/exportGetResultByPlatformId") @ApiOperation(value = "导出:根据平台查看") public ResponseEntity exportGetResultByPlatformId(@Valid @RequestBody ExportGetResultByPlatformIdDTO dto) { return keywordService.exportResultByPlatform(dto); } /** * 根据平台查看 0-当前轮 1-代表前1轮 2-代表前2轮 */ @PostMapping("/exportGetResultByPlatformId2") @ApiOperation(value = "导出:根据平台查看2") public ResponseEntity exportGetResultByPlatformId2(@Valid @RequestBody ExportGetResultByPlatformIdDTO dto) { return keywordService.exportResultByPlatform2(dto); } /** * 查看详情 */ @GetMapping("/getResultById") @ApiOperation(value = "查看") public ResponseResult getResultById(@RequestParam("referenceId") Integer referenceId) { Reference reference = referenceService.getById(referenceId); if (reference == null) { return ResponseResult.error("该结果不存在"); } return ResponseResult.success(reference); } /** * 下载模版 */ @GetMapping("/download") @ApiOperation("下载投喂模板") public ResponseEntity downTemplate() throws IOException { return keywordService.downloadKeywrodFeed(); } /** * 投喂 */ @PostMapping("/importFeed/{keywordId}") @ApiOperation("投喂") public ResponseResult> importTemplate(@PathVariable("keywordId") Integer keywordId,@RequestParam("file") MultipartFile file) { return keywordService.importFeedByKeyWord(keywordId, file); } /** * 导出投喂结果 */ @PostMapping("/exportFeed") @ApiOperation(value = "导出投喂结果") public ResponseEntity exportGetResultByPlatformId( @Valid @RequestBody ExportFeedDTO dto) { return keywordService.exportFeedResult(dto); } /** * 根据订单ID查询关键词 */ @GetMapping("/getKeywordsByOrderId") @ApiOperation(value = "根据订单ID查询关键词") public ResponseResult> getKeywordsByOrderId(@RequestParam("orderId") String orderId) { List keywords = keywordService.getKeywordsByOrderId(orderId); return ResponseResult.success(keywords); } /** * 修改关键词 */ @PostMapping("/updateKeyword") @ApiOperation(value = "修改关键词") public ResponseResult updateKeyword(@Validated(UpdateGroup.class) @RequestBody Keyword keyword) { if(FinalStatus.SUBMITTED.getValue().equals(keyword.getStatus())){ return ResponseResult.error("关键词已开始采集不允许修改!"); } keywordService.updateById(keyword); return ResponseResult.success("修改成功"); } /** * 删除关键词 */ @DeleteMapping("/deleteKeyword") @ApiOperation(value = "删除关键词") public ResponseResult deleteKeyword(@RequestParam("keywordId") Integer keywordId) { Keyword keyword = keywordService.getById(keywordId); if(FinalStatus.SUBMITTED.getValue().equals(keyword.getStatus())){ return ResponseResult.error("关键词已开始采集或不允许删除!"); } keywordService.removeById(keywordId); //找到订单 Orders order = orderService.getById(keyword.getOrder_id()); //更新关键词数量 LambdaQueryWrapper queryKeywordsQueryWrapper = new LambdaQueryWrapper<>(); queryKeywordsQueryWrapper.eq(Keyword::getOrder_id, keyword.getOrder_id()); int count1 = (int) keywordService.count(queryKeywordsQueryWrapper); order.setKeyword_num(count1); orderService.updateById(order); return ResponseResult.success("删除成功"); } // 下载模板 @PostMapping("/downloadTemplate") @ApiOperation("下载关键词导入模板") public ResponseEntity downloadTemplate() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); EasyExcel.write(out, KeywordExcel.class).sheet("关键词模板").doWrite(new ArrayList<>()); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=keyword_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("上传文件不能为空"); } // 创建数据监听器 KeywordExcelListener listener = new KeywordExcelListener(); EasyExcel.read(file.getInputStream(), KeywordExcel.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()); } } //根据关键词id查询任务id }