SpringBoot集成MongoDB之导入导出和模板下载

前言

自己很对自己在项目中集成MongoDb做的导入导出以及模板下载的方法总结如下,有不到之处敬请批评指正!

1、pom.xml依赖引入

        <!-- excel导入导出 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
        </dependency>
        <!--mongodb-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

2、application.yml配置文件的编写

server:
  port: 25021
  servlet:
    context-path: /dangerous
spring:
  application:
    name: gnhg-dangerous
  datasource:
    driver-class-name: dm.jdbc.driver.DmDriver
    url: jdbc:dm://localhost:5236/GNHG?compatibleMode=oracle&characterEncoding=UTF-8
    username: root
    password: 123456
    name: datasource
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 10
      max-active: 100
      max-wait: 600000
      min-idle: 10
      validation-query: SELECT 1
      test-on-borrow: false
      test-on-return: false
      min-evictable-idle-time-millis: 300000
      test-while-idle: true
      time-between-eviction-runs-millis: 30000
      max-pool-prepared-statement-per-connection-size: 20
      pool-prepared-statements: true
      max-open-prepared-statements: 20
  redis:
    host: localhost
    port: 6379
  activiti:
    db-history-used: true
    history-level: audit
    async-executor-activate: true
  main:
    allow-bean-definition-overriding: true
  jackson:
    default-property-inclusion: non_null
  data:
    mongodb:
      uri: mongodb://localhost/gp-gnhg
  cloud:
    nacos:
      config:
        enabled: true #nacos配置
        server-addr: 127.0.0.1:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8721
ribbon:
  MaxAutoRetries: 2 #最大重试次数,当注册中心中可以找到服务,但是服务连不上时将会重试,如果eureka中找不到服务则直接走断路器
  MaxAutoRetriesNextServer: 3 #切换实例的重试次数
  OkToRetryOnAllOperations: false  #对所有操作请求都进行重试,如果是get则可以,如果是post,put等操作没有实现幂等的情况下是很危险的,所以设置为false
  ConnectTimeout: 5000  #请求连接的超时时间
  ReadTimeout: 6000 #请求处理的超时时间
pagehelper:
  reasonable: true
  support-methods-arguments: true
  page-size-zero: true
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.graphsafe.api.model.dangerous.po
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

logging:
  file: /gnhg_dangerous.log
  pattern:
    file: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
  level:
    root: info
datasource:
  type: Oracle #MySQL,SQLServer,Oracle

3、EasyExcelUtil工具类的编写

package com.graphsafe.dangerous.untils;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;

import java.io.OutputStream;
import java.util.List;

/**
 * @description: easyExcel工具辅助类
 * @author: songwp
 * @create: 2022-01-16 14:23
 **/
public class EasyExcelUtil {

    public static void writeExcelWithModel(OutputStream outputStream, List<? extends Object> dataList, Class<? extends Object> classT, String sheetName, CellWriteHandler... cellWriteHandlers) {

        // 头的策略
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // 单元格策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        // 初始化表格样式
        HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);

        ExcelWriterSheetBuilder excelWriterSheetBuilder = EasyExcel.write(outputStream, classT).sheet(sheetName).registerWriteHandler(horizontalCellStyleStrategy);
        if (null != cellWriteHandlers && cellWriteHandlers.length > 0) {
            for (int i = 0; i < cellWriteHandlers.length; i++) {
                excelWriterSheetBuilder.registerWriteHandler(cellWriteHandlers[i]);
            }
        }
        // 开始导出
        excelWriterSheetBuilder.doWrite(dataList);
    }

}

4、MongoDbUtil工具类的编写

package com.graphsafe.dangerous.untils;

import com.graphsafe.dangerous.model.dto.MongodbFile;
import com.mongodb.client.gridfs.GridFSBuckets;
import com.mongodb.client.gridfs.model.GridFSFile;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.gridfs.GridFsResource;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * @Description: MongoDbUtil
 * @auther: songwp
 * @date: 2022/1/17 17:35
 **/
