使用hutool工具導出excel,使用jodd工具壓縮流,使用oss上傳流


最近寫了一個業務,用到一些比較實用的工具記錄下。

List<RobotCard> robotCardList = null;
		if (BizRouteEnum.ROUTE_1.getRouteCode().equals(param.getExportModel())){ //1按條件導出,否則按給定數據導出
			RobotCard robotCardParam = BeanUtil.toBean(map, RobotCard.class);
			robotCardList = this.searchList(robotCardParam);
		} else {
			List<Long> ids = param.getIds();
			RobotAssert.notNull(ids, "請選擇需要導出的數據。");
			robotCardList = this.selectBatchIds(ids);
		}
		
		RobotAssert.notNull(robotCardList, "無有效數據。");
		
		ArrayList<Map<String, Object>> rows = new ArrayList<>();
		robotCardList.forEach(rc -> {
       		Map<String, Object> col = new LinkedHashMap<>();
       		col.put("編號", rc.getId().toString());
       		col.put("金額", rc.getCardAmount());
       		col.put("密碼", rc.getPayPasswd());
       		rows.add(col);
       	});
		
		ExcelWriter excelWriter = ExcelUtil.getWriter();
       	excelWriter.setColumnWidth(0, 30);
       	excelWriter.write(rows);
       	
     	ByteArrayOutputStream baos = new ByteArrayOutputStream();
     	excelWriter.flush(baos);
     	excelWriter.close();
     	
     	ByteArrayOutputStream bos = new ByteArrayOutputStream();
		ZipOutputStream zos = new ZipOutputStream(bos, Charset.defaultCharset());
		
		//添加xls
		try {
			jodd.io.ZipUtil.addToZip(zos, baos.toByteArray(), "制卡數據.xls", "制卡數據");
		} catch (Exception e1) {
			LOGGER.error("文件壓縮失敗。", e1);
		}
		
		robotCardList.forEach(card -> {
			//生產二維碼
			QrConfig config = new QrConfig(300, 300);
			config.setCharset(Charset.forName("utf-8"));
			String cardId = card.getId().toString();
			
			byte[] data = QrCodeUtil.generatePng(cardId, config);
			
   			//壓縮
   			try {
				jodd.io.ZipUtil.addToZip(zos, data, cardId.concat(CommonConstant.PNG), cardId);
			} catch (Exception e) {
				LOGGER.error("文件壓縮失敗。", e);
			}
		});
		
   		try {
			zos.finish();
			zos.close();
		} catch (Exception e) {
			LOGGER.error("壓縮流關閉失敗。", e);
		}
   		
   		//上傳
   		ByteArrayInputStream in = new ByteArrayInputStream(bos.toByteArray());
   		String url = oSSClientUtil.putObjectForInputStream(
   				OssConstant.PAYMENT_TEMP.concat(DateUtil.format(DateUtil.date(), 
   						DatePattern.PURE_DATETIME_PATTERN)).concat(CommonConstant.PNG), in);

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM