| pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/gs/xky/entity/VwCjScSjTsBb.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/gs/xky/service/Impl/VwCjScSjTsBbServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/gs/xky/service/VwCjScSjTsBbService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/test/java/com/gs/xky/XkyApplicationTests.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
pom.xml
@@ -96,6 +96,13 @@ <artifactId>hutool-all</artifactId> <version>5.8.18</version> </dependency> <!-- Apache POI for Excel (required by Hutool) --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> </dependencies> <build> src/main/java/com/gs/xky/entity/VwCjScSjTsBb.java
@@ -2,8 +2,9 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import lombok.Data; import java.io.Serializable; /** * @@ -12,81 +13,66 @@ @TableName(value ="VW_CJ_SC_SJ_TS_BB") @Data public class VwCjScSjTsBb implements Serializable { /** * */ private Object itemName; /** * */ private Object itemNo; /** * */ private Object departmentname; /** * */ private Object departmentcode; /** * */ private Object daa001; /** * */ private Object lineName; /** * */ private Object lineNo; /** * */ private Object daa008; /** * */ private Object yjkg; /** * */ private Object sjkg; /** * */ private Object sq; /** * */ private Object rk; /** * */ private Object sqwwg; /** * */ private Object rkwwg; /** * */ private Object sqwrk; @TableField(exist = false) private static final long serialVersionUID = 1L; /** * 物料名称 */ private String itemName; /** * 物料编码 */ private String itemNo; /** * 车间名称 */ private String departmentname; /** * 车间编码 */ private String departmentcode; /** * 工单号 */ private String daa001; /** * 线体名称 */ private String lineName; /** * 线体编码 */ private String lineNo; /** * 工单数量 */ private String daa008; /** * 预计开工 */ private String yjkg; /** * 实际开工 */ private String sjkg; /** * 申请入库数 */ private String sq; /** * 入库 */ private String rk; /** * 申请未完工数 */ private String sqwwg; /** * 入库未完工 */ private String rkwwg; /** * 申请未入库 */ private String sqwrk; } src/main/java/com/gs/xky/service/Impl/VwCjScSjTsBbServiceImpl.java
@@ -1,10 +1,20 @@ package com.gs.xky.service.Impl; import cn.hutool.core.io.FileUtil; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import generator.domain.VwCjScSjTsBb; import com.gs.xky.service.VwCjScSjTsBbService; import com.gs.xky.entity.VwCjScSjTsBb; import com.gs.xky.mapper.VwCjScSjTsBbMapper; import com.gs.xky.service.DingtalkInfoService; import com.gs.xky.service.VwCjScSjTsBbService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; /** * @author Administrator @@ -12,9 +22,104 @@ * @createDate 2025-11-12 16:42:06 */ @Service @Slf4j @RequiredArgsConstructor public class VwCjScSjTsBbServiceImpl extends ServiceImpl<VwCjScSjTsBbMapper, VwCjScSjTsBb> implements VwCjScSjTsBbService{ private final DingtalkInfoService dingtalkInfoService; @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()); String fileName = "生产数据报表_" + timestamp + ".xlsx"; exportFilePath = "D:\\BIFile\\" + fileName; // 确保目录存在 FileUtil.mkdir("D:\\BIFile"); // 3. 导出到Excel log.info("开始导出Excel文件: {}", exportFilePath); exportToExcel(dataList, exportFilePath); log.info("Excel文件导出成功"); // 4. 发送钉钉消息 log.info("开始发送钉钉文件消息..."); boolean sendResult = dingtalkInfoService.sendFileMessage(exportFilePath); if (sendResult) { log.info("钉钉文件消息发送成功"); } else { log.warn("钉钉文件消息发送失败"); } return sendResult; } catch (Exception e) { log.error("导出并发送失败", e); throw e; } finally { // 可选:发送后删除临时文件 // if (exportFilePath != null && FileUtil.exist(exportFilePath)) { // FileUtil.del(exportFilePath); // log.info("临时文件已删除: {}", exportFilePath); // } } } /** * 导出数据到Excel * * @param dataList 数据列表 * @param filePath 文件路径 */ private void exportToExcel(List<VwCjScSjTsBb> dataList, String filePath) { // 创建Excel写入器 ExcelWriter writer = ExcelUtil.getWriter(filePath); // 设置表头别名(中文列名) writer.addHeaderAlias("itemName", "物料名称"); writer.addHeaderAlias("itemNo", "物料编码"); writer.addHeaderAlias("departmentname", "车间名称"); writer.addHeaderAlias("departmentcode", "车间编码"); writer.addHeaderAlias("daa001", "工单号"); writer.addHeaderAlias("lineName", "线体名称"); 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, "车间生产数据统计报表"); // 写入数据,默认会使用别名作为表头 writer.write(dataList, true); // 设置列宽自适应 writer.autoSizeColumnAll(); // 关闭writer,释放内存 writer.close(); } } src/main/java/com/gs/xky/service/VwCjScSjTsBbService.java
@@ -1,7 +1,7 @@ package com.gs.xky.service; import generator.domain.VwCjScSjTsBb; import com.baomidou.mybatisplus.extension.service.IService; import com.gs.xky.entity.VwCjScSjTsBb; /** * @author Administrator @@ -10,4 +10,10 @@ */ public interface VwCjScSjTsBbService extends IService<VwCjScSjTsBb> { /** * 导出数据到Excel并发送钉钉消息 * * @return 是否成功 */ boolean exportAndSendToDingtalk() throws Exception; } src/test/java/com/gs/xky/XkyApplicationTests.java
@@ -41,6 +41,8 @@ private PurchaseService service; @Autowired private DingtalkInfoService dingtalkInfoService; @Autowired private VwCjScSjTsBbService vwCjScSjTsBbService; @Test void contextLoads() throws IOException { @@ -217,4 +219,31 @@ System.out.println("=== 测试结束 ==="); } /** * 测试导出生产数据并发送钉钉消息 * 功能:查询VW_CJ_SC_SJ_TS_BB表数据 -> 导出Excel -> 发送钉钉文件消息 */ @Test void testExportAndSendProductionData() throws Exception { System.out.println("=== 开始测试导出生产数据并发送钉钉 ==="); try { boolean result = vwCjScSjTsBbService.exportAndSendToDingtalk(); if (result) { System.out.println("✓ 生产数据导出并发送成功"); System.out.println(" - 数据已从 VW_CJ_SC_SJ_TS_BB 表查询"); System.out.println(" - Excel 文件已生成并保存到 D:\\BIFile\\"); System.out.println(" - 钉钉文件消息已发送"); } else { System.out.println("✗ 生产数据导出或发送失败"); } } catch (Exception e) { System.out.println("✗ 导出并发送时发生异常: " + e.getMessage()); e.printStackTrace(); } System.out.println("=== 测试结束 ==="); } }