|
|
@ -398,6 +398,9 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
int palletDetailItemNo = 1; |
|
|
int palletDetailItemNo = 1; |
|
|
|
|
|
|
|
|
Map<String, EcssCoDelBoxListData> boxListMap = new LinkedHashMap<>(); |
|
|
Map<String, EcssCoDelBoxListData> boxListMap = new LinkedHashMap<>(); |
|
|
|
|
|
// 记录已处理的合并区域,保证“总体积/毛重”只落在该合并区域的第一个托/箱 |
|
|
|
|
|
Set<String> handledVolumeMergedRegions = new HashSet<>(); |
|
|
|
|
|
Set<String> handledGrossWeightMergedRegions = new HashSet<>(); |
|
|
|
|
|
|
|
|
for (int r = 1; r <= lastRowNum; r++) { |
|
|
for (int r = 1; r <= lastRowNum; r++) { |
|
|
Row row = sheet.getRow(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("托数"))) { |
|
|
if (isFirstRowOfMergedRegion(sheet, r, headerMap.get("托数")) || !isMerged(sheet, r, headerMap.get("托数"))) { |
|
|
int palletCount = (int) Double.parseDouble(palletQtyStr); |
|
|
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; |
|
|
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); |
|
|
String palletNo = palletSeqNo + "~" + (palletSeqNo + palletCount - 1); |
|
|
|
|
|
|
|
|
@ -492,7 +509,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
palletHeader.setSeqNo(palletSeqNo); |
|
|
palletHeader.setSeqNo(palletSeqNo); |
|
|
palletHeader.setPalletNo(palletNo); |
|
|
palletHeader.setPalletNo(palletNo); |
|
|
palletHeader.setPalletQty(palletCount); |
|
|
palletHeader.setPalletQty(palletCount); |
|
|
palletHeader.setVolume(parseBigDecimal(volumeStr)); |
|
|
|
|
|
|
|
|
palletHeader.setVolume(volume); |
|
|
|
|
|
|
|
|
if (outerSizeStr != null && !outerSizeStr.isEmpty()) { |
|
|
if (outerSizeStr != null && !outerSizeStr.isEmpty()) { |
|
|
String[] sizes = outerSizeStr.split("\\*"); |
|
|
String[] sizes = outerSizeStr.split("\\*"); |
|
|
@ -514,7 +531,21 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
|
|
|
|
|
// 4. 箱信息 EcssCoDelBoxList |
|
|
// 4. 箱信息 EcssCoDelBoxList |
|
|
String netWeightStr = headerMap.containsKey("净重") ? getMergedCellValue(sheet, r, headerMap.get("净重")) : null; |
|
|
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 (netWeightStr != null && !netWeightStr.isEmpty()) { |
|
|
if (isFirstRowOfMergedRegion(sheet, r, headerMap.get("净重")) || !isMerged(sheet, r, headerMap.get("净重"))) { |
|
|
if (isFirstRowOfMergedRegion(sheet, r, headerMap.get("净重")) || !isMerged(sheet, r, headerMap.get("净重"))) { |
|
|
@ -525,7 +556,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
boxList.setSeqNo(currentPalletSeqNo); |
|
|
boxList.setSeqNo(currentPalletSeqNo); |
|
|
boxList.setItemNo(String.valueOf(boxItemNo++)); |
|
|
boxList.setItemNo(String.valueOf(boxItemNo++)); |
|
|
boxList.setNetWeight(parseBigDecimal(netWeightStr)); |
|
|
boxList.setNetWeight(parseBigDecimal(netWeightStr)); |
|
|
boxList.setGrossWeight(parseBigDecimal(grossWeightStr)); |
|
|
|
|
|
|
|
|
boxList.setGrossWeight(grossWeight); |
|
|
boxList.setCreateBy(data.getUsername()); |
|
|
boxList.setCreateBy(data.getUsername()); |
|
|
boxList.setCreateDate(new Date()); |
|
|
boxList.setCreateDate(new Date()); |
|
|
boxList.setBoxQty(BigDecimal.ZERO); |
|
|
boxList.setBoxQty(BigDecimal.ZERO); |
|
|
@ -645,6 +676,18 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
return true; |
|
|
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) { |
|
|
private BigDecimal parseBigDecimal(String str) { |
|
|
if (str == null || str.trim().isEmpty()) return null; |
|
|
if (str == null || str.trim().isEmpty()) return null; |
|
|
try { |
|
|
try { |
|
|
|