From 18421314389c98984f01afb68ada4dceec77ce0e Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 15 Jul 2026 16:03:17 +0800 Subject: [PATCH] =?UTF-8?q?/assembly/flat-list=E5=92=8C/assembly/component?= =?UTF-8?q?/direct-children=E6=94=AF=E6=8C=81=E5=8A=A0=E5=B7=A5=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=9A=84=E5=85=A5=E5=8F=82=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/AssemblyListComponentFlatReqVO.java | 6 ++ .../vo/AssemblyComponentChildPrintReqVO.java | 6 ++ .../ordercomponent/OrderComponentMapper.java | 3 +- .../assemblylist/AssemblyListServiceImpl.java | 82 +++++++++++++++++-- .../ordercomponent/OrderComponentMapper.xml | 39 ++++++--- 5 files changed, 119 insertions(+), 17 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/vo/AssemblyListComponentFlatReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/vo/AssemblyListComponentFlatReqVO.java index 4943c435c..be56605a8 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/vo/AssemblyListComponentFlatReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/vo/AssemblyListComponentFlatReqVO.java @@ -1,5 +1,7 @@ package com.cf.imes.module.executor.controller.admin.assemblylist.vo; +import com.cf.imes.framework.common.validation.InEnum; +import com.cf.imes.module.executor.enums.ordercomponent.OrderComponentProcessStatusEnum; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; import lombok.Data; @@ -13,4 +15,8 @@ public class AssemblyListComponentFlatReqVO { @NotEmpty @Schema(description = "订单 ID 列表", requiredMode = Schema.RequiredMode.REQUIRED) private List orderIds; + + @Schema(description = "加工状态:0不加工、1未加工、2已加工、3部分加工", example = "[1, 2]") + @InEnum(OrderComponentProcessStatusEnum.class) + private List processStatus; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/AssemblyComponentChildPrintReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/AssemblyComponentChildPrintReqVO.java index 788d3978d..600c11058 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/AssemblyComponentChildPrintReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/AssemblyComponentChildPrintReqVO.java @@ -1,5 +1,7 @@ package com.cf.imes.module.executor.controller.admin.ordercomponent.vo; +import com.cf.imes.framework.common.validation.InEnum; +import com.cf.imes.module.executor.enums.ordercomponent.OrderComponentProcessStatusEnum; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; @@ -24,4 +26,8 @@ public class AssemblyComponentChildPrintReqVO { @NotEmpty(message = "订单 ID 不能为空") @Size(max = 100) private List orderIds; + + @Schema(description = "加工状态:0不加工、1未加工、2已加工、3部分加工", example = "[1, 2]") + @InEnum(OrderComponentProcessStatusEnum.class) + private List processStatus; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/ordercomponent/OrderComponentMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/ordercomponent/OrderComponentMapper.java index 03666ffe1..8213f40f3 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/ordercomponent/OrderComponentMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/ordercomponent/OrderComponentMapper.java @@ -22,7 +22,8 @@ public interface OrderComponentMapper extends BaseMapperX { * @param orderIds * @return */ - List selectAllForFlatList(@Param("orderIds") List orderIds); + List selectAllForFlatList(@Param("orderIds") List orderIds, + @Param("processStatus") List processStatus); /** * 订单详情部件列表查询 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/assemblylist/AssemblyListServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/assemblylist/AssemblyListServiceImpl.java index 9643c3241..7e674865e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/assemblylist/AssemblyListServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/assemblylist/AssemblyListServiceImpl.java @@ -185,7 +185,7 @@ public class AssemblyListServiceImpl implements AssemblyListService { public List getComponentFlatList( AssemblyListComponentFlatReqVO reqVO) { List components = - orderComponentMapper.selectAllForFlatList(reqVO.getOrderIds()); + orderComponentMapper.selectAllForFlatList(reqVO.getOrderIds(), reqVO.getProcessStatus()); if (CollUtil.isEmpty(components)) { return Collections.emptyList(); } @@ -259,6 +259,36 @@ public class AssemblyListServiceImpl implements AssemblyListService { throw new ServiceException(ORDER_COMPONENT_NOT_EXIST); } + if (CollUtil.isNotEmpty(reqVO.getProcessStatus())) { + LambdaQueryWrapperX filteredParentQuery = + new LambdaQueryWrapperX() + .in(OrderComponentDO::getId, queryIds) + .eq(OrderComponentDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus()) + .selectX( + OrderComponentDO::getId, + OrderComponentDO::getPid, + OrderComponentDO::getOrderId, + OrderComponentDO::getName, + OrderComponentDO::getWidth, + OrderComponentDO::getHeight, + OrderComponentDO::getDepth, + OrderComponentDO::getProcessStatus, + OrderComponentDO::getExtraProcessStatus + ); + appendProcessStatusCondition(filteredParentQuery, reqVO.getProcessStatus()); + parentComponents = orderComponentMapper.selectList(filteredParentQuery); + if (CollUtil.isEmpty(parentComponents)) { + return Collections.emptyList(); + } + + Set matchedParentIds = parentComponents.stream() + .map(OrderComponentDO::getId) + .collect(Collectors.toSet()); + componentIds = componentIds.stream() + .filter(matchedParentIds::contains) + .toList(); + } + // 只有顶级节点才允许使用 extraProcessStatus;非顶级节点始终返回自身 processStatus。 for (OrderComponentDO parentComponent : parentComponents) { if (Objects.equals(parentComponent.getPid(), OrderComponentDO.PARENT_ID_ROOT) @@ -277,13 +307,13 @@ public class AssemblyListServiceImpl implements AssemblyListService { Map parentMap = createPrintParentMap(componentIds, componentDOMap); if (CollUtil.isNotEmpty(componentIds)) { - List childComponents = orderComponentMapper.selectList( + LambdaQueryWrapperX childQuery = new LambdaQueryWrapperX() .in(OrderComponentDO::getPid, componentIds) .in(OrderComponentDO::getOrderId, orderIds) .eq(OrderComponentDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus()) .orderByAsc(OrderComponentDO::getId) - .select( + .selectX( OrderComponentDO::getId, OrderComponentDO::getPid, OrderComponentDO::getName, @@ -291,9 +321,12 @@ public class AssemblyListServiceImpl implements AssemblyListService { OrderComponentDO::getHeight, OrderComponentDO::getDepth, OrderComponentDO::getRoomName, - OrderComponentDO::getBodyName - ) - ); + OrderComponentDO::getBodyName, + OrderComponentDO::getProcessStatus, + OrderComponentDO::getExtraProcessStatus + ); + appendProcessStatusCondition(childQuery, reqVO.getProcessStatus()); + List childComponents = orderComponentMapper.selectList(childQuery); for (OrderComponentDO child : childComponents) { AssemblyComponentChildPrintRespVO parent = @@ -349,6 +382,43 @@ public class AssemblyListServiceImpl implements AssemblyListService { return new ArrayList<>(parentMap.values()); } + /** + * 将加工状态转换为部件查询条件。 + * 0、3 仅匹配顶级节点的 extraProcessStatus;1、2 匹配节点的 processStatus。 + */ + private void appendProcessStatusCondition(LambdaQueryWrapperX query, + List processStatus) { + if (CollUtil.isEmpty(processStatus)) { + return; + } + + List topStatuses = processStatus.stream() + .filter(status -> Objects.equals(status, OrderComponentProcessStatusEnum.NOT_PROCESS.getStatus()) + || Objects.equals(status, OrderComponentProcessStatusEnum.PART_PROCESSED.getStatus())) + .toList(); + List commonStatuses = processStatus.stream() + .filter(status -> Objects.equals(status, OrderComponentProcessStatusEnum.UNPROCESSED.getStatus()) + || Objects.equals(status, OrderComponentProcessStatusEnum.PROCESSED.getStatus())) + .toList(); + + query.and(wrapper -> { + if (CollUtil.isNotEmpty(topStatuses)) { + wrapper.eq(OrderComponentDO::getPid, OrderComponentDO.PARENT_ID_ROOT) + .in(OrderComponentDO::getExtraProcessStatus, topStatuses); + } + if (CollUtil.isNotEmpty(topStatuses) && CollUtil.isNotEmpty(commonStatuses)) { + wrapper.or(); + } + if (CollUtil.isNotEmpty(commonStatuses)) { + wrapper.in(OrderComponentDO::getProcessStatus, commonStatuses) + .and(statusWrapper -> statusWrapper + .ne(OrderComponentDO::getPid, OrderComponentDO.PARENT_ID_ROOT) + .or() + .isNull(OrderComponentDO::getExtraProcessStatus)); + } + }); + } + /** * 按请求 ID 顺序创建父节点。 * diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/ordercomponent/OrderComponentMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/ordercomponent/OrderComponentMapper.xml index 740d1df19..5502e7067 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/ordercomponent/OrderComponentMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/ordercomponent/OrderComponentMapper.xml @@ -3,16 +3,35 @@