Browse Source

每十秒读取文件夹下的excel文件并保存到数据库

java8
文宽 史 2 years ago
parent
commit
2859d9a14f
  1. 10
      src/main/java/com/xujie/sys/common/utils/TaskUtils.java
  2. 24
      src/main/java/com/xujie/sys/modules/reader/controller/GetInformationForExcelController.java
  3. 9
      src/main/java/com/xujie/sys/modules/reader/dao/EquipmentFolderLocationMapper.java
  4. 13
      src/main/java/com/xujie/sys/modules/reader/dao/GetInformationForExcelMapper.java
  5. 35
      src/main/java/com/xujie/sys/modules/reader/entity/EquipmentDataDetail.java
  6. 19
      src/main/java/com/xujie/sys/modules/reader/entity/EquipmentFolderLocation.java
  7. 19
      src/main/java/com/xujie/sys/modules/reader/listener/ExceListener.java
  8. 7
      src/main/java/com/xujie/sys/modules/reader/service/EquipmentFolderLocationService.java
  9. 9
      src/main/java/com/xujie/sys/modules/reader/service/GetInformationForExcelService.java
  10. 11
      src/main/java/com/xujie/sys/modules/reader/service/impl/EquipmentFolderLocationServiceImpl.java
  11. 112
      src/main/java/com/xujie/sys/modules/reader/service/impl/GetInformationForExcelServiceImpl.java
  12. 1
      src/main/resources/application-dev.yml
  13. 29
      src/main/resources/mapper/reader/GetInformationForExcelMapper.xml

10
src/main/java/com/xujie/sys/common/utils/TaskUtils.java

@ -2,6 +2,7 @@ package com.xujie.sys.common.utils;
import com.xujie.sys.modules.pms.service.EamService;
import com.xujie.sys.modules.reader.service.GetInformationForExcelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@ -16,9 +17,18 @@ public class TaskUtils {
@Autowired
private EamService eamService;
@Autowired
private GetInformationForExcelService getInformationForExcelService;
// 添加定时任务
@Scheduled(cron = "${task.data.eamWorkPlanTime}") // 每天0点执行
public void doTask() {
eamService.eamWorkPlanTask();
}
//添加定時任務
@Scheduled(cron = "${task.data.getExcelInformation}" ) //每五秒执行
public void getExcel(){
getInformationForExcelService.saveByExcel();
}
}

24
src/main/java/com/xujie/sys/modules/reader/controller/GetInformationForExcelController.java

@ -0,0 +1,24 @@
package com.xujie.sys.modules.reader.controller;
import com.xujie.sys.common.utils.R;
import com.xujie.sys.modules.reader.service.GetInformationForExcelService;
import lombok.extern.slf4j.Slf4j;
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;
@RequestMapping("getInformation")
@RestController
@Slf4j
public class GetInformationForExcelController {
@Autowired
private GetInformationForExcelService getInformationForExcelService;
@PostMapping("acquireExcel")
public R acquireExcel() {
getInformationForExcelService.saveByExcel();
return R.ok();
}
}

9
src/main/java/com/xujie/sys/modules/reader/dao/EquipmentFolderLocationMapper.java

@ -0,0 +1,9 @@
package com.xujie.sys.modules.reader.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xujie.sys.modules.reader.entity.EquipmentFolderLocation;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface EquipmentFolderLocationMapper extends BaseMapper<EquipmentFolderLocation> {
}

13
src/main/java/com/xujie/sys/modules/reader/dao/GetInformationForExcelMapper.java

@ -0,0 +1,13 @@
package com.xujie.sys.modules.reader.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xujie.sys.modules.reader.entity.EquipmentDataDetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface GetInformationForExcelMapper extends BaseMapper<EquipmentDataDetail> {
void saveByExcels(@Param("list") List<EquipmentDataDetail> equipmentDataDetails);
}

35
src/main/java/com/xujie/sys/modules/reader/entity/EquipmentDataDetail.java

@ -0,0 +1,35 @@
package com.xujie.sys.modules.reader.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
@TableName("Equipment_data_detail")
public class EquipmentDataDetail {
private String site;
private String buNo;
//设备编号
private String equipmentNo;
//项目号
private String itemNo;
private String value0;
private String value1;
private String value2;
private String value3;
private String value4;
private String value5;
private String value6;
private String value7;
private String value8;
private String value9;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private String createDate;
private Date createBy;
}

