From e8dcf081173d58fc7a9ec7383a12515ae35a8058 Mon Sep 17 00:00:00 2001 From: 10002617 Date: Thu, 7 May 2026 15:58:00 +0800 Subject: [PATCH 01/10] =?UTF-8?q?1464=20=E5=8F=91=E8=B4=A7=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F-=E6=9D=A1=E7=A0=81=E6=89=93=E5=8D=B0-=E7=89=A9?= =?UTF-8?q?=E6=96=99=E7=A0=81=E6=89=93=E5=8D=B0=E9=A1=B5=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E6=9D=A1=E7=A0=81=E5=8F=B7=E8=A7=84=E5=88=99=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MaterialCodeController.java | 12 ++--- .../com/nflg/wms/shipment/util/KeyUtil.java | 44 +++++++++++++++++++ .../starter/utils/SpringContextHolder.java | 33 ++++++++++++++ 3 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 nflg-wms-starter/src/main/java/com/nflg/wms/starter/utils/SpringContextHolder.java 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 e4dc09c9..d4e71ff3 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 @@ -266,7 +266,7 @@ public class MaterialCodeController extends BaseController { items.add(item); qrs.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) .setNum(item.getMinPackagingNum()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) @@ -318,7 +318,7 @@ public class MaterialCodeController extends BaseController { for (int i = 1; i <= item.getPackingNum(); i++) { materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) // .setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum()) .setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i)) .setCreateBy(UserUtil.getUserName()) @@ -367,7 +367,7 @@ public class MaterialCodeController extends BaseController { for (int i = 1; i <= item.getPackingNum(); i++) { materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) .setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i)) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) @@ -449,7 +449,7 @@ public class MaterialCodeController extends BaseController { itemsForAdd.add(item); qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) .setNum(item.getMinPackagingNum()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) @@ -465,7 +465,7 @@ public class MaterialCodeController extends BaseController { itemsForAdd.add(item); qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) .setNum(item.getMinPackagingNum()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) @@ -494,7 +494,7 @@ public class MaterialCodeController extends BaseController { } else { qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) .setNum(item.getMinPackagingNum()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) diff --git a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java index 34f80457..de3c6378 100644 --- a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java +++ b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java @@ -1,9 +1,27 @@ package com.nflg.wms.shipment.util; +import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.exception.NflgException; +import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItemQr; +import com.nflg.wms.repository.service.IWmsShipmentMaterialCodeItemQrService; +import com.nflg.wms.starter.utils.SpringContextHolder; import io.hypersistence.tsid.TSID; +import java.security.SecureRandom; + public class KeyUtil { + private static final SecureRandom RANDOM = new SecureRandom(); + private static final int MAX_RETRY = 100; + private static IWmsShipmentMaterialCodeItemQrService wmsShipmentMaterialCodeItemQrService; + + private static IWmsShipmentMaterialCodeItemQrService getWmsShipmentMaterialCodeItemQrService() { + if (wmsShipmentMaterialCodeItemQrService == null) { + wmsShipmentMaterialCodeItemQrService = SpringContextHolder.getBean(IWmsShipmentMaterialCodeItemQrService.class); + } + return wmsShipmentMaterialCodeItemQrService; + } + public static String next(){ return TSID.Factory.getTsid().toString(); } @@ -11,4 +29,30 @@ public class KeyUtil { public static String nextBase62(){ return TSID.Factory.getTsid().encode(62); } + + /** + * 生成规则:F + 12位随机数字,保证唯一性 + * 如果生成的编码已存在,则重新生成,最多重试100次 + * 例如:F123456789012 + */ + public static String nextFCode(){ + for (int i = 0; i < MAX_RETRY; i++) { + String code = generateCode("F"); + long count = getWmsShipmentMaterialCodeItemQrService().lambdaQuery() + .eq(WmsShipmentMaterialCodeItemQr::getNo, code) + .count(); + if (count == 0) { + return code; + } + } + throw new NflgException(STATE.BusinessError, "生成唯一条码号失败,请重试"); + } + + private static String generateCode(String prefix){ + StringBuilder sb = new StringBuilder(prefix); + for (int i = 0; i < 12; i++) { + sb.append(RANDOM.nextInt(10)); + } + return sb.toString(); + } } \ No newline at end of file diff --git a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/utils/SpringContextHolder.java b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/utils/SpringContextHolder.java new file mode 100644 index 00000000..e622f486 --- /dev/null +++ b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/utils/SpringContextHolder.java @@ -0,0 +1,33 @@ +package com.nflg.wms.starter.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class SpringContextHolder implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext context) throws BeansException { + applicationContext = context; + } + + public static T getBean(Class clazz) { + return applicationContext.getBean(clazz); + } + + public static T getBean(String name, Class clazz) { + return applicationContext.getBean(name, clazz); + } + + public static Object getBean(String name) { + return applicationContext.getBean(name); + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } +} From cfc65810331c194dec3ed4d8b9353b1ad4803240 Mon Sep 17 00:00:00 2001 From: 10002617 Date: Sat, 9 May 2026 09:24:18 +0800 Subject: [PATCH 02/10] =?UTF-8?q?1483=20=E5=8F=91=E8=B4=A7=E7=AE=A1?= =?UTF-8?q?=E7=90=86-PDA-=E8=A3=85=E7=AE=B1=E8=8F=9C=E5=8D=95=E4=B8=8B?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9=EF=BC=8C=E6=89=AB=E7=A0=81?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=8F=AF=E5=88=A0=E9=99=A4=EF=BC=8C=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E5=8F=AF=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/common/pojo/dto/BomMaterialDTO.java | 6 +- .../common/pojo/qo/MaterialCodeItemAddQO.java | 17 -- .../pojo/qo/MaterialCodeItemUpdateQO.java | 16 -- .../common/pojo/qo/ShipmentPCPackingQO.java | 2 +- .../qo/ShipmentPackingMaterialInfoQO.java | 15 ++ .../wms/common/pojo/qo/ShipmentPackingQO.java | 2 +- .../qo/ShipmentPcPackingMaterialInfoQO.java | 15 ++ .../qo/ShipmentUnPackingMaterialInfoQO.java | 15 ++ .../common/pojo/qo/ShipmentUnpackingQO.java | 4 +- .../pojo/vo/ShipmentMaterialCodeItemVO.java | 5 - .../pojo/vo/ShipmentMaterialCodeQRVO.java | 7 + .../entity/WmsShipmentMaterialCodeItem.java | 30 ++- .../WmsShipmentMaterialCodeItemMapper.java | 2 - .../IWmsShipmentMaterialCodeItemService.java | 10 +- ...ShipmentMaterialCodeItemQrServiceImpl.java | 17 +- ...msShipmentMaterialCodeItemServiceImpl.java | 35 ++- .../WmsShipmentMaterialCodeItemMapper.xml | 20 -- .../WmsShipmentMaterialCodeItemQrMapper.xml | 2 +- .../WmsShipmentPackagingCodeItemMapper.xml | 2 +- .../controller/MaterialCodeController.java | 232 ++++++++---------- .../controller/PackagingCodeController.java | 221 ++++++++++++----- .../shipment/pojo/vo/MaterialCodeItemVO.java | 15 -- .../com/nflg/wms/shipment/util/KeyUtil.java | 4 - .../template/物料码打印导入模板.xlsx | Bin 0 -> 12518 bytes 24 files changed, 389 insertions(+), 305 deletions(-) create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPackingMaterialInfoQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPcPackingMaterialInfoQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentUnPackingMaterialInfoQO.java create mode 100644 nflg-wms-shipment/src/main/resources/template/物料码打印导入模板.xlsx diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomMaterialDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomMaterialDTO.java index f4a066c9..2e737819 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomMaterialDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomMaterialDTO.java @@ -5,7 +5,6 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.experimental.Accessors; -import org.ttzero.excel.annotation.ExcelColumn; import java.math.BigDecimal; import java.util.List; @@ -76,4 +75,9 @@ public class BomMaterialDTO { */ @NotEmpty private List children; + + /** + * 物料单位 + */ + private String materialUnit; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialCodeItemAddQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialCodeItemAddQO.java index a37acc48..bde62beb 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialCodeItemAddQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialCodeItemAddQO.java @@ -33,12 +33,6 @@ public class MaterialCodeItemAddQO { @NotNull private BigDecimal num; - /** - * 实发数量 - */ - @NotNull - private BigDecimal actualNum; - /** * 单位 */ @@ -62,15 +56,4 @@ public class MaterialCodeItemAddQO { */ @NotBlank private String productionOrderNumber; - - /** - * 箱号 - */ - @NotBlank - private String boxNo; - - /** - * 最小包装量 - */ - private BigDecimal minPackagingNum; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialCodeItemUpdateQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialCodeItemUpdateQO.java index 9f46a6eb..279eb3c3 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialCodeItemUpdateQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialCodeItemUpdateQO.java @@ -24,12 +24,6 @@ public class MaterialCodeItemUpdateQO { @NotNull private BigDecimal num; - /** - * 实发数量 - */ - @NotNull - private BigDecimal actualNum; - /** * 单位 */ @@ -54,14 +48,4 @@ public class MaterialCodeItemUpdateQO { @NotBlank private String productionOrderNumber; - /** - * 箱号 - */ - @NotBlank - private String boxNo; - - /** - * 最小包装量 - */ - private BigDecimal minPackagingNum; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPCPackingQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPCPackingQO.java index a3a9d6d4..82a8e8a7 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPCPackingQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPCPackingQO.java @@ -18,5 +18,5 @@ public class ShipmentPCPackingQO { * 物料条码号 */ @NotEmpty - private List codes; + private List materialInfos; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPackingMaterialInfoQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPackingMaterialInfoQO.java new file mode 100644 index 00000000..637d4b46 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPackingMaterialInfoQO.java @@ -0,0 +1,15 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class ShipmentPackingMaterialInfoQO { + @NotNull + private Long materialQRId; + + @NotNull + private BigDecimal actualNum; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPackingQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPackingQO.java index f1b98b8d..b3bff3cf 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPackingQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPackingQO.java @@ -19,5 +19,5 @@ public class ShipmentPackingQO { * 物料二维码ID列表 */ @NotEmpty - private List materialQRIds; + private List materialInfos; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPcPackingMaterialInfoQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPcPackingMaterialInfoQO.java new file mode 100644 index 00000000..bbe545c4 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentPcPackingMaterialInfoQO.java @@ -0,0 +1,15 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class ShipmentPcPackingMaterialInfoQO { + @NotNull + private String code; + + @NotNull + private BigDecimal actualNum; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentUnPackingMaterialInfoQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentUnPackingMaterialInfoQO.java new file mode 100644 index 00000000..2419fa0c --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentUnPackingMaterialInfoQO.java @@ -0,0 +1,15 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class ShipmentUnPackingMaterialInfoQO { + @NotNull + private Long materialQRId; + + @NotNull + private BigDecimal actualNum; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentUnpackingQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentUnpackingQO.java index 9fe8a0ef..60e1f603 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentUnpackingQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ShipmentUnpackingQO.java @@ -15,9 +15,9 @@ public class ShipmentUnpackingQO { private Long packagingCodeId; /** - * 要添加的物料二维码ID列表 + * 要添加的物料信息列表 */ - private List materialQRIdsForAdd; + private List materialInfosForAdd; // /** // * 要删除的物料二维码ID列表 diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ShipmentMaterialCodeItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ShipmentMaterialCodeItemVO.java index 7f82121a..ce9454b0 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ShipmentMaterialCodeItemVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ShipmentMaterialCodeItemVO.java @@ -55,11 +55,6 @@ public class ShipmentMaterialCodeItemVO { */ private String boxNo; - /** - * 最小包装量 - */ - private BigDecimal minPackagingNum; - /** * 状态,0:未装箱;1:已装箱;5:已安装 */ diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ShipmentMaterialCodeQRVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ShipmentMaterialCodeQRVO.java index e3c1ff97..862eb69b 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ShipmentMaterialCodeQRVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ShipmentMaterialCodeQRVO.java @@ -11,6 +11,8 @@ public class ShipmentMaterialCodeQRVO { private Long id; + private Long itemId; + /** * 序号 */ @@ -90,4 +92,9 @@ public class ShipmentMaterialCodeQRVO { */ private String orderDate; + /** + * 剩余数量 + */ + private BigDecimal leftNum; + } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsShipmentMaterialCodeItem.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsShipmentMaterialCodeItem.java index 33bc2dba..43554c78 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsShipmentMaterialCodeItem.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsShipmentMaterialCodeItem.java @@ -12,6 +12,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.Objects; /** *

@@ -79,26 +80,11 @@ public class WmsShipmentMaterialCodeItem implements Serializable { */ private String boxNo; - /** - * 最小包装量 - */ - private BigDecimal minPackagingNum; - /** * 状态,0:未装箱;1:装箱中;2:已装箱; */ private Integer status; - /** - * 打包箱数量 - */ - private Integer packingNum; - - /** - * 剩余打包箱数量 - */ - private Integer packingLeft; - /** * 创建人 */ @@ -123,6 +109,18 @@ public class WmsShipmentMaterialCodeItem implements Serializable { private String key; public String getKey() { - return this.materialNo + "|" + this.productionOrderNumber + "|" + this.boxNo; + return this.materialNo + "|" + this.productionOrderNumber + "|" + this.parentMaterialDescribe; + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + WmsShipmentMaterialCodeItem that = (WmsShipmentMaterialCodeItem) o; + return Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hashCode(id); } } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemMapper.java index 9ff1427e..f790cbd7 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemMapper.java @@ -20,8 +20,6 @@ public interface WmsShipmentMaterialCodeItemMapper extends BaseMapper getByCodeId(Long codeId); - void updatePackingNum(Set ids); - List getListByMaterialNos(Set materialNos); List getListByItemIds(List ids); diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemService.java index 602f11d1..fb032e90 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemService.java @@ -1,11 +1,13 @@ package com.nflg.wms.repository.service; +import com.baomidou.mybatisplus.extension.service.IService; import com.nflg.wms.common.pojo.vo.MaterialItemPrintVO; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO; import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem; -import com.baomidou.mybatisplus.extension.service.IService; +import java.math.BigDecimal; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -20,9 +22,11 @@ public interface IWmsShipmentMaterialCodeItemService extends IService getByCodeId(Long codeId); - void updatePackingNum(Set ids); - List getListByMaterialNos(Set materialNos); List getListByItemIds(List ids); + + void updateStatusAndBoxNoAndActualNum(List items, Integer status, String boxNo, BigDecimal actualNum, Map id2ActualNumMap); + + List getSameMaterialItems(Long materialCodeId, String materialNo, String parentMaterialDescribe, String productionOrderNumber); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemQrServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemQrServiceImpl.java index bd15e710..417be08c 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemQrServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemQrServiceImpl.java @@ -1,13 +1,17 @@ package com.nflg.wms.repository.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO; +import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem; import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItemQr; import com.nflg.wms.repository.mapper.WmsShipmentMaterialCodeItemQrMapper; import com.nflg.wms.repository.mapper.dto.GetQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatusParamsDTO; import com.nflg.wms.repository.service.IWmsShipmentMaterialCodeItemQrService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.repository.service.IWmsShipmentMaterialCodeItemService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.List; import java.util.Set; @@ -22,6 +26,9 @@ import java.util.Set; @Service public class WmsShipmentMaterialCodeItemQrServiceImpl extends ServiceImpl implements IWmsShipmentMaterialCodeItemQrService { + @Autowired + private IWmsShipmentMaterialCodeItemService wmsShipmentMaterialCodeItemService; + @Override public String getQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatus(GetQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatusParamsDTO params) { return baseMapper.getQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatus(params); @@ -29,7 +36,13 @@ public class WmsShipmentMaterialCodeItemQrServiceImpl extends ServiceImpl sameMaterialItems = + wmsShipmentMaterialCodeItemService.getSameMaterialItems(item.getMaterialCodeId(), item.getMaterialNo(), item.getParentMaterialDescribe(), item.getProductionOrderNumber()); + BigDecimal totalActualNum = sameMaterialItems.stream().map(WmsShipmentMaterialCodeItem::getActualNum).reduce(BigDecimal.ZERO, BigDecimal::add); + info.setLeftNum(item.getNum().subtract(totalActualNum)); + return info; } @Override diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemServiceImpl.java index 818a8141..51a5dab8 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemServiceImpl.java @@ -1,14 +1,19 @@ package com.nflg.wms.repository.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.wms.common.pojo.vo.MaterialItemPrintVO; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO; +import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem; import com.nflg.wms.repository.mapper.WmsShipmentMaterialCodeItemMapper; import com.nflg.wms.repository.service.IWmsShipmentMaterialCodeItemService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -27,11 +32,6 @@ public class WmsShipmentMaterialCodeItemServiceImpl extends ServiceImpl ids) { - baseMapper.updatePackingNum(ids); - } - @Override public List getListByMaterialNos(Set materialNos) { return baseMapper.getListByMaterialNos(materialNos); @@ -41,4 +41,27 @@ public class WmsShipmentMaterialCodeItemServiceImpl extends ServiceImpl getListByItemIds(List ids) { return baseMapper.getListByItemIds(ids); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatusAndBoxNoAndActualNum(List items, Integer status, String boxNo, BigDecimal actualNum, Map id2ActualNumMap) { + for (WmsShipmentMaterialCodeItem item : items) { + item.setStatus(status); + item.setBoxNo(boxNo); + item.setActualNum(actualNum != null ? actualNum : id2ActualNumMap.get(item.getId())); + item.setUpdateBy(UserUtil.getUserName()); + item.setUpdateTime(LocalDateTime.now()); + } + this.updateBatchById(items); + } + + @Override + public List getSameMaterialItems(Long materialCodeId, String materialNo, String parentMaterialDescribe, String productionOrderNumber) { + return lambdaQuery() + .eq(WmsShipmentMaterialCodeItem::getMaterialCodeId, materialCodeId) + .eq(WmsShipmentMaterialCodeItem::getMaterialNo, materialNo) + .eq(WmsShipmentMaterialCodeItem::getParentMaterialDescribe, parentMaterialDescribe) + .eq(WmsShipmentMaterialCodeItem::getProductionOrderNumber, productionOrderNumber) + .list(); + } } diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemMapper.xml index 76e4110a..3737f121 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemMapper.xml @@ -6,26 +6,6 @@ select * from wms_shipment_material_code_item where material_code_id = #{codeId} - - WITH updated_data AS ( - SELECT - "id", - packing_num, - (packing_num - (SELECT COUNT(1) FROM wms_shipment_material_code_item_qr WHERE item_id = - wms_shipment_material_code_item."id" AND status = 1)) as new_packing_left - FROM wms_shipment_material_code_item - ) - UPDATE wms_shipment_material_code_item t - SET - packing_left = u.new_packing_left, - status = CASE WHEN u.new_packing_left = 0 THEN 2 WHEN u.new_packing_left=u.packing_num THEN 0 ELSE 1 END - FROM updated_data u - WHERE t."id" = u."id" and t."id" IN - - #{id} - - - SELECT ROW_NUMBER() OVER () AS "index",it."id",qr.no,cit.material_no,cit.material_describe,cit.num - ,qr.num as actualNum,cit.unit,d.device_no,d.customer_name + ,cit.actual_num as actualNum,cit.unit,d.device_no,d.customer_name FROM wms_shipment_packaging_code_item it INNER JOIN wms_shipment_material_code_item_qr qr ON it.material_code_item_qr_id=qr."id" INNER JOIN wms_shipment_material_code_item cit ON qr.item_id=cit."id" 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 d4e71ff3..8e39c328 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 @@ -16,7 +16,6 @@ import com.nflg.wms.common.pojo.vo.MaterialPdfVO; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO; import com.nflg.wms.common.util.EecExcelUtil; -import com.nflg.wms.common.util.NumberUtil; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; @@ -187,7 +186,7 @@ public class MaterialCodeController extends BaseController { response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("物料清单导入模板.xlsx", StandardCharsets.UTF_8)); new Workbook() - .addSheet(new TemplateSheet(new ClassPathResource("template/物料码打印导出模板.xlsx").getInputStream()) + .addSheet(new TemplateSheet(new ClassPathResource("template/物料码打印导入模板.xlsx").getInputStream()) ).writeTo(response.getOutputStream()); } @@ -252,34 +251,31 @@ public class MaterialCodeController extends BaseController { item.setMaterialNo(row.getString(1)); item.setMaterialDescribe(row.getString(2)); item.setNum(row.getDecimal(3)); - item.setActualNum(row.getDecimal(4)); - item.setMinPackagingNum(item.getActualNum()); - item.setUnit(row.getString(5)); - item.setProjectType(row.getString(6)); - item.setParentMaterialDescribe(row.getString(7)); - item.setProductionOrderNumber(row.getString(8)); - item.setBoxNo(row.getString(9)); + item.setActualNum(BigDecimal.ZERO); + item.setUnit(row.getString(4)); + item.setProjectType(row.getString(5)); + item.setParentMaterialDescribe(row.getString(6)); + item.setProductionOrderNumber(row.getString(7)); item.setCreateBy(UserUtil.getUserName()); item.setCreateTime(LocalDateTime.now()); - item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum())); - item.setPackingLeft(item.getPackingNum()); + items.add(item); qrs.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) .setNo(KeyUtil.nextFCode()) - .setNum(item.getMinPackagingNum()) + .setNum(item.getNum()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) ); } }); -// Set repeats = items.stream().collect(Collectors.groupingBy(WmsShipmentMaterialCodeItem::getKey)) -// .values() -// .stream().filter(list -> list.size() > 1) -// .map(list -> list.get(0).getMaterialNo()) -// .collect(Collectors.toSet()); -// VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(repeats)) -// .throwMessage("以下物料重复:" + StrUtil.join(",", repeats)); + Set repeats = items.stream().collect(Collectors.groupingBy(WmsShipmentMaterialCodeItem::getKey)) + .values() + .stream().filter(list -> list.size() > 1) + .map(list -> list.get(0).getMaterialNo()) + .collect(Collectors.toSet()); + VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(repeats)) + .throwMessage("以下物料重复:" + StrUtil.join(",", repeats)); materialCodeService.save(materialCode); materialCodeItemService.saveBatch(items); materialCodeItemQrService.saveBatch(qrs); @@ -293,38 +289,21 @@ public class MaterialCodeController extends BaseController { @Transactional @PostMapping("item/add") public ApiResult addItem(@Valid @RequestBody MaterialCodeItemAddQO qo) { - VUtil.trueThrowBusinessError(materialCodeItemService.lambdaQuery() - .eq(WmsShipmentMaterialCodeItem::getMaterialCodeId, qo.getMaterialCodeId()) - .eq(WmsShipmentMaterialCodeItem::getProductionOrderNumber, qo.getProductionOrderNumber()) - .eq(WmsShipmentMaterialCodeItem::getMaterialNo, qo.getMaterialNo()) - .exists()).throwMessage("物料已存在"); + List sameMaterialItems = + materialCodeItemService.getSameMaterialItems(qo.getMaterialCodeId(), qo.getMaterialNo(), qo.getParentMaterialDescribe(), qo.getProductionOrderNumber()); + VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(sameMaterialItems)).throwMessage("物料已存在"); WmsShipmentMaterialCodeItem item = Convert.convert(WmsShipmentMaterialCodeItem.class, qo); - if (Objects.isNull(qo.getMinPackagingNum())) { - item.setMinPackagingNum(qo.getNum()); - } else { - VUtil.trueThrowBusinessError(qo.getMinPackagingNum().compareTo(qo.getNum()) > 0) - .throwMessage("最小包装数量不能大于数量"); - item.setMinPackagingNum(qo.getMinPackagingNum()); - } item.setId(IdUtil.getSnowflakeNextId()); item.setCreateBy(UserUtil.getUserName()); item.setCreateTime(LocalDateTime.now()); -// BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP); -// BigDecimal decimalValue = result.remainder(BigDecimal.ONE); -// item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue()); - item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum())); - item.setPackingLeft(item.getPackingNum()); -// int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue(); - for (int i = 1; i <= item.getPackingNum(); i++) { - materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr() - .setItemId(item.getId()) - .setNo(KeyUtil.nextFCode()) -// .setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum()) - .setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i)) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(LocalDateTime.now()) - ); - } + item.setActualNum(BigDecimal.ZERO); + materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr() + .setItemId(item.getId()) + .setNo(KeyUtil.nextFCode()) + .setNum(item.getNum()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()) + ); materialCodeItemService.save(item); materialCodeService.lambdaUpdate() .set(WmsShipmentMaterialCode::getStatus, 1) @@ -342,37 +321,26 @@ public class MaterialCodeController extends BaseController { public ApiResult updateItem(@Valid @RequestBody MaterialCodeItemUpdateQO qo) { WmsShipmentMaterialCodeItem item = materialCodeItemService.getById(qo.getId()); VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("清单明细不存在"); - if (Objects.isNull(qo.getMinPackagingNum())) { - qo.setMinPackagingNum(qo.getNum()); - } else { - VUtil.trueThrowBusinessError(qo.getMinPackagingNum().compareTo(qo.getNum()) > 0) - .throwMessage("最小包装数量不能大于数量"); - qo.setMinPackagingNum(qo.getNum()); - } VUtil.trueThrowBusinessError(item.getStatus() > 0) .throwMessage("已装箱,不能修改"); + + + List sameMaterialItems = + materialCodeItemService.getSameMaterialItems(item.getMaterialCodeId(), item.getMaterialNo(), item.getParentMaterialDescribe(), item.getProductionOrderNumber()); + VUtil.trueThrowBusinessError(sameMaterialItems.size() > 1) + .throwMessage("存在多行物料编码、生产订单号、上级物料描述三个字段相同的情况,不允许修改"); + item = Convert.convert(WmsShipmentMaterialCodeItem.class, qo); + item.setUpdateBy(UserUtil.getUserName()); item.setUpdateTime(LocalDateTime.now()); materialCodeItemService.updateById(item); materialCodeItemQrService.lambdaUpdate() + .set(WmsShipmentMaterialCodeItemQr::getNum, item.getNum()) + .set(WmsShipmentMaterialCodeItemQr::getUpdateBy, UserUtil.getUserName()) + .set(WmsShipmentMaterialCodeItemQr::getUpdateTime, LocalDateTime.now()) .eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId()) - .remove(); -// BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP); -// BigDecimal decimalValue = result.remainder(BigDecimal.ONE); -// item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue()); - item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum())); - item.setPackingLeft(item.getPackingNum()); -// int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue(); - for (int i = 1; i <= item.getPackingNum(); i++) { - materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr() - .setItemId(item.getId()) - .setNo(KeyUtil.nextFCode()) - .setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i)) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(LocalDateTime.now()) - ); - } + .update(); return ApiResult.success(); } @@ -390,6 +358,9 @@ public class MaterialCodeController extends BaseController { .stream() .map(WmsShipmentMaterialCodeItem::getId) .collect(Collectors.toSet()); + + VUtil.trueThrowBusinessError(deleteIds.size() < ids.size()).throwMessage("已装箱的不可删除"); + if (CollectionUtil.isNotEmpty(deleteIds)) { materialCodeItemService.lambdaUpdate() .in(WmsShipmentMaterialCodeItem::getId, deleteIds) @@ -412,8 +383,7 @@ public class MaterialCodeController extends BaseController { public ApiResult importItemFromExcel(@RequestParam Long materialCodeId, @RequestParam Boolean cover, @RequestParam("file") MultipartFile file) throws IOException { WmsShipmentMaterialCode materialCode = materialCodeService.getById(materialCodeId); VUtil.trueThrowBusinessError(Objects.isNull(materialCode)).throwMessage("清单不存在"); - List dbItems = materialCodeItemService.lambdaQuery() - .select(WmsShipmentMaterialCodeItem::getId, WmsShipmentMaterialCodeItem::getMaterialNo, WmsShipmentMaterialCodeItem::getStatus) + List allDbItems = materialCodeItemService.lambdaQuery() .eq(WmsShipmentMaterialCodeItem::getMaterialCodeId, materialCodeId) .list(); List qrsForAdd = new ArrayList<>(); @@ -422,6 +392,7 @@ public class MaterialCodeController extends BaseController { List itemsForAdd = new ArrayList<>(); List itemsForUpdate = new ArrayList<>(); List repeats = new ArrayList<>(); + List dbExists = new ArrayList<>(); reader.sheet(0).rows().forEach(row -> { log.debug("第{}行:{}", row.getRowNum(), row); if (row.getRowNum() > 4 && StrUtil.isNotBlank(row.getString(1))) { @@ -431,74 +402,77 @@ public class MaterialCodeController extends BaseController { item.setMaterialNo(row.getString(1)); item.setMaterialDescribe(row.getString(2)); item.setNum(row.getDecimal(3)); - item.setActualNum(row.getDecimal(4)); - item.setMinPackagingNum(item.getActualNum()); - item.setUnit(row.getString(5)); - item.setProjectType(row.getString(6)); - item.setParentMaterialDescribe(row.getString(7)); - item.setProductionOrderNumber(row.getString(8)); - item.setBoxNo(row.getString(9)); - item.setPackingNum(1); - item.setPackingLeft(1); + item.setActualNum(BigDecimal.ZERO); + item.setUnit(row.getString(4)); + item.setProjectType(row.getString(5)); + item.setParentMaterialDescribe(row.getString(6)); + item.setProductionOrderNumber(row.getString(7)); if (itemsForAdd.stream().anyMatch(it -> it.getKey().equals(item.getKey()))) { repeats.add(item.getMaterialNo()); } else { + List dbItems = allDbItems.stream() + .filter(it -> it.getKey().equals(item.getKey())) + .collect(Collectors.toList()); if (!cover) { - item.setCreateBy(UserUtil.getUserName()); - item.setCreateTime(LocalDateTime.now()); - itemsForAdd.add(item); - qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() - .setItemId(item.getId()) - .setNo(KeyUtil.nextFCode()) - .setNum(item.getMinPackagingNum()) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(LocalDateTime.now()) - ); - } else { - WmsShipmentMaterialCodeItem dbItem = dbItems.stream() - .filter(it -> it.getKey().equals(item.getKey())) - .findFirst() - .orElse(null); - if (Objects.isNull(dbItem)) { + if (CollectionUtil.isNotEmpty(dbItems)) { + dbExists.add(dbItems.get(0).getMaterialNo()); + } else { item.setCreateBy(UserUtil.getUserName()); item.setCreateTime(LocalDateTime.now()); itemsForAdd.add(item); qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) .setNo(KeyUtil.nextFCode()) - .setNum(item.getMinPackagingNum()) + .setNum(item.getNum()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) ); - } else if (dbItem.getStatus() == 0) { - item.setId(dbItem.getId()); - item.setUpdateBy(UserUtil.getUserName()); - item.setUpdateTime(LocalDateTime.now()); - itemsForUpdate.add(item); - List iqrs = materialCodeItemQrService.lambdaQuery() - .eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId()) - .list(); - if (iqrs.size() > 1) { - materialCodeItemQrService.lambdaUpdate() + } + } else { + if (CollectionUtil.isEmpty(dbItems)) { + item.setCreateBy(UserUtil.getUserName()); + item.setCreateTime(LocalDateTime.now()); + itemsForAdd.add(item); + qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() + .setItemId(item.getId()) + .setNo(KeyUtil.nextFCode()) + .setNum(item.getNum()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()) + ); + } else { + if (dbItems.size() > 1) { + dbExists.add(dbItems.get(0).getMaterialNo()); + } else if (dbItems.get(0).getStatus() == 0) { + item.setId(dbItems.get(0).getId()); + item.setUpdateBy(UserUtil.getUserName()); + item.setUpdateTime(LocalDateTime.now()); + itemsForUpdate.add(item); + List iqrs = materialCodeItemQrService.lambdaQuery() .eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId()) - .remove(); - } - if (iqrs.size() == 1) { - qrsForUpdate.add( - new WmsShipmentMaterialCodeItemQr() - .setId(iqrs.get(0).getId()) - .setNum(item.getMinPackagingNum()) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(LocalDateTime.now()) - ); - } else { - qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() - .setItemId(item.getId()) - .setNo(KeyUtil.nextFCode()) - .setNum(item.getMinPackagingNum()) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(LocalDateTime.now()) - ); + .list(); + if (iqrs.size() > 1) { + materialCodeItemQrService.lambdaUpdate() + .eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId()) + .remove(); + } + if (iqrs.size() == 1) { + qrsForUpdate.add( + new WmsShipmentMaterialCodeItemQr() + .setId(iqrs.get(0).getId()) + .setNum(item.getNum()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()) + ); + } else { + qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() + .setItemId(item.getId()) + .setNo(KeyUtil.nextFCode()) + .setNum(item.getNum()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()) + ); + } } } } @@ -507,6 +481,10 @@ public class MaterialCodeController extends BaseController { }); VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(repeats)) .throwMessage("以下物料重复:" + StrUtil.join(",", repeats)); + + VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(dbExists)) + .throwMessage(!cover ? "以下物料已存在:" + StrUtil.join(",", dbExists) + : "存在多行物料编码、生产订单号、上级物料描述三个字段相同的情况,不允许修改: " + dbExists); if (CollectionUtil.isNotEmpty(itemsForAdd)) { materialCodeItemService.saveBatch(itemsForAdd); materialCodeService.lambdaUpdate() @@ -569,7 +547,7 @@ public class MaterialCodeController extends BaseController { } /** - * 清单明细-根据二维码唯一号获取物料信息(PDA使用) + * 清单明细-根据二维码唯一号获取物料信息 * @param code 二维码唯一号 */ @GetMapping("getInfoByQRCode") diff --git a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/PackagingCodeController.java b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/PackagingCodeController.java index 298b1dce..e78081e7 100644 --- a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/PackagingCodeController.java +++ b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/PackagingCodeController.java @@ -1,45 +1,40 @@ package com.nflg.wms.shipment.controller; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; -import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; -import com.nflg.wms.common.pojo.dto.DeliverNormalOrderItemDTO; import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO; import com.nflg.wms.common.pojo.vo.ShipmentPackagingCodeVO; +import com.nflg.wms.common.util.NumberUtil; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; -import com.nflg.wms.repository.entity.DictionaryItem; -import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItemQr; -import com.nflg.wms.repository.entity.WmsShipmentPackagingCode; -import com.nflg.wms.repository.entity.WmsShipmentPackagingCodeItem; +import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.shipment.service.BasdeSerialNumberControllerService; -import com.nflg.wms.shipment.util.HtmlToImageUtil; -import com.nflg.wms.shipment.util.KeyUtil; -import com.nflg.wms.shipment.util.PdfGeneratorUtil; -import com.nflg.wms.shipment.util.QRCodeUtil; -import com.nflg.wms.shipment.util.ThymeleafUtil; +import com.nflg.wms.shipment.util.*; 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.core.io.ClassPathResource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.core.io.ClassPathResource; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.io.ByteArrayOutputStream; +import java.math.BigDecimal; import java.net.URL; import java.time.LocalDateTime; import java.util.*; @@ -186,10 +181,25 @@ public class PackagingCodeController extends BaseController { WmsShipmentPackagingCode info = packagingCodeService.getById(qo.getPackagingCodeId()); VUtil.trueThrowBusinessError(Objects.isNull(info)).throwMessage("包装箱不存在"); VUtil.trueThrowBusinessError(info.getStatus() == 2).throwMessage("该箱已发车"); - List items = materialCodeItemQrService.listByIds(qo.getMaterialQRIds()); - VUtil.trueThrowBusinessError(items.size() != qo.getMaterialQRIds().size()).throwMessage("数据有变动,请重新扫码"); - items.removeIf(item -> item.getStatus() == 1); - if (CollectionUtil.isNotEmpty(items)) { + List materialQRIds = qo.getMaterialInfos().stream().map(ShipmentPackingMaterialInfoQO::getMaterialQRId).collect(Collectors.toList()); + List itemQrs = materialCodeItemQrService.listByIds(materialQRIds); + VUtil.trueThrowBusinessError(itemQrs.size() != materialQRIds.size()).throwMessage("数据有变动,请重新扫码"); + itemQrs.removeIf(item -> item.getStatus() == 1); + Set itemIdSet = itemQrs.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet()); + List items = materialCodeItemService.listByIds(itemIdSet); + + Map qrId2ItemIdMap = itemQrs.stream().collect(Collectors.toMap(WmsShipmentMaterialCodeItemQr::getId, WmsShipmentMaterialCodeItemQr::getItemId, (oldValue, newValue) -> newValue)); + Map itemId2ActualNumMap = new HashMap<>(); + for (ShipmentPackingMaterialInfoQO materialInfoQO : qo.getMaterialInfos()) { + Long qrId = materialInfoQO.getMaterialQRId(); + Long itemId = qrId2ItemIdMap.get(qrId); + itemId2ActualNumMap.put(itemId, materialInfoQO.getActualNum()); + } + + // 校验实际数量 + Map materialCodeItemKey2NewActualNumMap = checkActualNum(itemId2ActualNumMap, items); + + if (CollectionUtil.isNotEmpty(itemQrs)) { if (info.getStatus() == 0) { packagingCodeService.lambdaUpdate() .set(WmsShipmentPackagingCode::getStatus, 1) @@ -199,44 +209,131 @@ public class PackagingCodeController extends BaseController { .eq(WmsShipmentPackagingCode::getStatus, 0) .update(); } - items.forEach(item -> { + itemQrs.forEach(item -> { item.setStatus(1); item.setUpdateBy(UserUtil.getUserName()); item.setUpdateTime(LocalDateTime.now()); }); packagingCodeItemService.saveBatch( - items.stream().map(it -> new WmsShipmentPackagingCodeItem() + itemQrs.stream().map(it -> new WmsShipmentPackagingCodeItem() .setPackagingCodeId(qo.getPackagingCodeId()) .setMaterialCodeItemQrId(it.getId()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) ).toList() ); - materialCodeItemQrService.updateBatchById(items); - materialCodeItemService.updatePackingNum(items.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet())); + materialCodeItemQrService.updateBatchById(itemQrs); + materialCodeItemService.updateStatusAndBoxNoAndActualNum(items, 2, info.getNo(), null, itemId2ActualNumMap); + + addMaterialCodeItemIfNumBigThenActualNum(materialCodeItemKey2NewActualNumMap, items); } return ApiResult.success(); } + private void addMaterialCodeItemIfNumBigThenActualNum(Map materialCodeItemKey2NewActualNumMap, List items) { + if (CollectionUtil.isNotEmpty(materialCodeItemKey2NewActualNumMap)) { + Set duplicateKeySet = new HashSet<>(); + for (WmsShipmentMaterialCodeItem item : items) { + if (duplicateKeySet.contains(item.getKey())) { + continue; + } + duplicateKeySet.add(item.getKey()); + BigDecimal newActualNum = materialCodeItemKey2NewActualNumMap.get(item.getKey()); + if (item.getNum().compareTo(newActualNum) > 0) { + + List sameMaterialItems = + materialCodeItemService.getSameMaterialItems(item.getMaterialCodeId(), item.getMaterialNo(), item.getParentMaterialDescribe(), item.getProductionOrderNumber()); + + for (WmsShipmentMaterialCodeItem m : sameMaterialItems) { + if (!m.getId().equals(item.getId()) && m.getStatus() == 0) { + return; + } + } + + WmsShipmentMaterialCodeItem newMaterialCodeItem = new WmsShipmentMaterialCodeItem(); + BeanUtil.copyProperties(item, newMaterialCodeItem); + + newMaterialCodeItem.setId(IdUtil.getSnowflakeNextId()); + newMaterialCodeItem.setActualNum(BigDecimal.ZERO); + newMaterialCodeItem.setBoxNo(null); + newMaterialCodeItem.setStatus(0); + newMaterialCodeItem.setCreateBy(UserUtil.getUserName()); + newMaterialCodeItem.setCreateTime(LocalDateTime.now()); + + materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr() + .setItemId(newMaterialCodeItem.getId()) + .setNo(KeyUtil.nextFCode()) + .setNum(newMaterialCodeItem.getNum()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()) + ); + materialCodeItemService.save(newMaterialCodeItem); + } + } + } + } + + private Map checkActualNum(Map itemId2ActualNumMap, List items) { + Map materialCodeItemKey2NewActualNumMap = new HashMap<>(); + for (WmsShipmentMaterialCodeItem item : items) { + + BigDecimal allNewActualNum = materialCodeItemKey2NewActualNumMap.getOrDefault(item.getKey(), BigDecimal.ZERO); + BigDecimal actualNum = itemId2ActualNumMap.get(item.getId()); + + VUtil.trueThrowBusinessError(actualNum.compareTo(BigDecimal.ZERO) <= 0).throwMessage("物料数量不能小于等于0"); + + List sameMaterialItems = + materialCodeItemService.getSameMaterialItems(item.getMaterialCodeId(), item.getMaterialNo(), item.getParentMaterialDescribe(), item.getProductionOrderNumber()); + BigDecimal totalActualNum = sameMaterialItems.stream().map(WmsShipmentMaterialCodeItem::getActualNum).reduce(BigDecimal.ZERO, BigDecimal::add); + + BigDecimal newActualNum; + if (allNewActualNum.compareTo(BigDecimal.ZERO) == 0) { + newActualNum = totalActualNum.add(actualNum); + } else { + newActualNum = allNewActualNum.add(actualNum); + } + + VUtil.trueThrowBusinessError(item.getNum().compareTo(newActualNum) < 0).throwMessage(String.format("物料%s数量不足,剩余数量:%s", item.getMaterialNo(), NumberUtil.format(item.getNum().subtract(totalActualNum)))); + + materialCodeItemKey2NewActualNumMap.put(item.getKey(), newActualNum); + } + return materialCodeItemKey2NewActualNumMap; + } + /** * 装箱打包(PC使用) */ @Transactional @PostMapping("pcPack") public ApiResult pcPack(@Valid @RequestBody ShipmentPCPackingQO shipmentPCPackingQO) { - List ids = shipmentPCPackingQO.getCodes().stream() - .map(code -> materialCodeItemQrService.getInfoByQRCode(code)) + List ids = shipmentPCPackingQO.getMaterialInfos().stream() + .map(info -> materialCodeItemQrService.getInfoByQRCode(info.getCode())) .filter(Objects::nonNull) .map(ShipmentMaterialCodeQRVO::getId) .toList(); - List items = materialCodeItemQrService.lambdaQuery() + List itemQrs = materialCodeItemQrService.lambdaQuery() .in(WmsShipmentMaterialCodeItemQr::getId, ids) .list(); - VUtil.trueThrowBusinessError(items.size() != ids.size()).throwMessage("数据有变动,请重新扫码"); - items.removeIf(item -> item.getStatus() == 1); - if (CollectionUtil.isEmpty(items)) { + VUtil.trueThrowBusinessError(itemQrs.size() != ids.size()).throwMessage("数据有变动,请重新扫码"); + itemQrs.removeIf(item -> item.getStatus() == 1); + if (CollectionUtil.isEmpty(itemQrs)) { return ApiResult.success(); } + + Set itemIdSet = itemQrs.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet()); + List items = materialCodeItemService.listByIds(itemIdSet); + + Map qrCode2ItemIdMap = itemQrs.stream().collect(Collectors.toMap(WmsShipmentMaterialCodeItemQr::getNo, WmsShipmentMaterialCodeItemQr::getItemId, (oldValue, newValue) -> newValue)); + Map itemId2ActualNumMap = new HashMap<>(); + for (ShipmentPcPackingMaterialInfoQO materialInfoQO : shipmentPCPackingQO.getMaterialInfos()) { + String code = materialInfoQO.getCode(); + Long itemId = qrCode2ItemIdMap.get(code); + itemId2ActualNumMap.put(itemId, materialInfoQO.getActualNum()); + } + + // 校验实际数量 + Map materialCodeItemKey2NewActualNumMap = checkActualNum(itemId2ActualNumMap, items); + WmsShipmentPackagingCode info = packagingCodeService.getById(shipmentPCPackingQO.getPackagingCodeId()); VUtil.trueThrowBusinessError(Objects.isNull(info)).throwMessage("包装箱不存在"); VUtil.trueThrowBusinessError(info.getStatus() == 2).throwMessage("该箱已发车"); @@ -249,24 +346,23 @@ public class PackagingCodeController extends BaseController { .eq(WmsShipmentPackagingCode::getStatus, 0) .update(); } - items.forEach(item -> { + itemQrs.forEach(item -> { item.setStatus(1); item.setUpdateBy(UserUtil.getUserName()); item.setUpdateTime(LocalDateTime.now()); }); packagingCodeItemService.saveBatch( - items.stream().map(it -> new WmsShipmentPackagingCodeItem() + itemQrs.stream().map(it -> new WmsShipmentPackagingCodeItem() .setPackagingCodeId(shipmentPCPackingQO.getPackagingCodeId()) .setMaterialCodeItemQrId(it.getId()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) ).toList() ); - materialCodeItemQrService.updateBatchById(items); - materialCodeItemService.updatePackingNum(items.stream() - .map(WmsShipmentMaterialCodeItemQr::getItemId) - .collect(Collectors.toSet()) - ); + materialCodeItemQrService.updateBatchById(itemQrs); + materialCodeItemService.updateStatusAndBoxNoAndActualNum(items, 2, info.getNo(),null, itemId2ActualNumMap); + addMaterialCodeItemIfNumBigThenActualNum(materialCodeItemKey2NewActualNumMap, items); + return ApiResult.success(); } @@ -306,7 +402,9 @@ public class PackagingCodeController extends BaseController { .eq(WmsShipmentMaterialCodeItemQr::getStatus, 1) .in(WmsShipmentMaterialCodeItemQr::getId, item.getMaterialCodeItemQrId()) .update(); - materialCodeItemService.updatePackingNum(Collections.singleton(qr.getItemId())); + + WmsShipmentMaterialCodeItem materialCodeItem = materialCodeItemService.getById(qr.getItemId()); + materialCodeItemService.updateStatusAndBoxNoAndActualNum(Lists.newArrayList(materialCodeItem), 0, "", BigDecimal.ZERO, null); packagingCodeService.updateStatus(item.getPackagingCodeId()); } } @@ -314,7 +412,7 @@ public class PackagingCodeController extends BaseController { } /** - * 拆箱&添加物料(PDA使用) + * 拆箱下,添加物料(PDA使用) */ @Transactional @PostMapping("unpack") @@ -322,11 +420,28 @@ public class PackagingCodeController extends BaseController { WmsShipmentPackagingCode info = packagingCodeService.getById(qo.getPackagingCodeId()); VUtil.trueThrowBusinessError(Objects.isNull(info)).throwMessage("包装箱不存在"); VUtil.trueThrowBusinessError(info.getStatus() >= 2).throwMessage("该箱已装车"); - if (CollectionUtil.isNotEmpty(qo.getMaterialQRIdsForAdd())) { + + List materialQRIds = qo.getMaterialInfosForAdd().stream().map(ShipmentUnPackingMaterialInfoQO::getMaterialQRId).collect(Collectors.toList()); + + if (CollectionUtil.isNotEmpty(materialQRIds)) { List qrs = materialCodeItemQrService.lambdaQuery() .eq(WmsShipmentMaterialCodeItemQr::getStatus, 0) - .in(WmsShipmentMaterialCodeItemQr::getId, qo.getMaterialQRIdsForAdd()) + .in(WmsShipmentMaterialCodeItemQr::getId, materialQRIds) .list(); + + Set itemIdSet = qrs.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet()); + List items = materialCodeItemService.listByIds(itemIdSet); + + Map qrId2ItemIdMap = qrs.stream().collect(Collectors.toMap(WmsShipmentMaterialCodeItemQr::getId, WmsShipmentMaterialCodeItemQr::getItemId, (oldValue, newValue) -> newValue)); + Map itemId2ActualNumMap = new HashMap<>(); + for (ShipmentUnPackingMaterialInfoQO materialInfoQO : qo.getMaterialInfosForAdd()) { + Long qrId = materialInfoQO.getMaterialQRId(); + Long itemId = qrId2ItemIdMap.get(qrId); + itemId2ActualNumMap.put(itemId, materialInfoQO.getActualNum()); + } + // 校验实际数量 + Map materialCodeItemKey2NewActualNumMap = checkActualNum(itemId2ActualNumMap, items); + if (CollectionUtil.isNotEmpty(qrs)) { if (info.getStatus() == 0) { packagingCodeService.lambdaUpdate() @@ -351,35 +466,11 @@ public class PackagingCodeController extends BaseController { ).toList() ); materialCodeItemQrService.updateBatchById(qrs); - materialCodeItemService.updatePackingNum(qrs.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet())); + + materialCodeItemService.updateStatusAndBoxNoAndActualNum(items, 2, info.getNo(), null, itemId2ActualNumMap); + addMaterialCodeItemIfNumBigThenActualNum(materialCodeItemKey2NewActualNumMap, items); } } -// if (CollectionUtil.isNotEmpty(qo.getMaterialQRIdsForDel())) { -// List items = packagingCodeItemService.lambdaQuery() -// .eq(WmsShipmentPackagingCodeItem::getPackagingCodeId, qo.getPackagingCodeId()) -// .in(WmsShipmentPackagingCodeItem::getId, qo.getMaterialQRIdsForDel()) -// .list(); -// if (CollectionUtil.isNotEmpty(items)) { -// packagingCodeItemService.lambdaUpdate() -// .eq(WmsShipmentPackagingCodeItem::getPackagingCodeId, qo.getPackagingCodeId()) -// .in(WmsShipmentPackagingCodeItem::getId, qo.getMaterialQRIdsForDel()) -// .remove(); -// List qrs = materialCodeItemQrService.lambdaQuery() -// .eq(WmsShipmentMaterialCodeItemQr::getStatus, 1) -// .in(WmsShipmentMaterialCodeItemQr::getId, items.stream().map(WmsShipmentPackagingCodeItem::getMaterialCodeItemQrId).toList()) -// .list(); -// if (CollectionUtil.isNotEmpty(qrs)) { -// materialCodeItemQrService.lambdaUpdate() -// .set(WmsShipmentMaterialCodeItemQr::getStatus, 0) -// .set(WmsShipmentMaterialCodeItemQr::getUpdateBy, UserUtil.getUserName()) -// .set(WmsShipmentMaterialCodeItemQr::getUpdateTime, LocalDateTime.now()) -// .eq(WmsShipmentMaterialCodeItemQr::getStatus, 1) -// .in(WmsShipmentMaterialCodeItemQr::getId, items.stream().map(WmsShipmentPackagingCodeItem::getMaterialCodeItemQrId).toList()) -// .update(); -// materialCodeItemService.updatePackingNum(qrs.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet())); -// } -// } -// } packagingCodeService.updateStatus(qo.getPackagingCodeId()); return ApiResult.success(); } diff --git a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/pojo/vo/MaterialCodeItemVO.java b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/pojo/vo/MaterialCodeItemVO.java index ba20f7b9..62637598 100644 --- a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/pojo/vo/MaterialCodeItemVO.java +++ b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/pojo/vo/MaterialCodeItemVO.java @@ -59,26 +59,11 @@ public class MaterialCodeItemVO { */ private String boxNo; - /** - * 最小包装量 - */ - private BigDecimal minPackagingNum; - /** * 状态,0:未装箱;1:装箱中;2:已装箱; */ private Integer status; - /** - * 打包箱数量 - */ - private Integer packingNum; - - /** - * 剩余打包箱数量 - */ - private Integer packingLeft; - /** * 创建人 */ diff --git a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java index de3c6378..965075f6 100644 --- a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java +++ b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java @@ -22,10 +22,6 @@ public class KeyUtil { return wmsShipmentMaterialCodeItemQrService; } - public static String next(){ - return TSID.Factory.getTsid().toString(); - } - public static String nextBase62(){ return TSID.Factory.getTsid().encode(62); } diff --git a/nflg-wms-shipment/src/main/resources/template/物料码打印导入模板.xlsx b/nflg-wms-shipment/src/main/resources/template/物料码打印导入模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2f07d2596cb9e6a2fdb48004b0b85f5bd5cb29ab GIT binary patch literal 12518 zcma)ibzB|Ewl(gq!QI_GxVyV^aCZ&v?(P-{1h?RB!QC~uy9D^i%)57Ha_@V;um0%n z(`T>R)oWMnuC7`N(x6~4K)*_;+_u24^S=u8`-O>}v4W$Wy%U4NyBXU14X8iN+D5^@ zasvYa@qz#WA^qLV(B7Wj-NrgQUQh~@=|k{+fE(0OQ#uARRXUnrfApfL3jxbpy?;6> zX{Ye0{2qOPBn;wPc+Hw2I)45yIoZ$vcVBYe{Eu|E8l}Hohgp&3OMIhHz#BIiYBh* zfnyzG;+vnhSz&c09C!N=KKl_$Z|gHi@O)w(!}d=iGBaiY-OOnzPdfO4C+>NCY~5x* zy*57nwvN?LtNe}_FLz(#*UZ(A>6pwx6e}Q)15!w^kAsw>!Gm_ZiTPfEc@IE1;OJ~4 z>%MtAnhCiwzEbnyovx!_56B&&!2Y1Iq6_yS(#^{CA#>?HmEWi1taCk_%)+ z3ptndhMaz$PLU;tuNE2ms#7ZxHPBkZw-Tlxp$+iz;(_2SyiEA{_V|>II{hR6Yk)js zqqTF0hJ+%J7JK<@D;ystjdvu-agbVpC9BB+6b9Y(@fVdw9d-!z5{vF;6zfgNWyd8` z^K+e1=o&}FhU$Dfa{^l&W!QcGv6yx2RAhJwG76Jt!*cvQ zQhylB$#E16=BqUq1Iy=qfm|Kd<7qtY&Y3)~VYMqsdnP6!J*V>Q`}+t5yTg zKntbGpgOKx26|R8fpv!GYw_VupnpaHoOhvJ#}^HKU_93h$jHx-?i*F&FwdK2%#1~HDLysKp^ z7lIf^H2|&gCBph0clp;V2n`hU+tpzox+TmO-N{<{Ifp9XGrj#f_Q0D$xFxoS=r&w>&R2&fAl2Q-R}-{v0<1w(qdHL> z0nuiW;#HlANqt!-iqwr{Qk%)s9D?2utVqiVglL6n6qvQd7T>Bnz4GdOi;yqjP;CK) zkKT1n@qp{X`nz4EY~_xE!;RsbTnzRjMdQw?;~3IG)KC@yV=SZKMGU@c*5P3eMhjZ}m#EoOU5{J~>iF#% zDrYpYN6UlNMufeEgLO6nt*1QLd%}WxjfQnbNTVSx6j*Ej$u^c(Mprf1y%}8n$HD^O z3v6Tg;;_9I0ZTwxjIeVmwbPPu!Ex$!f*zfW$W&;wl9~@W@Raz+6St=@^!T)MJs^%L zE}~-39%3VfZPd&(CHuISAN{oR=T6b=(5=}V_`76IxAO@MU|cUN2@GakE(Z<$4yXHj z4gEYO`@aeKyU!(w*5RPYnCG^w}<(R4uL+mzN+<{;%@xoGvN1{-wRKV8m* z8T29G#vvvVI~{?-W$n7*K*M;=*;W0J|KC&9uL;w8s&Y05*Z_W;Fg?8DB1J<00j1&m z`5O7R*&oJ#D{iSyPWh*5{(hpWPG-J8UtV6GtoFBy zd60#lMI=UcO4RxEFOkB1J{CDl-q_x>?$7g*qQ``$U8b?NQ^l_rN8fL>hApT{5C<6e z&@MR4z$Q!0r=}Dk_G;wpLx&sM_K60ew?!COP+kB}MlVh~7T115GsO0y96*k1|A?)a zo43#ZdUN$fymQqD$ah_Aps?3Zv7!k7BK^Pup-<_4}aqa&vRg!i=a4orbo?0$Z-L?l%KYJ$7DE#-Vhz)`o%L%B&7xMz+{v zXYNxuwo)^o#d|?z8tHh`%2qWS04prvGpBs3Zkf6zeTRTAKyFX$%Un5!k|wPpXl-l* z*H0}#Lu1RyCj8L$vD1T=Ro$AN%LRnVCv3?wdA#>gwVXIKrR;pWE=56a% zv<`@i1}T`_d_wH2gK1hZUbRRgx}K(%0}ugFEHzd!%ZxbWJEF7|PHdQ zM@L(UYoTdORz=zKUNB*!?+5Ll?oN-*n06vw~MR5h7sq zeO`tM^jAeY`5&+5dM8FMYs21dTOlWWU+Zz9uvilh`uAgfy`CQW3uE;^T~~v3P+jCf zozH|xI7j2=@!|X14lsV*H6fI1Dj+aAs^}t`q$gTa%m-~_@2`McApUx33qy$y=o(F2 ziK%E;kU^u{@+OPI-9*^0=oc*m{%WoV4tr1GpfIi@6Vc2UbwBFfAO8MVaK2^CsA|^%Q$_7sCv5 zcK2M2jjL?|h8aN1F5U+d8roko{KBUPmql*?HMo#D!3Vddpu5TlJq3Cx6Q(olSOPo; z0cz(n3#n2{WedH)M!-y!!Dsbi+YQ5+AyF97K>%x&(Rkz#-ACI{PN|VPQdDHc@4?a|R7p39ZYT4eH)5dldz zY8R26PU@8?p|wWb_2ko%Cg@BJ%`0mHs`*I!w;q)CV2Vq6|BAGYf_2pcH}vJ_3H1Zf z7VkS354DJVspF8oyXBJW7!3Axk`WDgS*#Xn*>gHWP;6I2g(?;^`2>Q#1SEVHa!^o6 zOepJl!tOb7mEd+HipeH*K3UQ@szZT-AZbp9j4h>QY{d4?+S0LaA43;Mh-#L%gn8Nu zLhE+KO zpOKjC+k#-qM*}WZJ~dpVp&4lKFjxe{^X)5HA@Zf_)KW0A4bO8%iqc0#k(-_^VC?Gf z#ooe&P8rVq(oBJMJ85J@a-)@UQ?!Y6t7t_!5Z7u* zh|V<0Ym{!Dsxl+F@zni{ueoIf_o&SQ8d#Qy5B8F@jMM4UH_Zw}q0~u1v*$48xH6}H z=KeH#X(4$5Uo5ZbhB{swxy&rm>O&HXmJ5MV(C$dkVT4@sY10pQLNwUcT4^OyP?(Wb zk<`i6PJovvDypnD%hy-<(1bo`S|+3b2l8P1o_S>m1`2R+^?N%}Yj)f(<36rtDOn0bX4<@}*$MKhl@FnTM) zd9mF#z?jA%0{r@7NF8(yl1JxzmdtPJ6XZj+eC2*;&3FEI$^G@Yzmc%XP5J&4qzee>eHQ)eCFkVq zVGVHlHE%xEJ+{*kM}Ldyd#hdsAwU{GTe~l5oLL+OQPNf=g(_;Soxf{ncP22s=Oz`E z@NX;%ray_@^wbR&;GpWlA z9;zJemu<`xiuHyLFN+D6b`WQ#tO~SyUb{EzGS;PKC&;zo^r;S>AUjvF9l?dbrk%BE z6WV_{x7Hdghh=F9s7Hdda@ zaWs}Fy&EnT7x29*yi0V}DS5}&KQ^H~ZPIM;fAEN9czok=i{bDxDpa5a7v6rQ*?RS< zef#7(>Pr-|ll|SBETp9KMjMu$INd%2K0DH^vtEU!DYp~iEk_$0E=PNL{nJnA3}5lm zq^B)VsUKl(!RTe&bD{-o(9Sa&$(JCli8oKLP@W>yRfspQokFIw6dy;Jl z^0c?44iR+TUT)4N2tGZLKU-T>@#Fx>yqL~mKUeIchJK?w*3BZg|MrrO?@ki^36(p^ z`l6~y>}9H%aeYmP%5_s8>-A68vPIhzz+3G?EE%mLnadEr|9(98&{4vtmV zs&7avTH&*2BK`qKjqH%siZ9$_)(%*>(M{eGq zvI}b%ZTIJ);yr!MyQrMXbKpS19sb@jy68qeW$*>6AuqfGDVx9Vvz}N^b?R8!4JO|*=a|m2XT9S0(unPWH5ZjVz-Y#P&xZ8SmxzwkjC20`ErjxZ&7SBmUO=pZm>1r*Q+bXu zg!%5O(W@l-k8SapVC5&Sk|X3!X1^SP+YHUJB+|eR`HKCs`>+$;#Gnkw?+k9iJ88?YLrC&>)Fk+WNs?92}}zvxy#va z!7f85se8S2P!Ba}bfbUN)LlRK%;CXz-INt<>+rTAkfIb`Bs7po`svD4={C4#B^NC3 zIt)c#_{lEQp{6zF%NNWCe)hAH2O+V*5d9-jI0^tgZ^}t+&yE>A$t8?DJ&D7?E|XGp zCQoeqgGk(W$^&aNi5L@M*YYgC?yzU*nqk#~JIU6}r+X%ZBBK^2FPR>1?YO zE=@kGEU4@ry|n-rtzr1m+lopG=Mi;TtZ#uqg}wWCI%3<W#8_B@Um_ElsUlu!Tcx&Q+6z8=EIl!Im}43qjuc$ zLTEtT%0D(^G%9C^B4|=BCoT|Fcs8T%(-ZvGs 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 Date: Wed, 13 May 2026 17:43:49 +0800 Subject: [PATCH 03/10] =?UTF-8?q?1445=20WMS=E7=B3=BB=E7=BB=9F=E6=9C=80?= =?UTF-8?q?=E5=B0=8F=E5=8C=85=E8=A3=85=E7=A0=81=E6=95=B0=E9=87=8F=E6=94=B6?= =?UTF-8?q?=E8=B4=A7=E5=92=8C=E5=87=BA=E5=BA=93=E5=85=81=E8=AE=B8=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ComponentOutboundController.java | 59 ++++++++++++++++++- .../admin/controller/NormalPGIController.java | 17 +++++- .../controller/OutAssistanceController.java | 45 ++++++++++---- .../controller/OutCostCenterController.java | 44 +++++++++++--- .../controller/OutProduceController.java | 45 ++++++++++---- .../controller/QrCodeMasterController.java | 7 +++ .../com/nflg/wms/common/pojo/qo/QRCodeQO.java | 12 ++-- .../nflg/wms/common/pojo/vo/QrCodeItemVO.java | 5 +- .../com/nflg/wms/common/pojo/vo/QrCodeVO.java | 4 +- .../repository/entity/WmsQrCodeMaster.java | 5 ++ .../service/IWmsOutProduceService.java | 5 ++ .../service/IWmsQrCodeMasterService.java | 5 +- .../impl/WmsOutProduceServiceImpl.java | 23 ++++++++ .../impl/WmsQrCodeMasterServiceImpl.java | 33 ++++++++++- .../mapper/WmsQrCodeMasterMapper.xml | 6 +- 15 files changed, 266 insertions(+), 49 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java index d97be155..5fd33589 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java @@ -1,9 +1,11 @@ package com.nflg.wms.admin.controller; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Pair; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.nflg.wms.admin.repository.InventoryForOutRepository; import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository; @@ -26,6 +28,7 @@ import com.nflg.wms.starter.BaseController; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; +import org.apache.commons.compress.utils.Lists; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -222,6 +225,9 @@ public class ComponentOutboundController extends BaseController { .setIType("A") .setIvDelivery(packing.getVbelv()); List records = new ArrayList<>(); + + List qrCodeMasters = Lists.newArrayList(); + for (ComponentOutboundItemInputQO item : request.getItems()) { WmsComponentOutboundItem outboundItem = setWmsComponentOutboundItem(packing, item, packingItems, outbound); if (Objects.isNull(outboundItem)) @@ -269,7 +275,9 @@ public class ComponentOutboundController extends BaseController { ).findFirst().orElse(null); if (Objects.isNull(codeItem)) { - scanCodesGroup.add(code); + ScanCodeQO copyScanCodeQO = new ScanCodeQO(); + BeanUtil.copyProperties(code, copyScanCodeQO); + scanCodesGroup.add(copyScanCodeQO); } else { codeItem.setCodeNum(codeItem.getCodeNum().add(code.getCodeNum())); } @@ -282,7 +290,7 @@ public class ComponentOutboundController extends BaseController { buildZwm3a20DTO(zwm3a20DTO, scanCodesGroup, outboundItem); - for (ScanCodeQO code : scanCodesGroup) { + for (ScanCodeQO code : item.getScanCodes()) { // 组装条码信息 // WmsComponentOutboundScanCodes scanCodes = new WmsComponentOutboundScanCodes(); // scanCodes.setOutboundItemId(outboundItem.getId()) @@ -318,6 +326,19 @@ public class ComponentOutboundController extends BaseController { .setCreateBy(UserUtil.getUserName()) .setCreateTime(Instant.now()) ); + + qrCodeMasters.add(qrCodeContent); + BigDecimal num = code.getCodeNum(); + BigDecimal leftNum = qrCodeContent.getQuantity().subtract(qrCodeContent.getOutBoundNum()); + VUtil.trueThrowBusinessError(leftNum.compareTo(num) < 0).throwMessage("条码号" + qrCodeContent.getBarcodeCode() + ",数量剩余:" + NumberUtil.toStr(leftNum)); + + BigDecimal outBoundNum = qrCodeContent.getOutBoundNum().add(num); + if (qrCodeContent.getPackagingType() == 1 || qrCodeContent.getQuantity().compareTo(outBoundNum) <= 0) { + qrCodeContent.setProcessStage(BarCodeProcessStage.OutBound.getState()); + } + if (qrCodeContent.getPackagingType() == 0) { + qrCodeContent.setOutBoundNum(outBoundNum); + } } //组装下库存信息 setInventoryOutDTO(inventories, outboundItem.getIdnrk(), packing.getFactoryNo() @@ -331,6 +352,29 @@ public class ComponentOutboundController extends BaseController { if (!request.getNeedAudit()) { outbound.setFinish(true); componentOutboundControllerService.confirmPda(outbound, outboundItems, records, zwm3a20DTO, inventories); + + qrCodeMasters.stream() + .filter(p -> p.getPackagingType() == 1) + .forEach(p -> { + List children = qrCodeMasterService.lambdaQuery() + .eq(WmsQrCodeMaster::getParentBarcodeId, p.getId()) + .list(); + if (CollectionUtil.isNotEmpty(children)) { + children.forEach(c -> { + c.setProcessStage(p.getProcessStage()); + c.setFactoryCode(p.getFactoryCode()); + c.setStorageLocation(p.getStorageLocation()); + c.setBinLocation(p.getBinLocation()); + c.setProcessStage(p.getProcessStage()); + c.setLastScanBy(p.getLastScanBy()); + c.setLastScanByname(p.getLastScanByname()); + c.setLastScanTime(p.getLastScanTime()); + c.setOutBoundNum(c.getQuantity()); + }); + qrCodeMasterService.updateBarCode(children); + } + }); + qrCodeMasterService.updateBarCode(qrCodeMasters); } else { outbound.setFinish(false); outbound.setAuditState(0); @@ -388,10 +432,15 @@ public class ComponentOutboundController extends BaseController { p.setFactoryCode(record.getFactoryNo()); p.setStorageLocation(record.getWarehouseNo()); p.setBinLocation(record.getBinNo()); - p.setProcessStage(BarCodeProcessStage.OutBound.getState()); p.setLastScanBy(UserUtil.getUserId()); p.setLastScanByname(UserUtil.getUserName()); p.setLastScanTime(LocalDateTime.now()); + + BigDecimal outBoundNum = p.getOutBoundNum().add(record.getNum()); + if (p.getPackagingType() == 1 || p.getQuantity().compareTo(outBoundNum) <= 0) { + p.setProcessStage(BarCodeProcessStage.OutBound.getState()); + } + if (p.getPackagingType() == 1) { List children = qrCodeMasterService.lambdaQuery() .eq(WmsQrCodeMaster::getParentBarcodeId, p.getId()) @@ -406,8 +455,12 @@ public class ComponentOutboundController extends BaseController { c.setLastScanBy(p.getLastScanBy()); c.setLastScanByname(p.getLastScanByname()); c.setLastScanTime(p.getLastScanTime()); + c.setOutBoundNum(c.getQuantity()); }); + qrCodeMasterService.updateBarCode(children); } + } else { + p.setOutBoundNum(outBoundNum); } }); qrCodeMasterService.updateBarCode(qrCodeMasters); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java index c707e187..6224ffa0 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java @@ -39,6 +39,7 @@ import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; +import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang3.tuple.Triple; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; @@ -232,19 +233,19 @@ public class NormalPGIController extends BaseController { if (item.getReceiptNum().equals(BigDecimal.ZERO)) continue; // 处理二维码 + List autoFindChildCodes = Lists.newArrayList(); for (PDAScanCodeQO code : item.getScanCodes()) { WmsQrCodeMaster qrCodeMaster = qrCodeMasterService.lambdaQuery() .eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId()) .one(); VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】"); if (qrCodeMaster.getPackagingType() == 1) { - code.setCodeNum(BigDecimal.ZERO); List childCode = qrCodeMasterService.lambdaQuery() .eq(WmsQrCodeMaster::getParentBarcodeId, qrCodeMaster.getId()) .list(); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(childCode)).throwMessage("箱码【" + code.getCodeId() + "】为空箱"); for (WmsQrCodeMaster child : childCode) { - item.getScanCodes().add(new PDAScanCodeQO() + autoFindChildCodes.add(new PDAScanCodeQO() .setBatchNumber(child.getBatchNo()) .setSerialNumbers(child.getSerialNo()) .setCodeId(child.getBarcodeCode()) @@ -254,6 +255,7 @@ public class NormalPGIController extends BaseController { } } } + item.getScanCodes().addAll(autoFindChildCodes); SAPSyncParamsDTO materialInfoInOrder = sapSyncParamsDTOS.stream() .filter(sapSyncParamsDTO -> sapSyncParamsDTO.getEbeln().equals(item.getPoNum()) @@ -279,11 +281,14 @@ public class NormalPGIController extends BaseController { .eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId()) .one(); VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】"); + VUtil.trueThrowBusinessError(BigDecimal.ZERO.equals(code.getCodeNum())).throwMessage("数量不能为0"); + qrCodeMaster.setLastScanTime(LocalDateTime.now()); qrCodeMaster.setLastScanBy(UserUtil.getUserId()); qrCodeMaster.setLastScanByname(UserUtil.getUserName()); qrCodeMaster.setProcessStage(BarCodeProcessStage.Checking.getState()); qrCodeMaster.setReceiptItemId(orderItemId); + qrCodeMaster.setQuantity(code.getCodeNum()); qrCodes.add(qrCodeMaster); } } else { @@ -294,12 +299,14 @@ public class NormalPGIController extends BaseController { .eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId()) .one(); VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】"); + VUtil.trueThrowBusinessError(BigDecimal.ZERO.equals(code.getCodeNum())).throwMessage("数量不能为0"); qrCodeMaster.setLastScanTime(LocalDateTime.now()); qrCodeMaster.setLastScanBy(UserUtil.getUserId()); qrCodeMaster.setLastScanByname(UserUtil.getUserName()); qrCodeMaster.setStorageLocation(materialInfoInOrder.getWarehouseNo()); qrCodeMaster.setProcessStage(BarCodeProcessStage.Received.getState()); qrCodeMaster.setReceiptItemId(orderItemId); + qrCodeMaster.setQuantity(code.getCodeNum()); qrCodes.add(qrCodeMaster); } } @@ -1663,11 +1670,14 @@ public class NormalPGIController extends BaseController { .eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId()) .one(); VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】"); + VUtil.trueThrowBusinessError(BigDecimal.ZERO.equals(code.getCodeNum())).throwMessage("数量不能为0"); + qrCodeMaster.setLastScanTime(LocalDateTime.now()); qrCodeMaster.setLastScanBy(UserUtil.getUserId()); qrCodeMaster.setLastScanByname(UserUtil.getUserName()); qrCodeMaster.setProcessStage(BarCodeProcessStage.Checking.getState()); qrCodeMaster.setReceiptItemId(orderItemId); + qrCodeMaster.setQuantity(code.getCodeNum()); qrCodes.add(qrCodeMaster); } } else { @@ -1678,12 +1688,15 @@ public class NormalPGIController extends BaseController { .eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId()) .one(); VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】"); + VUtil.trueThrowBusinessError(BigDecimal.ZERO.equals(code.getCodeNum())).throwMessage("数量不能为0"); + qrCodeMaster.setLastScanTime(LocalDateTime.now()); qrCodeMaster.setLastScanBy(UserUtil.getUserId()); qrCodeMaster.setLastScanByname(UserUtil.getUserName()); qrCodeMaster.setStorageLocation(materialInfoInOrder.getWarehouseNo()); qrCodeMaster.setProcessStage(BarCodeProcessStage.Received.getState()); qrCodeMaster.setReceiptItemId(orderItemId); + qrCodeMaster.setQuantity(code.getCodeNum()); qrCodes.add(qrCodeMaster); } // } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java index 5c14ecad..b5577e74 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.nflg.wms.admin.pojo.dto.PdfPageDTO; import com.nflg.wms.admin.pojo.request.UpdateItemNumRequest; @@ -93,7 +94,8 @@ public class OutAssistanceController extends BaseController { @Resource private IOptRecordService optRecordService; - + @Resource + private IWmsOutProduceService outProduceService; /** * 查询SAP领料订单数据 */ @@ -272,11 +274,10 @@ public class OutAssistanceController extends BaseController { List records = new ArrayList<>(); List ticketItems = new ArrayList<>(); // boolean enableOutScanChild = paramConfigService.getEnableOutScanChild(); - Set allQrCodes = request.getItems().stream() - .map(OutProduceSubmitItemQO::getQrCodes) - .flatMap(Collection::stream) - .map(QRCodeQO::getContent) - .collect(Collectors.toSet()); + + Map qrCodeToNumMap = outProduceService.getQrCodeToNumMap(request.getItems()); + Set allQrCodes = qrCodeToNumMap.keySet(); + List qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) ? Collections.emptyList() : qrCodeMasterService.lambdaQuery() .eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState()) .in(WmsQrCodeMaster::getBarcodeCode, allQrCodes) @@ -341,8 +342,21 @@ public class OutAssistanceController extends BaseController { VUtil.trueThrowBusinessError(!Objects.equals(qrCodeMaster.getProcessStage(), BarCodeProcessStage.InBound.getState())) .throwMessage("二维码" + qrCode + "未入库"); String materialNo = item.getMatnr1(); - item.setLeft(item.getLeft().subtract(qrCodeMaster.getQuantity())); - pti.setNum(pti.getNum().add(qrCodeMaster.getQuantity())); + + BigDecimal num = qrCodeToNumMap.get(qrCodeMaster.getBarcodeCode()); + BigDecimal leftNum = qrCodeMaster.getQuantity().subtract(qrCodeMaster.getOutBoundNum()); + VUtil.trueThrowBusinessError(leftNum.compareTo(num) < 0).throwMessage("条码号" + qrCode.getContent() + ",数量剩余:" + NumberUtil.toStr(leftNum)); + + BigDecimal outBoundNum = qrCodeMaster.getOutBoundNum().add(num); + if (qrCodeMaster.getPackagingType() == 1 || qrCodeMaster.getQuantity().compareTo(outBoundNum) <= 0) { + qrCodeMaster.setProcessStage(BarCodeProcessStage.OutBound.getState()); + } + if (qrCodeMaster.getPackagingType() == 0) { + qrCodeMaster.setOutBoundNum(outBoundNum); + } + + item.setLeft(item.getLeft().subtract(num)); + pti.setNum(pti.getNum().add(num)); VUtil.trueThrowBusinessError(!qitem.isQiTao() && item.getLeft().compareTo(BigDecimal.ZERO) < 0) .throwMessage("物料" + materialNo + "的领取数量超出申请限制"); // qrCodeMaster.setFactoryCode(""); @@ -369,7 +383,7 @@ public class OutAssistanceController extends BaseController { .setBinNo(qrCodeMaster.getBinLocation()) .setUnit(item.getMeins()) .setQiTao(false) - .setNum(qrCodeMaster.getQuantity()) + .setNum(num) .setEbeln(order.getEbeln()) .setEbelp(item.getEbelp()) .setCreateBy(UserUtil.getUserName()) @@ -400,7 +414,9 @@ public class OutAssistanceController extends BaseController { c.setLastScanBy(p.getLastScanBy()); c.setLastScanByname(p.getLastScanByname()); c.setLastScanTime(p.getLastScanTime()); + c.setOutBoundNum(c.getQuantity()); }); + qrCodeMasterService.updateBarCode(children); } }); qrCodeMasterService.updateBarCode(qrCodeMasters); @@ -532,7 +548,12 @@ public class OutAssistanceController extends BaseController { p.setFactoryCode(record.getFactoryNo()); p.setStorageLocation(record.getWarehouseNo()); p.setBinLocation(record.getBinNo()); - p.setProcessStage(BarCodeProcessStage.OutBound.getState()); + + BigDecimal outBoundNum = p.getOutBoundNum().add(record.getNum()); + if (p.getPackagingType() == 1 || p.getQuantity().compareTo(outBoundNum) <= 0) { + p.setProcessStage(BarCodeProcessStage.OutBound.getState()); + } + p.setLastScanBy(UserUtil.getUserId()); p.setLastScanByname(UserUtil.getUserName()); p.setLastScanTime(LocalDateTime.now()); @@ -550,8 +571,12 @@ public class OutAssistanceController extends BaseController { c.setLastScanBy(p.getLastScanBy()); c.setLastScanByname(p.getLastScanByname()); c.setLastScanTime(p.getLastScanTime()); + c.setOutBoundNum(c.getQuantity()); }); + qrCodeMasterService.updateBarCode(children); } + } else { + p.setOutBoundNum(outBoundNum); } }); qrCodeMasterService.updateBarCode(qrCodeMasters); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java index c49afff4..2e86b4e8 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.nflg.wms.admin.pojo.dto.PdfPageDTO; import com.nflg.wms.admin.pojo.request.UpdateItemNumRequest; @@ -96,6 +97,8 @@ public class OutCostCenterController extends BaseController { @Resource private IOptRecordService optRecordService; + @Resource + private IWmsOutProduceService outProduceService; /** * 查询SAP领料订单数据 @@ -273,11 +276,10 @@ public class OutCostCenterController extends BaseController { List datas = outCostcenterItemService.getList(order.getId()); List records = new ArrayList<>(); List ticketItems = new ArrayList<>(); - Set allQrCodes = request.getItems().stream() - .map(OutProduceSubmitItemQO::getQrCodes) - .flatMap(Collection::stream) - .map(QRCodeQO::getContent) - .collect(Collectors.toSet()); + + Map qrCodeToNumMap = outProduceService.getQrCodeToNumMap(request.getItems()); + Set allQrCodes = qrCodeToNumMap.keySet(); + List qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) ? Collections.emptyList() : qrCodeMasterService.lambdaQuery() @@ -340,8 +342,21 @@ public class OutCostCenterController extends BaseController { VUtil.trueThrowBusinessError(!Objects.equals(qrCodeMaster.getProcessStage(), BarCodeProcessStage.InBound.getState())) .throwMessage("二维码" + qrCode + "未入库"); String materialNo = qrCodeMaster.getMaterialCode(); - item.setLeft(item.getLeft().subtract(qrCodeMaster.getQuantity())); - pti.setNum(pti.getNum().add(qrCodeMaster.getQuantity())); + + BigDecimal num = qrCodeToNumMap.get(qrCodeMaster.getBarcodeCode()); + BigDecimal leftNum = qrCodeMaster.getQuantity().subtract(qrCodeMaster.getOutBoundNum()); + VUtil.trueThrowBusinessError(leftNum.compareTo(num) < 0).throwMessage("条码号" + qrCode.getContent() + ",数量剩余:" + NumberUtil.toStr(leftNum)); + + BigDecimal outBoundNum = qrCodeMaster.getOutBoundNum().add(num); + if (qrCodeMaster.getPackagingType() == 1 || qrCodeMaster.getQuantity().compareTo(outBoundNum) <= 0) { + qrCodeMaster.setProcessStage(BarCodeProcessStage.OutBound.getState()); + } + if (qrCodeMaster.getPackagingType() == 0) { + qrCodeMaster.setOutBoundNum(outBoundNum); + } + + item.setLeft(item.getLeft().subtract(num)); + pti.setNum(pti.getNum().add(num)); VUtil.trueThrowBusinessError(!qitem.isQiTao() && item.getLeft().compareTo(BigDecimal.ZERO) < 0) .throwMessage("物料" + materialNo + "的领取数量超出申请限制"); // qrCodeMaster.setFactoryCode(""); @@ -367,7 +382,7 @@ public class OutCostCenterController extends BaseController { .setFactoryNo(qrCodeMaster.getFactoryCode()) .setWarehouseNo(qrCodeMaster.getStorageLocation()) .setBinNo(qrCodeMaster.getBinLocation()) - .setNum(qrCodeMaster.getQuantity()) + .setNum(num) .setCreateBy(UserUtil.getUserName()) .setCreateTime(Instant.now()) ); @@ -396,7 +411,9 @@ public class OutCostCenterController extends BaseController { c.setLastScanBy(p.getLastScanBy()); c.setLastScanByname(p.getLastScanByname()); c.setLastScanTime(p.getLastScanTime()); + c.setOutBoundNum(c.getQuantity()); }); + qrCodeMasterService.updateBarCode(children); } }); qrCodeMasterService.updateBarCode(qrCodeMasters); @@ -527,7 +544,12 @@ public class OutCostCenterController extends BaseController { p.setFactoryCode(record.getFactoryNo()); p.setStorageLocation(record.getWarehouseNo()); p.setBinLocation(record.getBinNo()); - p.setProcessStage(BarCodeProcessStage.OutBound.getState()); + + BigDecimal outBoundNum = p.getOutBoundNum().add(record.getNum()); + if (p.getPackagingType() == 1 || p.getQuantity().compareTo(outBoundNum) <= 0) { + p.setProcessStage(BarCodeProcessStage.OutBound.getState()); + } + p.setLastScanBy(UserUtil.getUserId()); p.setLastScanByname(UserUtil.getUserName()); p.setLastScanTime(LocalDateTime.now()); @@ -545,8 +567,12 @@ public class OutCostCenterController extends BaseController { c.setLastScanBy(p.getLastScanBy()); c.setLastScanByname(p.getLastScanByname()); c.setLastScanTime(p.getLastScanTime()); + c.setOutBoundNum(c.getQuantity()); }); + qrCodeMasterService.updateBarCode(children); } + } else { + p.setOutBoundNum(outBoundNum); } }); qrCodeMasterService.updateBarCode(qrCodeMasters); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java index a5351678..2939e55b 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.nflg.wms.admin.pojo.dto.PdfPageDTO; import com.nflg.wms.admin.pojo.request.UpdateItemNumRequest; @@ -402,11 +403,10 @@ public class OutProduceController extends BaseController { List datas = outProduceItemService.getList(order.getId()); List records = new ArrayList<>(); List ticketItems = new ArrayList<>(); - Set allQrCodes = request.getItems().stream() - .map(OutProduceSubmitItemQO::getQrCodes) - .flatMap(Collection::stream) - .map(QRCodeQO::getContent) - .collect(Collectors.toSet()); + + Map qrCodeToNumMap = outProduceService.getQrCodeToNumMap(request.getItems()); + + Set allQrCodes = qrCodeToNumMap.keySet(); List qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) ? Collections.emptyList() : qrCodeMasterService.lambdaQuery() .eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState()) .in(WmsQrCodeMaster::getBarcodeCode, allQrCodes) @@ -473,17 +473,31 @@ public class OutProduceController extends BaseController { VUtil.trueThrowBusinessError(!Objects.equals(qrCodeMaster.getProcessStage(), BarCodeProcessStage.InBound.getState())) .throwMessage("二维码" + qrCode + "未入库"); String materialNo = qrCodeMaster.getMaterialCode(); + + BigDecimal num = qrCodeToNumMap.get(qrCodeMaster.getBarcodeCode()); + BigDecimal leftNum = qrCodeMaster.getQuantity().subtract(qrCodeMaster.getOutBoundNum()); + VUtil.trueThrowBusinessError(leftNum.compareTo(num) < 0).throwMessage("条码号" + qrCode.getContent() + ",数量剩余:" + NumberUtil.toStr(leftNum)); + if (Objects.equals(order.getType(), 0)) { - item.setLockNum(item.getLockNum().subtract(qrCodeMaster.getQuantity())); + item.setLockNum(item.getLockNum().subtract(num)); } - item.setNum(item.getNum().add(qrCodeMaster.getQuantity())); - pti.setNum(pti.getNum().add(qrCodeMaster.getQuantity())); + + item.setNum(item.getNum().add(num)); + pti.setNum(pti.getNum().add(num)); + + BigDecimal outBoundNum = qrCodeMaster.getOutBoundNum().add(num); + if (qrCodeMaster.getPackagingType() == 1 || qrCodeMaster.getQuantity().compareTo(outBoundNum) <= 0) { + qrCodeMaster.setProcessStage(BarCodeProcessStage.OutBound.getState()); + } + if (qrCodeMaster.getPackagingType() == 0) { + qrCodeMaster.setOutBoundNum(outBoundNum); + } + VUtil.trueThrowBusinessError(!qitem.isQiTao() && item.getNum().compareTo(item.getSqsl()) > 0) .throwMessage("物料" + materialNo + "的领取数量超出申请限制"); // qrCodeMaster.setFactoryCode(""); // qrCodeMaster.setStorageLocation(""); // qrCodeMaster.setBinLocation(""); - qrCodeMaster.setProcessStage(BarCodeProcessStage.OutBound.getState()); qrCodeMaster.setLastScanBy(UserUtil.getUserId()); qrCodeMaster.setLastScanByname(UserUtil.getUserName()); qrCodeMaster.setLastScanTime(LocalDateTime.now()); @@ -505,7 +519,7 @@ public class OutProduceController extends BaseController { .setBinNo(qrCodeMaster.getBinLocation()) .setUnit(item.getMeins()) .setRspos(item.getRspos()) - .setNum(qrCodeMaster.getQuantity()) + .setNum(num) .setCreateBy(UserUtil.getUserName()) .setCreateTime(Instant.now()) ); @@ -534,7 +548,9 @@ public class OutProduceController extends BaseController { c.setLastScanBy(p.getLastScanBy()); c.setLastScanByname(p.getLastScanByname()); c.setLastScanTime(p.getLastScanTime()); + c.setOutBoundNum(c.getQuantity()); }); + qrCodeMasterService.updateBarCode(children); } }); qrCodeMasterService.updateBarCode(qrCodeMasters); @@ -663,7 +679,10 @@ public class OutProduceController extends BaseController { p.setFactoryCode(record.getFactoryNo()); p.setStorageLocation(record.getWarehouseNo()); p.setBinLocation(record.getBinNo()); - p.setProcessStage(BarCodeProcessStage.OutBound.getState()); + BigDecimal outBoundNum = p.getOutBoundNum().add(record.getNum()); + if (p.getPackagingType() == 1 || p.getQuantity().compareTo(outBoundNum) <= 0) { + p.setProcessStage(BarCodeProcessStage.OutBound.getState()); + } p.setLastScanBy(UserUtil.getUserId()); p.setLastScanByname(UserUtil.getUserName()); p.setLastScanTime(LocalDateTime.now()); @@ -681,8 +700,12 @@ public class OutProduceController extends BaseController { c.setLastScanBy(p.getLastScanBy()); c.setLastScanByname(p.getLastScanByname()); c.setLastScanTime(p.getLastScanTime()); + c.setOutBoundNum(c.getQuantity()); }); + qrCodeMasterService.updateBarCode(children); } + } else { + p.setOutBoundNum(outBoundNum); } }); qrCodeMasterService.updateBarCode(qrCodeMasters); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/QrCodeMasterController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/QrCodeMasterController.java index 42c411eb..53bef08d 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/QrCodeMasterController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/QrCodeMasterController.java @@ -423,6 +423,13 @@ public class QrCodeMasterController extends BaseController { qrCodeVO.setQuantity(quantity); List qrCodeVOS = Convert.toList(QrCodeVO.class, qrCodeMasters); qrCodeVO.setChildrenCode(qrCodeVOS); + + BigDecimal outBoundNum = qrCodeMasters.stream().map(WmsQrCodeMaster::getOutBoundNum).reduce(BigDecimal.ZERO, BigDecimal::add); + qrCodeVO.setOutBoundNum(outBoundNum); + + qrCodeVO.setLeftNum(qrCodeVO.getQuantity().subtract(qrCodeVO.getOutBoundNum())); + } else { + qrCodeVO.setLeftNum(qrCodeVO.getQuantity().subtract(qrCodeVO.getOutBoundNum())); } return ApiResult.success(qrCodeVO); } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO.java index 7ee76a07..c1c1a1fe 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO.java @@ -16,10 +16,10 @@ public class QRCodeQO { @NotBlank private String content; -// /** -// * 数量 -// */ -// @NotNull -// @Positive(message = "数量必须大于0") -// private BigDecimal num; + /** + * 数量 + */ + @NotNull + @Positive(message = "数量必须大于0") + private BigDecimal num; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QrCodeItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QrCodeItemVO.java index fe4410fb..27de7ee0 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QrCodeItemVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QrCodeItemVO.java @@ -1,6 +1,5 @@ package com.nflg.wms.common.pojo.vo; -import com.baomidou.mybatisplus.annotation.Version; import lombok.Data; import lombok.experimental.Accessors; @@ -139,4 +138,8 @@ public class QrCodeItemVO { */ private String deliveryLineNo; + /** + * 出库数量 + */ + private BigDecimal outBoundNum; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QrCodeVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QrCodeVO.java index 9620e7b5..8d355b30 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QrCodeVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QrCodeVO.java @@ -1,6 +1,5 @@ package com.nflg.wms.common.pojo.vo; -import com.baomidou.mybatisplus.annotation.Version; import lombok.Data; import lombok.experimental.Accessors; @@ -153,4 +152,7 @@ public class QrCodeVO { * 子码 */ private List childrenCode; + + private BigDecimal outBoundNum; + private BigDecimal leftNum; } 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 5ef03e2d..9c99dce9 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 @@ -194,6 +194,11 @@ public class WmsQrCodeMaster implements Serializable { */ private Long receiptItemId; + /** + * 出库数量 + */ + private BigDecimal outBoundNum; + /** * 供应商名称 */ diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsOutProduceService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsOutProduceService.java index 84813709..9dc1c0a0 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsOutProduceService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsOutProduceService.java @@ -3,12 +3,15 @@ package com.nflg.wms.repository.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.nflg.wms.common.pojo.qo.OutProduceSearchQO; +import com.nflg.wms.common.pojo.qo.OutProduceSubmitItemQO; import com.nflg.wms.common.pojo.vo.OutProduceVO; import com.nflg.wms.repository.entity.WmsOutProduce; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; +import java.math.BigDecimal; import java.util.List; +import java.util.Map; /** *

@@ -24,4 +27,6 @@ public interface IWmsOutProduceService extends IService { IPage search(@Valid OutProduceSearchQO request); void delete(@Valid @NotEmpty List ids); + + Map getQrCodeToNumMap(List items); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQrCodeMasterService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQrCodeMasterService.java index 911b8663..249f8f77 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQrCodeMasterService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQrCodeMasterService.java @@ -1,16 +1,15 @@ package com.nflg.wms.repository.service; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; import com.nflg.wms.common.pojo.dto.InventoryInDTO; import com.nflg.wms.common.pojo.dto.InventoryOutDTO; import com.nflg.wms.common.pojo.qo.FilterIdSearchQO; import com.nflg.wms.common.pojo.qo.QrCodeItemSearchQO; import com.nflg.wms.common.pojo.vo.QrCodeItemVO; import com.nflg.wms.repository.entity.WmsQrCodeMaster; -import com.baomidou.mybatisplus.extension.service.IService; import com.nflg.wms.repository.entity.WmsTransferOrders; import jakarta.validation.Valid; -import jakarta.validation.constraints.NotBlank; import java.util.List; @@ -49,5 +48,5 @@ public interface IWmsQrCodeMasterService extends IService { List getChildrenWithParent(List qrCodes); -// void updateProcessStage(List qrCodes, short state); + void setNumAndOutBoundNumIfIsBox(WmsQrCodeMaster qr); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsOutProduceServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsOutProduceServiceImpl.java index b9630b96..ea617ce1 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsOutProduceServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsOutProduceServiceImpl.java @@ -5,7 +5,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.wms.common.pojo.qo.OutProduceSearchQO; +import com.nflg.wms.common.pojo.qo.OutProduceSubmitItemQO; +import com.nflg.wms.common.pojo.qo.QRCodeQO; import com.nflg.wms.common.pojo.vo.OutProduceVO; +import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.WmsOutProduce; import com.nflg.wms.repository.entity.WmsOutProduceItem; import com.nflg.wms.repository.mapper.WmsOutProduceMapper; @@ -15,7 +18,12 @@ import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; +import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** *

@@ -51,4 +59,19 @@ public class WmsOutProduceServiceImpl extends ServiceImpl getQrCodeToNumMap(List items) { + List qrCodeQOS = items.stream() + .map(OutProduceSubmitItemQO::getQrCodes) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + + Map qrCodeToNumMap = new HashMap<>(); + for (QRCodeQO qr : qrCodeQOS) { + VUtil.trueThrowBusinessError(qr.getNum() == null).throwMessage("条码号" + qr.getContent() + ",数量不能为空"); + VUtil.trueThrowBusinessError(BigDecimal.ZERO.equals(qr.getNum())).throwMessage("条码号" + qr.getContent() + ",数量不能为0"); + qrCodeToNumMap.put(qr.getContent(), qr.getNum()); + } + return qrCodeToNumMap; + } } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQrCodeMasterServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQrCodeMasterServiceImpl.java index 5843ff8d..87452b6f 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQrCodeMasterServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQrCodeMasterServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.List; /** @@ -128,7 +129,23 @@ public class WmsQrCodeMasterServiceImpl extends ServiceImpl search(QrCodeItemSearchQO request) { - return baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize())); + IPage searchRes = baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize())); + List vos = searchRes.getRecords(); + if (CollectionUtil.isEmpty(vos)) { + return searchRes; + } + for (QrCodeItemVO vo : vos) { + if (vo.getPackagingType() == 1) { + List childrens = lambdaQuery() + .eq(WmsQrCodeMaster::getParentBarcodeId, vo.getId()) + .list(); + if (CollectionUtil.isNotEmpty(childrens)) { + BigDecimal outBoundNum = childrens.stream().map(WmsQrCodeMaster::getOutBoundNum).reduce(BigDecimal.ZERO, BigDecimal::add); + vo.setOutBoundNum(outBoundNum); + } + } + } + return searchRes; } @Override @@ -195,4 +212,18 @@ public class WmsQrCodeMasterServiceImpl extends ServiceImpl qrCodeMasters = lambdaQuery() + .eq(WmsQrCodeMaster::getParentBarcodeId, qr.getId()) + .list(); + if (qr.getPackagingType() == 1) { + BigDecimal quantity = qrCodeMasters.stream().map(WmsQrCodeMaster::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal outBoundNum = qrCodeMasters.stream().map(WmsQrCodeMaster::getOutBoundNum).reduce(BigDecimal.ZERO, BigDecimal::add); + + qr.setQuantity(quantity); + qr.setOutBoundNum(outBoundNum); + } + } } diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsQrCodeMasterMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsQrCodeMasterMapper.xml index 942253c3..02f70b51 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsQrCodeMasterMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsQrCodeMasterMapper.xml @@ -28,7 +28,8 @@ a.delivery_no, a.delivery_line_no, - a.quantity + a.quantity, + a.out_bound_num from wms_qr_code_master a left join dictionary_item x on a.factory_code=x.code left join wms_warehouse b on a.storage_location = b."no" and x.id=b.factory_id @@ -81,7 +82,8 @@ a.barcode_uid, a.delivery_no, a.delivery_line_no, - a.quantity + a.quantity, + a.out_bound_num from wms_qr_code_master a left join dictionary_item x on a.factory_code = x.code left join wms_warehouse b on a.storage_location = b."no" and x.id = b.factory_id From 4fd9fd61b53b25e46e411bf08fa10b0f4ddda4f5 Mon Sep 17 00:00:00 2001 From: 10002617 Date: Wed, 20 May 2026 15:32:23 +0800 Subject: [PATCH 04/10] =?UTF-8?q?1445=20WMS=E7=B3=BB=E7=BB=9F=E6=9C=80?= =?UTF-8?q?=E5=B0=8F=E5=8C=85=E8=A3=85=E7=A0=81=E6=95=B0=E9=87=8F=E6=94=B6?= =?UTF-8?q?=E8=B4=A7=E5=92=8C=E5=87=BA=E5=BA=93=E5=85=81=E8=AE=B8=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/nflg/wms/admin/controller/NormalPGIController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java index 6224ffa0..c5d513ef 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java @@ -7,6 +7,7 @@ package com.nflg.wms.admin.controller; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.DigestUtil; @@ -282,6 +283,7 @@ public class NormalPGIController extends BaseController { .one(); VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】"); VUtil.trueThrowBusinessError(BigDecimal.ZERO.equals(code.getCodeNum())).throwMessage("数量不能为0"); + VUtil.trueThrowBusinessError(qrCodeMaster.getQuantity().compareTo(code.getCodeNum()) < 0).throwMessage("二维码【" + code.getCodeId() + "】,数量最大为:" + NumberUtil.toStr(qrCodeMaster.getQuantity())); qrCodeMaster.setLastScanTime(LocalDateTime.now()); qrCodeMaster.setLastScanBy(UserUtil.getUserId()); @@ -300,6 +302,8 @@ public class NormalPGIController extends BaseController { .one(); VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】"); VUtil.trueThrowBusinessError(BigDecimal.ZERO.equals(code.getCodeNum())).throwMessage("数量不能为0"); + VUtil.trueThrowBusinessError(qrCodeMaster.getQuantity().compareTo(code.getCodeNum()) < 0).throwMessage("二维码【" + code.getCodeId() + "】,数量最大为:" + NumberUtil.toStr(qrCodeMaster.getQuantity())); + qrCodeMaster.setLastScanTime(LocalDateTime.now()); qrCodeMaster.setLastScanBy(UserUtil.getUserId()); qrCodeMaster.setLastScanByname(UserUtil.getUserName()); @@ -1671,6 +1675,7 @@ public class NormalPGIController extends BaseController { .one(); VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】"); VUtil.trueThrowBusinessError(BigDecimal.ZERO.equals(code.getCodeNum())).throwMessage("数量不能为0"); + VUtil.trueThrowBusinessError(qrCodeMaster.getQuantity().compareTo(code.getCodeNum()) < 0).throwMessage("二维码【" + code.getCodeId() + "】,数量最大为:" + NumberUtil.toStr(qrCodeMaster.getQuantity())); qrCodeMaster.setLastScanTime(LocalDateTime.now()); qrCodeMaster.setLastScanBy(UserUtil.getUserId()); @@ -1689,6 +1694,7 @@ public class NormalPGIController extends BaseController { .one(); VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】"); VUtil.trueThrowBusinessError(BigDecimal.ZERO.equals(code.getCodeNum())).throwMessage("数量不能为0"); + VUtil.trueThrowBusinessError(qrCodeMaster.getQuantity().compareTo(code.getCodeNum()) < 0).throwMessage("二维码【" + code.getCodeId() + "】,数量最大为:" + NumberUtil.toStr(qrCodeMaster.getQuantity())); qrCodeMaster.setLastScanTime(LocalDateTime.now()); qrCodeMaster.setLastScanBy(UserUtil.getUserId()); From 715d224278568d9e6c8d28abaa05592fdfdfbd4a Mon Sep 17 00:00:00 2001 From: 10002617 Date: Tue, 19 May 2026 16:50:38 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8F=91=E8=B4=A7?= =?UTF-8?q?=E5=8D=95=E8=B4=A8=E6=A3=80=E5=AD=97=E6=AE=B5=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/nflg/wms/common/pojo/qo/SRMOrderReceiveItemQO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SRMOrderReceiveItemQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SRMOrderReceiveItemQO.java index 9adf77e9..0f687651 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SRMOrderReceiveItemQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SRMOrderReceiveItemQO.java @@ -65,5 +65,5 @@ public class SRMOrderReceiveItemQO { /** * 是否质检 */ - private String isQuality; + private String IsQuality; } From 79350cb18f81c870f8bf0b2fac775073b95ee792 Mon Sep 17 00:00:00 2001 From: 10002617 Date: Tue, 19 May 2026 17:03:18 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8F=91=E8=B4=A7?= =?UTF-8?q?=E5=8D=95=E8=B4=A8=E6=A3=80=E5=AD=97=E6=AE=B5=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/nflg/wms/srm/receive/controller/SRMController.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 3bbc0578..53277af2 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 @@ -2,10 +2,8 @@ package com.nflg.wms.srm.receive.controller; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; -import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.pojo.dto.SRMOrderReceiveDTO; import com.nflg.wms.common.pojo.dto.SRMQualityInspectionResultDTO; import com.nflg.wms.common.pojo.qo.SRMOrderReceiveItemQO; @@ -61,6 +59,7 @@ public class SRMController extends BaseController { @PostMapping("/SendNFDelivery") public Object receiveOrder(@RequestBody SRMOrderReceiveQO request) { try { + log.info("接收SRM送货单: {}", request.getJsonstring()); SRMOrderReceiveDTO data = JSONUtil.toBean(request.getJsonstring(), SRMOrderReceiveDTO.class); WmsSrmOrder order = srmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, data.getNoteNum()).one(); if (Objects.isNull(order)) { From 072d4614240c8ae13c8bd764a9f0f01f18c20cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 2 Jun 2026 18:07:01 +0800 Subject: [PATCH 07/10] =?UTF-8?q?feat(controller):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=97=A0=E7=A0=81=E6=93=8D=E4=BD=9C=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BB=93=E5=BA=93=E7=BC=96=E5=8F=B7=E4=BC=A0?= =?UTF-8?q?=E9=80=92=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在多个控制器中添加 getListForNoScan 接口用于获取可无码操作的物料列表 - 新增 NoScanItemVO 数据传输对象用于无码操作的物料信息 - 修复多处仓库编号 warehouseNo 参数传递错误的问题 - 统一在控制器中引入 ApiMark 注解用于接口标记 - 优化无码出入库流程中的仓库编号使用逻辑 - 移除 NormalPGIController 中重复的 ApiMark 注解 - 完善无码操作相关的数据验证和业务逻辑处理 --- .../ComponentOutboundController.java | 31 ++++++++- .../InCostCenterBackController.java | 35 +++++++++-- .../controller/InProduceBackController.java | 33 +++++++++- .../controller/InProduceOrderController.java | 48 ++++++++++---- .../InProduceOrderSurplusController.java | 28 +++++++++ .../admin/controller/NormalPGIController.java | 22 +++---- .../controller/OutAssistanceController.java | 38 +++++++++-- .../controller/OutCostCenterController.java | 38 +++++++++-- .../controller/OutProduceController.java | 38 +++++++++-- .../controller/OutPurchaseController.java | 31 ++++++++- .../controller/TransferCompanyController.java | 61 ++++++++++++++++-- .../controller/TransferFactoryController.java | 63 +++++++++++++++++-- .../pojo/request/NoScanningItemRequest.java | 6 ++ .../admin/pojo/request/NoScanningRequest.java | 6 -- .../nflg/wms/common/pojo/vo/NoScanItemVO.java | 5 ++ 15 files changed, 422 insertions(+), 61 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java index 27225b6b..e6a7a458 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java @@ -24,11 +24,13 @@ import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.ComponentOutboundEditVO; import com.nflg.wms.common.pojo.vo.ComponentOutboundItemVO; import com.nflg.wms.common.pojo.vo.ComponentOutboundVO; +import com.nflg.wms.common.pojo.vo.NoScanItemVO; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; @@ -402,6 +404,33 @@ public class ComponentOutboundController extends BaseController { return ApiResult.success(); } + /** + * 获取可无码发货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScan") + public ApiResult> getListForNoScan(@RequestParam Long orderId) { + WmsComponentPacking order = wmscomponentPackingService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = wmsComponentPackingItemService.lambdaQuery() + .eq(WmsComponentPackingItem::getPackingId, orderId) + .list(); + items.removeIf(item -> item.getOutQty().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getIdnrk())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(String.valueOf(item.getPosnr())) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getIdnrk()) + .setMaterialDesc(item.getOjtxb()) + .setWarehouseNo(item.getLgort()) + .setNum(item.getOutQty()) + ) + .toList() + ); + } + /** * 无码确认出库单 * @param request 无码确认出库参数 @@ -440,7 +469,7 @@ public class ComponentOutboundController extends BaseController { VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(packingItem.getIdnrk())) .throwMessage("物料" + packingItem.getIdnrk() + "已生成二维码,不允许无码出库"); - WmsComponentOutboundItem outboundItem = setWmsComponentOutboundItem(packing, packingItem, outbound, request.getWarehouseNo()); + WmsComponentOutboundItem outboundItem = setWmsComponentOutboundItem(packing, packingItem, outbound, item.getWarehouseNo()); outboundItems.add(outboundItem); BigDecimal totalNum = item.getDatas().stream() diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java index e270b724..7da67a50 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java @@ -31,6 +31,7 @@ import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -202,6 +203,32 @@ public class InCostCenterBackController extends BaseController { ); } + /** + * 获取可无码收货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScan") + public ApiResult> getListForNoScan(@RequestParam Long orderId) { + WmsInCostcenterBack order = inCostcenterBackService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = inCostcenterBackItemService.lambdaQuery() + .eq(WmsInCostcenterBackItem::getOrderId, orderId) + .list(); + items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMatnr())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(item.getRspos()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMatnr()) + .setMaterialDesc(item.getMaktx()) + .setWarehouseNo(order.getLgort()) + .setNum(item.getLeft())) + .toList() + ); + } + /** * 无码入库 */ @@ -220,7 +247,7 @@ public class InCostCenterBackController extends BaseController { .setId(IdUtil.getSnowflakeNextId()) .setNo(serialNumberControllerService.generateSerialNumber(11)) .setOrderId(order.getId()) - .setLgort(request.getWarehouseNo()) + .setLgort(request.getItems().get(0).getWarehouseNo()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()); List datas = inCostcenterBackItemService.getList(order.getId()); @@ -255,19 +282,19 @@ public class InCostCenterBackController extends BaseController { .setResbRspos(item.getRspos()) .setResbMatnr(item.getMatnr()) .setMaktx(item.getMaktx()) - .setResbLgort(request.getWarehouseNo()) + .setResbLgort(ri.getWarehouseNo()) .setResbWerks(order.getWerks()) .setResbMeins(item.getMeins()) .setErfmg(num) ); ri.getDatas().forEach(data -> { - String key9 = item.getMatnr() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + order.getWerks() + "|" + request.getWarehouseNo() + "|" + data.getBinNo(); + String key9 = item.getMatnr() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + order.getWerks() + "|" + ri.getWarehouseNo() + "|" + data.getBinNo(); inventoryMap.merge(key9, new InventoryInDTO() .setMaterialNo(item.getMatnr()) .setBatchNo(data.getBatchNo()) .setSerialNo(data.getSerialNo()) .setFactoryNo(order.getWerks()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(ri.getWarehouseNo()) .setBinLocation(data.getBinNo()) .setNum(data.getNum()), (e, i) -> e.setNum(e.getNum().add(i.getNum()))); }); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java index fe69dd36..be4dc1ac 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java @@ -30,6 +30,7 @@ import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -211,6 +212,32 @@ public class InProduceBackController extends BaseController { ); } + /** + * 获取可无码收货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScan") + public ApiResult> getListForNoScan(@RequestParam Long orderId) { + WmsInProduceBack order = inProduceBackService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = inProduceBackItemService.lambdaQuery() + .eq(WmsInProduceBackItem::getOrderId, orderId) + .list(); + items.removeIf(item -> item.getSqsl().subtract(item.getNum()).compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMatnr())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(item.getRspos()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMatnr()) + .setMaterialDesc(item.getMaktx2()) + .setWarehouseNo(order.getLgort2()) + .setNum(item.getSqsl().subtract(item.getNum()))) + .toList() + ); + } + /** * 无码入库 */ @@ -257,13 +284,13 @@ public class InProduceBackController extends BaseController { .setNum(num); ticketItems.add(ti); ri.getDatas().forEach(data -> { - String key9 = item.getMatnr() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + order.getDwerk() + "|" + request.getWarehouseNo() + "|" + data.getBinNo(); + String key9 = item.getMatnr() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + order.getDwerk() + "|" + ri.getWarehouseNo() + "|" + data.getBinNo(); inventoryMap.merge(key9, new InventoryInDTO() .setMaterialNo(item.getMatnr()) .setBatchNo(data.getBatchNo()) .setSerialNo(data.getSerialNo()) .setFactoryNo(order.getDwerk()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(ri.getWarehouseNo()) .setBinLocation(data.getBinNo()) .setNum(data.getNum()), (e, i) -> e.setNum(e.getNum().add(i.getNum()))); String key7 = item.getMatnr() + "|" + data.getBatchNo(); @@ -273,7 +300,7 @@ public class InProduceBackController extends BaseController { .setMatnr(item.getMatnr()) .setMaktx(item.getMaktx2()) .setWerks(order.getDwerk()) - .setLgort(request.getWarehouseNo()) + .setLgort(ri.getWarehouseNo()) .setMenge(data.getNum()) .setMenge_T(item.getEnmng()) .setMeins(item.getMeins()), (e, i) -> { e.setMenge(e.getMenge().add(i.getMenge())); return e; }); 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 4708ca6c..f2175031 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 @@ -24,15 +24,14 @@ import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.InProduceOrderItemVO; import com.nflg.wms.common.pojo.vo.InProduceOrderMaterialVO; import com.nflg.wms.common.pojo.vo.InProduceOrderVO; +import com.nflg.wms.common.pojo.vo.NoScanItemVO; import com.nflg.wms.common.util.DateTimeUtil; import com.nflg.wms.common.util.NumberUtil; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; -import com.nflg.wms.repository.entity.WmsBom; -import com.nflg.wms.repository.entity.WmsInProduceOrder; -import com.nflg.wms.repository.entity.WmsInProduceOrderItem; -import com.nflg.wms.repository.entity.WmsQrCodeMaster; +import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -419,6 +418,33 @@ public class InProduceOrderController extends BaseController { return ApiResult.success(vo); } + /** + * 获取可无码收货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScan") + public ApiResult> getListForNoScan(@RequestParam Long orderId) { + WmsInProduceOrder order = produceOrderService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = produceOrderItemService.lambdaQuery() + .eq(WmsInProduceOrderItem::getOrderId, orderId) + .list(); + items.removeIf(item -> item.getNum().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMaterialNo())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo("") + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMaterialNo()) + .setMaterialDesc(item.getMaterialDesc()) + .setWarehouseNo(item.getWarehouseNo()) + .setNum(item.getNum()) + ) + .toList() + ); + } + /** * 无码入库 */ @@ -451,35 +477,35 @@ public class InProduceOrderController extends BaseController { VUtil.trueThrowBusinessError(item.getNum().compareTo(num) != 0) .throwMessage("物料" + item.getMaterialNo() + "的收货数量与入库数量不一致"); item.setNum(BigDecimal.ZERO); - if (!StrUtil.equals(item.getWarehouseNo(), request.getWarehouseNo())) { + if (!StrUtil.equals(item.getWarehouseNo(), ri.getWarehouseNo())) { warehouseNoChange.put(item.getId(), item.getWarehouseNo()); - item.setWarehouseNo(request.getWarehouseNo()); + item.setWarehouseNo(ri.getWarehouseNo()); if (item.getParentId() > 0) { InProduceOrderItemVO pit = list.stream() .filter(l -> Objects.equals(l.getId(), item.getParentId())) .findFirst().get(); warehouseNoChange.put(pit.getId(), pit.getWarehouseNo()); - pit.setWarehouseNo(request.getWarehouseNo()); + pit.setWarehouseNo(ri.getWarehouseNo()); } } ri.getDatas().forEach(data -> { if (Objects.equals(item.getParentId(), 0L)) { - String key9 = item.getMaterialNo() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + item.getFactoryNo() + "|" + request.getWarehouseNo() + "|" + data.getBinNo(); + String key9 = item.getMaterialNo() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + item.getFactoryNo() + "|" + ri.getWarehouseNo() + "|" + data.getBinNo(); inventoryMap.merge(key9, new InventoryInDTO() .setMaterialNo(item.getMaterialNo()) .setBatchNo(data.getBatchNo()) .setSerialNo(data.getSerialNo()) .setFactoryNo(item.getFactoryNo()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(ri.getWarehouseNo()) .setBinLocation(data.getBinNo()) .setNum(data.getNum()), (e, i) -> e.setNum(e.getNum().add(i.getNum()))); } - String key8 = data.getBatchNo() + "|" + item.getFactoryNo() + "|" + item.getUnit() + "|" + request.getWarehouseNo(); + String key8 = data.getBatchNo() + "|" + item.getFactoryNo() + "|" + item.getUnit() + "|" + ri.getWarehouseNo(); input1Map.merge(key8, new Zwm00Mb107QO() .setPWERK(item.getFactoryNo()) .setPSMNG(data.getNum()) .setAMEIN(item.getUnit()) - .setLGORT(request.getWarehouseNo()) + .setLGORT(ri.getWarehouseNo()) .setCHARG(data.getBatchNo()), (e, i) -> { e.setPSMNG(e.getPSMNG().add(i.getPSMNG())); return e; }); if (StrUtil.isNotBlank(data.getSerialNo())) { sernrs.add(data.getSerialNo()); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java index c95d434c..a10591af 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java @@ -31,6 +31,7 @@ import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -476,6 +477,33 @@ public class InProduceOrderSurplusController extends BaseController { return ApiResult.success(); } + /** + * 获取可无码收货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScan") + public ApiResult> getListForNoScan(@RequestParam Long orderId) { + WmsInProduceOrder order = produceOrderService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = produceOrderItemService.lambdaQuery() + .eq(WmsInProduceOrderItem::getOrderId, orderId) + .list(); + items.removeIf(item -> item.getNum().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMaterialNo())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo("") + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMaterialNo()) + .setMaterialDesc(item.getMaterialDesc()) + .setWarehouseNo(item.getWarehouseNo()) + .setNum(item.getNum()) + ) + .toList() + ); + } + /** * 无码收货和入库 * @param requests 请求参数 diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java index f4cae594..91aaddb0 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java @@ -192,7 +192,6 @@ public class NormalPGIController extends BaseController { * @param orderId 订单ID */ @GetMapping("getListForNoScan") - @ApiMark(moduleName = "送货单管理", apiName = "获取可无码收货单项列表") public ApiResult> getListForNoScan(@RequestParam Long orderId) { List items = wmsSrmOrderItemService.lambdaQuery() .eq(WmsSrmOrderItem::getOrderId, orderId) @@ -206,6 +205,7 @@ public class NormalPGIController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getItemCode()) .setMaterialDesc(item.getItemName()) + .setWarehouseNo("") .setNum(item.getDeliveryQty().subtract(item.getReceiptQty()))) .toList() ); @@ -306,7 +306,7 @@ public class NormalPGIController extends BaseController { .setCreateUserName(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) .setReceiptNum(totalQty) - .setReceivedWarehouse(request.getWarehouseNo()) + .setReceivedWarehouse(item.getWarehouseNo()) .setStorageLocation(materialInfoInOrder.getBinNos()) .setInQty(BigDecimal.ZERO) .setNoteNum(order.getNoteNum()) @@ -389,7 +389,7 @@ public class NormalPGIController extends BaseController { String codeContent = item.getMaterialNo() + "&" + orderItem.getPoNum() + "&" + orderItem.getPoLineNumber() + "&" + orderItem.getLineNumber() + "&" + order.getNoteNum() + "&" + order.getIuCode() + "&" + order.getSupplierNum() + "&" + data.getNum() - + "&" + materialInfoInOrder.getMeins() + "&" + request.getWarehouseNo() + "&" + batchNo + + "&" + materialInfoInOrder.getMeins() + "&" + item.getWarehouseNo() + "&" + batchNo + "&" + serialNo + "&" + LocalDateTime.now(); String codeId = DigestUtil.md5Hex(codeContent); allCodeIds.add(codeId); @@ -419,7 +419,7 @@ public class NormalPGIController extends BaseController { .setCreateUserName(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) .setReceiptNum(totalQty) - .setReceivedWarehouse(request.getWarehouseNo()) + .setReceivedWarehouse(item.getWarehouseNo()) .setStorageLocation(materialInfoInOrder.getBinNos()) .setInQty(BigDecimal.ZERO) .setNoteNum(order.getNoteNum()) @@ -440,7 +440,7 @@ public class NormalPGIController extends BaseController { String codeContent = item.getMaterialNo() + "&" + orderItem.getPoNum() + "&" + orderItem.getPoLineNumber() + "&" + orderItem.getLineNumber() + "&" + order.getNoteNum() + "&" + order.getIuCode() + "&" + order.getSupplierNum() + "&" + data.getNum() - + "&" + materialInfoInOrder.getMeins() + "&" + request.getWarehouseNo() + "&" + batchNo + + "&" + materialInfoInOrder.getMeins() + "&" + item.getWarehouseNo() + "&" + batchNo + "&" + serialNo + "&" + LocalDateTime.now(); String codeId = DigestUtil.md5Hex(codeContent); allCodeIds.add(codeId); @@ -466,7 +466,7 @@ public class NormalPGIController extends BaseController { .setCreateUserName(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) .setReceiptNum(totalQty) - .setReceivedWarehouse(request.getWarehouseNo()) + .setReceivedWarehouse(item.getWarehouseNo()) .setStorageLocation("") .setInQty(totalQty) .setNoteNum(order.getNoteNum()) @@ -490,7 +490,7 @@ public class NormalPGIController extends BaseController { String codeContent = item.getMaterialNo() + "&" + orderItem.getPoNum() + "&" + orderItem.getPoLineNumber() + "&" + orderItem.getLineNumber() + "&" + order.getNoteNum() + "&" + order.getIuCode() + "&" + order.getSupplierNum() + "&" + data.getNum() - + "&" + materialInfoInOrder.getMeins() + "&" + request.getWarehouseNo() + "&" + batchNo + + "&" + materialInfoInOrder.getMeins() + "&" + item.getWarehouseNo() + "&" + batchNo + "&" + serialNo + "&" + LocalDateTime.now(); String codeId = DigestUtil.md5Hex(codeContent); allCodeIds.add(codeId); @@ -511,7 +511,7 @@ public class NormalPGIController extends BaseController { && inv.getBatchNo().equals(batchNo) && inv.getSerialNo().equals(serialNo) && inv.getFactoryNo().equals(order.getIuCode()) - && inv.getWarehouseNo().equals(request.getWarehouseNo()) + && inv.getWarehouseNo().equals(item.getWarehouseNo()) && StrUtil.equals(inv.getBinLocation(), binNo)) .findFirst() .orElse(null); @@ -519,7 +519,7 @@ public class NormalPGIController extends BaseController { inventoryDTO = new InventoryInDTO() .setMaterialNo(item.getMaterialNo()) .setFactoryNo(order.getIuCode()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(item.getWarehouseNo()) .setBinLocation(binNo) .setBatchNo(batchNo) .setSerialNo(serialNo) @@ -549,7 +549,7 @@ public class NormalPGIController extends BaseController { && dto1.getMeins().equals(materialInfoInOrder.getMeins()) && dto1.getCHARG().equals(batchNo) && dto1.getWERKS().equals(order.getIuCode()) - && dto1.getLGORT().equals(request.getWarehouseNo())) + && dto1.getLGORT().equals(item.getWarehouseNo())) .findFirst() .orElse(null); if (Objects.isNull(item1Dto)) { @@ -560,7 +560,7 @@ public class NormalPGIController extends BaseController { .setMEINS(materialInfoInOrder.getMeins()) .setCHARG(batchNo) .setWERKS(order.getIuCode()) - .setLGORT(request.getWarehouseNo()) + .setLGORT(item.getWarehouseNo()) .setKZKRI("")); } else { item1Dto.setERFMG(item1Dto.getERFMG().add(data.getNum())); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java index 59d8a172..98d01540 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java @@ -33,6 +33,7 @@ import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -279,6 +280,33 @@ public class OutAssistanceController extends BaseController { ); } + /** + * 获取可无码发货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScan") + public ApiResult> getListForNoScan(@RequestParam Long orderId) { + WmsOutAssistance order = outAssistanceService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = outAssistanceItemService.lambdaQuery() + .eq(WmsOutAssistanceItem::getOrderId, orderId) + .list(); + items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMatnr1())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(item.getEbelp()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMatnr1()) + .setMaterialDesc(item.getMaktx1()) + .setWarehouseNo(order.getLgort1()) + .setNum(item.getLeft()) + ) + .toList() + ); + } + /** * 无码出库 */ @@ -289,14 +317,14 @@ public class OutAssistanceController extends BaseController { VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); request.getItems() .forEach(data -> - VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(data.getMaterialNo(),order.getWerks(),request.getWarehouseNo())) + VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(data.getMaterialNo(),order.getWerks(),data.getWarehouseNo())) .throwMessage("物料" + data.getMaterialNo() + "不支持无码出库") ); WmsOutAssistanceTicket ticket = new WmsOutAssistanceTicket() .setId(IdUtil.getSnowflakeNextId()) .setNo(serialNumberControllerService.generateSerialNumber(17)) .setOrderId(order.getId()) - .setLgort(request.getWarehouseNo()) + .setLgort(request.getItems().get(0).getWarehouseNo()) .setFinish(true) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()); @@ -325,13 +353,13 @@ public class OutAssistanceController extends BaseController { .setNum(num); ticketItems.add(ti); ri.getDatas().forEach(data -> { - String key = item.getMatnr1() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + order.getWerks() + "|" + request.getWarehouseNo(); + String key = item.getMatnr1() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + order.getWerks() + "|" + ri.getWarehouseNo(); inventoryOutMap.merge(key, new InventoryOutDTO() .setMaterialNo(item.getMatnr1()) .setBatchNo(data.getBatchNo()) .setSerialNo(data.getSerialNo()) .setFactoryNo(order.getWerks()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(ri.getWarehouseNo()) .setBinLocation(data.getBinNo()) .setNum(data.getNum()), (e, i) -> e.setNum(e.getNum().add(i.getNum()))); String key7 = item.getMatnr1() + "|" + data.getBatchNo(); @@ -343,7 +371,7 @@ public class OutAssistanceController extends BaseController { .setBdmng(item.getErfmg()) .setWerks(order.getWerks()) .setCharg(data.getBatchNo()) - .setLgort(request.getWarehouseNo()) + .setLgort(ri.getWarehouseNo()) .setMaktx(item.getMaktx()) .setEbeln(order.getEbeln()) .setMeins(item.getMeins()) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java index 7bae7e21..84428187 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java @@ -33,6 +33,7 @@ import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -281,6 +282,33 @@ public class OutCostCenterController extends BaseController { ); } + /** + * 获取可无码发货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScan") + public ApiResult> getListForNoScan(@RequestParam Long orderId) { + WmsOutCostcenter order = outCostcenterService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = outCostcenterItemService.lambdaQuery() + .eq(WmsOutCostcenterItem::getOrderId, orderId) + .list(); + items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMatnr())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(item.getRspos()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMatnr()) + .setMaterialDesc(item.getMaktx()) + .setWarehouseNo(item.getLgort()) + .setNum(item.getLeft()) + ) + .toList() + ); + } + /** * 无码出库 */ @@ -291,14 +319,14 @@ public class OutCostCenterController extends BaseController { VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); request.getItems() .forEach(data -> - VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(data.getMaterialNo(), order.getWerks(), request.getWarehouseNo())) + VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(data.getMaterialNo(), order.getWerks(), data.getWarehouseNo())) .throwMessage("物料" + data.getMaterialNo() + "不支持无码出库") ); WmsOutCostcenterTicket ticket = new WmsOutCostcenterTicket() .setId(IdUtil.getSnowflakeNextId()) .setNo(serialNumberControllerService.generateSerialNumber(15)) .setOrderId(order.getId()) - .setLgort(request.getWarehouseNo()) + .setLgort(request.getItems().get(0).getWarehouseNo()) .setFinish(true) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()); @@ -327,13 +355,13 @@ public class OutCostCenterController extends BaseController { .setNum(num); ticketItems.add(ti); ri.getDatas().forEach(data -> { - String key = item.getMatnr() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + order.getWerks() + "|" + request.getWarehouseNo(); + String key = item.getMatnr() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + order.getWerks() + "|" + ri.getWarehouseNo(); inventoryOutMap.merge(key, new InventoryOutDTO() .setMaterialNo(item.getMatnr()) .setBatchNo(data.getBatchNo()) .setSerialNo(data.getSerialNo()) .setFactoryNo(order.getWerks()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(ri.getWarehouseNo()) .setBinLocation(data.getBinNo()) .setNum(data.getNum()), (e, i) -> e.setNum(e.getNum().add(i.getNum()))); String key7 = item.getMatnr() + "|" + data.getBatchNo(); @@ -344,7 +372,7 @@ public class OutCostCenterController extends BaseController { .setResbMatnr(item.getMatnr()) .setMaktx(item.getMaktx()) .setResbWerks(order.getWerks()) - .setResbLgort(request.getWarehouseNo()) + .setResbLgort(ri.getWarehouseNo()) .setResbMeins(item.getMeins()) .setQty(data.getNum()) .setResbErfmg(item.getBdmng()) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java index 25ddfddd..744e10bf 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java @@ -37,6 +37,7 @@ import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -408,6 +409,33 @@ public class OutProduceController extends BaseController { ); } + /** + * 获取可无码发货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScan") + public ApiResult> getListForNoScan(@RequestParam Long orderId) { + WmsOutProduce order = outProduceService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = outProduceItemService.lambdaQuery() + .eq(WmsOutProduceItem::getOrderId, orderId) + .list(); + items.removeIf(item -> item.getSqsl().subtract(item.getNum()).compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMatnr())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(item.getRspos()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMatnr()) + .setMaterialDesc(item.getMaktx2()) + .setWarehouseNo(order.getLgort2()) + .setNum(item.getSqsl().subtract(item.getNum())) + ) + .toList() + ); + } + /** * 无码出库 */ @@ -418,14 +446,14 @@ public class OutProduceController extends BaseController { VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); request.getItems() .forEach(data -> - VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(data.getMaterialNo(),order.getDwerk(),request.getWarehouseNo())) + VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(data.getMaterialNo(),order.getDwerk(),data.getWarehouseNo())) .throwMessage("物料" + data.getMaterialNo() + "不支持无码出库") ); WmsOutProduceTicket ticket = new WmsOutProduceTicket() .setId(IdUtil.getSnowflakeNextId()) .setNo(serialNumberControllerService.generateSerialNumber(21)) .setProduceId(order.getId()) - .setLgort(request.getWarehouseNo()) + .setLgort(request.getItems().get(0).getWarehouseNo()) .setFinish(true) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()); @@ -458,13 +486,13 @@ public class OutProduceController extends BaseController { .setNum(num); ticketItems.add(ti); ri.getDatas().forEach(data -> { - String key = item.getMatnr() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + order.getDwerk() + "|" + request.getWarehouseNo(); + String key = item.getMatnr() + "|" + data.getBatchNo() + "|" + data.getSerialNo() + "|" + order.getDwerk() + "|" + ri.getWarehouseNo(); inventoryOutMap.merge(key, new InventoryOutDTO() .setMaterialNo(item.getMatnr()) .setBatchNo(data.getBatchNo()) .setSerialNo(data.getSerialNo()) .setFactoryNo(order.getDwerk()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(ri.getWarehouseNo()) .setBinLocation(data.getBinNo()) .setNum(data.getNum()), (e, i) -> e.setNum(e.getNum().add(i.getNum()))); String key7 = item.getMatnr() + "|" + data.getBatchNo(); @@ -474,7 +502,7 @@ public class OutProduceController extends BaseController { .setMatnr(item.getMatnr()) .setMaktx(item.getMaktx2()) .setWerks(order.getDwerk()) - .setLgort(request.getWarehouseNo()) + .setLgort(ri.getWarehouseNo()) .setMenge(data.getNum()) .setMenge_t(BigDecimal.ZERO) .setMeins(item.getMeins()), (e, i) -> { e.setMenge(e.getMenge().add(i.getMenge())); return e; }); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java index 460dcd46..7847bd4d 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java @@ -22,6 +22,7 @@ import com.nflg.wms.common.pojo.dto.ZWM3A06Input1DTO; import com.nflg.wms.common.pojo.dto.ZWM3A06Input2DTO; import com.nflg.wms.common.pojo.qo.OutPurchaseSearchQO; import com.nflg.wms.common.pojo.qo.QRCodeQO; +import com.nflg.wms.common.pojo.vo.NoScanItemVO; import com.nflg.wms.common.pojo.vo.OutPurchaseVO; import com.nflg.wms.common.pojo.vo.ZWM3A05ItemVO; import com.nflg.wms.common.pojo.vo.ZWM3A05VO; @@ -30,6 +31,7 @@ import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; @@ -138,6 +140,33 @@ public class OutPurchaseController extends BaseController { return ApiResult.success(vo); } + /** + * 获取可无码发货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScan") + public ApiResult> getListForNoScan(@RequestParam Long orderId) { + WmsReturnRequest order = returnRequestService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = returnRequestItemService.lambdaQuery() + .eq(WmsReturnRequestItem::getApplicationId, orderId) + .list(); + items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMaterialCode())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(item.getPoLineNumber()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMaterialCode()) + .setMaterialDesc(item.getMaterialDescription()) + .setWarehouseNo(item.getStorageLocation()) + .setNum(item.getLeft()) + ) + .toList() + ); + } + /** * 无码出库 */ @@ -156,7 +185,7 @@ public class OutPurchaseController extends BaseController { request.getItems().forEach(ri -> { WmsReturnRequestItem rrItem = returnRequestItemService.getById(ri.getOrderItemId()); VUtil.trueThrowBusinessError(Objects.isNull(rrItem)).throwMessage("申请单项无效:" + ri.getOrderItemId()); - VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(rrItem.getMaterialCode(), rrItem.getFactoryCode(), request.getWarehouseNo())) + VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(rrItem.getMaterialCode(), rrItem.getFactoryCode(), ri.getWarehouseNo())) .throwMessage("物料" + rrItem.getMaterialCode() + "不支持无码出库"); VUtil.trueThrowBusinessError(rrItem.getLeft().compareTo(BigDecimal.ZERO) <= 0) .throwMessage("物料" + ri.getMaterialNo() + "已全部退库"); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java index 6cf72a8d..e495902a 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java @@ -38,6 +38,7 @@ import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -489,6 +490,33 @@ public class TransferCompanyController extends BaseController { return ApiResult.success(); } + /** + * 获取可无码发货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScanOut") + public ApiResult> getListForNoScanOut(@RequestParam Long orderId) { + WmsTransferCompany order = transferCompanyService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = transferCompanyItemService.lambdaQuery() + .eq(WmsTransferCompanyItem::getOrderId, orderId) + .list(); + items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMatnr())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(item.getEbelp()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMatnr()) + .setMaterialDesc(item.getMaktx()) + .setWarehouseNo(item.getLgpro()) + .setNum(item.getLeft()) + ) + .toList() + ); + } + /** * 无扫码出库 */ @@ -560,7 +588,7 @@ public class TransferCompanyController extends BaseController { .setUniqNo("") .setQiTao(false) .setFactoryNo(order.getReswk()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(item.getWarehouseNo()) .setNum(data.getNum()) .setEbelp(orderItem.getEbelp()) .setEbeln(order.getEbeln()) @@ -918,6 +946,31 @@ public class TransferCompanyController extends BaseController { return ApiResult.success(); } + /** + * 获取可无码收货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScanIn") + public ApiResult> getListForNoScanIn(@RequestParam Long orderId) { + WmsTransferCompanyTicket order = transferCompanyTicketService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = transferCompanyTicketItemService.getList(orderId); + items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMatnr())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(item.getEbelp()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMatnr()) + .setMaterialDesc(item.getMaktx()) + .setWarehouseNo(item.getLgpbe1()) + .setNum(item.getLeft()) + ) + .toList() + ); + } + /** * 无扫码入库 */ @@ -970,7 +1023,7 @@ public class TransferCompanyController extends BaseController { .setMaterialNo(ticketItem.getMatnr()) .setMaterialDesc(ticketItem.getMaktx()) .setFactoryNo(ticket.getWerks()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(item.getWarehouseNo()) .setBinNo(binNo) .setContent("") .setBatchNo(batchNo) @@ -1017,7 +1070,7 @@ public class TransferCompanyController extends BaseController { .map(ls -> new ZWM3A17Item1DTO() .setMATNR(ls.get(0).getMaterialNo()) .setCHARG(ls.get(0).getBatchNo()) - .setLGORT(request.getWarehouseNo()) + .setLGORT(ls.get(0).getWarehouseNo()) .setERFMG(ls.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) .setWERKS(ticket.getWerks()) .setEBELP(ls.get(0).getEbelp()) @@ -1041,7 +1094,7 @@ public class TransferCompanyController extends BaseController { .set(WmsTransferCompanyTicket::getDocYear, vos.getKey().getValue()) .set(WmsTransferCompanyTicket::getUpdateBy, UserUtil.getUserName()) .set(WmsTransferCompanyTicket::getUpdateTime, LocalDateTime.now()) - .set(WmsTransferCompanyTicket::getLgort1, request.getWarehouseNo()) + .set(WmsTransferCompanyTicket::getLgort1, request.getItems().get(0).getWarehouseNo()) .set(WmsTransferCompanyTicket::getState, 1) .eq(WmsTransferCompanyTicket::getId, ticket.getId()) .update(); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java index cedf459b..4a8fde16 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java @@ -36,6 +36,7 @@ import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; +import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -515,6 +516,33 @@ public class TransferFactoryController extends BaseController { return ApiResult.success(); } + /** + * 获取可无码发货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScanOut") + public ApiResult> getListForNoScanOut(@RequestParam Long orderId) { + WmsTransferFactory order = transferFactoryService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = transferFactoryItemService.lambdaQuery() + .eq(WmsTransferFactoryItem::getOrderId, orderId) + .list(); + items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMatnr())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(item.getRspos()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMatnr()) + .setMaterialDesc(item.getMaktx()) + .setWarehouseNo(order.getLgort()) + .setNum(item.getLeft()) + ) + .toList() + ); + } + /** * 无码出库 */ @@ -533,7 +561,7 @@ public class TransferFactoryController extends BaseController { WmsTransferFactoryTicket ticket = new WmsTransferFactoryTicket() .setId(IdUtil.getSnowflakeNextId()) .setNo(serialNumberControllerService.generateSerialNumber(19)) - .setLgort(request.getWarehouseNo()) + .setLgort(request.getItems().get(0).getWarehouseNo()) .setOrderId(order.getId()) .setFinish(true) .setCreateBy(UserUtil.getUserName()) @@ -581,7 +609,7 @@ public class TransferFactoryController extends BaseController { .setUniqNo("NO_SCAN_" + IdUtil.getSnowflakeNextId()) .setQiTao(false) .setFactoryNo(order.getWerks()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(item.getWarehouseNo()) .setBinNo(binNo) .setNum(data.getNum()) .setCreateBy(UserUtil.getUserName()) @@ -891,6 +919,31 @@ public class TransferFactoryController extends BaseController { return ApiResult.success(); } + /** + * 获取可无码收货单项列表 + * @param orderId 订单ID + */ + @GetMapping("getListForNoScanIn") + public ApiResult> getListForNoScanIn(@RequestParam Long orderId) { + TransferFactoryTicketInfoVO order = transferFactoryTicketService.getInfo(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List items = transferFactoryTicketItemService.getList(orderId); + items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0 + || noScanningBaseControllerService.existsQrCode(item.getMatnr())); + return ApiResult.success( + items.stream() + .map(item -> new NoScanItemVO() + .setRowNo(item.getRspos()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getMatnr()) + .setMaterialDesc(item.getMaktx()) + .setWarehouseNo(item.getUmlgo()) + .setNum(item.getLeft()) + ) + .toList() + ); + } + /** * 无码入库 */ @@ -937,7 +990,7 @@ public class TransferFactoryController extends BaseController { .setBatchNo(batchNo) .setSerialNo(serialNo) .setFactoryNo(ticket.getWerks()) - .setWarehouseNo(request.getWarehouseNo()) + .setWarehouseNo(ticketItem.getUmlgo()) .setBinNo(binNo) .setUniqNo("NO_SCAN_" + IdUtil.getSnowflakeNextId()) .setRspos(ticketItem.getRspos()) @@ -979,7 +1032,7 @@ public class TransferFactoryController extends BaseController { .setErfmg(item.getNum()) .setMeins(item.getMeins()) .setWerks(ticket.getWerks()) - .setLgort(request.getWarehouseNo())).toList() + .setLgort(item.getUmlgo())).toList() ) .setT_list2(records.stream() .collect(Collectors.groupingBy(InMaterialScanRecord::getKey2)) @@ -1002,7 +1055,7 @@ public class TransferFactoryController extends BaseController { .set(WmsTransferFactoryTicket::getDocYear, vo.getEMjahr()) .set(WmsTransferFactoryTicket::getUpdateBy, UserUtil.getUserName()) .set(WmsTransferFactoryTicket::getUpdateTime, LocalDateTime.now()) - .set(WmsTransferFactoryTicket::getLgort1, request.getWarehouseNo()) + .set(WmsTransferFactoryTicket::getLgort1, request.getItems().get(0).getWarehouseNo()) .set(WmsTransferFactoryTicket::getState, 1) .eq(WmsTransferFactoryTicket::getId, ticket.getId()) .update(); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningItemRequest.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningItemRequest.java index 7f99944c..6c06a289 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningItemRequest.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningItemRequest.java @@ -26,6 +26,12 @@ public class NoScanningItemRequest { @NotBlank private String materialNo; + /** + * 库存地点编号 + */ + @NotBlank + private String warehouseNo; + /** * 明细列表 */ diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningRequest.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningRequest.java index 43747dfb..774ec8a3 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningRequest.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningRequest.java @@ -19,12 +19,6 @@ public class NoScanningRequest { @NotNull private Long id; - /** - * 库存地点编号 - */ - @NotBlank - private String warehouseNo; - @Valid @NotEmpty private List items; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/NoScanItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/NoScanItemVO.java index 38457347..4371394b 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/NoScanItemVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/NoScanItemVO.java @@ -29,6 +29,11 @@ public class NoScanItemVO { */ private String materialDesc; + /** + * 库存地点编号 + */ + private String warehouseNo; + /** * 数量 */ From b4b73a50ee4983c404824a2c7b477d85c3b33647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 2 Jun 2026 18:28:17 +0800 Subject: [PATCH 08/10] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E5=8E=82=E7=BC=96=E5=8F=B7=E5=AD=97=E6=AE=B5=E5=88=B0=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E6=93=8D=E4=BD=9C=E7=9B=B8=E5=85=B3=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 NoScanItemVO 中新增 factoryNo 字段用于存储工厂编号 - 在 ComponentOutboundController 中为出库项目设置工厂编号 - 在 InCostCenterBackController 中为成本中心回退设置工厂编号 - 在 InProduceBackController 中为生产回退设置工厂编号 - 在 InProduceOrderController 中为生产订单设置工厂编号 - 在 InProduceOrderSurplusController 中为生产订单盈余设置工厂编号 - 在 OutAssistanceController 中为辅助出库设置工厂编号 - 在 OutCostCenterController 中为成本中心出库设置工厂编号 - 在 OutProduceController 中为生产出库设置工厂编号 - 在 OutPurchaseController 中为采购出库设置工厂编号 - 在 TransferCompanyController 中为公司间调拨设置工厂编号 - 在 TransferFactoryController 中为工厂间调拨设置工厂编号 --- .../wms/admin/controller/ComponentOutboundController.java | 1 + .../wms/admin/controller/InCostCenterBackController.java | 1 + .../nflg/wms/admin/controller/InProduceBackController.java | 1 + .../nflg/wms/admin/controller/InProduceOrderController.java | 1 + .../admin/controller/InProduceOrderSurplusController.java | 1 + .../nflg/wms/admin/controller/OutAssistanceController.java | 1 + .../nflg/wms/admin/controller/OutCostCenterController.java | 1 + .../com/nflg/wms/admin/controller/OutProduceController.java | 1 + .../com/nflg/wms/admin/controller/OutPurchaseController.java | 1 + .../nflg/wms/admin/controller/TransferCompanyController.java | 2 ++ .../nflg/wms/admin/controller/TransferFactoryController.java | 2 ++ .../main/java/com/nflg/wms/common/pojo/vo/NoScanItemVO.java | 5 +++++ 12 files changed, 18 insertions(+) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java index e6a7a458..a7cf28b1 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java @@ -424,6 +424,7 @@ public class ComponentOutboundController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getIdnrk()) .setMaterialDesc(item.getOjtxb()) + .setFactoryNo(order.getFactoryNo()) .setWarehouseNo(item.getLgort()) .setNum(item.getOutQty()) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java index 7da67a50..98e434f1 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java @@ -223,6 +223,7 @@ public class InCostCenterBackController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMatnr()) .setMaterialDesc(item.getMaktx()) + .setFactoryNo(order.getWerks()) .setWarehouseNo(order.getLgort()) .setNum(item.getLeft())) .toList() diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java index be4dc1ac..fb116ba8 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java @@ -232,6 +232,7 @@ public class InProduceBackController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMatnr()) .setMaterialDesc(item.getMaktx2()) + .setFactoryNo(order.getDwerk()) .setWarehouseNo(order.getLgort2()) .setNum(item.getSqsl().subtract(item.getNum()))) .toList() 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 f2175031..390d8598 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 @@ -438,6 +438,7 @@ public class InProduceOrderController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMaterialNo()) .setMaterialDesc(item.getMaterialDesc()) + .setFactoryNo(item.getFactoryNo()) .setWarehouseNo(item.getWarehouseNo()) .setNum(item.getNum()) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java index a10591af..bdb14140 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java @@ -497,6 +497,7 @@ public class InProduceOrderSurplusController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMaterialNo()) .setMaterialDesc(item.getMaterialDesc()) + .setFactoryNo(item.getFactoryNo()) .setWarehouseNo(item.getWarehouseNo()) .setNum(item.getNum()) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java index 98d01540..81fcc4a6 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java @@ -300,6 +300,7 @@ public class OutAssistanceController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMatnr1()) .setMaterialDesc(item.getMaktx1()) + .setFactoryNo(order.getWerks()) .setWarehouseNo(order.getLgort1()) .setNum(item.getLeft()) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java index 84428187..cc647795 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java @@ -302,6 +302,7 @@ public class OutCostCenterController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMatnr()) .setMaterialDesc(item.getMaktx()) + .setFactoryNo(order.getWerks()) .setWarehouseNo(item.getLgort()) .setNum(item.getLeft()) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java index 744e10bf..70455970 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java @@ -429,6 +429,7 @@ public class OutProduceController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMatnr()) .setMaterialDesc(item.getMaktx2()) + .setFactoryNo(order.getDwerk()) .setWarehouseNo(order.getLgort2()) .setNum(item.getSqsl().subtract(item.getNum())) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java index 7847bd4d..8861d481 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java @@ -160,6 +160,7 @@ public class OutPurchaseController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMaterialCode()) .setMaterialDesc(item.getMaterialDescription()) + .setFactoryNo(item.getFactoryCode()) .setWarehouseNo(item.getStorageLocation()) .setNum(item.getLeft()) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java index e495902a..4017f177 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java @@ -510,6 +510,7 @@ public class TransferCompanyController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMatnr()) .setMaterialDesc(item.getMaktx()) + .setFactoryNo(order.getReswk()) .setWarehouseNo(item.getLgpro()) .setNum(item.getLeft()) ) @@ -964,6 +965,7 @@ public class TransferCompanyController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMatnr()) .setMaterialDesc(item.getMaktx()) + .setFactoryNo(item.getWerks()) .setWarehouseNo(item.getLgpbe1()) .setNum(item.getLeft()) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java index 4a8fde16..d418b32c 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java @@ -536,6 +536,7 @@ public class TransferFactoryController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMatnr()) .setMaterialDesc(item.getMaktx()) + .setFactoryNo(order.getWerks()) .setWarehouseNo(order.getLgort()) .setNum(item.getLeft()) ) @@ -937,6 +938,7 @@ public class TransferFactoryController extends BaseController { .setOrderItemId(item.getId()) .setMaterialNo(item.getMatnr()) .setMaterialDesc(item.getMaktx()) + .setFactoryNo(order.getWerks()) .setWarehouseNo(item.getUmlgo()) .setNum(item.getLeft()) ) diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/NoScanItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/NoScanItemVO.java index 4371394b..c635acb5 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/NoScanItemVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/NoScanItemVO.java @@ -29,6 +29,11 @@ public class NoScanItemVO { */ private String materialDesc; + /** + * 工厂编号 + */ + private String factoryNo; + /** * 库存地点编号 */ From e93fb50543d52657b6cf4abe0a1058f5ccdabacd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 2 Jun 2026 18:43:45 +0800 Subject: [PATCH 09/10] =?UTF-8?q?feat(normalPGI):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=94=B6=E8=B4=A7=E5=8D=95=E5=AD=98=E5=9C=A8=E6=80=A7=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E5=B9=B6=E9=9B=86=E6=88=90SAP=E7=89=A9=E6=96=99?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 验证收货单是否存在,不存在时抛出业务异常 - 集成SAP同步参数服务获取物料信息 - 添加工厂代码和仓库编号字段到无扫描项目返回结果 - 重构数据映射逻辑以支持动态物料信息获取 --- .../admin/controller/NormalPGIController.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java index 91aaddb0..78911ac0 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java @@ -193,6 +193,8 @@ public class NormalPGIController extends BaseController { */ @GetMapping("getListForNoScan") public ApiResult> getListForNoScan(@RequestParam Long orderId) { + WmsSrmOrder order = wmsSrmOrderService.getById(orderId); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("收货单不存在"); List items = wmsSrmOrderItemService.lambdaQuery() .eq(WmsSrmOrderItem::getOrderId, orderId) .list(); @@ -200,13 +202,18 @@ public class NormalPGIController extends BaseController { || noScanningBaseControllerService.existsQrCode(item.getItemCode())); return ApiResult.success( items.stream() - .map(item -> new NoScanItemVO() - .setRowNo(item.getLineNumber()) - .setOrderItemId(item.getId()) - .setMaterialNo(item.getItemCode()) - .setMaterialDesc(item.getItemName()) - .setWarehouseNo("") - .setNum(item.getDeliveryQty().subtract(item.getReceiptQty()))) + .map(item -> { + SAPSyncParamsDTO syncParamsDTO = sapCommonService.getMaterialInfoInOrder(item.getPoNum(), + order.getSupplierNum(), item.getItemCode(), item.getPoLineNumber()); + return new NoScanItemVO() + .setRowNo(item.getLineNumber()) + .setOrderItemId(item.getId()) + .setMaterialNo(item.getItemCode()) + .setMaterialDesc(item.getItemName()) + .setFactoryNo(order.getIuCode()) + .setWarehouseNo(syncParamsDTO.getWarehouseNo()) + .setNum(item.getDeliveryQty().subtract(item.getReceiptQty())); + }) .toList() ); } From 3aa6a3846c1efc88e81a0a47339cbd530157edb6 Mon Sep 17 00:00:00 2001 From: 10001392 <1055202292@qq.com> Date: Tue, 2 Jun 2026 20:08:28 +0800 Subject: [PATCH 10/10] =?UTF-8?q?1532=20SRM=E7=B3=BB=E7=BB=9F=E4=B8=8EWMS?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=90=8C=E6=AD=A5=E9=85=8D=E7=BD=AE=E6=9B=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/nflg/wms/admin/controller/NormalPGIController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java index 9a03fb5e..9a50bab3 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java @@ -767,7 +767,7 @@ public class NormalPGIController extends BaseController { content.setReceiveType("BY_DELIVERY"); content.setLineVOList(new ArrayList<>()); dto.setContent(content); - dto.setCode("SCAN_RCV_RECEIVE_TO_SRM"); + dto.setCode("WMS_RCV_RECEIVE_TO_SRM"); qcDto.setPushDto(dto); } srmPushDto = qcDto.getPushDto();