From 3aeb90eaaf54e1a1af32de5efb9c944910ac9005 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 26 三月 2026 10:45:01 +0800
Subject: [PATCH] bom改变规格后,修改关联数据规格
---
src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java | 97 ++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 93 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
index 2554b5e..b7b67bb 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
@@ -15,10 +15,8 @@
import com.ruoyi.production.dto.BomImportDto;
import com.ruoyi.production.dto.ProductBomDto;
import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.mapper.ProductBomMapper;
-import com.ruoyi.production.pojo.ProductBom;
-import com.ruoyi.production.pojo.ProductProcess;
-import com.ruoyi.production.pojo.ProductStructure;
+import com.ruoyi.production.mapper.*;
+import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductBomService;
import com.ruoyi.production.service.ProductProcessService;
import com.ruoyi.production.service.ProductStructureService;
@@ -59,6 +57,18 @@
@Autowired
private ProductProcessService productProcessService;
+ @Autowired
+ private ProductStructureMapper productStructureMapper;
+
+ @Autowired
+ private ProductOrderMapper productOrderMapper;
+
+ @Autowired
+ private ProductProcessRouteMapper productProcessRouteMapper;
+
+ @Autowired
+ private ProcessRouteMapper processRouteMapper;
+
@Override
public IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto) {
return productBomMapper.listPage(page, productBomDto);
@@ -99,6 +109,85 @@
@Override
@Transactional(rollbackFor = Exception.class)
+ public AjaxResult update(ProductBom productBom) {
+ // 鏌ヨ鍑轰骇鍝佹ā鍨嬩俊鎭�
+ if (productBom.getProductModelId() == null) {
+ throw new ServiceException("璇烽�夋嫨浜у搧妯″瀷");
+ }
+
+ ProductBom oldBom = productBomMapper.selectById(productBom.getId());
+ // 濡傛灉瑙勬牸鏀瑰彉锛屽叧鑱旂殑鐢熶骇璁㈠崟濡傛灉璁㈠崟瀹屾垚鏁伴噺>0锛屽垯涓嶈鏀筨om锛涘惁鍒欏垹闄や箣鍓嶅叧鑱旂殑浜у搧缁撴瀯, 淇敼鍏宠仈璁㈠崟鐨勪骇鍝佷俊鎭�
+ if (!oldBom.getProductModelId().equals(productBom.getProductModelId())) {
+ ProductModel productModel = productModelService.getById(productBom.getProductModelId());
+ if (productModel == null) {
+ throw new ServiceException("閫夋嫨鐨勪骇鍝佹ā鍨嬩笉瀛樺湪");
+ }
+
+ // 鍏宠仈鐨勭敓浜ц鍗曞鏋滆鍗曞畬鎴愭暟閲�>0锛屽垯涓嶈鏀筨om
+ // 鍏堟煡璇笌璇OM鍏宠仈鐨勫伐鑹鸿矾绾�
+ List<ProductProcessRoute> productProcessRoutes = productProcessRouteMapper.selectList(new LambdaQueryWrapper<ProductProcessRoute>()
+ .eq(ProductProcessRoute::getBomId, oldBom.getId()));
+
+ // 妫�鏌ユ槸鍚︽湁鍏宠仈鐨勫伐鑹鸿矾绾�
+ if (!productProcessRoutes.isEmpty()) {
+ // 鎻愬彇宸ヨ壓璺嚎鍏宠仈鐨勭敓浜ц鍗旾D
+ List<Long> orderIds = productProcessRoutes.stream()
+ .map(ProductProcessRoute::getProductOrderId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+
+ // 鏌ヨ鍏宠仈鐨勭敓浜ц鍗�
+ if (!orderIds.isEmpty()) {
+ List<ProductOrder> productOrders = productOrderMapper.selectList(new LambdaQueryWrapper<ProductOrder>()
+ .in(ProductOrder::getId, orderIds));
+
+ // 妫�鏌ヨ鍗曞畬鎴愭暟閲�
+ for (ProductOrder order : productOrders) {
+ if (order.getCompleteQuantity() != null && order.getCompleteQuantity().compareTo(BigDecimal.ZERO) > 0) {
+ throw new ServiceException("璇OM宸插叧鑱旂敓浜ц鍗曚笖鏈夊畬鎴愭暟閲忥紝鏃犳硶淇敼");
+ } else {
+ // 淇敼鍏宠仈璁㈠崟鐨勪骇鍝佷俊鎭�
+ order.setProductModelId(productBom.getProductModelId());
+ productOrderMapper.updateById(order);
+ }
+ }
+ }
+
+ // 淇敼鍏宠仈浜у搧宸ヨ壓璺嚎鐨勪骇鍝佷俊鎭�
+ for (ProductProcessRoute route : productProcessRoutes) {
+ route.setProductModelId(productBom.getProductModelId());
+ productProcessRouteMapper.updateById(route);
+ }
+
+ // 鏌ヨ鍏宠仈鐨勫伐鑹鸿矾绾�
+ List<ProcessRoute> processRoutes = processRouteMapper.selectList(new LambdaQueryWrapper<ProcessRoute>()
+ .eq(ProcessRoute::getBomId, oldBom.getId()));
+ if (!processRoutes.isEmpty()) {
+ // 淇敼鍏宠仈宸ヨ壓璺嚎鐨勪骇鍝佷俊鎭�
+ for (ProcessRoute route : processRoutes) {
+ route.setProductModelId(productBom.getProductModelId());
+ processRouteMapper.updateById(route);
+ }
+ }
+ }
+
+ // 鍒犻櫎涔嬪墠鍏宠仈鐨勪骇鍝佺粨鏋�
+ productStructureMapper.delete(new LambdaQueryWrapper<ProductStructure>().eq(ProductStructure::getBomId, productBom.getId()));
+
+ // 鍏宠仈鏂扮殑浜у搧缁撴瀯
+ ProductStructure productStructure = new ProductStructure();
+ productStructure.setProductModelId(productBom.getProductModelId());
+ productStructure.setUnit(productModel.getUnit());
+ productStructure.setUnitQuantity(BigDecimal.valueOf(1));
+ productStructure.setBomId(productBom.getId());
+ productStructureService.save(productStructure);
+ }
+ productBomMapper.updateById(productBom);
+ return AjaxResult.success();
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
public AjaxResult uploadBom(MultipartFile file) {
ExcelUtil<BomImportDto> util = new ExcelUtil<>(BomImportDto.class);
List<BomImportDto> list;
--
Gitblit v1.9.3