From fcfe06e0ecc1bc2e3e6a72b905b5506894c1fe93 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Thu, 9 Jul 2026 16:16:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85=E3=80=81?= =?UTF-8?q?=E8=A3=85=E9=85=8D=E8=AE=A2=E5=8D=95=E9=85=8D=E4=BB=B6=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E6=94=B9=E4=B8=BA=E4=B8=80=E6=AC=A1=E6=80=A7=E8=BF=94?= =?UTF-8?q?=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../orderItem/OrdersViewPartsPageDO.java | 15 + .../dal/mysql/orderItem/OrderItemMapper.java | 7 + .../OrderComponentServiceImpl.java | 191 ++++--------- .../service/plate/PlateServiceImpl.java | 259 ++++++------------ .../mapper/orderItem/OrderItemMapper.xml | 110 ++++++++ 5 files changed, 280 insertions(+), 302 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrdersViewPartsPageDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrdersViewPartsPageDO.java index c6f1faa80..4e2fee15b 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrdersViewPartsPageDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrdersViewPartsPageDO.java @@ -116,4 +116,19 @@ public class OrdersViewPartsPageDO { * 柜体名称 */ private String bodyName; + + /** + * 加工组 id + */ + private Long groupId; + + /** + * 加工组名称 + */ + private String processGroupName; + + /** + * 部件名称 + */ + private String componentName; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java index 29789348a..3825be444 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java @@ -274,6 +274,13 @@ public interface OrderItemMapper extends BaseMapperX { @Param("name") String name, @Param("deleted") Boolean deleted); + List selectOrdersViewPartsList(@Param("orderIds") List orderIds, + @Param("bodyIds") Set bodyIds, + @Param("groupIds") Set groupIds, + @Param("componentIds") Set componentIds, + @Param("name") String name, + @Param("deleted") Boolean deleted); + /** * 查询部件关联的板件ID列表 * diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentServiceImpl.java index 711850a1a..519bdfe0d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentServiceImpl.java @@ -56,12 +56,14 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayDeque; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Objects; @@ -417,158 +419,83 @@ public class OrderComponentServiceImpl implements OrderComponentService { } Set queryComponentIds = componentDOS.stream().map(OrderComponentDO::getId).collect(Collectors.toSet()); - // 整理出id和cadViewFileId的对应关系 - Map cadViewFileIdMap = componentDOS.stream() - .filter(item -> item.getCadViewFileId() != null) - .collect(Collectors.toMap( - OrderComponentDO::getId, - Function.identity(), - (a, b) -> a - )); + boolean deleted = Boolean.TRUE.equals(pageReqVO.getDeleted()); - Boolean deleted = pageReqVO.getDeleted(); + List rows = orderItemMapper.selectOrdersViewPartsList( + orderIds, + null, + null, + queryComponentIds, + null, + deleted + ); - // 查询配件编号+信息 - PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage pageRes = orderItemMapper.selectOrdersViewPartsIdsPage(page, orderIds, null, null, queryComponentIds, null, deleted); - - List partsPageRecords = pageRes.getRecords(); - if(CollUtil.isEmpty(partsPageRecords)) { + if (CollUtil.isEmpty(rows)) { return new PageResult<>(Collections.emptyList(), 0L); } - List partsIds = partsPageRecords.stream().map(OrdersViewPartsPageDO::getId).toList(); + Collection records = buildComponentViewPartsGroup(rows); + return new PageResult<>(new ArrayList<>(records), (long) records.size()); + } - if (CollUtil.isEmpty(partsIds)) { - return new PageResult<>(); - } - // 查询关联关系 - List orderItemRelation; - if (!deleted) { - orderItemRelation = orderItemMapper.selectList(new LambdaQueryWrapperX() - .in(OrderItemDO::getOrderId, pageReqVO.getOrderIds()) - .in(OrderItemDO::getPartsId, partsIds) - .and(wrapper -> - wrapper.ne(OrderItemDO::getGroupId, 0L) - .or() - .isNull(OrderItemDO::getGroupId) - ) - .select(OrderItemDO::getPartsId, OrderItemDO::getCadViewId, OrderItemDO::getGroupId, OrderItemDO::getCompId, OrderItemDO::getNum) - ); - } else { - List orderItemTempDOS = orderItemTempMapper.selectList(new LambdaQueryWrapperX() - .in(OrderItemTempDO::getOrderId, pageReqVO.getOrderIds()) - .in(OrderItemTempDO::getPartsId, partsIds) - .and(wrapper -> - wrapper.ne(OrderItemTempDO::getGroupId, 0L) - .or() - .isNull(OrderItemTempDO::getGroupId) - ) - .select(OrderItemTempDO::getPartsId, OrderItemTempDO::getCadViewId, OrderItemTempDO::getGroupId, OrderItemTempDO::getCompId, OrderItemTempDO::getNum) - ); - orderItemRelation = BeanUtil.copyToList(orderItemTempDOS, OrderItemDO.class); - } + /** + * 组装配件的加工组和部件 + * + * @param rows + * @return + */ + private Collection buildComponentViewPartsGroup(List rows) { + Map records = new LinkedHashMap<>(); + Map> processGroupNameMap = new HashMap<>(); + Map> componentNameMap = new HashMap<>(); + for (OrdersViewPartsPageDO row : rows) { + String key = buildComponentViewPartKey(row); - // 暂存 partsId:set - Map, Set> partsGroupMap = new HashMap<>(); + OrderViewPartPageRespVO vo = records.computeIfAbsent(key, k -> { + OrderViewPartPageRespVO newVo = BeanUtil.copyProperties(row, OrderViewPartPageRespVO.class); + newVo.setNum(BigDecimal.ZERO); + newVo.setProcessGroupName(""); + newVo.setComponentName(""); + return newVo; + }); - // 暂存 partsId:set - Map, Set> partsCompMap = new HashMap<>(); - - // 暂存 partsId:num - Map, Double> partsNumMap = new HashMap<>(); - - for (OrderItemDO item : orderItemRelation) { - - Long partsId = item.getPartsId(); - Integer cadViewId = item.getCadViewId(); - Pair pair = new Pair<>(partsId, cadViewId); - - // group_id - if (item.getGroupId() != null) { - partsGroupMap - .computeIfAbsent(pair, k -> new HashSet<>()) - .add(item.getGroupId()); + if (row.getNum() != null && ObjectUtil.isNotNull(row.getCompId())) { + vo.setNum(row.getNum()); } - // comp_id - if (item.getCompId() != null) { - partsCompMap - .computeIfAbsent(pair, k -> new HashSet<>()) - .add(item.getCompId()); + if (row.getCadViewFileId() != null && vo.getCadViewFileId() == null) { + vo.setCadViewFileId(row.getCadViewFileId()); } - // num 从部件组获取 - if (item.getNum() != null && ObjectUtil.isNotNull(item.getCompId())) { - partsNumMap.put( - pair, - item.getNum() - ); + if (row.getProcessGroupName() != null && !row.getProcessGroupName().isBlank()) { + processGroupNameMap.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(row.getProcessGroupName()); + } + + if (row.getComponentName() != null && !row.getComponentName().isBlank()) { + componentNameMap.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(row.getComponentName()); } } - // 查询加工组 - Set allGroupIds = partsGroupMap.values() - .stream() - .flatMap(Set::stream) - .collect(Collectors.toSet()); + for (Map.Entry entry : records.entrySet()) { + String key = entry.getKey(); + OrderViewPartPageRespVO vo = entry.getValue(); - Map groupNameMap = Collections.emptyMap(); - - if (!allGroupIds.isEmpty()) { - - groupNameMap = orderGroupMapper.selectByIds(allGroupIds) - .stream() - .collect(Collectors.toMap( - OrderGroupDO::getId, - OrderGroupDO::getName, - (a, b) -> a - )); + vo.setProcessGroupName(String.join(",", processGroupNameMap.getOrDefault(key, Collections.emptySet()))); + vo.setComponentName(String.join(",", componentNameMap.getOrDefault(key, Collections.emptySet()))); } - // 最终组装 - List records = new ArrayList<>(); - for (OrdersViewPartsPageDO part : partsPageRecords) { + return records.values(); + } - Pair pair = new Pair<>(part.getId(), part.getCadViewId()); - OrderViewPartPageRespVO partRespVO = BeanUtil.copyProperties(part, OrderViewPartPageRespVO.class); - - // 设置数量 - partRespVO.setNum( - BigDecimal.valueOf(partsNumMap.getOrDefault(pair, 0.0)) - ); - - // 拼接加工组名称 - Set groupIdsSet = partsGroupMap.getOrDefault( - pair, - Collections.emptySet() - ); - - String processGroupName = groupIdsSet.stream() - .map(groupNameMap::get) - .filter(Objects::nonNull) - .distinct() - .collect(Collectors.joining(",")); - - partRespVO.setProcessGroupName(processGroupName); - - // 用逗号拼接部件组名称 - Set compIds = partsCompMap.getOrDefault(pair, Collections.emptySet()); - List comps = compIds.stream() - .map(cadViewFileIdMap::get) - .filter(Objects::nonNull) - .toList(); - - if (CollUtil.isNotEmpty(comps)) { - partRespVO.setComponentName(String.join(",", comps.stream().map(OrderComponentDO::getName).collect(Collectors.toSet()))); - partRespVO.setCadViewFileId(comps.get(0).getCadViewFileId()); - } - - records.add(partRespVO); - } - - return new PageResult<>(records, pageRes.getTotal()); + /** + * 配件id+cadviewid key + * + * @param row + * @return + */ + private String buildComponentViewPartKey(OrdersViewPartsPageDO row) { + return row.getId() + "_" + row.getCadViewId(); } @Override diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java index 36b36fe1e..47dfd06ef 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java @@ -1021,193 +1021,112 @@ public class PlateServiceImpl implements PlateService { throw new ServiceException(ORDER_BODY_NOT_EXISTS); } - List orderIds = List.of(pageReqVO.getOrderId()); + boolean deleted = Boolean.TRUE.equals(pageReqVO.getDeleted()); + boolean fromGroup = CollUtil.isNotEmpty(groupIds); - // 整理出body_id和cad图纸id的关系 - Map bodyIdAndCadViewFileIdMap = orderBodyDOList.stream() - .filter(item -> item.getCadViewFileId() != null) - .collect(Collectors.toMap(OrderBodyDO::getId, OrderBodyDO::getCadViewFileId)); + List rows = orderItemMapper.selectOrdersViewPartsList( + List.of(pageReqVO.getOrderId()), + bodyIds, + groupIds, + null, + pageReqVO.getName(), + deleted + ); - Boolean deleted = pageReqVO.getDeleted(); - - // 查询配件编号+信息 - PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage pageRes = orderItemMapper.selectOrdersViewPartsIdsPage(page, orderIds, bodyIds, groupIds, null, pageReqVO.getName(), deleted); - - List partsPageRecords = pageRes.getRecords(); - if(CollUtil.isEmpty(partsPageRecords)) { + if (CollUtil.isEmpty(rows)) { return new PageResult<>(Collections.emptyList(), 0L); } - List partsIds = partsPageRecords.stream().map(OrdersViewPartsPageDO::getId).toList(); + Collection records = buildBodyViewPartsGroup(rows, fromGroup); + return new PageResult<>(new ArrayList<>(records), (long) records.size()); + } - if (CollUtil.isEmpty(partsIds)) { - return new PageResult<>(); - } - // 查询关联关系 - List orderItemRelation; - if (!deleted) { - orderItemRelation = orderItemMapper.selectList(new LambdaQueryWrapperX() - .eq(OrderItemDO::getOrderId, pageReqVO.getOrderId()) - .inIfPresent(OrderItemDO::getBodyId, bodyIds) - .inIfPresent(OrderItemDO::getGroupId, groupIds) - .in(OrderItemDO::getPartsId, partsIds) - .select(OrderItemDO::getPartsId, OrderItemDO::getBodyId, OrderItemDO::getCadViewId, OrderItemDO::getGroupId, OrderItemDO::getCompId, OrderItemDO::getNum) - ); - } else { - List orderItemTempDOS = orderItemTempMapper.selectList(new LambdaQueryWrapperX() - .eq(OrderItemTempDO::getOrderId, pageReqVO.getOrderId()) - .inIfPresent(OrderItemTempDO::getBodyId, bodyIds) - .inIfPresent(OrderItemTempDO::getGroupId, groupIds) - .in(OrderItemTempDO::getPartsId, partsIds) - .select(OrderItemTempDO::getPartsId, OrderItemTempDO::getBodyId, OrderItemTempDO::getCadViewId, OrderItemTempDO::getGroupId, OrderItemTempDO::getCompId, OrderItemTempDO::getNum) - ); - orderItemRelation = BeanUtil.copyToList(orderItemTempDOS, OrderItemDO.class); - } + /** + * 组装配件的加工组和部件 + * + * @param rows + * @param fromGroup + * @return + */ + private Collection buildBodyViewPartsGroup(List rows, + boolean fromGroup) { + Map records = new LinkedHashMap<>(); + Map> processGroupNameMap = new HashMap<>(); + Map> componentNameMap = new HashMap<>(); - // 暂存 partsId:set - Map, Set> partsGroupMap = new HashMap<>(); - - // 暂存 partsId:set - Map, Set> partsCompMap = new HashMap<>(); - - // 暂存 partsId:num - Map, Double> partsNumMap = new HashMap<>(); - - // 暂存 partsId:bodyId - Map, Long> partsBodyIdMap = new HashMap<>(); - - // 是否加工组入口 - boolean comFromGroup = CollUtil.isNotEmpty(groupIds); - - for (OrderItemDO item : orderItemRelation) { - - Long partsId = item.getPartsId(); - Integer cadViewId = item.getCadViewId(); - Pair pair = new Pair<>(partsId, cadViewId); - - // group_id - if (item.getGroupId() != null) { - partsGroupMap - .computeIfAbsent(pair, k -> new HashSet<>()) - .add(item.getGroupId()); + for (OrdersViewPartsPageDO row : rows) { + if (!isBodyViewPartNumRow(row, fromGroup)) { + continue; } - // comp_id - if (item.getCompId() != null) { - partsCompMap - .computeIfAbsent(pair, k -> new HashSet<>()) - .add(item.getCompId()); + String key = buildBodyViewPartKey(row); + records.computeIfAbsent(key, k -> { + OrderViewPartPageRespVO vo = BeanUtil.copyProperties(row, OrderViewPartPageRespVO.class); + vo.setNum(BigDecimal.ZERO); + vo.setProcessGroupName(""); + vo.setComponentName(""); + return vo; + }); + } + + if (records.isEmpty()) { + return Collections.emptyList(); + } + + for (OrdersViewPartsPageDO row : rows) { + String key = buildBodyViewPartKey(row); + OrderViewPartPageRespVO vo = records.get(key); + if (vo == null) { + continue; } - // num - if (item.getNum() != null && - ( - (comFromGroup && ObjectUtil.isNotNull(item.getGroupId()) && ObjectUtil.notEqual(item.getGroupId(), 0L)) //加工组入口 统计groupId不是空的 - || - (!comFromGroup && (ObjectUtil.equals(item.getGroupId(), 0L) || (ObjectUtil.isNull(item.getGroupId()) && ObjectUtil.isNull(item.getCompId())))) // 非加工组入口,统计groupId = 0(加工组汇总的数量) 或者 null+不是部件item的(没有加工组的数量) - ) - ) { - partsNumMap.merge( - pair, - item.getNum(), - Double::sum - ); + if (isBodyViewPartNumRow(row, fromGroup) && row.getNum() != null) { + vo.setNum(vo.getNum().add(row.getNum())); } - partsBodyIdMap.putIfAbsent(pair, item.getBodyId()); - } - - // 查询加工组 - Set allGroupIds = partsGroupMap.values() - .stream() - .flatMap(Set::stream) - .collect(Collectors.toSet()); - - Map groupNameMap = Collections.emptyMap(); - - if (!allGroupIds.isEmpty()) { - - groupNameMap = orderGroupMapper.selectByIds(allGroupIds) - .stream() - .collect(Collectors.toMap( - OrderGroupDO::getId, - OrderGroupDO::getName, - (a, b) -> a - )); - } - - // 查询部件 - Set allCompIds = partsCompMap.values() - .stream() - .flatMap(Set::stream) - .collect(Collectors.toSet()); - - Map compNameMap = Collections.emptyMap(); - - if (!allCompIds.isEmpty()) { - - compNameMap = orderComponentMapper.selectByIds(allCompIds) - .stream() - .collect(Collectors.toMap( - OrderComponentDO::getId, - OrderComponentDO::getName, - (a, b) -> a - )); - } - - // 最终组装 - List records = new ArrayList<>(); - for (OrdersViewPartsPageDO part : partsPageRecords) { - - Pair pair = new Pair<>(part.getId(), part.getCadViewId()); - OrderViewPartPageRespVO partRespVO = BeanUtil.copyProperties(part, OrderViewPartPageRespVO.class); - - // 设置数量 - partRespVO.setNum( - BigDecimal.valueOf(partsNumMap.getOrDefault(pair, 0.0)) - ); - - // 拼接加工组名称 - Set groupIdsSet = partsGroupMap.getOrDefault( - pair, - Collections.emptySet() - ); - - String processGroupName = groupIdsSet.stream() - .map(groupNameMap::get) - .filter(Objects::nonNull) - .distinct() - .collect(Collectors.joining(",")); - - partRespVO.setProcessGroupName(processGroupName); - - // 拼接部件名称 - Set compIdsSet = partsCompMap.getOrDefault( - pair, - Collections.emptySet() - ); - - String componentName = compIdsSet.stream() - .map(compNameMap::get) - .filter(Objects::nonNull) - .distinct() - .collect(Collectors.joining(",")); - - partRespVO.setComponentName(componentName); - - // 匹配图纸id - Long bodyId = partsBodyIdMap.get(pair); - partRespVO.setBodyId(bodyId); - Long cadViewFileId = bodyIdAndCadViewFileIdMap.get(bodyId); - if (ObjectUtil.isNotNull(cadViewFileId)) { - partRespVO.setCadViewFileId(cadViewFileId); + if (row.getProcessGroupName() != null && !row.getProcessGroupName().isBlank()) { + processGroupNameMap.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(row.getProcessGroupName()); } - records.add(partRespVO); + if (row.getComponentName() != null && !row.getComponentName().isBlank()) { + componentNameMap.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(row.getComponentName()); + } } - return new PageResult<>(records, pageRes.getTotal()); + for (Map.Entry entry : records.entrySet()) { + String key = entry.getKey(); + OrderViewPartPageRespVO vo = entry.getValue(); + + vo.setProcessGroupName(String.join(",", processGroupNameMap.getOrDefault(key, Collections.emptySet()))); + vo.setComponentName(String.join(",", componentNameMap.getOrDefault(key, Collections.emptySet()))); + } + + return records.values(); + } + + /** + * 配件累计规则 + * + * @param row + * @param fromGroup + * @return + */ + private boolean isBodyViewPartNumRow(OrdersViewPartsPageDO row, boolean fromGroup) { + if (fromGroup) { + return ObjectUtil.isNotNull(row.getGroupId()) && ObjectUtil.notEqual(row.getGroupId(), 0L); + } + return ObjectUtil.equals(row.getGroupId(), 0L) + || (ObjectUtil.isNull(row.getGroupId()) && ObjectUtil.isNull(row.getCompId())); + } + + /** + * 柜体id+配件id+cadviewid key + * + * @param row + * @return + */ + private String buildBodyViewPartKey(OrdersViewPartsPageDO row) { + return row.getBodyId() + "_" + row.getId() + "_" + row.getCadViewId(); } @Override diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml index 99cda02d8..5f773e081 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml @@ -741,6 +741,116 @@ ORDER BY op.type, op.id + +