From 41b70b1de21eca6ad2cade92c56ae400386c628b Mon Sep 17 00:00:00 2001 From: guyue <1721849008@qq.com> Date: 星期一, 14 七月 2025 16:22:18 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/main/java/com/linghu/listener/BigDecimalPercentConverter.java | 46 +++++++++++ src/main/java/com/linghu/model/excel/FeedExportExcel.java | 2 src/main/java/com/linghu/model/vo/PlatformProportionVO.java | 5 src/main/java/com/linghu/controller/UserController.java | 6 src/main/java/com/linghu/model/vo/KeywordStaticsVO.java | 3 src/main/resources/mapper/UserMapper.xml | 4 src/main/java/com/linghu/controller/PlatformController.java | 2 src/main/java/com/linghu/model/vo/ResultList2VO.java | 37 +++++++++ src/main/resources/mapper/keywordMapper.xml | 3 src/main/java/com/linghu/controller/OrderController.java | 2 src/main/java/com/linghu/model/vo/ResultListVO.java | 7 + src/main/java/com/linghu/model/entity/User.java | 9 ++ src/main/java/com/linghu/service/impl/OrderServiceImpl.java | 21 ++--- src/main/java/com/linghu/controller/KeywordController.java | 86 ++++++++++++++++++++- 14 files changed, 201 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/linghu/controller/KeywordController.java b/src/main/java/com/linghu/controller/KeywordController.java index f5443cf..751c723 100644 --- a/src/main/java/com/linghu/controller/KeywordController.java +++ b/src/main/java/com/linghu/controller/KeywordController.java @@ -36,6 +36,7 @@ import org.apache.poi.ss.usermodel.DataValidationHelper; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddressList; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -49,6 +50,7 @@ import javax.xml.bind.ValidationException; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.time.LocalDate; import java.time.LocalDateTime; import java.io.IOException; import java.time.format.DateTimeFormatter; @@ -284,8 +286,8 @@ dto.getPlatformId()); } //查询所有平台名称 - List<String> platfromNames = result.stream() - .map(ResultListVO::getPlatform_name) + List<String> platfromNames = platformService.list().stream() + .map(Platform::getPlatform_name) .filter(Objects::nonNull) .collect(Collectors.toList()); // 3. 导出Excel @@ -293,6 +295,68 @@ // 3. 使用自定义的SheetWriteHandler来添加数据验证 ExcelWriter excelWriter = EasyExcel.write(out, ResultListVO.class) + /* .registerWriteHandler(new SheetWriteHandler() { + @Override + public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, + WriteSheetHolder writeSheetHolder) { + Sheet sheet = writeSheetHolder.getSheet(); + + // 添加数据验证(下拉框) + DataValidationHelper helper = sheet.getDataValidationHelper(); + CellRangeAddressList rangeList = new CellRangeAddressList( + 1, 65535, 0, 0); // D列(第4列) + + DataValidationConstraint constraint = helper.createExplicitListConstraint( + platfromNames.toArray(new String[0])); + DataValidation validation = helper.createValidation(constraint, rangeList); + sheet.addValidationData(validation); + } + })*/ + .build(); + + + WriteSheet writeSheet = EasyExcel.writerSheet("平台分布占比").build(); + excelWriter.write(result, writeSheet); + excelWriter.finish(); + + // 4. 构建响应 + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=references_export.xlsx") + .contentType(MediaType.APPLICATION_OCTET_STREAM) + .body(out.toByteArray()); + } + + /** + * 根据平台查看 0-当前轮 1-代表前1轮 2-代表前2轮 + */ + @PostMapping("/exportGetResultByPlatformId2") + @ApiOperation(value = "导出:根据平台查看2") + public ResponseEntity<byte[]> exportGetResultByPlatformId2(@RequestBody ExportGetResultByPlatformIdDTO dto) { + Keyword keyword = keywordService.getById(dto.getKeywordId()); + List<ResultListVO> result=new ArrayList<>(); + if (dto.getIsNow()==0){ + result = keywordMapper.getResultByPlatformId(dto.getKeywordId(), dto.getQuestionId(), keyword.getNum(), + dto.getPlatformId()); + }else { + result = keywordMapper.getResultByPlatformId(dto.getKeywordId(), dto.getQuestionId(), 1, + dto.getPlatformId()); + } + List<ResultList2VO> result2=new ArrayList<>(); + for (ResultListVO vo : result) { + ResultList2VO vo2 = new ResultList2VO(); + BeanUtils.copyProperties(vo, vo2); // 复制同名同类型的字段 + result2.add(vo2); + } + //查询所有平台名称 + List<String> platfromNames = platformService.list().stream() + .map(Platform::getPlatform_name) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + // 3. 导出Excel + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + // 3. 使用自定义的SheetWriteHandler来添加数据验证 + ExcelWriter excelWriter = EasyExcel.write(out, ResultList2VO.class) .registerWriteHandler(new SheetWriteHandler() { @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, @@ -314,7 +378,7 @@ WriteSheet writeSheet = EasyExcel.writerSheet("平台分布占比").build(); - excelWriter.write(result, writeSheet); + excelWriter.write(result2, writeSheet); excelWriter.finish(); // 4. 构建响应 @@ -343,7 +407,21 @@ @ApiOperation("下载投喂模板") public ResponseEntity<byte[]> downTemplate() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); - EasyExcel.write(out, ReferenceExcel.class).sheet("投喂模板").doWrite(new ArrayList<>()); + // 创建示例数据(第一行) + ReferenceExcel exampleData = new ReferenceExcel(); + exampleData.setPlatform_name("示例平台"); + exampleData.setTitle("示例标题"); + exampleData.setCreate_time(LocalDate.now()); // 设置当前日期作为示例 + exampleData.setUrl("https://example.com"); + + List<ReferenceExcel> excelList=new ArrayList<>(); + excelList.add(exampleData); + + ExcelWriter excelWriter = EasyExcel.write(out, ReferenceExcel.class).build(); + WriteSheet writeSheet = EasyExcel.writerSheet("平台分布占比").build(); + excelWriter.write(excelList, writeSheet); + excelWriter.finish(); + return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=platform_template.xlsx") diff --git a/src/main/java/com/linghu/controller/OrderController.java b/src/main/java/com/linghu/controller/OrderController.java index 1972832..377bbc1 100644 --- a/src/main/java/com/linghu/controller/OrderController.java +++ b/src/main/java/com/linghu/controller/OrderController.java @@ -237,7 +237,7 @@ @ApiOperation("获取客户列表") public ResponseResult<CustomPage<String>> getClientList(@RequestParam(required = false) String clientName, @RequestParam(required = false,defaultValue = "1") Integer pageNum, - @RequestParam(required = false, defaultValue = "10") Integer pageSize) { + @RequestParam(required = false, defaultValue = "100") Integer pageSize) { Page<String> result = orderService.getClientList(clientName,pageNum, pageSize); diff --git a/src/main/java/com/linghu/controller/PlatformController.java b/src/main/java/com/linghu/controller/PlatformController.java index 030303d..a1036df 100644 --- a/src/main/java/com/linghu/controller/PlatformController.java +++ b/src/main/java/com/linghu/controller/PlatformController.java @@ -261,7 +261,7 @@ platformService.saveBatch(platforms); return ResponseResult.success("导入成功,新增" + platforms.size() + "条数据"); } else { - return ResponseResult.success("导入完成,没有新增数据(所有数据均已存在)"); + return ResponseResult.error("导入完成,没有新增数据(所有数据均已存在)"); } } catch (Exception e) { diff --git a/src/main/java/com/linghu/controller/UserController.java b/src/main/java/com/linghu/controller/UserController.java index ab47d9b..8b086b9 100644 --- a/src/main/java/com/linghu/controller/UserController.java +++ b/src/main/java/com/linghu/controller/UserController.java @@ -57,7 +57,7 @@ public ResponseResult add(@RequestBody User user) { List<User> list = userService.list(new LambdaQueryWrapper<User>().eq(User::getUser_email, user.getUser_email())); if (list != null && list.size() > 0) { - return ResponseResult.success("该邮箱已存在"); + return ResponseResult.error("该邮箱已存在"); } user.setStatus("正常"); userService.save(user); @@ -80,10 +80,10 @@ .ne(User::getUser_id, user.getUser_id()) .eq(User::getUser_email, user.getUser_email())); if (list != null && list.size() > 0) { - return ResponseResult.success("该邮箱已存在"); + return ResponseResult.error("该邮箱已存在"); } if (!user1.getUser_email().equals(user.getUser_email())||!user1.getPassword().equals(user.getPassword())) { - user1.setStatus("正常"); + user.setStatus("正常"); } userService.updateById(user); diff --git a/src/main/java/com/linghu/listener/BigDecimalPercentConverter.java b/src/main/java/com/linghu/listener/BigDecimalPercentConverter.java new file mode 100644 index 0000000..4ceef25 --- /dev/null +++ b/src/main/java/com/linghu/listener/BigDecimalPercentConverter.java @@ -0,0 +1,46 @@ +package com.linghu.listener; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import java.math.BigDecimal; + +/** + * 自定义转换器:将BigDecimal转换为带%的字符串(如25.5 → 25.5%) + */ +public class BigDecimalPercentConverter implements Converter<BigDecimal> { + + @Override + public Class<BigDecimal> supportJavaTypeKey() { + return BigDecimal.class; // 支持的Java类型 + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; // Excel中显示为字符串类型 + } + + /** + * 写入Excel时:将BigDecimal转换为带%的字符串 + */ + @Override + public WriteCellData<String> convertToExcelData(BigDecimal value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + if (value == null) { + return new WriteCellData<>(""); // 空值处理 + } + // 拼接%符号(如需保留固定小数位,可使用setScale处理,如value.setScale(2, BigDecimal.ROUND_HALF_UP)) + return new WriteCellData<>(value.toString() + "%"); + } + + /** + * 读取Excel时:如果需要从带%的字符串转回BigDecimal,可实现此方法 + * (当前场景仅导出,暂时返回null即可) + */ + @Override + public BigDecimal convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/linghu/model/entity/User.java b/src/main/java/com/linghu/model/entity/User.java index 885be39..9673030 100644 --- a/src/main/java/com/linghu/model/entity/User.java +++ b/src/main/java/com/linghu/model/entity/User.java @@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; +import java.time.LocalDateTime; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -59,6 +61,13 @@ /** + * 创建时间 + */ + @ApiModelProperty(hidden = true) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime create_time; + + /** * 状态 */ private String status; diff --git a/src/main/java/com/linghu/model/excel/FeedExportExcel.java b/src/main/java/com/linghu/model/excel/FeedExportExcel.java index 7586d81..ca89812 100644 --- a/src/main/java/com/linghu/model/excel/FeedExportExcel.java +++ b/src/main/java/com/linghu/model/excel/FeedExportExcel.java @@ -12,7 +12,7 @@ @Data public class FeedExportExcel { - @ExcelProperty("平台名称") + @ExcelProperty("发布平台") @ApiModelProperty("平台名称") private String platform_name; @ApiModelProperty("平台是否匹配 0-否 1-是") diff --git a/src/main/java/com/linghu/model/vo/KeywordStaticsVO.java b/src/main/java/com/linghu/model/vo/KeywordStaticsVO.java index 9c520ff..9eb976c 100644 --- a/src/main/java/com/linghu/model/vo/KeywordStaticsVO.java +++ b/src/main/java/com/linghu/model/vo/KeywordStaticsVO.java @@ -2,6 +2,7 @@ import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; +import com.linghu.listener.BigDecimalPercentConverter; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -21,6 +22,6 @@ @ExcelProperty("重复次数") private Integer total_repetitions; @ApiModelProperty("平台分布占比") - @ExcelProperty("平台分布占比") + @ExcelProperty(value = "平台分布占比",converter = BigDecimalPercentConverter.class) private BigDecimal repetition_ratio; } diff --git a/src/main/java/com/linghu/model/vo/PlatformProportionVO.java b/src/main/java/com/linghu/model/vo/PlatformProportionVO.java index 38cfeca..ccd32f1 100644 --- a/src/main/java/com/linghu/model/vo/PlatformProportionVO.java +++ b/src/main/java/com/linghu/model/vo/PlatformProportionVO.java @@ -1,6 +1,7 @@ package com.linghu.model.vo; import com.alibaba.excel.annotation.ExcelProperty; +import com.linghu.listener.BigDecimalPercentConverter; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -26,11 +27,11 @@ private Integer total_repetitions; @ApiModelProperty("全平台分布占比") - @ExcelProperty("全平台分布占比") + @ExcelProperty(value = "全平台分布占比",converter = BigDecimalPercentConverter.class) private BigDecimal all_platform_ratio; @ApiModelProperty("同类平台分布占比") - @ExcelProperty("同类平台分布占比") + @ExcelProperty(value = "同类平台分布占比",converter = BigDecimalPercentConverter.class) private BigDecimal same_type_ratio; } diff --git a/src/main/java/com/linghu/model/vo/ResultList2VO.java b/src/main/java/com/linghu/model/vo/ResultList2VO.java new file mode 100644 index 0000000..ec19b44 --- /dev/null +++ b/src/main/java/com/linghu/model/vo/ResultList2VO.java @@ -0,0 +1,37 @@ +package com.linghu.model.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDate; + +@Data +@ApiModel +public class ResultList2VO { + + @ApiModelProperty("结果id") + @ExcelIgnore + private Integer reference_id; + + @ApiModelProperty("平台名称") + private String platform_name; + + @ApiModelProperty("标题") + @ExcelProperty("标题") + private String title; + + @ApiModelProperty("重复次数") + @ExcelProperty("重复次数") + private Integer repetition_num; + + @ApiModelProperty("发布时间") + @ExcelProperty("发布时间") + @JsonFormat(pattern = "yyyy/MM/dd") + private LocalDate create_time; + @ExcelProperty("发布网址") + private String url; +} diff --git a/src/main/java/com/linghu/model/vo/ResultListVO.java b/src/main/java/com/linghu/model/vo/ResultListVO.java index c9cb9ef..54d9ec0 100644 --- a/src/main/java/com/linghu/model/vo/ResultListVO.java +++ b/src/main/java/com/linghu/model/vo/ResultListVO.java @@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.time.LocalDate; import java.time.LocalDateTime; @Data @@ -18,7 +19,7 @@ private Integer reference_id; @ApiModelProperty("平台名称") - @ExcelProperty("全部平台") + @ExcelIgnore private String platform_name; @ApiModelProperty("标题") @@ -31,8 +32,8 @@ @ApiModelProperty("发布时间") @ExcelProperty("发布时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime create_time; + @JsonFormat(pattern = "yyyy/MM/dd") + private LocalDate create_time; @ExcelProperty("发布网址") private String url; } diff --git a/src/main/java/com/linghu/service/impl/OrderServiceImpl.java b/src/main/java/com/linghu/service/impl/OrderServiceImpl.java index 11e5c29..5e2d392 100644 --- a/src/main/java/com/linghu/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/linghu/service/impl/OrderServiceImpl.java @@ -146,28 +146,23 @@ queryWrapper.select(Orders::getClient_name) // 只查询客户名称字段 .eq(Orders::getDel_flag, 0) // 只查询未删除的订单 .groupBy(Orders::getClient_name); // 按客户名称分组去重 - if (clientName != null && !clientName.isEmpty()) { queryWrapper.like(Orders::getClient_name, clientName); } - - // 执行分页查询 - IPage<Orders> orderPage = orderMapper.selectPage(page, queryWrapper); + List<Orders> orders = orderMapper.selectList(queryWrapper); +// 执行分页查询 +// IPage<Orders> orderPage = orderMapper.selectPage(page, queryWrapper); // 转换为客户选项列表(统计每个客户的订单数量) - List<String> clientOptions = orderPage.getRecords().stream() - .map(order -> { - - - return order.getClient_name(); - }) + List<String> clientOptions = orders.stream() + .map(Orders::getClient_name) .collect(Collectors.toList()); // 构建结果分页对象 Page<String> resultPage = new Page<>(); - resultPage.setCurrent(orderPage.getCurrent()); - resultPage.setSize(orderPage.getSize()); - resultPage.setTotal(orderPage.getTotal()); +// resultPage.setCurrent(orderPage.getCurrent()); +// resultPage.setSize(orderPage.getSize()); +// resultPage.setTotal(orderPage.getTotal()); resultPage.setRecords(clientOptions); return resultPage; diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index b7a0ec8..d6ea188 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -12,11 +12,12 @@ <result property="phone" column="phone" jdbcType="INTEGER"/> <result property="sectionalization_id" column="sectionalization_id" jdbcType="INTEGER"/> <result property="status" column="status" jdbcType="VARCHAR"/> + <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/> </resultMap> <sql id="Base_Column_List"> user_id,user_name,user_email, - password,phone,sectionalization_id,status + password,phone,sectionalization_id,status,create_time </sql> <select id="getPage" resultType="com.linghu.model.vo.UserPageVO"> SELECT @@ -38,6 +39,7 @@ and u.status = #{status} </if> </where> + order by u.create_time </select> </mapper> diff --git a/src/main/resources/mapper/keywordMapper.xml b/src/main/resources/mapper/keywordMapper.xml index 6618988..83e3444 100644 --- a/src/main/resources/mapper/keywordMapper.xml +++ b/src/main/resources/mapper/keywordMapper.xml @@ -121,7 +121,6 @@ </if> ORDER BY - r.repetition_num, - r.create_time DESC + r.repetition_num DESC </select> </mapper> -- Gitblit v1.7.1