From e75981ab1f1364a17d7f84d6946085667661a22b Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Tue, 7 Apr 2026 16:58:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E6=80=BB=E4=BD=93=E7=A7=AF?= =?UTF-8?q?=E5=92=8C=E6=AF=9B=E9=87=8D=E6=98=AF=E8=BF=99=E7=A7=8D=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E5=88=97=E7=9A=84=EF=BC=8C=E5=88=99=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=8A=8A=E6=80=BB=E4=BD=93=E7=A7=AF=E6=95=B0=E5=AD=97=E6=94=BE?= =?UTF-8?q?=E5=9C=A8=E7=AC=AC=E4=B8=80=E4=B8=AA=E6=89=98=E4=B8=8A=EF=BC=8C?= =?UTF-8?q?=E6=AF=9B=E9=87=8D=E6=95=B0=E5=AD=97=E6=94=BE=E5=9C=A8=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=AE=B1=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CoDelExcelTXServiceImpl.java | 51 +++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java index 77d8c996..d03f645e 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java @@ -398,6 +398,9 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { int palletDetailItemNo = 1; Map boxListMap = new LinkedHashMap<>(); + // 记录已处理的合并区域,保证“总体积/毛重”只落在该合并区域的第一个托/箱 + Set handledVolumeMergedRegions = new HashSet<>(); + Set handledGrossWeightMergedRegions = new HashSet<>(); for (int r = 1; r <= lastRowNum; r++) { Row row = sheet.getRow(r); @@ -480,8 +483,22 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { // 判断是否是托盘的第一行 if (isFirstRowOfMergedRegion(sheet, r, headerMap.get("托数")) || !isMerged(sheet, r, headerMap.get("托数"))) { int palletCount = (int) Double.parseDouble(palletQtyStr); - String volumeStr = headerMap.containsKey("总体积") ? getMergedCellValue(sheet, r, headerMap.get("总体积")) : null; String outerSizeStr = headerMap.containsKey("外包尺寸") ? getMergedCellValue(sheet, r, headerMap.get("外包尺寸")) : null; + BigDecimal volume = null; + if (headerMap.containsKey("总体积")) { + int volumeCol = headerMap.get("总体积"); + String volumeRegionKey = getMergedRegionKey(sheet, r, volumeCol); + if (volumeRegionKey != null) { + if (handledVolumeMergedRegions.contains(volumeRegionKey)) { + volume = BigDecimal.ZERO; + } else { + volume = parseBigDecimal(getMergedCellValue(sheet, r, volumeCol)); + handledVolumeMergedRegions.add(volumeRegionKey); + } + } else { + volume = parseBigDecimal(getMergedCellValue(sheet, r, volumeCol)); + } + } String palletNo = palletSeqNo + "~" + (palletSeqNo + palletCount - 1); @@ -492,7 +509,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { palletHeader.setSeqNo(palletSeqNo); palletHeader.setPalletNo(palletNo); palletHeader.setPalletQty(palletCount); - palletHeader.setVolume(parseBigDecimal(volumeStr)); + palletHeader.setVolume(volume); if (outerSizeStr != null && !outerSizeStr.isEmpty()) { String[] sizes = outerSizeStr.split("\\*"); @@ -514,7 +531,21 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { // 4. 箱信息 EcssCoDelBoxList String netWeightStr = headerMap.containsKey("净重") ? getMergedCellValue(sheet, r, headerMap.get("净重")) : null; - String grossWeightStr = headerMap.containsKey("毛重") ? getMergedCellValue(sheet, r, headerMap.get("毛重")) : null; + BigDecimal grossWeight = null; + if (headerMap.containsKey("毛重")) { + int grossWeightCol = headerMap.get("毛重"); + String grossWeightRegionKey = getMergedRegionKey(sheet, r, grossWeightCol); + if (grossWeightRegionKey != null) { + if (handledGrossWeightMergedRegions.contains(grossWeightRegionKey)) { + grossWeight = BigDecimal.ZERO; + } else { + grossWeight = parseBigDecimal(getMergedCellValue(sheet, r, grossWeightCol)); + handledGrossWeightMergedRegions.add(grossWeightRegionKey); + } + } else { + grossWeight = parseBigDecimal(getMergedCellValue(sheet, r, grossWeightCol)); + } + } if (netWeightStr != null && !netWeightStr.isEmpty()) { if (isFirstRowOfMergedRegion(sheet, r, headerMap.get("净重")) || !isMerged(sheet, r, headerMap.get("净重"))) { @@ -525,7 +556,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { boxList.setSeqNo(currentPalletSeqNo); boxList.setItemNo(String.valueOf(boxItemNo++)); boxList.setNetWeight(parseBigDecimal(netWeightStr)); - boxList.setGrossWeight(parseBigDecimal(grossWeightStr)); + boxList.setGrossWeight(grossWeight); boxList.setCreateBy(data.getUsername()); boxList.setCreateDate(new Date()); boxList.setBoxQty(BigDecimal.ZERO); @@ -645,6 +676,18 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { return true; } + private String getMergedRegionKey(Sheet sheet, int row, int col) { + for (int i = 0; i < sheet.getNumMergedRegions(); i++) { + CellRangeAddress region = sheet.getMergedRegion(i); + if (row >= region.getFirstRow() && row <= region.getLastRow() && + col >= region.getFirstColumn() && col <= region.getLastColumn()) { + return region.getFirstRow() + "_" + region.getLastRow() + "_" + + region.getFirstColumn() + "_" + region.getLastColumn(); + } + } + return null; + } + private BigDecimal parseBigDecimal(String str) { if (str == null || str.trim().isEmpty()) return null; try {