diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java index ee90e13e..3b05f365 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java @@ -1,9 +1,11 @@ package com.nflg.wms.admin.controller; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.nflg.wms.admin.pojo.dto.*; +import com.nflg.wms.admin.pojo.request.UnqualifiedWarehousingRequest; import com.nflg.wms.admin.service.NormalQMControllerService; import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.pojo.ApiResult; @@ -17,6 +19,7 @@ import com.nflg.wms.common.pojo.vo.QCTaskItemScanCodesVO; import com.nflg.wms.common.pojo.vo.QCTaskItemVO; import com.nflg.wms.common.pojo.vo.QCTaskVO; import com.nflg.wms.common.pojo.vo.QualityInspectionVO; +import com.nflg.wms.common.util.DateTimeUtil; import com.nflg.wms.common.util.EecExcelUtil; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; @@ -32,10 +35,12 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.NumberUtils; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -151,7 +156,7 @@ public class NormalQMController extends BaseController { for (String poNum : poNums) { //封装一个数据 QCReceiveDTO qcReceiveDTO = new QCReceiveDTO() - .setUnqualifiedInventories(new ArrayList<>()) +// .setUnqualifiedInventories(new ArrayList<>()) .setQcIdList(new ArrayList<>()) .setReceiveIds(new ArrayList<>()) .setWaitModifyItems(new ArrayList<>()) @@ -212,42 +217,53 @@ public class NormalQMController extends BaseController { .setId(item.getId()) .setReceivedWarehouse(item.getReceivedWarehouse()) // .setStorageLocation(item.getStorageLocation()) - .setInQty(code.getUnqualifiedQty().add(code.getQualifiedQty())) + .setInQty(code.getUnqualifiedQty().add(code.getReceiveQty())) .setUnqualifiedQty(code.getUnqualifiedQty()) - .setQualifiedQty(code.getQualifiedQty()) + .setQualifiedQty(code.getReceiveQty()) // .setCrossQty(item.getCrossQty()) .setMaterialDoc105("") .setMaterialDocYear105(""); qcReceiveDTO.getWaitModifyItems().add(qcReceiveItemDTO); // 库存信息 +// if (code.getUnqualifiedQty().compareTo(BigDecimal.ZERO) > 0) { +// InventoryInDTO inventoryDTO = qcReceiveDTO.getUnqualifiedInventories() +// .stream() +// .filter(inventoryDTO1 -> +// inventoryDTO1.getMaterialNo().equals(code.getItemCode()) +// && inventoryDTO1.getWarehouseNo().equals("9004") +// && inventoryDTO1.getBatchNo().equals(code.getMaterialBatch()) +// && inventoryDTO1.getSerialNo().equals(code.getSerialNum()) +// && inventoryDTO1.getFactoryNo().equals(code.getFactory())) +// .findFirst() +// .orElse(null); +// +// if (Objects.isNull(inventoryDTO)) { +// // 不合格品数量大于0时的处理逻辑 +// qcReceiveDTO.getUnqualifiedInventories().add(new InventoryInDTO() +// .setMaterialNo(code.getItemCode()) +// .setFactoryNo(code.getFactory()) +// .setWarehouseNo("9004") // 不合格仓固定 +// .setNum(code.getUnqualifiedQty()) +// .setBatchNo(code.getMaterialBatch()) +// .setSerialNo(code.getSerialNum()) +// ); +// } else { +// inventoryDTO.setNum(inventoryDTO.getNum().add(code.getUnqualifiedQty())); +// } +// } if (code.getUnqualifiedQty().compareTo(BigDecimal.ZERO) > 0) { - InventoryInDTO inventoryDTO = qcReceiveDTO.getUnqualifiedInventories() - .stream() - .filter(inventoryDTO1 -> - inventoryDTO1.getMaterialNo().equals(code.getItemCode()) - && inventoryDTO1.getWarehouseNo().equals("9004") - && inventoryDTO1.getBatchNo().equals(code.getMaterialBatch()) - && inventoryDTO1.getSerialNo().equals(code.getSerialNum()) - && inventoryDTO1.getFactoryNo().equals(code.getFactory())) - .findFirst() - .orElse(null); - - if (Objects.isNull(inventoryDTO)) { - // 不合格品数量大于0时的处理逻辑 - qcReceiveDTO.getUnqualifiedInventories().add(new InventoryInDTO() - .setMaterialNo(code.getItemCode()) - .setFactoryNo(code.getFactory()) - .setWarehouseNo("9004") // 不合格仓固定 - .setNum(code.getUnqualifiedQty()) - .setBatchNo(code.getMaterialBatch()) - .setSerialNo(code.getSerialNum()) - ); - } else { - inventoryDTO.setNum(inventoryDTO.getNum().add(code.getUnqualifiedQty())); - } + qcReceiveDTO.getZwm3a27Items().add( + new ZWM3A27ItemDTO() + .setMatnr(code.getItemCode()) + .setEbeln(code.getPoNum()) + .setEbelp(Integer.valueOf(code.getPoLineNumber())) + .setMenge(code.getRejectQty()) + .setMatDoc(code.getReceiveNum()) + .setDocYear(DateTimeUtil.format(LocalDate.now(),"yyyy")) + ); } - if (code.getQualifiedQty().compareTo(BigDecimal.ZERO) > 0) { + if (code.getReceiveQty().compareTo(BigDecimal.ZERO) > 0) { // 合格品数量大于0时的处理逻辑 InventoryInDTO inventoryDTO = qcReceiveDTO.getQualifiednventories() .stream() @@ -265,12 +281,12 @@ public class NormalQMController extends BaseController { .setMaterialNo(code.getItemCode()) .setFactoryNo(code.getFactory()) .setWarehouseNo(item.getReceivedWarehouse()) // 不合格仓固定 - .setNum(code.getQualifiedQty()) + .setNum(code.getReceiveQty()) .setBatchNo(code.getMaterialBatch()) .setSerialNo(code.getSerialNum()) ); } else { - inventoryDTO.setNum(inventoryDTO.getNum().add(code.getQualifiedQty())); + inventoryDTO.setNum(inventoryDTO.getNum().add(code.getReceiveQty())); } } } @@ -278,15 +294,22 @@ public class NormalQMController extends BaseController { } qcReceiveDTOS.add(qcReceiveDTO); } - List qrCodeMasters = qrCodeMasterService.getChildrenWithParent(request.stream() - .map(QCReceiveTaskConfirmQO::getItems) - .flatMap(List::stream) - .map(InCostCenterBackSubmitItemQRQO::getQrCode) - .toList() + List qrCodes = CollectionUtil.unionAll( + request.stream() + .map(QCReceiveTaskConfirmQO::getReceiveItems) + .flatMap(List::stream) + .map(InCostCenterBackSubmitItemQRQO::getQrCode) + .toList() + , request.stream() + .map(QCReceiveTaskConfirmQO::getRejectItems) + .flatMap(List::stream) + .map(InCostCenterBackSubmitItemQRQO::getQrCode) + .toList() ); + List qrCodeMasters = qrCodeMasterService.getChildrenWithParent(qrCodes); request.forEach(rit -> { - if (CollectionUtil.isNotEmpty(rit.getItems())) { - rit.getItems().forEach(item -> { + if (CollectionUtil.isNotEmpty(rit.getReceiveItems())) { + rit.getReceiveItems().forEach(item -> { WmsQrCodeMaster p = qrCodeMasters.stream() .filter(q -> q.getBarcodeCode().equals(item.getQrCode())) .findFirst() @@ -310,6 +333,31 @@ public class NormalQMController extends BaseController { }); }); } + if (CollectionUtil.isNotEmpty(rit.getRejectItems())) { + rit.getRejectItems().forEach(item -> { + WmsQrCodeMaster p = qrCodeMasters.stream() + .filter(q -> q.getBarcodeCode().equals(item.getQrCode())) + .findFirst() + .get(); + p.setProcessStage(BarCodeProcessStage.Reject.getState()); + p.setBinLocation(item.getBinNo()); + p.setLastScanBy(UserUtil.getUserId()); + p.setLastScanByname(UserUtil.getUserName()); + p.setLastScanTime(LocalDateTime.now()); + qrCodeMasters.stream() + .filter(q -> q.getParentBarcodeId().equals(p.getId())) + .forEach(c -> { + c.setProcessStage(p.getProcessStage()); + c.setLastScanBy(UserUtil.getUserId()); + c.setLastScanByname(UserUtil.getUserName()); + c.setLastScanTime(LocalDateTime.now()); + c.setFactoryCode(p.getFactoryCode()); + c.setStorageLocation(p.getStorageLocation()); + c.setBinLocation(p.getBinLocation()); + c.setReceiptItemId(p.getReceiptItemId()); + }); + }); + } }); qrCodeMasterService.updateBarCode(qrCodeMasters); normalQMControllerService.confirmReceive(qcReceiveDTOS); @@ -406,4 +454,18 @@ public class NormalQMController extends BaseController { } } + /** + * 质检不合格单据开启上架任务 + */ + @Transactional + @PostMapping("unqualifiedWarehousing") + public ApiResult unqualifiedWarehousing(@Valid @RequestBody UnqualifiedWarehousingRequest request) { + WmsSrmQualityInspection inspection = wmsSrmQualityInspectionService.getById(request.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(inspection)).throwMessage("无效的质检单"); + VUtil.trueThrowBusinessError(!inspection.getInspectionResult().equals("不合格")).throwMessage("该质检单不是不合格单"); + VUtil.trueThrowBusinessError(inspection.getReceiveQty().compareTo(BigDecimal.ZERO) > 0).throwMessage("该质检单已生成上架任务"); + inspection.setReceiveQty(request.getReceiveQty()); + wmsSrmQualityInspectionService.updateById(inspection); + return ApiResult.success(); + } } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/QCReceiveDTO.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/QCReceiveDTO.java index a473a83f..4ed5755e 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/QCReceiveDTO.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/QCReceiveDTO.java @@ -5,6 +5,7 @@ import com.nflg.wms.common.pojo.dto.StorageLocationDTO; import lombok.Data; import lombok.experimental.Accessors; +import java.util.ArrayList; import java.util.List; @Data @@ -14,8 +15,10 @@ public class QCReceiveDTO { //需要传入SAP的信息 private ZWM3A18DTO zwm3a18DTO; - // 不合格物料入仓信息 - private List unqualifiedInventories; +// // 不合格物料入仓信息 +// private List unqualifiedInventories; + + private List zwm3a27Items=new ArrayList<>(); //合格物料入仓信息 private List qualifiednventories; diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/ZWM3A27ItemDTO.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/ZWM3A27ItemDTO.java new file mode 100644 index 00000000..3fe52b32 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/ZWM3A27ItemDTO.java @@ -0,0 +1,38 @@ +package com.nflg.wms.admin.pojo.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class ZWM3A27ItemDTO { + + /** + * 物料号 + */ + private String matnr; + + /** + * 采购凭证号 + */ + private String ebeln; + + /** + * 采购凭证的项目编号 + */ + private Integer ebelp; + + /** + * 数量 + */ + private BigDecimal menge; + + private String matDoc; + private String docYear; + private String key; + public String getKey() { + return matDoc +"|"+ docYear; + } +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/UnqualifiedWarehousingRequest.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/UnqualifiedWarehousingRequest.java new file mode 100644 index 00000000..d4413b7f --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/UnqualifiedWarehousingRequest.java @@ -0,0 +1,26 @@ +package com.nflg.wms.admin.pojo.request; + +import jakarta.annotation.Priority; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class UnqualifiedWarehousingRequest { + + /** + * 质检单id + */ + @NotNull + private Long id; + + /** + * 收货数量 + */ + @NotNull + @Positive + private BigDecimal receiveQty; +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalQMControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalQMControllerService.java index 9eec7bc9..5aacd142 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalQMControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalQMControllerService.java @@ -3,7 +3,9 @@ package com.nflg.wms.admin.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Pair; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.nflg.wms.admin.pojo.dto.QCReceiveDTO; +import com.nflg.wms.admin.pojo.dto.ZWM3A27ItemDTO; import com.nflg.wms.common.pojo.vo.QCTaskItemScanCodesVO; import com.nflg.wms.common.pojo.vo.QCTaskItemVO; import com.nflg.wms.repository.entity.WmsQcReceive; @@ -24,7 +26,9 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; @Component public class NormalQMControllerService { @@ -67,15 +71,15 @@ public class NormalQMControllerService { .setMaterialBatch(code.getMaterialBatch()) .setSerialNum(code.getSerialNum()) .setInspectionResult(code.getInspectionResult()) - .setQualifiedQty(code.getQualifiedQty()) - .setUnqualifiedQty(code.getUnqualifiedQty()) + .setQualifiedQty(code.getReceiveQty()) + .setUnqualifiedQty(code.getRejectQty()) ); taskItemVO.setUnqualifiedQty( ObjectUtil.defaultIfNull(taskItemVO.getUnqualifiedQty(), BigDecimal.ZERO) .add(ObjectUtil.defaultIfNull(code.getUnqualifiedQty(), BigDecimal.ZERO))); taskItemVO.setQualifiedQty( ObjectUtil.defaultIfNull(taskItemVO.getQualifiedQty(), BigDecimal.ZERO) - .add(ObjectUtil.defaultIfNull(code.getQualifiedQty(), BigDecimal.ZERO))); + .add(ObjectUtil.defaultIfNull(code.getReceiveQty(), BigDecimal.ZERO))); taskItemVO.setInQty(ObjectUtil.defaultIfNull(code.getQualifiedQty(), BigDecimal.ZERO) .add(ObjectUtil.defaultIfNull(code.getUnqualifiedQty(), BigDecimal.ZERO))); }); @@ -95,9 +99,9 @@ public class NormalQMControllerService { if (CollectionUtil.isNotEmpty(qcReceiveDTO.getQualifiednventories())) { wmsInventoryService.in(qcReceiveDTO.getQualifiednventories()); } - if (CollectionUtil.isNotEmpty(qcReceiveDTO.getUnqualifiedInventories())) { - wmsInventoryService.in(qcReceiveDTO.getUnqualifiedInventories()); - } +// if (CollectionUtil.isNotEmpty(qcReceiveDTO.getUnqualifiedInventories())) { +// wmsInventoryService.in(qcReceiveDTO.getUnqualifiedInventories()); +// } //入库单确认 if (CollectionUtil.isNotEmpty(qcReceiveDTO.getWaitModifyItems())) { @@ -138,7 +142,13 @@ public class NormalQMControllerService { .update(); } } - + if (CollectionUtil.isNotEmpty(qcReceiveDTO.getZwm3a27Items())) { + Map> group = qcReceiveDTO.getZwm3a27Items().stream().collect(Collectors.groupingBy(ZWM3A27ItemDTO::getKey)); + group.forEach((key, value) -> { + List keys = StrUtil.split(key, "|"); + sapService.zwm3a27(keys.get(0), keys.get(1), value); + }); + } // 修改储位信息 // if (CollectionUtil.isNotEmpty(qcReceiveDTO.getStorageLocationDTOS())) { // qcReceiveDTO.getStorageLocationDTOS().forEach(storageLocationDTO -> { diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java index 9e4390e8..0453baf5 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java @@ -9,6 +9,7 @@ import cn.hutool.json.JSONUtil; import com.nflg.wms.admin.pojo.dto.SAPMaterialInfoInOrderDTO; import com.nflg.wms.admin.pojo.dto.ZWM3A17DTO; import com.nflg.wms.admin.pojo.dto.ZWM3A18DTO; +import com.nflg.wms.admin.pojo.dto.ZWM3A27ItemDTO; import com.nflg.wms.admin.util.JCoUtil; import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.exception.SAPException; @@ -1392,6 +1393,25 @@ public class SapService { return Pair.of(structure.getString("MAT_DOC"), structure.getString("DOC_YEAR")); } + /** + * 质检不合格SAP冲销接口(冲销103,移动类型124) + */ + public void zwm3a27(String matDoc,String docYear,List items){ + Map parameters = new HashMap<>(); + parameters.put("MAT_DOC", matDoc); + parameters.put("DOC_YEAR", docYear); + + Map>> tables = new HashMap<>(); + if (CollectionUtil.isNotEmpty(items)) { + tables.put("ITEM", JCoUtil.toMapList(items,"matDoc","docYear","key")); + } + JCoFunction function = exec("ZWM3A27", "HEAD", parameters, tables); + JCoStructure result = function.getExportParameterList().getStructure("OUTPUT1"); + print("OUTPUT1", result); + VUtil.trueThrowBusinessError(!StrUtil.equals("S", result.getString("TYPE"))) + .throwMessage("SAP:" + result.getString("MSG")); + } + // /** // * 获取库存信息 // * @param factory 工厂编号 diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/JCoUtil.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/JCoUtil.java index 727c9759..ca23112c 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/JCoUtil.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/JCoUtil.java @@ -51,17 +51,26 @@ public class JCoUtil { return mapList; } - public static List> toMapList(List datas) { - return datas.stream().map(BeanUtil::toMap) - .map(list -> list.entrySet().stream() - .collect(Collectors.toMap( - entry -> entry.getKey().toUpperCase(), - entry -> entry.getValue() != null ? entry.getValue() : "", - (v1, v2) -> v1 - ) - ) - ) - .toList(); + public static List> toMapList(List datas, String... ignoreFields) { + List> list = new ArrayList<>(); + datas.forEach(data -> { + Map map = BeanUtil.toMap(data); + if (ignoreFields != null) { + for (String field : ignoreFields) { + map.remove(field); + } + } + list.add( + map.entrySet().stream() + .collect(Collectors.toMap( + entry -> entry.getKey().toUpperCase(), + entry -> entry.getValue() != null ? entry.getValue() : "", + (v1, v2) -> v1 + ) + ) + ); + }); + return list; } public static List> toMapList(T data) { diff --git a/nflg-wms-admin/src/test/java/com/nflg/wms/admin/SapMetaPrintTest.java b/nflg-wms-admin/src/test/java/com/nflg/wms/admin/SapMetaPrintTest.java index c8a4f867..bcf7e34d 100644 --- a/nflg-wms-admin/src/test/java/com/nflg/wms/admin/SapMetaPrintTest.java +++ b/nflg-wms-admin/src/test/java/com/nflg/wms/admin/SapMetaPrintTest.java @@ -196,6 +196,11 @@ public class SapMetaPrintTest { printMeta("ZWM3A25"); } + @Test + public void ZWM3A27() throws JCoException { + printMeta("ZWM3A27"); + } + public void printMeta(String functionName) throws JCoException { functionName = functionName.toUpperCase(); diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/BarCodeProcessStage.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/BarCodeProcessStage.java index c4757616..09766084 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/BarCodeProcessStage.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/BarCodeProcessStage.java @@ -52,7 +52,11 @@ public enum BarCodeProcessStage { /** * 待入库 */ - ForStorage((short) 10, "待入库"); + ForStorage((short) 10, "待入库"), + /** + * 已拒收 + */ + Reject((short) 11, "拒收"); private final short state; private final String description; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/LocationTransferItemQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/LocationTransferItemQO.java index 958a46a1..94a3ddc7 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/LocationTransferItemQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/LocationTransferItemQO.java @@ -1,6 +1,7 @@ package com.nflg.wms.common.pojo.qo; import com.baomidou.mybatisplus.annotation.Version; +import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.experimental.Accessors; @@ -13,6 +14,7 @@ public class LocationTransferItemQO { /** * 条码编号(可读) */ + @NotBlank private String barcodeCode; /** diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/LocationTransferQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/LocationTransferQO.java index dd9f030a..3e766023 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/LocationTransferQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/LocationTransferQO.java @@ -1,6 +1,7 @@ package com.nflg.wms.common.pojo.qo; import com.baomidou.mybatisplus.annotation.Version; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -25,7 +26,7 @@ public class LocationTransferQO { /** * 待转储的物料信息 */ - @NotNull + @Valid @NotEmpty private List items; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QCReceiveTaskConfirmQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QCReceiveTaskConfirmQO.java index 32617b22..16cc7317 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QCReceiveTaskConfirmQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QCReceiveTaskConfirmQO.java @@ -1,6 +1,7 @@ package com.nflg.wms.common.pojo.qo; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; import lombok.Data; import lombok.experimental.Accessors; @@ -50,8 +51,15 @@ public class QCReceiveTaskConfirmQO { private List qcIdList; /** - * 二维码列表 + * 入库物料二维码列表 */ @Valid - private List items; + @NotEmpty + private List receiveItems; + + /** + * 拒收物料二维码列表 + */ + @Valid + private List rejectItems; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QualityInspectionVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QualityInspectionVO.java index 9e58fe0a..5dc237b1 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QualityInspectionVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QualityInspectionVO.java @@ -149,6 +149,11 @@ public class QualityInspectionVO { @ExcelColumn("合格数量") private BigDecimal qualifiedQty; + /** + * 收货数量(合格时为合格数量,不合格时小于等于合格数量) + */ + private BigDecimal receiveQty; + /** * 最后修改时间 */ diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsQrCodeMaster.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsQrCodeMaster.java index 2b0987eb..e0fe4d57 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsQrCodeMaster.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsQrCodeMaster.java @@ -12,9 +12,8 @@ import java.time.LocalDateTime; /** *

- * - *

* + *

* @author 代码生成器生成 * @since 2026 */ @@ -186,4 +185,11 @@ public class WmsQrCodeMaster implements Serializable { */ @TableField(exist = false) private String supplierName; + + @TableField(exist = false) + private String key; + + public String getKey() { + return factoryCode + "|" + storageLocation + "|"; + } } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsSrmQualityInspection.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsSrmQualityInspection.java index d407f4d4..6ffb3ba8 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsSrmQualityInspection.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsSrmQualityInspection.java @@ -118,6 +118,21 @@ public class WmsSrmQualityInspection implements Serializable { */ private BigDecimal qualifiedQty; + /** + * 收货数量(合格时为合格数量,不合格时小于等于合格数量) + */ + private BigDecimal receiveQty; + + /** + * 拒收数量 + */ + @TableField(exist = false) + private BigDecimal rejectQty; + + public BigDecimal getRejectQty() { + return inspectionQty.subtract(receiveQty); + } + /** * 收货时的凭证 */ diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsBinMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsBinMapper.java index b49a6e0d..419e1a50 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsBinMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsBinMapper.java @@ -28,4 +28,6 @@ public interface WmsBinMapper extends BaseMapper { List searchNonPage(@Param("request") BinSearchQO request); List getInventory(Long warehouseId); + + WmsBin getByCode(String factoryCode, String storageLocation, String binLocation); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsBinService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsBinService.java index 7a56db66..e6ea16ca 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsBinService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsBinService.java @@ -8,6 +8,7 @@ import com.nflg.wms.common.pojo.vo.BinInventoryVO; import com.nflg.wms.common.pojo.vo.BinVO; import com.nflg.wms.repository.entity.WmsBin; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import java.util.List; @@ -37,4 +38,6 @@ public interface IWmsBinService extends IService { List searchNonPage(@Valid BinSearchQO request); List getInventory(Long warehouseId); + + WmsBin getByCode(String factoryCode, String storageLocation, String binLocation); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBinServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBinServiceImpl.java index 4fc95852..b40632c0 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBinServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBinServiceImpl.java @@ -116,4 +116,9 @@ public class WmsBinServiceImpl extends ServiceImpl impleme public List getInventory(Long warehouseId) { return baseMapper.getInventory(warehouseId); } + + @Override + public WmsBin getByCode(String factoryCode, String storageLocation, String binLocation) { + return baseMapper.getByCode(factoryCode, storageLocation, binLocation); + } } diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsBinMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsBinMapper.xml index e882688d..e9bff4b1 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsBinMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsBinMapper.xml @@ -47,4 +47,13 @@ GROUP BY b."no" ORDER BY b."no" + + diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsSrmQualityInspectionMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsSrmQualityInspectionMapper.xml index 29223e5b..fde8a3b1 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsSrmQualityInspectionMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsSrmQualityInspectionMapper.xml @@ -8,7 +8,7 @@ a.po_line_number,a.inspection_qty,a.item_name,a.unit,a.received_warehouse,a.unqualified_reason,a.po_num,a.receive_num,a.unqualified_qty, a.qualified_qty,a.material_batch as receive_batch_num,a.serial_num,a.line_number,a.note_num,a.is_in,a.receive_id, - a.in_time,a.material_doc_105,a.material_doc_year_105 + a.in_time,a.material_doc_105,a.material_doc_year_105,a.receive_qty from wms_srm_quality_inspection a left join user_supplier c on a.suppler_num=c.supplier_code diff --git a/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/SRMController.java b/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/SRMController.java index 3a57d422..3bbc0578 100644 --- a/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/SRMController.java +++ b/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/SRMController.java @@ -54,9 +54,6 @@ public class SRMController extends BaseController { @Resource private IWmsQcReceiveService qcReceiveService; - @Resource - private IWmsQrCodeMasterService qrCodeMasterService; - /** * 接收SRM送货单 */ @@ -174,21 +171,17 @@ public class SRMController extends BaseController { .setIsIn(false) .setAcceptTime(LocalDateTime.now()); try { - srmQualityInspectionService.save(inspect); - short isCheck = 1; - if (!inspect.getInspectionResult().equals("合格")) { - isCheck = 2; + short isCheck = 2; + if (inspect.getInspectionResult().equals("合格")) { + isCheck = 1; + inspect.setReceiveQty(inspect.getQualifiedQty()); } + srmQualityInspectionService.save(inspect); qcReceiveService.lambdaUpdate() .eq(WmsQcReceive::getOrderNo, inspect.getNoteNum()) .set(WmsQcReceive::getIsCheck, isCheck) .update(); qcReceiveItemService.updateCheckNum(inspect.getInspectionQty(), inspect.getNoteNum(), inspect.getLineNumber(), inspect.getItemCode(), inspect.getReceiveNum()); -// qrCodeMasterService.lambdaUpdate() -// .set(WmsQrCodeMaster::getPackagingType, BarCodeProcessStage.Checked.getState()) -// .eq(WmsQrCodeMaster::getReceiptItemId, receiveItem.getId()) -// .update(); - //TODO 是否需要修改对应二维码的状态 log.error("质检单生成上架任务成功"); return 0; } catch (Exception ex) {