spring boot缓存excel临时文件后再操作
1. 引入poi的两个依赖
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.15</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.15</version>
</dependency>
2. controller层
package com.cdqd.app.controllers;
import com.cdqd.app.common.JsonRet;
import com.cdqd.app.exception.BizException;
import com.cdqd.app.service.TranslateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Objects;
/**
 * @description:
 * @author: Rosa
 * @create: 2018-12-24 10:06
 **/
@RestController
@RequestMapping("translate")
public class TranslateController {
    @Autowired
    private TranslateService translateService;
    @PostMapping("source/name")
    public JsonRet translateSourceName(HttpServletRequest request) throws Exception{
        MultipartRequest multipartHttpServletRequest = (MultipartRequest) request;
        MultipartFile multipartFile = multipartHttpServletRequest.getFile("file");
	//如果为空,抛出异常,此处为自定义异常,如有需要请改写
        if (Objects.requireNonNull(multipartFile).isEmpty()){
            throw new BizException(4001);
        }
	//存储临时文件
        String fileName = multipartFile.getOriginalFilename();
        String prefix = fileName.substring(Objects.requireNonNull(fileName).lastIndexOf("."));
        File file = File.createTempFile(System.currentTimeMillis() + "", prefix);
        multipartFile.transferTo(file);
	//调用service对流进行具体操作
        translateService.translateSourceDatabase(new FileInputStream(file));
        return JsonRet.buildRet(0);//
    }
}
3. service层(给自己回忆用的,针对性强,读者没有必要往下看了)
接口: TranslateService.java
package com.cdqd.app.service;
import java.io.InputStream;
public interface TranslateService {
    void translateSourceDatabase(InputStream inputStream);
}
实现文件: TranslateServiceImpl.java
package com.cdqd.app.service.impl;
import com.cdqd.app.common.StringUtil;
import com.cdqd.app.entity.DatabaseEntity;
import com.cdqd.app.entity.TableEntity;
import com.cdqd.app.exception.BizException;
import com.cdqd.app.mapper.ColumnMapper;
import com.cdqd.app.mapper.DatabaseMapper;
import com.cdqd.app.mapper.TableMapper;
import com.cdqd.app.model.Column;
import com.cdqd.app.model.Database;
import com.cdqd.app.model.Table;
import com.cdqd.app.service.TableService;
import com.cdqd.app.service.TranslateService;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @description:
 * @author: Rosa
 * @create: 2018-12-24 10:04
 **/
