Sfoglia il codice sorgente

新增excel 导出

wuweihao 3 anni fa
parent
commit
ea9428cd26

+ 9 - 1
gis_cms/src/main/java/com/gis/cms/controller/BarrageController.java

@@ -3,6 +3,7 @@ package com.gis.cms.controller;
 import com.gis.cms.entity.dto.BarrageDto;
 import com.gis.cms.entity.po.BarrageEntity;
 import com.gis.common.base.aop.WebControllerLog;
+import com.gis.common.base.entity.dto.DateDto;
 import com.gis.common.base.entity.dto.PageDateDto;
 import com.gis.common.util.Result;
 import com.gis.cms.service.BarrageService;
@@ -19,7 +20,7 @@ import javax.validation.Valid;
  * Created by owen on 2020/5/8 0008 9:54
  */
 @Slf4j
-@Api(tags = "弹幕管理")
+@Api(tags = "v0.1-弹幕管理")
 @RestController
 @RequestMapping("cms/barrage")
 public class BarrageController  {
@@ -27,6 +28,13 @@ public class BarrageController  {
     @Autowired
     private BarrageService entityService;
 
+    @WebControllerLog(description = "弹幕管理-导出Excel", addDb = true)
+    @ApiOperation("v0.1-导出Excel")
+    @PostMapping("exportExcel")
+    public Result exportExcel(@RequestBody DateDto param) {
+        return entityService.exportExcel(param);
+    }
+
 
     @ApiOperation("列表")
     @PostMapping("list")

+ 12 - 1
gis_cms/src/main/java/com/gis/cms/controller/CommentController.java

@@ -3,6 +3,7 @@ package com.gis.cms.controller;
 import com.gis.cms.entity.po.CommentEntity;
 import com.gis.cms.entity.po.QuestionGroupEntity;
 import com.gis.common.base.aop.WebControllerLog;
+import com.gis.common.base.entity.dto.DateDto;
 import com.gis.common.base.entity.dto.PageDateDto;
 import com.gis.common.util.Result;
 import com.gis.cms.entity.dto.CommentDto;
@@ -21,7 +22,7 @@ import javax.validation.Valid;
  * Created by owen on 2020/5/8 0008 9:54
  */
 @Slf4j
-@Api(tags = "留言管理")
+@Api(tags = "v0.1-留言管理")
 @RestController
 @RequestMapping("cms/comment")
 public class CommentController  {
@@ -38,6 +39,16 @@ public class CommentController  {
     }
 
 
+    @WebControllerLog(description = "留言管理-导出Excel", addDb = true)
+    @ApiOperation("v0.1-导出Excel")
+    @PostMapping("exportExcel")
+    public Result exportExcel(@RequestBody DateDto param) {
+        return entityService.exportExcel(param);
+    }
+
+
+
+
 
     @WebControllerLog(description = "留言管理-新增留言", addDb = true)
     @ApiOperation("新增留言")

+ 22 - 0
gis_cms/src/main/java/com/gis/cms/entity/vo/BarrageVoExcel.java

@@ -0,0 +1,22 @@
+package com.gis.cms.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * Created by owen on 2022/2/17.
+ * 留言用
+ */
+@Data
+public class BarrageVoExcel {
+
+
+    @ApiModelProperty(value = "内容")
+    private String content;
+
+    @ApiModelProperty(value = "提交时间")
+    private String createTime;
+
+
+}

+ 28 - 0
gis_cms/src/main/java/com/gis/cms/entity/vo/CommentVoExcel.java

@@ -0,0 +1,28 @@
+package com.gis.cms.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * Created by owen on 2022/2/17.
+ * 留言用
+ */
+@Data
+public class CommentVoExcel  {
+
+
+
+
+
+    @ApiModelProperty(value = "昵称")
+    private String name;
+
+    @ApiModelProperty(value = "内容")
+    private String content;
+
+    @ApiModelProperty(value = "提交时间")
+    private String createTime;
+
+
+}

+ 4 - 0
gis_cms/src/main/java/com/gis/cms/mapper/BarrageMapper.java

@@ -2,7 +2,9 @@ package com.gis.cms.mapper;
 
 
 import com.gis.cms.entity.po.BarrageEntity;
+import com.gis.cms.entity.vo.BarrageVoExcel;
 import com.gis.cms.mapper.provider.BarrageProvider;
+import com.gis.cms.mapper.provider.BaseProvider;
 import com.gis.common.base.entity.dto.PageDateDto;
 import com.gis.common.base.mapper.IBaseMapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -18,4 +20,6 @@ public interface BarrageMapper extends IBaseMapper<BarrageEntity, Long> {
     @SelectProvider(type = BarrageProvider.class, method = "search")
     List<BarrageEntity> search(PageDateDto param, Integer display);
 
+    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+    List<BarrageVoExcel> expertSql(String sqlStr);
 }

+ 6 - 0
gis_cms/src/main/java/com/gis/cms/mapper/CommentMapper.java

@@ -1,6 +1,8 @@
 package com.gis.cms.mapper;
 
 
+import com.gis.cms.entity.vo.CommentVoExcel;
+import com.gis.cms.mapper.provider.BaseProvider;
 import com.gis.common.base.entity.dto.PageDateDto;
 import com.gis.common.base.mapper.IBaseMapper;
 import com.gis.cms.entity.po.CommentEntity;
@@ -9,6 +11,7 @@ import com.gis.cms.mapper.provider.CommentProvider;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDate;
@@ -29,4 +32,7 @@ public interface CommentMapper extends IBaseMapper<CommentEntity, Long> {
     @Select("select a.id, a.create_time, a.content, a.display, a.parent_id, b.unit, b.real_name, b.nick_name from tb_comment a left join sys_user b on b.id=a.user_id " +
             "where a.is_delete = '0' and a.id=#{id}")
     CommentEntity detailMapper(Long id);
+
+    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+    List<CommentVoExcel> expertSql(String sql);
 }

+ 0 - 6
gis_cms/src/main/java/com/gis/cms/mapper/MyBaseMapper.java

@@ -1,19 +1,13 @@
 package com.gis.cms.mapper;
 
 
-import com.gis.cms.entity.po.BarrageEntity;
 import com.gis.cms.entity.po.FileEntity;
-import com.gis.cms.mapper.provider.BarrageProvider;
-import com.gis.cms.mapper.provider.BaseProvider;
-import com.gis.common.base.entity.dto.PageDateDto;
 import com.gis.common.base.mapper.IBaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.SelectProvider;
 import org.apache.ibatis.annotations.Update;
 import org.springframework.stereotype.Component;
 
-import java.util.List;
 
 
 @Component

+ 3 - 0
gis_cms/src/main/java/com/gis/cms/service/BarrageService.java

@@ -3,6 +3,7 @@ package com.gis.cms.service;
 
 import com.gis.cms.entity.dto.BarrageDto;
 import com.gis.cms.entity.po.BarrageEntity;
+import com.gis.common.base.entity.dto.DateDto;
 import com.gis.common.base.entity.dto.PageDateDto;
 import com.gis.common.base.service.IBaseService;
 import com.gis.common.util.Result;
@@ -22,4 +23,6 @@ public interface BarrageService extends IBaseService<BarrageEntity, Long> {
     Result saveEntity(BarrageDto param);
 
     Result<BarrageEntity> detail(Long id);
+
+    Result exportExcel(DateDto param);
 }

+ 3 - 0
gis_cms/src/main/java/com/gis/cms/service/CommentService.java

@@ -4,6 +4,7 @@ package com.gis.cms.service;
 import com.gis.cms.entity.dto.CommentDto;
 import com.gis.cms.entity.po.CommentEntity;
 import com.gis.cms.entity.vo.CommentVo;
+import com.gis.common.base.entity.dto.DateDto;
 import com.gis.common.base.entity.dto.PageDateDto;
 import com.gis.common.base.service.IBaseService;
 import com.gis.common.util.Result;
@@ -29,4 +30,6 @@ public interface CommentService extends IBaseService<CommentEntity, Long> {
     Result<CommentVo> voListTree(PageDateDto param, Integer display);
 
     Result<CommentEntity> detail(Long id);
+
+    Result exportExcel(DateDto param);
 }

+ 52 - 9
gis_cms/src/main/java/com/gis/cms/service/impl/BarrageServiceImpl.java

@@ -2,24 +2,35 @@ package com.gis.cms.service.impl;
 
 import com.gis.cms.entity.dto.BarrageDto;
 import com.gis.cms.entity.po.BarrageEntity;
+import com.gis.cms.entity.vo.BarrageVoExcel;
+import com.gis.cms.entity.vo.CommentVoExcel;
 import com.gis.cms.mapper.BarrageMapper;
 import com.gis.cms.service.SensitiveService;
+import com.gis.common.base.entity.dto.DateDto;
 import com.gis.common.base.entity.dto.PageDateDto;
+import com.gis.common.base.exception.BaseRuntimeException;
 import com.gis.common.base.mapper.IBaseMapper;
 import com.gis.common.base.service.impl.IBaseServiceImpl;
+import com.gis.common.util.ExcelUtils;
+import com.gis.common.util.MyStrUtil;
 import com.gis.common.util.Result;
 import com.gis.cms.service.BarrageService;
 import com.github.pagehelper.PageInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
 
 
 /**
  * Created by owen on 2020/3/11 0011 16:16
  */
+@Slf4j
 @Service
 public class BarrageServiceImpl extends IBaseServiceImpl<BarrageEntity, Long> implements BarrageService {
 
@@ -39,15 +50,6 @@ public class BarrageServiceImpl extends IBaseServiceImpl<BarrageEntity, Long> im
     public Result<PageInfo<BarrageEntity>> search(PageDateDto param, Integer display) {
         startPage(param);
         PageInfo<BarrageEntity> page = new PageInfo<>(entityMapper.search(param, display));
-//        List<BarrageVo> list = page.getList();
-//        Set<Object> filterKey = sensitiveService.getFilterKey();
-//        for (BarrageVo vo : list) {
-//            String content = vo.getContent();
-//            if (content != null){
-//                vo.setContent(MyStrUtil.getFilterMsg(filterKey, content));
-//            }
-//        }
-
 
         return Result.success(page);
     }
@@ -82,4 +84,45 @@ public class BarrageServiceImpl extends IBaseServiceImpl<BarrageEntity, Long> im
         return Result.success(entity);
     }
 
+    @Override
+    public Result exportExcel(DateDto param) {
+        List<BarrageVoExcel> rows = findByDate(param);
+
+        // 保存地址
+        String filePath = "/excel/" + MyStrUtil.getTimeStr() + ".xlsx";
+        String savePath = configConstant.serverBasePath + filePath;
+
+
+        HashMap<String, String> rowTitle = new HashMap<>();
+        rowTitle.put("createTime", "提交时间");
+        rowTitle.put("content", "内容");
+
+        ExcelUtils.createExcel(rows, savePath, rowTitle);
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("size", rows.size());
+        result.put("path", filePath);
+
+
+        return Result.success(result);
+    }
+
+    private List<BarrageVoExcel> findByDate(DateDto param){
+
+        String startTime = param.getStartTime();
+        String endTime = param.getEndTime();
+        if (StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime)){
+            throw new BaseRuntimeException("日期不能为空");
+        }
+
+        StringBuffer sql = new StringBuffer();
+        sql.append("select * from tb_barrage where is_delete=0 ");
+        sql.append(" and create_time >= ").append("'").append(startTime).append("'");
+        sql.append(" and create_time <= ").append("'").append(endTime).append("'");
+        sql.append(" order by create_time desc");
+        String sqlStr = sql.toString();
+        log.info("sql: {}", sqlStr);
+        return entityMapper.expertSql(sqlStr);
+
+    }
+
 }

+ 53 - 0
gis_cms/src/main/java/com/gis/cms/service/impl/CommentServiceImpl.java

@@ -2,17 +2,26 @@ package com.gis.cms.service.impl;
 
 import com.gis.cms.entity.dto.CommentDto;
 import com.gis.cms.entity.po.CommentEntity;
+import com.gis.cms.entity.po.QuestionGroupEntity;
 import com.gis.cms.entity.vo.CommentVo;
+import com.gis.cms.entity.vo.CommentVoExcel;
 import com.gis.cms.mapper.CommentMapper;
 import com.gis.cms.service.CommentService;
 import com.gis.cms.service.SensitiveService;
 import com.gis.cms.tree.CommentTreeUtil;
 import com.gis.cms.tree.vo.CommentTree;
+import com.gis.common.base.entity.dto.DateDto;
 import com.gis.common.base.entity.dto.PageDateDto;
+import com.gis.common.base.exception.BaseRuntimeException;
 import com.gis.common.base.mapper.IBaseMapper;
 import com.gis.common.base.service.impl.IBaseServiceImpl;
+import com.gis.common.util.ExcelUtils;
+import com.gis.common.util.MyStrUtil;
 import com.gis.common.util.Result;
 import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -20,6 +29,7 @@ import tk.mybatis.mapper.entity.Condition;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Set;
 
@@ -27,6 +37,7 @@ import java.util.Set;
 /**
  * Created by owen on 2020/3/11 0011 16:16
  */
+@Slf4j
 @Service
 public class CommentServiceImpl extends IBaseServiceImpl<CommentEntity, Long> implements CommentService {
 
@@ -95,4 +106,46 @@ public class CommentServiceImpl extends IBaseServiceImpl<CommentEntity, Long> im
         CommentEntity entity = entityMapper.detailMapper(id);
         return Result.success(entity);
     }
+
+    @Override
+    public Result exportExcel(DateDto param) {
+        List<CommentVoExcel> rows = findByDate(param);
+
+        // 保存地址
+        String filePath = "/excel/" + MyStrUtil.getTimeStr() + ".xlsx";
+        String savePath = configConstant.serverBasePath + filePath;
+
+
+        HashMap<String, String> rowTitle = new HashMap<>();
+        rowTitle.put("name", "昵称");
+        rowTitle.put("createTime", "提交时间");
+        rowTitle.put("content", "内容");
+
+        ExcelUtils.createExcel(rows, savePath, rowTitle);
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("size", rows.size());
+        result.put("path", filePath);
+
+
+        return Result.success(result);
+    }
+
+    private List<CommentVoExcel> findByDate(DateDto param){
+
+        String startTime = param.getStartTime();
+        String endTime = param.getEndTime();
+        if (StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime)){
+            throw new BaseRuntimeException("日期不能为空");
+        }
+
+        StringBuffer sql = new StringBuffer();
+        sql.append("select * from tb_comment where is_delete=0 ");
+        sql.append(" and create_time >= ").append("'").append(startTime).append("'");
+        sql.append(" and create_time <= ").append("'").append(endTime).append("'");
+        sql.append(" order by create_time desc");
+        String sqlStr = sql.toString();
+        log.info("sql: {}", sqlStr);
+        return entityMapper.expertSql(sqlStr);
+
+    }
 }

