首先是準備工作,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())){ //添加設備SN和MAC地址條件 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); } }