From f70b446282ac914241a18901505442a0853bec27 Mon Sep 17 00:00:00 2001 From: wangyu <823267011@qq.com> Date: Sat, 27 Jun 2026 15:03:17 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=A0=BC=E5=90=88=E5=B9=B6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/ErpDeliveryExcelListener.java | 22 +++++++++++++++++++ .../impl/ErpPurchasePlanServiceImpl.java | 16 +++++++------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/klp-erp/src/main/java/com/klp/erp/listener/ErpDeliveryExcelListener.java b/klp-erp/src/main/java/com/klp/erp/listener/ErpDeliveryExcelListener.java index f7c9121d4..e210686d8 100644 --- a/klp-erp/src/main/java/com/klp/erp/listener/ErpDeliveryExcelListener.java +++ b/klp-erp/src/main/java/com/klp/erp/listener/ErpDeliveryExcelListener.java @@ -58,6 +58,11 @@ public class ErpDeliveryExcelListener extends AnalysisEventListener cd = e.getCellData(); + if (cd == null) { + return true; + } + if (cd.getType() == com.alibaba.excel.enums.CellDataTypeEnum.EMPTY) { + return true; + } + String s = cd.getStringValue(); + return s == null || s.trim().isEmpty(); + } catch (Throwable t) { + return false; + } + } + @Override public void doAfterAllAnalysed(AnalysisContext context) { // no-op diff --git a/klp-erp/src/main/java/com/klp/erp/service/impl/ErpPurchasePlanServiceImpl.java b/klp-erp/src/main/java/com/klp/erp/service/impl/ErpPurchasePlanServiceImpl.java index 6e9417dca..1db84a07a 100644 --- a/klp-erp/src/main/java/com/klp/erp/service/impl/ErpPurchasePlanServiceImpl.java +++ b/klp-erp/src/main/java/com/klp/erp/service/impl/ErpPurchasePlanServiceImpl.java @@ -389,23 +389,21 @@ public class ErpPurchasePlanServiceImpl implements IErpPurchasePlanService { batch.setFileName(StringUtils.isNotBlank(fileName) ? fileName : "到货表"); deliveryBatchMapper.insert(batch); - // 6) 合并单元格向下填充 + 单位换算 + 落库 + WMS到货标记 + // 6) 落库 + 单位换算 + WMS到货标记 + // 合并单元格:车号(F)几卷共用一车 → 向下填充让每卷都带车号; + // 数量(G=整车总重)/件数(H=整车件数) 是「整车合计」,只记在该车首行(其余行留空), + // 避免按行重复计数(用户:一共3件,不是每行3件)。 String lastTruckNo = null; - BigDecimal lastTruckWeight = null; - Integer lastPieceCount = null; int count = 0; int matched = 0; for (ErpPurchasePlanDeliveryImportVo row : rows) { if (StringUtils.isNotBlank(row.getTruckNo())) { lastTruckNo = row.getTruckNo(); - lastTruckWeight = row.getTruckWeight(); - lastPieceCount = row.getPieceCount(); } if (StringUtils.isBlank(row.getCoilNo()) && row.getCoilWeight() == null) { continue; } boolean arrived = StringUtils.isNotBlank(row.getCoilNo()) && wmsArrivedSet.contains(normCoil(row.getCoilNo())); - BigDecimal truckWeight = row.getTruckWeight() != null ? row.getTruckWeight() : lastTruckWeight; ErpPurchasePlanDelivery d = new ErpPurchasePlanDelivery(); d.setPlanId(planId); d.setBatchId(batch.getBatchId()); @@ -415,9 +413,11 @@ public class ErpPurchasePlanServiceImpl implements IErpPurchasePlanService { d.setSpec(row.getSpec()); d.setCoilNo(row.getCoilNo()); d.setCoilWeight(convertWeight(row.getCoilWeight(), kgConverted)); + // 车号:每卷归属的车(向下填充) d.setTruckNo(StringUtils.isNotBlank(row.getTruckNo()) ? row.getTruckNo() : lastTruckNo); - d.setTruckWeight(convertWeight(truckWeight, kgConverted)); - d.setPieceCount(row.getPieceCount() != null ? row.getPieceCount() : lastPieceCount); + // 整车总重 / 件数:整车合计,仅该车首行有值,不向下填充 + d.setTruckWeight(convertWeight(row.getTruckWeight(), kgConverted)); + d.setPieceCount(row.getPieceCount()); d.setSalesCode(row.getSalesCode()); d.setArrivalStation(row.getArrivalStation()); deliveryMapper.insert(d); From 2802972df2a2e8e553f77545f21baba05d69740f Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Sat, 27 Jun 2026 15:36:45 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix(excel):=20=E8=A7=A3=E5=86=B3=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E5=8D=95=E5=85=83=E6=A0=BC=E6=95=B0=E6=8D=AE=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 StringUtils 处理各种空白字符和占位符 - 修改数量和件数字段从 BigDecimal/Integer 改为 String 类型读取 - 在 Service 层添加 parseDecimal 和 parseInteger 方法处理数值转换 - 优化异常处理逻辑,支持合并单元格中的点号、横线等占位符 - 更新注释说明合并单元格的数据处理方式变更 --- .../vo/ErpPurchasePlanDeliveryImportVo.java | 10 ++-- .../listener/ErpDeliveryExcelListener.java | 20 ++++++-- .../impl/ErpPurchasePlanServiceImpl.java | 46 ++++++++++++++++++- 3 files changed, 67 insertions(+), 9 deletions(-) diff --git a/klp-erp/src/main/java/com/klp/erp/domain/vo/ErpPurchasePlanDeliveryImportVo.java b/klp-erp/src/main/java/com/klp/erp/domain/vo/ErpPurchasePlanDeliveryImportVo.java index ad89b660d..26807181a 100644 --- a/klp-erp/src/main/java/com/klp/erp/domain/vo/ErpPurchasePlanDeliveryImportVo.java +++ b/klp-erp/src/main/java/com/klp/erp/domain/vo/ErpPurchasePlanDeliveryImportVo.java @@ -10,7 +10,9 @@ import java.math.BigDecimal; * 采购计划到货导入模板(对应到货 Excel,一行一卷) * * 列:日期 牌号 规格 卷号 单卷重量 车号 数量 件数 销售 钢厂到站 - * 注:车号/数量/件数 为合并单元格,仅首行有值,导入时向下填充。 + * 注:车号/数量/件数 为合并单元格,仅首行有值; + * 数量/件数 使用 String 类型读取以避开 EasyExcel 对合并空白格的数值转换异常, + * 在 Service 层统一 parse 并校验。 * * @author klp * @date 2026-06-22 @@ -37,11 +39,13 @@ public class ErpPurchasePlanDeliveryImportVo { @ExcelProperty("车号") private String truckNo; + /** 整车总重(合并单元格,仅首行有值;读为 String 以兼容空白/点号等占位符) */ @ExcelProperty("数量") - private BigDecimal truckWeight; + private String truckWeight; + /** 整车件数(合并单元格,仅首行有值;读为 String 以兼容空白/点号等占位符) */ @ExcelProperty("件数") - private Integer pieceCount; + private String pieceCount; @ExcelProperty("销售") private String salesCode; diff --git a/klp-erp/src/main/java/com/klp/erp/listener/ErpDeliveryExcelListener.java b/klp-erp/src/main/java/com/klp/erp/listener/ErpDeliveryExcelListener.java index e210686d8..5b26b33c9 100644 --- a/klp-erp/src/main/java/com/klp/erp/listener/ErpDeliveryExcelListener.java +++ b/klp-erp/src/main/java/com/klp/erp/listener/ErpDeliveryExcelListener.java @@ -5,6 +5,7 @@ import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.exception.ExcelDataConvertException; import com.klp.common.exception.ServiceException; import com.klp.erp.domain.vo.ErpPurchasePlanDeliveryImportVo; +import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.Arrays; @@ -58,8 +59,8 @@ public class ErpDeliveryExcelListener extends AnalysisEventListener cd = e.getCellData(); @@ -83,7 +84,18 @@ public class ErpDeliveryExcelListener extends AnalysisEventListener queryDeliveryList(Long planId) { return deliveryMapper.selectVoList(Wrappers.lambdaQuery(ErpPurchasePlanDelivery.class) From 8d2cde4aadf9d31c77a824a80c651b6356786aed Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Sat, 27 Jun 2026 15:51:30 +0800 Subject: [PATCH 3/4] =?UTF-8?q?refactor(erp):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E4=BA=A4=E8=B4=A7=E5=8D=95=E4=B8=AD=E5=86=97?= =?UTF-8?q?=E4=BD=99=E7=9A=84=E6=95=B0=E9=87=8F=E5=92=8C=E4=BB=B6=E6=95=B0?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除主表中的数量列显示 - 移除子表中的件数列显示 - 优化表格布局结构 - 简化数据展示逻辑 --- klp-ui/src/views/erp/purchaseDelivery/index.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/klp-ui/src/views/erp/purchaseDelivery/index.vue b/klp-ui/src/views/erp/purchaseDelivery/index.vue index cdc5dac57..1d2acfaf5 100644 --- a/klp-ui/src/views/erp/purchaseDelivery/index.vue +++ b/klp-ui/src/views/erp/purchaseDelivery/index.vue @@ -110,7 +110,6 @@ - @@ -148,7 +147,6 @@ -