From 1cb09e4cde9fb97b8369478a9fc16418ac4e29a4 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期三, 09 七月 2025 17:31:07 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/main/java/com/linghu/controller/KeywordController.java | 151 ++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 120 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/linghu/controller/KeywordController.java b/src/main/java/com/linghu/controller/KeywordController.java index d875871..f2491a5 100644 --- a/src/main/java/com/linghu/controller/KeywordController.java +++ b/src/main/java/com/linghu/controller/KeywordController.java @@ -3,8 +3,10 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.linghu.listener.KeywordExcelListener; import com.linghu.mapper.KeywordMapper; +import com.linghu.mapper.ReferenceMapper; import com.linghu.model.common.ResponseResult; import com.linghu.model.dto.ExportFeedDTO; @@ -31,16 +33,22 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; +import javax.xml.bind.ValidationException; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.time.LocalDateTime; import java.io.IOException; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @RestController @RequestMapping("/keyword") @@ -54,6 +62,8 @@ @Autowired private ReferenceService referenceService; + @Autowired + private ReferenceMapper referenceMapper; /** * 关键词统计 EChart图 @@ -90,21 +100,15 @@ */ @GetMapping("/getResultByTypeId") @ApiOperation(value = "根据类别查看") - public ResponseResult<ResultByTypeIdVO> getResultByTypeId(@RequestParam("keywordId") Integer keywordId, + public ResponseResult<List<PlatformProportionVO> > getResultByTypeId(@RequestParam("keywordId") Integer keywordId, @RequestParam(value = "questionId", required = false) Integer questionId, - @RequestParam(value = "typeId", required = false) Integer typeId) { - ResultByTypeIdVO vo = new ResultByTypeIdVO(); + @RequestParam(value = "typeId", required = false) Integer typeId, + @RequestParam(value = "isNow") Integer isNow) { Keyword keyword = keywordService.getById(keywordId); - List<PlatformProportionVO> nowList = keywordMapper.getResultByTypeId(keywordId, questionId, - keyword.getNum(), typeId); - vo.setNowList(nowList); - if (keyword.getNum()>1){ - List<PlatformProportionVO> beforeList = keywordMapper.getResultByTypeId(keywordId, questionId, - keyword.getNum()-1, typeId); - vo.setBeforeList(beforeList); - } + List<PlatformProportionVO> result = keywordMapper.getResultByTypeId(keywordId, questionId, + keyword.getNum() - isNow, typeId); - return ResponseResult.success(vo); + return ResponseResult.success(result); } /** @@ -137,30 +141,22 @@ */ @GetMapping("/getResultByPlatformId") @ApiOperation(value = "根据平台查看") - public ResponseResult<ResultByPlatformVO> getResultByPlatformId(@RequestParam("keywordId") Integer keywordId, + public ResponseResult<List<ResultListVO>> getResultByPlatformId(@RequestParam("keywordId") Integer keywordId, @RequestParam(value = "questionId", required = false) Integer questionId, - @RequestParam(value = "platformId", required = false) Integer platformId) { - ResultByPlatformVO vo = new ResultByPlatformVO(); + @RequestParam(value = "platformId", required = false) Integer platformId, + @RequestParam(value = "isNow") Integer isNow) { Keyword keyword = keywordService.getById(keywordId); - - List<ResultListVO> nowList = keywordMapper.getResultByPlatformId(keywordId, questionId, keyword.getNum(), + List<ResultListVO> result = keywordMapper.getResultByPlatformId(keywordId, questionId, keyword.getNum() - isNow, platformId); - vo.setNowList(nowList); - if (keyword.getNum()>1){ - List<ResultListVO> beforeList = keywordMapper.getResultByPlatformId(keywordId, questionId, keyword.getNum()-1, - platformId); - vo.setBeforeList(beforeList); - } - - return ResponseResult.success(vo); + return ResponseResult.success(result); } /** * 根据平台查看 0-当前轮 1-代表前1轮 2-代表前2轮 */ @GetMapping("/exportGetResultByPlatformId") - @ApiOperation(value = "根据平台查看") + @ApiOperation(value = "导出:根据平台查看") public ResponseEntity<byte[]> exportGetResultByPlatformId(@RequestParam("id") Integer keywordId, @RequestParam(value = "questionId", required = false) Integer questionId, @RequestParam(value = "platformId", required = false) Integer platformId, @@ -212,7 +208,40 @@ */ @PostMapping("/importFeed") @ApiOperation("投喂") - public ResponseResult<List<FeedExportExcel>> importTemplate(@RequestParam("file") MultipartFile file) { + public ResponseResult<List<FeedExportExcel>> importTemplate(@RequestParam("file") MultipartFile file,@RequestParam("keywordId") Integer keywordId) { + Keyword keyword = keywordService.getById(keywordId); + //查找出最近一次的结果 + List<FeedExportExcel> references = referenceMapper.importTemplateList(keywordId,keyword.getNum()); + //平台名称 + Map<String, FeedExportExcel> nameMap = references.stream() + .collect(Collectors.toMap( + FeedExportExcel::getPlatform_name, // Key映射 + excel -> excel, // Value映射 + (oldValue, newValue) -> oldValue // 键冲突处理(保留旧值) + )); + //URL + Map<String, FeedExportExcel> urlMap = references.stream() + .collect(Collectors.toMap( + FeedExportExcel::getUrl, // Key映射 + excel -> excel, // Value映射 + (oldValue, newValue) -> oldValue // 键冲突处理(保留旧值) + )); + //title + Map<String, FeedExportExcel> titleMap = references.stream() + .collect(Collectors.toMap( + FeedExportExcel::getTitle, // Key映射 + excel -> excel, // Value映射 + (oldValue, newValue) -> oldValue // 键冲突处理(保留旧值) + )); + + //time + Map<LocalDateTime, FeedExportExcel> timeMap = references.stream() + .collect(Collectors.toMap( + FeedExportExcel::getCreate_time, // Key映射 + excel -> excel, // Value映射 + (oldValue, newValue) -> oldValue // 键冲突处理(保留旧值) + )); + try { // 检查文件是否为空 if (file.isEmpty()) { @@ -242,27 +271,87 @@ errorMessages.add("发布时间不能为空"); continue; } + if (!StringUtils.hasText(excel.getUrl())) { errorMessages.add("发布网址不能为空"); continue; } - //todo 查询出当前这次的结果 做出对比 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime dateTime = LocalDateTime.parse(excel.getCreate_time(), formatter); + excel.setCreateTimeAsDateTime(dateTime); + FeedExportExcel feedExportExcel = getFeedExportExcel(excel, nameMap, urlMap, titleMap, timeMap); + result.add(feedExportExcel); } - // 处理错误 if (!errorMessages.isEmpty()) { return ResponseResult.error("数据验证失败: " + String.join("; ", errorMessages)); } + // 返回信息 return ResponseResult.success(result); - } catch (Exception e) { + }catch (DateTimeParseException e) { + return ResponseResult.error("文件解析失败:发布时间格式输入错误"); + } + catch (Exception e) { // 记录详细异常信息 return ResponseResult.error("文件解析失败:" + e.getMessage()); } } + + private FeedExportExcel getFeedExportExcel(ReferenceExcel excel, Map<String, FeedExportExcel> nameMap, Map<String, FeedExportExcel> urlMap, Map<String, FeedExportExcel> titleMap, Map<LocalDateTime, FeedExportExcel> timeMap) { + FeedExportExcel vo=new FeedExportExcel(); + vo.setPlatform_name(excel.getPlatform_name()); + vo.setTitle(excel.getTitle()); + vo.setCreate_time(excel.getCreateTimeAsDateTime()); + vo.setUrl(excel.getUrl()); + vo.setInclusionStatus("未收录"); + vo.setPlatformIs(0); + vo.setTitleIs(0); + vo.setUrlIs(0); + vo.setCreateIs(0); + //平台名称 + if (nameMap.containsKey(excel.getPlatform_name())) { + vo.setPlatformIs(1); + if (urlMap.containsKey(excel.getUrl())) { + vo.setUrlIs(1); + } + if (titleMap.containsKey(excel.getTitle())) { + vo.setTitleIs(1); + } + if (timeMap.containsKey(excel.getCreateTimeAsDateTime())) { + vo.setCreateIs(1); + } + return vo; + } + //网站链接 + if (urlMap.containsKey(excel.getUrl())) { + vo.setUrlIs(1); + if (titleMap.containsKey(excel.getTitle())) { + vo.setTitleIs(1); + } + if (timeMap.containsKey(excel.getCreateTimeAsDateTime())) { + vo.setCreateIs(1); + } + return vo; + } + //标题 + if (titleMap.containsKey(excel.getTitle())) { + vo.setTitleIs(1); + if (timeMap.containsKey(excel.getCreateTimeAsDateTime())) { + vo.setCreateIs(1); + } + } + //时间 + if (timeMap.containsKey(excel.getCreateTimeAsDateTime())) { + vo.setCreateIs(1); + return vo; + } + return vo; + } + /** * 导出投喂结果 @@ -332,7 +421,7 @@ // 下载模板 @PostMapping("/downloadTemplate") - @ApiOperation("下载模板") + @ApiOperation("下载关键词导入模板") public ResponseEntity<byte[]> downloadTemplate() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); EasyExcel.write(out, KeywordExcel.class).sheet("关键词模板").doWrite(new ArrayList<>()); -- Gitblit v1.7.1