Excel文件上传大批量数据导入

首先是准备工作,pom.xm导入解析excel工具类

<dependency>
   <groupId>org.apache.poigroupId>
   <artifactId>poi-ooxmlartifactId>
   <version>3.11version>
dependency>

<dependency>
   <groupId>org.apache.poigroupId>
   <artifactId>poi-ooxml-schemasartifactId>
   <version>3.11version>
dependency>

<dependency>
   <groupId>org.apache.poigroupId>
   <artifactId>poiartifactId>
   <version>3.11version>
dependency>

第一步,上传数据实体类

@Document(collection = "DeviceExtend")
public class DeviceExtend {

    /**
     * 设备ID
     */
    @Id
    private String id;

    /**
     * 设备名称
     */
    @Field("name")
    @JsonProperty("name")
    private String name;

    /**
     * 设备SN     */
    @Field("SN")
    @JsonProperty("SN")
    private String SN;

    /**
     * 设备的MAC地址
     */
    @Field("MAC")
    @JsonProperty("MAC")
    private String MAC;

    /**
     * 设备类型
     */
    @Field("deviceType")
    @JsonProperty("deviceType")
    private String deviceType;

    /**
     * 制造商
     */
    @Field("manufacturer")
    @JsonProperty("manufacturer")
    private String manufacturer;


    /**
     * 入库时间
     */

    @Field("storageTime")
    @JsonProperty("storageTime")
    private Date storageTime;

    /**
     * 设备状态 1为入库, 2为出库, 3入网
     */
    @Field("deviceState")
    @JsonProperty("deviceState")
    private Integer deviceState;

    /**
     * 设备参数
     */
    @Field("deviceParameter")
    @JsonProperty("deviceParameter")
    private String deviceParameter;

    /**
     * 设备维保信息
     */
    @Field("maintain")
    @JsonProperty("maintain")
    private String maintain;

    public String getDeviceParameter() {
        return deviceParameter;
    }

    public void setDeviceParameter(String deviceParameter) {
        this.deviceParameter = deviceParameter;
    }

    public String getMaintain() {
        return maintain;
    }

    public void setMaintain(String maintain) {
        this.maintain = maintain;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSN() {
        return SN;
    }

    public void setSN(String SN) {
        this.SN = SN;
    }

    public String getMAC() {
        return MAC;
    }

    public void setMAC(String MAC) {
        this.MAC = MAC;
    }

    public String getDeviceType() {
        return deviceType;
    }

    public void setDeviceType(String deviceType) {
        this.deviceType = deviceType;
    }

    public String getManufacturer() {
        return manufacturer;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }


    public Integer getDeviceState() {
        return deviceState;
    }

    public void setDeviceState(Integer deviceState) {
        this.deviceState = deviceState;
    }

    public Date getStorageTime() {
        return storageTime;
    }

    public void setStorageTime(Date storageTime) {
        this.storageTime = storageTime;
    }

    @Override
    public String toString() {
        return "DeviceExtend{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", SN='" + SN + '\'' +
                ", MAC='" + MAC + '\'' +
                ", deviceType='" + deviceType + '\'' +
                ", manufacturer='" + manufacturer + '\'' +
                ", storageTime=" + storageTime +
                ", deviceState=" + deviceState +
                ", deviceParameter='" + deviceParameter + '\'' +
                ", maintain='" + maintain + '\'' +
                '}';
    }
}

第二步,前端控制器

/**
 * Excel文件内容批量导入
 *
 * @param request
 * @return
 * @throws FileNotFoundException
 * @throws IOException
 */
@PostMapping
@ResponseBody
public ResponseVO batchImport(HttpServletRequest request) throws  IOException {

    //创建一个集合
    ArrayList list=new ArrayList();
    ResponseVO vo=new ResponseVO();
    try {
        //转化request
        MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
        //定义一个Workbook
        Workbook workbook=null;
        //获得上传的所有文件名
        Iterator fileNameIter = multipartRequest.getFileNames();
        //进行循环遍历
        while (fileNameIter.hasNext()) {
            //根据文件名获取文件
            MultipartFile file = multipartRequest.getFile(fileNameIter.next());
            //若文件不为null
            if (file != null) {
                //获取上传时的文件名
                String fileFileName = file.getOriginalFilename();
                //判断接收到的文件格式
                if(fileFileName.endsWith(".xls")){
                    //97-07
                    workbook=new HSSFWorkbook(file.getInputStream());
                }else if(fileFileName.endsWith(".xlsx")){
                    //07以后
                    workbook=new XSSFWorkbook(file.getInputStream());
                }
                //获得sheet
                Sheet sheet = workbook.getSheetAt(0);

                //遍历sheet获得每一行
                for (Row row : sheet) {

                    //跳过第一行
                    if(row.getRowNum()==0){
                        continue;
                    }
                    //跳过空行 设备名称    设备SN码   设备的MAC地址  设备类型   制造商
                    if(row.getCell(0)==null|| StringUtils.isBlank(row.getCell(0).getStringCellValue())){
                        continue;
                    }
                    //创建自定义设备对象
                    DeviceExtend deviceExtend=new DeviceExtend();
                    //设备名
                    deviceExtend.setName(row.getCell(0).getStringCellValue());
                    //设备SN                    deviceExtend.setSN(row.getCell(1).getStringCellValue());
                    //设备MAC地址
                    deviceExtend.setMAC(row.getCell(2).getStringCellValue());
                    //设备类型
                    deviceExtend.setDeviceType(row.getCell(3).getStringCellValue());
                    //制造商
                    deviceExtend.setManufacturer(row.getCell(4).getStringCellValue());
                    //设备参数
                    deviceExtend.setDeviceParameter(row.getCell(5).getStringCellValue());
                    //维保信息
                    deviceExtend.setMaintain(row.getCell(6).getStringCellValue());
                    //入库时间
                    deviceExtend.setStorageTime(new Date());
                    //设备状态
                    deviceExtend.setDeviceState(1);
                    //将对象存入集合
                    list.add(deviceExtend);
                }
            }
        }
        if(list.size()>0){
            //调用业务类进行操作
            deviceExtendService.svaeBatch(list);
        }

    }catch (Exception e){
        vo.setSuccess(false);
        e.printStackTrace();
    }
    return vo;
}

第三步,数据业务接口

public interface DeviceExtendService {

