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