批量数据的Excel导入
public void importIndexHistoryByCsv(String fileName) {
logger.info("开始获取Csv文件导入到数据库,csv文件名为:" + fileName);
File file = new File(fileName);
cnAbsHistoryDataService.importIndexHistoryByCsv(file);
}
//指数历史数据导入
@Override
public void importIndexHistoryByCsv(File file) {
List<String> csvList = transCsvToList(file);
List<AbsSecurityEntity> absSecurityList = new ArrayList<AbsSecurityEntity>();
List<AbsSecuritySummaryEntity> summaryList = new ArrayList<AbsSecuritySummaryEntity>(); int j = 0;
int i = 0;
try {
List<AbsSecurityEntity> totalSecurityList = new ArrayList<>();
for (j = 0; j < csvList.size(); j++) {
String[] lineDate = csvList.get(j).split(",");
AbsSecurityEntity security = new AbsSecurityEntity();
AbsSecuritySummaryEntity summary = new AbsSecuritySummaryEntity();
i = -1;
security.setSecurityId(Long.valueOf(lineDate[++i]));
summary.setNoteId(Long.valueOf(lineDate[i]));
security.setSecurityCode(lineDate[++i]);
summary.setSecurityCode(lineDate[i]);
security.setSecurityName(lineDate[++i]);
summary.setSecurityName(lineDate[i]);
security.setTransferDate(DateUtil.isDate(lineDate[++i]));
summary.setTransferDate(DateUtil.isDate(lineDate[i])); summary.setPrice(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
summary.setYield(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
summary.setWal(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
summary.setBeginBalance(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
summary.setPrincipalPaid(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
summary.setInterestPaid(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
++i;
summary.setNotional(lineDate[++i] == null ? null : Double.valueOf((String) lineDate[i]));
++i;
summary.setRating(lineDate[++i]);
absSecurityList.add(security);
summaryList.add(summary);
//300条批量导入
if (j == csvList.size() - 1 || absSecurityList.size() >= 300) {
totalSecurityList.addAll(absSecurityList);
if (totalSecurityList.size() > 2000) {
totalSecurityList = totalSecurityList.stream().sorted(Comparator.comparing(AbsSecurityEntity::getTransferDate)).collect(Collectors.toList());
totalSecurityList.subList(1, totalSecurityList.size() - 1000).clear();
} for (AbsSecurityEntity entity : absSecurityList) {
entity.setType("default");
}
absSecurityDao.batchAddAbsSecurity(absSecurityList);
absSecuritySummaryDao.batchAddAbsSecuritySummary(summaryList);
absSecurityList.clear();
summaryList.clear();
}
}
} catch (Exception e) {
logger.error("指数历史数据都 error :" + e);
throw new BizException("第: " + (j + 2) + "行 , : " + i + " 列,数据格式有误");
}
}
public static List<String> transCsvToList(File file) {
List<String> dataList = new ArrayList<String>();
BufferedReader br = null;
try {
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
br = new BufferedReader(new BufferedReader(isr));
// br = new BufferedReader(new FileReader(file));
String line = "";
while ((line = br.readLine()) != null) {
dataList.add(line);
}
} catch (Exception e) {
} finally {
if (br != null) {
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
List<String> subList = dataList.subList(1, dataList.size());
return subList;
}
批量数据的Excel导入的更多相关文章
- 10w行级别数据的Excel导入优化记录
需求说明 项目中有一个 Excel 导入的需求:缴费记录导入 由实施 / 用户 将别的系统的数据填入我们系统中的 Excel 模板,应用将文件内容读取.校对.转换之后产生欠费数据.票据.票据详情并存储 ...
- 销售合同金额数据从Excel导入
一.业务需求 1.新增了销售合同金额的字段,但是老数据没有这个字段:所以销售合同金额从销售合同附件的各品种金额之和. 2.制作好excel字段模板,将此模板发送给销售业务部门来统计并完成excel表格 ...
- 利用PL/SQL Developer工具导出数据到excel,导入excel数据到表
使用PL/SQL Developer工具. 导出: 1.执行select 语句查询出需要导出的数据. 2.在数据列表中右键,选择save results.保存为.csv文件,然后已excel方式打开就 ...
- VBA: 怎样批量数据从Excel派出到Visio
上周派到了个case, 是批量从Excel导出数据导Visio每个图形中. 花了些时间实现了这个功能. 原理如下: 打开Excel 新建/打开表单 指向所选择的表单 遍历所在列的所有数据 打开Visi ...
- SQL server 导入数据 (excel导入到SQL server数据库)
打开数据库SQL server ,右键数据库,任务,导入数据 点击下一步 选择数据源类型 选择路径,点击下一步 选择将要生成的类型 选择登陆方式 选中,点击下一步 点击编辑映射可以修改将要生成的表,点 ...
- ABAP-2-会计凭证批量数据导入本地ACCESS
ABAP-1-会计凭证批量数据导入本地ACCESS 上一版本出现问题: A.若TXT数据条目超过800万(大概1.3G),则将TXT导入ACCESS过程不成功,ACCESS数据表为空.(Access单 ...
- ABAP-1-会计凭证批量数据导入本地ACCESS
公司会计凭证导入ACCESS数据库,需要发送给审计,原先的方案是采用DEPHI开发的功能(调用函数获取会计凭证信息,然后INSERT到ACCESS数据表),运行速度非常慢,业务方要求对该功能进行优化, ...
- 使用PHPExcel实现数据批量导出为excel表格
首先需要下载PHPExecel类文件,帮助文档可以参考PHPExcel中文帮助手册|PHPExcel使用方法. 下面直接上例子,是我自己写的一个简单的批量导出数据为excel的例子 前台页面 比较简单 ...
- .net实现与excel的数据交互、导入导出
应该说,一套成熟的基于web的管理系统,与用户做好的excel表格进行数据交互是一个不可或缺的功能,毕竟,一切以方便客(jin)户(qian)为宗旨. 本人之前从事PHP的开发工作,熟悉PHP的都应该 ...
随机推荐
- 市场风险~VaR的概述
1.概念理解 VaR的含义:Value at Risk 按字面的解释就是"处于风险状态的价值",可译为受险价值.在险价值.风险价值等. 通常解释为:VaR是在一定置信水平和一定持有 ...
- 【Linux】Centos下安装ffmpeg
一.准备工作 1.系统环境:CentOS release 6.9 (Final) 2.安装依赖包 yum install -y autoconf automake cmake freetype-dev ...
- 【转载】VMware虚拟机NAT模式网络配置图文教程
原文:https://blog.csdn.net/dingguanyi/article/details/77829085 一.引言 在Windows上搭建集群实验环境时,为能够让集群结点之间相互通信, ...
- LNAMP服务器环境(源码安装)
在安装前先看下它们安装时所需要的依赖库:http://www.cnblogs.com/fps2tao/p/7699448.html 1.nginx源码安装 下载:http://nginx.org/en ...
- 猿题库从 Objective-C 到 Swift 的迁移
猿题库从 Objective-C 到 Swift 的迁移 引言 相信没有人会怀疑,Swift 是 iOS 开发未来的主流语言,但是由于 Swift 语言的不断变化以及庞大的迁移成本,真正把项目迁移到 ...
- GRE tunnel 2
1.GRE简介 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX.ATM.IPv6.AppleTalk等)的数据报文进行封装,使这些被 ...
- Vue+Vue-router微信分享功能
在使用vue和vue-router路由框架已经开发过好几个项目了,其中也遇到不少坑,有些坑各种搜也没有找到非常理想的答案. vue学习相对来说还是比较简单,官方文档说明非常清楚(https://cn. ...
- 框架源码系列十二:Mybatis源码之手写Mybatis
一.需求分析 1.Mybatis是什么? 一个半自动化的orm框架(Object Relation Mapping). 2.Mybatis完成什么工作? 在面向对象编程中,我们操作的都是对象,Myba ...
- javascript转义unicode十六进制编码且带有反斜杠后的html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 安装jdk配置环境变量JAVA_HOME不起作用
今天重新安装系统,需要装jdk,配置环境变量,于是先配置JAVA_HOME D:\Program Files\Java\jdk1.8.0_144, 然后在配置path路径,但是cmd到dos命令行输 ...