From 186d76f9fcc117d26919213d037096914207b1bd Mon Sep 17 00:00:00 2001 From: zhaoqing <3160641494@qq.com> Date: Tue, 23 Jun 2026 17:12:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E8=88=AC=E8=B4=B8?= =?UTF-8?q?=E6=98=93=E7=9A=84=E8=AF=A6=E6=83=85=E6=95=B0=E6=8D=AE=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MaterialPushRecordService.java | 76 ++++++++++++++----- .../MaterialPushRecordApi.java | 7 +- 2 files changed, 60 insertions(+), 23 deletions(-) diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/materialPushRecord/service/MaterialPushRecordService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/materialPushRecord/service/MaterialPushRecordService.java index 84d1036ba..94999e8c1 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/materialPushRecord/service/MaterialPushRecordService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/materialPushRecord/service/MaterialPushRecordService.java @@ -4,14 +4,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mhd.common.core.web.page.TableDataInfo; import com.mhd.oms.domain.materialPushRecord.entity.MaterialPushRecord; import com.mhd.oms.domain.materialPushRecord.repository.mapper.MaterialPushRecordMapper; +import com.mhd.oms.domain.documentPushMaterialRecord.entity.DocumentPushMaterialRecord; +import com.mhd.oms.domain.documentPushMaterialRecord.repository.mapper.DocumentPushMaterialRecordMapper; import com.mhd.system.api.WmsServiceFeign; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; @Service @@ -24,11 +24,14 @@ public class MaterialPushRecordService { @Resource private WmsServiceFeign wmsServiceFeign; + @Resource + private DocumentPushMaterialRecordMapper documentPushMaterialRecordMapper; + /** * 按物料ID列表查询物料数据 - * 优先查物料推送快照,没有则调WMS查实时数据 + * 先按orderId查单证推送快照,没有再查物料推送快照,最后调WMS */ - public TableDataInfo getBatchByIds(List materialBaseInfoIds) { + public TableDataInfo getBatchByIds(List materialBaseInfoIds, Long orderId) { if (materialBaseInfoIds == null || materialBaseInfoIds.isEmpty()) { TableDataInfo emptyResult = new TableDataInfo(); emptyResult.setData(new ArrayList<>()); @@ -37,28 +40,61 @@ public class MaterialPushRecordService { return emptyResult; } - // 1. 先查物料推送记录表 - List pushRecords = materialPushRecordMapper.selectList( - new LambdaQueryWrapper() - .in(MaterialPushRecord::getMaterialBaseInfoId, materialBaseInfoIds) - .eq(MaterialPushRecord::getDelFlag, 1)); - - if (pushRecords != null && !pushRecords.isEmpty()) { + // 1. 先按orderId查单证推送物料记录表 + List docRecords = documentPushMaterialRecordMapper.selectList( + new LambdaQueryWrapper() + .eq(DocumentPushMaterialRecord::getOrderId, orderId) + .eq(DocumentPushMaterialRecord::getDelFlag, 1)); + if (docRecords != null && !docRecords.isEmpty()) { + // 有单证推送数据,按物料ID去重取最新一条,并检查是否覆盖所有请求的物料ID + Map latestMap = new HashMap<>(); + for (DocumentPushMaterialRecord r : docRecords) { + Long mid = r.getMaterialBaseInfoId(); + if (mid == null) continue; + DocumentPushMaterialRecord old = latestMap.get(mid); + if (old == null || (r.getPushTime() != null && old.getPushTime() == null) + || (r.getPushTime() != null && old.getPushTime() != null && r.getPushTime().after(old.getPushTime()))) { + latestMap.put(mid, r); + } + } // 检查是否所有请求的物料ID都查到了 - Set foundIds = pushRecords.stream() - .map(MaterialPushRecord::getMaterialBaseInfoId) - .collect(Collectors.toSet()); - if (foundIds.containsAll(materialBaseInfoIds)) { - // 全部ID都有推送快照,直接返回 + if (latestMap.keySet().containsAll(materialBaseInfoIds)) { + List resultList = new ArrayList<>(latestMap.values()); TableDataInfo result = new TableDataInfo(); - result.setData(pushRecords); - result.setTotal(pushRecords.size()); + result.setData(resultList); + result.setTotal(resultList.size()); result.setCode(200); return result; } } - // 2. 有物料没有推送数据,调WMS查全部实时数据 + // 2. 查物料推送记录表 + List pushRecords = materialPushRecordMapper.selectList( + new LambdaQueryWrapper() + .in(MaterialPushRecord::getMaterialBaseInfoId, materialBaseInfoIds) + .eq(MaterialPushRecord::getDelFlag, 1)); + if (pushRecords != null && !pushRecords.isEmpty()) { + // 按物料ID去重取最新一条 + Map latestMap = new HashMap<>(); + for (MaterialPushRecord r : pushRecords) { + Long mid = r.getMaterialBaseInfoId(); + if (mid == null) continue; + MaterialPushRecord old = latestMap.get(mid); + if (old == null || (r.getPushTime() != null && old.getPushTime() == null) + || (r.getPushTime() != null && old.getPushTime() != null && r.getPushTime().after(old.getPushTime()))) { + latestMap.put(mid, r); + } + } + if (latestMap.keySet().containsAll(materialBaseInfoIds)) { + TableDataInfo result = new TableDataInfo(); + result.setData(new ArrayList<>(latestMap.values())); + result.setTotal(latestMap.size()); + result.setCode(200); + return result; + } + } + + // 3. 都没有全命中,调WMS查全部实时数据 try { return wmsServiceFeign.getBatchByIds(materialBaseInfoIds); } catch (Exception e) { diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/materialPushRecord/MaterialPushRecordApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/materialPushRecord/MaterialPushRecordApi.java index e2448e49f..2d034c3de 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/materialPushRecord/MaterialPushRecordApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/materialPushRecord/MaterialPushRecordApi.java @@ -17,9 +17,10 @@ public class MaterialPushRecordApi { @Resource private MaterialPushRecordService materialPushRecordService; - @ApiOperation("批量查询物料推送数据(优先查推送快照,没有则调WMS查实时数据)") + @ApiOperation("批量查询物料推送数据(先按orderId查单证推送快照,再按物料id查推送快照,最后调WMS)") @GetMapping("/getBatchByIds") - public AjaxResult getBatchByIds(@RequestParam("materialBaseInfoIds") List materialBaseInfoIds) { - return AjaxResult.success(materialPushRecordService.getBatchByIds(materialBaseInfoIds)); + public AjaxResult getBatchByIds(@RequestParam("materialBaseInfoIds") List materialBaseInfoIds, + @RequestParam("orderId") Long orderId) { + return AjaxResult.success(materialPushRecordService.getBatchByIds(materialBaseInfoIds, orderId)); } }