@Component
public class MongoDbUtil {
    @Autowired
    private GridFsTemplate gridFsTemplate;
    @Resource
    private MongoDbFactory mongoDbFactory;

    /**
     * @Description:上传文件到mongodb返回文件id
     * @Param: [file]
     * @return: java.lang.String
     * @Author: songwp
     * @Date: 15:56
     **/
    public  String  uploadFileBackId(MultipartFile file, HttpServletRequest request){
        try {
            ObjectId store = gridFsTemplate.store(file.getInputStream(), file.getOriginalFilename(), request.getContentType());
            return store.toString();
        } catch (IOException e) {
            System.out.println("获取文件输入流错误。。。。。");
            e.printStackTrace();
            return null;
        }
    }

    /**
     * @Description:上传文件到mongodb返回文件
     * @Param: [file]
     * @return: java.lang.String
     * @Author: songwp
     * @Date: 15:56
     **/
    public GridFSFile uploadFileBackFile(MultipartFile file, HttpServletRequest request){
        try {
            ObjectId store = gridFsTemplate.store(file.getInputStream(), file.getOriginalFilename(), request.getContentType());
            Query query = Query.query(Criteria.where("_id").is(store.toString()));
            // 查询单个文件
            GridFSFile gfsfile = gridFsTemplate.findOne(query);
            return gfsfile;
        } catch (IOException e) {
            System.out.println("获取文件输入流错误。。。。。");
            e.printStackTrace();
            return null;
        }
    }

