From e80eae3bcd9f1ee0eecd4072f943f2519762f164 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期二, 20 十月 2026 15:18:21 +0800
Subject: [PATCH] feat: 工序添加是否领料,用于后续生产订单领料
---
src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java | 25 ++++++
src/main/java/com/ruoyi/production/pojo/ProductionBomStructure.java | 3
src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java | 76 ++++++++++++++++--
src/main/resources/mapper/technology/TechnologyOperationMapper.xml | 2
doc/20261020_工序是否领料与生产BOM结构领料标记.sql | 112 ++++++++++++++++++++++++++++
src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java | 3
src/main/resources/mapper/production/ProductionBomStructureMapper.xml | 1
7 files changed, 211 insertions(+), 11 deletions(-)
diff --git "a/doc/20261020_\345\267\245\345\272\217\346\230\257\345\220\246\351\242\206\346\226\231\344\270\216\347\224\237\344\272\247BOM\347\273\223\346\236\204\351\242\206\346\226\231\346\240\207\350\256\260.sql" "b/doc/20261020_\345\267\245\345\272\217\346\230\257\345\220\246\351\242\206\346\226\231\344\270\216\347\224\237\344\272\247BOM\347\273\223\346\236\204\351\242\206\346\226\231\346\240\207\350\256\260.sql"
new file mode 100644
index 0000000..0a56f3a
--- /dev/null
+++ "b/doc/20261020_\345\267\245\345\272\217\346\230\257\345\220\246\351\242\206\346\226\231\344\270\216\347\224\237\344\272\247BOM\347\273\223\346\236\204\351\242\206\346\226\231\346\240\207\350\256\260.sql"
@@ -0,0 +1,112 @@
+-- ============================================================================
+-- 宸ュ簭澧炲姞鈥滄槸鍚﹂鏂欌�濇爣璁帮紝骞跺悓姝ュ埌鐢熶骇BOM缁撴瀯锛堢敓浜ц鍗曢鏂欏彴璐︿娇鐢級
+--
+-- 鑳屾櫙锛�
+-- 鐢熶骇璁㈠崟鐨勯鏂欏彴璐﹀師鏉ユ寜 BOM 鐨勫彾瀛愯妭鐐瑰弽鎺ㄩ渶瑕侀鏂欑殑鐗╂枡锛孊OM 灞傜骇涓�澶氾紝
+-- 棰嗘枡缁撴灉鍜屽疄闄呮儏鍐靛涓嶄笂锛圔OM 閲屼竴澶у爢鐗╂枡闇�瑕侀鏂欙紝绠楀嚭鏉ュ彧鍓╁嚑鏉★級銆�
+-- 鐜版敼涓虹敱宸ュ簭涓婄殑鈥滄槸鍚﹂鏂欌�濇爣璁板喅瀹氶鏂欒寖鍥达細
+-- 1) 宸ュ簭琛� technology_operation 澧炲姞 is_pick锛堝伐搴忕鐞�-鏂板/缂栬緫宸ュ簭 鍕鹃�夆�滄槸鍚﹂鏂欌�濓級锛�
+-- 2) 鐢熶骇璁″垝涓嬪彂锛堢敓鎴愮敓浜ц鍗曞揩鐓э級鏃讹紝鎶婂伐搴忕殑 is_pick 甯﹀埌 production_bom_structure锛�
+-- 3) 鐢熶骇璁㈠崟-棰嗘枡鍙拌处鎸� is_pick = 1 鐨勫伐搴忕墿鏂欏彇鏁帮紝璇诲彇鏃朵細鐢ㄥ伐搴忎富鏁版嵁鐨勬渶鏂版爣璁板埛鏂板揩鐓у�硷紝
+-- 鍥犳宸ュ簭涓婅皟鏁粹�滄槸鍚﹂鏂欌�濆悗鏃犻渶閲嶆柊涓嬪彂璁″垝鍗冲彲鐢熸晥锛�
+-- production_bom_structure.is_pick 涓昏鐢ㄤ簬蹇収鐣欑棔銆佹姤琛ㄥ拰宸ュ簭琚垹闄ゅ悗鐨勫厹搴曘��
+--
+-- 鎵ц璇存槑锛�
+-- 1. 鑴氭湰鍙噸澶嶆墽琛岋紝鍒楀凡瀛樺湪鏃朵細鑷姩璺宠繃锛�
+-- 2. 寤鸿鍏堟墽琛屾湰鑴氭湰锛屽啀鍗囩骇绋嬪簭锛屾渶鍚庡湪宸ュ簭绠$悊閲屽嬀閫夐渶瑕侀鏂欑殑宸ュ簭锛�
+-- 3. 绗� 3 姝ュ洖濉粎鐢ㄤ簬鎶婂瓨閲忚鍗旴OM蹇収閲岀殑 is_pick 鍒锋垚宸ュ簭鏈�鏂版爣璁帮紙鎶ヨ〃/杩芥函鍙e緞锛夛紝
+-- 涓嶅奖鍝嶉鏂欏彴璐︾殑瀹炴椂鍙栨暟銆�
+-- ============================================================================
+
+-- ----------------------------------------------------------------------------
+-- 1. 宸ュ簭琛細澧炲姞鈥滄槸鍚﹂鏂欌�濆瓧娈�
+-- ----------------------------------------------------------------------------
+SET
+@col_exists = (
+ SELECT COUNT(1)
+ FROM information_schema.COLUMNS
+ WHERE TABLE_SCHEMA = DATABASE()
+ AND TABLE_NAME = 'technology_operation'
+ AND COLUMN_NAME = 'is_pick'
+);
+
+SET
+@ddl = IF(@col_exists = 0,
+ 'ALTER TABLE technology_operation ADD COLUMN is_pick TINYINT(1) NOT NULL DEFAULT 0 COMMENT ''鏄惁棰嗘枡锛�0鍚︼紝1鏄�'' AFTER is_production',
+ 'SELECT ''technology_operation.is_pick 宸插瓨鍦紝璺宠繃'' AS msg');
+
+PREPARE stmt FROM @ddl;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+
+-- ----------------------------------------------------------------------------
+-- 2. 鐢熶骇璁㈠崟BOM缁撴瀯琛細澧炲姞鈥滄槸鍚﹂鏂欌�濆瓧娈碉紙蹇収鏉ヨ嚜宸ュ簭锛�
+-- ----------------------------------------------------------------------------
+SET
+@col_exists = (
+ SELECT COUNT(1)
+ FROM information_schema.COLUMNS
+ WHERE TABLE_SCHEMA = DATABASE()
+ AND TABLE_NAME = 'production_bom_structure'
+ AND COLUMN_NAME = 'is_pick'
+);
+
+SET
+@ddl = IF(@col_exists = 0,
+ 'ALTER TABLE production_bom_structure ADD COLUMN is_pick TINYINT(1) NOT NULL DEFAULT 0 COMMENT ''鏄惁棰嗘枡锛氭潵鑷伐搴忥紝0鍚︼紝1鏄�'' AFTER technology_operation_id',
+ 'SELECT ''production_bom_structure.is_pick 宸插瓨鍦紝璺宠繃'' AS msg');
+
+PREPARE stmt FROM @ddl;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+
+-- ----------------------------------------------------------------------------
+-- 3. 瀛橀噺鐢熶骇BOM缁撴瀯鍥炲~锛氭寜宸ュ簭褰撳墠鐨勨�滄槸鍚﹂鏂欌�濇爣璁板悓姝ュ揩鐓у��
+-- 棣栨鎵ц锛堝伐搴忚繕娌″紑濮嬫爣璁帮級鏃朵笉浼氭敼鍙樹换浣曟暟鎹紱
+-- 鍚庣画鍦ㄥ伐搴忕鐞嗛噷鍕鹃��/鍙栨秷鈥滄槸鍚﹂鏂欌�濆悗锛屽彲鍐嶆鎵ц鏈鍙ワ紝
+-- 璁╁凡缁忎笅鍙戠殑璁㈠崟BOM蹇収鍚屾鏈�鏂版爣璁帮紙鐢ㄤ簬鎶ヨ〃/杩芥函锛岄鏂欏彴璐﹁鍙栨椂鏈韩涔熶細鍙栧伐搴忔渶鏂版爣璁帮級銆�
+-- ----------------------------------------------------------------------------
+UPDATE production_bom_structure pbs
+ INNER JOIN technology_operation top1 ON top1.id = pbs.technology_operation_id
+SET pbs.is_pick = IFNULL(top1.is_pick, 0)
+WHERE IFNULL(pbs.is_pick, 0) <> IFNULL(top1.is_pick, 0);
+
+-- 鍙�夛紙鏈夐闄╋紝榛樿涓嶆墽琛岋級锛氭妸瀛橀噺宸ュ簭鍏ㄩ儴鏍囪涓洪渶瑕侀鏂欍��
+-- 娉ㄦ剰锛氭墽琛屽悗锛屾墍鏈夊巻鍙茶鍗曠殑棰嗘枡鍙拌处閮戒細鍙樻垚鈥滄寜鍏ㄩ儴宸ュ簭棰嗘枡鈥濓紝璇风‘璁ゅ彛寰勫悗鍐嶆斁寮�銆�
+-- UPDATE technology_operation SET is_pick = 1 WHERE is_pick = 0;
+
+-- ----------------------------------------------------------------------------
+-- 4. 鏍¢獙SQL锛堟寜闇�鎵ц锛屼笉褰卞搷鏁版嵁锛�
+-- ----------------------------------------------------------------------------
+-- 4.1 鏌ョ湅鍝簺宸ュ簭鍦˙OM缁撴瀯涓浣跨敤锛屽府鍔╁喅瀹氱粰鍝簺宸ュ簭寮�鍚�滄槸鍚﹂鏂欌��
+-- SELECT top1.id,
+-- top1.no,
+-- top1.name,
+-- top1.is_pick,
+-- COUNT(pbs.id) AS bom_row_count
+-- FROM technology_operation top1
+-- LEFT JOIN production_bom_structure pbs ON pbs.technology_operation_id = top1.id
+-- GROUP BY top1.id, top1.no, top1.name, top1.is_pick
+-- ORDER BY bom_row_count DESC;
+
+-- 4.2 鏌ョ湅鏌愪釜鐢熶骇璁㈠崟鐨凚OM缁撴瀯棰嗘枡鏍囪锛堟妸 :productionOrderId 鎹㈡垚瀹為檯璁㈠崟ID锛�
+-- SELECT pbs.id,
+-- pbs.parent_id,
+-- pbs.technology_operation_id,
+-- top1.name AS operation_name,
+-- pbs.product_model_id,
+-- pm.model,
+-- pbs.unit_quantity,
+-- pbs.demanded_quantity,
+-- pbs.is_pick
+-- FROM production_bom_structure pbs
+-- LEFT JOIN technology_operation top1 ON top1.id = pbs.technology_operation_id
+-- LEFT JOIN product_model pm ON pm.id = pbs.product_model_id
+-- WHERE pbs.production_order_id = :productionOrderId
+-- ORDER BY pbs.id;
+
+-- ----------------------------------------------------------------------------
+-- 5. 鍥炴粴锛堝闇�锛夛細
+-- ALTER TABLE production_bom_structure DROP COLUMN is_pick;
+-- ALTER TABLE technology_operation DROP COLUMN is_pick;
+-- ----------------------------------------------------------------------------
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionBomStructure.java b/src/main/java/com/ruoyi/production/pojo/ProductionBomStructure.java
index 5ba8d22..09bf8ae 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionBomStructure.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionBomStructure.java
@@ -40,6 +40,9 @@
@Schema(description = "宸ュ簭id")
private Long technologyOperationId;
+ @Schema(description = "鏄惁棰嗘枡 鏉ユ簮宸ュ簭鐨勨�滄槸鍚﹂鏂欌�濇爣璁帮紝棰嗘枡鍙拌处鍙鍙栨爣璁颁簡棰嗘枡鐨勫伐搴忕墿鏂�")
+ private Boolean isPick;
+
@Schema(description = "鐢熶骇璁㈠崟BOMid")
private Long productionOrderBomId;
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java
index acad3ef..eca8cb3 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java
@@ -131,10 +131,15 @@
List<ProductionBomStructure> updateList = new ArrayList<>();
Map<String, ProductionBomStructure> tempEntityMap = new HashMap<>();
+ Map<Long, Boolean> operationPickMap = loadOperationPickMap(flatDtoList.stream()
+ .map(ProductionBomStructureDto::getTechnologyOperationId)
+ .collect(Collectors.toList()));
+
for (ProductionBomStructureDto item : flatDtoList) {
ProductionBomStructure entity = new ProductionBomStructure();
BeanUtils.copyProperties(item, entity);
entity.setProductionOrderBomId(orderBomId);
+ entity.setIsPick(operationPickMap.getOrDefault(item.getTechnologyOperationId(), Boolean.FALSE));
if (item.getId() == null) {
entity.setParentId(null);
insertList.add(entity);
@@ -853,6 +858,26 @@
return technologyOperationMapper.selectById(technologyOperationId);
}
+ /**
+ * 鎵归噺璇诲彇宸ュ簭鐨勨�滄槸鍚﹂鏂欌�濇爣璁帮紝淇濊瘉鐢熶骇BOM缁撴瀯涓殑棰嗘枡鏍囪涓庡伐搴忎富鏁版嵁涓�鑷淬��
+ */
+ private Map<Long, Boolean> loadOperationPickMap(List<Long> technologyOperationIds) {
+ if (technologyOperationIds == null || technologyOperationIds.isEmpty()) {
+ return Collections.emptyMap();
+ }
+ Set<Long> operationIdSet = technologyOperationIds.stream()
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ if (operationIdSet.isEmpty()) {
+ return Collections.emptyMap();
+ }
+ return technologyOperationMapper.selectBatchIds(operationIdSet).stream()
+ .filter(item -> item != null && item.getId() != null)
+ .collect(Collectors.toMap(TechnologyOperation::getId,
+ item -> Boolean.TRUE.equals(item.getIsPick()),
+ (left, right) -> left));
+ }
+
private String generateNextTaskNo() {
String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
ProductionOperationTask latestTask = productionOperationTaskMapper.selectOne(
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
index defce97..43a89a6 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -371,6 +371,9 @@
productionOrderBomMapper.insert(orderBom);
Map<Long, Long> idMap = new HashMap<>();
+ Map<Long, Boolean> operationPickMap = loadOperationPickMap(structureList.stream()
+ .map(TechnologyBomStructure::getOperationId)
+ .collect(Collectors.toList()));
for (TechnologyBomStructure source : structureList) {
// 瀛愯妭鐐� parentId 闇�瑕佹槧灏勬垚鏂板揩鐓ц妭鐐� id锛屾墠鑳戒繚鐣欏師濮� BOM 灞傜骇銆�
ProductionBomStructure target = new ProductionBomStructure();
@@ -379,6 +382,7 @@
target.setParentId(source.getParentId() == null ? null : idMap.get(source.getParentId()));
target.setProductModelId(source.getProductModelId());
target.setTechnologyOperationId(source.getOperationId());
+ target.setIsPick(operationPickMap.getOrDefault(source.getOperationId(), Boolean.FALSE));
target.setUnitQuantity(source.getUnitQuantity());
target.setDemandedQuantity(defaultDecimal(orderQuantity)
.multiply(defaultDecimal(source.getUnitQuantity())));
@@ -387,6 +391,26 @@
idMap.put(source.getId(), target.getId());
}
return orderBom;
+ }
+
+ /**
+ * 鎵归噺璇诲彇宸ュ簭鐨勨�滄槸鍚﹂鏂欌�濇爣璁帮紝閬垮厤BOM蹇収閫愯鏌ヨ宸ュ簭琛ㄣ��
+ */
+ private Map<Long, Boolean> loadOperationPickMap(List<Long> technologyOperationIds) {
+ if (technologyOperationIds == null || technologyOperationIds.isEmpty()) {
+ return Collections.emptyMap();
+ }
+ Set<Long> operationIdSet = technologyOperationIds.stream()
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ if (operationIdSet.isEmpty()) {
+ return Collections.emptyMap();
+ }
+ return technologyOperationMapper.selectBatchIds(operationIdSet).stream()
+ .filter(item -> item != null && item.getId() != null)
+ .collect(Collectors.toMap(TechnologyOperation::getId,
+ item -> Boolean.TRUE.equals(item.getIsPick()),
+ (left, right) -> left));
}
private void clearProductionSnapshot(Long productionOrderId) {
@@ -1076,32 +1100,62 @@
}
}
- // 鏀堕泦璁㈠崟鎴愬搧瑙勬牸ID锛氬寘鍚敓浜ц鍗曟垚鍝佽鏍间笌BOM鏍硅妭鐐硅鏍硷紝鐢ㄤ簬鎺掗櫎鈥滆嚜宸扁�濊繖涓�鐗╂枡
+ // production_bom_structure.is_pick 鏄敓浜ц鍒掍笅鍙戞椂鐨勫伐搴忛鏂欐爣璁板揩鐓э紱
+ // 棰嗘枡鍙拌处璇诲彇鏃朵互宸ュ簭涓绘暟鎹殑鏈�鏂版爣璁颁负鍑嗭紝淇濊瘉宸ュ簭涓婄殑鈥滄槸鍚﹂鏂欌�濊皟鏁村悗鏃犻渶閲嶆柊涓嬪彂鍗冲彲鐢熸晥锛�
+ // 宸ュ簭宸茶鍒犻櫎鏃朵繚鐣欏揩鐓у�硷紝閬垮厤鍘嗗彶璁㈠崟鐨勯鏂欒寖鍥翠涪澶便��
+ Map<Long, Boolean> operationPickMap = loadOperationPickMap(bomStructureList.stream()
+ .filter(Objects::nonNull)
+ .map(ProductionBomStructureVo::getTechnologyOperationId)
+ .collect(Collectors.toList()));
+ for (ProductionBomStructureVo structure : bomStructureList) {
+ if (structure == null || structure.getTechnologyOperationId() == null) {
+ continue;
+ }
+ Boolean latestPick = operationPickMap.get(structure.getTechnologyOperationId());
+ if (latestPick != null) {
+ structure.setIsPick(latestPick);
+ }
+ }
+
+ // 鏀堕泦璁㈠崟鎴愬搧瑙勬牸ID锛氱敓浜ц鍗曟垚鍝佽鏍� + 璁㈠崟BOM蹇収鐨勬牴鑺傜偣瑙勬牸锛岀敤浜庢帓闄も�滆嚜宸扁�濊繖涓�鐗╂枡銆�
+ // 娉ㄦ剰锛欱OM缁撴瀯閲岄鏂欑墿鏂欐湰韬篃鍙兘鏄� parent_id 涓虹┖鐨勭嫭绔嬭妭鐐癸紝杩欓噷涓嶈兘鍐嶆妸鎵�鏈夋牴鑺傜偣閮藉綋鎴愭垚鍝佹帓闄わ紝
+ // 鍚﹀垯鈥滈鏂欌�濆伐搴忎笅鐨勭墿鏂欎細琚暣浣撹繃婊ゆ帀銆�
Set<Long> finishedProductModelIds = new HashSet<>();
if (productionOrder != null && productionOrder.getProductModelId() != null) {
finishedProductModelIds.add(productionOrder.getProductModelId());
}
- bomStructureList.stream()
- .filter(s -> s != null && (s.getParentId() == null || s.getParentId() == 0))
- .map(ProductionBomStructureVo::getProductModelId)
- .filter(Objects::nonNull)
- .forEach(finishedProductModelIds::add);
+ if (orderBom.getProductModelId() != null) {
+ finishedProductModelIds.add(orderBom.getProductModelId());
+ }
// 鏀堕泦鎵�鏈夎寮曠敤涓虹埗绾х殑鑺傜偣ID锛欱OM浠庢渶鍚庝竴閬撳伐搴忓線閲岄厤缃墠涓�閬撳伐搴忥紝
- // 涓棿鑺傜偣鏄笂涓�閬撳伐搴忕殑浜у嚭锛堣嚜鍒讹級锛屽彧鏈夋瘡鏉″垎鏀渶閲屽眰鐨勫彾瀛愯妭鐐规墠鏄湡姝i渶瑕侀鐢ㄧ殑鐗╂枡銆�
+ // 涓棿鑺傜偣鏄笂涓�閬撳伐搴忕殑浜у嚭锛堣嚜鍒讹級锛屾棫鍙e緞鍙湁姣忔潯鍒嗘敮鏈�閲屽眰鐨勫彾瀛愯妭鐐规墠鏄湡姝i渶瑕侀鐢ㄧ殑鐗╂枡銆�
Set<Long> parentNodeIds = bomStructureList.stream()
.filter(s -> s != null && s.getParentId() != null && s.getParentId() != 0)
.map(ProductionBomStructureVo::getParentId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
- // 杩囨护鍑哄彾瀛愯妭鐐癸紙瀹為檯棰嗘枡椤癸級锛氶潪鏍硅妭鐐广�侀潪涓棿鑺傜偣锛屽苟鎺掗櫎涓庤鍗曟垚鍝佸悓瑙勬牸鐨勭墿鏂欙紙鑷埗鎴愬搧鏃犻渶棰嗘枡锛�
- List<ProductionBomStructureVo> childStructureList = bomStructureList.stream()
- .filter(s -> s != null && s.getParentId() != null && s.getParentId() != 0)
- .filter(s -> s.getId() == null || !parentNodeIds.contains(s.getId()))
+ // 棰嗘枡鑼冨洿浠ュ伐搴忕殑鈥滄槸鍚﹂鏂欌�濇爣璁颁负鍑嗭細鍙湁鏍囪浜嗛鏂欑殑宸ュ簭锛屽叾娑堣�楃殑鐗╂枡鎵嶈繘鍏ラ鏂欏彴璐︺��
+ // 娉ㄦ剰锛氶鏂欑墿鏂欏湪BOM缁撴瀯涓彲鑳芥槸鐙珛鑺傜偣锛坧arent_id 涓虹┖锛夛紝鎵�浠ヨ繖閲屼笉闄愬埗灞傜骇锛屽彧鐪嬪伐搴忔爣璁帮紱
+ // 鍙帓闄や笌璁㈠崟鎴愬搧鍚岃鏍肩殑鐗╂枡锛堟垚鍝佹湰韬棤闇�棰嗘枡锛夈��
+ List<ProductionBomStructureVo> markedPickStructureList = bomStructureList.stream()
+ .filter(s -> s != null && Boolean.TRUE.equals(s.getIsPick()))
.filter(s -> s.getProductModelId() == null || !finishedProductModelIds.contains(s.getProductModelId()))
.collect(Collectors.toList());
+ // 瀹為檯棰嗘枡椤癸細浼樺厛浣跨敤宸ュ簭棰嗘枡鏍囪锛�
+ // 鍏煎鍘嗗彶鏁版嵁锛氬綋璇ヨ鍗旴OM缁撴瀯閲屾病鏈変换浣曞伐搴忔爣璁伴鏂欐椂锛屽洖閫�涓哄師鏉ョ殑鈥滃彾瀛愯妭鐐归鏂欌�濊鍒欙紝
+ // 閬垮厤灏氭湭鍚敤鈥滄槸鍚﹂鏂欌�濇爣璁扮殑瀹㈡埛鎵撳紑棰嗘枡鍙拌处鏃舵暟鎹獊鐒朵负绌恒��
+ List<ProductionBomStructureVo> childStructureList = markedPickStructureList;
+ if (childStructureList.isEmpty()) {
+ childStructureList = bomStructureList.stream()
+ .filter(s -> s != null && s.getParentId() != null && s.getParentId() != 0)
+ .filter(s -> s.getId() == null || !parentNodeIds.contains(s.getId()))
+ .filter(s -> s.getProductModelId() == null || !finishedProductModelIds.contains(s.getProductModelId()))
+ .collect(Collectors.toList());
+ }
+
// 閬嶅巻澶勭悊鏁版嵁骞剁粍瑁呯粨鏋�
List<Long> productModelIds = childStructureList.stream()
.map(ProductionBomStructureVo::getProductModelId)
diff --git a/src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java b/src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java
index 1915946..61a0f03 100644
--- a/src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java
+++ b/src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java
@@ -65,4 +65,7 @@
@Schema(description = "鏄惁鐢熶骇")
private Boolean isProduction;
+
+ @Schema(description = "鏄惁棰嗘枡 鏍囪璇ュ伐搴忔槸鍚﹂渶瑕侀鏂�")
+ private Boolean isPick;
}
diff --git a/src/main/resources/mapper/production/ProductionBomStructureMapper.xml b/src/main/resources/mapper/production/ProductionBomStructureMapper.xml
index c116f6f..4923b88 100644
--- a/src/main/resources/mapper/production/ProductionBomStructureMapper.xml
+++ b/src/main/resources/mapper/production/ProductionBomStructureMapper.xml
@@ -9,6 +9,7 @@
<result column="production_order_id" property="productionOrderId" />
<result column="product_model_id" property="productModelId" />
<result column="technology_operation_id" property="technologyOperationId" />
+ <result column="is_pick" property="isPick" />
<result column="production_order_bom_id" property="productionOrderBomId" />
<result column="unit_quantity" property="unitQuantity" />
<result column="demanded_quantity" property="demandedQuantity" />
diff --git a/src/main/resources/mapper/technology/TechnologyOperationMapper.xml b/src/main/resources/mapper/technology/TechnologyOperationMapper.xml
index f6adc74..d50ccd4 100644
--- a/src/main/resources/mapper/technology/TechnologyOperationMapper.xml
+++ b/src/main/resources/mapper/technology/TechnologyOperationMapper.xml
@@ -12,6 +12,8 @@
<result column="remark" property="remark" />
<result column="salary_quota" property="salaryQuota" />
<result column="is_quality" property="isQuality" />
+ <result column="is_production" property="isProduction" />
+ <result column="is_pick" property="isPick" />
<result column="type" property="type" />
<result column="device_ledger_id" property="deviceLedgerId" />
<result column="create_user" property="createUser" />
--
Gitblit v1.9.3