+ 0 - 2
gis_cms/src/main/java/com/gis/cms/service/impl/GoodsServiceImpl.java

@@ -178,8 +178,6 @@ public class GoodsServiceImpl extends IBaseServiceImpl<GoodsEntity, Long> implem
             code = DateUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS");
         }
 
-//        Map<String, Object> result = fileService.upload(file, "/" + TypeCode.MODULE_GOODS + "/img" + code );
-//        Map<String, Object> result = fileService.upload(file, "/" + TypeCode.MODULE_GOODS + "/img" + code );
         Map<String, Object> result = fileUtils.imgUploadMapAndCompress(file, "/goods/img/" + code, false);
         FileEntity entity = new FileEntity();
         entity.setModule(TypeCode.MODULE_GOODS);

+ 6 - 0
gis_common/pom.xml

@@ -84,6 +84,12 @@
             <artifactId>hutool-all</artifactId>
         </dependency>
 
+        <!--excel 依赖工具包, hutool需要用的-->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>

+ 22 - 0
gis_common/src/main/java/com/gis/common/base/entity/dto/DateDto.java

@@ -0,0 +1,22 @@
+package com.gis.common.base.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by owen on 2022/2/17 0017 9:08
+ */
+@Data
+public class DateDto {
+
+    /**
+     * 开始时间
+     * 需要用字符串接收
+     */
+    @ApiModelProperty(value = "开始时间, yyyy-mm-dd 00:00:00", name = "startTime")
+    private String startTime;
+
+
+    @ApiModelProperty(value = "结束时间, yyyy-mm-dd 23:59:59", name = "endTime")
+    private String endTime;
+}

+ 136 - 0
gis_common/src/main/java/com/gis/common/util/ExcelUtils.java

@@ -0,0 +1,136 @@
+package com.gis.common.util;
+
+import cn.hutool.poi.excel.ExcelReader;
+import cn.hutool.poi.excel.ExcelUtil;
+import cn.hutool.poi.excel.ExcelWriter;
+import com.gis.common.base.exception.BaseRuntimeException;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by owen on 2022/2/8 0008 15:50
+ */
+@Slf4j
+public class ExcelUtils {
+
+    /**
+     * 写
+     * @param rows 每行数据
+     * @param savePath 保存地址 xxx.xlsx
+     * @param rowTitle 标题
+     */
+    public static void createExcel(List rows, String savePath, Map<String, String> rowTitle) {
+        log.info("rows size: {}", rows.size());
+//        log.info("savePath: {}", savePath);
+        ExcelWriter writer = ExcelUtil.getWriter(savePath);
+
+        //自定义标题别名
+        if (rowTitle != null) {
+            for (Map.Entry<String, String> a : rowTitle.entrySet()) {
+                writer.addHeaderAlias(a.getKey(), a.getValue());
+            }
+        }
+
+        // 一次性写出内容,使用默认样式,强制输出标题
+        writer.write(rows, true);
+        // 关闭writer,释放内存
+        writer.close();
+        log.info("excel完成:" +  savePath);
+
+    }
+
+
+    /**
+     * 读
+     */
+    public static List<List<Object>> readExcel(String filePath) {
+        log.info("文件地址: {}", filePath);
+        if (!filePath.endsWith(".xlsx")){
+            throw new BaseRuntimeException("非法文件");
+        }
+        // 默认读第一个sheet
+        ExcelReader reader = ExcelUtil.getReader(filePath);
+        // 读取Excel中所有行和列,都用列表表示
+        List<List<Object>> read = reader.read();
+
+        log.info("读取excel完成" );
+        return read;
+
+    }
+
+//    @Test
+//    public void readExcelTest(){
+//        String filePath = "E:\\data\\museum_dali_data\\test.xlsx";
+//        List<List<Object>> read = readExcel(filePath);
+//
+//        // 题组标题
+//        List<Object> group = read.get(1);
+//        String groupTitle = group.get(1).toString();
+//        if (StrUtil.isBlank(groupTitle)){
+//            throw new BaseRuntimeException("题组名称不能为空");
+//        }
+//        log.info("题组名称:{}", groupTitle );
+//        // 重第三行读取,直接读取题目跟选项
+//
+//        HashMap<String, TopicDto> topicMap = new HashMap<>();
+//        String topic = null;
+//        for (int i = 2; i < read.size(); i++) {
+//            List<Object> list = read.get(i);
+//            String tips = (String)list.get(0);
+//            if (StrUtil.isBlank(tips)){
+//                log.warn("提示行为空,默认为结束行");
+//                break;
+//            }
+//            // 题目
+//            if (tips.contains("题目")){
+//                topic = (String)list.get(1);
+//                // 题目为空,结束循环
+//                if (StrUtil.isBlank(topic)){
+//                    log.warn(tips + ": 为空");
+//                    break;
+//                }
+//
+//                // 保存题目
+//                TopicDto topicDto = new TopicDto();
+//                topicDto.setTopic(topic);
+//                topicMap.put(topic, topicDto);
+//            }
+//
+//            // 选项
+//            if (tips.contains("选项")){
+//                String option = (String)list.get(1);
+//                if (StrUtil.isBlank(option)){
+//                    // 选项为空, 执行下一次循环
+//                    continue;
+//                }
+//                TopicDto topicDto = topicMap.get(topic);
+//                String random = RandomUtil.randomString(8);
+//
+//                // 正确答案
+//                String correct = (String)list.get(2);
+//                if (StrUtil.isNotBlank(correct)){
+//                    topicDto.setCorrect(random);
+//                }
+//
+//                Map<String, String> options = topicDto.getOptions();
+//                if (CollectionUtil.isEmpty(options)){
+//                    options = new HashMap<>();
+//                }
+//                options.put(random, option);
+//
+//                topicDto.setOptions(options);
+//                // 设置题目到题组
+//                topicMap.put(topic, topicDto);
+//
+//            }
+//
+//
+//
+//        }
+//
+//        log.info("excel数据封装完成");
+//
+//    }
+}

