工具类
Posted yijiushengjing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工具类相关的知识,希望对你有一定的参考价值。
package com.dita.lotus.service.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.dita.lotus.web.rest.vm.ordertakeout.ReqStockBySkuVM; /** * excel 处理工具类 */ public class ExcelUtil { private static DecimalFormat df = new DecimalFormat("#.###"); public static void main(String[] args) throws Exception { //String fileName String filePath = "D:/t/b.xlsx"; testExport(filePath); //testImport(filePath); } private static void testExport(String filePath) throws Exception{ //String sheetName = "第一个表"; String[] titles = {"skuNo","库存"}; String[] fieldNames = {"skuNo","stockCount"}; ReqStockBySkuVM stockInfo1 = new ReqStockBySkuVM("1234",BigDecimal.ZERO); ReqStockBySkuVM stockInfo2 = new ReqStockBySkuVM("abcd",BigDecimal.ONE); ReqStockBySkuVM stockInfo3 = new ReqStockBySkuVM("小明",BigDecimal.ONE); List<ReqStockBySkuVM> stockList = new ArrayList<>(); stockList.add(stockInfo1); stockList.add(stockInfo2); stockList.add(stockInfo3); //Workbook wb = exportToWorkBook(sheetName,stockList, titles, fieldNames); //exportToFile(filePath, sheetName, stockList, titles, fieldNames); exportToFile(filePath, stockList, titles, fieldNames); //Workbook wb = exportToWorkBook(sheetName,stockList, titles, fieldNames); //OutputStream os = response.getOutputStream(); //wb.write(os); } /** * excel导入 * @param header 表头,如 ["id", "name", ... ] * @param filePath 文件物理地址 * @return */ public static List<Map<String, Object>> importExcel(String filePath, String[] header) throws Exception { return importExcel(filePath,header,0); } public static List<Map<String, Object>> importExcel(String filePath, String[] header,int sheetNumber) throws Exception { return importExcel(filePath,new FileInputStream(filePath),header); } /** * excel导入 * @param header 表头,如 ["id", "name", ... ] * @param filePath 文件物理地址 * @return */ public static List<Map<String, Object>> importExcel(File file, String[] header) throws Exception { return importExcel(file,header,0); } public static List<Map<String, Object>> importExcel(File file, String[] header,int sheetNumber) throws Exception { return importExcel(file.getName(),new FileInputStream(file),header,sheetNumber,0); } public static List<Map<String, Object>> importExcel(String fileName,InputStream fis, String[] header) throws Exception { return importExcel(fileName,fis,header,0); } public static List<Map<String, Object>> importExcel(String fileName,InputStream fis, String[] header,int dataNumber) throws Exception { return importExcel(fileName,fis,header,0,dataNumber); } public static List<Map<String, Object>> importExcel(String fileName,InputStream fis, String[] header,int sheetNumber,int dataNumber) throws Exception { List<Map<String, Object>> list = new ArrayList<>(); Map<String, Object> map = new HashMap<String, Object>(); if(null == header) { throw new Exception("keys can not be null!"); } if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { throw new Exception("The file is not excel document!"); } // 读取文件 //FileInputStream fis = null; Workbook wookbook = null; try { //fis = new FileInputStream(file); if(fileName.endsWith(".xls")) { wookbook = new HSSFWorkbook(fis); } else if(fileName.endsWith(".xlsx")) { wookbook = new XSSFWorkbook(fis); } // 获取第一个工作表信息 Sheet sheet = wookbook.getSheetAt(sheetNumber); //获得数据的总行数 int totalRowNum = sheet.getLastRowNum(); Row row = null; Cell cell = null; Object value = null; int dataStartRow = 1; if(dataNumber>0){ dataStartRow = dataNumber-1; } // 遍历所有行 for (int i = dataStartRow; i <= totalRowNum; i++) { // 清空数据,避免遍历时读取上一次遍历数据 row = null; cell = null; value = null; map = new HashMap<String, Object>(); row = sheet.getRow(i); if(null == row) continue; // 若该行第一列为空,则默认认为该行就是空行 // 遍历该行所有列 for (short j = 0; j < header.length; j++) { cell = row.getCell(j); if(null == cell) continue; // 为空时,下一列 value = getCellValue(cell); map.put(header[j], value); } list.add(map); } } catch (Exception e) { throw new Exception("analysis excel exception!", e); } finally { if(null != fis) { fis.close(); } } return list; } /** * 获取单元格值 * @param row 获取的行 * @param column 获取单元格列号 * @return 单元格值 */ private static Object getCellValue(Cell cell){ Object val = ""; try{ // 根据poi返回的类型,做相应的get处理 if(Cell.CELL_TYPE_STRING == cell.getCellType()) { val = cell.getStringCellValue(); } else if(Cell.CELL_TYPE_NUMERIC == cell.getCellType()) { //val = cell.getNumericCellValue(); val = df.format(cell.getNumericCellValue()); if(DateUtil.isCellDateFormatted(cell)){ // 由于日期类型格式也被认为是数值型,此处判断是否是日期的格式,若时,则读取为日期类型 /*if(cell.getCellStyle().getDataFormat() > 0) { val = cell.getDateCellValue(); }*/ val = cell.getDateCellValue(); } } else if(Cell.CELL_TYPE_BOOLEAN == cell.getCellType()) { val = cell.getBooleanCellValue(); } else if(Cell.CELL_TYPE_BLANK == cell.getCellType()) { val = cell.getDateCellValue(); } }catch (Exception e) { return val; } return val; } /** * excel导出 * @param fileNamePath 导出的文件名称连路径 * @param sheetName 导出的sheet名称 * @param list 数据集合 * @param titles 第一行表头 * @param fieldNames 字段名称数组 * @return */ public static <T> File exportToFile(String fileNamePath, String sheetName, List<T> list, String[] titles, String[] fieldNames) throws Exception { Workbook wb = exportToWorkBook(fileNamePath,sheetName,list,titles,fieldNames); File file = null; OutputStream os = null; file = new File(fileNamePath); try { os = new FileOutputStream(file); wb.write(os); } catch (Exception e) { throw new Exception("write excel file error!", e); } finally { if(null != os) { os.flush(); os.close(); } } return file; } public static <T> File exportToFile(String fileNamePath, List<T> list, String[] titles, String[] fieldNames) throws Exception { return exportToFile(fileNamePath,"sheet1",list,titles,fieldNames); } /** * excel导出 * @param sheetName 导出的sheet名称 * @param list 数据集合 * @param titles 第一行表头 * @param fieldNames 字段名称数组 * @return */ public static <T> Workbook exportToWorkBook(String fileName, List<T> list, String[] titles, String[] fieldNames) throws Exception { return exportToWorkBook(fileName,"sheet1",list,titles,fieldNames); } public static <T> Workbook exportToTemplateWorkBook(String fileName, List<T> list, String[] titles, String[] fieldNames,String templateFilePath,InputStream templateFileInputStream,int startRow,int startColum) throws Exception { Workbook wb = null; //InputStream is = new FileInputStream(templateFilePath); if(templateFilePath.endsWith(".xls")) { wb = new HSSFWorkbook(templateFileInputStream); } else if(templateFilePath.endsWith(".xlsx")) { wb = new XSSFWorkbook(templateFileInputStream); } Sheet sheet = wb.getSheetAt(0); // 设置表头的说明 int dataRow = startRow-1; if(titles!=null){ Row topRow = sheet.getRow(startRow-1); CellStyle headerStyle = getHeaderStyle(wb); for(int i = 0; i < titles.length; i++){ Cell topCell = topRow.createCell(i); topCell.setCellStyle(headerStyle); setCellGBKValue(topCell, titles[i]); } ++dataRow; } //Row row = sheet.getRow(startRow-1); String methodName = ""; Method method = null; T t = null; Object ret = null; // 遍历生成数据行,通过反射获取字段的get方法 for (int i = 0; i < list.size(); i++) { t = list.get(i); Row row = sheet.createRow(i+dataRow); Class<? extends Object> clazz = t.getClass(); for(int j = 0; j < fieldNames.length; j++){ methodName = "get" + capitalize(fieldNames[j]); try { method = clazz.getDeclaredMethod(methodName); } catch (java.lang.NoSuchMethodException e) { // 不存在该方法,查看父类是否存在。此处只支持一级父类,若想支持更多,建议使用while循环 if(null != clazz.getSuperclass()) { method = clazz.getSuperclass().getDeclaredMethod(methodName); } } if(null == method) { throw new Exception(clazz.getName() + " don‘t have menthod --> " + methodName); } ret = method.invoke(t); setCellGBKValue(row.createCell(j), ret + ""); } } return wb; } public static <T> Workbook exportToWorkBook(String fileName,String sheetName, List<T> list, String[] titles, String[] fieldNames) throws Exception { Workbook wb = null; if(fileName.endsWith(".xls")) { wb = new HSSFWorkbook(); } else if(fileName.endsWith(".xlsx")) { wb = new XSSFWorkbook(); } Sheet sheet = null; // 对每个表生成一个新的sheet,并以表名命名 if(sheetName == null){ sheetName = "sheet1"; } sheet = wb.createSheet(sheetName); // 设置表头的说明 Row topRow = sheet.createRow(0); CellStyle headerStyle = getHeaderStyle(wb); for(int i = 0; i < titles.length; i++){ Cell topCell = topRow.createCell(i); topCell.setCellStyle(headerStyle); setCellGBKValue(topCell, titles[i]); } String methodName = ""; Method method = null; T t = null; Object ret = null; // 遍历生成数据行,通过反射获取字段的get方法 for (int i = 0; i < list.size(); i++) { t = list.get(i); Row row = sheet.createRow(i+1); Class<? extends Object> clazz = t.getClass(); for(int j = 0; j < fieldNames.length; j++){ methodName = "get" + capitalize(fieldNames[j]); try { method = clazz.getDeclaredMethod(methodName); } catch (java.lang.NoSuchMethodException e) { // 不存在该方法,查看父类是否存在。此处只支持一级父类,若想支持更多,建议使用while循环 if(null != clazz.getSuperclass()) { method = clazz.getSuperclass().getDeclaredMethod(methodName); } } if(null == method) { throw new Exception(clazz.getName() + " don‘t have menthod --> " + methodName); } ret = method.invoke(t); setCellGBKValue(row.createCell(j), ret + ""); } } return wb; } private static void setCellGBKValue(Cell cell, String value) { cell.setCellType(HSSFCell.CELL_TYPE_STRING); //cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(value); } private static String capitalize(final String str) { int strLen; if (str == null || (strLen = str.length()) == 0) { return str; } final char firstChar = str.charAt(0); final char newChar = Character.toTitleCase(firstChar); if (firstChar == newChar) { // already capitalized return str; } char[] newChars = new char[strLen]; newChars[0] = newChar; str.getChars(1,strLen, newChars, 1); return String.valueOf(newChars); } private static CellStyle getHeaderStyle(Workbook wb){ CellStyle style = wb.createCellStyle(); style.setAlignment(CellStyle.ALIGN_CENTER); style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); Font headerFont = wb.createFont(); headerFont.setFontHeightInPoints((short) 11); headerFont.setColor(IndexedColors.WHITE.getIndex()); style.setFont(headerFont); return style; } }
package com.dita.lotus.service.util; import java.nio.charset.Charset; import java.util.Base64; import java.util.HashMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import com.alibaba.fastjson.JSONObject; @Service @Configuration public class LinkToLotusGo { @Autowired private RestTemplate restTemplate; private static String clientId; private static String clientSecret; private HttpHeaders headers; public HttpHeaders getHeaders() { return headers; } private static String getClientId(){ return clientId; } private static String getClientSecret(){ return clientSecret; } @Value("${takeout.crm.clientId}") public void setClientId(String clientId) { LinkToLotusGo.clientId = clientId; } @Value("${takeout.crm.clientSecret}") public void setClientSecret(String clientSecret) { LinkToLotusGo.clientSecret = clientSecret; } //将凭证加密 private static String getAuth(){ String auth = LinkToLotusGo.getClientId() + ":" + LinkToLotusGo.getClientSecret(); return "Basic " + Base64.getEncoder().encodeToString(auth.getBytes(Charset.forName("US-ASCII"))); } //将加密后的凭证存到请求头 public static HttpHeaders getHeader(){ HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", getAuth()); return headers; } //获取通行证,通行证有效时间2小时 public JSONObject login(){ String url = "https://platform.cplotus-gz.com/auth/oauth/token"; MultiValueMap<String, String> param = new LinkedMultiValueMap<>(); param.add("grant_type","client_credentials"); HttpEntity<MultiValueMap<String,String>> requestEntity = new HttpEntity<MultiValueMap<String,String>>(param,getHeader()); JSONObject jo = restTemplate.postForEntity(url,requestEntity, JSONObject.class).getBody(); //System.out.println(jo.toJSONString()); HttpHeaders heads = new HttpHeaders(); heads.add("Authorization", jo.get(("token_type"))+" "+jo.get("access_token")); this.headers = heads;//将获取到的凭证存到请求头 return jo; } public JSONObject getMember(HashMap<String, Object> params) { //System.out.println(clientId+" "+clientSecret); String url = "https://platform.cplotus-gz.com/third/crm/getMemberCard?"+"memberNo"+"="+params.get("memberNo"); RestTemplate rest = new RestTemplate(); HttpEntity<String> requestEntity = new HttpEntity<String>(null,this.headers); // 第三步:HttpEntity<String>放到exchange的参数里; ResponseEntity<JSONObject> response = null; try { response = rest.exchange(url, HttpMethod.GET, requestEntity, JSONObject.class); } catch (RestClientException e) { //抛这个异常表示通行证过期 e.printStackTrace(); login();//重新获取通行证 return getMember(params);//递归调用本函数 } // 第四步:getBody()取结果; return response.getBody(); } //根据手机号查询会员 public JSONObject getMemberByPhone(HashMap<String, Object> params) { String url = "https://platform.cplotus-gz.com//third/crm/searchMemberCardForClientCode?" +"mobile"+"="+params.get("mobile") +"&clientCode"+"= 803" +"&cardPrefixList"+params.get("cardPrefixList"); RestTemplate rest = new RestTemplate(); HttpEntity<String> requestEntity = new HttpEntity<String>(null,this.headers); // 第三步:HttpEntity<String>放到exchange的参数里; ResponseEntity<JSONObject> response = null; try { response = rest.exchange(url, HttpMethod.GET, requestEntity, JSONObject.class); } catch (RestClientException e) { //抛这个异常表示通行证过期 e.printStackTrace(); login();//重新获取通行证 return getMemberByPhone(params);//递归调用本函数获取结果 } // 第四步:getBody()取结果; return response.getBody(); } }
package com.dita.lotus.service.util; import org.apache.commons.lang3.RandomStringUtils; import java.util.UUID; /** * Utility class for generating random Strings. */ public final class RandomUtil { private static final int DEF_COUNT = 20; private RandomUtil() { } /** * Generate a password. * * @return the generated password */ public static String generatePassword() { return RandomStringUtils.randomAlphanumeric(DEF_COUNT); } /** * Generate an activation key. * * @return the generated activation key */ public static String generateActivationKey() { return RandomStringUtils.randomNumeric(DEF_COUNT); } /** * Generate a reset key. * * @return the generated reset key */ public static String generateResetKey() { return RandomStringUtils.randomNumeric(DEF_COUNT); } /** * 产生UUID */ public static final String generateGUID() { UUID uuid=UUID.randomUUID(); return uuid.toString().replace("-",""); } }
@GetMapping("/down/report/stockout") @Timed @TargetDataSource("slave") public Object StockOutexport(StockOutReportVM model,HttpServletResponse response) throws Exception{ String fileName = new String(("商品缺货报表-").getBytes(),"ISO8859_1")+ new SimpleDateFormat("yyyyMMdd").format(new Date())+".xlsx"; String sheetName = "商品缺货报表"; String[] titles = {"Division","Division_DES","组别","组别DES","部门","部门DES","CLASS","class_DES","SUB_CLASS","SUB_CLASS_DES","供应商编码","供应商名称","商品编码","商品style","商品名称","最后退货单号","最后退货数量","最后退货时间","商品类别", "商品包装","商品成本","库存","店转数量","退货数量","订单数量","本周销售数量","上周销售数量","上2周销售数量","上3周销售数量","上4周销售数量","本周与上周销量占比","库存流动数量:正数","库存流动数量:负数"}; String[] fieldNames = {"Divisionid","Division_DES","GROUP_ID","GROUP_DES","dept_id","dept_des","class_id","CLASS_DES","SUB_CLASS","SUB_CLASS_DES","VENDOR_ID","VENDOR_NAME","SITE_ID","LOTUS_OUT_OF_STOCK_REP_NEW","STYLES","last_rtn_po","last_rtn_qty", "last_rtn_time","ITEM_TYPE","PACK_SIZE","UNIT_COS","ON_HAND","TRANS_IN_QTY","QTY_RTV","QTY_ON_ORDER","QTY","LW_QTY","L2W_QTY","L3W_QTY","L4W_QTY","salerate","inqty","outqty"}; HashMap<String, Object> map = new HashMap<String, Object>(); ServletOutputStream os = null; List<StockOutReportVM> templateList=new ArrayList<StockOutReportVM>(); List<StockOutReportVM> skunolist = goodsStatusService.searchskuno(map); Workbook wb= null; try { for(int j=0;j<skunolist.size();j++){ String siteid = skunolist.get(j).getSITE_ID(); map.put("SITE_ID", siteid); map.put("skuno",model.getSITE_ID()); map.put("skuname",model.getSTYLES()); map.put("vendorno",model.getVENDOR_ID()); map.put("minqty",model.getMin_sale_qty()); map.put("maxqty",model.getMax_sale_qty()); map.put("storeno",model.getStoreNo()); map.put("unitId",model.getUnitId()); map.put("unitTypeId",ObjectTypeInfo.CODE_UNIT_TYPE_STORE); Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //本周销售数量 String timeInterval = getTimeInterval(d, sdf); String[] split = timeInterval.split(","); String startDate = split[0]; String endDate = split[1]; map.put("startDate", startDate); map.put("endDate", endDate); //上周销售数量 String lastTimeInterval = getLastTimeInterval(sdf); String[] split1 = lastTimeInterval.split(","); String lastStartDate = split1[0]; String lastEndDate = split1[1]; map.put("lastStartDate", lastStartDate); map.put("lastEndDate", lastEndDate); //上2销售数量 String lastTwoTimeInterval = getLastTwoTimeInterval(sdf); String[] split2 = lastTwoTimeInterval.split(","); String lastTwoStartDate = split2[0]; String lastTwoEndDate = split2[1]; map.put("lastTwoStartDate", lastTwoStartDate); map.put("lastTwoEndDate", lastTwoEndDate); //上3周销售数量 String lastThreeTimeInterval = getLastThreeTimeInterval(sdf); String[] split3 = lastThreeTimeInterval.split(","); String lastThreeStartDate = split3[0]; String lastThreeEndDate = split3[1]; map.put("lastThreeStartDate", lastThreeStartDate); map.put("lastThreeEndDate", lastThreeEndDate); //上4销售数量 String lastFourTimeInterval = getLastFourTimeInterval(sdf); String[] split4 = lastFourTimeInterval.split(","); String lastFourStartDate = split4[0]; String lastFourEndDate = split4[1]; map.put("lastFourStartDate", lastFourStartDate); map.put("lastFourEndDate", lastFourEndDate); List<StockOutReportVM> tmpList = goodsStatusService.searchStockOutList(map); templateList.addAll(tmpList); } wb= ExcelUtil.exportToWorkBook(fileName, sheetName, templateList, titles, fieldNames); response.setHeader("Content-disposition", "attachment; filename=" + fileName); os = response.getOutputStream(); wb.write(os); } catch (IOException e) { e.printStackTrace(); } finally { try { if (os != null) { os.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return null; }
以上是关于工具类的主要内容,如果未能解决你的问题,请参考以下文章