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 403ef1d11..3bc352b38 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 @@ -1,13 +1,16 @@ package com.cf.imes.module.executor.controller.admin.assemblylist; +import cn.hutool.core.bean.BeanUtil; import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.module.executor.controller.admin.assemblylist.vo.AssemblyListComponentPageReqVO; 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.OrderDetailComponentPageReqVO; import com.cf.imes.module.executor.controller.admin.plate.vo.OrderViewPartPageRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.OrderViewPlatePageRespVO; import com.cf.imes.module.executor.service.assemblylist.AssemblyListService; +import com.cf.imes.module.executor.service.ordercomponent.OrderComponentService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -39,6 +42,9 @@ public class AssemblyListController { @Resource private AssemblyListService assemblyListService; + @Resource + private OrderComponentService orderComponentService; + @PostMapping("/list") @Operation(summary = "装配清单-获取部件列表") @PreAuthorize("@ss.hasPermission('production:assemblyList:query')") @@ -50,14 +56,16 @@ public class AssemblyListController { @Operation(summary = "装配清单-获取订单部件下的板件视图分页列表数据") @PreAuthorize("@ss.hasPermission('production:assemblyList:query')") public CommonResult> getComponentViewPlatesPage(@Valid @RequestBody AssemblyListComponentPageReqVO pageReqVO) { - return success(assemblyListService.getViewComponentPlatePage(pageReqVO)); + OrderDetailComponentPageReqVO req = BeanUtil.copyProperties(pageReqVO, OrderDetailComponentPageReqVO.class); + return success(orderComponentService.getViewComponentPlatesPage(req)); } @PostMapping("/list/view/part/page") @Operation(summary = "装配清单-获取订单部件下的配件视图分页列表数据") @PreAuthorize("@ss.hasPermission('production:assemblyList:query')") public CommonResult> getComponentViewPartsPage(@Valid @RequestBody AssemblyListComponentPageReqVO pageReqVO) { - return success(assemblyListService.getViewComponentPartPage(pageReqVO)); + OrderDetailComponentPageReqVO req = BeanUtil.copyProperties(pageReqVO, OrderDetailComponentPageReqVO.class); + return success(orderComponentService.getViewComponentPartsPage(req)); } @PostMapping("/list/view/cadinfo") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderCadViewPlatePageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderCadViewPlatePageReqVO.java index 1d4ccd87a..1b513620f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderCadViewPlatePageReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderCadViewPlatePageReqVO.java @@ -35,4 +35,7 @@ public class OrderCadViewPlatePageReqVO extends PageParam { @Schema(description = "名称") private String name; + + @Schema(description = "是否删除", example = "false") + private Boolean deleted = false; } 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 af11d12f1..769c9326c 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 @@ -76,6 +76,8 @@ public class OrderComponentController { @Operation(summary = "获取部件下的板件视图分页列表数据") @PreAuthorize("@ss.hasPermission('production:manager-list:detail')") public CommonResult> getComponentViewPlatesPage(@Valid @RequestBody OrderDetailComponentPageReqVO pageReqVO) { + Long orderId = pageReqVO.getOrderId(); + pageReqVO.setOrderIds(List.of(orderId)); return success(orderComponentService.getViewComponentPlatesPage(pageReqVO)); } @@ -83,6 +85,8 @@ public class OrderComponentController { @Operation(summary = "获取部件下的配件视图分页列表数据") @PreAuthorize("@ss.hasPermission('production:manager-list:detail')") public CommonResult> getComponentViewPartsPage(@Valid @RequestBody OrderDetailComponentPageReqVO pageReqVO) { + Long orderId = pageReqVO.getOrderId(); + pageReqVO.setOrderIds(List.of(orderId)); return success(orderComponentService.getViewComponentPartsPage(pageReqVO)); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrderDetailComponentPageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrderDetailComponentPageReqVO.java index 373c6026d..4a9ec31b2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrderDetailComponentPageReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/ordercomponent/vo/OrderDetailComponentPageReqVO.java @@ -10,6 +10,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; +import java.util.List; import java.util.Set; /** @@ -29,12 +30,16 @@ public class OrderDetailComponentPageReqVO extends PageParam { @NotNull(message = "{order.detail.component.list.query.orderId.not.null}") private Long orderId; + @Schema(description = "订单编号", example = "[1,2]") + @Size(max = 100, message = "{order.component.assemble.req.orderIds.max}") + private List orderIds; + @Schema(description = "部件编号", example = "[1,2]") @Size(max = 200, message = "{order.detail.component.list.query.componentIds.max}") private Set componentIds; @Schema(description = "是否删除", example = "false") - private boolean deleted; + private Boolean deleted = false;; @Schema(description = "柜体编号", example = "[1,2]") @Size(max = 200, message = "{order.detail.component.list.query.bodyIds.max}") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderViewPartPageRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderViewPartPageRespVO.java index cc3452e1a..0572115b6 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderViewPartPageRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderViewPartPageRespVO.java @@ -84,4 +84,10 @@ public class OrderViewPartPageRespVO { @Schema(description = "柜体id") private Long bodyId; + + @Schema(description = "加工组名称") + private String processGroupName; + + @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/controller/admin/plate/vo/OrderViewPlatePageRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderViewPlatePageRespVO.java index ffae9cf52..65a18e0d6 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderViewPlatePageRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderViewPlatePageRespVO.java @@ -85,6 +85,12 @@ public class OrderViewPlatePageRespVO { @Schema(description = "是否排孔") private Boolean isRowHole; + @Schema(description = "排版面") + private Integer holeFace; + + @Schema(description = "开门类型") + private Integer openDoorType; + @Schema(description = "备注") private String remark; @@ -94,6 +100,39 @@ public class OrderViewPlatePageRespVO { @Schema(description = "柜体名称") private String bodyName; - @Schema(description = "柜体id") - private Long bodyId; + @Schema(description = "加工组名称") + private String processGroupName; + + @Schema(description = "部件名称") + private String componentName; + + @Schema(description = "是否二维刀路") + private Boolean is2v; + + @Schema(description = "是否双面造型") + private Boolean doubleSideModel; + + @Schema(description = "是否双面排孔") + private Boolean doubleSideHole; + + @Schema(description = "是否正面造型") + private Boolean frontModel; + + @Schema(description = "是否侧面造型") + private Boolean backModel; + + @Schema(description = "是否正面排孔") + private Boolean frontHole; + + @Schema(description = "是否反面排孔") + private Boolean backHole; + + @Schema(description = "是否侧面造型") + private Boolean sideModel; + + @Schema(description = "是否侧面排孔") + private Boolean sideHole; + + @Schema(description = "是否侧面二维刀路") + private Boolean isSide2v; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrdersViewPlatesPageDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrdersViewPlatesPageDO.java index 46d6c19a9..549403685 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrdersViewPlatesPageDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrdersViewPlatesPageDO.java @@ -77,6 +77,11 @@ public class OrdersViewPlatesPageDO { */ private String color; + /** + * 品牌 + */ + private String brand; + /** * cad设计板编号 */ @@ -122,6 +127,16 @@ public class OrdersViewPlatesPageDO { */ private Boolean isRowHole; + /** + * 排版面 + */ + private Integer holeFace; + + /** + * 开门类型 + */ + private Integer openDoorType; + /** * 备注 */ @@ -141,4 +156,54 @@ public class OrdersViewPlatesPageDO { * 柜体名称 */ private String bodyName; + + /** + * 是否二维刀路 + */ + private Boolean is2v; + + /** + * 是否双面造型 + */ + private Boolean doubleSideModel; + + /** + * 是否双面排孔 + */ + private Boolean doubleSideHole; + + /** + * 是否正面造型 + */ + private Boolean frontModel; + + /** + * 是否侧面造型 + */ + private Boolean backModel; + + /** + * 正面排孔 + */ + private Boolean frontHole; + + /** + * 反面排孔 + */ + private Boolean backHole; + + /** + * 是否侧面造型 + */ + private Boolean sideModel; + + /** + * 是否侧面排孔 + */ + private Boolean sideHole; + + /** + * 是否侧面二维刀路 + */ + private Boolean isSide2v; } 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 f1aaa4d30..a37c29acc 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 @@ -218,6 +218,22 @@ public interface OrderItemMapper extends BaseMapperX { @Param("componentIds") Set componentIds, @Param("cadView") boolean cadView); + /** + * 分页查询订单板件id + * + * @param page + * @param orderIds + * @param bodyIds + * @param groupId + * @param componentIds + * @return + */ + IPage selectOrdersViewPlateIdsPage(@Param("page") IPage page, + @Param("orderIds") List orderIds, + @Param("bodyIds") Set bodyIds, + @Param("groupIds") Set groupId, + @Param("componentIds") Set componentIds); + /** * 分页查询订单配件视图数据 * @@ -237,6 +253,23 @@ public interface OrderItemMapper extends BaseMapperX { @Param("name") String name, @Param("cadView") boolean cadView); + /** + * 分页查询订单板件id + * + * @param page + * @param orderIds + * @param bodyIds + * @param groupId + * @param componentIds + * @return + */ + IPage selectOrdersViewPartsIdsPage(@Param("page") IPage page, + @Param("orderIds") List orderIds, + @Param("bodyIds") Set bodyIds, + @Param("groupIds") Set groupId, + @Param("componentIds") Set componentIds, + @Param("name") String name); + /** * 查询部件关联的板件ID列表 * diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java index fe3d70c4f..df9bc82d0 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java @@ -17,6 +17,7 @@ import com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsIdVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlatePageReqVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO; +import com.cf.imes.module.executor.dal.dataobject.orderItem.OrdersViewPlatesPageDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDetailDO; import org.apache.ibatis.annotations.Mapper; @@ -391,4 +392,14 @@ public interface PlateMapper extends BaseMapperX { * @return */ List selectOrderComponentBodyIds(@Param("orderId") Long orderId, @Param("componentIds") List componentIds, @Param("deleted") boolean deleted); + + /** + * 根据板件id列表查询板件信息 + * + * @param orderIds + * @param plateIds + * @param deleted + * @return + */ + List selectPlateGoodsByIds(@Param("orderIds") List orderIds, @Param("plateIds") List plateIds, @Param("deleted") boolean deleted); } \ 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 da59758ad..ddf87617b 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 @@ -25,21 +25,6 @@ public interface AssemblyListService { */ List getComponentList(AssemblyListComponentPageReqVO reqVO); - /** - * 获取订单下板件视图分页列表 - * @param reqVO - * @return - */ - PageResult getViewComponentPlatePage(AssemblyListComponentPageReqVO reqVO); - - /** - * 获取订单下配件视图分页列表 - * - * @param reqVO - * @return - */ - PageResult getViewComponentPartPage(AssemblyListComponentPageReqVO reqVO); - /** * 获取部件和下级所有的板件视图列表 * @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 7b8774fc4..a70013020 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 @@ -14,7 +14,6 @@ import com.cf.imes.framework.common.enums.DeletedCodeEnum; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.common.pojo.PageParam; -import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.Assert.AssertUtils; import com.cf.imes.framework.common.util.json.JsonUtils; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -557,128 +556,6 @@ public class AssemblyListServiceImpl implements AssemblyListService { } } - @Override - public PageResult getViewComponentPlatePage(AssemblyListComponentPageReqVO pageReqVO) { - Set componentIds = pageReqVO.getComponentIds(); - if (CollUtil.isEmpty(componentIds)) { - return new PageResult<>(Collections.emptyList(), 0L); - } - - // 1、查询顶级 - List componentDOS = orderComponentMapper.selectByIds(componentIds); - if (CollUtil.isEmpty(componentDOS) || componentDOS.size() != componentIds.size()) { - throw new ServiceException(ORDER_COMPONENT_NOT_EXIST); - } - // 整理所在订单id列表 - List orderIds = componentDOS.stream() - .map(OrderComponentDO::getOrderId) - .distinct() - .toList(); - // 整理所在顶级配件id列表 - List topIds = componentDOS.stream() - .map(OrderComponentDO::getTopId) - .toList(); - - // 2、把下级部件id作为查询条件 - List orderComponentDOS = orderComponentMapper.selectList(new LambdaQueryWrapperX() - .in(OrderComponentDO::getTopId, topIds) - .in(OrderComponentDO::getOrderId, orderIds) - .eq(OrderComponentDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus()) - .select(OrderComponentDO::getId, OrderComponentDO::getCadViewFileId, OrderComponentDO::getPid)); - - Set queryComponentIds = new HashSet<>(); - if (CollUtil.isNotEmpty(orderComponentDOS)) { - for (OrderComponentDO co : componentDOS) { - queryComponentIds.addAll(getChildrenIds(co, orderComponentDOS)); - } - } else { - return new PageResult<>(); - } - // 整理出id和cadViewFileId的对应关系 - Map cadViewFileIdMap = orderComponentDOS.stream() - .filter(item -> item.getCadViewFileId() != null) - .collect(Collectors.toMap(OrderComponentDO::getId, OrderComponentDO::getCadViewFileId)); - - // 分页查询板件 - PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage pageRes = orderItemMapper.selectOrdersViewPlatesPage(page, orderIds, null, null, queryComponentIds, false); - long total = pageRes.getTotal(); - List records = pageRes.getRecords(); - - List resultList = new ArrayList<>(); - if (total > 0) { - resultList = records.stream().map(item -> { - OrderViewPlatePageRespVO vo = new OrderViewPlatePageRespVO(); - BeanUtil.copyProperties(item, vo); - - vo.setCadViewFileId(cadViewFileIdMap.get(item.getCompId())); - return vo; - }).toList(); - } - return new PageResult<>(resultList, total); - } - - @Override - public PageResult getViewComponentPartPage(AssemblyListComponentPageReqVO pageReqVO) { - Set componentIds = pageReqVO.getComponentIds(); - if (CollUtil.isEmpty(componentIds)) { - return new PageResult<>(Collections.emptyList(), 0L); - } - - // 1、查询顶级 - List componentDOS = orderComponentMapper.selectByIds(componentIds); - if (CollUtil.isEmpty(componentDOS) || componentDOS.size() != componentIds.size()) { - throw new ServiceException(ORDER_COMPONENT_NOT_EXIST); - } - // 整理所在订单id列表 - List orderIds = componentDOS.stream() - .map(OrderComponentDO::getOrderId) - .distinct() - .toList(); - // 整理所在顶级配件id列表 - List topIds = componentDOS.stream() - .map(OrderComponentDO::getTopId) - .toList(); - - // 2、把下级部件id作为查询条件 - List orderComponentDOS = orderComponentMapper.selectList(new LambdaQueryWrapperX() - .in(OrderComponentDO::getTopId, topIds) - .in(OrderComponentDO::getOrderId, orderIds) - .eq(OrderComponentDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus()) - .select(OrderComponentDO::getId, OrderComponentDO::getCadViewFileId, OrderComponentDO::getPid)); - - Set queryComponentIds = new HashSet<>(); - if (CollUtil.isNotEmpty(orderComponentDOS)) { - for (OrderComponentDO co : componentDOS) { - queryComponentIds.addAll(getChildrenIds(co, orderComponentDOS)); - } - } else { - return new PageResult<>(); - } - // 整理出id和cadViewFileId的对应关系 - Map cadViewFileIdMap = orderComponentDOS.stream() - .filter(item -> item.getCadViewFileId() != null) - .collect(Collectors.toMap(OrderComponentDO::getId, OrderComponentDO::getCadViewFileId)); - - // 分页查询板件 - PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage pageRes = orderItemMapper.selectOrdersViewPartsPage(page, orderIds, null, null, queryComponentIds, null, false); - long total = pageRes.getTotal(); - List records = pageRes.getRecords(); - - List resultList = new ArrayList<>(); - if (total > 0) { - resultList = records.stream().map(item -> { - OrderViewPartPageRespVO vo = new OrderViewPartPageRespVO(); - BeanUtil.copyProperties(item, vo); - - vo.setCadViewFileId(cadViewFileIdMap.get(item.getCompId())); - return vo; - }).toList(); - } - return new PageResult<>(resultList, total); - } - @Override public OrdersViewCadViewInfoRespVO getViewComponentPlatesCadInfo(AssemblyListComponentPageReqVO pageReqVO) { OrdersViewCadViewInfoRespVO assemblyListComponentCadViewInfoRespVO = new OrdersViewCadViewInfoRespVO(); 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 5e57fbd3f..db48104e8 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 @@ -2,6 +2,7 @@ package com.cf.imes.module.executor.service.ordercomponent; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Pair; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; @@ -26,6 +27,7 @@ import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetai import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentPageReqVO; import com.cf.imes.module.executor.controller.admin.plate.vo.OrderViewPartPageRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.OrderViewPlatePageRespVO; +import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemTempDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrdersViewPartsPageDO; @@ -35,6 +37,7 @@ 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; import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper; +import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper; import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemBatchMapper; import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper; import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemTempBatchMapper; @@ -50,6 +53,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; @@ -60,6 +64,7 @@ import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -104,6 +109,9 @@ public class OrderComponentServiceImpl implements OrderComponentService { @Resource private OrderItemTempBatchMapper orderItemTempBatchMapper; + @Resource + private OrderGroupMapper orderGroupMapper; + @Resource private FileApi fileApi; @@ -203,57 +211,169 @@ public class OrderComponentServiceImpl implements OrderComponentService { return new PageResult<>(Collections.emptyList(), 0L); } // 校验订单 - Long orderId = pageReqVO.getOrderId(); - OrderDO orderDO = orderMapper.selectById(orderId); - AssertUtils.notEmpty(orderDO,ORDER_NOT_EXISTS); + List orderIds = pageReqVO.getOrderIds(); + List orderDOS = orderMapper.selectByIds(orderIds); + AssertUtils.notEmpty(orderDOS, ORDER_NOT_EXISTS); - // 1、查询顶级 + // 查询部件 List componentDOS = orderComponentMapper.selectByIds(componentIds); if (CollUtil.isEmpty(componentDOS) || componentDOS.size() != componentIds.size()) { throw new ServiceException(ORDER_COMPONENT_NOT_EXIST); } - List topIds = componentDOS.stream() - .map(OrderComponentDO::getTopId) - .toList(); - // 2、把下级部件id作为查询条件 - List orderComponentDOS = orderComponentMapper.selectList(new LambdaQueryWrapperX() - .in(OrderComponentDO::getTopId, topIds) - .eq(OrderComponentDO::getOrderId, orderId) - .eqIfPresent(OrderComponentDO::getDeleted, pageReqVO.isDeleted()) - .select(OrderComponentDO::getId, OrderComponentDO::getCadViewFileId, OrderComponentDO::getPid)); - - Set queryComponentIds = new HashSet<>(); - if (CollUtil.isNotEmpty(orderComponentDOS)) { - for (OrderComponentDO co : componentDOS) { - queryComponentIds.addAll(getChildrenIds(co, orderComponentDOS)); - } - } else { + if (CollUtil.isEmpty(componentDOS)) { return new PageResult<>(); } + + Set queryComponentIds = componentDOS.stream().map(OrderComponentDO::getId).collect(Collectors.toSet()); // 整理出id和cadViewFileId的对应关系 - Map cadViewFileIdMap = orderComponentDOS.stream() + Map cadViewFileIdMap = componentDOS.stream() .filter(item -> item.getCadViewFileId() != null) - .collect(Collectors.toMap(OrderComponentDO::getId, OrderComponentDO::getCadViewFileId)); + .collect(Collectors.toMap( + OrderComponentDO::getId, + Function.identity(), + (a, b) -> a + )); - // 分页查询板件 - PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage pageRes = orderItemMapper.selectOrdersViewPlatesPage(page, List.of(orderId), null, - null, queryComponentIds, false); - long total = pageRes.getTotal(); - List records = pageRes.getRecords(); + // 分页获取板件id + IPage plateIdPage = orderItemMapper.selectOrdersViewPlateIdsPage(new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), + orderIds, null, null, queryComponentIds); - List resultList = new ArrayList<>(); - if(total > 0) { - resultList = records.stream().map(item -> { - OrderViewPlatePageRespVO vo = new OrderViewPlatePageRespVO(); - BeanUtil.copyProperties(item, vo); - - vo.setCadViewFileId(cadViewFileIdMap.get(item.getCompId())); - return vo; - }).toList(); + List plateIdPageRecords = plateIdPage.getRecords(); + if(CollUtil.isEmpty(plateIdPageRecords)) { + return new PageResult<>(Collections.emptyList(), 0L); } - return new PageResult<>(resultList, total); + + // 查询板件+板材信息 + List ordersViewPlatesPageDOS = plateMapper.selectPlateGoodsByIds(orderIds, plateIdPageRecords, pageReqVO.getDeleted()); + + // 查询关联关系 + List orderItemRelation = orderItemMapper.selectList(new LambdaQueryWrapper() + .in(OrderItemDO::getOrderId, pageReqVO.getOrderIds()) + .in(OrderItemDO::getPlateId, plateIdPageRecords) + .select(OrderItemDO::getPlateId, OrderItemDO::getRoomId, OrderItemDO::getBodyId, OrderItemDO::getCadViewId, OrderItemDO::getGroupId, OrderItemDO::getCompId) + ); + + // 暂存plateId:set + Map> plateGroupMap = new HashMap<>(); + // 暂存plateId:set + Map> plateCompMap = new HashMap<>(); + // 暂存plateId:bodyId + Map plateBodyMap = new HashMap<>(); + + Map plateMap = + ordersViewPlatesPageDOS.stream() + .collect(Collectors.toMap( + OrdersViewPlatesPageDO::getId, + Function.identity(), + (a, b) -> a + )); + + for (OrderItemDO item : orderItemRelation) { + + Long plateId = item.getPlateId(); + + // 累计plateId下group_id + if (item.getGroupId() != null) { + plateGroupMap + .computeIfAbsent(plateId, k -> new HashSet<>()) + .add(item.getGroupId()); + } + + // 记录plateId下body_id + if (item.getBodyId() != null) { + plateBodyMap + .computeIfAbsent(plateId, k -> item.getBodyId()); + } + + // 累计plateId下comp_id + if (item.getCompId() != null) { + plateCompMap + .computeIfAbsent(plateId, k -> new HashSet<>()) + .add(item.getCompId()); + } + + // 单值字段 + OrdersViewPlatesPageDO plate = plateMap.get(plateId); + if (plate != null) { + plate.setCadViewId(item.getCadViewId()); + } + } + + // 查询加工组 + Set allGroupIds = plateGroupMap.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 allBodyIds = plateBodyMap.values() + .stream() + .collect(Collectors.toSet()); + + Map bodyMap = Collections.emptyMap(); + + if (!allBodyIds.isEmpty()) { + bodyMap = orderBodyMapper.selectByIds(allBodyIds) + .stream() + .collect(Collectors.toMap( + OrderBodyDO::getId, + Function.identity(), + (a, b) -> a + )); + } + + List records = new ArrayList<>(); + for (Map.Entry entry : plateMap.entrySet()) { + + Long plateId = entry.getKey(); + OrdersViewPlatesPageDO plate = entry.getValue(); + + OrderViewPlatePageRespVO plateRespVO = BeanUtil.copyProperties(plate, OrderViewPlatePageRespVO.class); + + // 用逗号拼接加工组名称 + Set groupIds = plateGroupMap.getOrDefault(plateId, Collections.emptySet()); + List groupNames = groupIds.stream() + .map(groupNameMap::get) + .filter(Objects::nonNull) + .toList(); + + plateRespVO.setProcessGroupName(String.join(",", groupNames)); + + // 用逗号拼接部件组名称 + Set compIds = plateCompMap.getOrDefault(plateId, Collections.emptySet()); + List comps = compIds.stream() + .map(cadViewFileIdMap::get) + .filter(Objects::nonNull) + .toList(); + + if (CollUtil.isNotEmpty(comps)) { + plateRespVO.setComponentName(String.join(",", comps.stream().map(OrderComponentDO::getName).collect(Collectors.toSet()))); + plateRespVO.setCadViewFileId(comps.get(0).getCadViewFileId()); + } + + // 匹配房间名、柜体名、图纸id + OrderBodyDO orderBodyDO = bodyMap.get(plate.getBodyId()); + if(ObjectUtil.isNotNull(orderBodyDO)) { + plateRespVO.setBodyName(orderBodyDO.getName()); + plateRespVO.setRoomName(orderBodyDO.getRoomName()); + } + + records.add(plateRespVO); + } + return new PageResult<>(records, plateIdPage.getTotal()); } @Override @@ -263,57 +383,149 @@ public class OrderComponentServiceImpl implements OrderComponentService { return new PageResult<>(Collections.emptyList(), 0L); } // 校验订单 - Long orderId = pageReqVO.getOrderId(); - OrderDO orderDO = orderMapper.selectById(orderId); - AssertUtils.notEmpty(orderDO, ORDER_NOT_EXISTS); + List orderIds = pageReqVO.getOrderIds(); + List orderDOS = orderMapper.selectByIds(orderIds); + AssertUtils.notEmpty(orderDOS, ORDER_NOT_EXISTS); - // 1、查询顶级 + // 查询部件 List componentDOS = orderComponentMapper.selectByIds(componentIds); if (CollUtil.isEmpty(componentDOS) || componentDOS.size() != componentIds.size()) { throw new ServiceException(ORDER_COMPONENT_NOT_EXIST); } - List topIds = componentDOS.stream() - .map(OrderComponentDO::getTopId) - .toList(); - // 2、把下级部件id作为查询条件 - List orderComponentDOS = orderComponentMapper.selectList(new LambdaQueryWrapperX() - .in(OrderComponentDO::getTopId, topIds) - .eq(OrderComponentDO::getOrderId, orderId) - .eqIfPresent(OrderComponentDO::getDeleted, pageReqVO.isDeleted()) - .select(OrderComponentDO::getId, OrderComponentDO::getCadViewFileId, OrderComponentDO::getPid)); - - Set queryComponentIds = new HashSet<>(); - if (CollUtil.isNotEmpty(orderComponentDOS)) { - for (OrderComponentDO co : componentDOS) { - queryComponentIds.addAll(getChildrenIds(co, orderComponentDOS)); - } - } else { + if (CollUtil.isEmpty(componentDOS)) { return new PageResult<>(); } + + Set queryComponentIds = componentDOS.stream().map(OrderComponentDO::getId).collect(Collectors.toSet()); // 整理出id和cadViewFileId的对应关系 - Map cadViewFileIdMap = orderComponentDOS.stream() + Map cadViewFileIdMap = componentDOS.stream() .filter(item -> item.getCadViewFileId() != null) - .collect(Collectors.toMap(OrderComponentDO::getId, OrderComponentDO::getCadViewFileId)); + .collect(Collectors.toMap( + OrderComponentDO::getId, + Function.identity(), + (a, b) -> a + )); - // 分页查询板件 + // 查询配件编号+信息 PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage pageRes = orderItemMapper.selectOrdersViewPartsPage(page, List.of(orderId), null, - null, queryComponentIds, null, false); - long total = pageRes.getTotal(); - List records = pageRes.getRecords(); + IPage pageRes = orderItemMapper.selectOrdersViewPartsIdsPage(page, orderIds, null, null, queryComponentIds, null); - List resultList = new ArrayList<>(); - if (total > 0) { - resultList = records.stream().map(item -> { - OrderViewPartPageRespVO vo = new OrderViewPartPageRespVO(); - BeanUtil.copyProperties(item, vo); - - vo.setCadViewFileId(cadViewFileIdMap.get(item.getCompId())); - return vo; - }).toList(); + List partsPageRecords = pageRes.getRecords(); + if(CollUtil.isEmpty(partsPageRecords)) { + return new PageResult<>(Collections.emptyList(), 0L); } - return new PageResult<>(resultList, total); + + List partsIds = partsPageRecords.stream().map(OrdersViewPartsPageDO::getId).toList(); + + // 查询关联关系 + List orderItemRelation = orderItemMapper.selectList(new LambdaQueryWrapperX() + .in(OrderItemDO::getOrderId, pageReqVO.getOrderIds()) + .inIfPresent(OrderItemDO::getCompId, queryComponentIds) + .in(OrderItemDO::getPartsId, partsIds) + .select(OrderItemDO::getPartsId, OrderItemDO::getCadViewId, OrderItemDO::getGroupId, OrderItemDO::getCompId, OrderItemDO::getNum) + ); + + // 暂存 partsId:set + Map, Set> partsGroupMap = new HashMap<>(); + + // 暂存 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()); + } + + // comp_id + if (item.getCompId() != null) { + partsCompMap + .computeIfAbsent(pair, k -> new HashSet<>()) + .add(item.getCompId()); + } + + // num 汇总 + if (item.getNum() != null) { + partsNumMap.merge( + pair, + item.getNum(), + Double::sum + ); + } + } + + // 查询加工组 + 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 + )); + } + + // 最终组装 + 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 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()); } @Override @@ -335,7 +547,7 @@ public class OrderComponentServiceImpl implements OrderComponentService { List orderComponentDOS = orderComponentMapper.selectList(new LambdaQueryWrapperX() .in(OrderComponentDO::getTopId, topIds) .eq(OrderComponentDO::getOrderId, orderId) - .eqIfPresent(OrderComponentDO::getDeleted, pageReqVO.isDeleted()) + .eqIfPresent(OrderComponentDO::getDeleted, pageReqVO.getDeleted()) .select(OrderComponentDO::getId, OrderComponentDO::getCadViewFileId, OrderComponentDO::getPid)); Set queryComponentIds = new HashSet<>(); if (CollUtil.isNotEmpty(orderComponentDOS)) { @@ -875,7 +1087,7 @@ public class OrderComponentServiceImpl implements OrderComponentService { List orderComponentDOS = orderComponentMapper.selectList(new LambdaQueryWrapperX() .in(OrderComponentDO::getTopId, topIds) .eq(OrderComponentDO::getOrderId, orderId) - .eqIfPresent(OrderComponentDO::getDeleted, pageReqVO.isDeleted()) + .eqIfPresent(OrderComponentDO::getDeleted, pageReqVO.getDeleted()) .select(OrderComponentDO::getId, OrderComponentDO::getCadViewFileId, OrderComponentDO::getPid)); if (CollUtil.isNotEmpty(orderComponentDOS)) { for (OrderComponentDO co : componentDOS) { 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 679dc0725..88b128e93 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 @@ -2,6 +2,7 @@ package com.cf.imes.module.executor.service.plate; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Pair; import cn.hutool.core.util.ObjectUtil; import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch._types.FieldValue; @@ -35,9 +36,11 @@ import com.cf.imes.module.executor.controller.admin.plate.vo.*; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; 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.dataobject.orderGroup.OrderGroupDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; 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.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; @@ -46,7 +49,9 @@ import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO; import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper; import com.cf.imes.module.executor.dal.mysql.order.OrderMapper; import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper; +import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper; import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper; +import com.cf.imes.module.executor.dal.mysql.ordercomponent.OrderComponentMapper; import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper; import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper; import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper; @@ -69,6 +74,7 @@ import java.io.IOException; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR; @@ -135,12 +141,13 @@ public class PlateServiceImpl implements PlateService { @Resource private OrderItemService orderItemService; + @Resource + private OrderGroupMapper orderGroupMapper; + + @Resource + private OrderComponentMapper orderComponentMapper; + private static final String FIELD_PLATE_ID = "plateId"; - private static final String FIELD_OG_MATERIAL = "og.material"; - private static final String FIELD_OG_BRAND = "og.brand"; - private static final String FIELD_OG_COLOR = "og.color"; - private static final String FIELD_OP_THICKNESS = "op.thickness"; - private static final String FIELD_OG_TEXTURE = "og.texture"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -834,6 +841,7 @@ public class PlateServiceImpl implements PlateService { @Override public PageResult getBodyViewPlatesPage(OrderCadViewPlatePageReqVO pageReqVO) { Set bodyIds = pageReqVO.getBodyIds(); + Set groupIds = pageReqVO.getGroupIds(); if (CollUtil.isEmpty(bodyIds)) { return new PageResult<>(Collections.emptyList(), 0L); } @@ -843,25 +851,156 @@ public class PlateServiceImpl implements PlateService { } // 整理出body_id和cad图纸id的关系 - Map bodyIdAndCadViewFileIdMap = orderBodyDOList.stream() + Map bodyIdAndCadViewFileIdMap = orderBodyDOList.stream() .filter(item -> item.getCadViewFileId() != null) - .collect(Collectors.toMap(OrderBodyDO::getId, OrderBodyDO::getCadViewFileId)); + .collect(Collectors.toMap( + OrderBodyDO::getId, + Function.identity(), + (a, b) -> a + )); - PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage pageRes = orderItemMapper.selectOrdersViewPlatesPage(page, List.of(pageReqVO.getOrderId()), - bodyIds, pageReqVO.getGroupIds(), null, false); + List orderIds = List.of(pageReqVO.getOrderId()); - List records = pageRes.getRecords(); - // cad图纸id赋到每块板上 - if(CollUtil.isNotEmpty(records)) { - records.forEach(item -> item.setCadViewFileId(bodyIdAndCadViewFileIdMap.get(item.getBodyId()))); + // 分页获取板件id + IPage plateIdPage = orderItemMapper.selectOrdersViewPlateIdsPage(new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), + orderIds, bodyIds, groupIds, null); + + List plateIdPageRecords = plateIdPage.getRecords(); + if(CollUtil.isEmpty(plateIdPageRecords)) { + return new PageResult<>(Collections.emptyList(), 0L); } - return new PageResult<>(BeanUtil.copyToList(records, OrderViewPlatePageRespVO.class), pageRes.getTotal()); + + // 查询板件+板材信息 + List ordersViewPlatesPageDOS = plateMapper.selectPlateGoodsByIds(orderIds, plateIdPageRecords, pageReqVO.getDeleted()); + + // 查询关联关系 + List orderItemRelation = orderItemMapper.selectList(new LambdaQueryWrapperX() + .eq(OrderItemDO::getOrderId, pageReqVO.getOrderId()) + .inIfPresent(OrderItemDO::getBodyId, bodyIds) + .inIfPresent(OrderItemDO::getGroupId, groupIds) + .in(OrderItemDO::getPlateId, plateIdPageRecords) + .select(OrderItemDO::getPlateId, OrderItemDO::getRoomId, OrderItemDO::getBodyId, OrderItemDO::getCadViewId, OrderItemDO::getGroupId, OrderItemDO::getCompId) + ); + + + // 暂存plateId:set + Map> plateGroupMap = new HashMap<>(); + // 暂存plateId:set + Map> plateCompMap = new HashMap<>(); + + Map plateMap = + ordersViewPlatesPageDOS.stream() + .collect(Collectors.toMap( + OrdersViewPlatesPageDO::getId, + Function.identity(), + (a, b) -> a + )); + + for (OrderItemDO item : orderItemRelation) { + + Long plateId = item.getPlateId(); + + // 累计plateId下group_id + if (item.getGroupId() != null) { + plateGroupMap + .computeIfAbsent(plateId, k -> new HashSet<>()) + .add(item.getGroupId()); + } + + // 累计plateId下comp_id + if (item.getCompId() != null) { + plateCompMap + .computeIfAbsent(plateId, k -> new HashSet<>()) + .add(item.getCompId()); + } + + // 单值字段 + OrdersViewPlatesPageDO plate = plateMap.get(plateId); + if (plate != null) { + plate.setBodyId(item.getBodyId()); + plate.setCadViewId(item.getCadViewId()); + } + } + + // 查询加工组 + Set allGroupIds = plateGroupMap.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 = plateCompMap.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 (Map.Entry entry : plateMap.entrySet()) { + + Long plateId = entry.getKey(); + OrdersViewPlatesPageDO plate = entry.getValue(); + + OrderViewPlatePageRespVO plateRespVO = BeanUtil.copyProperties(plate, OrderViewPlatePageRespVO.class); + + // 用逗号拼接加工组名称 + Set plateGroupIds = plateGroupMap.getOrDefault(plateId, Collections.emptySet()); + List groupNames = plateGroupIds.stream() + .map(groupNameMap::get) + .filter(Objects::nonNull) + .toList(); + + plateRespVO.setProcessGroupName(String.join(",", groupNames)); + + // 用逗号拼接部件组名称 + Set plateCompIds = plateCompMap.getOrDefault(plateId, Collections.emptySet()); + List compNames = plateCompIds.stream() + .map(compNameMap::get) + .filter(Objects::nonNull) + .toList(); + + plateRespVO.setComponentName(String.join(",", compNames)); + + // 匹配房间名、柜体名、图纸id + OrderBodyDO orderBodyDO = bodyIdAndCadViewFileIdMap.get(plate.getBodyId()); + if(ObjectUtil.isNotNull(orderBodyDO)) { + plateRespVO.setBodyName(orderBodyDO.getName()); + plateRespVO.setRoomName(orderBodyDO.getRoomName()); + plateRespVO.setCadViewFileId(orderBodyDO.getCadViewFileId()); + } + + records.add(plateRespVO); + } + return new PageResult<>(records, plateIdPage.getTotal()); } @Override public PageResult getBodyViewPartsPage(OrderCadViewPlatePageReqVO pageReqVO) { Set bodyIds = pageReqVO.getBodyIds(); + Set groupIds = pageReqVO.getGroupIds(); if (CollUtil.isEmpty(bodyIds)) { return new PageResult<>(Collections.emptyList(), 0L); } @@ -870,21 +1009,167 @@ public class PlateServiceImpl implements PlateService { throw new ServiceException(ORDER_BODY_NOT_EXISTS); } + List orderIds = List.of(pageReqVO.getOrderId()); + // 整理出body_id和cad图纸id的关系 Map bodyIdAndCadViewFileIdMap = orderBodyDOList.stream() .filter(item -> item.getCadViewFileId() != null) .collect(Collectors.toMap(OrderBodyDO::getId, OrderBodyDO::getCadViewFileId)); + // 查询配件编号+信息 PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage pageRes = orderItemMapper.selectOrdersViewPartsPage(page, List.of(pageReqVO.getOrderId()), - bodyIds, pageReqVO.getGroupIds(), null, pageReqVO.getName(), false); + IPage pageRes = orderItemMapper.selectOrdersViewPartsIdsPage(page, orderIds, bodyIds, groupIds, null, pageReqVO.getName()); - List records = pageRes.getRecords(); - // cad图纸id赋到每个配件上 - if (CollUtil.isNotEmpty(records)) { - records.forEach(item -> item.setCadViewFileId(bodyIdAndCadViewFileIdMap.get(item.getBodyId()))); + List partsPageRecords = pageRes.getRecords(); + if(CollUtil.isEmpty(partsPageRecords)) { + return new PageResult<>(Collections.emptyList(), 0L); } - return new PageResult<>(BeanUtil.copyToList(records, OrderViewPartPageRespVO.class), pageRes.getTotal()); + + List partsIds = partsPageRecords.stream().map(OrdersViewPartsPageDO::getId).toList(); + + // 查询关联关系 + List 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) + ); + + // 暂存 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<>(); + + 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()); + } + + // comp_id + if (item.getCompId() != null) { + partsCompMap + .computeIfAbsent(pair, k -> new HashSet<>()) + .add(item.getCompId()); + } + + // num 汇总 + if (item.getNum() != null) { + partsNumMap.merge( + pair, + item.getNum(), + Double::sum + ); + } + + 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); + } + + records.add(partRespVO); + } + + return new PageResult<>(records, pageRes.getTotal()); } @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 3cbfd4f02..63d99e9f7 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 @@ -530,6 +530,39 @@ WHERE p.deleted = false + + + + + +