Commit 28d0cfd08e3379612e90e5448c090afb5d516e1d

Authored by YunaiV
1 parent 98e11135

✨ feat(item-receipt): 添加采购入库单相关字段和功能

新增采购入库单编码和采购订单号字段,优化相关服务和控制器以支持批量获取入库单信息,提升数据处理能力。
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderBomController.java
@@ -122,6 +122,8 @@ public class MesProWorkOrderBomController { @@ -122,6 +122,8 @@ public class MesProWorkOrderBomController {
122 Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(leafItems.keySet()); 122 Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(leafItems.keySet());
123 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( 123 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
124 convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); 124 convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
  125 + Map<Long, MesMdItemTypeDO> itemTypeMap = itemTypeService.getItemTypeMap(
  126 + convertSet(itemMap.values(), MesMdItemDO::getItemTypeId));
125 List<MesProWorkOrderItemRespVO> result = new ArrayList<>(leafItems.size()); 127 List<MesProWorkOrderItemRespVO> result = new ArrayList<>(leafItems.size());
126 for (Map.Entry<Long, BigDecimal> entry : leafItems.entrySet()) { 128 for (Map.Entry<Long, BigDecimal> entry : leafItems.entrySet()) {
127 MesMdItemDO item = itemMap.get(entry.getKey()); 129 MesMdItemDO item = itemMap.get(entry.getKey());
@@ -133,6 +135,8 @@ public class MesProWorkOrderBomController { @@ -133,6 +135,8 @@ public class MesProWorkOrderBomController {
133 .setItemCode(item.getCode()).setItemName(item.getName()).setItemSpec(item.getSpecification()); 135 .setItemCode(item.getCode()).setItemName(item.getName()).setItemSpec(item.getSpecification());
134 MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), 136 MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(),
135 unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); 137 unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName()));
  138 + MapUtils.findAndThen(itemTypeMap, item.getItemTypeId(),
  139 + itemType -> vo.setItemOrProduct(itemType.getItemOrProduct()));
136 result.add(vo); 140 result.add(vo);
137 } 141 }
138 return success(result); 142 return success(result);
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkOrderItemRespVO.java
@@ -27,4 +27,7 @@ public class MesProWorkOrderItemRespVO { @@ -27,4 +27,7 @@ public class MesProWorkOrderItemRespVO {
27 @Schema(description = "需求数量", example = "1000.00") 27 @Schema(description = "需求数量", example = "1000.00")
28 private BigDecimal quantity; 28 private BigDecimal quantity;
29 29
  30 + @Schema(description = "物料/产品标识", example = "ITEM")
  31 + private String itemOrProduct;
  32 +
30 } 33 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptLineController.java
@@ -10,10 +10,12 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWm @@ -10,10 +10,12 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWm
10 import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLineSaveReqVO; 10 import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLineSaveReqVO;
11 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; 11 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
12 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; 12 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO;
13 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptLineDO; 14 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptLineDO;
14 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 15 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
15 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; 16 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
16 import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptLineService; 17 import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptLineService;
  18 +import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptService;
17 import io.swagger.v3.oas.annotations.Operation; 19 import io.swagger.v3.oas.annotations.Operation;
18 import io.swagger.v3.oas.annotations.Parameter; 20 import io.swagger.v3.oas.annotations.Parameter;
19 import io.swagger.v3.oas.annotations.tags.Tag; 21 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -38,12 +40,12 @@ public class MesWmItemReceiptLineController { @@ -38,12 +40,12 @@ public class MesWmItemReceiptLineController {
38 40
39 @Resource 41 @Resource
40 private MesWmItemReceiptLineService itemReceiptLineService; 42 private MesWmItemReceiptLineService itemReceiptLineService;
41 -  
42 @Resource 43 @Resource
43 private MesMdItemService itemService; 44 private MesMdItemService itemService;
44 -  
45 @Resource 45 @Resource
46 private MesMdUnitMeasureService unitMeasureService; 46 private MesMdUnitMeasureService unitMeasureService;
  47 + @Resource
  48 + private MesWmItemReceiptService itemReceiptService;
47 49
48 @PostMapping("/create") 50 @PostMapping("/create")
49 @Operation(summary = "创建采购入库单行") 51 @Operation(summary = "创建采购入库单行")
@@ -101,6 +103,8 @@ public class MesWmItemReceiptLineController { @@ -101,6 +103,8 @@ public class MesWmItemReceiptLineController {
101 convertSet(list, MesWmItemReceiptLineDO::getItemId)); 103 convertSet(list, MesWmItemReceiptLineDO::getItemId));
102 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( 104 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
103 convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); 105 convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
  106 + Map<Long, MesWmItemReceiptDO> receiptMap = itemReceiptService.getItemReceiptMap(
  107 + convertSet(list, MesWmItemReceiptLineDO::getReceiptId));
104 // 2. 构建结果 108 // 2. 构建结果
105 return BeanUtils.toBean(list, MesWmItemReceiptLineRespVO.class, vo -> { 109 return BeanUtils.toBean(list, MesWmItemReceiptLineRespVO.class, vo -> {
106 MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { 110 MapUtils.findAndThen(itemMap, vo.getItemId(), item -> {
@@ -108,6 +112,8 @@ public class MesWmItemReceiptLineController { @@ -108,6 +112,8 @@ public class MesWmItemReceiptLineController {
108 MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), 112 MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(),
109 unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); 113 unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName()));
110 }); 114 });
  115 + MapUtils.findAndThen(receiptMap, vo.getReceiptId(), receipt ->
  116 + vo.setReceiptCode(receipt.getCode()).setPurchaseOrderCode(receipt.getPurchaseOrderCode()));
111 }); 117 });
112 } 118 }
113 119
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/line/MesWmItemReceiptLineRespVO.java
@@ -16,6 +16,12 @@ public class MesWmItemReceiptLineRespVO { @@ -16,6 +16,12 @@ public class MesWmItemReceiptLineRespVO {
16 @Schema(description = "入库单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 16 @Schema(description = "入库单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
17 private Long receiptId; 17 private Long receiptId;
18 18
  19 + @Schema(description = "入库单编码", example = "IR2026020001")
  20 + private String receiptCode;
  21 +
  22 + @Schema(description = "采购订单号", example = "PO20260201")
  23 + private String purchaseOrderCode;
  24 +
19 @Schema(description = "到货通知单行编号", example = "1") 25 @Schema(description = "到货通知单行编号", example = "1")
20 private Long arrivalNoticeLineId; 26 private Long arrivalNoticeLineId;
21 27
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java
@@ -191,8 +191,6 @@ public class MesProRouteProcessServiceImpl implements MesProRouteProcessService @@ -191,8 +191,6 @@ public class MesProRouteProcessServiceImpl implements MesProRouteProcessService
191 // 1. 根据产品查找关联的工艺路线产品记录 191 // 1. 根据产品查找关联的工艺路线产品记录
192 MesProRouteProductDO routeProduct = routeProductService.getRouteProductByItemId(productId); 192 MesProRouteProductDO routeProduct = routeProductService.getRouteProductByItemId(productId);
193 if (routeProduct == null) { 193 if (routeProduct == null) {
194 - // TODO @芋艿:会不会存在配置了多个的情况???  
195 - // TODO @AI:会有这个情况么?  
196 return Collections.emptyList(); 194 return Collections.emptyList();
197 } 195 }
198 // 2. 返回该工艺路线的工序列表 196 // 2. 返回该工艺路线的工序列表
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptService.java
@@ -5,8 +5,11 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemR @@ -5,8 +5,11 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemR
5 import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptSaveReqVO; 5 import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptSaveReqVO;
6 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO; 6 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO;
7 import jakarta.validation.Valid; 7 import jakarta.validation.Valid;
8 - 8 +import java.util.Collection;
9 import java.util.List; 9 import java.util.List;
  10 +import java.util.Map;
  11 +
  12 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
10 13
11 /** 14 /**
12 * MES 采购入库单 Service 接口 15 * MES 采购入库单 Service 接口
@@ -103,4 +106,22 @@ public interface MesWmItemReceiptService { @@ -103,4 +106,22 @@ public interface MesWmItemReceiptService {
103 */ 106 */
104 List<MesWmItemReceiptDO> getItemReceiptListByVendorId(Long vendorId); 107 List<MesWmItemReceiptDO> getItemReceiptListByVendorId(Long vendorId);
105 108
  109 + /**
  110 + * 批量获得采购入库单列表
  111 + *
  112 + * @param ids 编号数组
  113 + * @return 入库单列表
  114 + */
  115 + List<MesWmItemReceiptDO> getItemReceiptList(Collection<Long> ids);
  116 +
  117 + /**
  118 + * 批量获得采购入库单 Map
  119 + *
  120 + * @param ids 编号数组
  121 + * @return 入库单 Map
  122 + */
  123 + default Map<Long, MesWmItemReceiptDO> getItemReceiptMap(Collection<Long> ids) {
  124 + return convertMap(getItemReceiptList(ids), MesWmItemReceiptDO::getId);
  125 + }
  126 +
106 } 127 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
@@ -29,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional; @@ -29,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
29 import org.springframework.validation.annotation.Validated; 29 import org.springframework.validation.annotation.Validated;
30 30
31 import java.math.BigDecimal; 31 import java.math.BigDecimal;
  32 +import java.util.Collection;
32 import java.util.List; 33 import java.util.List;
33 34
34 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 35 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -271,4 +272,9 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService { @@ -271,4 +272,9 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService {
271 return itemReceiptMapper.selectListByVendorId(vendorId); 272 return itemReceiptMapper.selectListByVendorId(vendorId);
272 } 273 }
273 274
  275 + @Override
  276 + public List<MesWmItemReceiptDO> getItemReceiptList(Collection<Long> ids) {
  277 + return itemReceiptMapper.selectByIds(ids);
  278 + }
  279 +
274 } 280 }