    /**
     * 自定义设备保存
     * @param deviceExtend
     */
    public void save(DeviceExtend deviceExtend);

    /**
     * 自定义设备分页条件查询
     * @param deviceExtend
     * @param currentPage
     * @param pageSize
     * @return
     */
    public Page getDeviceExtendPage(DeviceExtend deviceExtend,Integer currentPage,Integer pageSize,String from,String to);

    /**
     * 批量自定义设备信息保存
     * @param list
     */
    public void svaeBatch(List list);

    /**
     * 根据ID查询设备信息
     * @param id
     */
    public DeviceExtend findById(String id);

    /**
     * 根据设备ID修改设备状态
     * @param id
     * @param state
     */
    public void updateState(String id,Integer state);
}
 
第四步,数据业务实现类
@Service
public class DeviceExtendServiceImpl implements DeviceExtendService {

    //获得持久化操作对象
    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 自定义设备保存
     * @param deviceExtend
     */
    @Override
    public void save(DeviceExtend deviceExtend) {
        mongoTemplate.save(deviceExtend);
    }

    /**
     * 自定义设备分页条件查询
     *
     * @param deviceExtend
     * @param currentPage
     * @param pageSize
     * @return
     */
    @Override
    public Page getDeviceExtendPage(DeviceExtend deviceExtend, Integer currentPage, Integer pageSize,String from,String to) {
        //创建查询对象
        Query query=new Query();
        //设置起始数
        query.skip((currentPage-1)*pageSize);
        //设置查询条数
        query.limit(pageSize);
            //创建条件对象
            Criteria criteria=new Criteria();
            if(StringUtils.isNotBlank(deviceExtend.getSN())){
                //添加设备SNMAC地址条件
                criteria.orOperator(Criteria.where("SN").regex(deviceExtend.getSN()),Criteria.where("MAC").regex(deviceExtend.getSN()));
            }
            if(StringUtils.isNotBlank(deviceExtend.getName())){
                //设备名的正则
                Pattern pattern = Pattern.compile("^.*" + deviceExtend.getName() + ".*$", Pattern.CASE_INSENSITIVE);
                //添加设备名模糊查询条件
                criteria.and("name").regex(pattern);
            }
            if(StringUtils.isNotBlank(from)&&StringUtils.isNotBlank(to)){
                //添加时间段设备条件
                SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
                try {
                    criteria.and("storageTime").gte(format.parse(from)).lt(format.parse(to));
                } catch (ParseException e) {
                    e.printStackTrace();
                }

            }
            if(StringUtils.isNotBlank(deviceExtend.getDeviceType())){
                //设置设备类型条件
                criteria.and("deviceType").is(deviceExtend.getDeviceType());
                System.out.println("==="+deviceExtend.getDeviceType());
            }
            if(StringUtils.isNotBlank(deviceExtend.getManufacturer())){
                //设置厂商条件
                criteria.and("manufacturer").is(deviceExtend.getManufacturer());
            }
            if (deviceExtend.getDeviceState()!=null){
                //设置设备状态
                criteria.and("deviceState").is(deviceExtend.getDeviceState());
            }
            query.addCriteria(criteria);

        //查询当前页数据集合
        List deviceExtends = mongoTemplate.find(query, DeviceExtend.class);
        //查询总记录数
        long count = mongoTemplate.count(query, DeviceExtend.class);
        //创建分页实体对象
        Page page=new Page<>();
        page.setRows(deviceExtends);
        page.setTotalCount(count);
        page.setTotalPage(count/pageSize==0?1:count/pageSize+1);
        return page;
    }


    /**
     * 自定义设备批量保存
     * @param list
     */
    @Override
    public void svaeBatch(List list) {
        if(list.size()>0){
            for (DeviceExtend deviceExtend : list) {
                mongoTemplate.save(deviceExtend);
            }
        }
    }

    /**
     * 根据ID查询设备信息
     *
     * @param id
     */
    @Override
    public DeviceExtend findById(String id) {
        return mongoTemplate.findById(id,DeviceExtend.class);
    }

    /**
     * 根据设备ID修改设备状态
     *
     * @param id
     * @param state
     */
    @Override
    public void updateState(String id, Integer state) {
        Query query=new Query();
        query.addCriteria(Criteria.where("id").is(id));
        Update update= Update.update("deviceState",state);
        mongoTemplate.updateFirst(query,update,DeviceExtend.class);
    }


}

你可能感兴趣的:(Excel文件上传大批量数据导入)