import com.entity.EtlMoniterLog;
import com.entity.ListUtills;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
@Service
public class PoiUtills {
public static String[] namelist = {"日志ID",
"数据源名称",
"任务编号",
"任务名称",
"处理数据的来源",
"处理数据的目标",
"开始时间",
"结束时间",
"成功(合规)件数",
"失败(不合规)件数",
"业务处理时间",
"执行时间(etl_date)"
};
private static Map<String, String> keyMap = new LinkedHashMap<>();
static {
keyMap.put("member", "AccountPF_member");
keyMap.put("product", "Product");
keyMap.put("store", "Store");
keyMap.put("channel", "Channel");
keyMap.put("dim", "Time");
keyMap.put("epay", "Epayment");
keyMap.put("newepay", "Epayment_newepay");
keyMap.put("pos", "POS");
keyMap.put("app", "Mobile_APP");
keyMap.put("tmall", "Tmall");
keyMap.put("wifi", "Free_Wifi");
keyMap.put("other", "Other");
}
public void createWorkBook(List<EtlMoniterLog> dateList,Class<?> clazz,String bookName) throws Exception{
XSSFWorkbook workbook = new XSSFWorkbook();
<!--安装属性字段分组-->
Map<String, List<EtlMoniterLog>> listMap = ListUtills.splitAndGroup(dateList);
Iterator<String> iter = keyMap.keySet().iterator();
while (iter.hasNext()){
String key = iter.next();
String shetName = keyMap.get(key);
List<EtlMoniterLog> bxlist = listMap.get(key);
System.out.println("key ---> "+key+",value --->"+ bxlist);
if (bxlist!= null && bxlist.size()>0){
Collections.sort(bxlist);
createSheetWithList(workbook,shetName,bxlist,EtlMoniterLog.class);
}
}
String fileName = initOutputDir() + File.separator +bookName+".xlsx";
OutputStream fileOut = new FileOutputStream(fileName);
workbook.write(fileOut);
workbook.close();
}
private void createSheetWithList(XSSFWorkbook workbook,String sheetName,List<EtlMoniterLog> list,Class<?> clazz) throws Exception{
XSSFSheet sheet = workbook.createSheet(sheetName);
XSSFRow row = sheet.createRow(0);//创建一个行
// 设置行高
row.setHeightInPoints(30);
CellStyle cellStyle = workbook.createCellStyle();
// // 水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//// // 垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
for (int i =0 ;i < namelist.length;i++){
sheet.autoSizeColumn(i,true);
XSSFCell cell = row.createCell(i);
cell.setCellValue(namelist[i]);
cell.setCellStyle(cellStyle);
}
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < list.size(); i++) {
EtlMoniterLog moniterLog = list.get(i);
XSSFRow row2 = sheet.createRow( i+ 1);
row2.setHeightInPoints(15);
for (int j=0;j < fields.length;j++){
XSSFCell cell = row2.createCell(j);
sheet.autoSizeColumn(i,true);
String name = fields[j].getName();
// 将属性的首字符大写,方便构造get,set方法
name = name.substring(0, 1).toUpperCase() + name.substring(1);
if (!name.equals("type")){
Method m = clazz.getMethod("get" + name);
// 调用getter方法获取属性值
String value = (String) m.invoke(moniterLog);
// System.out.println("属性值为:"+value);
if (value != null) {
cell.setCellValue(value);
} else {
cell.setCellValue("");
}
}
}
}
}
public String initOutputDir(){
String currentDir = System.getProperty("user.dir");
File outputdir = new File(currentDir +File.separator + "output");
System.out.println("outputdir --- >> "+outputdir);
if (!outputdir.exists()) {
outputdir.mkdirs();
}
return outputdir.getPath();
}
}
网友评论