From 7b3b35e9d98f40a5d376aea5fc8a843d6ea396d7 Mon Sep 17 00:00:00 2001 From: liweidong-hj Date: Thu, 21 May 2026 11:15:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E8=89=BA=E4=B8=80=E9=94=AE=E5=A4=8D?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desk/dashboard/pojo/vo/DsCraftVO.java | 2 + .../controller/DsCraftController.java | 10 ++ .../dashboard/service/IDsCraftService.java | 7 + .../service/impl/DsCraftServiceImpl.java | 133 ++++++++++++++++++ .../service/impl/DsTaskingServiceImpl.java | 2 +- .../service/impl/YieldOrderServiceImpl.java | 3 + 6 files changed, 156 insertions(+), 1 deletion(-) diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftVO.java index ee1bb00b3..a31c56142 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftVO.java @@ -42,4 +42,6 @@ public class DsCraftVO extends DsCraftEntity { @Serial private static final long serialVersionUID = 1L; + private String craftId; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsCraftController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsCraftController.java index 34d40da38..a789b5e0d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsCraftController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsCraftController.java @@ -173,4 +173,14 @@ public class DsCraftController extends BladeController { return R.status(dsCraftService.craftBatchRemoval(id)); } + /** + * 一键赋值全套工艺 + */ + @PostMapping("/craftBatchCopy") + @Operation(summary = "一键复制", description = "传入ids") + public R craftBatchCopy(@RequestBody DsCraftVO craftVO) { + + return R.status(dsCraftService.craftBatchCopy(craftVO)); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java index f40910bc8..016d42792 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java @@ -215,4 +215,11 @@ public interface IDsCraftService extends BaseService { * @return */ List getPartCraft(Long partId, String rank); + + /** + * 一键复制 + * @param craftVO + * @return + */ + boolean craftBatchCopy(DsCraftVO craftVO); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java index ca834c455..04c029a84 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java @@ -44,6 +44,7 @@ import org.springblade.desk.dashboard.pojo.vo.DsProcessSynthesisVO; import org.springblade.desk.dashboard.service.*; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.service.IYieldOrderService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -385,4 +386,136 @@ public class DsCraftServiceImpl extends BaseServiceImpl getPartCraft(Long partId, String rank) { return craftMapper.selectDsCraftByPartIdAndRank(partId,rank); } + + @Override + public boolean craftBatchCopy(DsCraftVO craftVO) { + String partCode = craftVO.getPartCode(); + Long craftId = Long.valueOf(craftVO.getCraftId()); + + // 1. 查询原工艺 + DsCraftEntity oldCraft = this.getById(craftId); + if (oldCraft == null) { + throw new ServiceException("工艺信息不存在"); + } + + // 2. 查询目标零件 + DsPartEntity part = partService.selectDsPartByPatCodeAndVersion(partCode, null); + if (part == null) { + throw new ServiceException("零件信息不存在"); + } + // 2.1查询版本号 + DsPartVersionEntity partVersion = partVersionService.selectByPartId(part.getId()); + if(partVersion == null){ + throw new ServiceException("零件版本号信息不存在"); + } + + // 3. 复制工艺(创建新工艺) + DsCraftEntity newCraft = new DsCraftEntity(); + BeanUtils.copyProperties(oldCraft, newCraft, "id", "createTime", "updateTime"); + newCraft.setId(null); + newCraft.setPartId(part.getId()); + newCraft.setPartCode(part.getPartCode()); + newCraft.setRoamNo(null); + newCraft.setPartVersions(partVersion.getPartVersion()); + this.save(newCraft); + + // 4. 查询原工艺下的所有工序 + List oldProcessEntities = processService.selectDsProcessByCraftId(craftId); + if (oldProcessEntities.isEmpty()) { + return true; + } + + // 5. 获取原工序ID列表,用于查询关联数据 + List oldProcessIdList = oldProcessEntities.stream() + .map(DsProcessEntity::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + // 6. 批量查询原工序的关联数据 + List allResults = batchQueryAssociations(oldProcessIdList); + + @SuppressWarnings("unchecked") + List oldProcessProjectEntities = (List) allResults.get(0); + @SuppressWarnings("unchecked") + List oldProcessMeasuringToolEntities = (List) allResults.get(1); + @SuppressWarnings("unchecked") + List oldProcessMoldToolEntities = (List) allResults.get(2); + + // 7. 创建旧工序ID -> 新工序ID 的映射关系 + Map processIdMapping = new HashMap<>(); + List newProcessEntities = new ArrayList<>(); + + for (DsProcessEntity oldProcess : oldProcessEntities) { + DsProcessEntity newProcess = new DsProcessEntity(); + BeanUtils.copyProperties(oldProcess, newProcess, "id", "createTime", "updateTime"); + newProcess.setId(null); + newProcess.setCraftId(newCraft.getId()); + newProcessEntities.add(newProcess); + } + + // 8. 批量保存新工序 + processService.saveBatch(newProcessEntities); + + // 9. 建立新旧工序ID映射关系(保存后新工序会生成ID) + for (int i = 0; i < oldProcessEntities.size(); i++) { + processIdMapping.put(oldProcessEntities.get(i).getId(), newProcessEntities.get(i).getId()); + } + + // 10. 复制工序项目(尺寸)数据 + if (CollectionUtils.isNotEmpty(oldProcessProjectEntities)) { + List newProcessProjectEntities = new ArrayList<>(); + for (DsProcessProjectEntity oldEntity : oldProcessProjectEntities) { + DsProcessProjectEntity newEntity = new DsProcessProjectEntity(); + BeanUtils.copyProperties(oldEntity, newEntity, "id", "createTime", "updateTime"); + newEntity.setId(null); + // 关键:将旧的processId映射为新的processId + Long newProcessId = processIdMapping.get(oldEntity.getProcessId()); + if (newProcessId != null) { + newEntity.setProcessId(newProcessId); + newProcessProjectEntities.add(newEntity); + } + } + if (CollectionUtils.isNotEmpty(newProcessProjectEntities)) { + processProjectService.saveBatch(newProcessProjectEntities); + } + } + + // 11. 复制工序量具数据 + if (CollectionUtils.isNotEmpty(oldProcessMeasuringToolEntities)) { + List newProcessMeasuringToolEntities = new ArrayList<>(); + for (DsProcessMeasuringToolEntity oldEntity : oldProcessMeasuringToolEntities) { + DsProcessMeasuringToolEntity newEntity = new DsProcessMeasuringToolEntity(); + BeanUtils.copyProperties(oldEntity, newEntity, "id", "createTime", "updateTime"); + newEntity.setId(null); + Long newProcessId = processIdMapping.get(oldEntity.getProcessId()); + if (newProcessId != null) { + newEntity.setProcessId(newProcessId); + newProcessMeasuringToolEntities.add(newEntity); + } + } + if (CollectionUtils.isNotEmpty(newProcessMeasuringToolEntities)) { + processMeasuringToolService.saveBatch(newProcessMeasuringToolEntities); + } + } + + // 12. 复制工序工装模具数据 + if (CollectionUtils.isNotEmpty(oldProcessMoldToolEntities)) { + List newProcessMoldToolEntities = new ArrayList<>(); + for (DsProcessMoldToolEntity oldEntity : oldProcessMoldToolEntities) { + DsProcessMoldToolEntity newEntity = new DsProcessMoldToolEntity(); + BeanUtils.copyProperties(oldEntity, newEntity, "id", "createTime", "updateTime"); + newEntity.setId(null); + Long newProcessId = processIdMapping.get(oldEntity.getProcessId()); + if (newProcessId != null) { + newEntity.setProcessId(newProcessId); + newProcessMoldToolEntities.add(newEntity); + } + } + if (CollectionUtils.isNotEmpty(newProcessMoldToolEntities)) { + processMoldToolService.saveBatch(newProcessMoldToolEntities); + } + } + + return true; + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java index d8e0394ca..561b2a411 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java @@ -1761,7 +1761,7 @@ public class DsTaskingServiceImpl extends BaseServiceImpl