From ecdf0e0072f03f4c8a07b261fd766fec7a278eb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 25 Feb 2026 11:33:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(shipment):=20=E6=B7=BB=E5=8A=A0=E7=89=A9?= =?UTF-8?q?=E6=96=99=E5=90=8C=E6=AD=A5=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 ShipmentMaterialSyncSaveQO 数据传输对象 - 实现 syncSave 接口支持物料批量同步保存和更新 - 实现 syncDelete 接口支持物料批量删除 - 优化 search 接口中数据库查询条件拼接逻辑 - 在网关配置中为物料同步接口添加免认证路径 - 移除 MaterialCodeController 中的无用导入包 --- .../pojo/qo/ShipmentMaterialSyncSaveQO.java | 57 +++++++++++++++++ .../wms/gateway/satoken/SaTokenConfigure.java | 2 +- .../controller/MaterialCodeController.java | 2 - .../controller/MaterialController.java | 62 +++++++++++++++++-- 4 files changed, 116 insertions(+), 7 deletions(-) create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentMaterialSyncSaveQO.java diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentMaterialSyncSaveQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentMaterialSyncSaveQO.java new file mode 100644 index 00000000..dec023bb --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentMaterialSyncSaveQO.java @@ -0,0 +1,57 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class ShipmentMaterialSyncSaveQO { + + /** + * 物料编号 + */ + @NotBlank + private String no; + + /** + * 物料描述 + */ + @NotBlank + private String describe; + + /** + * 物料描述英文 + */ + private String describeEn; + + /** + * 图号 + */ + private String drawingNo; + + /** + * 图片 + */ + private String image; + + /** + * 重量 + */ + private BigDecimal weight; + + /** + * 长度 + */ + private BigDecimal length; + + /** + * 宽度 + */ + private BigDecimal width; + + /** + * 高度 + */ + private BigDecimal height; +} diff --git a/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/satoken/SaTokenConfigure.java b/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/satoken/SaTokenConfigure.java index b3c62e2c..d07f491f 100644 --- a/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/satoken/SaTokenConfigure.java +++ b/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/satoken/SaTokenConfigure.java @@ -38,7 +38,7 @@ public class SaTokenConfigure { .setAuth(obj -> { // 登录校验 -- 拦截所有路由 SaRouter.match("/**") - .notMatch("/auth/**","/srm-receive/**", "**/actuator/**") + .notMatch("/auth/**","/srm-receive/**", "/shipment/material/**","**/actuator/**") .check(r -> { String traceId = SaHolder.getRequest().getHeader(Constant.TRACE_ID_HEADER, IdUtil.getSnowflakeNextIdStr()); MDC.put(Constant.TRACE_ID, traceId); diff --git a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java index be9399e0..e8d7cf73 100644 --- a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java +++ b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java @@ -5,8 +5,6 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.nflg.wms.common.constant.STATE; -import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.qo.*; diff --git a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialController.java b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialController.java index a9b1f05b..bf233b21 100644 --- a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialController.java +++ b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialController.java @@ -3,12 +3,14 @@ package com.nflg.wms.shipment.controller; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.dto.BomMaterialDTO; import com.nflg.wms.common.pojo.qo.ShipmentMaterialAddQO; import com.nflg.wms.common.pojo.qo.ShipmentMaterialSearchQO; +import com.nflg.wms.common.pojo.qo.ShipmentMaterialSyncSaveQO; import com.nflg.wms.common.pojo.qo.ShipmentMaterialUpdateQO; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; @@ -19,6 +21,7 @@ import com.nflg.wms.starter.service.BomMaterialService; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -111,14 +114,65 @@ public class MaterialController extends BaseController { * 查询图纸 */ @PostMapping("search") - public ApiResult> search(@Valid @RequestBody ShipmentMaterialSearchQO request){ + public ApiResult> search(@Valid @RequestBody ShipmentMaterialSearchQO request) { return ApiResult.success( shipmentMaterialService.lambdaQuery() - .like(StrUtil.isNotBlank(request.getNo()),WmsShipmentMaterial::getNo, request.getNo()) - .like(StrUtil.isNotBlank(request.getDescribe()),WmsShipmentMaterial::getDescribe, request.getDescribe()) - .like(StrUtil.isNotBlank(request.getDrawingNo()),WmsShipmentMaterial::getDrawingNo, request.getDrawingNo()) + .like(StrUtil.isNotBlank(request.getNo()), WmsShipmentMaterial::getNo, request.getNo()) + .like(StrUtil.isNotBlank(request.getDescribe()), WmsShipmentMaterial::getDescribe, request.getDescribe()) + .like(StrUtil.isNotBlank(request.getDrawingNo()), WmsShipmentMaterial::getDrawingNo, request.getDrawingNo()) .orderByDesc(WmsShipmentMaterial::getId) .page(new Page<>(request.getPage(), request.getPageSize())) ); } + + /** + * 同步-保存 + */ + @Transactional + @PostMapping("syncSave") + public ApiResult syncSave(@Valid @RequestBody @NotEmpty List datas) { + List dbMaterials = shipmentMaterialService.lambdaQuery() + .in(WmsShipmentMaterial::getNo, datas.stream().map(ShipmentMaterialSyncSaveQO::getNo).toList()) + .list(); + dbMaterials.forEach(dbMaterial -> { + ShipmentMaterialSyncSaveQO data = datas.stream() + .filter(d -> d.getNo().equals(dbMaterial.getNo())) + .findFirst() + .get(); + dbMaterial.setDescribe(data.getDescribe()); + dbMaterial.setDescribeEn(data.getDescribeEn()); + dbMaterial.setDrawingNo(data.getDrawingNo()); + dbMaterial.setImage(data.getImage()); + dbMaterial.setWeight(data.getWeight()); + dbMaterial.setLength(data.getLength()); + dbMaterial.setWidth(data.getWidth()); + dbMaterial.setHeight(data.getHeight()); + dbMaterial.setUpdateBy(UserUtil.getUserName()); + dbMaterial.setUpdateTime(LocalDateTime.now()); + shipmentMaterialService.updateById(dbMaterial); + }); + if (CollectionUtil.isNotEmpty(dbMaterials)){ + shipmentMaterialService.updateBatchById(dbMaterials); + } + datas.removeIf(data -> dbMaterials.stream().anyMatch(dbMaterial -> dbMaterial.getNo().equals(data.getNo()))); + if (CollectionUtil.isNotEmpty(datas)) { + shipmentMaterialService.saveBatch(datas.stream().map(data -> { + WmsShipmentMaterial material = Convert.convert(WmsShipmentMaterial.class, data); + material.setCreateBy(UserUtil.getUserName()); + material.setCreateTime(LocalDateTime.now()); + return material; + }).toList()); + } + return ApiResult.success(); + } + + /** + * 同步-删除 + * @param nos 物料编号列表 + */ + @PostMapping("syncDelete") + public ApiResult syncDelete(@RequestBody @NotEmpty List nos) { + shipmentMaterialService.remove(new LambdaQueryWrapper().in(WmsShipmentMaterial::getNo, nos)); + return ApiResult.success(); + } }