|
|
|
@ -1464,14 +1464,14 @@ public class CoDelExcelServiceImpl implements CoDelExcelService { |
|
|
|
int rows = sheet.getPhysicalNumberOfRows(); |
|
|
|
|
|
|
|
// 根据图片分析Excel列位置: |
|
|
|
// 列A (索引0): 序号 (itemNo) - 对应发货通知单明细的序号 |
|
|
|
// 列B (索引1): 箱数 (boxQty) - 需要检测是否合并来判断是否合箱 |
|
|
|
// 列C (索引2): SKU/PN |
|
|
|
// 列D (索引3): SO |
|
|
|
// 列E (索引4): 数量 (qty) |
|
|
|
// 列F (索引5): 卷数 (rolls) |
|
|
|
// 列G (索引6): 毛重 (grossWeight) |
|
|
|
// 列H (索引7): 发票号 (invoice) |
|
|
|
// 列A (索引0): SKU/PN |
|
|
|
// 列B (索引1): SO |
|
|
|
// 列C (索引2): 数量 (qty) |
|
|
|
// 列D (索引3): 卷数 (rolls) |
|
|
|
// 列E (索引4): 毛重 (grossWeight) |
|
|
|
// 列F (索引5): 发票号 (invoice) |
|
|
|
// 列G (索引6): 序号 (itemNo) - 对应发货通知单明细的序号 |
|
|
|
// 列H (索引7): 箱数 (boxQty) - 需要检测是否合并来判断是否合箱 |
|
|
|
|
|
|
|
// 遍历每一行(从第二行开始,第一行是表头) |
|
|
|
int groupSeqNo = 0; // 箱子的组号 |
|
|
|
@ -1482,19 +1482,19 @@ public class CoDelExcelServiceImpl implements CoDelExcelService { |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 验证发票号是否匹配(列H,索引7) |
|
|
|
if (row.getCell(7) != null && !inData.getCmcInvoice().equals(getStringCellValue(row, 7))) { |
|
|
|
// 验证发票号是否匹配(列F,索引5) |
|
|
|
if (row.getCell(5) != null && !inData.getCmcInvoice().equals(getStringCellValue(row, 5))) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 验证必填字段 |
|
|
|
if (row.getCell(0) == null) { |
|
|
|
if (row.getCell(6) == null) { |
|
|
|
throw new RuntimeException("第" + (j + 1) + "行的序号不能为空!"); |
|
|
|
} |
|
|
|
if (row.getCell(2) == null) { |
|
|
|
if (row.getCell(0) == null) { |
|
|
|
throw new RuntimeException("第" + (j + 1) + "行的SKU/PN不能为空!"); |
|
|
|
} |
|
|
|
if (row.getCell(4) == null) { |
|
|
|
if (row.getCell(2) == null) { |
|
|
|
throw new RuntimeException("第" + (j + 1) + "行的数量不能为空!"); |
|
|
|
} |
|
|
|
|
|
|
|
@ -1506,32 +1506,32 @@ public class CoDelExcelServiceImpl implements CoDelExcelService { |
|
|
|
excelData.setBuNo(inData.getBuNo()); |
|
|
|
excelData.setDelNo(inData.getDelNo()); |
|
|
|
|
|
|
|
// 读取序号(对应发货通知单明细的itemNo) |
|
|
|
Integer notifyDetailItemNo = getIntegerCellValue(row, 0); |
|
|
|
excelData.setNotifyDetailItemNo(notifyDetailItemNo); |
|
|
|
// 读取SKU/PN(列A,索引0) |
|
|
|
excelData.setPn(getStringCellValue(row, 0)); |
|
|
|
|
|
|
|
// 读取SKU/PN |
|
|
|
excelData.setPn(getStringCellValue(row, 2)); |
|
|
|
// 读取SO(列B,索引1) |
|
|
|
//excelData.setPoNo(getStringCellValue(row, 1)); |
|
|
|
|
|
|
|
// 读取SO |
|
|
|
//excelData.setPoNo(getStringCellValue(row, 3)); |
|
|
|
// 读取数量(列C,索引2) |
|
|
|
excelData.setQty(getNumericCellValueOrDefault(row, 2, "数量")); |
|
|
|
|
|
|
|
// 读取数量 |
|
|
|
excelData.setQty(getNumericCellValueOrDefault(row, 4, "数量")); |
|
|
|
// 读取卷数(列D,索引3) |
|
|
|
BigDecimal rolls = getNumericCellValueOrDefault(row, 3); |
|
|
|
|
|
|
|
// 读取箱数(列B,索引1)- 用于判断是否合箱 |
|
|
|
BigDecimal boxQty = getNumericCellValueOrDefault(row, 1); |
|
|
|
// 读取毛重(列E,索引4) |
|
|
|
BigDecimal grossWeight = getNumericCellValueOrDefault(row, 4); |
|
|
|
|
|
|
|
// 读取卷数(列F,索引5) |
|
|
|
BigDecimal rolls = getNumericCellValueOrDefault(row, 5); |
|
|
|
// 读取序号(列G,索引6)- 对应发货通知单明细的itemNo |
|
|
|
Integer notifyDetailItemNo = getIntegerCellValue(row, 6); |
|
|
|
excelData.setNotifyDetailItemNo(notifyDetailItemNo); |
|
|
|
|
|
|
|
// 读取毛重(列G,索引6) |
|
|
|
BigDecimal grossWeight = getNumericCellValueOrDefault(row, 6); |
|
|
|
// 读取箱数(列H,索引7)- 用于判断是否合箱 |
|
|
|
BigDecimal boxQty = getNumericCellValueOrDefault(row, 7); |
|
|
|
|
|
|
|
// 验证合并单元格的一致性:如果箱数列合并,卷数和毛重列也必须合并 |
|
|
|
boolean boxQtyMerged = isCellInMergedRegion(sheet, j, 1); |
|
|
|
boolean rollsMerged = isCellInMergedRegion(sheet, j, 5); |
|
|
|
boolean grossWeightMerged = isCellInMergedRegion(sheet, j, 6); |
|
|
|
boolean boxQtyMerged = isCellInMergedRegion(sheet, j, 7); |
|
|
|
boolean rollsMerged = isCellInMergedRegion(sheet, j, 3); |
|
|
|
boolean grossWeightMerged = isCellInMergedRegion(sheet, j, 4); |
|
|
|
|
|
|
|
if (boxQtyMerged != rollsMerged || boxQtyMerged != grossWeightMerged) { |
|
|
|
throw new RuntimeException("第" + (j + 1) + "行错误:箱数、卷数、毛重列的合并状态必须一致!" + |
|
|
|
@ -1543,7 +1543,7 @@ public class CoDelExcelServiceImpl implements CoDelExcelService { |
|
|
|
// 判断是否是新的箱子: |
|
|
|
// 1. 如果箱数列有值且不在合并区域中,或者是合并区域的第一行,则是新箱子 |
|
|
|
// 2. 如果箱数列没有值或者在合并区域中但不是第一行,则属于上一个箱子 |
|
|
|
if (boxQty != null && !isMergedCellButNotFirst(sheet, j, 1)) { |
|
|
|
if (boxQty != null && !isMergedCellButNotFirst(sheet, j, 7)) { |
|
|
|
// 新的箱子 |
|
|
|
groupSeqNo++; |
|
|
|
excelData.setBoxQty(boxQty); |
|
|
|
|