Excel文件上傳大批量數據導入

首先是準備工作,pom.xm導入解析excel工具類

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

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml-schemas</artifactId>
   <version>3.11</version>
</dependency>

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>3.11</version>
</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<DeviceExtend> list=new ArrayList();
    ResponseVO vo=new ResponseVO();
    try {
        //轉化request
        MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
        //定義一個Workbook
        Workbook workbook=null;
        //獲得上傳的所有文件名
        Iterator<String> 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<DeviceExtend> getDeviceExtendPage(DeviceExtend deviceExtend,Integer currentPage,Integer pageSize,String from,String to);

    /**
     * 批量自定義設備信息保存
     * @param list
     */
    public void svaeBatch(List<DeviceExtend> 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<DeviceExtend> 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<DeviceExtend> deviceExtends = mongoTemplate.find(query, DeviceExtend.class);
        //查詢總記錄數
        long count = mongoTemplate.count(query, DeviceExtend.class);
        //創建分頁實體對象
        Page<DeviceExtend> 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<DeviceExtend> 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);
    }


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章