From f0f27a35bcd0445e5c300d84504aa8f5c770f46c Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Fri, 10 Jul 2026 15:56:35 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E4=B8=8B=E7=BA=A7=E9=83=A8=E4=BB=B6=E6=8E=A5=E5=8F=A3=EF=BC=9B?= =?UTF-8?q?2=E3=80=81/assembly/list=E6=94=AF=E6=8C=81=E5=8D=95=E7=8B=AC?= =?UTF-8?q?=E6=9F=A5=E7=9C=8Bid/name=E7=B2=BE=E5=87=86=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assemblylist/AssemblyListController.java | 10 +- .../vo/AssemblyListComponentPageReqVO.java | 14 ++ .../vo/OrderComponentRespVO.java | 6 + .../vo/OrdersTopComponentListReqVO.java | 3 + .../ordercomponent/OrderComponentDO.java | 10 ++ .../ordercomponent/OrderComponentMapper.java | 31 ++++- .../assemblylist/AssemblyListService.java | 8 ++ .../assemblylist/AssemblyListServiceImpl.java | 130 +++++++----------- .../ordercomponent/OrderComponentMapper.xml | 90 +++++++++++- 9 files changed, 211 insertions(+), 91 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/AssemblyListController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/AssemblyListController.java index c1eb087a1..b7c14e5a3 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/AssemblyListController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/AssemblyListController.java @@ -59,10 +59,18 @@ public class AssemblyListController { @PostMapping("/list") @Operation(summary = "装配清单-获取部件列表") @PreAuthorize("@ss.hasPermission('production:assemblyList:query')") - public CommonResult> getComponentList(@RequestBody AssemblyListComponentPageReqVO reqVO) { + public CommonResult> getComponentList(@Valid @RequestBody AssemblyListComponentPageReqVO reqVO) { return CommonResult.success(assemblyListService.getComponentList(reqVO)); } + @GetMapping("/component/{componentId}/children") + @Operation(summary = "装配清单-获取部件直接下级列表") + @Parameter(name = "componentId", description = "部件 ID", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('production:assemblyList:query')") + public CommonResult> getDirectChildComponentList(@PathVariable Long componentId) { + return success(assemblyListService.getDirectChildComponentList(componentId)); + } + @PostMapping("/list/view/plate/page") @Operation(summary = "装配清单-获取订单部件下的板件视图分页列表数据") @PreAuthorize("@ss.hasPermission('production:assemblyList:query')") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/vo/AssemblyListComponentPageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/vo/AssemblyListComponentPageReqVO.java index 3ddd08ef2..d0495098e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/vo/AssemblyListComponentPageReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/assemblylist/vo/AssemblyListComponentPageReqVO.java @@ -1,6 +1,8 @@ package com.cf.imes.module.executor.controller.admin.assemblylist.vo; import com.cf.imes.framework.common.pojo.PageParam; +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.Size; import lombok.AllArgsConstructor; @@ -8,6 +10,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; +import org.hibernate.validator.constraints.Length; import java.util.List; import java.util.Set; @@ -32,4 +35,15 @@ public class AssemblyListComponentPageReqVO extends PageParam { @Schema(description = "部件编号", example = "[1,2]") @Size(max = 200, message = "{order.detail.component.list.query.componentIds.max}") private Set componentIds; + + @Schema(description = "部件 ID", example = "1024") + private Long componentId; + + @Schema(description = "部件名称", example = "部件") + @Length(max = 64, message = "{order.component.assemble.req.name.max}") + private String name; + + @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/OrderComponentRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrderComponentRespVO.java index ceb408252..089187950 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrderComponentRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrderComponentRespVO.java @@ -34,4 +34,10 @@ public class OrderComponentRespVO { @Schema(description = "部件深度") private Double depth; + + @Schema(description = "柜名") + private String bodyName; + + @Schema(description = "房名") + private String roomName; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrdersTopComponentListReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrdersTopComponentListReqVO.java index 1abd647db..1dbc4547f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrdersTopComponentListReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrdersTopComponentListReqVO.java @@ -35,6 +35,9 @@ public class OrdersTopComponentListReqVO { @Length(max = 64, message = "{order.component.assemble.req.name.max}") private String name; + @Schema(description = "部件ID", example = "1024") + private Long componentId; + @Schema(description = "加工状态:0不加工、1未加工、2已加工、3部分加工", example = "1") @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/dataobject/ordercomponent/OrderComponentDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/OrderComponentDO.java index bf004ae69..85b5da803 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/OrderComponentDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/OrderComponentDO.java @@ -114,4 +114,14 @@ public class OrderComponentDO extends BaseDO { * 附加加工状态:不加工/部分加工(只有顶级) */ private Integer extraProcessStatus; + + /** + * 柜名 + */ + private String bodyName; + + /** + * 房名 + */ + private String roomName; } 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 8b640be15..560bea65a 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 @@ -49,10 +49,35 @@ public interface OrderComponentMapper extends BaseMapperX { * * @param orderIds * @param processStatus - * @param name * @return */ - List getOrderTopComponentListByAssemblyStatus(@Param("orderIds") List orderIds, @Param("assemblyStatusList") List processStatus, @Param("name") String name); + List getOrderTopComponentListByAssemblyStatus(@Param("orderIds") List orderIds, + @Param("assemblyStatusList") List processStatus); + + /** + * 查询符合节点条件的顶级部件 ID。 + * + * @param orderIds 订单 ID 列表 + * @param componentIds 部件 ID 列表 + * @param componentId 部件 ID + * @param name 部件名称 + * @param processStatus 节点加工状态(仅已加工、未加工) + * @return 顶级部件 ID 列表 + */ + List getTopIdsByComponentAndProcessStatus(@Param("orderIds") List orderIds, + @Param("componentIds") Set componentIds, + @Param("componentId") Long componentId, + @Param("name") String name, + @Param("processStatus") List processStatus); + + /** + * 按部件 ID 或名称查询命中的部件节点,并计算装配状态。 + */ + List getComponentsByIdOrNameAndProcessStatus(@Param("orderIds") List orderIds, + @Param("componentIds") Set componentIds, + @Param("componentId") Long componentId, + @Param("name") String name, + @Param("processStatus") List processStatus); /** * 查询订单topid下的所有大于level层级的部件列表 @@ -95,4 +120,4 @@ public interface OrderComponentMapper extends BaseMapperX { * @return */ int physicalDeleteByOrderIds(@Param("ids") List id); -} \ No newline at end of file +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/assemblylist/AssemblyListService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/assemblylist/AssemblyListService.java index 613408bab..2c2594d1d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/assemblylist/AssemblyListService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/assemblylist/AssemblyListService.java @@ -33,6 +33,14 @@ public interface AssemblyListService { */ List getComponentList(AssemblyListComponentPageReqVO reqVO); + /** + * 获取部件的直接下级列表。 + * + * @param componentId 部件 ID + * @return 当前部件及其直接下级部件列表 + */ + List getDirectChildComponentList(Long componentId); + /** * 获取部件和下级所有的板件视图列表 * @param reqVO 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 2e81ed169..03a0067e7 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 @@ -7,7 +7,6 @@ import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.crypto.digest.DigestUtil; import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.cf.imes.framework.common.enums.DeletedCodeEnum; @@ -38,6 +37,7 @@ import com.cf.imes.module.executor.enums.ordercomponent.OrderComponentProcessSta import com.cf.imes.module.system.api.assemblyconfig.AssemblyConfigApi; import com.cf.imes.module.system.api.assemblyconfig.dto.AssemblyConfigRespDTO; import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.util.ArrayDeque; @@ -134,24 +134,28 @@ public class AssemblyListServiceImpl implements AssemblyListService { public List getComponentList(AssemblyListComponentPageReqVO reqVO) { Set componentIds = reqVO.getComponentIds(); List orderIds = reqVO.getOrderIds(); - if (CollUtil.isEmpty(componentIds)) { + if (CollUtil.isEmpty(orderIds) + || (CollUtil.isEmpty(componentIds) && reqVO.getComponentId() == null + && CharSequenceUtil.isEmpty(reqVO.getName()))) { return Collections.emptyList(); } - // 查询入参部件 - List componentDOS = orderComponentMapper.selectList(new LambdaUpdateWrapper() - .in(OrderComponentDO::getId, componentIds) - .in(OrderComponentDO::getOrderId, orderIds)); - if (CollUtil.isEmpty(componentDOS) || componentDOS.size() != componentIds.size()) { - throw new ServiceException(ORDER_COMPONENT_NOT_EXIST); + // 按部件 ID 或名称查询时,仅展示命中的节点,不展开其所在的整棵树。 + if (reqVO.getComponentId() != null || CharSequenceUtil.isNotEmpty(reqVO.getName())) { + List components = orderComponentMapper.getComponentsByIdOrNameAndProcessStatus( + orderIds, componentIds, reqVO.getComponentId(), reqVO.getName(), reqVO.getProcessStatus()); + return BeanUtil.copyToList(components, OrderComponentRespVO.class); } - // 查询部件的所有顶级id - List topIds = componentDOS.stream() - .map(OrderComponentDO::getTopId) - .toList(); + // 第一步:按部件 ID、名称及加工状态查询符合条件的 top_id。 + List topIds = orderComponentMapper.getTopIdsByComponentAndProcessStatus( + orderIds, componentIds, reqVO.getComponentId(), reqVO.getName(), + reqVO.getProcessStatus()); + if (CollUtil.isEmpty(topIds)) { + return Collections.emptyList(); + } - // 查询所有top节点下的子节点 + // 第二步:按 top_id 查询整棵树的所有节点。 List allNodesOnTopIds = orderComponentMapper.selectList(new LambdaQueryWrapperX() .in(OrderComponentDO::getTopId, topIds) .in(OrderComponentDO::getOrderId, orderIds) @@ -168,6 +172,31 @@ public class AssemblyListServiceImpl implements AssemblyListService { return BeanUtil.copyToList(allNodesOnTopIds, OrderComponentRespVO.class); } + @Override + public List getDirectChildComponentList(Long componentId) { + OrderComponentDO parent = orderComponentMapper.selectOne(new LambdaQueryWrapperX() + .eq(OrderComponentDO::getId, componentId) + .eq(OrderComponentDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus()) + .select(OrderComponentDO::getId, OrderComponentDO::getPid, OrderComponentDO::getName, + OrderComponentDO::getWidth, OrderComponentDO::getHeight, OrderComponentDO::getDepth, + OrderComponentDO::getCadViewFileId)); + if (parent == null) { + return Collections.emptyList(); + } + + List children = orderComponentMapper.selectList(new LambdaQueryWrapperX() + .eq(OrderComponentDO::getPid, componentId) + .eq(OrderComponentDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus()) + .select(OrderComponentDO::getId, OrderComponentDO::getPid, OrderComponentDO::getName, + OrderComponentDO::getWidth, OrderComponentDO::getHeight, OrderComponentDO::getDepth, + OrderComponentDO::getBodyName, OrderComponentDO::getRoomName)); + + List result = new ArrayList<>(children.size() + 1); + result.add(BeanUtil.toBean(parent, OrderComponentRespVO.class)); + result.addAll(BeanUtil.copyToList(children, OrderComponentRespVO.class)); + return result; + } + /** * 根据装配设置计算部件节点的加工状态 * @@ -836,78 +865,13 @@ public class AssemblyListServiceImpl implements AssemblyListService { return Collections.emptyList(); } - // 查询顶级部件 - List result = orderComponentMapper.getOrderTopComponentListByAssemblyStatus(reqVO.getOrderIds(), reqVO.getProcessStatus(), reqVO.getName()); - return BeanUtil.copyToList(result, OrderComponentRespVO.class); - } - - /** - * 整理状态对应的树数据 - * - * @param reqVO - * @return - */ - private List buildTopComponentStates(OrdersTopComponentListReqVO reqVO) { - // 查询顶级部件 - List topComponents = orderComponentMapper.getOrderTopComponentListByAssemblyStatus(reqVO.getOrderIds(), reqVO.getProcessStatus(), reqVO.getName()); - - if (CollUtil.isEmpty(topComponents)) { + if (reqVO.getComponentId() != null || StringUtils.isNotEmpty(reqVO.getName())) { return Collections.emptyList(); } - List names = topComponents.stream() - .map(OrderComponentDO::getName) - .distinct() - .toList(); - - List topIds = topComponents.stream() - .map(OrderComponentDO::getId) - .toList(); - - // 查询不加工配置 - CommonResult> configResult = - assemblyConfigApi.getNotProcessAssemblyConfigByPartNameList(names); - - if (configResult.isError()) { - throw new ServiceException(ORDER_COMPONENT_ASSEMBLY_CONFIG_QUERY_ERROR); - } - - Set configSet = configResult.getData().stream() - .map(dto -> dto.getComponentName() + "#" + dto.getStructureHash()) - .collect(Collectors.toSet()); - - // 查询整棵树 - List allNodes = orderComponentMapper.selectList( - new LambdaQueryWrapperX() - .in(OrderComponentDO::getTopId, topIds) - .in(OrderComponentDO::getOrderId, reqVO.getOrderIds()) - .select(OrderComponentDO::getId, - OrderComponentDO::getPid, - OrderComponentDO::getName, - OrderComponentDO::getProcessStatus) - ); - - List tree = buildTree(allNodes); - - List result = new ArrayList<>(); - - for (OrderComponentTreeCompareVO root : tree) { - - ProcessStats stats = analyzeTree(root); - - TopComponentState state = new TopComponentState(); - - state.node = root; - state.rootProcessed = ObjectUtil.equals(root.getProcessStatus(), OrderComponentProcessStatusEnum.PROCESSED.getStatus()); - state.allUnprocessed = stats.allUnprocessed; - state.anyChildProcessed = stats.anyChildProcessed; - state.notProcessConfig = - configSet.contains(root.getName() + "#" + root.getStructureHash()); - - result.add(state); - } - - return result; + // 查询顶级部件 + List result = orderComponentMapper.getOrderTopComponentListByAssemblyStatus(reqVO.getOrderIds(), reqVO.getProcessStatus()); + return BeanUtil.copyToList(result, OrderComponentRespVO.class); } /** @@ -1038,4 +1002,4 @@ public class AssemblyListServiceImpl implements AssemblyListService { */ boolean notProcessConfig; } -} \ No newline at end of file +} 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 3ccf2963f..6e7f5b6e9 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 @@ -82,9 +82,6 @@ END AS processStatus FROM order_component top WHERE top.pid = 0 - - AND top.name LIKE CONCAT('%', #{name}, '%') - AND top.order_id IN #{orderId} @@ -109,6 +106,91 @@ + + + +