diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java index c56f98e1..72507669 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java @@ -176,47 +176,76 @@ public class StructuralPackageOrderController extends BaseController { */ @PostMapping("generateTray") public ApiResult generateTray(@Valid @RequestBody @NotNull GenerateTrayQO request) { - return ApiResult.success(generateTray(request.getPackageId(), request.getNum(), request.getPlanNum())); + return ApiResult.success(generateTray(request.getPackageId(), request.getSupplierCode(), request.getNum(), request.getPlanNum())); } - private GenerateTrayVO generateTray(Long packageId, BigDecimal num, BigDecimal orderNum) { + private GenerateTrayVO generateTray(Long packageId, String supplierCode, BigDecimal num, BigDecimal orderNum) { PackageVO packageVO = structuralPackageService.getInfo(packageId); VUtil.trueThrowBusinessError(Objects.isNull(packageVO)).throwMessage("钢构包不存在"); - List materials = packageVO.getMaterialList(); - VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(materials)).throwMessage("物料清单为空"); + + // 获取托盘数量 + Integer trayNum = packageVO.getTrayNum() != null ? packageVO.getTrayNum().intValue() : 0; + VUtil.trueThrowBusinessError(trayNum <= 0).throwMessage("托盘数量必须大于0"); + + // 生成日期部分:年后2位+月2位+日2位 + LocalDate now = LocalDate.now(); + String datePart = String.format("%02d%02d%02d", + now.getYear() % 100, + now.getMonthValue(), + now.getDayOfMonth()); + + // 供应商代码后4位(supplierCode是6位数字) + String supplierSuffix = ""; + if (StrUtil.isNotBlank(supplierCode)) { + supplierSuffix = supplierCode.length() >= 4 + ? supplierCode.substring(supplierCode.length() - 4) + : supplierCode; + } + List trays = new ArrayList<>(); + + // 根据托盘数量生成托盘 + for (int i = 1; i <= trayNum; i++) { + // 生成托盘号:S+供应商代码后4位+年后2位+月2位+日2位-序号 + String generatedTrayNo = "S" + supplierSuffix + datePart + "-" + i; + + TrayVO tray = new TrayVO() + .setNo(generatedTrayNo) + .setTray("") // 托盘序号设置为空 +// .setStation(material.getStation()) + .setMaterialNo(packageVO.getNo()) + .setMaterialDesc(packageVO.getName()) + .setTotalWeight(BigDecimal.ZERO); + trays.add(tray); + } + + // 处理物料清单,生成TrayItemVO List items = new ArrayList<>(); BigDecimal totalWeight = BigDecimal.ZERO; - for (PackageMaterialDTO material : materials) { - TrayVO tray = trays.stream().filter(it -> StrUtil.equals(it.getTray(), material.getTray()) && StrUtil.equals(it.getStation(), material.getStation())).findFirst().orElse(null); - if (Objects.isNull(tray)) { - tray = new TrayVO() - .setNo("S" + RandomUtil.randomNumbers(10)) - .setTray(material.getTray()) - .setStation(material.getStation()) - .setMaterialNo(packageVO.getNo()) - .setMaterialDesc(packageVO.getName()) - .setTotalWeight(BigDecimal.ZERO); - trays.add(tray); - } - BigDecimal itemNum = material.getNum(); - items.add(new TrayItemVO() - .setNo(tray.getNo()) - .setMaterialNo(material.getNo()) - .setMaterialDesc(material.getName()) - .setVersion(material.getVersion()) - .setWeight(material.getWeight()) - .setPlanNum(itemNum.multiply(orderNum)) - .setShipmentNum(itemNum.multiply(num)) - .setImage(material.getImage()) - .setDrawingNo(material.getDrawingNo()) - ); - if (Objects.nonNull(material.getWeight())) { - BigDecimal itemWeight = itemNum.multiply(material.getWeight()); - tray.setTotalWeight(tray.getTotalWeight().add(itemWeight)); - totalWeight = totalWeight.add(itemWeight); + List materials = packageVO.getMaterialList(); + if (CollectionUtil.isNotEmpty(materials)) { + for (PackageMaterialDTO material : materials) { + BigDecimal itemNum = material.getNum(); + TrayItemVO item = new TrayItemVO() + .setNo("") // 托盘号设置为空 + .setMaterialNo(material.getNo()) + .setMaterialDesc(material.getName()) + .setVersion(material.getVersion()) + .setWeight(material.getWeight()) + .setPlanNum(itemNum.multiply(orderNum)) + .setShipmentNum(itemNum.multiply(num)) + .setImage(material.getImage()) + .setDrawingNo(material.getDrawingNo()); + items.add(item); + + // 计算总重量 + if (Objects.nonNull(material.getWeight())) { + BigDecimal itemWeight = itemNum.multiply(material.getWeight()); + totalWeight = totalWeight.add(itemWeight); + } } } + return new GenerateTrayVO().setTrays(trays).setItems(items).setTotalWeight(totalWeight); } @@ -251,6 +280,14 @@ public class StructuralPackageOrderController extends BaseController { } List ordersForAdd = new ArrayList<>(); List ordersForUpdate = new ArrayList<>(); + // 预先获取所有供应商信息 + Set supplierIds = request.getItems().stream() + .map(PackageDeliverOrderSaveItemQO::getSupplierId) + .collect(Collectors.toSet()); + List suppliers = userSupplierService.listByIds(supplierIds); + Map supplierCodeMap = suppliers.stream() + .collect(Collectors.toMap(UserSupplier::getId, UserSupplier::getSupplierCode)); + request.getItems().forEach(orderQO -> { WmsStructuralPackageOrder order = Convert.convert(WmsStructuralPackageOrder.class, orderQO); order.setOrderNo(orderNo); @@ -264,7 +301,9 @@ public class StructuralPackageOrderController extends BaseController { order.setUpdateTime(LocalDateTime.now()); ordersForUpdate.add(order); } - GenerateTrayVO trayVO = generateTray(orderQO.getPackageId(), orderQO.getNum(), orderQO.getPlanNum()); + // 获取供应商代码 + String supplierCode = supplierCodeMap.get(orderQO.getSupplierId()); + GenerateTrayVO trayVO = generateTray(orderQO.getPackageId(), supplierCode, orderQO.getNum(), orderQO.getPlanNum()); if (Objects.nonNull(orderQO.getId())) { WmsStructuralPackageOrder o = structuralPackageOrderService.getById(orderQO.getId()); VUtil.trueThrowBusinessError(Objects.isNull(o)).throwMessage("订单不存在"); @@ -305,7 +344,6 @@ public class StructuralPackageOrderController extends BaseController { List packages = structuralPackageService.lambdaQuery() .in(WmsStructuralPackage::getId, request.getItems().stream().map(PackageDeliverOrderSaveItemQO::getPackageId).toList()) .list(); - List suppliers = userSupplierService.listByIds(ordersForAdd.stream().map(WmsStructuralPackageOrder::getSupplierId).collect(Collectors.toSet())); qrCodeMasterService.saveBatch( ordersForAdd.stream() .map(it -> { @@ -313,6 +351,7 @@ public class StructuralPackageOrderController extends BaseController { .filter(pt -> pt.getId().equals(it.getPackageId())) .findFirst() .get(); + String supplierCode = supplierCodeMap.get(it.getSupplierId()); UserSupplier supplier = suppliers.stream() .filter(pt -> pt.getId().equals(it.getSupplierId())) .findFirst() @@ -1334,7 +1373,7 @@ public class StructuralPackageOrderController extends BaseController { } } else { list.forEach(item -> { - item.setTray(generateTray(item.getPackageId(), item.getNum(), item.getTransportNum())); + item.setTray(generateTray(item.getPackageId(), item.getSupplierCode(), item.getNum(), item.getTransportNum())); item.setWeight(item.getTray().getItems().stream().map(TrayItemVO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add)); }); return ApiResult.success(list); diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/GenerateTrayQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/GenerateTrayQO.java index b69470c3..856cdda3 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/GenerateTrayQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/GenerateTrayQO.java @@ -1,5 +1,6 @@ package com.nflg.wms.common.pojo.qo; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -14,6 +15,12 @@ public class GenerateTrayQO { @NotNull private Long packageId; + /** + * 供应商代码(6位数字) + */ + @NotBlank + private String supplierCode; + /** * 数量 */ diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/DeliverStructuralPackageOrderExtendVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/DeliverStructuralPackageOrderExtendVO.java index 6729c180..a73ba8a7 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/DeliverStructuralPackageOrderExtendVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/DeliverStructuralPackageOrderExtendVO.java @@ -5,6 +5,7 @@ import lombok.Data; import lombok.experimental.Accessors; import org.ttzero.excel.annotation.ExcelColumn; +import java.math.BigDecimal; import java.util.Objects; @Data @@ -63,6 +64,11 @@ public class DeliverStructuralPackageOrderExtendVO extends DeliverStructuralPack */ private Short totalNum; + /** + * 托盘数量 + */ + private BigDecimal trayNum; + public String getStateDesc() { if (Objects.isNull(state)) { return ""; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/PackageVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/PackageVO.java index 3d490c4e..dd232464 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/PackageVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/PackageVO.java @@ -58,6 +58,11 @@ public class PackageVO { */ private BigDecimal weight; + /** + * 托盘数量 + */ + private BigDecimal trayNum; + /** * 种类 */ diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsStructuralPackageOrderTrayMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsStructuralPackageOrderTrayMapper.xml index 30ae7b80..b4e952e5 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsStructuralPackageOrderTrayMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsStructuralPackageOrderTrayMapper.xml @@ -3,17 +3,19 @@