From e934810ee23e67a479e29a027d4897d026889b7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 9 Jun 2026 17:31:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(qms):=20=E6=B7=BB=E5=8A=A0=E7=89=A9?= =?UTF-8?q?=E6=96=99=E7=B1=BB=E5=88=AB=E7=BA=A7=E5=85=8D=E6=A3=80=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 IQmsExemptCategoryService 中新增 batchCheckExempt 方法用于批量判断物料类别免检 - 在 MaterialController 中实现物料级和类别级双重免检判断逻辑 - 新增 QmsExemptCategoryMapper 的 batchCheckExempt 查询方法 - 实现类别级免检的 SQL 查询逻辑,支持按供应商和物料号批量匹配 - 在 QmsExemptCategoryServiceImpl 中完成功能实现和服务层调用 --- .../external/MaterialController.java | 34 +++++++++++++++++-- .../mapper/QmsExemptCategoryMapper.java | 8 +++++ .../service/IQmsExemptCategoryService.java | 8 +++++ .../impl/QmsExemptCategoryServiceImpl.java | 33 ++++++++++++++++++ .../mapper/QmsExemptCategoryMapper.xml | 24 +++++++++++++ 5 files changed, 105 insertions(+), 2 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/external/MaterialController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/external/MaterialController.java index 1bd67ff3..a338cf4e 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/external/MaterialController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/external/MaterialController.java @@ -3,6 +3,7 @@ package com.nflg.qms.admin.controller.external; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.qo.ExemptMaterialCheckQO; import com.nflg.wms.common.pojo.vo.ExemptMaterialCheckVO; +import com.nflg.wms.repository.service.IQmsExemptCategoryService; import com.nflg.wms.repository.service.IQmsExemptMaterialService; import com.nflg.wms.starter.BaseController; import jakarta.annotation.Resource; @@ -15,6 +16,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * 对外接口-物料信息 @@ -28,15 +31,42 @@ public class MaterialController extends BaseController { @Resource private IQmsExemptMaterialService exemptMaterialService; + @Resource + private IQmsExemptCategoryService exemptCategoryService; + /** * 批量判断物料是否免检 * - 参数为供应商编号和物料编号的组合列表 - * - 根据系统中已审核、已启用且在有效期内的免检设置判断 + * - 先按免检物料判断,命中则视为免检;未命中再按免检类别判断 + * - 仅根据系统中已审核、已启用且在有效期内的免检设置判断 * - 返回每个组合的免检标志(exempt=true 表示免检) */ @PostMapping("batchCheckExempt") public ApiResult> batchCheckExempt( @Valid @RequestBody @NotEmpty List request) { - return ApiResult.success(exemptMaterialService.batchCheckExempt(request)); + // 物料级免检判断 + List result = exemptMaterialService.batchCheckExempt(request); + + // 物料级未命中的组合,再做类别级免检判断 + List remaining = result.stream() + .filter(vo -> !Boolean.TRUE.equals(vo.getExempt())) + .map(vo -> new ExemptMaterialCheckQO(vo.getSupplierCode(), vo.getMaterialNo())) + .collect(Collectors.toList()); + + if (!remaining.isEmpty()) { + Set categoryExemptKeys = exemptCategoryService.batchCheckExempt(remaining).stream() + .filter(vo -> Boolean.TRUE.equals(vo.getExempt())) + .map(vo -> vo.getSupplierCode() + ":" + vo.getMaterialNo()) + .collect(Collectors.toSet()); + + result.forEach(vo -> { + if (!Boolean.TRUE.equals(vo.getExempt()) + && categoryExemptKeys.contains(vo.getSupplierCode() + ":" + vo.getMaterialNo())) { + vo.setExempt(true); + } + }); + } + + return ApiResult.success(result); } } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsExemptCategoryMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsExemptCategoryMapper.java index e3b75fc8..41d73013 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsExemptCategoryMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsExemptCategoryMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.wms.common.pojo.qo.QmsExemptCategorySearchQO; +import com.nflg.wms.common.pojo.vo.ExemptMaterialCheckVO; import com.nflg.wms.common.pojo.vo.QmsExemptCategoryVO; import com.nflg.wms.repository.entity.QmsExemptCategory; import org.apache.ibatis.annotations.Param; @@ -29,4 +30,11 @@ public interface QmsExemptCategoryMapper extends BaseMapper { * 按物料类别编码查询关联的供应商免检明细 */ List detailByCategory(@Param("categoryCode") String categoryCode); + + /** + * 批量查询类别级有效免检组合(供应商编号+物料编号) + * 通过物料所属类别匹配免检类别,仅返回审核通过、启用且在有效期内的记录 + */ + List batchCheckExempt(@Param("supplierCodes") List supplierCodes, + @Param("materialNos") List materialNos); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsExemptCategoryService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsExemptCategoryService.java index a8c2d997..30b8e70b 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsExemptCategoryService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsExemptCategoryService.java @@ -1,9 +1,11 @@ package com.nflg.wms.repository.service; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.nflg.wms.common.pojo.qo.ExemptMaterialCheckQO; import com.nflg.wms.common.pojo.qo.QmsExemptCategorySearchQO; import com.nflg.wms.common.pojo.qo.QmsExemptCategorySaveQO; import com.nflg.wms.common.pojo.qo.QmsExemptMaterialAuditQO; +import com.nflg.wms.common.pojo.vo.ExemptMaterialCheckVO; import com.nflg.wms.common.pojo.vo.QmsExemptCategoryVO; import com.nflg.wms.repository.entity.QmsExemptCategory; import com.baomidou.mybatisplus.extension.service.IService; @@ -44,4 +46,10 @@ public interface IQmsExemptCategoryService extends IService { * 审核 */ void audit(QmsExemptMaterialAuditQO request); + + /** + * 批量判断物料是否类别级免检 + * 通过物料所属类别匹配免检类别,返回每个请求组合的免检标志 + */ + List batchCheckExempt(List items); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsExemptCategoryServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsExemptCategoryServiceImpl.java index b27c4918..b5608f7c 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsExemptCategoryServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsExemptCategoryServiceImpl.java @@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.exception.NflgException; +import com.nflg.wms.common.pojo.qo.ExemptMaterialCheckQO; import com.nflg.wms.common.pojo.qo.QmsExemptCategorySearchQO; import com.nflg.wms.common.pojo.qo.QmsExemptCategorySaveQO; import com.nflg.wms.common.pojo.qo.QmsExemptMaterialAuditQO; +import com.nflg.wms.common.pojo.vo.ExemptMaterialCheckVO; import com.nflg.wms.common.pojo.vo.QmsExemptCategoryVO; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.repository.entity.QmsExemptCategory; @@ -20,7 +22,10 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * 免检物料类别 服务实现类 @@ -165,4 +170,32 @@ public class QmsExemptCategoryServiceImpl extends ServiceImpl batchCheckExempt(List items) { + List supplierCodes = items.stream() + .map(ExemptMaterialCheckQO::getSupplierCode) + .distinct() + .collect(Collectors.toList()); + List materialNos = items.stream() + .map(ExemptMaterialCheckQO::getMaterialNo) + .distinct() + .collect(Collectors.toList()); + + List exemptList = baseMapper.batchCheckExempt(supplierCodes, materialNos); + + Set exemptSet = exemptList.stream() + .map(v -> v.getSupplierCode() + ":" + v.getMaterialNo()) + .collect(Collectors.toCollection(HashSet::new)); + + List result = new ArrayList<>(items.size()); + for (ExemptMaterialCheckQO item : items) { + ExemptMaterialCheckVO vo = new ExemptMaterialCheckVO(); + vo.setSupplierCode(item.getSupplierCode()); + vo.setMaterialNo(item.getMaterialNo()); + vo.setExempt(exemptSet.contains(item.getSupplierCode() + ":" + item.getMaterialNo())); + result.add(vo); + } + return result; + } } diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsExemptCategoryMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsExemptCategoryMapper.xml index 0529b611..ac01f8e1 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsExemptCategoryMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsExemptCategoryMapper.xml @@ -154,4 +154,28 @@ ORDER BY ec.create_time DESC + + + From 6f917c15f3968a211bc9ae5d81d75fadf9aa8d07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 9 Jun 2026 17:57:17 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(inproduceorder):=20=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BC=96=E5=8F=B7=E4=BC=A0=E9=80=92=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复了qmsService.pushPdiInspection方法中订单编号参数错误 - 将order.getNo()更正为order.getOrderNo()以确保正确的订单标识符传递 --- .../com/nflg/wms/admin/controller/InProduceOrderController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java index 2e954848..24744a90 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java @@ -213,7 +213,7 @@ public class InProduceOrderController extends BaseController { .setCreateTime(LocalDateTime.now()) ); } - qmsService.pushPdiInspection(order.getNo(), parent); + qmsService.pushPdiInspection(order.getOrderNo(), parent); return ApiResult.success(order.getId()); }