Browse Source

如果总体积和毛重是这种合并列的,则需要把总体积数字放在第一个托上,毛重数字放在第一个箱上

master
han\hanst 7 days ago
parent
commit
e75981ab1f
  1. 51
      src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java

51
src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java

@ -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 {

Loading…
Cancel
Save