From b3a3b4ca3cb4fa999388b2f1b9911b56085d040b Mon Sep 17 00:00:00 2001 From: yinq Date: Thu, 8 Jan 2026 16:46:31 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E5=B7=A5=E5=BA=8F=E3=80=81=E5=B7=A5?= =?UTF-8?q?=E8=89=BA=E8=B7=AF=E7=BA=BF=E6=9B=B4=E6=96=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ProdBaseProcessInfoServiceImpl.java | 112 ++++++++++++++---- .../impl/ProdBaseRouteServiceImpl.java | 104 +++++++++++----- 2 files changed, 163 insertions(+), 53 deletions(-) diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseProcessInfoServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseProcessInfoServiceImpl.java index ba62653d..6d63adb3 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseProcessInfoServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseProcessInfoServiceImpl.java @@ -178,35 +178,29 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi // if (ObjectUtil.isNotEmpty(userId)) update.setCreateBy(userId); // update.setCreateTime(DateUtils.getNowDate()); validEntityBeforeSave(update); - List prodBaseProcessProdlineBoList = bo.getProdBaseProcessProdlineBoList(); - if (ObjectUtil.isNotEmpty(prodBaseProcessProdlineBoList)) { - List prodBaseProcessProdlineList = MapstructUtils.convert(prodBaseProcessProdlineBoList, ProdBaseProcessProdLine.class); - update.setProdBaseProcessProdlineList(prodBaseProcessProdlineList); - } - baseMapper.deleteProdBaseProcessProdlineByProcessId(update.getProcessId()); - try { - insertProdBaseProcessProdline(update); - } catch (Exception e) { - throw new ServiceException("该工序已关联产线!"); + if (!bo.getProdBaseProcessProdlineBoList().isEmpty()){ + updateProdBaseProcessProdline(bo); } //更新工序关联资源 List processResourceList = bo.getProdBaseProcessResourceList(); - MPJLambdaWrapper lqwRecord = JoinWrappers.lambda(ProdBaseProcessResource.class); - lqwRecord.eq(ProdBaseProcessResource::getProcessId, bo.getProcessId()); - List dataFieldList = processResourceMapper.selectList(lqwRecord); if (!processResourceList.isEmpty()) { - for (ProdBaseProcessResource dataField : processResourceList) { - processResourceMapper.insertOrUpdate(dataField); - } - Set existingIds = processResourceList.stream() - .map(ProdBaseProcessResource::getProcessResourceId) - .collect(Collectors.toSet()); - List filteredIds = dataFieldList.stream() - .filter(field -> !existingIds.contains(field.getProcessResourceId())) - .toList(); - for (ProdBaseProcessResource dataField : filteredIds) { - processResourceMapper.deleteById(dataField.getProcessResourceId()); + MPJLambdaWrapper lqwRecord = JoinWrappers.lambda(ProdBaseProcessResource.class); + lqwRecord.eq(ProdBaseProcessResource::getProcessId, bo.getProcessId()); + List dataFieldList = processResourceMapper.selectList(lqwRecord); + if (!processResourceList.isEmpty()) { + for (ProdBaseProcessResource dataField : processResourceList) { + processResourceMapper.insertOrUpdate(dataField); + } + Set existingIds = processResourceList.stream() + .map(ProdBaseProcessResource::getProcessResourceId) + .collect(Collectors.toSet()); + List filteredIds = dataFieldList.stream() + .filter(field -> !existingIds.contains(field.getProcessResourceId())) + .toList(); + for (ProdBaseProcessResource dataField : filteredIds) { + processResourceMapper.deleteById(dataField.getProcessResourceId()); + } } } return baseMapper.updateById(update) > 0; @@ -329,5 +323,75 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi } } + /** + * 更新工序关联产线 + * + * @param bo 工序信息业务对象 + */ + private void updateProdBaseProcessProdline(ProdBaseProcessInfoBo bo) { + List prodlineBoList = bo.getProdBaseProcessProdlineBoList(); + Long processId = bo.getProcessId(); + + ProdBaseProcessProdLineBo queryBo = new ProdBaseProcessProdLineBo(); + queryBo.setProcessId(processId); + List dbProdlineList = prodBaseProcessProdlineService.queryList(queryBo); + + Set dbKeys = dbProdlineList.stream() + .map(db -> processId + "_" + db.getProdLineId()) + .collect(Collectors.toSet()); + + if (prodlineBoList != null && !prodlineBoList.isEmpty()) { + // 构建前端传入记录的键集合 + Set newKeys = new HashSet<>(); + List toInsertList = new ArrayList<>(); + + // 获取当前用户信息用于设置创建信息 + String tenantId = LoginHelper.getTenantId(); + Long deptId = LoginHelper.getDeptId(); + Long userId = LoginHelper.getUserId(); + Date now = DateUtils.getNowDate(); + + for (ProdBaseProcessProdLineBo prodlineBo : prodlineBoList) { + prodlineBo.setProcessId(processId); + String key = processId + "_" + prodlineBo.getProdLineId(); + newKeys.add(key); + + // 如果数据库中不存在该组合,则新增 + if (!dbKeys.contains(key)) { + ProdBaseProcessProdLine prodline = MapstructUtils.convert(prodlineBo, ProdBaseProcessProdLine.class); + prodline.setCreateBy(userId); + prodline.setCreateTime(now); + prodline.setCreateDept(deptId); + prodline.setTenantId(tenantId); + toInsertList.add(prodline); + } + } + + // 批量插入新增的记录 + if (!toInsertList.isEmpty()) { + try { + prodBaseProcessProdlineMapper.insertBatch(toInsertList); + } catch (Exception e) { + throw new ServiceException("该工序已关联产线!"); + } + } + + // 找出需要删除的记录(在数据库中但不在新列表中的) + List toDeleteList = dbProdlineList.stream() + .filter(db -> !newKeys.contains(processId + "_" + db.getProdLineId())) + .toList(); + + // 删除不再需要的记录 + for (ProdBaseProcessProdLineVo toDelete : toDeleteList) { + MPJLambdaWrapper deleteWrapper = JoinWrappers.lambda(ProdBaseProcessProdLine.class); + deleteWrapper.eq(ProdBaseProcessProdLine::getProcessId, processId) + .eq(ProdBaseProcessProdLine::getProdLineId, toDelete.getProdLineId()); + prodBaseProcessProdlineMapper.delete(deleteWrapper); + } + } else if (dbProdlineList != null && !dbProdlineList.isEmpty()) { + // 如果前端传空,全部删除 + baseMapper.deleteProdBaseProcessProdlineByProcessId(processId); + } + } } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseRouteServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseRouteServiceImpl.java index c33a269c..b74b2118 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseRouteServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseRouteServiceImpl.java @@ -146,40 +146,42 @@ public class ProdBaseRouteServiceImpl implements IProdBaseRouteService { public Boolean updateByBo(ProdBaseRouteBo bo) { ProdBaseRoute update = MapstructUtils.convert(bo, ProdBaseRoute.class); int updateResult = routeMapper.updateById(update); - Long routeId = bo.getRouteId(); - routeMapper.deleteProdBaseRouteProcessByRouteId(routeId); - insertProdBaseRouteProcess(bo); + validEntityBeforeSave(update); + if (!bo.getRouteProcessList().isEmpty()) { + updateProdBaseRouteProcess(bo); + } // 更新工艺路线关联物料 List materialList = bo.getProdBaseRouteMaterialList(); - MPJLambdaWrapper lqwMaterial = JoinWrappers.lambda(ProdBaseRouteMaterial.class); - lqwMaterial.eq(ProdBaseRouteMaterial::getRouteId, bo.getRouteId()); - List dbMaterialList = routeMaterialMapper.selectList(lqwMaterial); - if (materialList != null && !materialList.isEmpty()) { - for (ProdBaseRouteMaterial material : materialList) { - material.setRouteId(bo.getRouteId()); - if (material.getRouteMaterialId() == null) { - routeMaterialMapper.insert(material); - } else { - routeMaterialMapper.updateById(material); + if (!materialList.isEmpty()) { + MPJLambdaWrapper lqwMaterial = JoinWrappers.lambda(ProdBaseRouteMaterial.class); + lqwMaterial.eq(ProdBaseRouteMaterial::getRouteId, bo.getRouteId()); + List dbMaterialList = routeMaterialMapper.selectList(lqwMaterial); + if (materialList != null && !materialList.isEmpty()) { + for (ProdBaseRouteMaterial material : materialList) { + material.setRouteId(bo.getRouteId()); + if (material.getRouteMaterialId() == null) { + routeMaterialMapper.insert(material); + } else { + routeMaterialMapper.updateById(material); + } + } + Set existingIds = materialList.stream() + .filter(m -> m.getRouteMaterialId() != null) + .map(ProdBaseRouteMaterial::getRouteMaterialId) + .collect(Collectors.toSet()); + List filteredIds = dbMaterialList.stream() + .filter(field -> !existingIds.contains(field.getRouteMaterialId())) + .toList(); + for (ProdBaseRouteMaterial material : filteredIds) { + routeMaterialMapper.deleteById(material.getRouteMaterialId()); + } + } else if (dbMaterialList != null && !dbMaterialList.isEmpty()) { + // 如果前端传空,全部删除 + for (ProdBaseRouteMaterial material : dbMaterialList) { + routeMaterialMapper.deleteById(material.getRouteMaterialId()); } } - Set existingIds = materialList.stream() - .filter(m -> m.getRouteMaterialId() != null) - .map(ProdBaseRouteMaterial::getRouteMaterialId) - .collect(Collectors.toSet()); - List filteredIds = dbMaterialList.stream() - .filter(field -> !existingIds.contains(field.getRouteMaterialId())) - .toList(); - for (ProdBaseRouteMaterial material : filteredIds) { - routeMaterialMapper.deleteById(material.getRouteMaterialId()); - } - } else if (dbMaterialList != null && !dbMaterialList.isEmpty()) { - // 如果前端传空,全部删除 - for (ProdBaseRouteMaterial material : dbMaterialList) { - routeMaterialMapper.deleteById(material.getRouteMaterialId()); - } } - validEntityBeforeSave(update); return updateResult > 0; } @@ -237,6 +239,50 @@ public class ProdBaseRouteServiceImpl implements IProdBaseRouteService { } } + /** + * 更新工艺步骤 + * + * @param bo 包含工艺路线信息的业务对象 + */ + private void updateProdBaseRouteProcess(ProdBaseRouteBo bo) { + List processList = bo.getRouteProcessList(); + Long routeId = bo.getRouteId(); + ProdBaseRouteProcessBo queryBo = new ProdBaseRouteProcessBo(); + queryBo.setRouteId(routeId); + List dbProcessList = routeProcessService.queryList(queryBo); + if (processList != null && !processList.isEmpty()) { + for (ProdBaseRouteProcessBo process : processList) { + process.setRouteId(routeId); + if (process.getRouteProcessId() == null) { + routeProcessService.insertByBo(process); + } else { + routeProcessService.updateByBo(process); + } + } + // 收集前端传入的已有工艺步骤ID集合 + Set existingIds = processList.stream() + .filter(p -> p.getRouteProcessId() != null) + .map(ProdBaseRouteProcessBo::getRouteProcessId) + .collect(Collectors.toSet()); + // 找出需要删除的工艺步骤 + List toDeleteList = dbProcessList.stream() + .filter(dbProcess -> !existingIds.contains(dbProcess.getRouteProcessId())) + .toList(); + // 批量删除不再需要的工艺步骤 + if (!toDeleteList.isEmpty()) { + List deleteIds = toDeleteList.stream() + .map(ProdBaseRouteProcessVo::getRouteProcessId) + .toList(); + routeProcessService.deleteWithValidByIds(deleteIds, false); + } + } else if (dbProcessList != null && !dbProcessList.isEmpty()) { + List deleteIds = dbProcessList.stream() + .map(ProdBaseRouteProcessVo::getRouteProcessId) + .toList(); + routeProcessService.deleteWithValidByIds(deleteIds, false); + } + } + /** * 根据工艺路线ID查询工位信息 *