| | |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author Administrator |
| | |
| | | } |
| | | |
| | | /** |
| | | * 导出数据到Excel |
| | | * 导出数据到Excel(两个sheet页) |
| | | * |
| | | * @param dataList 数据列表 |
| | | * @param filePath 文件路径 |
| | | */ |
| | | private void exportToExcel(List<VwCjScSjTsBb> dataList, String filePath) { |
| | | // 创建Excel写入器 |
| | | ExcelWriter writer = ExcelUtil.getWriter(filePath); |
| | | // 计算昨天的日期 |
| | | LocalDate yesterday = LocalDate.now().minusDays(1); |
| | | String yesterdayStr = yesterday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
| | | |
| | | // 计算本月的起止日期 |
| | | LocalDate today = LocalDate.now(); |
| | | LocalDate firstDayOfMonth = today.withDayOfMonth(1); |
| | | LocalDate lastDayOfMonth = today.withDayOfMonth(today.lengthOfMonth()); |
| | | String firstDayStr = firstDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
| | | String lastDayStr = lastDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
| | | |
| | | log.info("昨天日期: {}", yesterdayStr); |
| | | log.info("本月范围: {} 至 {}", firstDayStr, lastDayStr); |
| | | |
| | | // 过滤数据:预计开工在昨天的数据 |
| | | List<VwCjScSjTsBb> yesterdayData = dataList.stream() |
| | | .filter(item -> item.getYjkg() != null && item.getYjkg().startsWith(yesterdayStr)) |
| | | .collect(Collectors.toList()); |
| | | |
| | | // 过滤数据:预计开工在本月的数据 |
| | | List<VwCjScSjTsBb> thisMonthData = dataList.stream() |
| | | .filter(item -> { |
| | | if (item.getYjkg() == null || item.getYjkg().trim().isEmpty()) { |
| | | return false; |
| | | } |
| | | String yjkg = item.getYjkg().substring(0, Math.min(10, item.getYjkg().length())); |
| | | return yjkg.compareTo(firstDayStr) >= 0 && yjkg.compareTo(lastDayStr) <= 0; |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | |
| | | log.info("昨天数据: {} 条", yesterdayData.size()); |
| | | log.info("本月数据: {} 条", thisMonthData.size()); |
| | | |
| | | // 创建Excel写入器(第一个sheet) |
| | | ExcelWriter writer = ExcelUtil.getWriter(filePath, "昨天预计开工"); |
| | | |
| | | // 写入第一个sheet:昨天预计开工的数据 |
| | | writeSheetData(writer, yesterdayData, "昨天预计开工数据(" + yesterdayStr + ")"); |
| | | |
| | | // 创建第二个sheet |
| | | writer.setSheet("本月预计开工"); |
| | | |
| | | // 写入第二个sheet:本月预计开工的数据 |
| | | writeSheetData(writer, thisMonthData, "本月预计开工数据(" + firstDayStr + " 至 " + lastDayStr + ")"); |
| | | |
| | | // 关闭writer,释放内存 |
| | | writer.close(); |
| | | } |
| | | |
| | | /** |
| | | * 写入单个sheet的数据 |
| | | * |
| | | * @param writer Excel写入器 |
| | | * @param dataList 数据列表 |
| | | * @param title 标题 |
| | | */ |
| | | private void writeSheetData(ExcelWriter writer, List<VwCjScSjTsBb> dataList, String title) { |
| | | // 清空之前的别名设置 |
| | | writer.clearHeaderAlias(); |
| | | |
| | | // 设置表头别名(中文列名) |
| | | writer.addHeaderAlias("itemName", "物料名称"); |
| | | writer.addHeaderAlias("itemNo", "物料编码"); |
| | | writer.addHeaderAlias("departmentname", "车间名称"); |
| | | writer.addHeaderAlias("departmentcode", "车间编码"); |
| | | writer.addHeaderAlias("daa001", "工单号"); |
| | | writer.addHeaderAlias("itemNo", "物料编码"); |
| | | writer.addHeaderAlias("itemName", "物料名称"); |
| | | writer.addHeaderAlias("departmentname", "车间名称"); |
| | | writer.addHeaderAlias("lineName", "线体名称"); |
| | | writer.addHeaderAlias("departmentcode", "车间编码"); |
| | | writer.addHeaderAlias("lineNo", "线体编码"); |
| | | writer.addHeaderAlias("daa008", "工单数量"); |
| | | writer.addHeaderAlias("yjkg", "预计开工"); |
| | |
| | | writer.addHeaderAlias("rkwwg", "入库未完工"); |
| | | writer.addHeaderAlias("sqwrk", "申请未入库"); |
| | | |
| | | // 合并单元格后标题行 |
| | | writer.merge(14, "车间生产数据统计报表"); |
| | | // 合并单元格作为标题行 |
| | | writer.merge(14, title); |
| | | |
| | | // 写入数据,默认会使用别名作为表头 |
| | | writer.write(dataList, true); |
| | | |
| | | // 设置列宽自适应 |
| | | writer.autoSizeColumnAll(); |
| | | |
| | | // 关闭writer,释放内存 |
| | | writer.close(); |
| | | } |
| | | } |
| | | |