From 6358bff95194516c00e4d9d17a57e0619cf1eaa8 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 22 Mar 2026 21:53:26 +0800 Subject: [PATCH] ✨ feat(mes): 添加仓库、库区和库位名称字段及相关校验 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/MesWmMiscIssueLineController.java | 25 +++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/vo/MesWmMiscIssueSaveReqVO.java | 3 ++- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/vo/line/MesWmMiscIssueLineRespVO.java | 9 +++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/MesWmMiscReceiptLineController.java | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/vo/line/MesWmMiscReceiptLineRespVO.java | 24 ++++++++++++++++++------ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/vo/line/MesWmMiscReceiptLineSaveReqVO.java | 10 ---------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/MesWmMiscReceiptDetailDO.java | 13 ------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/MesWmMiscReceiptLineDO.java | 13 ------------- 8 files changed, 121 insertions(+), 46 deletions(-) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/MesWmMiscIssueLineController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/MesWmMiscIssueLineController.java index 6191f5b..ab7cb0d 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/MesWmMiscIssueLineController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/MesWmMiscIssueLineController.java @@ -11,9 +11,15 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo.line.MesWmMi import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscissue.MesWmMiscIssueLineDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; import cn.iocoder.yudao.module.mes.service.wm.miscissue.MesWmMiscIssueLineService; +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -45,6 +51,15 @@ public class MesWmMiscIssueLineController { @Resource private MesMdUnitMeasureService unitMeasureService; + @Resource + private MesWmWarehouseService warehouseService; + + @Resource + private MesWmWarehouseLocationService warehouseLocationService; + + @Resource + private MesWmWarehouseAreaService warehouseAreaService; + @PostMapping("/create") @Operation(summary = "创建杂项出库单行") @PreAuthorize("@ss.hasPermission('mes:wm-misc-issue:create')") @@ -101,6 +116,13 @@ public class MesWmMiscIssueLineController { convertSet(list, MesWmMiscIssueLineDO::getItemId)); Map unitMeasureMap = unitMeasureService.getUnitMeasureMap( convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); + Map warehouseMap = warehouseService.getWarehouseMap( + convertSet(list, MesWmMiscIssueLineDO::getWarehouseId)); + Map locationMap = warehouseLocationService.getWarehouseLocationMap( + convertSet(list, MesWmMiscIssueLineDO::getLocationId)); + Map areaMap = warehouseAreaService.getWarehouseAreaMap( + convertSet(list, MesWmMiscIssueLineDO::getAreaId)); + // 2. 构建结果 return BeanUtils.toBean(list, MesWmMiscIssueLineRespVO.class, vo -> { MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { @@ -108,6 +130,9 @@ public class MesWmMiscIssueLineController { MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); }); + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName())); + MapUtils.findAndThen(locationMap, vo.getLocationId(), location -> vo.setLocationName(location.getName())); + MapUtils.findAndThen(areaMap, vo.getAreaId(), area -> vo.setAreaName(area.getName())); }); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/vo/MesWmMiscIssueSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/vo/MesWmMiscIssueSaveReqVO.java index 562988f..2758b7e 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/vo/MesWmMiscIssueSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/vo/MesWmMiscIssueSaveReqVO.java @@ -35,7 +35,8 @@ public class MesWmMiscIssueSaveReqVO { @Schema(description = "来源单据类型", example = "PURCHASE_ORDER") private String sourceDocType; - @Schema(description = "出库日期") + @Schema(description = "出库日期", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "出库日期不能为空") private LocalDateTime issueDate; @Schema(description = "备注", example = "备注") diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/vo/line/MesWmMiscIssueLineRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/vo/line/MesWmMiscIssueLineRespVO.java index d9ad710..f51e9ee 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/vo/line/MesWmMiscIssueLineRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscissue/vo/line/MesWmMiscIssueLineRespVO.java @@ -52,6 +52,15 @@ public class MesWmMiscIssueLineRespVO { @Schema(description = "库位编号", example = "1") private Long areaId; + @Schema(description = "仓库名称", example = "原料仓") + private String warehouseName; + + @Schema(description = "库区名称", example = "A区") + private String locationName; + + @Schema(description = "库位名称", example = "1排1架") + private String areaName; + @Schema(description = "备注", example = "备注") private String remark; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/MesWmMiscReceiptLineController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/MesWmMiscReceiptLineController.java index 03c5870..8d6d93d 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/MesWmMiscReceiptLineController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/MesWmMiscReceiptLineController.java @@ -17,9 +17,24 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.Collections; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; +import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; /** * MES 杂项入库单行 Controller @@ -33,6 +48,21 @@ public class MesWmMiscReceiptLineController { @Resource private MesWmMiscReceiptLineService miscReceiptLineService; + @Resource + private MesMdItemService itemService; + + @Resource + private MesMdUnitMeasureService unitMeasureService; + + @Resource + private MesWmWarehouseService warehouseService; + + @Resource + private MesWmWarehouseLocationService warehouseLocationService; + + @Resource + private MesWmWarehouseAreaService warehouseAreaService; + @PostMapping("/create") @Operation(summary = "创建杂项入库单行") @PreAuthorize("@ss.hasPermission('mes:wm:misc-receipt:create')") @@ -63,7 +93,10 @@ public class MesWmMiscReceiptLineController { @PreAuthorize("@ss.hasPermission('mes:wm:misc-receipt:query')") public CommonResult getMiscReceiptLine(@RequestParam("id") Long id) { MesWmMiscReceiptLineDO line = miscReceiptLineService.getMiscReceiptLine(id); - return success(BeanUtils.toBean(line, MesWmMiscReceiptLineRespVO.class)); + if (line == null) { + return success(null); + } + return success(buildRespVOList(Collections.singletonList(line)).get(0)); } @GetMapping("/list-by-receipt-id") @@ -72,7 +105,7 @@ public class MesWmMiscReceiptLineController { @PreAuthorize("@ss.hasPermission('mes:wm:misc-receipt:query')") public CommonResult> getMiscReceiptLineListByReceiptId(@RequestParam("receiptId") Long receiptId) { List list = miscReceiptLineService.getMiscReceiptLineListByReceiptId(receiptId); - return success(BeanUtils.toBean(list, MesWmMiscReceiptLineRespVO.class)); + return success(buildRespVOList(list)); } @GetMapping("/page") @@ -80,7 +113,38 @@ public class MesWmMiscReceiptLineController { @PreAuthorize("@ss.hasPermission('mes:wm:misc-receipt:query')") public CommonResult> getMiscReceiptLinePage(@Valid MesWmMiscReceiptLinePageReqVO pageReqVO) { PageResult pageResult = miscReceiptLineService.getMiscReceiptLinePage(pageReqVO); - return success(BeanUtils.toBean(pageResult, MesWmMiscReceiptLineRespVO.class)); + return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); + } + + // ==================== 拼接 VO ==================== + + private List buildRespVOList(List list) { + if (CollUtil.isEmpty(list)) { + return Collections.emptyList(); + } + // 1. 获得关联数据 + Map itemMap = itemService.getItemMap( + convertSet(list, MesWmMiscReceiptLineDO::getItemId)); + Map unitMeasureMap = unitMeasureService.getUnitMeasureMap( + convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); + Map warehouseMap = warehouseService.getWarehouseMap( + convertSet(list, MesWmMiscReceiptLineDO::getWarehouseId)); + Map locationMap = warehouseLocationService.getWarehouseLocationMap( + convertSet(list, MesWmMiscReceiptLineDO::getLocationId)); + Map areaMap = warehouseAreaService.getWarehouseAreaMap( + convertSet(list, MesWmMiscReceiptLineDO::getAreaId)); + + // 2. 构建结果 + return BeanUtils.toBean(list, MesWmMiscReceiptLineRespVO.class, vo -> { + MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { + vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); + MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), + unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); + }); + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName())); + MapUtils.findAndThen(locationMap, vo.getLocationId(), location -> vo.setLocationName(location.getName())); + MapUtils.findAndThen(areaMap, vo.getAreaId(), area -> vo.setAreaName(area.getName())); + }); } } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/vo/line/MesWmMiscReceiptLineRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/vo/line/MesWmMiscReceiptLineRespVO.java index 7617925..6e7ba62 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/vo/line/MesWmMiscReceiptLineRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/vo/line/MesWmMiscReceiptLineRespVO.java @@ -34,14 +34,26 @@ public class MesWmMiscReceiptLineRespVO { @Schema(description = "库位编号", example = "1") private Long areaId; - @Schema(description = "生产日期") - private LocalDateTime productionDate; + @Schema(description = "物料编码", example = "M001") + private String itemCode; - @Schema(description = "有效期") - private LocalDateTime expireDate; + @Schema(description = "物料名称", example = "钢板") + private String itemName; - @Schema(description = "生产批号", example = "PROD20260301") - private String lotNumber; + @Schema(description = "规格型号", example = "10mm*100mm") + private String specification; + + @Schema(description = "计量单位名称", example = "千克") + private String unitMeasureName; + + @Schema(description = "仓库名称", example = "原料仓") + private String warehouseName; + + @Schema(description = "库区名称", example = "A区") + private String locationName; + + @Schema(description = "库位名称", example = "1排1架") + private String areaName; @Schema(description = "备注", example = "备注") private String remark; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/vo/line/MesWmMiscReceiptLineSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/vo/line/MesWmMiscReceiptLineSaveReqVO.java index bcb8664..cba5c92 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/vo/line/MesWmMiscReceiptLineSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/miscreceipt/vo/line/MesWmMiscReceiptLineSaveReqVO.java @@ -6,7 +6,6 @@ import jakarta.validation.constraints.NotNull; import lombok.Data; import java.math.BigDecimal; -import java.time.LocalDateTime; @Schema(description = "管理后台 - MES 杂项入库单行新增/修改 Request VO") @Data @@ -41,15 +40,6 @@ public class MesWmMiscReceiptLineSaveReqVO { @Schema(description = "库位编号", example = "1") private Long areaId; - @Schema(description = "生产日期") - private LocalDateTime productionDate; - - @Schema(description = "有效期") - private LocalDateTime expireDate; - - @Schema(description = "生产批号", example = "PROD20260301") - private String lotNumber; - @Schema(description = "备注", example = "备注") private String remark; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/MesWmMiscReceiptDetailDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/MesWmMiscReceiptDetailDO.java index 8f82e12..44d7926 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/MesWmMiscReceiptDetailDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/MesWmMiscReceiptDetailDO.java @@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; import java.math.BigDecimal; -import java.time.LocalDateTime; /** * MES 杂项入库明细 DO @@ -76,18 +75,6 @@ public class MesWmMiscReceiptDetailDO extends BaseDO { */ private Long areaId; /** - * 生产日期 - */ - private LocalDateTime productionDate; - /** - * 有效期 - */ - private LocalDateTime expireDate; - /** - * 生产批号 - */ - private String lotNumber; - /** * 备注 */ private String remark; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/MesWmMiscReceiptLineDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/MesWmMiscReceiptLineDO.java index 70c9620..0ea6717 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/MesWmMiscReceiptLineDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/miscreceipt/MesWmMiscReceiptLineDO.java @@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; import java.math.BigDecimal; -import java.time.LocalDateTime; /** * MES 杂项入库单行 DO @@ -72,18 +71,6 @@ public class MesWmMiscReceiptLineDO extends BaseDO { */ private Long areaId; /** - * 生产日期(暂不使用) - */ - private LocalDateTime productionDate; - /** - * 有效期(暂不使用) - */ - private LocalDateTime expireDate; - /** - * 生产批号(暂不使用) - */ - private String lotNumber; - /** * 备注 */ private String remark; -- libgit2 0.21.4