+ 12 - 0
gis_common/src/main/java/com/gis/common/util/MyStrUtil.java

@@ -1,5 +1,8 @@
 package com.gis.common.util;
 
+import cn.hutool.core.date.DateUtil;
+
+import java.util.Date;
 import java.util.Set;
 
 /**
@@ -22,4 +25,13 @@ public class MyStrUtil {
         }
         return content;
     }
+
+    /**
+     * 获取当前时间字符串 ,yyyyMMdd_HHmmss
+     * @return
+     */
+    public static String getTimeStr(){
+        long end = System.currentTimeMillis();
+        return DateUtil.format(new Date(), "yyyyMMdd_HHmmss");
+    }
 }

+ 8 - 0
pom.xml

@@ -34,6 +34,7 @@
     <gis.version>1.0.0</gis.version>
     <druid.version>1.1.14</druid.version>
     <hutool.version>5.3.3</hutool.version>
+    <poi.version>3.17</poi.version>
     <lombok.version>1.18.2</lombok.version>
     <fastjson.version>1.2.75</fastjson.version>
     <lang3.version>3.7</lang3.version>
@@ -168,6 +169,13 @@
         <version>${hutool.version}</version>
       </dependency>
 
+      <!--excel 依赖工具包, hutool需要用的-->
+      <dependency>
+        <groupId>org.apache.poi</groupId>
+        <artifactId>poi-ooxml</artifactId>
+        <version>${poi.version}</version>
+      </dependency>
+
       <!-- StringUtils -->
       <dependency>
         <groupId>org.apache.commons</groupId>