From 7ea8883ca6b47ec014a32ed57c3bea64544e893e Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 19 三月 2026 17:09:34 +0800
Subject: [PATCH] feat: 生产订单绑定工艺路线、BOM、工艺路线、工序参数新增修改
---
src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java | 162 ++++++++++++++++++++++++++++++++---------------------
1 files changed, 97 insertions(+), 65 deletions(-)
diff --git a/src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java b/src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java
index 5d77a0f..e056059 100644
--- a/src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java
+++ b/src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java
@@ -3,9 +3,10 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.appendix.pojo.ProcessRouteItemInstance;
import com.ruoyi.appendix.pojo.ProcessRouteItemParamInstance;
-import com.ruoyi.appendix.pojo.ProductProcessParamInstance;
import com.ruoyi.appendix.pojo.ProductStructureInstance;
import com.ruoyi.appendix.service.*;
+import com.ruoyi.basic.pojo.BaseParam;
+import com.ruoyi.basic.service.BaseParamService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.production.pojo.*;
@@ -16,7 +17,9 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -39,10 +42,10 @@
private ProcessRouteItemParamInstanceService processRouteItemParamInstanceService;
@Resource
- private ProductProcessParamInstanceService productProcessParamInstanceService;
+ private ProductStructureInstanceService productStructureInstanceService;
@Resource
- private ProductStructureInstanceService productStructureInstanceService;
+ private BaseParamService baseParamService;
@Resource
private ProcessRouteService processRouteService;
@@ -54,16 +57,13 @@
private ProcessRouteItemParamService processRouteItemParamService;
@Resource
- private ProductProcessParamService productProcessParamService;
-
- @Resource
private ProductStructureService productStructureService;
@Resource
private ProductOrderService productOrderService;
@Override
- public Long populateBlocks(ProductionPlanDto productionPlanDto) {
+ public Long populateBlocks(Long orderId, ProductionPlanDto productionPlanDto) {
if (productionPlanDto == null) {
throw new ServiceException("涓嬪彂鏁版嵁涓嶈兘涓虹┖");
}
@@ -75,12 +75,12 @@
log.info("涓嬪彂浜у搧銆恵}銆戞湭鏌ヨ鍑哄伐鑹鸿矾绾�", productionPlanDto.getProductName());
return null;
}
- migration(processRoute);
+ migration(orderId, processRoute);
return processRoute.getId();
}
@Override
- public Long populatePlates(ProductionPlanDto productionPlanDto) {
+ public Long populatePlates(Long orderId, ProductionPlanDto productionPlanDto) {
if (productionPlanDto == null) {
throw new ServiceException("涓嬪彂鏁版嵁涓嶈兘涓虹┖");
}
@@ -90,127 +90,159 @@
log.info("涓嬪彂浜у搧銆恵}銆戞湭鏌ヨ鍑哄伐鑹鸿矾绾�", productionPlanDto.getProductName());
return null;
}
- migration(processRoute);
+ migration(orderId, processRoute);
return processRoute.getId();
}
@Override
- public void populateData(Long productOrderId, Long processRouteId) {
- ProcessRoute processRoute = processRouteService.getById(processRouteId);
- if (processRoute == null) {
- log.info("鐢熶骇璁㈠崟銆恵}銆戞湭鏌ヨ鍑哄伐鑹鸿矾绾裤�恵}銆�", productOrderId, processRouteId);
- return;
+ public void populateData(ProductOrder productOrder) {
+ if (productOrder == null) {
+ throw new ServiceException("缁戝畾澶辫触.鏁版嵁涓嶈兘涓虹┖");
}
- migration(processRoute);
+ if (productOrder.getId() == null || productOrder.getRouteId() == null) {
+ throw new ServiceException("缁戝畾澶辫触,鐢熶骇璁㈠崟鎴栧伐鑹鸿矾绾夸笉鑳戒负绌�");
+ }
+ ProcessRoute processRoute = processRouteService.getById(productOrder.getRouteId());
+ if (processRoute == null) {
+ throw new ServiceException("璇ュ伐鑹鸿矾绾夸笉瀛樺湪,缁戝畾澶辫触");
+ }
+ migration(productOrder.getId(), processRoute);
// 鍥炲啓宸ヨ壓璺嚎id鍒扮敓浜ц鍗�
- ProductOrder productOrder = new ProductOrder();
- productOrder.setId(productOrderId);
- productOrder.setRouteId(processRouteId);
productOrderService.updateById(productOrder);
}
@Override
- public void deleteData(Long processRouteId) {
- // 鏌ュ嚭宸ヨ壓璺嚎瀛愰泦锛岀敤浜庡叧鑱斿垹闄ゅ弬鏁伴檮琛�
- List<ProcessRouteItem> itemList = processRouteItemService.list(new LambdaQueryWrapper<ProcessRouteItem>().eq(ProcessRouteItem::getRouteId, processRouteId));
-
- if (itemList != null && !itemList.isEmpty()) {
- List<Long> itemIds = itemList.stream().map(ProcessRouteItem::getId).collect(Collectors.toList());
- List<Long> processIds = itemList.stream().map(ProcessRouteItem::getProcessId).collect(Collectors.toList());
-
- // 鍒犻櫎宸ヨ壓璺嚎宸ュ簭鍙傛暟闄勮〃
- processRouteItemParamInstanceService.remove(new LambdaQueryWrapper<ProcessRouteItemParamInstance>().in(ProcessRouteItemParamInstance::getRouteItemId, itemIds));
-
- // 鍒犻櫎宸ュ簭缁戝畾鍙傛暟闄勮〃
- productProcessParamInstanceService.remove(new LambdaQueryWrapper<ProductProcessParamInstance>().in(ProductProcessParamInstance::getProcessId, processIds));
- }
+ public void deleteData(Long orderId, Long processRouteId) {
+ // 鍒犻櫎宸ヨ壓璺嚎宸ュ簭鍙傛暟闄勮〃
+ processRouteItemParamInstanceService.remove(new LambdaQueryWrapper<ProcessRouteItemParamInstance>()
+ .eq(ProcessRouteItemParamInstance::getOrderId, orderId));
// 鍒犻櫎宸ヨ壓璺嚎瀛愰泦闄勮〃
- processRouteItemInstanceService.remove(
- new LambdaQueryWrapper<ProcessRouteItemInstance>().eq(ProcessRouteItemInstance::getRouteId, processRouteId));
+ processRouteItemInstanceService.remove(new LambdaQueryWrapper<ProcessRouteItemInstance>()
+ .eq(ProcessRouteItemInstance::getOrderId, orderId)
+ .eq(ProcessRouteItemInstance::getRouteId, processRouteId));
// 鍒犻櫎BOM瀛愰泦闄勮〃
ProcessRoute processRoute = processRouteService.getById(processRouteId);
if (processRoute != null && processRoute.getBomId() != null) {
- productStructureInstanceService.remove(new LambdaQueryWrapper<ProductStructureInstance>().eq(ProductStructureInstance::getBomId, processRoute.getBomId()));
+ productStructureInstanceService.remove(new LambdaQueryWrapper<ProductStructureInstance>()
+ .eq(ProductStructureInstance::getOrderId, orderId)
+ .eq(ProductStructureInstance::getBomId, processRoute.getBomId()));
}
}
/**
- * 鏍规嵁宸ヨ壓璺嚎杩佺Щ鍥涘紶闄勮〃鏁版嵁
+ * 鏍规嵁宸ヨ壓璺嚎杩佺Щ闄勮〃鏁版嵁
*/
- private void migration(ProcessRoute processRoute) {
- // 杩佺Щ宸ヨ壓璺嚎瀛愰泦琛ㄦ暟鎹�
- List<ProcessRouteItem> processRouteItemList = processRouteItemService.list(new LambdaQueryWrapper<ProcessRouteItem>().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
- migrationProcessRouteItem(processRouteItemList);
+ private void migration(Long orderId, ProcessRoute processRoute) {
+ // 杩佺Щ宸ヨ壓璺嚎瀛愰泦琛ㄦ暟鎹紝杩斿洖鏃d->鏂癷nstance鏄犲皠
+ List<ProcessRouteItem> processRouteItemList = processRouteItemService.list(
+ new LambdaQueryWrapper<ProcessRouteItem>().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+ Map<Long, ProcessRouteItemInstance> routeItemOldIdMap = migrationProcessRouteItem(orderId, processRouteItemList);
- // 杩佺Щ宸ヨ壓璺嚎鍐呯粦瀹氱殑宸ュ簭鍙婂伐搴忓弬鏁�
+ // 杩佺Щ宸ヨ壓璺嚎鍐呯粦瀹氱殑宸ュ簭鍙傛暟
if (processRouteItemList != null && !processRouteItemList.isEmpty()) {
for (ProcessRouteItem item : processRouteItemList) {
- List<ProcessRouteItemParam> paramList = processRouteItemParamService.list(new LambdaQueryWrapper<ProcessRouteItemParam>().eq(ProcessRouteItemParam::getRouteItemId, item.getId()));
- migrationProcessRouteItemParam(paramList);
+ ProcessRouteItemInstance newInstance = routeItemOldIdMap.get(item.getId());
+ Long newRouteItemInstanceId = newInstance != null ? newInstance.getId() : item.getId();
- List<ProductProcessParam> processParamList = productProcessParamService.list(new LambdaQueryWrapper<ProductProcessParam>().eq(ProductProcessParam::getProcessId, item.getProcessId()));
- migrationProductProcessParam(processParamList);
+ List<ProcessRouteItemParam> paramList = processRouteItemParamService.list(
+ new LambdaQueryWrapper<ProcessRouteItemParam>().eq(ProcessRouteItemParam::getRouteItemId, item.getId()));
+ migrationProcessRouteItemParam(orderId, paramList, newRouteItemInstanceId);
}
}
// 杩佺ЩBOM瀛愰泦琛ㄦ暟鎹�
if (processRoute.getBomId() != null) {
- List<ProductStructure> structureList = productStructureService.list(new LambdaQueryWrapper<ProductStructure>().eq(ProductStructure::getBomId, processRoute.getBomId()));
- migrationProductStructure(structureList);
+ List<ProductStructure> structureList = productStructureService.list(
+ new LambdaQueryWrapper<ProductStructure>().eq(ProductStructure::getBomId, processRoute.getBomId()));
+ migrationProductStructure(orderId, structureList);
}
}
- private void migrationProcessRouteItem(List<ProcessRouteItem> list) {
+ private Map<Long, ProcessRouteItemInstance> migrationProcessRouteItem(Long orderId, List<ProcessRouteItem> list) {
+ Map<Long, ProcessRouteItemInstance> oldIdMap = new HashMap<>();
if (list == null || list.isEmpty()) {
- return;
+ return oldIdMap;
}
List<ProcessRouteItemInstance> instances = list.stream().map(item -> {
ProcessRouteItemInstance instance = new ProcessRouteItemInstance();
BeanUtils.copyProperties(item, instance, "id");
instance.setIsQuality(item.getIsQuality() != null && item.getIsQuality() ? 1 : 0);
+ instance.setOrderId(orderId);
+ if (item.getId() != null) {
+ oldIdMap.put(item.getId(), instance);
+ }
return instance;
}).collect(Collectors.toList());
processRouteItemInstanceService.saveBatch(instances);
+ return oldIdMap;
}
- private void migrationProcessRouteItemParam(List<ProcessRouteItemParam> list) {
+ private void migrationProcessRouteItemParam(Long orderId, List<ProcessRouteItemParam> list, Long newRouteItemInstanceId) {
if (list == null || list.isEmpty()) {
return;
+ }
+ // 鎵归噺鏌ヨ base_param
+ List<Long> paramIds = list.stream().map(ProcessRouteItemParam::getParamId)
+ .filter(id -> id != null).distinct().collect(Collectors.toList());
+ Map<Long, BaseParam> baseParamMap = new HashMap<>();
+ if (!paramIds.isEmpty()) {
+ baseParamService.listByIds(paramIds).forEach(bp -> baseParamMap.put(bp.getId(), bp));
}
List<ProcessRouteItemParamInstance> instances = list.stream().map(item -> {
ProcessRouteItemParamInstance instance = new ProcessRouteItemParamInstance();
BeanUtils.copyProperties(item, instance, "id");
+ instance.setOrderId(orderId);
+ instance.setRouteItemId(newRouteItemInstanceId);
+ // 浠� base_param 濉厖鍩虹瀛楁
+ BaseParam bp = baseParamMap.get(item.getParamId());
+ if (bp != null) {
+ instance.setParamKey(bp.getParamKey());
+ instance.setParamName(bp.getParamName());
+ instance.setParamType(bp.getParamType());
+ instance.setParamFormat(bp.getParamFormat());
+ instance.setValueMode(bp.getValueMode());
+ instance.setUnit(bp.getUnit());
+ instance.setRemark(bp.getRemark());
+ }
return instance;
}).collect(Collectors.toList());
processRouteItemParamInstanceService.saveBatch(instances);
}
- private void migrationProductProcessParam(List<ProductProcessParam> list) {
+ private void migrationProductStructure(Long orderId, List<ProductStructure> list) {
if (list == null || list.isEmpty()) {
return;
}
- List<ProductProcessParamInstance> instances = list.stream().map(item -> {
- ProductProcessParamInstance instance = new ProductProcessParamInstance();
- BeanUtils.copyProperties(item, instance, "id");
- instance.setIsRequired(item.getIsRequired() != null && item.getIsRequired() == 1);
- return instance;
- }).collect(Collectors.toList());
- productProcessParamInstanceService.saveBatch(instances);
- }
-
- private void migrationProductStructure(List<ProductStructure> list) {
- if (list == null || list.isEmpty()) {
- return;
- }
+ Map<Long, ProductStructureInstance> oldIdMap = new HashMap<>();
List<ProductStructureInstance> instances = list.stream().map(item -> {
ProductStructureInstance instance = new ProductStructureInstance();
BeanUtils.copyProperties(item, instance, "id");
instance.setBomId(item.getBomId() != null ? item.getBomId().longValue() : null);
+ instance.setOrderId(orderId);
+ if (item.getId() != null) {
+ oldIdMap.put(item.getId(), instance);
+ }
return instance;
}).collect(Collectors.toList());
productStructureInstanceService.saveBatch(instances);
+
+ // 鏂板鍚庢湁id锛屾棫id->鏂癷d锛屼慨姝arentId
+ Map<Long, Long> oldToNewId = new HashMap<>();
+ list.forEach(item -> {
+ if (item.getId() != null && oldIdMap.containsKey(item.getId())) {
+ oldToNewId.put(item.getId(), oldIdMap.get(item.getId()).getId());
+ }
+ });
+
+ List<ProductStructureInstance> toUpdate = instances.stream()
+ .filter(i -> i.getParentId() != null && oldToNewId.containsKey(i.getParentId()))
+ .peek(i -> i.setParentId(oldToNewId.get(i.getParentId())))
+ .collect(Collectors.toList());
+ if (!toUpdate.isEmpty()) {
+ productStructureInstanceService.updateBatchById(toUpdate);
+ }
}
}
--
Gitblit v1.9.3