| | |
| | | import cn.hutool.poi.excel.ExcelWriter; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.gs.xky.entity.VwCjScSjTsBb; |
| | | import com.gs.xky.entity.VwCjScSjTsBbMonth; |
| | | import com.gs.xky.mapper.VwCjScSjTsBbMapper; |
| | | import com.gs.xky.service.DingtalkInfoService; |
| | | import com.gs.xky.service.VwCjScSjTsBbMonthService; |
| | | import com.gs.xky.service.VwCjScSjTsBbService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author Administrator |
| | |
| | | implements VwCjScSjTsBbService { |
| | | |
| | | private final DingtalkInfoService dingtalkInfoService; |
| | | private final VwCjScSjTsBbMonthService vwCjScSjTsBbMonthService; |
| | | |
| | | @Override |
| | | public boolean exportAndSendToDingtalk() throws Exception { |
| | | String exportFilePath = null; |
| | | try { |
| | | // 1. 查询所有数据 |
| | | log.info("开始查询生产数据..."); |
| | | List<VwCjScSjTsBb> dataList = list(); |
| | | |
| | | if (dataList == null || dataList.isEmpty()) { |
| | | log.warn("没有数据需要导出"); |
| | | return false; |
| | | } |
| | | |
| | | log.info("查询到 {} 条数据", dataList.size()); |
| | | |
| | | // 2. 准备导出文件路径 |
| | | String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); |
| | |
| | | |
| | | // 3. 导出到Excel |
| | | log.info("开始导出Excel文件: {}", exportFilePath); |
| | | exportToExcel(dataList, exportFilePath); |
| | | exportToExcel(exportFilePath); |
| | | log.info("Excel文件导出成功"); |
| | | |
| | | // 4. 发送钉钉消息 |
| | |
| | | /** |
| | | * 导出数据到Excel(两个sheet页) |
| | | * |
| | | * @param dataList 数据列表 |
| | | * @param filePath 文件路径 |
| | | */ |
| | | private void exportToExcel(List<VwCjScSjTsBb> dataList, String filePath) { |
| | | private void exportToExcel(String filePath) { |
| | | // 计算昨天的日期 |
| | | LocalDate yesterday = LocalDate.now().minusDays(1); |
| | | String yesterdayStr = yesterday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
| | |
| | | log.info("本月范围: {} 至 {}", firstDayStr, lastDayStr); |
| | | |
| | | // 过滤数据:预计开工在昨天的数据 |
| | | List<VwCjScSjTsBb> yesterdayData = dataList.stream() |
| | | .filter(item -> item.getYjkg() != null && item.getYjkg().startsWith(yesterdayStr)) |
| | | .collect(Collectors.toList()); |
| | | List<VwCjScSjTsBb> yesterdayData = list(); |
| | | |
| | | // 过滤数据:预计开工在本月的数据 |
| | | 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()); |
| | | List<VwCjScSjTsBbMonth> thisMonthData = vwCjScSjTsBbMonthService.list(); |
| | | |
| | | log.info("昨天数据: {} 条", yesterdayData.size()); |
| | | log.info("本月数据: {} 条", thisMonthData.size()); |
| | | |
| | | // 创建Excel写入器(第一个sheet) |
| | | ExcelWriter writer = ExcelUtil.getWriter(filePath, "昨天预计开工"); |
| | | ExcelWriter writer = ExcelUtil.getWriter(filePath, "昨天入库工单申请"); |
| | | |
| | | // 写入第一个sheet:昨天预计开工的数据 |
| | | writeSheetData(writer, yesterdayData, "昨天预计开工数据(" + yesterdayStr + ")"); |
| | | writeSheetData(writer, "昨天入库工单申请数据(" + yesterdayStr + ")", yesterdayData); |
| | | |
| | | // 创建第二个sheet |
| | | writer.setSheet("本月预计开工"); |
| | | writer.setSheet("本月入库工单申请"); |
| | | |
| | | // 写入第二个sheet:本月预计开工的数据 |
| | | writeSheetData(writer, thisMonthData, "本月预计开工数据(" + firstDayStr + " 至 " + lastDayStr + ")"); |
| | | writeSheetData(writer, thisMonthData, "本月入库工单申请数据(" + firstDayStr + " 至 " + lastDayStr + ")"); |
| | | |
| | | // 关闭writer,释放内存 |
| | | writer.close(); |
| | |
| | | * @param dataList 数据列表 |
| | | * @param title 标题 |
| | | */ |
| | | private void writeSheetData(ExcelWriter writer, List<VwCjScSjTsBb> dataList, String title) { |
| | | private void writeSheetData(ExcelWriter writer, String title, List<VwCjScSjTsBb> dataList) { |
| | | // 清空之前的别名设置 |
| | | writer.clearHeaderAlias(); |
| | | |
| | |
| | | writer.addHeaderAlias("itemName", "物料名称"); |
| | | writer.addHeaderAlias("departmentname", "车间名称"); |
| | | writer.addHeaderAlias("lineName", "线体名称"); |
| | | writer.addHeaderAlias("departmentcode", "车间编码"); |
| | | writer.addHeaderAlias("lineNo", "线体编码"); |
| | | writer.addHeaderAlias("daa008", "工单数量"); |
| | | writer.addHeaderAlias("yjkg", "预计开工"); |
| | | writer.addHeaderAlias("sjkg", "实际开工"); |
| | | writer.addHeaderAlias("sq", "申请入库数"); |
| | | writer.addHeaderAlias("rk", "入库数"); |
| | | writer.addHeaderAlias("sqwwg", "申请未完工数"); |
| | | writer.addHeaderAlias("rkwwg", "入库未完工"); |
| | | writer.addHeaderAlias("sqwrk", "申请未入库"); |
| | | |
| | | // 合并单元格作为标题行 |
| | | writer.merge(14, title); |
| | | |
| | | // 写入数据,默认会使用别名作为表头 |
| | | writer.write(dataList, true); |
| | | |
| | | // 设置列宽自适应 |
| | | writer.autoSizeColumnAll(); |
| | | } |
| | | |
| | | |
| | | private void writeSheetData(ExcelWriter writer, List<VwCjScSjTsBbMonth> dataList, String title) { |
| | | // 清空之前的别名设置 |
| | | writer.clearHeaderAlias(); |
| | | |
| | | // 设置表头别名(中文列名) |
| | | writer.addHeaderAlias("daa001", "工单号"); |
| | | writer.addHeaderAlias("itemNo", "物料编码"); |
| | | writer.addHeaderAlias("itemName", "物料名称"); |
| | | writer.addHeaderAlias("departmentname", "车间名称"); |
| | | writer.addHeaderAlias("lineName", "线体名称"); |
| | | writer.addHeaderAlias("daa008", "工单数量"); |
| | | writer.addHeaderAlias("yjkg", "预计开工"); |
| | | writer.addHeaderAlias("sjkg", "实际开工"); |