package com.yutou.bilibili.Tools; import com.yutou.bilibili.mybatis.Bili.mybatis.dao.BilibiliLiveDataDao; import com.yutou.bilibili.mybatis.Bili.mybatis.dao.BilibiliLiveInfoDao; import com.yutou.bilibili.mybatis.Bili.mybatis.model.BilibiliLiveData; import com.yutou.bilibili.mybatis.Bili.mybatis.model.BilibiliLiveInfo; import com.yutou.utils.AppTools; import com.yutou.utils.Log; import jakarta.annotation.Resource; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import java.io.File; import java.io.FileOutputStream; import java.util.Date; import java.util.List; import static com.yutou.bilibili.BiliBili.Datas.LiveData.*; public class ExcelUtils implements ApplicationContextAware { @Resource BilibiliLiveDataDao dataDao; @Resource BilibiliLiveInfoDao infoDao; public static File getInstance(int roomId, Date startTime, Date endTime,String fileName) { ExcelUtils utils = new ExcelUtils(); long timer=System.currentTimeMillis(); Log.i("开始注入bean"); utils.dataDao = getBean(BilibiliLiveDataDao.class); utils.infoDao = getBean(BilibiliLiveInfoDao.class); Log.i("注入完毕:"+(System.currentTimeMillis()-timer)); return utils.initTable(roomId, startTime, endTime,fileName); } public ExcelUtils() { } private File initTable(int roomId, Date startTime, Date endTime,String fileName) { long timer=System.currentTimeMillis(); Log.i("进入统计:"+timer); Workbook workbook = new XSSFWorkbook(); Sheet liveData = workbook.createSheet("直播数据"); Sheet liveInfo = workbook.createSheet("小时统计"); Row dataRow = liveData.createRow(0); Row infoRow = liveInfo.createRow(0); createCell(dataRow.createCell(0), "id"); createCell(dataRow.createCell(1), "uid"); createCell(dataRow.createCell(2), "roomId"); createCell(dataRow.createCell(3), "类型"); createCell(dataRow.createCell(4), "内容"); createCell(dataRow.createCell(5), "礼物id"); createCell(dataRow.createCell(6), "礼物名称"); createCell(dataRow.createCell(7), "礼物数量"); createCell(dataRow.createCell(8), "金瓜子"); createCell(dataRow.createCell(9), "时间"); createCell(infoRow.createCell(0), "id"); createCell(infoRow.createCell(1), "房间号"); createCell(infoRow.createCell(2), "人气"); createCell(infoRow.createCell(3), "普通用户入场数量"); createCell(infoRow.createCell(4), "舰长入场数量"); createCell(infoRow.createCell(5), "送礼人数"); createCell(infoRow.createCell(6), "记录时间"); Log.i("表头插入完毕:"+(System.currentTimeMillis()-timer)); List dataList = dataDao.queryLiveData(roomId, startTime, endTime, new String[]{ INTERACT_WORD, ENTRY_EFFECT, DANMU_MSG, SEND_GIFT, COMBO_SEND, SUPER_CHAT_MESSAGE, NOTICE_MSG, GUARD_BUY, UNKNOWN_MESSAGE }); List infoList = infoDao.queryTimeOfRoomid(roomId, startTime, endTime); int index = 1; for (BilibiliLiveData data : dataList) { dataRow = liveData.createRow(index++); createCell(dataRow.createCell(0), data.getId()); createCell(dataRow.createCell(1), data.getUid()); createCell(dataRow.createCell(2), data.getRoomid()); createCell(dataRow.createCell(3), data.getType()); createCell(dataRow.createCell(4), data.getMsg()); createCell(dataRow.createCell(5), data.getGiftid()); createCell(dataRow.createCell(6), data.getGiftname()); createCell(dataRow.createCell(7), data.getGiftindex()); createCell(dataRow.createCell(8), data.getPrice()); createCell(dataRow.createCell(9), AppTools.getToDayTimeToString(data.getSubtime())); } index = 1; for (BilibiliLiveInfo info : infoList) { infoRow = liveInfo.createRow(index++); createCell(infoRow.createCell(0), info.getId()); createCell(infoRow.createCell(1), info.getRoomid()); createCell(infoRow.createCell(2), info.getPopular()); createCell(infoRow.createCell(3), info.getUserindex()); createCell(infoRow.createCell(4), info.getVipuserindex()); createCell(infoRow.createCell(5), info.getGiftuser()); createCell(infoRow.createCell(6), AppTools.getToDayTimeToString(info.getSubtime())); } Log.i("数据填充完毕:"+(System.currentTimeMillis()-timer)); try { if(!new File("excel").exists()){ new File("excel").mkdirs(); } File file = new File("excel"+File.separator+fileName+".tmp"); FileOutputStream fileOutputStream = new FileOutputStream(file); workbook.write(fileOutputStream); workbook.close(); Log.i("文件写入完毕:"+(System.currentTimeMillis()-timer)); file.renameTo(new File("excel"+File.separator+fileName)); return file; } catch (Exception e) { Log.e(e); } return null; } private void createCell(Cell cell, Object data) { if (data == null) data = 0; if (data instanceof String) { cell.setCellType(CellType.STRING); cell.setCellValue((String) data); } else { cell.setCellType(CellType.NUMERIC); cell.setCellValue((int) data); } } private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (ExcelUtils.applicationContext == null) { ExcelUtils.applicationContext = applicationContext; } } public static T getBean(Class clazz) { return applicationContext.getBean(clazz); } }