diff --git a/src/main/java/com/dsic/gj_erp/Test.java b/src/main/java/com/dsic/gj_erp/Test.java index dc28c61..7492d54 100644 --- a/src/main/java/com/dsic/gj_erp/Test.java +++ b/src/main/java/com/dsic/gj_erp/Test.java @@ -2,6 +2,7 @@ package com.dsic.gj_erp; import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.TimeInterval; +import cn.hutool.core.io.FileUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrConfig; import com.google.zxing.BarcodeFormat; @@ -19,10 +20,17 @@ import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.util.List; public class Test { public static void main(String[] args) throws IOException { + List gbk = FileUtil.readLines("D:\\T300K-132_400_erp0909\\T300K-132_400批量型材统计数据_7跨.XC", "GBK"); + System.out.println(gbk); + + List gbk1 = FileUtil.readLines("D:\\T300K-132_400_erp0909\\T300K-132_400批量数控板材统计数据_4跨.BC", "GBK"); + System.out.println(gbk1); + // System.out.println(DateUtil.thisYear()); // System.out.println(StrUtil.padPre("1",3,"0")); @@ -32,17 +40,17 @@ public class Test { //System.out.println("aaa = " + String.format("%03d",1)); // MatrixToImageWriter. - TimeInterval timer = DateUtil.timer(); - String pdfFilePath = "E:\\B058HC104HN第058批量龙门套料图2023-07-20.pdf"; // PDF文件路径 - PDDocument document = PDDocument.load(new File(pdfFilePath)); +// TimeInterval timer = DateUtil.timer(); +// String pdfFilePath = "E:\\B058HC104HN第058批量龙门套料图2023-07-20.pdf"; // PDF文件路径 +// PDDocument document = PDDocument.load(new File(pdfFilePath)); // PDFTextStripper stripper = new PDFTextStripper(); // String text = stripper.getText(document); // String[] split = text.split("\\n"); // List list = new ArrayList<>(); - QrConfig config = new QrConfig(300, 300);//二维码宽/高 +// QrConfig config = new QrConfig(300, 300);//二维码宽/高 // 设置边距,既二维码和背景之间的边距(即白边大小) - config.setMargin(0); +// config.setMargin(0); // 设置前景色,既二维码颜色(青色) //config.setForeColor(Color.CYAN.getRGB()); // 设置背景色(灰色) @@ -80,25 +88,25 @@ public class Test { // } // } - for (int pageNumber = 1; pageNumber < document.getNumberOfPages(); ++pageNumber) { - PDPage page = document.getPage(pageNumber); - String textByRegion = getTextByRegion(page, 80, 50, 1100, 40); -// System.out.println(textByRegion); - String[] split = textByRegion.split(" "); - String dcch = split[1]; - String dcpl = split[3]; - String tzbh = split[7]; - String pageIndex = split[12]; - BufferedImage bufferedImage = QrCodeUtil.generate(String.format("%s_%s_%s", dcch, dcpl, tzbh), config); - PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true); - PDImageXObject qrCodeImage = JPEGFactory.createFromImage(document, bufferedImage); - contentStream.drawImage(qrCodeImage, 10, 10, 75, 75); // 在PDF中的坐标位置添加二维码 - contentStream.close(); - } +// for (int pageNumber = 1; pageNumber < document.getNumberOfPages(); ++pageNumber) { +// PDPage page = document.getPage(pageNumber); +// String textByRegion = getTextByRegion(page, 80, 50, 1100, 40); +//// System.out.println(textByRegion); +// String[] split = textByRegion.split(" "); +// String dcch = split[1]; +// String dcpl = split[3]; +// String tzbh = split[7]; +// String pageIndex = split[12]; +// BufferedImage bufferedImage = QrCodeUtil.generate(String.format("%s_%s_%s", dcch, dcpl, tzbh), config); +// PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true); +// PDImageXObject qrCodeImage = JPEGFactory.createFromImage(document, bufferedImage); +// contentStream.drawImage(qrCodeImage, 10, 10, 75, 75); // 在PDF中的坐标位置添加二维码 +// contentStream.close(); +// } - document.save("E:/updated_document.pdf"); - document.close(); - System.out.println(timer.interval()); +// document.save("E:/updated_document.pdf"); +// document.close(); +// System.out.println(timer.interval()); // 输出提取的文本到控制台 // System.out.println(text); diff --git a/src/main/java/com/dsic/gj_erp/bean/jcsj/YdjhzzVO.java b/src/main/java/com/dsic/gj_erp/bean/jcsj/YdjhzzVO.java new file mode 100644 index 0000000..1e515a5 --- /dev/null +++ b/src/main/java/com/dsic/gj_erp/bean/jcsj/YdjhzzVO.java @@ -0,0 +1,904 @@ +package com.dsic.gj_erp.bean.jcsj; + +import cn.hutool.core.util.NumberUtil; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; + +/** + * 预切板计划导出VO + * 字段名与前端tableColumn中的field保持完全一致 + */ +@Setter +@Getter +public class YdjhzzVO { + + /** + * 船号 + */ + private Object dcCh; + + /** + * 批量 + */ + private Object dcPl; + + /** + * 分段 + */ + private Object dcFd; + + /** + * 龙门1 + */ + private Object lm1; + + /** + * 领取重量 + */ + private Object bclqzl_lm1; + + /** + * 实耗重量 + */ + private Object bcshzl_lm1; + + /** + * 余料重量 + */ + private Object 龙门1余料重量; + + /** + * 前批余料代 + */ + private Object 龙门1前批余料代; + + /** + * 零件重量 + */ + private Object 龙门1零件重量; + + /** + * 数1 + */ + private Object s1; + + /** + * 领取重量 + */ + private Object bclqzl_s1; + + /** + * 实耗重量 + */ + private Object bcshzl_s1; + + /** + * 余料重量 + */ + private Object 数1余料重量; + + /** + * 前批余料代 + */ + private Object 数1前批余料代; + + /** + * 零件重量 + */ + private Object 数1零件重量; + + /** + * 激光小2 + */ + private Object xj2; + + /** + * 领取重量 + */ + private Object bclqzl_xj2; + + /** + * 实耗重量 + */ + private Object bcshzl_xj2; + + /** + * 余料重量 + */ + private Object 小激光2余料重量; + + /** + * 前批余料代 + */ + private Object 小激光2前批余料代; + + /** + * 零件重量 + */ + private Object 小激光2零件重量; + + /** + * 激光中大2 + */ + private Object dj2; + + /** + * 领取重量 + */ + private Object bclqzl_dj2; + + /** + * 实耗重量 + */ + private Object bcshzl_dj2; + + /** + * 余料重量 + */ + private Object 大激光2余料重量; + + /** + * 前批余料代 + */ + private Object 大激光2前批余料代; + + /** + * 零件重量 + */ + private Object 大激光2零件重量; + + /** + * 数小2 + */ + private Object sx2; + + /** + * 领取重量 + */ + private Object bclqzl_sx2; + + /** + * 实耗重量 + */ + private Object bcshzl_sx2; + + /** + * 余料重量 + */ + private Object 数小2余料重量; + + /** + * 前批余料代 + */ + private Object 数小2前批余料代; + + /** + * 零件重量 + */ + private Object 数小2零件重量; + + /** + * 数中大2 + */ + private Object szd2; + + /** + * 领取重量 + */ + private Object bclqzl_szd2; + + /** + * 实耗重量 + */ + private Object bcshzl_szd2; + + /** + * 余料重量 + */ + private Object 数中大2余料重量; + + /** + * 前批余料代 + */ + private Object 数中大2前批余料代; + + /** + * 零件重量 + */ + private Object 数中大2零件重量; + + /** + * 小腹 + */ + private Object xf; + + /** + * 领取重量 + */ + private Object bclqzl_xf; + + /** + * 实耗重量 + */ + private Object bcshzl_xf; + + /** + * 余料重量 + */ + private Object 小腹余料重量; + + /** + * 前批余料代 + */ + private Object 小腹前批余料代; + + /** + * 零件重量 + */ + private Object 小腹零件重量; + + /** + * 大腹 + */ + private Object df; + + /** + * 领取重量 + */ + private Object bclqzl_df; + + /** + * 实耗重量 + */ + private Object bcshzl_df; + + /** + * 余料重量 + */ + private Object 大腹余料重量; + + /** + * 前批余料代 + */ + private Object 大腹前批余料代; + + /** + * 零件重量 + */ + private Object 大腹零件重量; + + /** + * 小组厚板 + */ + private Object xzhb; + + /** + * 领取重量 + */ + private Object bclqzl_xzhb; + + /** + * 实耗重量 + */ + private Object bcshzl_xzhb; + + /** + * 余料重量 + */ + private Object 小组厚板余料重量; + + /** + * 前批余料代 + */ + private Object 小组厚板前批余料代; + + /** + * 零件重量 + */ + private Object 小组厚板零件重量; + + /** + * 大组厚板 + */ + private Object dzhb; + + /** + * 领取重量 + */ + private Object bclqzl_dzhb; + + /** + * 实耗重量 + */ + private Object bcshzl_dzhb; + + /** + * 余料重量 + */ + private Object 大组厚板余料重量; + + /** + * 前批余料代 + */ + private Object 大组厚板前批余料代; + + /** + * 零件重量 + */ + private Object 大组厚板零件重量; + + /** + * 数小4 + */ + private Object sx4; + + /** + * 领取重量 + */ + private Object bclqzl_sx4; + + /** + * 实耗重量 + */ + private Object bcshzl_sx4; + + /** + * 余料重量 + */ + private Object 数小4余料重量; + + /** + * 前批余料代 + */ + private Object 数小4前批余料代; + + /** + * 零件重量 + */ + private Object 数小4零件重量; + + /** + * 机肘4 + */ + private Object jz4; + + /** + * 领取重量 + */ + private Object bclqzl_jz4; + + /** + * 实耗重量 + */ + private Object bcshzl_jz4; + + /** + * 余料重量 + */ + private Object 机肘4余料重量; + + /** + * 前批余料代 + */ + private Object 机肘4前批余料代; + + /** + * 零件重量 + */ + private Object 机肘4零件重量; + + /** + * 小面 + */ + private Object xm; + + /** + * 领取重量 + */ + private Object bclqzl_xm; + + /** + * 实耗重量 + */ + private Object bcshzl_xm; + + /** + * 余料重量 + */ + private Object 小面余料重量; + + /** + * 前批余料代 + */ + private Object 小面前批余料代; + + /** + * 零件重量 + */ + private Object 小面零件重量; + + /** + * 大面 + */ + private Object dm; + + /** + * 领取重量 + */ + private Object bclqzl_dm; + + /** + * 实耗重量 + */ + private Object bcshzl_dm; + + /** + * 余料重量 + */ + private Object 大面余料重量; + + /** + * 前批余料代 + */ + private Object 大面前批余料代; + + /** + * 零件重量 + */ + private Object 大面零件重量; + + /** + * 手小3 + */ + private Object sx3; + + /** + * 领取重量 + */ + private Object bclqzl_sx3; + + /** + * 实耗重量 + */ + private Object bcshzl_sx3; + + /** + * 余料重量 + */ + private Object 手小3余料重量; + + /** + * 前批余料代 + */ + private Object 手小3前批余料代; + + /** + * 零件重量 + */ + private Object 手小3零件重量; + + /** + * 手机3 + */ + private Object sj3; + + /** + * 领取重量 + */ + private Object bclqzl_sj3; + + /** + * 实耗重量 + */ + private Object bcshzl_sj3; + + /** + * 余料重量 + */ + private Object 手机3余料重量; + + /** + * 前批余料代 + */ + private Object 手机3前批余料代; + + /** + * 零件重量 + */ + private Object 手机3零件重量; + + /** + * 手中大3 + */ + private Object szd3; + + /** + * 领取重量 + */ + private Object bclqzl_szd3; + + /** + * 实耗重量 + */ + private Object bcshzl_szd3; + + /** + * 余料重量 + */ + private Object 手中大3余料重量; + + /** + * 前批余料代 + */ + private Object 手中大3前批余料代; + + /** + * 零件重量 + */ + private Object 手中大3零件重量; + + /** + * 小组型材根数 + */ + private Object xzxcgs; + + /** + * 小组型材领取米数 + */ + private Object 小组型材领取米数; + + /** + * 小组型材实耗米数 + */ + private Object 小组型材实耗米数; + + /** + * 领取重量 + */ + private Object lqzl_xzxc; + + /** + * 实耗重量 + */ + private Object shzl_xzxc; + + /** + * 余料重量 + */ + private Object 小组型材余料重量; + + /** + * 前批余料代 + */ + private Object 小组型材前批余料代; + + /** + * 零件重量 + */ + private Object 小组型材零件重量; + + /** + * 大组型材根数 + */ + private Object dzxcgs; + + /** + * 大组型材领取米数 + */ + private Object 大组型材领取米数; + + /** + * 大组型材实耗米数 + */ + private Object 大组型材实耗米数; + + /** + * 领取重量 + */ + private Object lqzl_dzxc; + + /** + * 实耗重量 + */ + private Object shzl_dzxc; + + /** + * 余料重量 + */ + private Object 大组型材余料重量; + + /** + * 前批余料代 + */ + private Object 大组型材前批余料代; + + /** + * 零件重量 + */ + private Object 大组型材零件重量; + + /** + * 方钢根数 + */ + private Object fggs; + + /** + * 方钢领取米数 + */ + private Object 方钢领取米数; + + /** + * 方钢实耗米数 + */ + private Object 方钢实耗米数; + + /** + * 领取重量 + */ + private Object lqzl_fg; + + /** + * 实耗重量 + */ + private Object shzl_fg; + + /** + * 余料重量 + */ + private Object 方钢余料重量; + + /** + * 前批余料代 + */ + private Object 方钢前批余料代; + + /** + * 零件重量 + */ + private Object 方钢零件重量; + + /** + * 型材根数合计 + */ + private Object xcgs_hj; + + /** + * 型材总米数(不含方钢) + */ + private Object xcms_hj; + + /** + * 小组领取合计 + */ + private BigDecimal lqhj_xz; + + /** + * 小组实耗合计 + */ + private BigDecimal shhj_xz; + + /** + * 数中大4 + */ + private Object szd4; + + /** + * 领取重量 + */ + private Object bclqzl_szd4; + + /** + * 实耗重量 + */ + private Object bcshzl_szd4; + + /** + * 余料重量 + */ + private Object 数中大4余料重量; + + /** + * 前批余料代 + */ + private Object 数中大4前批余料代; + + /** + * 零件重量 + */ + private Object 数中大4零件重量; + + /** + * 数曲2小 + */ + private Object sq2x; + + /** + * 领取重量 + */ + private Object bclqzl_sq2x; + + /** + * 实耗重量 + */ + private Object bcshzl_sq2x; + + /** + * 余料重量 + */ + private Object 数曲2小余料重量; + + /** + * 前批余料代 + */ + private Object 数曲2小前批余料代; + + /** + * 零件重量 + */ + private Object 数曲2小零件重量; + + /** + * 数曲2大 + */ + private Object sq2d; + + /** + * 领取重量 + */ + private Object bclqzl_sq2d; + + /** + * 实耗重量 + */ + private Object bcshzl_sq2d; + + /** + * 余料重量 + */ + private Object 数曲2大余料重量; + + /** + * 前批余料代 + */ + private Object 数曲2大前批余料代; + + /** + * 零件重量 + */ + private Object 数曲2大零件重量; + + /** + * 小曲3 + */ + private Object xq3; + + /** + * 领取重量 + */ + private Object bclqzl_xq3; + + /** + * 实耗重量 + */ + private Object bcshzl_xq3; + + /** + * 余料重量 + */ + private Object 小曲3余料重量; + + /** + * 前批余料代 + */ + private Object 小曲3前批余料代; + + /** + * 零件重量 + */ + private Object 小曲3零件重量; + + /** + * 大曲3 + */ + private Object dq3; + + /** + * 领取重量 + */ + private Object bclqzl_dq3; + + /** + * 实耗重量 + */ + private Object bcshzl_dq3; + + /** + * 余料重量 + */ + private Object 大曲3余料重量; + + /** + * 前批余料代 + */ + private Object 大曲3前批余料代; + + /** + * 零件重量 + */ + private Object 大曲3零件重量; + + /** + * 光电 + */ + private Object gd; + + /** + * 领取重量 + */ + private Object bclqzl_gd; + + /** + * 实耗重量 + */ + private Object bcshzl_gd; + + /** + * 余料重量 + */ + private Object 光电余料重量; + + /** + * 前批余料代 + */ + private Object 光电前批余料代; + + /** + * 零件重量 + */ + private Object 光电零件重量; + + /** + * 大组领取合计 + */ + private BigDecimal lqhj_dz; + + /** + * 大组实耗合计 + */ + private BigDecimal shhj_dz; + + /** + * 领取合计 + */ + private BigDecimal lqhj; + + /** + * 实耗合计 + */ + private BigDecimal shhj; + + /** + * 板数合计 + */ + private Object hjbs; + + /** + * 小腹零件 + */ + private Object xflj; + + /** + * 大腹零件 + */ + private Object dflj; + + public void initLqhj() { + this.lqhj = NumberUtil.add(this.lqhj_xz, this.lqhj_dz); + } + + public void initShhj() { + this.shhj = NumberUtil.add(this.shhj_xz, this.shhj_dz); + } +} \ No newline at end of file diff --git a/src/main/java/com/dsic/gj_erp/controller/jcsj/DmBomController.java b/src/main/java/com/dsic/gj_erp/controller/jcsj/DmBomController.java index 747cf4c..a647499 100644 --- a/src/main/java/com/dsic/gj_erp/controller/jcsj/DmBomController.java +++ b/src/main/java/com/dsic/gj_erp/controller/jcsj/DmBomController.java @@ -23,7 +23,6 @@ import com.dsic.gj_erp.service.jhgk.DmYdjhService; import com.dsic.gj_erp.service.sy.SYService; import com.dsic.gj_erp.util.ObjConvertUtils; import io.swagger.annotations.ApiOperation; -import jdk.nashorn.internal.ir.ReturnNode; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/dsic/gj_erp/controller/jcsj/YdjhzzController.java b/src/main/java/com/dsic/gj_erp/controller/jcsj/YdjhzzController.java index aa1816d..66d2dcf 100644 --- a/src/main/java/com/dsic/gj_erp/controller/jcsj/YdjhzzController.java +++ b/src/main/java/com/dsic/gj_erp/controller/jcsj/YdjhzzController.java @@ -4,16 +4,21 @@ package com.dsic.gj_erp.controller.jcsj; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.dsic.gj_erp.bean.ResultBean; import com.dsic.gj_erp.bean.jcsj.Ydjhzz; +import com.dsic.gj_erp.bean.jcsj.YdjhzzVO; import com.dsic.gj_erp.bean.jhgk.DmYdjh; import com.dsic.gj_erp.mapper.jhgk.DmYdjhMapper; import com.dsic.gj_erp.service.jcsj.DmBclqmxpService; +import com.dsic.gj_erp.service.jcsj.YdjhzzExportService; import com.dsic.gj_erp.service.jhgk.DmYdjhService; import com.dsic.gj_erp.vo.预切板统计VO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -35,6 +40,20 @@ public class YdjhzzController { private final DmBclqmxpService bclqmxpService; private final DmYdjhService ydjhService; + private final YdjhzzExportService ydjhzzExportService; + + /** + * 服务器端导出预切板计划Excel + * 前端将当前表格已加载的数据列表直接POST提交,后端接收后写入Excel返回文件 + * + * @param dataList 前端页面已加载的数据列表 + * @param response HttpServletResponse + */ + @PostMapping("/export") + public void exportExcel(@RequestBody List dataList, HttpServletResponse response) throws Exception { + ydjhzzExportService.export(dataList, response); + } + @PostMapping public ResultBean yqbtjcx(@RequestBody Map map){ List<预切板统计VO> list = bclqmxpService.预切板统计查询(map); diff --git a/src/main/java/com/dsic/gj_erp/service/jcsj/YdjhzzExportService.java b/src/main/java/com/dsic/gj_erp/service/jcsj/YdjhzzExportService.java new file mode 100644 index 0000000..1579b2d --- /dev/null +++ b/src/main/java/com/dsic/gj_erp/service/jcsj/YdjhzzExportService.java @@ -0,0 +1,83 @@ +package com.dsic.gj_erp.service.jcsj; + +import com.dsic.gj_erp.bean.jcsj.YdjhzzVO; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.core.io.ClassPathResource; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.lang.reflect.Field; +import java.net.URLEncoder; +import java.util.List; + +/** + * 预切板计划导出Service + * 前端传数据方式:直接接收前端传来的数据列表,写入Excel模板导出 + */ +@Service +public class YdjhzzExportService { + + private static final String TEMPLATE_PATH = "templates/预切板计划导出模板.xlsx"; + + /** + * 导出Excel(前端传数据方式) + * + * @param dataList 前端传来的数据列表 + * @param response HTTP响应对象 + * @throws Exception 导出异常 + */ + public void export(List dataList, HttpServletResponse response) throws Exception { + // 1. 加载模板文件 + ClassPathResource resource = new ClassPathResource(TEMPLATE_PATH); + try (InputStream templateStream = resource.getInputStream(); + Workbook workbook = new XSSFWorkbook(templateStream)) { + + Sheet sheet = workbook.getSheetAt(0); + if (sheet == null) { + throw new RuntimeException("模板中未找到Sheet"); + } + + // 2. 获取VO的所有字段(按tableColumn顺序声明) + Field[] fields = YdjhzzVO.class.getDeclaredFields(); + int fieldCount = fields.length; + + // 3. 逐行写入数据(从第3行开始,第1行=分组标题,第2行=列标题) + for (YdjhzzVO vo : dataList) { + vo.initLqhj(); + vo.initShhj(); + Row dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + + // 遍历VO的所有字段,按声明顺序写入Excel列 + for (int j = 0; j < fieldCount; j++) { + Field field = fields[j]; + field.setAccessible(true); + Object value = field.get(vo); + + Cell cell = dataRow.createCell(j); + if (value != null) { + if (value instanceof Number) { + cell.setCellValue(((Number) value).doubleValue()); + } else { + cell.setCellValue(value.toString()); + } + } + } + } + + // 4. 设置响应头,触发浏览器下载 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("预切板计划.xlsx", "UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + + // 5. 写入响应流 + try (OutputStream outputStream = response.getOutputStream()) { + workbook.write(outputStream); + outputStream.flush(); + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/dsic/gj_erp/service/钢材到货情况统计Service.java b/src/main/java/com/dsic/gj_erp/service/钢材到货情况统计Service.java index 2409441..9090a93 100644 --- a/src/main/java/com/dsic/gj_erp/service/钢材到货情况统计Service.java +++ b/src/main/java/com/dsic/gj_erp/service/钢材到货情况统计Service.java @@ -19,7 +19,7 @@ public class 钢材到货情况统计Service extends MppServiceImpl<钢材到货 public void init(){ //CronUtil.schedule("0 0 16 * * ?", (Task) this::process); - CronUtil.schedule("*/30 * * * * ?", (Task) this::process); + CronUtil.schedule("0 30 * * * ?", (Task) this::process); System.out.println("初始化定时任务"); } diff --git a/src/main/resources/templates/预切板计划导出模板.xlsx b/src/main/resources/templates/预切板计划导出模板.xlsx new file mode 100644 index 0000000..6f3da45 Binary files /dev/null and b/src/main/resources/templates/预切板计划导出模板.xlsx differ