From 0d84c188ac5162179f87fe29d1bc7818f75f4ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 20 Apr 2026 13:54:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(material):=20=E6=B7=BB=E5=8A=A0=E4=B8=BB?= =?UTF-8?q?=E7=89=A9=E6=96=99=E7=B3=BB=E7=BB=9F=E5=90=8C=E6=AD=A5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改BomMaterialService#getList返回MaterialMainDTO列表 - 新增MaterialMainDTO的drawingNoVer字段及其getter方法 - 在QmsQcMaterialController添加同步主物料接口syncFromMain - 实现QmsQcMaterialControllerService的syncFromMain方法,用于同步主物料信息 - 同步时根据物料编号和图号版本号匹配更新质检物料详细信息 - 添加方法参数有效性校验以及日志打印优化 --- .../controller/QmsQcMaterialController.java | 11 +++++++ .../QmsQcMaterialControllerService.java | 33 ++++++++++++++++++- .../wms/common/pojo/dto/MaterialMainDTO.java | 10 ++++++ .../starter/service/BomMaterialService.java | 11 ++++--- 4 files changed, 60 insertions(+), 5 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQcMaterialController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQcMaterialController.java index d4adf35f..99a06da6 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQcMaterialController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQcMaterialController.java @@ -13,12 +13,14 @@ import com.nflg.wms.starter.BaseController; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.List; /** * 质检物料管理 @@ -97,4 +99,13 @@ public class QmsQcMaterialController extends BaseController { public ApiResult> searchBomMaterial(@Valid @RequestBody BomMaterialListQO request){ return ApiResult.success(qcMaterialControllerService.searchBomMaterial(request)); } + + /** + * 从主物料系统同步物料信息 + */ + @PostMapping("syncFromMain") + public ApiResult syncFromMain(@RequestBody @NotEmpty List ids){ + qcMaterialControllerService.syncFromMain(ids); + return ApiResult.success(); + } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java index 587d7b70..ffe0f3de 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java @@ -31,6 +31,7 @@ import com.nflg.wms.starter.service.FileUploadService; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -45,6 +46,8 @@ import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; /** * 质检物料业务逻辑 @@ -349,7 +352,7 @@ public class QmsQcMaterialControllerService { private QmsQcMaterial findByCompositeKey(String materialNo, String drawingNoVer) { return qcMaterialService.lambdaQuery() .eq(QmsQcMaterial::getMaterialNo, materialNo) - .and(StrUtil.isBlank(drawingNoVer), + .and(StrUtil.isBlank(drawingNoVer), q -> q.isNull(QmsQcMaterial::getDrawingNoVer) .or() .eq(QmsQcMaterial::getDrawingNoVer, "")) @@ -441,4 +444,32 @@ public class QmsQcMaterialControllerService { .setTotal((int) bomPageResultDTO.getTotal()) .setItems(bomPageResultDTO.getRecords()); } + + public void syncFromMain(@NotEmpty List ids) { + List list = qcMaterialService.listByIds(ids); + if (CollectionUtil.isNotEmpty(list)) { + List datas = bomMaterialService.getList(list.stream().map(QmsQcMaterial::getMaterialNo).collect(Collectors.toList())); + datas.forEach(data -> { + QmsQcMaterial qcMaterial = list.stream() + .filter(item -> item.getMaterialNo().equals(data.getMaterialNo()) + && StrUtil.equals(item.getDrawingNoVer(), data.getDrawingNoVer()) + ) + .findFirst() + .orElse(null); + if (Objects.nonNull(qcMaterial)) { + qcMaterial.setMaterialDescIsUpgrade(!StrUtil.equals(qcMaterial.getMaterialDesc(), data.getMaterialDesc())); + qcMaterial.setMaterialName(data.getMaterialName()); + qcMaterial.setMaterialDesc(data.getMaterialDesc()); + qcMaterial.setMaterialSpecifications(data.getMaterialSpecifications()); + qcMaterial.setDrawingNo(data.getDrawingNo()); + qcMaterial.setMaterialCategoryCode(data.getSecondMaterialCategoryCode()); + qcMaterial.setMaterialCategoryCodePathName(data.getOldCategoryNameTree()); + qcMaterial.setUpdateBy(UserUtil.getUserId()); + qcMaterial.setUpdateByName(UserUtil.getUserName()); + qcMaterial.setUpdateTime(LocalDateTime.now()); + } + }); + qcMaterialService.updateBatchById(list); + } + } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/MaterialMainDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/MaterialMainDTO.java index 05125e6a..e3a4e7d6 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/MaterialMainDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/MaterialMainDTO.java @@ -1,5 +1,6 @@ package com.nflg.wms.common.pojo.dto; +import cn.hutool.core.util.StrUtil; import lombok.Data; @Data @@ -51,4 +52,13 @@ public class MaterialMainDTO { * 物料规格 */ private String materialSpecifications; + + /** + * 图号版本号 + */ + private String drawingNoVer; + + public String getDrawingNoVer() { + return StrUtil.isBlank(drawingNoVer) ? "" : drawingNoVer; + } } diff --git a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/service/BomMaterialService.java b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/service/BomMaterialService.java index d8559c67..1801ace5 100644 --- a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/service/BomMaterialService.java +++ b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/service/BomMaterialService.java @@ -82,7 +82,7 @@ public class BomMaterialService { return resultDTO.getData(); } - public List getList(Collection nos) { + public List getList(Collection nos) { log.info("查询主物料系统参数:" + JSONUtil.toJsonStr(nos)); if (CollectionUtil.isEmpty(nos)) { return Collections.emptyList(); @@ -91,7 +91,7 @@ public class BomMaterialService { headers.setContentType(MediaType.APPLICATION_JSON); headers.add("authorization", getToken()); HttpEntity> requestEntity = new HttpEntity<>(nos, headers); - ResponseEntity>> response = restTemplate.exchange( + ResponseEntity>> response = restTemplate.exchange( baseUrl + materialListUrl, HttpMethod.POST, requestEntity, @@ -101,8 +101,11 @@ public class BomMaterialService { log.info("查询主物料系统返回状态码:" + response.getStatusCode().value()); VUtil.trueThrowBusinessError(!response.getStatusCode().is2xxSuccessful()) .throwMessage("查询主物料系统失败"); - BomResultDTO> resultDTO = response.getBody(); - log.info("查询主物料系统返回数据:" + (Objects.nonNull(resultDTO.getData())&&resultDTO.getData().size()>1000?"数据超过1000条,不打印":JSONUtil.toJsonStr(resultDTO))); + BomResultDTO> resultDTO = response.getBody(); + log.info("查询主物料系统返回数据:" + (Objects.nonNull(resultDTO.getData()) && resultDTO.getData().size() > 1000 + ? "数据超过1000条,不打印" + : JSONUtil.toJsonStr(resultDTO + ))); return Optional.ofNullable(resultDTO.getData()).orElse(Collections.emptyList()); }