diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java index 59771c36e..6bb36eead 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java @@ -21,8 +21,6 @@ import java.util.Map; @Service public class ExcelParseService { - @Autowired - private IStockOutOrderService stockOutOrderService; @Autowired private StockOutOrderApplicationService stockOutOrderApplicationService; /** @@ -31,47 +29,39 @@ public class ExcelParseService { * @return 解析后的出仓委托单对象 */ public StockOutOrderDO parseOutboundOrderExcel(MultipartFile file) throws IOException { - // 1. 解析表头信息(前11行) + HeaderListener headerListener = new HeaderListener(); - // 读取前11行表头 - // 读取第一个sheet,只读前11行 ReadSheet headerSheet = EasyExcel.readSheet(0) .headRowNumber(0) .build(); ExcelReader headerReader = EasyExcel.read(file.getInputStream()) - .autoCloseStream(false) // 不自动关闭流,因为后面还需要使用 + .autoCloseStream(false) .registerReadListener(headerListener) - .registerConverter(new NoConvertConverter()) // 注册自定义转换器 - .headRowNumber(0) // 从第0行开始读取表头 + .registerConverter(new NoConvertConverter()) + .headRowNumber(0) .build(); // 通过监听器控制只读取前11行 headerReader.read(headerSheet); - // 注意:这里不能关闭reader,因为后面还要用输入流 - - // 2. 解析商品明细(从第12行开始) - // 重新获取输入流 InputStream itemInputStream = file.getInputStream(); ItemListener itemListener = new ItemListener(); // 商品明细需要跳过前11行,从第12行开始读取 ExcelReader itemReader = EasyExcel.read(itemInputStream) - .autoCloseStream(false) // 不自动关闭流 + .autoCloseStream(false) .registerReadListener(itemListener) - .registerConverter(new NoConvertConverter()) // 注册自定义转换器 - .headRowNumber(12) // 关键:设置headRowNumber为11,表示前11行是表头,从第12行开始读取数据 + .registerConverter(new NoConvertConverter()) + .headRowNumber(12) .build(); ReadSheet itemSheet = EasyExcel.readSheet(0).build(); itemReader.read(itemSheet); - // 关闭读取器 itemReader.finish(); - // 3. 组装完整的出仓委托单 StockOutOrderDO stockOutOrder = headerListener.getStockOutOrder(); stockOutOrder.setMaterialDetailList(itemListener.getItemList()); stockOutOrderApplicationService.insert(stockOutOrder); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/HeaderListener.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/HeaderListener.java index 690c7da94..728715c45 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/HeaderListener.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/HeaderListener.java @@ -45,11 +45,10 @@ public class HeaderListener extends AnalysisEventListener> case 5: // 第6行:承运方、tel、柜号、司机签名 stockOutOrder.setCarrier(getStringValue(rowData[2])); stockOutOrder.setTel(getStringValue(rowData[5])); - stockOutOrder.setContainerNo(getStringValue(rowData[12])); + stockOutOrder.setContainerNoName(getStringValue(rowData[12])); stockOutOrder.setDriverSign(getStringValue(rowData[16])); break; case 6: // 第7行:出仓日期、fax、运输方式、申报地关区 - // 将LocalDate转换为Date LocalDate localDate = parseDate(getStringValue(rowData[2])); if (localDate != null) { Date date = Date.from(localDate.atStartOfDay(ZoneId.of("UTC")).toInstant()); @@ -161,7 +160,6 @@ public class HeaderListener extends AnalysisEventListener> return null; } try { - // 处理Excel中的日期格式(如"2026-01-05 00:00:00") if (dateStr.contains(" ")) { dateStr = dateStr.split(" ")[0]; } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ItemListener.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ItemListener.java index c307cc361..0d0243a60 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ItemListener.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ItemListener.java @@ -2,8 +2,6 @@ package com.mhd.wms.domain.stockOutOrder.repository.listener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; -import com.alibaba.excel.metadata.data.ReadCellData; -import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail; import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailDO; import lombok.Getter; import java.math.BigDecimal; @@ -11,7 +9,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collections; -import java.util.stream.Collectors; /** * 解析商品明细的监听器(从第12行开始) @@ -38,7 +35,7 @@ public class ItemListener extends AnalysisEventListener> { OutMaterialDetailDO item = new OutMaterialDetailDO(); // 填充商品明细数据 - //商品名称 规格型号/ITEM 商品SKU码 Invoice No. 申报数量 申报单位 升 箱数 件数 尺寸 仓库数量 "总净重 + //商品名称 料号 规格型号/ITEM 商品SKU码 Invoice No. 申报数量 申报单位 升 箱数 件数 尺寸 仓库数量 "总净重 //(KG)" 总毛重 (KG) "总体积 //(CBM)" 总面积(SQM) Batch Ref NO's Sheet Ref NO's 原产国 箱号/卡板号 总价 币制 备注 item.setCommodityName(getStringValue(rowData[1])); diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java index e5b791cdd..39756345a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java @@ -57,26 +57,26 @@ public class StockOutOrderApi extends BaseController { * 上传并解析出仓委托单Excel */ @PostMapping("/import") - public ResponseEntity parseOutboundOrder( + public AjaxResult parseOutboundOrder( @RequestParam("file") MultipartFile file) { // 验证文件 if (file.isEmpty()) { - return ResponseEntity.badRequest().body(null); + return error("文件为空"); } // 验证文件类型 String fileName = file.getOriginalFilename(); if (fileName == null || !fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { - return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE).body(null); + return error("文件类型错误"); } try { // 解析Excel并返回结果 StockOutOrderDO result = excelParseService.parseOutboundOrderExcel(file); - return ResponseEntity.ok(result); + return AjaxResult.success(result); } catch (IOException e) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); + return error("解析失败"); } }