首先是准备工作,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 { //创建一个集合 ArrayListlist=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 PagegetDeviceExtendPage(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 PagegetDeviceExtendPage(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 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); } }