From c6847681cfe1b545ee9cadf5de4806e9f60ecf1b Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 12 Aug 2026 14:21:26 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E9=83=A8=E4=BB=B6?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=A0=87=E7=AD=BE=E6=89=93=E5=8D=B0=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=9B2=E3=80=81=E9=83=A8=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E6=9D=BF=E4=BB=B6=E9=85=8D=E4=BB=B6=E6=98=8E=E7=BB=86=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E6=8E=A5=E5=8F=A3url=E4=BF=AE=E6=94=B9=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OrderComponentController.java | 19 ++- .../vo/ComponentPrintDataSourceReqVO.java | 24 ++++ .../vo/ComponentPrintDataSourceRespVO.java | 18 +++ .../vo/ComponentPrintDetailRespVO.java | 49 ++++++++ .../vo/ComponentPrintNodeRespVO.java | 19 +++ .../ordercomponent/ComponentPrintDataDO.java | 67 +++++++++++ .../ComponentPrintQuantityDO.java | 30 +++++ .../dal/dataobject/plate/PlateDO.java | 2 +- .../ordercomponent/OrderComponentMapper.java | 32 +++++ .../ordercomponent/OrderComponentService.java | 11 +- .../OrderComponentServiceImpl.java | 111 +++++++++++++++++- .../ordercomponent/OrderComponentMapper.xml | 68 +++++++++++ .../src/main/resources/message_cht.properties | 4 + .../src/main/resources/message_en.properties | 4 + .../src/main/resources/message_zh.properties | 4 + 15 files changed, 453 insertions(+), 9 deletions(-) create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDataSourceReqVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDataSourceRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDetailRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintNodeRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/ComponentPrintDataDO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/ComponentPrintQuantityDO.java diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/OrderComponentController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/OrderComponentController.java index ddb641ab8..6795ff134 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/OrderComponentController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/OrderComponentController.java @@ -6,6 +6,8 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintLis import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderComponentRespVO; +import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.ComponentPrintDataSourceReqVO; +import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.ComponentPrintDataSourceRespVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentListReqVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentPageReqVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrdersTopComponentListReqVO; @@ -120,10 +122,19 @@ public class OrderComponentController { return success(true); } - @PostMapping("/print") - @Operation(summary = "获取订单部件打印列表") + @PostMapping("/print-data-source/detail") + @Operation(summary = "获取部件下板件、配件打印数据源") @PreAuthorize("@ss.hasPermission('production:assemblyList:print')") - public CommonResult getOrderComponentPrintList(@Valid @RequestBody OrderPrintListReqVO reqVO) { - return success(orderComponentService.getOrderComponentPrintList(reqVO)); + public CommonResult getComponentDetailPrintDataSource( + @Valid @RequestBody OrderPrintListReqVO reqVO) { + return success(orderComponentService.getComponentDetailPrintDataSource(reqVO)); + } + + @PostMapping("/print-data-source/info") + @Operation(summary = "获取部件标签打印数据源") + @PreAuthorize("@ss.hasPermission('production:assemblyList:print')") + public CommonResult getComponentInfoPrintDataSource( + @Valid @RequestBody ComponentPrintDataSourceReqVO reqVO) { + return success(orderComponentService.getComponentInfoPrintDataSource(reqVO)); } } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDataSourceReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDataSourceReqVO.java new file mode 100644 index 000000000..2ec0f756d --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDataSourceReqVO.java @@ -0,0 +1,24 @@ +package com.cf.imes.module.executor.controller.admin.ordercomponent.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.util.List; + +@Data +@Schema(description = "管理后台 - 部件标签打印数据源 Request VO") +public class ComponentPrintDataSourceReqVO { + + @NotEmpty(message = "{order.component.print.datasource.orderIds.notEmpty}") + @Size(max = 100, message = "{order.component.print.datasource.orderIds.max}") + @Schema(description = "订单 ID 列表", requiredMode = Schema.RequiredMode.REQUIRED) + private List<@NotNull Long> orderIds; + + @NotEmpty(message = "{order.component.print.datasource.componentIds.notEmpty}") + @Size(max = 1000, message = "{order.component.print.datasource.componentIds.max}") + @Schema(description = "部件 ID 列表", requiredMode = Schema.RequiredMode.REQUIRED) + private List<@NotNull Long> componentIds; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDataSourceRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDataSourceRespVO.java new file mode 100644 index 000000000..17c646601 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDataSourceRespVO.java @@ -0,0 +1,18 @@ +package com.cf.imes.module.executor.controller.admin.ordercomponent.vo; + +import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintInfoRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +@Schema(description = "管理后台 - 部件标签打印数据源 Response VO") +public class ComponentPrintDataSourceRespVO { + + @Schema(description = "订单打印信息列表") + private List orderPrintInfoVOList; + + @Schema(description = "部件标签打印明细列表") + private List componentPrintDetailVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDetailRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDetailRespVO.java new file mode 100644 index 000000000..7097e96cf --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintDetailRespVO.java @@ -0,0 +1,49 @@ +package com.cf.imes.module.executor.controller.admin.ordercomponent.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +@Schema(description = "管理后台 - 部件标签打印明细 Response VO") +public class ComponentPrintDetailRespVO { + + @Schema(description = "订单 ID") + private Long orderId; + + @Schema(description = "房间名称") + private String roomName; + + @Schema(description = "柜体名称") + private String bodyName; + + @Schema(description = "部件 ID") + private Long componentId; + + @Schema(description = "部件名称") + private String componentName; + + @Schema(description = "部件长度,对应 order_component.height") + private Double length; + + @Schema(description = "部件宽度,对应 order_component.width") + private Double width; + + @Schema(description = "部件高度,对应 order_component.depth") + private Double height; + + @Schema(description = "直接父级部件;顶级部件为 null") + private ComponentPrintNodeRespVO parentComponent; + + @Schema(description = "直接子级部件列表;没有子级时为空数组") + private List childComponents; + + @Schema(description = "部件层级,顶级为 1") + private Integer level; + + @Schema(description = "同一棵树中与当前部件同名的未删除部件数量") + private Integer quantity; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintNodeRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintNodeRespVO.java new file mode 100644 index 000000000..04abdb5ba --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/ComponentPrintNodeRespVO.java @@ -0,0 +1,19 @@ +package com.cf.imes.module.executor.controller.admin.ordercomponent.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "管理后台 - 部件打印关联节点 Response VO") +public class ComponentPrintNodeRespVO { + + @Schema(description = "部件 ID") + private Long componentId; + + @Schema(description = "部件名称") + private String componentName; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/ComponentPrintDataDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/ComponentPrintDataDO.java new file mode 100644 index 000000000..5d8b74147 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/ComponentPrintDataDO.java @@ -0,0 +1,67 @@ +package com.cf.imes.module.executor.dal.dataobject.ordercomponent; + +import lombok.Data; + +@Data +public class ComponentPrintDataDO { + + /** + * 订单 ID。 + */ + private Long orderId; + + /** + * 部件 ID。 + */ + private Long componentId; + + /** + * 当前部件所属顶级部件 ID。 + */ + private Long topId; + + /** + * 部件名称。 + */ + private String componentName; + + /** + * 房间名称。 + */ + private String roomName; + + /** + * 柜体名称。 + */ + private String bodyName; + + /** + * 部件长度,对应 order_component.height。 + */ + private Double length; + + /** + * 部件宽度,对应 order_component.width。 + */ + private Double width; + + /** + * 部件高度,对应 order_component.depth。 + */ + private Double height; + + /** + * 部件层级,顶级部件为 1。 + */ + private Integer level; + + /** + * 直接父级部件 ID。 + */ + private Long parentComponentId; + + /** + * 直接父级部件名称。 + */ + private String parentComponentName; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/ComponentPrintQuantityDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/ComponentPrintQuantityDO.java new file mode 100644 index 000000000..e68daa15f --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordercomponent/ComponentPrintQuantityDO.java @@ -0,0 +1,30 @@ +package com.cf.imes.module.executor.dal.dataobject.ordercomponent; + +import lombok.Data; + +/** + * 部件标签打印同树同名数量统计数据。 + */ +@Data +public class ComponentPrintQuantityDO { + + /** + * 订单 ID。 + */ + private Long orderId; + + /** + * 顶级部件 ID,用于标识一棵部件树。 + */ + private Long topId; + + /** + * 部件名称。 + */ + private String componentName; + + /** + * 同一订单、同一棵树中同名的未删除部件数量。 + */ + private Integer quantity; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java index 79390b096..ecc85aeda 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java @@ -212,7 +212,7 @@ public class PlateDO extends BaseDO { */ private Long planId; - /** + /**" * cad自定义板编号 */ private String cadPlateNo; 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 8213f40f3..c4ffee1d9 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 @@ -3,6 +3,8 @@ package com.cf.imes.module.executor.dal.mysql.ordercomponent; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentListReqVO; import com.cf.imes.module.executor.dal.dataobject.ordercomponent.OrderComponentDO; +import com.cf.imes.module.executor.dal.dataobject.ordercomponent.ComponentPrintDataDO; +import com.cf.imes.module.executor.dal.dataobject.ordercomponent.ComponentPrintQuantityDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -17,6 +19,36 @@ import java.util.Set; */ @Mapper public interface OrderComponentMapper extends BaseMapperX { + /** + * 查询部件标签打印数据,包括当前部件、直接父级、层级及同树同名数量。 + * + * @param orderIds 订单 ID 列表 + * @param componentIds 部件 ID 列表 + * @return 部件标签打印数据列表 + */ + List selectComponentPrintData(@Param("orderIds") List orderIds, + @Param("componentIds") List componentIds); + + /** + * 按订单、顶级部件和部件名称汇总部件数量。 + * + * @param orderIds 订单 ID 列表,用于限制订单范围及分片路由 + * @param topIds 顶级部件 ID 列表 + * @return 同树同名部件数量列表 + */ + List selectComponentPrintQuantities(@Param("orderIds") List orderIds, + @Param("topIds") List topIds); + + /** + * 查询指定部件的未删除直接子级部件。 + * + * @param orderIds 订单 ID 列表 + * @param componentIds 父部件 ID 列表 + * @return 直接子级部件列表 + */ + List selectComponentPrintChildren(@Param("orderIds") List orderIds, + @Param("componentIds") List componentIds); + /** * 查询订单下部件id、level、name列表,按层级倒序、id正序 * @param orderIds diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentService.java index a73854dfa..be6fa66a0 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentService.java @@ -5,6 +5,8 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintLis import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderComponentRespVO; +import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.ComponentPrintDataSourceReqVO; +import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.ComponentPrintDataSourceRespVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentListReqVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentPageReqVO; import com.cf.imes.module.executor.controller.admin.plate.vo.OrderViewPartPageRespVO; @@ -120,5 +122,10 @@ public interface OrderComponentService { * @param pageReqVO * @return */ - OrderPrintRespVO getOrderComponentPrintList(OrderPrintListReqVO pageReqVO); -} \ No newline at end of file + OrderPrintRespVO getComponentDetailPrintDataSource(OrderPrintListReqVO pageReqVO); + + /** + * 查询部件标签打印数据源。 + */ + ComponentPrintDataSourceRespVO getComponentInfoPrintDataSource(ComponentPrintDataSourceReqVO reqVO); +} 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 519bdfe0d..cbc7cb6d0 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 @@ -20,9 +20,14 @@ import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintDetailRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintListReqVO; +import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintInfoRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderComponentRespVO; +import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.ComponentPrintDataSourceReqVO; +import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.ComponentPrintDataSourceRespVO; +import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.ComponentPrintDetailRespVO; +import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.ComponentPrintNodeRespVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentListReqVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentPageReqVO; import com.cf.imes.module.executor.controller.admin.plate.vo.OrderViewPartPageRespVO; @@ -33,6 +38,8 @@ import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemTempDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrdersViewPartsPageDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrdersViewPlatesPageDO; import com.cf.imes.module.executor.dal.dataobject.ordercomponent.OrderComponentDO; +import com.cf.imes.module.executor.dal.dataobject.ordercomponent.ComponentPrintDataDO; +import com.cf.imes.module.executor.dal.dataobject.ordercomponent.ComponentPrintQuantityDO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; import com.cf.imes.module.executor.dal.mysql.order.OrderMapper; @@ -87,6 +94,8 @@ import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_NOT_EXI @Service @Slf4j public class OrderComponentServiceImpl implements OrderComponentService { + private static final int COMPONENT_PRINT_BATCH_SIZE = 500; + @Resource private OrderComponentMapper orderComponentMapper; @@ -1109,7 +1118,7 @@ public class OrderComponentServiceImpl implements OrderComponentService { } @Override - public OrderPrintRespVO getOrderComponentPrintList(OrderPrintListReqVO pageReqVO) { + public OrderPrintRespVO getComponentDetailPrintDataSource(OrderPrintListReqVO pageReqVO) { OrderPrintRespVO result = new OrderPrintRespVO(); List orderIds = pageReqVO.getOrderIds(); Set componentIds = pageReqVO.getComponentIds(); @@ -1124,4 +1133,102 @@ public class OrderComponentServiceImpl implements OrderComponentService { result.setOrderPrintDetailRespVOList(ordersPrintPlatesList); return result; } -} \ No newline at end of file + + @Override + public ComponentPrintDataSourceRespVO getComponentInfoPrintDataSource( + ComponentPrintDataSourceReqVO reqVO) { + List orderIds = new ArrayList<>(new LinkedHashSet<>(reqVO.getOrderIds())); + List componentIds = new ArrayList<>(new LinkedHashSet<>(reqVO.getComponentIds())); + + ComponentPrintDataSourceRespVO result = new ComponentPrintDataSourceRespVO(); + result.setOrderPrintInfoVOList(sortOrderPrintInfo(orderIds, + orderService.getOrderPrintInfo(orderIds))); + + List componentData = new ArrayList<>(); + List childComponents = new ArrayList<>(); + for (int fromIndex = 0; fromIndex < componentIds.size(); fromIndex += COMPONENT_PRINT_BATCH_SIZE) { + int toIndex = Math.min(fromIndex + COMPONENT_PRINT_BATCH_SIZE, componentIds.size()); + List batchComponentIds = componentIds.subList(fromIndex, toIndex); + componentData.addAll(orderComponentMapper.selectComponentPrintData(orderIds, batchComponentIds)); + childComponents.addAll(orderComponentMapper.selectComponentPrintChildren(orderIds, batchComponentIds)); + } + + List topIds = componentData.stream() + .map(ComponentPrintDataDO::getTopId) + .filter(Objects::nonNull) + .distinct() + .toList(); + List quantityData = new ArrayList<>(); + for (int fromIndex = 0; fromIndex < topIds.size(); fromIndex += COMPONENT_PRINT_BATCH_SIZE) { + int toIndex = Math.min(fromIndex + COMPONENT_PRINT_BATCH_SIZE, topIds.size()); + quantityData.addAll(orderComponentMapper.selectComponentPrintQuantities( + orderIds, topIds.subList(fromIndex, toIndex))); + } + Map quantityMap = quantityData.stream() + .collect(Collectors.toMap( + item -> new ComponentQuantityKey( + item.getOrderId(), item.getTopId(), item.getComponentName()), + ComponentPrintQuantityDO::getQuantity, + (first, ignored) -> first)); + + Map> childrenMap = childComponents.stream() + .collect(Collectors.groupingBy(OrderComponentDO::getPid, + LinkedHashMap::new, + Collectors.mapping(child -> new ComponentPrintNodeRespVO( + child.getId(), child.getName()), + Collectors.toList()))); + Map componentDataMap = componentData.stream() + .collect(Collectors.toMap(ComponentPrintDataDO::getComponentId, + Function.identity(), (first, ignored) -> first)); + + List detailList = componentIds.stream() + .map(componentDataMap::get) + .filter(Objects::nonNull) + .map(data -> convertComponentPrintDetail(data, childrenMap, quantityMap)) + .toList(); + result.setComponentPrintDetailVOList(detailList); + return result; + } + + private List sortOrderPrintInfo( + List orderIds, List orderInfoList) { + Map orderInfoMap = orderInfoList.stream() + .collect(Collectors.toMap(OrderPrintInfoRespVO::getId, + Function.identity(), (first, ignored) -> first)); + return orderIds.stream() + .map(orderInfoMap::get) + .filter(Objects::nonNull) + .toList(); + } + + private ComponentPrintDetailRespVO convertComponentPrintDetail( + ComponentPrintDataDO data, + Map> childrenMap, + Map quantityMap) { + ComponentPrintDetailRespVO result = new ComponentPrintDetailRespVO(); + result.setOrderId(data.getOrderId()); + result.setRoomName(data.getRoomName()); + result.setBodyName(data.getBodyName()); + result.setComponentId(data.getComponentId()); + result.setComponentName(data.getComponentName()); + result.setLength(data.getLength()); + result.setWidth(data.getWidth()); + result.setHeight(data.getHeight()); + result.setLevel(data.getLevel()); + result.setQuantity(quantityMap.getOrDefault(new ComponentQuantityKey( + data.getOrderId(), data.getTopId(), data.getComponentName()), 0)); + if (data.getParentComponentId() != null) { + result.setParentComponent(new ComponentPrintNodeRespVO( + data.getParentComponentId(), data.getParentComponentName())); + } + result.setChildComponents(childrenMap.getOrDefault( + data.getComponentId(), Collections.emptyList())); + return result; + } + + /** + * 部件数量统计键:同一订单、同一棵树、同一名称。 + */ + private record ComponentQuantityKey(Long orderId, Long topId, String componentName) { + } +} 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 5502e7067..450c3baa3 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 @@ -1,6 +1,74 @@ + + + + + +