From a74afd837c8ee658e00cf4b7011c7ed7b8ed919b Mon Sep 17 00:00:00 2001 From: rcx <3084692334@qq.com> Date: Mon, 31 Aug 2026 15:22:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(oms):=E5=85=A5=E5=BA=93=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E5=8D=95=E6=96=B0=E5=A2=9E=E9=A1=B5=E9=9D=A2=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=8C=89=E7=89=A9=E6=96=99=E7=BC=96=E5=8F=B7=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E6=89=B9=E6=AC=A1=E6=9C=80=E8=BF=915?= =?UTF-8?q?=E6=9D=A1=E8=BF=87=E6=9C=9F=E6=97=A5=E6=9C=9F=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=20/reservationMaterialInventoryApi/queryRecentExpiryDates/{mat?= =?UTF-8?q?erialCode}=EF=BC=8C=E6=8C=89=E7=89=A9=E6=96=99=E7=BC=96?= =?UTF-8?q?=E5=8F=B7=E5=85=B3=E8=81=94=20NGWL=5FTEST=5FWMS.material=5Fbase?= =?UTF-8?q?=5Finfo=20=E6=9F=A5=20reservation=5Fmaterial=5Finventory=20?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E6=89=B9=E6=AC=A1=EF=BC=8C=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E6=97=A5=E6=9C=9F+=E6=89=B9=E6=AC=A1?= =?UTF-8?q?=E5=8F=B7=EF=BC=88date=5Fformat=20=E6=8C=89=E5=A4=A9=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E3=80=81=E5=88=B0=E6=9C=9F=E6=97=A5=E5=80=92=E5=BA=8F?= =?UTF-8?q?=E3=80=81limit=205=EF=BC=89=EF=BC=8C=E4=BE=9B=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E5=9B=9E=E6=98=BE=EF=BC=88=E4=B9=9F=E5=8F=AF?= =?UTF-8?q?=E7=82=B9=E6=97=A5=E6=9C=9F=E5=9B=BE=E6=A0=87=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E9=80=89=E6=8B=A9=EF=BC=89=EF=BC=9B=E9=9D=9E=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E7=A7=9F=E6=88=B7=E6=8C=89=E7=99=BB=E5=BD=95=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=B8=80=E7=BA=A7=E7=BB=84=E7=BB=87=20top=5Forganization=5Fid?= =?UTF-8?q?=20=E8=BF=87=E6=BB=A4=EF=BC=88=E4=B8=8E=20/list=20=E4=B8=80?= =?UTF-8?q?=E8=87=B4=EF=BC=89=EF=BC=9B=E6=B2=BF=E7=94=A8=20Api=E2=86=92App?= =?UTF-8?q?licationService=E2=86=92DomainService=E2=86=92Facade=E2=86=92Im?= =?UTF-8?q?pl=E2=86=92Mapper=20=E5=88=86=E5=B1=82=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=93=8D=E5=BA=94=E5=AF=B9=E8=B1=A1=20MaterialInvento?= =?UTF-8?q?ryExpiryBatchPO(expiryDate/batchNumber)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IReservationMaterialInventoryService.java | 6 +++++ .../ReservationMaterialInventoryMapper.java | 4 +++ .../ReservationMaterialInventoryImpl.java | 9 +++++++ .../po/MaterialInventoryExpiryBatchPO.java | 25 +++++++++++++++++++ ...onMaterialInventoryApplicationService.java | 17 +++++++++++++ ...rvationMaterialInventoryDomainService.java | 8 ++++++ .../ReservationMaterialInventoryApi.java | 14 +++++++++++ .../MaterialInventoryMapper.xml | 17 +++++++++++++ 8 files changed, 100 insertions(+) create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/MaterialInventoryExpiryBatchPO.java diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/facade/IReservationMaterialInventoryService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/facade/IReservationMaterialInventoryService.java index 5344f3163..bd81f1a21 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/facade/IReservationMaterialInventoryService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/facade/IReservationMaterialInventoryService.java @@ -2,6 +2,7 @@ package com.mhd.oms.domain.reservationMaterialInventory.repository.facade; import com.baomidou.mybatisplus.extension.service.IService; import com.mhd.oms.domain.reservationMaterialInventory.entity.ReservationMaterialInventory; +import com.mhd.oms.domain.reservationMaterialInventory.repository.po.MaterialInventoryExpiryBatchPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryQueryListPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.MaterialInventoryParamDO; @@ -113,4 +114,9 @@ public interface IReservationMaterialInventoryService extends IService selectRecentExpiryBatches(String materialCode, Long topOrganizationId); } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/mapper/ReservationMaterialInventoryMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/mapper/ReservationMaterialInventoryMapper.java index e655c623d..a73033a6b 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/mapper/ReservationMaterialInventoryMapper.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/mapper/ReservationMaterialInventoryMapper.java @@ -2,6 +2,7 @@ package com.mhd.oms.domain.reservationMaterialInventory.repository.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mhd.oms.domain.reservationMaterialInventory.entity.ReservationMaterialInventory; +import com.mhd.oms.domain.reservationMaterialInventory.repository.po.MaterialInventoryExpiryBatchPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.MaterialBarCodePO; import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.MaterialBaseInfo; @@ -36,4 +37,7 @@ public interface ReservationMaterialInventoryMapper extends BaseMapper getInfoByMaterialBaseInfoIds(@Param("id") Long id); + + //入库业务单新增:根据物料编号查询库存批次去重后的过期日期+批次号(最近5条),供前端下拉回显 + public List selectRecentExpiryBatches(@Param("materialCode") String materialCode, @Param("topOrganizationId") Long topOrganizationId); } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java index d7840252b..d666fc65a 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java @@ -13,6 +13,7 @@ import com.mhd.oms.domain.reservationInventoryAdjustmentRecord.repository.mapper import com.mhd.oms.domain.reservationMaterialInventory.entity.ReservationMaterialInventory; import com.mhd.oms.domain.reservationMaterialInventory.repository.facade.IReservationMaterialInventoryService; import com.mhd.oms.domain.reservationMaterialInventory.repository.mapper.ReservationMaterialInventoryMapper; +import com.mhd.oms.domain.reservationMaterialInventory.repository.po.MaterialInventoryExpiryBatchPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryQueryListPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.MaterialBarCodePO; @@ -120,6 +121,14 @@ public class ReservationMaterialInventoryImpl extends ServiceImpl selectRecentExpiryBatches(String materialCode, Long topOrganizationId) { + return materialInventoryMapper.selectRecentExpiryBatches(materialCode, topOrganizationId); + } + @Override public Boolean omsEdit(MaterialInventoryOmsParamDO materialInventoryOmsParamDO) { String inOrderNumber = materialInventoryOmsParamDO.getInOrderNumber(); diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/MaterialInventoryExpiryBatchPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/MaterialInventoryExpiryBatchPO.java new file mode 100644 index 000000000..eb47478e3 --- /dev/null +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/MaterialInventoryExpiryBatchPO.java @@ -0,0 +1,25 @@ +package com.mhd.oms.domain.reservationMaterialInventory.repository.po; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 物料库存批次过期日期对象(入库业务单新增页面下拉回显) + * + * @author rcx + * @date 2026-08-31 + */ +@Data +@ApiModel(value = "物料库存批次过期日期", description = "物料库存批次过期日期响应对象") +public class MaterialInventoryExpiryBatchPO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("过期日期 yyyy-MM-dd") + private String expiryDate; + + @ApiModelProperty("批次号") + private String batchNumber; +} diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryApplicationService.java index fe6184862..c41ef1051 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryApplicationService.java @@ -8,6 +8,7 @@ import com.mhd.common.core.utils.bean.BeanUtils; import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.oms.domain.reservationMaterialInventory.repository.mapper.ReservationMaterialInventoryMapper; +import com.mhd.oms.domain.reservationMaterialInventory.repository.po.MaterialInventoryExpiryBatchPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryQueryListPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.MaterialBarCodePO; @@ -185,6 +186,22 @@ public class ReservationMaterialInventoryApplicationService { return materialInventoryDomainService.getInventoryByStorageLocationIdAndMaterialBaseInfoId(storageLocationId, materialBaseInfoId); } + /** + * 根据物料编号查询库存批次最近5条过期日期+批次号(入库业务单新增页面下拉回显) + * 与 queryList 一致:按登录用户一级组织(租户)过滤,一级组织(平台)不限制 + */ + public List selectRecentExpiryBatches(String materialCode) { + Long topOrganizationId = null; + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser != null && loginUser.getUserPo() != null) { + Long loginTopOrgId = loginUser.getUserPo().getTopOrganizationId(); + if (loginTopOrgId != null && loginTopOrgId != 1) { + topOrganizationId = loginTopOrgId; + } + } + return materialInventoryDomainService.selectRecentExpiryBatches(materialCode, topOrganizationId); + } + /** * @description:库存查询列表 * @param materialInventoryQueryListDO diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryDomainService.java index fc73a5f42..40cc12ad1 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryDomainService.java @@ -3,6 +3,7 @@ package com.mhd.oms.domain.reservationMaterialInventory.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mhd.oms.domain.reservationMaterialInventory.entity.ReservationMaterialInventory; import com.mhd.oms.domain.reservationMaterialInventory.repository.facade.IReservationMaterialInventoryService; +import com.mhd.oms.domain.reservationMaterialInventory.repository.po.MaterialInventoryExpiryBatchPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryQueryListPO; import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.ReservationMaterialInventoryDO; @@ -88,6 +89,13 @@ public class ReservationMaterialInventoryDomainService { return materialInventory.getInventoryQuantity(); } + /** + * 根据物料编号查询库存批次最近5条过期日期+批次号(入库业务单新增页面下拉回显) + */ + public List selectRecentExpiryBatches(String materialCode, Long topOrganizationId) { + return materialInventoryService.selectRecentExpiryBatches(materialCode, topOrganizationId); + } + /** * @description:库存查询列表 * @param materialInventoryQueryListDO diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java index 16f52281b..bae725a5c 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java @@ -177,6 +177,20 @@ public class ReservationMaterialInventoryApi extends BaseController { return AjaxResult.success(materialInventoryApplicationService.getInventoryByStorageLocationIdAndMaterialBaseInfoId(storageLocationId, materialBaseInfoId)); } + /** + * 入库业务单新增页面:根据物料编号查询其库存批次过期日期+批次号,去重取最近5条, + * 供前端下拉回显;用户也可点击右侧"日期"小图标手动选择日期 + */ + @ApiOperation("根据物料编号查询库存批次最近5条过期日期+批次号") + @GetMapping(value = "/queryRecentExpiryDates/{materialCode}") + public AjaxResult queryRecentExpiryDates(@PathVariable("materialCode") String materialCode) + { + if (StringUtils.isBlank(materialCode)) { + return AjaxResult.error("物料编号不能为空"); + } + return AjaxResult.success(materialInventoryApplicationService.selectRecentExpiryBatches(materialCode)); + } + /** diff --git a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml index dd3ab9e73..1bea8b465 100644 --- a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml +++ b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml @@ -557,4 +557,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" FROM NGWL_TEST_WMS.material_bar_code WHERE material_base_info_id = #{id} AND del_flag = 1 + + + \ No newline at end of file