19
src/main/java/com/xujie/sys/modules/reader/entity/EquipmentFolderLocation.java

@ -0,0 +1,19 @@
package com.xujie.sys.modules.reader.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("Equipment_folder_location")
public class EquipmentFolderLocation {
//主键id
private Integer id;
//文件夹路径
private String folderPath;
//设备号
private String equipmentNo;
private String site;
private String buNo;
private String itemNo;
}

19
src/main/java/com/xujie/sys/modules/reader/listener/ExceListener.java

@ -0,0 +1,19 @@
package com.xujie.sys.modules.reader.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
public class ExceListener extends AnalysisEventListener<Object> {
private boolean skipFlag = false; // 是否跳过该行
private boolean endFlag = false; // 是否结束读取
@Override
public void invoke(Object data, AnalysisContext analysisContext) {
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}

7
src/main/java/com/xujie/sys/modules/reader/service/EquipmentFolderLocationService.java

@ -0,0 +1,7 @@
package com.xujie.sys.modules.reader.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xujie.sys.modules.reader.entity.EquipmentFolderLocation;
public interface EquipmentFolderLocationService extends IService<EquipmentFolderLocation> {
}

9
src/main/java/com/xujie/sys/modules/reader/service/GetInformationForExcelService.java

@ -0,0 +1,9 @@
package com.xujie.sys.modules.reader.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xujie.sys.modules.reader.entity.EquipmentDataDetail;
public interface GetInformationForExcelService extends IService<EquipmentDataDetail> {
//将excel数据新增
void saveByExcel();
}

11
src/main/java/com/xujie/sys/modules/reader/service/impl/EquipmentFolderLocationServiceImpl.java

@ -0,0 +1,11 @@
package com.xujie.sys.modules.reader.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xujie.sys.modules.reader.dao.EquipmentFolderLocationMapper;
import com.xujie.sys.modules.reader.entity.EquipmentFolderLocation;
import com.xujie.sys.modules.reader.service.EquipmentFolderLocationService;
import org.springframework.stereotype.Service;
@Service
public class EquipmentFolderLocationServiceImpl extends ServiceImpl<EquipmentFolderLocationMapper, EquipmentFolderLocation> implements EquipmentFolderLocationService {
}

112
src/main/java/com/xujie/sys/modules/reader/service/impl/GetInformationForExcelServiceImpl.java

@ -0,0 +1,112 @@
package com.xujie.sys.modules.reader.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xujie.sys.modules.reader.dao.GetInformationForExcelMapper;
import com.xujie.sys.modules.reader.entity.EquipmentDataDetail;
import com.xujie.sys.modules.reader.entity.EquipmentFolderLocation;
import com.xujie.sys.modules.reader.service.EquipmentFolderLocationService;
import com.xujie.sys.modules.reader.service.GetInformationForExcelService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@Service
@Slf4j
public class GetInformationForExcelServiceImpl extends ServiceImpl<GetInformationForExcelMapper, EquipmentDataDetail> implements GetInformationForExcelService {
@Autowired
private EquipmentFolderLocationService equipmentFolderLocationService;
@Autowired
private GetInformationForExcelMapper getInformationForExcelMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveByExcel() {
//获取每一个文件夹路径
List<EquipmentFolderLocation> locationList = equipmentFolderLocationService.list();
//创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(locationList.size());//线程池的最大数量为文件夹的个数
for (EquipmentFolderLocation excel : locationList) {
String folderFiler = excel.getFolderPath();
executorService.submit(()->{
saveInformation(folderFiler,excel);
});
}
//关闭线程
executorService.shutdown();
try {
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); // 等待所有任务完成
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
log.info("线程池中断异常");
//中断异常先不做处理
}
}
private void saveInformation(String folderFiler,EquipmentFolderLocation excel) {
List<EquipmentDataDetail> equipmentDataDetails =new ArrayList<>();
//获取文件夹下所有文件
List<File> files=getExcelFiles(folderFiler);
//创建一个list用来存储所有的的excel文件路径
List<String> fileName = new ArrayList<>();
for (File file : files) {
fileName.add(folderFiler+"\\"+file.getName());
}
//获取每个excel下的所有关于Test的两个值并保存
for (String s : fileName) {
File excelFile = new File(s);
List<Map<Integer,String>> list=new ArrayList<>();
try{
list = EasyExcel.read(excelFile)
.excelType(ExcelTypeEnum.XLSX)
.headRowNumber(0)
.sheet()
.doReadSync();
}catch (Exception e){
log.info("读取文件失败,文件为:"+s+"失败日志:"+e.getMessage());
}
//获取TEST后面的两个值
for (int i=0;i<list.size();i++) {
if (list.get(i).get(0).equals("TEST")){
EquipmentDataDetail equipmentDataDetail = new EquipmentDataDetail();
equipmentDataDetail.setEquipmentNo(excel.getEquipmentNo());
equipmentDataDetail.setBuNo(excel.getBuNo());
equipmentDataDetail.setSite(excel.getSite());
equipmentDataDetail.setItemNo(excel.getItemNo());
equipmentDataDetail.setValue0(list.get(i).get(1));
equipmentDataDetail.setValue1(list.get(i).get(3));
equipmentDataDetails.add(equipmentDataDetail);
}
}
}
//批量新增
getInformationForExcelMapper.saveByExcels(equipmentDataDetails);
}
private static List<File> getExcelFiles(String folderFiler) {
//创建本地文件夹路径
File file = new File(folderFiler);
//获取本地文件夹下所有excel表格
File[] files = file.listFiles();
List<File> excelFiles=new ArrayList<>();
if (file !=null){
for (File file1 : files) {
if (file1.isFile()){
excelFiles.add(file1);
}
}
}
return excelFiles;
}
}