    /**
     * @Description: 根据mongodb中文件id下载文件
     * @Param: [response, request, fileId]
     * @return: void
     * @Author: songwp
     * @Date: 15:59
     */
    public  void downloadFile(HttpServletResponse response, HttpServletRequest request, String fileId){
        try {
            Query query = Query.query(Criteria.where("_id").is(fileId));
            // 查询单个文件
            GridFSFile gfsfile = gridFsTemplate.findOne(query);
            if (gfsfile == null) {
                return;
            }
            GridFsResource gridFsResource = new GridFsResource(gfsfile, GridFSBuckets.create(mongoDbFactory.getDb()).openDownloadStream(gfsfile.getObjectId()));
            String fileName = gfsfile.getFilename().replace(",", "");
            //处理中文文件名乱码
            if (request.getHeader("User-Agent").toUpperCase().contains("MSIE") ||
                    request.getHeader("User-Agent").toUpperCase().contains("TRIDENT")
                    || request.getHeader("User-Agent").toUpperCase().contains("EDGE")) {
                fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
            } else {
                //非IE浏览器的处理:
                fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
            }
            // 通知浏览器进行文件下载
            response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
            IOUtils.copy(gridFsResource.getInputStream(),response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * @Description: 根据mongodb中文件id获取文件的导出流数据,不让浏览器显示下载提示
     * @Param: [response, fileId]
     * @return: void
     * @Author: songwp
     * @Date: 15:14
     */
    public  void getDownloadOutputStream(HttpServletResponse response, String fileId){
        try {
            Query query = Query.query(Criteria.where("_id").is(fileId));
            // 查询单个文件
            GridFSFile gfsfile = gridFsTemplate.findOne(query);
            if (gfsfile == null) {
                return;
            }
            GridFsResource gridFsResource=new GridFsResource(gfsfile,GridFSBuckets.create(mongoDbFactory.getDb()).openDownloadStream(gfsfile.getObjectId()));
            IOUtils.copy(gridFsResource.getInputStream(),response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public  void deleteByFileId(String fileId){
        Query query = Query.query(Criteria.where("_id").is(fileId));
        GridFSFile gfsfile = gridFsTemplate.findOne(query);
        if (gfsfile == null) {
            return;
        }
        gridFsTemplate.delete(query);
    }

    /**
     * @Description: 根据文件id查询文件信息
     * @Param: [fileId]
     * @return: com.graphsafe.security.MongodbFile
     * @Author: songwp
     * @Date: 14:00
     */
    public MongodbFile getMongodFileInfoById(String fileId){
        Query query = Query.query(Criteria.where("_id").is(fileId));
        GridFSFile gfsfile = gridFsTemplate.findOne(query);
        if(gfsfile!=null){
            String fileName = gfsfile.getFilename();
            if(fileName.contains(".")){
                String type = fileName.substring(fileName.lastIndexOf("."),fileName.length());
                return new MongodbFile(fileId,fileName,gfsfile.getLength(),gfsfile.getUploadDate(),type);
            }
        }
        return null;
    }

    /**
     * @Description //TODO 法律法规录入数据用
     * @Date 2022/01/16
     * @Param [file2]
     * @return com.graphsafe.msg.RestMessage<java.lang.String>
     * @Author zwh
     **/
    public String uploadFileBackFileId(InputStream inputStream, String fileName) {
        ObjectId objectId = gridFsTemplate.store(inputStream, fileName);
        return objectId.toString();
    }

    /**
     * @Author: songwp
     * @Date: 2022/01/16 15:06
     * @Description: 上传excel
     * @params
     * @return:
     */
    public  String  uploadExcelBackId(File file, HttpServletRequest request){
        try {
            InputStream inputStream  = new FileInputStream(file);
            if(request!=null){
                ObjectId store = gridFsTemplate.store(inputStream, file.getName(),request.getContentType());
                return store.toString();
            }else{
                ObjectId store = gridFsTemplate.store(inputStream, file.getName(),"");
                return store.toString();
            }
        } catch (IOException e) {
            System.out.println("获取文件输入流错误。。。。。");
            e.printStackTrace();
            return null;
        }
    }
}

5、mongodb附件类的编写

package com.graphsafe.dangerous.model.dto;

import java.util.Date;

/**
 * @Description: mongodb附件类
 * @auther: songwp
 * @date: 2022/1/17 17:41
 **/
public class MongodbFile {
    /**
     * 文件id
     */
    private  String fileId;

    /**
     * 文件名次
     */
    private  String filename;
    /**
     * 文件大小
     */
    private  long length;
    /**
     * 文件上传时间
     */
    private Date uploadDate;
    /**
     * 文件类型
     */
    private  String type;

    public String getFilename() {
        return filename;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }

    public long getLength() {
        return length;
    }

    public void setLength(long length) {
        this.length = length;
    }

    public Date getUploadDate() {
        return uploadDate;
    }

    public void setUploadDate(Date uploadDate) {
        this.uploadDate = uploadDate;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getFileId() {
        return fileId;
    }

    public void setFileId(String fileId) {
        this.fileId = fileId;
    }

    public MongodbFile(String fileId, String filename, long length, Date uploadDate, String type) {
        this.fileId=fileId;
        this.filename = filename;
        this.length = length;
        this.uploadDate = uploadDate;
        this.type = type;
    }
}

6、ExcelListener监听类的编写

package com.graphsafe.dangerous.excelModel;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description: ExcelListener
 * @auther: songwp
 * @date: 2022/1/13 14:00
 **/
public class ExcelListener extends AnalysisEventListener {

    private List<Object> datas = new ArrayList<>();

    @Override
    public void invoke(Object o, AnalysisContext analysisContext) {
        if (o != null){
            datas.add(o);
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

7、TitleHandler操作标题行单元格颜色的编写

package com.graphsafe.dangerous.excelModel;

import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.util.StyleUtil;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.*;

import java.util.HashMap;
import java.util.List;

/**
 * <pre>
 * 操作标题行单元格颜色
 * </pre>
 *
 * @author songwp
 * @version 1.00.00
 *
 */
@Slf4j
public class TitleHandler implements CellWriteHandler {

    //操作列
    private List<Integer> columnIndexs;
    //颜色
    private Short colorIndex;
    // 批注<列的下标,批注内容>
    private HashMap<Integer,String> annotationsMap;
    // 下拉框值
    private HashMap<Integer,String[]> dropDownMap;

    public TitleHandler(List<Integer> columnIndexs, Short colorIndex, HashMap<Integer, String> annotationsMap) {
        this.columnIndexs = columnIndexs;
        this.colorIndex = colorIndex;
        this.annotationsMap = annotationsMap;
    }

    public TitleHandler(List<Integer> columnIndexs, Short colorIndex) {
        this.columnIndexs = columnIndexs;
        this.colorIndex = colorIndex;
    }

    public TitleHandler(List<Integer> columnIndexs, Short colorIndex, HashMap<Integer, String> annotationsMap, HashMap<Integer, String[]> dropDownMap) {
        this.columnIndexs = columnIndexs;
        this.colorIndex = colorIndex;
        this.annotationsMap = annotationsMap;
        this.dropDownMap = dropDownMap;
    }

    public TitleHandler(HashMap<Integer, String[]> dropDownMap) {
        this.dropDownMap = dropDownMap;
    }

    @Override
    public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
    }

    @Override
    public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
    }

    @Override
    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
        if(isHead){
            // 设置列宽
            Sheet sheet = writeSheetHolder.getSheet();
//            sheet.setColumnWidth(cell.getColumnIndex(), 20 * 256);
            writeSheetHolder.getSheet().getRow(0).setHeight((short)(1.8*256));
            Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
            Drawing<?> drawing = sheet.createDrawingPatriarch();

            // 设置标题字体样式
            WriteCellStyle headWriteCellStyle = new WriteCellStyle();
            WriteFont headWriteFont = new WriteFont();
            headWriteFont.setFontName("宋体");
            headWriteFont.setFontHeightInPoints((short)14);
            headWriteFont.setBold(true);
            if (CollectionUtils.isNotEmpty(columnIndexs) &&
                    colorIndex != null &&
                    columnIndexs.contains(cell.getColumnIndex())) {
                // 设置字体颜色
                headWriteFont.setColor(colorIndex);
            }
            headWriteCellStyle.setWriteFont(headWriteFont);
            headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
            CellStyle cellStyle = StyleUtil.buildHeadCellStyle(workbook, headWriteCellStyle);
            cell.setCellStyle(cellStyle);

            if (null != annotationsMap && annotationsMap.containsKey(cell.getColumnIndex())) {
                // 批注内容
                String context = annotationsMap.get(cell.getColumnIndex());
                // 创建绘图对象
                Comment comment=drawing.createCellComment(new XSSFClientAnchor(0, 0, 0,0, (short) cell.getColumnIndex(), 0, (short) 5, 5));
                comment.setString(new XSSFRichTextString(context));
                cell.setCellComment(comment);
            }

            if(null != dropDownMap &&
                    !dropDownMap.isEmpty() &&
                    dropDownMap.containsKey(cell.getColumnIndex())){
                String[] datas = dropDownMap.get(cell.getColumnIndex());
                DataValidationHelper dvHelper = sheet.getDataValidationHelper();
                DataValidationConstraint dvConstraint = dvHelper
                        .createExplicitListConstraint(datas);
                CellRangeAddressList addressList = null;
                DataValidation validation = null;
                for (int i = 1; i < 1000; i++) {
                    addressList = new CellRangeAddressList(i, i, cell.getColumnIndex(), cell.getColumnIndex());
                    validation = dvHelper.createValidation(
                            dvConstraint, addressList);
                    sheet.addValidationData(validation);
                }
            }
        }
    }
}

8、危化品运输车辆导入、导出实体类的编写

(1)危化品运输车辆导出实体类

package com.graphsafe.dangerous.excelModel;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;

/**
 * @Description: 危化品运输车辆导出实体类
 * @auther: songwp
 * @date: 2022/1/12 20:48
 **/
@Data
public class TransportCarExportExcel {

    @ExcelProperty(value = {"危化品运输车辆","序号"},index = 0)
    private Integer index;

    @ExcelProperty(value = {"危化品运输车辆","车牌号码"},index = 1)
    private String carCode;

    @ExcelProperty(value = {"危化品运输车辆","所属企业"},index = 2)
    private String unitName;

    @ExcelProperty(value = {"危化品运输车辆","备案企业"},index = 3)
    private String enterpriseName;

    @ExcelProperty(value = {"危化品运输车辆","车辆型号"},index = 4)
    private String vehicleModel;

    @ExcelProperty(value = {"危化品运输车辆","总重量"},index = 5)
    private BigDecimal weight;

    @ExcelProperty(value = {"危化品运输车辆","载重"},index = 6)
    private BigDecimal capacity;

    @ExcelProperty(value = {"危化品运输车辆","运输危化品名称"},index = 7)
    private String chemicalsName;

}

(2)危化品运输车辆导入实体类

package com.graphsafe.dangerous.excelModel;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

/**
 * @Description: 危化品运输车辆导入实体类
 * @auther: songwp
 * @date: 2022/1/12 20:01
 **/
@Data
public class TransportCarImportExcel {

    @ExcelProperty(value = {"危化品运输车辆","所属企业"},index = 0)
    private String unitName;

    @ExcelProperty(value = {"危化品运输车辆","备案企业"},index = 1)
    private String enterpriseName;

    @ExcelProperty(value = {"危化品运输车辆","车牌号码"},index = 2)
    private String carCode;

    @ExcelProperty(value = {"危化品运输车辆","车牌颜色"},index = 3)
    private String carCodeColor;

    @ExcelProperty(value = {"危化品运输车辆","运输危化品名称"},index = 4)
    private String chemicalsName;

    @ExcelProperty(value = {"危化品运输车辆","载重"},index = 5)
    private String capacity;

    @ExcelProperty(value = {"危化品运输车辆","总质量"},index = 6)
    private String weight;

    @ExcelProperty(value = {"危化品运输车辆","经度"},index = 7)
    private String lon;

    @ExcelProperty(value = {"危化品运输车辆","纬度"},index = 8)
    private String lat;

    @ExcelProperty(value = {"危化品运输车辆","车辆型号"},index = 9)
    private String vehicleModel;
}

9、危化品运输车辆导入模板下载方法的编写

 @Resource
 private MongoDbUtil mongoDbUtil;

/**
     * 危化品运输车辆导入模板下载
     * @param request
     * @return
     */
    @PostMapping(value = "/templateDownload", produces = "application/json;charset=UTF-8")
    public RestMessage<String> templateDownload(HttpServletRequest request) {
        String backId = "";
        try {
            // 输出流
            String fileName = "../fileStorage/危化品运输车辆导入模板.xlsx";
            OutputStream outputStream = new FileOutputStream(fileName);
            List<TransportCarImportExcel> dataList = new ArrayList<>();
            EasyExcelUtil.writeExcelWithModel(outputStream, dataList, TransportCarImportExcel.class, "危化品运输车辆");
            File file = new File(fileName);
            //针对post请求,先上传到文件存储系统,返回前端再下载
            backId = mongoDbUtil.uploadExcelBackId(file, request);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return new RestMessage<>(backId);
    }

10、危化品运输车辆信息导出

@Resource
private MongoDbUtil mongoDbUtil;

/**
     * 危化品运输车辆信息导出方法的编写
     * @param request
     * @return
     */
    @PostMapping(value = "/exportCarExcel", produces = "application/json;charset=UTF-8")
    public RestMessage<String> exportCarExcel(@RequestBody BaseExampleDto baseExampleDto, HttpServletRequest request){
        List<TransportCarExportExcel> list = new ArrayList<>();
        // 不分页
        baseExampleDto.setLimit(null);
        baseExampleDto.setPage(null);
        List<CpsTransportCar> rows = this.getByExample(baseExampleDto).getData().getRows();
        for (int i = 0;i < rows.size();i++) {
            TransportCarExportExcel exportExcel = new TransportCarExportExcel();
            BeanUtils.copyProperties(rows.get(i), exportExcel);
            // 序号
            exportExcel.setIndex(i+1);
            // 车牌号
            exportExcel.setCarCode(rows.get(i).getCarCode());
            // 运输企业
            exportExcel.setUnitName(rows.get(i).getUnitName());
            // 备案企业
            exportExcel.setEnterpriseName(rows.get(i).getEnterpriseName());
            // 车辆型号
            exportExcel.setVehicleModel(rows.get(i).getVehicleModel());
            // 总质量
            exportExcel.setWeight(rows.get(i).getWeight());
            // 载重
            exportExcel.setCapacity(rows.get(i).getCapacity());
            // 运输危化品名称
            exportExcel.setChemicalsName(rows.get(i).getChemicalsName());
            list.add(exportExcel);
        }
        String fileName = "../fileStorage/危化品运输车辆信息.xlsx";
        EasyExcel.write(fileName, TransportCarExportExcel.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("危化品运输车辆清单")
                .doWrite(list);
        File file = new File(fileName);
        //针对post请求,先上传到文件存储系统,返回前端再下载
        String backId = mongoDbUtil.uploadExcelBackId(file, request);
        return new RestMessage<>(backId);
    }

11、危化品运输车辆信息导入方法的编写

/**
     * 危化品运输车辆信息导入
     * @param file
     * @param request
     * @return
     */
    @PostMapping(value = "/importExcel", produces = "application/json;charset=UTF-8")
    @Transactional(rollbackFor = Exception.class)
    public RestMessage importExcel(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
        try {
            ExcelListener excelListener = new ExcelListener();
            List<TransportCarImportExcel> list = EasyExcel.read(
                    file.getInputStream(), TransportCarImportExcel.class, excelListener)
                    .sheet(0).doReadSync();
                    StringBuilder unitNameMessage = new StringBuilder(),
                    enterpriseNameMessage = new StringBuilder(),
                    carCodeMessage = new StringBuilder(),
                    carCodeColorNameMessage = new StringBuilder(),
                    chemicalsNameMessage = new StringBuilder(),
                    capacityMessage = new StringBuilder() ,
                    weightMessage = new StringBuilder(),
                    lonMessage = new StringBuilder(),
                    latMessage = new StringBuilder(),
                    vehicleModelMessage = new StringBuilder();
            for (int i = 0; i < list.size(); i++) {
                if (StringUtils.isEmpty(list.get(i).getUnitName())) {
                    unitNameMessage.append("第" + (i + 3) + "行,所属企业名称未填写!");
                    return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), unitNameMessage.toString());
                }
                if (StringUtils.isEmpty(list.get(i).getEnterpriseName())) {
                    enterpriseNameMessage.append("第" + (i + 3) + "行,备案企业名称未填写!");
                    return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), enterpriseNameMessage.toString());
                }
                if (StringUtils.isEmpty(list.get(i).getCarCode())) {
                    carCodeMessage.append("第" + (i + 3) + "行,车牌号码未填写!");
                    return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), carCodeMessage.toString());
                }
                if (StringUtils.isEmpty(list.get(i).getCarCodeColor())) {
                    carCodeColorNameMessage.append("第" + (i + 3) + "行,车牌颜色未填写!");
                    return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), carCodeColorNameMessage.toString());
                }
                if (StringUtils.isEmpty(list.get(i).getChemicalsName())) {
                    chemicalsNameMessage.append("第" + (i + 3) + "行,运输危化品名称未填写!");
                    return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), chemicalsNameMessage.toString());
                }
                if (StringUtils.isEmpty(list.get(i).getCapacity())) {
                    capacityMessage.append("第" + (i + 3) + "行,载重信息未填写!");
                    return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), capacityMessage.toString());
                }
                if (StringUtils.isEmpty(list.get(i).getWeight())) {
                    weightMessage.append("第" + (i + 3) + "行,总重量信息未填写!");
                    return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), weightMessage.toString());
                }
                if (StringUtils.isEmpty(list.get(i).getLon())) {
                    lonMessage.append("第" + (i + 3) + "行,经度信息未填写!");
                    return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), lonMessage.toString());
                }
                if (StringUtils.isEmpty(list.get(i).getLat())) {
                    latMessage.append("第" + (i + 3) + "行,纬度信息未填写!");
                    return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), latMessage.toString());
                }
                if (StringUtils.isEmpty(list.get(i).getVehicleModel())) {
                    vehicleModelMessage.append("第" + (i + 3) + "行,车辆型号信息未填写!");
                    return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), vehicleModelMessage.toString());
                }
            }
            for (int i = 0; i < list.size(); i++) {
                CpsTransportCar transportCar = new CpsTransportCar();
                //所属企业名称
                transportCar.setUnitName(list.get(i).getUnitName());
                //车牌号码
                transportCar.setCarCode(list.get(i).getCarCode());
                //车牌颜色
                transportCar.setCarCodeColor(list.get(i).getCarCodeColor());
                //运输危化品名称
                transportCar.setEnterpriseName(list.get(i).getChemicalsName());
                //载重
                transportCar.setCapacity(new BigDecimal(list.get(i).getCapacity()));
                //总质量
                transportCar.setWeight(new BigDecimal(list.get(i).getWeight()));
                //经度
                transportCar.setLon(new BigDecimal(list.get(i).getLon()));
                //维度
                transportCar.setLat(new BigDecimal(list.get(i).getLat()));
                //车辆型号
                transportCar.setVehicleModel(list.get(i).getVehicleModel());
                // 备案企业名称
                transportCar.setEnterpriseName(list.get(i).getEnterpriseName());
                cpsTransportCarService.updateOrSave(transportCar);
            }
        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return new RestMessage<>(RespCodeAndMsg.FAIL.getCode(), e.getMessage());
        }
        return new RestMessage<>(RespCodeAndMsg.SUCCESS, "导入成功");
    }

