From fcc9e08b1e069021d38f63b75dc0777d79480c60 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Sat, 4 Oct 2025 18:09:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=B1=E5=8D=95=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xujie/sys/common/utils/ExcelTemplate.java | 57 +++++++++++++++- .../ecss/controller/CoDelController.java | 5 ++ .../modules/ecss/service/CoDelService.java | 2 + .../ecss/service/impl/CoDelServiceImpl.java | 64 ++++++++++++++++++ .../mapper/ecss/EcssCommonMapper.xml | 7 +- .../resources/templates/packing-template.xlsx | Bin 0 -> 10716 bytes 6 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/templates/packing-template.xlsx diff --git a/src/main/java/com/xujie/sys/common/utils/ExcelTemplate.java b/src/main/java/com/xujie/sys/common/utils/ExcelTemplate.java index 6ec5756b..d7d23df0 100644 --- a/src/main/java/com/xujie/sys/common/utils/ExcelTemplate.java +++ b/src/main/java/com/xujie/sys/common/utils/ExcelTemplate.java @@ -43,6 +43,9 @@ public class ExcelTemplate { // 报关单 @Setter private boolean delRight = false; + // 箱单 + @Setter + private boolean boxFlag = false; private ExcelTemplate(){} @@ -183,6 +186,7 @@ public class ExcelTemplate { } List dtlRows = new ArrayList<>(); + List boxRows = new ArrayList<>(); //整体填值 for (int i = 0; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); @@ -202,6 +206,9 @@ public class ExcelTemplate { if ("#{levy}".equals(cellValue)) { dtlRows.add(i); } + if ("#{cmcInvoice}".equals(cellValue)) { + boxRows.add(i); + } Matcher matcherHdr = PATTERN_HDR_FIELD.matcher(cellValue); String result = c.getStringCellValue(); while (matcherHdr.find()) { @@ -243,7 +250,7 @@ public class ExcelTemplate { } } } - + // 设置样式 if (cellStyle && dtlRowIndex >= 0 && i >= dtlRowIndex && i < dtlRowIndex + listVariables.size()) { XSSFCellStyle style = c.getCellStyle(); @@ -445,6 +452,54 @@ public class ExcelTemplate { } } } + if (boxFlag) { + for (Integer dtlRow : boxRows) { + for (int i = 1; i < 6; i++) { + if (i==1 || i==4 || i==5) { + XSSFRow row = sheet.getRow(dtlRow); + if (row == null) { + continue; + } + XSSFCell c7 = row.getCell(i); + if (c7 == null) { + continue; + } + // 尝试把字符串转成数值 + if (c7.getCellType() == CellType.STRING) { + String strVal = c7.getStringCellValue(); + if (strVal != null && !strVal.trim().isEmpty()) { + try { + double num = Double.parseDouble(strVal.replace(",", "")); + c7.setCellValue(num); // 转换为数值写回 + } catch (NumberFormatException e) { + // 如果不是数字就保留原字符串 + System.out.println("非数字,保持原值: " + strVal); + } + } + } + // 创建样式 + XSSFCellStyle style7 = workbook.createCellStyle(); + style7.setBorderRight(BorderStyle.THIN); + style7.setBorderLeft(BorderStyle.THIN); + style7.setBorderBottom(BorderStyle.THIN); + style7.setBorderTop(BorderStyle.THIN); + + Font font7 = workbook.createFont(); + font7.setFontName("DengXian"); // 等线 + font7.setFontHeightInPoints((short) 11); // 11号 + style7.setFont(font7); + + style7.setVerticalAlignment(VerticalAlignment.CENTER); + style7.setAlignment(HorizontalAlignment.RIGHT); + + // 设置千分位格式 + DataFormat dataFormat = workbook.createDataFormat(); + style7.setDataFormat(dataFormat.getFormat("#,##0")); + c7.setCellStyle(style7); + } + } + } + } return workbook; } } diff --git a/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java b/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java index e5039a0e..452fe029 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java +++ b/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java @@ -429,6 +429,11 @@ public class CoDelController { coDelService.downloadPackingList(response, data); } + @PostMapping("/exportPackingTemplate") + public void exportPackingTemplate(HttpServletResponse response, @RequestBody EcssCoDelNotifyHeaderData data) { + coDelService.exportPackingTemplate(response, data); + } + @PostMapping("/downloadExportGoods") public void downloadExportGoods(HttpServletResponse response, @RequestBody EcssDeclarationHeaderData data) { coDelService.downloadExportGoods(response, data); diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java b/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java index 5370f367..41b939b2 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java @@ -125,6 +125,8 @@ public interface CoDelService { void downloadPackingList(HttpServletResponse response, EcssDeclarationHeaderData data); + void exportPackingTemplate(HttpServletResponse response, EcssCoDelNotifyHeaderData data); + void downloadExportGoods(HttpServletResponse response, EcssDeclarationHeaderData data); void downloadContract(HttpServletResponse response, EcssDeclarationHeaderData data); diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java index 81331481..65163c5d 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java @@ -1729,6 +1729,70 @@ public class CoDelServiceImpl implements CoDelService { } } + /** + * 导出装箱数据导入模版 + */ + @Override + public void exportPackingTemplate(HttpServletResponse response, EcssCoDelNotifyHeaderData data) { + try { + ExcelTemplate template = ExcelTemplate.load(new ClassPathResource("templates/packing-template.xlsx").getInputStream()); + template.setBoxFlag(true); + // 获取装箱数据 + List> palletList = sqlSession.selectList("ecssMapper.searchCoDelPalletData", data); + if (palletList == null || palletList.isEmpty()) { + // 如果没有装箱数据,获取通知单明细数据 + palletList = sqlSession.selectList("ecssMapper.searchEcssCoDelNotifyDetail", data); + } + //计算总数和总箱数 + int totalQty = 0; + int totalBoxQty = 0; + for (Map item : palletList) { + Object qtyObj = item.get("qty"); + Object boxQtyObj = item.get("boxQty"); + int qty = 0; + int boxQty = 0; + if (qtyObj instanceof Number) { + qty = ((Number) qtyObj).intValue(); + } else if (qtyObj instanceof String) { + try { + qty = Integer.parseInt((String) qtyObj); + } catch (NumberFormatException e) { + qty = 0; // 或者根据需求处理异常 + } + } + if (boxQtyObj instanceof Number) { + boxQty = ((Number) boxQtyObj).intValue(); + } else if (boxQtyObj instanceof String) { + try { + boxQty = Integer.parseInt((String) boxQtyObj); + } catch (NumberFormatException e) { + boxQty = 0; // 或者根据需求处理异常 + } + } + totalQty += qty; + totalBoxQty += boxQty; + item.put("qty", qty); + item.put("boxQty", boxQty); + } + + template.addVar("totalQty", totalQty); + template.addVar("totalBox", totalBoxQty); + // 添加数据列表 + template.addListVarAll( palletList); + + try (XSSFWorkbook workbook = template.render(0)) { + workbook.write(response.getOutputStream()); + } + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename=\"装箱数据导入模版.xlsx\""); + response.flushBuffer(); + } catch (Exception e) { + log.error("导出装箱数据模版异常:{}", e.getMessage()); + e.printStackTrace(); + throw new RuntimeException("导出装箱数据模版异常:"+e.getMessage()); + } + } + /** * 导出出口货物委托书 */ diff --git a/src/main/resources/mapper/ecss/EcssCommonMapper.xml b/src/main/resources/mapper/ecss/EcssCommonMapper.xml index 2e1388c8..22159ef2 100644 --- a/src/main/resources/mapper/ecss/EcssCommonMapper.xml +++ b/src/main/resources/mapper/ecss/EcssCommonMapper.xml @@ -32,7 +32,8 @@ select b.po_no as customerPO,b.part_no,b.qty, a.box_qty as boxQty,b.rolls,b.pn,a.gross_weight as grossWeight,a.net_weight as netWeight, - #{cmcInvoice} as cmcInvoice,#{shippingMode} as shippingMode,#{destination} as destination + #{cmcInvoice} as cmcInvoice,#{shippingMode} as shippingMode,#{destination} as destination, + c.remark,CONVERT(varchar(10), #{readyDate}, 120) AS readyDate from ecss_CoDelBoxList a left join ecss_CoDelPalletDetail b on a.site=b.site and a.bu_no=b.bu_no and a.delNo=b.delNo and a.item_no=b.seq_no + left join ecss_CoDelNotifydetail c on b.site=c.site and b.bu_no=c.bu_no and b.delNo=c.delNo and b.notify_detail_item_no=c.item_no where a.site=#{site} and a.bu_no=#{buNo} and a.delNo=#{delNo} and b.site is not null diff --git a/src/main/resources/templates/packing-template.xlsx b/src/main/resources/templates/packing-template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..61206dd4b0df7041c2ed37b7448fa446532b3fb4 GIT binary patch literal 10716 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