From 0989ec1e6b465141f99ed67e40fa2a0b928dce94 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 29 四月 2026 16:54:51 +0800
Subject: [PATCH] feat(production): 新增生产核算和生产工单功能模块 - 添加生产核算控制器、服务接口及实现类 - 实现生产核算分页查询和工人生产工资信息查询功能 - 添加生产工单控制器、服务接口及实现类 - 实现生产工单的增删改查和状态统计功能 - 集成工单流转卡下载和二维码生成功能 - 添加工单相关的数据传输对象和值对象 - 实现工单与用户关联的分配功能 - 完善工单附件图片处理和展示功能
---
src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java | 61 ++++++++++++++++++++----------
1 files changed, 41 insertions(+), 20 deletions(-)
diff --git a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
index d225f7c..3130951 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
@@ -1,7 +1,6 @@
package com.ruoyi.technology.service.impl;
import cn.hutool.core.bean.BeanUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -10,20 +9,8 @@
import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.technology.bean.dto.TechnologyRoutingDto;
import com.ruoyi.technology.bean.vo.TechnologyRoutingVo;
-import com.ruoyi.technology.mapper.TechnologyBomStructureMapper;
-import com.ruoyi.technology.mapper.TechnologyOperationMapper;
-import com.ruoyi.technology.mapper.TechnologyOperationParamMapper;
-import com.ruoyi.technology.mapper.TechnologyParamMapper;
-import com.ruoyi.technology.mapper.TechnologyRoutingMapper;
-import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
-import com.ruoyi.technology.mapper.TechnologyRoutingOperationParamMapper;
-import com.ruoyi.technology.pojo.TechnologyBomStructure;
-import com.ruoyi.technology.pojo.TechnologyOperation;
-import com.ruoyi.technology.pojo.TechnologyOperationParam;
-import com.ruoyi.technology.pojo.TechnologyParam;
-import com.ruoyi.technology.pojo.TechnologyRouting;
-import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
-import com.ruoyi.technology.pojo.TechnologyRoutingOperationParam;
+import com.ruoyi.technology.mapper.*;
+import com.ruoyi.technology.pojo.*;
import com.ruoyi.technology.service.TechnologyRoutingService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -31,6 +18,7 @@
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -126,7 +114,7 @@
}
List<TechnologyBomStructure> bomStructures = technologyBomStructureMapper.selectList(
Wrappers.<TechnologyBomStructure>lambdaQuery()
- .eq(TechnologyBomStructure::getBomId, Long.valueOf(technologyRouting.getBomId()))
+ .eq(TechnologyBomStructure::getBomId, technologyRouting.getBomId())
.isNotNull(TechnologyBomStructure::getOperationId)
.orderByAsc(TechnologyBomStructure::getId)
);
@@ -134,17 +122,25 @@
throw new ServiceException("bom浜у搧缁撴瀯涓虹┖锛�");
}
- // 鍚屼竴涓� BOM 涓彲鑳介噸澶嶅紩鐢ㄧ浉鍚屽伐搴忥紝杩欓噷鎸夐娆″嚭鐜伴『搴忓幓閲嶃��
- Map<Long, TechnologyBomStructure> uniqueOperationMap = new LinkedHashMap<>();
+ // 鍚屼竴涓� BOM 涓彲鑳介噸澶嶅紩鐢ㄧ浉鍚屽伐搴忥紝鎸夌収涓婁竴灞傜殑鐖惰妭鐐圭殑浜у搧鏄惁鐩稿悓鍜屽伐搴忔槸鍚︾浉鍚�
+ Map<Long, TechnologyBomStructure> structureById = new HashMap<>();
for (TechnologyBomStructure bomStructure : bomStructures) {
- uniqueOperationMap.putIfAbsent(bomStructure.getOperationId(), bomStructure);
+ if (bomStructure != null && bomStructure.getId() != null) {
+ structureById.put(bomStructure.getId(), bomStructure);
+ }
+ }
+
+ Map<String, TechnologyBomStructure> uniqueOperationMap = new LinkedHashMap<>();
+ for (TechnologyBomStructure bomStructure : bomStructures) {
+ Long outputProductModelId = resolveOutputProductModelId(bomStructure, structureById, technologyRouting.getProductModelId());
+ uniqueOperationMap.putIfAbsent(buildBomOperationDedupKey(bomStructure, outputProductModelId), bomStructure);
}
int dragSort = 1;
for (TechnologyBomStructure bomStructure : uniqueOperationMap.values()) {
TechnologyRoutingOperation routingOperation = new TechnologyRoutingOperation();
routingOperation.setTechnologyRoutingId(technologyRouting.getId());
- routingOperation.setProductModelId(technologyRouting.getProductModelId());
+ routingOperation.setProductModelId(resolveOutputProductModelId(bomStructure, structureById, technologyRouting.getProductModelId()));
routingOperation.setTechnologyOperationId(bomStructure.getOperationId());
routingOperation.setDragSort(dragSort++);
routingOperation.setIsQuality(getOperationQuality(bomStructure.getOperationId()));
@@ -153,6 +149,31 @@
}
}
+ private String buildBomOperationDedupKey(TechnologyBomStructure bomStructure, Long outputProductModelId) {
+ Long operationId = bomStructure == null ? null : bomStructure.getOperationId();
+ Long parentId = bomStructure == null ? null : bomStructure.getParentId();
+ return operationId + "#"
+ + outputProductModelId + "#"
+ + parentId;
+ }
+
+ private Long resolveOutputProductModelId(TechnologyBomStructure bomStructure,
+ Map<Long, TechnologyBomStructure> structureById,
+ Long routingProductModelId) {
+ if (bomStructure == null) {
+ return routingProductModelId;
+ }
+ Long parentId = bomStructure.getParentId();
+ if (parentId == null) {
+ return routingProductModelId != null ? routingProductModelId : bomStructure.getProductModelId();
+ }
+ TechnologyBomStructure parent = structureById.get(parentId);
+ if (parent != null && parent.getProductModelId() != null) {
+ return parent.getProductModelId();
+ }
+ return routingProductModelId != null ? routingProductModelId : bomStructure.getProductModelId();
+ }
+
private void syncRoutingOperationParams(Long technologyRoutingOperationId, Long technologyOperationId) {
List<TechnologyOperationParam> operationParamList = technologyOperationParamMapper.selectList(
Wrappers.<TechnologyOperationParam>lambdaQuery()
--
Gitblit v1.9.3