12、返回值的封装方法的编写

(1)RespCodeAndMsg的编写

package com.graphsafe.api.msg;

public enum RespCodeAndMsg {

	FAIL(0,"error"),
	SUCCESS(1,"success");

	RespCodeAndMsg(int code, String msg)
	{
		this.code = code;
		this.msg = msg;
	}

	private  int code;
	private String msg;

	public int getCode() {
		return this.code;
	}

	public String getMsg() {
		return this.msg;
	}
}

(2)RespCodeAndMsg的编写

package com.graphsafe.api.msg;


public class RestMessage<T> extends BaseMessage{

	T data;
	
	public RestMessage() {
		this(RespCodeAndMsg.SUCCESS);
	}
	
	public RestMessage(T data) {
		super();
		this.setData(data);
	}
	
	public RestMessage(RespCodeAndMsg respCodeAndMsg) {
    	this(respCodeAndMsg.getCode(),respCodeAndMsg.getMsg());
    }

	public RestMessage(RespCodeAndMsg respCodeAndMsg, T data) {
		this(data,respCodeAndMsg.getCode(),respCodeAndMsg.getMsg());
	}

	public RestMessage(int code, String message) {
		super(code,message);
	}
	
	public RestMessage(T data, int code) {
		super(code);
		this.setData(data);
	}
	
	/*public RestMessage(T data, String message) {
		this.setMessage(message);
		this.setData(data);
	}*/
	
	public RestMessage(T data, int code, String message) {
		this.setCode(code);
		this.setMessage(message);
		this.setData(data);
	}

	public T getData() {
		return data;
	}

	public void setData(T data) {
		this.data = data;
	}
	
	
}

(3)BaseMessage编写

package com.graphsafe.api.msg;

public class BaseMessage {

	private int code = 1;
    private String message = "success";
    
    public BaseMessage() {
		
	}
    
    public BaseMessage(RespCodeAndMsg respCodeAndMsg) {
    	this.code = respCodeAndMsg.getCode();
    	this.message = respCodeAndMsg.getMsg();
    }
    
    public BaseMessage(int code) {
		this.setCode(code);
	}
    
    public BaseMessage(int code, String msg) {
		this.setCode(code);
		this.setMessage(msg);
	}
    
    
	public int getCode() {
		return code;
	}
	public void setCode(int code) {
		this.code = code;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
     
}

注意:MongoDbUtil之前是feign接口方式写的,由于业务代码调整以我上述方法来作为示例

posted @ 2022-01-28 09:55  [奋斗]  阅读(318)  评论(0编辑  收藏  举报