guyue
13 小时以前 41b70b1de21eca6ad2cade92c56ae400386c628b
Merge remote-tracking branch 'origin/master'
2个文件已添加
12个文件已修改
233 ■■■■ 已修改文件
src/main/java/com/linghu/controller/KeywordController.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/controller/OrderController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/controller/PlatformController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/controller/UserController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/listener/BigDecimalPercentConverter.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/model/entity/User.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/model/excel/FeedExportExcel.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/model/vo/KeywordStaticsVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/model/vo/PlatformProportionVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/model/vo/ResultList2VO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/model/vo/ResultListVO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/linghu/service/impl/OrderServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/UserMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/keywordMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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")
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);
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) {
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);
src/main/java/com/linghu/listener/BigDecimalPercentConverter.java
New file
@@ -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;
    }
}
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;
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-是")
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;
}
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;
}
src/main/java/com/linghu/model/vo/ResultList2VO.java
New file
@@ -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;
}
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;
}
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;
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>
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>