1
src/main/resources/application-dev.yml

@ -46,6 +46,7 @@ task:
data:
site: 2,3 #事业部
eamWorkPlanTime: 0 0 0 * * ? #点检、维保计划自动生成,每天0点执行
getExcelInformation: 0/10 * * * * ? #每五秒读取一次文件
#--------------------------------------------接口地址和开关控制-------------------------------------------------

29
src/main/resources/mapper/reader/GetInformationForExcelMapper.xml

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xujie.sys.modules.reader.dao.GetInformationForExcelMapper">
<resultMap id="BaseResultMap" type="com.xujie.sys.modules.reader.entity.EquipmentDataDetail">
<result column="site" jdbcType="VARCHAR" property="site" />
<result column="bu_no" jdbcType="VARCHAR" property="buNo" />
<result column="equipment_no" jdbcType="VARCHAR" property="equipmentNo" />
<result column="item_no" jdbcType="VARCHAR" property="itemNo" />
<result column="value0" jdbcType="VARCHAR" property="value0" />
<result column="value1" jdbcType="VARCHAR" property="value1" />
<result column="value2" jdbcType="VARCHAR" property="value2" />
<result column="value3" jdbcType="VARCHAR" property="value3" />
<result column="value4" jdbcType="VARCHAR" property="value4" />
<result column="value5" jdbcType="VARCHAR" property="value5" />
<result column="value6" jdbcType="VARCHAR" property="value6" />
<result column="value7" jdbcType="VARCHAR" property="value7" />
<result column="value8" jdbcType="VARCHAR" property="value8" />
<result column="value9" jdbcType="VARCHAR" property="value9" />
<result column="create_date" jdbcType="VARCHAR" property="createDate" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
</resultMap>
<insert id="saveByExcels" parameterType="com.xujie.sys.modules.reader.entity.EquipmentDataDetail">
insert into Equipment_data_detail(site,bu_no,equipment_no,item_no,value0,value1,value2,value3,value4,value5,value6,value7,value8,value9,create_date,create_by)
values
<foreach collection="list" item="item" index="inder" separator=",">
(#{item.site},#{item.buNo},#{item.equipmentNo},#{item.itemNo},#{item.value0},#{item.value1},#{item.value2},#{item.value3},#{item.value4},#{item.value5},#{item.value6},#{item.value7},#{item.value8},#{item.value9},#{item.createDate},#{item.createBy})
</foreach>
</insert>
</mapper>
Loading…
Cancel
Save