Browse Source

装箱数据导入模板他们希望将序号、箱数放到发票号后面

java8
han\hanst 2 weeks ago
parent
commit
e5bd5d08a6
  1. 64
      src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java

64
src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java

@ -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);

Loading…
Cancel
Save