@Service
public class TranslateServiceImpl implements TranslateService {
    @Autowired
    private DatabaseMapper databaseMapper;
    @Autowired
    private TableMapper tableMapper;
    @Autowired
    private ColumnMapper columnMapper;
    @Autowired
    private TableService tableService;
    @Override
    public void translateSourceDatabase(InputStream inputStream) {
        Map<String, Map<String, TableEntity>> databaseMap = getTransMap(inputStream);
        //遍历所有库
        if (databaseMap != null) {
            for (String databaseEnName : databaseMap.keySet()) {
                Database database = new Database();
                database.setDatabaseEnName(databaseEnName);
                //如果库存在则开始遍历表
                if (databaseMapper.selectOne(database) != null) {
                    Integer databaseId = databaseMapper.selectOne(database).getDatabaseId();
                    //MapKey("tableEnName")
                    Map<String, TableEntity> dbTableMap = tableService.getTableEntityMap(databaseId);
                    //<表英文名, 表实体>
                    Map<String, TableEntity> excelTableMap = databaseMap.get(databaseEnName);
                    //遍历数据库map的表实体
                    for (String dbTableEnName : dbTableMap.keySet()) {
                        TableEntity dbTableEntity = dbTableMap.get(dbTableEnName);
                        //如果excel数据中有这边的表
                        if (excelTableMap.containsKey(dbTableEnName)) {
                            TableEntity excelTableEntity = excelTableMap.get(dbTableEnName);
                            //源表表名翻译
                            if (!StringUtil.isEmpty(excelTableEntity.getTableCnName())) {
                                Table table = new Table();
                                table.setTableId(dbTableEntity.getTableId());
                                table.setTableCnName(excelTableEntity.getTableCnName());
                                tableMapper.updateByPrimaryKeySelective(table);
                            }
                            //如果列不为空的话
                            if (dbTableEntity.getColumnList() != null && excelTableEntity.getColumnMap() != null) {
                                //<列英文名, 列实体>
                                Map<String, Column> excelColumnMap = excelTableEntity.getColumnMap();
                                for (Column dbColumn : dbTableEntity.getColumnList()) {
                                    if (excelColumnMap.containsKey(dbColumn.getColumnEnName())) {
                                        String columnCnName = excelColumnMap.get(dbColumn.getColumnEnName()).getColumnCnName();
                                        if (!StringUtil.isEmpty(columnCnName)) {
                                            //如果列中文名不为空,翻译列名
                                            Column column = new Column();
                                            column.setColumnId(dbColumn.getColumnId());
                                            column.setColumnCnName(columnCnName);
                                            columnMapper.updateByPrimaryKeySelective(column);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
//        return TRANS_MAP;
    }
    private Map<String, Map<String, TableEntity>> getTransMap(InputStream inputStream) {
        Map<String, Map<String, TableEntity>> databaseMap = new HashMap<>();
        try {
            XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
            XSSFSheet sheet = workbook.getSheetAt(0);
            for (int row = 1; row < sheet.getLastRowNum(); row++) {
                XSSFRow xssfRow = sheet.getRow(row);
                if (xssfRow.getCell(0) == null) {
                    continue;
                }
                String databaseName = String.valueOf(xssfRow.getCell(0));
                String tableEnName = String.valueOf(xssfRow.getCell(1));
                String tableCnName = String.valueOf(xssfRow.getCell(2));
                String columnEnName = String.valueOf(xssfRow.getCell(3));
                String columnCnName = String.valueOf(xssfRow.getCell(4));
                Column column = new Column();
                column.setColumnEnName(columnEnName);
                column.setColumnCnName(columnCnName);
                if (tableEnName == null) {
                    continue;
                }
                if (databaseMap.containsKey(databaseName)) {
                    //<表英文名, 表实体>
                    Map<String, TableEntity> excelTableMap = databaseMap.get(databaseName);
                    //如果表存在,获取那个表实体
                    if (excelTableMap.containsKey(tableEnName)) {
                        TableEntity excelTableEntity = excelTableMap.get(tableEnName);
                        if (columnEnName != null && !columnEnName.equals("")) {
                            if (excelTableEntity.getColumnMap() != null) {
                                Map<String, Column> columnMap = excelTableEntity.getColumnMap();
                                columnMap.put(columnEnName, column);
                                excelTableEntity.setColumnMap(columnMap);
                            } else {
                                Map<String, Column> columnMap = new HashMap<>();
                                columnMap.put(columnEnName, column);
                                excelTableEntity.setColumnMap(columnMap);
                            }
                        }
                        excelTableMap.put(tableEnName, excelTableEntity);
                    } else {
                        //表不存在时插入表
                        TableEntity excelTableEntity = new TableEntity();
                        excelTableEntity.setTableEnName(tableEnName);
                        excelTableEntity.setTableCnName(tableCnName);
                        if (columnEnName != null && !columnEnName.equals("")) {
                            Map<String, Column> columnMap = new HashMap<>();
                            columnMap.put(columnEnName, column);
                            excelTableEntity.setColumnMap(columnMap);
                        }
                        excelTableMap.put(tableEnName, excelTableEntity);
                    }
                } else {
                    Map<String, TableEntity> excelTableMap = new HashMap<>();
                    TableEntity excelTableEntity = new TableEntity();
                    excelTableEntity.setTableEnName(tableEnName);
                    excelTableEntity.setTableCnName(tableCnName);
                    if (columnEnName != null && !columnEnName.equals("")) {
                        Map<String, Column> columnMap = new HashMap<>();
                        columnMap.put(columnEnName, column);
                        excelTableEntity.setColumnMap(columnMap);
                    }
                    excelTableMap.put(tableEnName, excelTableEntity);
                    databaseMap.put(databaseName, excelTableMap);
                }
            }
            return databaseMap;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
												
											spring boot缓存excel临时文件后再操作的更多相关文章
- Spring Boot项目指定启动后执行的操作
		
Spring Boot项目指定启动后执行的操作: (1)实现CommandLineRunner 接口 (2)重写run方法 (3)声明执行顺序@Order(1),数值越小,优先级越高 (4)如果需要注 ...
 - Spring boot缓存初体验
		
spring boot缓存初体验 1.项目搭建 使用MySQL作为数据库,spring boot集成mybatis来操作数据库,所以在使用springboot的cache组件时,需要先搭建一个简单的s ...
 - 3步轻松搞定Spring Boot缓存
		
作者:谭朝红 前言 本次内容主要介绍基于Ehcache 3.0来快速实现Spring Boot应用程序的数据缓存功能.在Spring Boot应用程序中,我们可以通过Spring Caching来快速 ...
 - 如何解决spring boot 项目导入依赖后代码报错问题
		
如何解决spring boot 项目导入依赖后代码报错问题 2020-08-15 14:17:18 代码截图如图所示(由于本人问题已经解决,没来得及截图,所以在网上找了一张图片)
 - Spring boot配置多个Redis数据源操作实例
		
原文:https://www.jianshu.com/p/c79b65b253fa Spring boot配置多个Redis数据源操作实例 在SpringBoot是项目中整合了两个Redis的操作实例 ...
 - Spring Boot 导出Excel表格
		
Spring Boot 导出Excel表格 添加支持 <!--添加导入/出表格依赖--> <dependency> <groupId>org.apache.poi& ...
 - Spring Boot缓存Ehcache
		
Spring Boot 整合 Ehcache 修改 pom 文件 <!-- Spring Boot 缓存支持启动器 --> <dependency> <groupId ...
 - spring boot, 容器启动后执行某操作
		
常有在spring容器启动后执行某些操作的需求,现做了一个demo的实现,做一下记录,也希望可以给需要的同学提供参考. 1.spring启动后,以新线程执行后续需要的操作,所以执行类实现Runnabl ...
 - Spring boot 配置 Tomcat 临时文件缓存目录
		
1. 问题现象 spring boot 项目中,Tomcat 接收到 content-type 为 multipart/form-data 的请求时,需要将接收的文件缓存到临时目录(默认下载 /tmp ...
 
随机推荐
- Docker简介(一)
			
一.为什么会有Docker 环境配置很麻烦,换了台机器,就得全部重新配置一次. 二.Docker的理念 Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship a ...
 - <Stack> 150 71 388
			
150. Evaluate Reverse Polish Notation class Solution { public int evalRPN(String[] tokens) { Stack&l ...
 - 洛谷p1137旅行计划
			
题面 关于拓扑排序 因为这好几次考试的题目里都有在DAG中拓扑排序求最长/短路 txt说它非常的好用 就找了个题做了下 拓扑排序就是寻找图中所有的入度为零的点把他入队 然后再枚举它所有的连到的点,只要 ...
 - 洛谷 P5461 赦免战俘
			
洛谷 P5461 赦免战俘 传送门 思路 洛谷7月月赛第一题 着实是一道大水题,然后我月赛的时候没做出来...... 就是一道大模拟题呀,直接dfs就好了,我是反着处理的,所以最后要输出\(1-a[i ...
 - Linux性能优化实战学习笔记:第四十二讲
			
一.上节回顾 上一节,我们学习了 NAT 的原理,明白了如何在 Linux 中管理 NAT 规则.先来简单复习一下. NAT 技术能够重写 IP 数据包的源 IP 或目的 IP,所以普遍用来解决公网 ...
 - c++小学期大作业攻略(二)整体思路+主界面
			
写在前面:如果我曾经说过要在第一周之内写完大作业,那……肯定是你听错了.不过如果我在写的时候有攻略看的话应该可以轻松地在4~5天内做完,然后觉得写攻略的人是个小天使吧(疯狂暗示).出于给大家自由发挥的 ...
 - 集合类源码(二)Collection之List(ArrayList, LinkedList, Vector)
			
ArrayList 功能 完全命名 public class ArrayList<E> extends AbstractList<E> implements List<E ...
 - Sitecore 创建并实施自定义营销分类
			
在Sitecore体验平台中,分类法是一种组织项目的方式.您可以应用分类标签来识别广告系列,引荐渠道以及有关营销活动的其他信息.这使您可以识别和跟踪各种营销活动之间的关系,从而更深入地了解广告系列的效 ...
 - JSONBuilder的用法
			
一.JSONBuilder可以向文件中写入写入json字符串.如下面的例子: 1 public class Test 2 { 3 public static void main(String args ...
 - 【转】Redis的各项功能解决了哪些问题?
			
作者:Blackheart 出处:http://linianhui.cnblogs.com 先看一下Redis是一个什么东西.官方简介解释到:Redis是一个基于BSD开源的项目,是一个把结构化的数据 ...