From 735cf9af9f6f6dd0ae73a8fe7ea7ca410c2b4628 Mon Sep 17 00:00:00 2001 From: rcx <3084692334@qq.com> Date: Tue, 25 Aug 2026 15:07:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(oms):=E5=85=A5=E5=BA=93=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E9=A5=AE=E7=94=A8=E6=97=A5=E6=9C=9F=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E4=BF=AE=E5=A4=8D=EF=BC=8C=E5=85=A5=E5=BA=93=E5=8D=95?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E8=81=94=E6=9F=A5=E5=B8=A6=E5=87=BA=E9=A5=AE?= =?UTF-8?q?=E7=94=A8=E6=9C=89=E6=95=88=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 入库/执行入库Excel解析监听器:扩充日期格式支持(yyyy年M月d日、d/M/yyyy、M/d/yyyy、dd.MM.yyyy等16种), 改为严格解析防止宽松解析产生公元1~99年脏数据,新增Excel日期序列号兜底及年份合理性校验, 解析失败抛出带行号的明确提示而非静默置空 2. parse-excel接口异常时返回具体错误信息(原为空body 500) 3. 入库单列表queryList联查明细表取最早饮用日期(MIN drink_date),PO及resultMap补drinkDate映射 --- .../listener/StockInExcelListener.java | 43 +++++++++++++++--- .../listener/StockInExcelListener.java | 45 ++++++++++++++++--- .../po/ReservationStockInOrderPO.java | 10 +++++ .../ReservationStockInOrderApi.java | 12 +++-- .../ReservationStockInOrderMapper.xml | 10 ++++- 5 files changed, 105 insertions(+), 15 deletions(-) diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/listener/StockInExcelListener.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/listener/StockInExcelListener.java index 4b516caf0..1fb56f3bb 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/listener/StockInExcelListener.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/listener/StockInExcelListener.java @@ -28,7 +28,11 @@ public class StockInExcelListener extends AnalysisEventListener 2100) { + throw new RuntimeException("第" + currentRowNum + "行日期格式无法识别:'" + rawValue + + "',请使用4位年份,如 2026/08/25、2026年8月25日"); + } + } + // ---------------------- Getter方法(供Service层获取解析结果) ---------------------- public StockInHeader getStockInHeader() { return stockInHeader; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/StockInExcelListener.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/StockInExcelListener.java index 9d711ac98..e5f4a121a 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/StockInExcelListener.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/StockInExcelListener.java @@ -26,9 +26,13 @@ public class StockInExcelListener extends AnalysisEventListener productDetailList = new ArrayList<>(); - // 支持的日期格式(用于String转Date) + // 支持的日期格式(用于String转Date),覆盖中文/港式(日/月/年)/美式(月/日/年)/欧式等常见写法 private static final String[] SUPPORTED_DATE_FORMATS = { - "yyyy-MM-dd", "yyyy/MM/dd", "yyyyMMdd", "yyyy-MM-dd HH:mm:ss" + "yyyy-MM-dd", "yyyy/MM/dd", "yyyyMMdd", "yyyy-MM-dd HH:mm:ss", + "yyyy/M/d", "yyyy.M.d", "yyyy-M-d", + "yyyy年M月d日", "yyyy年MM月dd日", + "d/M/yyyy", "d/M/yy", "M/d/yyyy", "M/d/yy", + "dd.MM.yyyy", "d-MMM-yyyy", "yyyyMMddHHmmss" }; // 行号标记(用于区分第一行和表格行) @@ -65,6 +69,9 @@ public class StockInExcelListener extends AnalysisEventListener 2100) { + throw new RuntimeException("第" + currentRowNum + "行日期格式无法识别:'" + rawValue + + "',请使用4位年份,如 2026/08/25、2026年8月25日"); + } + } + // ---------------------- Getter方法(供Service层获取解析结果) ---------------------- public StockInHeader getStockInHeader() { return stockInHeader; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/po/ReservationStockInOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/po/ReservationStockInOrderPO.java index 9f3e61c01..932142c33 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/po/ReservationStockInOrderPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/po/ReservationStockInOrderPO.java @@ -367,6 +367,16 @@ public class ReservationStockInOrderPO extends BaseVOEntity { @Excel(name = "下单日期", width = 30, dateFormat = "yyyy-MM-dd") private Date orderDate; + /** + * 饮用有效日期:来自明细(reservation_in_material_detail.drink_date)的聚合值(最早), + * 仅列表查询(queryList)联查带出,主表无此列 + */ + @ApiModelProperty("饮用有效日期(明细最早饮用日期)") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Excel(name = "饮用有效日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date drinkDate; + @ApiModelProperty("业务单号") @Excel(name = "业务单号") diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java index 92f9b315e..e7894a630 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java @@ -251,11 +251,17 @@ public class ReservationStockInOrderApi extends BaseController { } catch (IllegalArgumentException e) { // 参数错误(如文件为空) // LOGGER.error("Excel解析参数错误:{}", e.getMessage()); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + Map result = new HashMap<>(); + result.put("code", 400); + result.put("msg", e.getMessage()); + return new ResponseEntity<>(result, HttpStatus.BAD_REQUEST); } catch (Exception e) { - // 其他解析异常 + // 其他解析异常(如日期格式无法识别),返回具体原因便于用户修正文件 // LOGGER.error("Excel解析失败:{}", e.getMessage(), e); - return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + Map result = new HashMap<>(); + result.put("code", 500); + result.put("msg", e.getMessage()); + return new ResponseEntity<>(result, HttpStatus.INTERNAL_SERVER_ERROR); } } diff --git a/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml b/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml index c4eea5ae8..8d7578d06 100644 --- a/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml +++ b/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml @@ -109,6 +109,8 @@ + + @@ -513,8 +515,14 @@