From bca08afedb46c3c1fc7391d7503ba8f3598ba932 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Fri, 17 Apr 2026 17:20:43 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=88=86=E5=A0=86=E6=89=93=E5=8C=85?= =?UTF-8?q?=E6=98=8E=E7=BB=86sql=E8=AF=AD=E5=8F=A5=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8Cmycat=E4=B8=8D=E6=94=AF=E6=8C=81=E7=9A=84=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E6=94=B9=E4=B8=BAjoin=E5=90=8E=E5=9C=A8=E5=86=85?= =?UTF-8?q?=E5=AD=98=E5=88=86=E7=BB=84=EF=BC=9B2=E3=80=81=E5=88=86?= =?UTF-8?q?=E5=A0=86=E6=89=93=E5=8C=85=E8=AE=A2=E5=8D=95=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=94=AF=E6=8C=81=E4=B8=BB=E5=8D=95=E5=B8=A6?= =?UTF-8?q?=E5=AD=90=E5=8D=95=EF=BC=9B3=E3=80=81=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=8E=9F/order/page=E6=8E=A5=E5=8F=A3=EF=BC=8Cwebcad=E6=8B=86?= =?UTF-8?q?=E5=8D=95=E8=AE=A2=E5=8D=95=E5=88=86=E9=A1=B5=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=AD=90=E7=BA=A7=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/manage/pack/PackController.java | 11 - .../manage/pack/vo/OrderPartsRespVO.java | 2 +- .../admin/manage/pack/vo/PackRespVO.java | 13 +- .../manage/pack/vo/PlateDetailsRespVO.java | 2 +- .../query/vo/pack/PackageDetailsRespVO.java | 2 + .../admin/order/OrderController.java | 9 +- .../admin/order/vo/order/OrderRespVO.java | 2 +- .../heapsplit/HeapSplitServiceImpl.java | 148 ++++++- .../service/manage/pack/PackService.java | 4 - .../service/manage/pack/PackServiceImpl.java | 362 +++++++++++++++--- .../resources/mapper/order/OrderMapper.xml | 7 +- .../mapper/orderParts/OrderPartsMapper.xml | 215 +++++------ .../mapper/pack/OrderPackageMapper.xml | 4 +- .../resources/mapper/plate/PlateMapper.xml | 320 ++++++++-------- 14 files changed, 725 insertions(+), 376 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/PackController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/PackController.java index 4b0fd5571..9ee8c7164 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/PackController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/PackController.java @@ -41,17 +41,6 @@ public class PackController { } - - @GetMapping("/getOrderPlate") - @Operation(summary = "查看生产订单对应的没有打包的板材信息") - @Parameter(name = "orderId", description = "订单Id", required = true) - @PreAuthorize("@ss.hasAnyPermissions('manage:pack:export-lost-plate','manage:pack:pack')") - public CommonResult> getOrderPlateList(@Valid @RequestParam("orderId") Long orderId) { - - return success(packService.getOrderPlateList(orderId)); - - } - @PostMapping("/unpack/details") @Operation(summary = "获取订单列表下未打包明细") @Parameter(name = "orderIds", description = "订单ID列表", required = true) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsRespVO.java index 7f095258b..d89f8173d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsRespVO.java @@ -98,7 +98,7 @@ public class OrderPartsRespVO { @Schema(description = "组件名称") private String componentName; - private List processGroupNameList; + private List processGroupNameList; @Schema(description = "加工组") private String processGroup; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackRespVO.java index 021f2b755..630d2f708 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackRespVO.java @@ -17,9 +17,8 @@ public class PackRespVO { @Schema(description = "订单号", example = "7788") private Long id; - @Schema(description = "订单号", example = "7788") - private Long orderId; - + @Schema(description = "父订单号", example = "7788") + private Long parentId; @Schema(description = "包裹ID", example = "7788") private Long packId; @@ -94,10 +93,6 @@ public class PackRespVO { @Schema(description = "待处理量") private Long pendingNum; - - @Schema(description = "订单对应的板材ID集") - private List plateIdList; - - @Schema(description = "订单对应的包裹ID集") - private List packIdList; + @Schema(description = "子订单") + private List child; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PlateDetailsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PlateDetailsRespVO.java index 6b56080d0..447c894e3 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PlateDetailsRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PlateDetailsRespVO.java @@ -143,7 +143,7 @@ public class PlateDetailsRespVO { @Schema(description = "加工组名称集合") - private List processGroupNameList; + private List processGroupNameList; @Schema(description = "开料长") private BigDecimal splitHeight; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/PackageDetailsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/PackageDetailsRespVO.java index a88691bbc..882eb3bb2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/PackageDetailsRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/PackageDetailsRespVO.java @@ -70,6 +70,8 @@ public class PackageDetailsRespVO { @Schema(description = "加工组") private String processGroup; + private List processGroupNameList; + @Schema(description = "备注(板材和配件都要传递)") private String remark; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java index c3d93bbfc..ce4cbf428 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java @@ -140,13 +140,6 @@ public class OrderController { return success(BeanUtils.toBean(orderService.getOrder(id), OrderRespVO.class)); } - @GetMapping("/page") - @Operation(summary = "获得订单分页") - @PreAuthorize("@ss.hasPermission('productManager:List')") - public CommonResult> getOrderPage(@Valid OrderPageReqVO pageReqVO) { - return success(BeanUtils.toBean(orderService.getOrderPage(pageReqVO), OrderRespVO.class)); - } - @GetMapping("/main/page") @Operation(summary = "获得主订单分页") @PreAuthorize("@ss.hasPermission('productManager:List')") @@ -157,7 +150,7 @@ public class OrderController { @GetMapping("/webcad/page") @Operation(summary = "获得订单分页") public CommonResult> webCadGetOrderPage(@Valid OrderPageReqVO pageReqVO) { - return success(BeanUtils.toBean(orderService.getOrderPage(pageReqVO), OrderRespVO.class)); + return success(BeanUtils.toBean(orderService.getMainOrderPage(pageReqVO), OrderRespVO.class)); } // 不做订单是否作废判断 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/OrderRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderRespVO.java index 890cc537d..eed0c3e22 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderRespVO.java @@ -19,7 +19,7 @@ public class OrderRespVO { @Schema(description = "父单号", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("父单号") - private Long parentNo; + private Long parentId; @Schema(description = "源订单号") @ExcelProperty("父单号") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitServiceImpl.java index a55facd20..adde08e2f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitServiceImpl.java @@ -22,7 +22,10 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -194,24 +197,139 @@ public class HeapSplitServiceImpl implements HeapSplitService { // 查询配件 List parts = orderPartsMapper.selectOrdersHeapSplitPartsList(orderIds); - // 根据成倍数量重新赋值柜体名称 - plates.forEach(item -> { - if (item.getMultiNum() != null && item.getMultiNum() > 1 - && item.getMultiSort() != null) { - item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort()); - } - }); - parts.forEach(item -> { - if (item.getMultiNum() != null && item.getMultiNum() > 1 - && item.getMultiSort() != null) { - item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort()); - } - }); - respVO.setPlates(plates); - respVO.setParts(parts); + respVO.setPlates(CollUtil.newArrayList(buildPlateGroup(plates))); + respVO.setParts(CollUtil.newArrayList(buildPartsGroup(parts))); return respVO; } + /** + * 板件分组:加工组 + * + * @param plates + * @return + */ + private Collection buildPlateGroup( List plates){ + Map map = new LinkedHashMap<>(); + + for (PlateDetailsRespVO row : plates) { + + // ===== 1. 组装 唯一key===== + String key = row.getPlateId() + "_" + row.getRoomId() + "_" + row.getBodyId(); + + PlateDetailsRespVO vo = map.computeIfAbsent(key, k -> { + PlateDetailsRespVO newVo = new PlateDetailsRespVO(); + + BeanUtils.copyProperties(row, newVo); + + // ===== 初始化 ===== + newVo.setProcessGroupNameList(new ArrayList<>()); + + return newVo; + }); + + // ===== 2. 收集加工组(允许重复,不去重)===== + if (row.getProcessGroup() != null) { + vo.getProcessGroupNameList().add(row.getProcessGroup()); + } + } + + Collection values = map.values(); + // ===== 3. 转换成逗号字符串 ===== + for (PlateDetailsRespVO vo : values) { + List listGroup = vo.getProcessGroupNameList(); + + // 拼接加工组 + if (listGroup != null && !listGroup.isEmpty()) { + vo.setProcessGroup(String.join(",", listGroup)); + } else { + vo.setProcessGroup(""); + } + + // 可释放内存 + vo.setProcessGroupNameList(null); + + // 成倍编号处理 + if (vo.getMultiNum() > 1) { + vo.setCabinetName( + vo.getCabinetName() + "-" + vo.getMultiSort() + ); + } + } + + return values; + } + + + /** + * 配件分组:加工组、部件(目前是一对一) + * + * @param parts + * @return + */ + private Collection buildPartsGroup(List parts) { + + Map map = new LinkedHashMap<>(); + + for (OrderPartsRespVO row : parts) { + + // ===== 1. 分组 key ===== + String key = row.getPartsId() + + "_" + row.getRoomId() + + "_" + row.getBodyId(); + + OrderPartsRespVO vo = map.computeIfAbsent(key, k -> { + OrderPartsRespVO v = new OrderPartsRespVO(); + BeanUtils.copyProperties(row, v); + + v.setNum(BigDecimal.ZERO); + v.setHeapNum(BigDecimal.ZERO); + v.setProcessGroupNameList(new ArrayList<>()); + return v; + }); + + // ===== 3. num 累加 ===== + if (row.getNum() != null) { + vo.setNum(vo.getNum().add(row.getNum())); + } + + // ===== 4. heapNum 累加 ===== + if (row.getHeapNum() != null) { + vo.setHeapNum(vo.getHeapNum().add(row.getHeapNum())); + } + + // ===== 5. 加工组(允许重复)===== + if (row.getProcessGroup() != null) { + vo.getProcessGroupNameList().add(row.getProcessGroup()); + } + } + + // ===== 7. 收尾处理 ===== + for (OrderPartsRespVO vo : map.values()) { + + // 加工组拼接 + List processGroupNameList = vo.getProcessGroupNameList(); + if (CollUtil.isNotEmpty(processGroupNameList)) { + vo.setProcessGroup(String.join(",", processGroupNameList)); + } else { + vo.setProcessGroup(""); + } + + // 可释放内存 + vo.setProcessGroupNameList(null); + + // ===== multiSort 处理(柜体编号)===== + if (vo.getMultiNum() > 1) { + vo.setCabinetName( + vo.getCabinetName() + "-" + vo.getMultiSort() + ); + } else { + vo.setCabinetName(vo.getCabinetName()); + } + } + + return map.values(); + } + /** * 分堆打包数量 * diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/pack/PackService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/pack/PackService.java index 92af9aa95..c2b346de5 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/pack/PackService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/pack/PackService.java @@ -29,10 +29,6 @@ public interface PackService { PageResult getPageOrderPack(PackageDetailsReqVO reqVO); - - // 查看生产订单对应的板材信息 - List getOrderPlateList(Long orderId); - /** * 拆包 * diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/pack/PackServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/pack/PackServiceImpl.java index e1e4dfe5b..b98b0839b 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/pack/PackServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/pack/PackServiceImpl.java @@ -38,14 +38,19 @@ import com.cf.imes.module.executor.service.ordercomponent.OrderComponentService; import com.cf.imes.module.executor.service.orderitem.OrderItemService; import com.cf.imes.module.executor.service.plate.PlateService; import org.springframework.aop.framework.AopContext; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import jakarta.annotation.Resource; + +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -131,38 +136,6 @@ public class PackServiceImpl implements PackService { } - - - // 查看生产订单对应的板材信息 - @Override - public List getOrderPlateList(Long orderId) { - - // 查询订单对应的板件信息 - List plateDetailsRespVOS = orderPlateMapper.selectOrderNoPackPlateList(orderId, getUserOrganId()); - - if(plateDetailsRespVOS.isEmpty()){ - return new ArrayList<>(); - } - - for (PlateDetailsRespVO plateDetailsRespVO : plateDetailsRespVOS) { - StringBuilder name = new StringBuilder(); - if (!plateDetailsRespVO.getProcessGroupNameList().isEmpty()) { - for (GroupNameList groupNameList : plateDetailsRespVO.getProcessGroupNameList()) { - // 去除最后的逗号 - name.append(groupNameList.getName()).append(","); - - } - name = new StringBuilder(name.substring(0, name.length() - 1)); - } - plateDetailsRespVO.setProcessGroup(name.toString()); - } - - return plateDetailsRespVOS; - - - } - - @Override public List getOrderPack(PackageDetailsReqVO reqVO) { List orderIds = reqVO.getOrderIds(); @@ -924,7 +897,7 @@ public class PackServiceImpl implements PackService { pageReqVO.setAddress(insertSeparator(pageReqVO.getAddress())); - // 查询查询分页 + // 查询主单分页 IPage packRespVOS = ordersMapper.selectOrderIdList(page, pageReqVO, getUserOrganId()); if (CollUtil.isEmpty(packRespVOS.getRecords())) { @@ -933,6 +906,20 @@ public class PackServiceImpl implements PackService { orderIds.addAll(packRespVOS.getRecords().stream().map(PackRespVO::getId).toList()); + // 查询分页下子级 + List childList = ordersMapper.selectList( + new LambdaQueryWrapperX() + .in(OrderDO::getParentId, orderIds) + .eqIfPresent(OrderDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus()) + .ne(OrderDO::getStatus, OrderStatusEnum.EMPTY.getStatus()) + .orderByDesc(OrderDO::getId) + ); + if (CollUtil.isNotEmpty(childList)) { + List childOrdersPackList = BeanUtil.copyToList(childList, PackRespVO.class); + orderIds.addAll(childOrdersPackList.stream().map(PackRespVO::getId).toList()); + packRespVOS.getRecords().addAll(childOrdersPackList); + } + return buildPageResult(orderIds, packRespVOS); } @@ -949,6 +936,7 @@ public class PackServiceImpl implements PackService { if (orderIds.isEmpty()) { return new PageResult<>(); } + List records = packRespVOS.getRecords(); // 查询当前生产的包裹数量 List orderPackNumGroup = orderPackageMapper.selectPackPage(orderIds, getUserOrganId()); @@ -957,20 +945,41 @@ public class PackServiceImpl implements PackService { // 查询当前订单已经打包的板材数量 List orderPackedPlateNumGroup = orderPackageMapper.selectPackPieceCount(orderIds, getUserOrganId()); - for (PackRespVO vosRecord : packRespVOS.getRecords()) { + for (PackRespVO vosRecord : records) { // 板材总数 vosRecord.setTotalPieceCount(vosRecord.getPlateNum().longValue()); // 已打包裹数 - vosRecord.setPackCount(orderPackNumGroup.stream().filter(f -> Objects.equals(f.getOrderId(), vosRecord.getId())).mapToLong(PackRespVO::getPackCount).sum()); + vosRecord.setPackCount(orderPackNumGroup.stream().filter(f -> Objects.equals(f.getId(), vosRecord.getId())).mapToLong(PackRespVO::getPackCount).sum()); // 已打包片数 - vosRecord.setPackPieceCount(orderPackedPlateNumGroup.stream().filter(f -> Objects.equals(f.getOrderId(), vosRecord.getId())).mapToLong(PackRespVO::getPackPieceCount).sum()); + vosRecord.setPackPieceCount(orderPackedPlateNumGroup.stream().filter(f -> Objects.equals(f.getId(), vosRecord.getId())).mapToLong(PackRespVO::getPackPieceCount).sum()); // 待处理量 vosRecord.setPendingNum(vosRecord.getTotalPieceCount() - vosRecord.getPackPieceCount()); } - return new PageResult<>(packRespVOS.getRecords(), packRespVOS.getTotal()); + Map parentMap = new HashMap<>(); + List result = new ArrayList<>(); + + // 1. 把所有 parent 放进 map + for (PackRespVO vo : records) { + if (vo.getParentId() == 0) { + vo.setChild(new ArrayList<>()); + parentMap.put(vo.getId(), vo); + result.add(vo); + } + } + + // 2. 再挂子节点 + for (PackRespVO vo : records) { + if (vo.getParentId() != 0) { + PackRespVO parent = parentMap.get(vo.getParentId()); + if (parent != null) { + parent.getChild().add(vo); + } + } + } + return new PageResult<>(result, Long.valueOf(result.size())); } @@ -1044,24 +1053,138 @@ public class PackServiceImpl implements PackService { // 查询配件 List parts = orderPartsMapper.selectOrdersPartsList(orderIds); - // 根据成倍数量重新赋值柜体名称 - plates.forEach(item -> { - if (item.getMultiNum() != null && item.getMultiNum() > 1 - && item.getMultiSort() != null) { - item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort()); - } - }); - parts.forEach(item -> { - if (item.getMultiNum() != null && item.getMultiNum() > 1 - && item.getMultiSort() != null) { - item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort()); - } - }); - ordersUnpackDetailRespVO.setPlates(plates); - ordersUnpackDetailRespVO.setParts(parts); + ordersUnpackDetailRespVO.setPlates(CollUtil.newArrayList(buildPlateGroup(plates))); + ordersUnpackDetailRespVO.setParts(CollUtil.newArrayList(buildPartsGroup(parts))); return ordersUnpackDetailRespVO; } + /** + * 板件分组:加工组 + * + * @param plates + * @return + */ + private Collection buildPlateGroup(List plates) { + Map map = new LinkedHashMap<>(); + + for (PlateDetailsRespVO row : plates) { + + // ===== 1. 组装 唯一key===== + String key = row.getPlateId() + "_" + row.getRoomId() + "_" + row.getBodyId(); + + PlateDetailsRespVO vo = map.computeIfAbsent(key, k -> { + PlateDetailsRespVO newVo = new PlateDetailsRespVO(); + + BeanUtils.copyProperties(row, newVo); + + // ===== 初始化 ===== + newVo.setProcessGroupNameList(new ArrayList<>()); + + return newVo; + }); + + // ===== 2. 收集加工组(允许重复,不去重)===== + if (row.getProcessGroup() != null) { + vo.getProcessGroupNameList().add(row.getProcessGroup()); + } + } + + Collection values = map.values(); + // ===== 3. 转换成逗号字符串 ===== + for (PlateDetailsRespVO vo : values) { + List listGroup = vo.getProcessGroupNameList(); + + // 拼接加工组 + if (listGroup != null && !listGroup.isEmpty()) { + vo.setProcessGroup(String.join(",", listGroup)); + } else { + vo.setProcessGroup(""); + } + + // 可释放内存 + vo.setProcessGroupNameList(null); + + // 成倍编号处理 + if (vo.getMultiNum() != null + && vo.getMultiNum() > 1 + && vo.getMultiSort() != null + && vo.getCabinetName() != null) { + + vo.setCabinetName( + vo.getCabinetName() + "-" + vo.getMultiSort() + ); + } + } + + return values; + } + + /** + * 配件分组:加工组、部件(目前是一对一) + * + * @param parts + * @return + */ + private Collection buildPartsGroup(List parts) { + Map map = new LinkedHashMap<>(); + + for (OrderPartsRespVO row : parts) { + + // ===== 1. 组装 唯一key===== + String key = row.getPartsId() + + "_" + row.getRoomId() + + "_" + row.getBodyId(); + + OrderPartsRespVO vo = map.computeIfAbsent(key, k -> { + OrderPartsRespVO newVo = new OrderPartsRespVO(); + + BeanUtils.copyProperties(row, newVo); + + // ===== 初始化 ===== + newVo.setProcessGroupNameList(new ArrayList<>()); + newVo.setNum(BigDecimal.ZERO); + + return newVo; + }); + + // ===== 2. num 累加 ===== + if (row.getNum() != null) { + vo.setNum(vo.getNum().add(row.getNum())); + } + + // ===== 3. 加工组(允许重复)===== + if (row.getProcessGroup() != null) { + vo.getProcessGroupNameList().add(row.getProcessGroup()); + } + } + + Collection values = map.values(); + for (OrderPartsRespVO vo : values) { + + // ===== 加工组拼接 ===== + List processGroupNameList = vo.getProcessGroupNameList(); + if (CollUtil.isNotEmpty(processGroupNameList)) { + vo.setProcessGroup(String.join(",", processGroupNameList)); + } else { + vo.setProcessGroup(null); + } + + // 可释放内存 + vo.setProcessGroupNameList(null); + + // ===== multiSort 处理(柜体编号)===== + if (vo.getMultiNum() > 1) { + vo.setCabinetName( + vo.getCabinetName() + "-" + vo.getMultiSort() + ); + } else { + vo.setCabinetName(vo.getCabinetName()); + } + } + + return values; + } + @Override public List getOrdersPackageDetails(String packageNo) { List orderPackagDONews = orderPackageMapper.selectList(new LambdaQueryWrapper() @@ -1075,16 +1198,135 @@ public class PackServiceImpl implements PackService { List packPlateList = orderPlateMapper.selectPackedPlateList(orderIds, packageNo); // 查询配件 List packPartsList = orderPartsMapper.selectPackedParts(orderIds, packageNo); - packPlateList.addAll(packPartsList); - // 根据成倍数量重新赋值柜体名称 - packPlateList.forEach(item -> { - if (item.getMultiNum() != null && item.getMultiNum() > 1 - && item.getMultiSort() != null) { - item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort()); + Collection resultList = buildPackaPlateGroup(packPlateList); + resultList.addAll(buildPackaPlateGroup(packPartsList)); + return CollUtil.newArrayList(resultList); + } + + /** + * 包裹板件分组:加工组 + * + * @param plates + * @return + */ + private Collection buildPackaPlateGroup(List plates) { + Map map = new LinkedHashMap<>(); + + for (PackageDetailsRespVO row : plates) { + + // ===== 1. 组装 唯一key===== + String key = row.getPlateId() + + "_" + row.getRoomId() + + "_" + row.getBodyId(); + + PackageDetailsRespVO vo = map.computeIfAbsent(key, k -> { + PackageDetailsRespVO newVo = new PackageDetailsRespVO(); + + BeanUtils.copyProperties(row, newVo); + + // ===== 初始化 ===== + newVo.setProcessGroupNameList(new ArrayList<>()); + + return newVo; + }); + + // ===== 2. 收集加工组(允许重复,不去重)===== + if (row.getProcessGroup() != null) { + vo.getProcessGroupNameList().add(row.getProcessGroup()); } - }); - return packPlateList; + } + + Collection values = map.values(); + // ===== 3. 转换成逗号字符串 ===== + for (PackageDetailsRespVO vo : values) { + List listGroup = vo.getProcessGroupNameList(); + + // 拼接加工组 + if (listGroup != null && !listGroup.isEmpty()) { + vo.setProcessGroup(String.join(",", listGroup)); + } else { + vo.setProcessGroup(""); + } + + // 可释放内存 + vo.setProcessGroupNameList(null); + + // 成倍编号处理 + if (vo.getMultiNum() > 1) { + vo.setCabinetName( + vo.getCabinetName() + "-" + vo.getMultiSort() + ); + } + } + + return values; + } + + /** + * 包裹配件分组:加工组、部件(目前是一对一) + * + * @param parts + * @return + */ + private Collection buildPackPartsGroup(List parts) { + Map map = new LinkedHashMap<>(); + + for (PackageDetailsRespVO row : parts) { + + // ===== 1. 组装 唯一key===== + String key = row.getPartsId() + + "_" + row.getRoomId() + + "_" + row.getBodyId(); + + PackageDetailsRespVO vo = map.computeIfAbsent(key, k -> { + PackageDetailsRespVO newVo = new PackageDetailsRespVO(); + + BeanUtils.copyProperties(row, newVo); + + // ===== 初始化 ===== + newVo.setProcessGroupNameList(new ArrayList<>()); + newVo.setPackNum(BigDecimal.ZERO); + + return newVo; + }); + + // ===== 2. num 累加 ===== + if (row.getPackNum() != null) { + vo.setPackNum(vo.getPackNum().add(row.getPackNum())); + } + + // ===== 3. 加工组(允许重复)===== + if (row.getProcessGroup() != null) { + vo.getProcessGroupNameList().add(row.getProcessGroup()); + } + } + + Collection values = map.values(); + for (PackageDetailsRespVO vo : values) { + + // ===== 加工组拼接 ===== + List processGroupNameList = vo.getProcessGroupNameList(); + if (CollUtil.isNotEmpty(processGroupNameList)) { + vo.setProcessGroup(String.join(",", processGroupNameList)); + } else { + vo.setProcessGroup(null); + } + + // 可释放内存 + vo.setProcessGroupNameList(null); + + // ===== multiSort 处理(柜体编号)===== + if (vo.getMultiNum() > 1) { + vo.setCabinetName( + vo.getCabinetName() + "-" + vo.getMultiSort() + ); + } else { + vo.setCabinetName(vo.getCabinetName()); + } + } + + return values; } @Override diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml index 82bcbb5b5..a261bd720 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml @@ -485,7 +485,8 @@ - + + @@ -542,7 +543,8 @@ select - id as orderNo, + id, + parent_id as parentId, custom_order_no as customOrderNo, dealer as dealer, dealer_phone_number as dealerPhoneNumber, @@ -564,6 +566,7 @@ organ_id =#{organId} and deleted = false and status in (1,2,3,4) + and parent_id = 0 and id like concat('%', #{pageReqVO.orderId},'%') diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml index 743ef86d9..eb6336028 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml @@ -298,18 +298,23 @@ parameterType="java.lang.Long" resultMap="partsMap"> SELECT - t.room_name AS roomName, - t.body_name AS bodyName, - t.room_id AS roomId, - t.body_id AS bodyId, - t.group_names AS groupName, - t.component_names AS componentName, - t.pack_num AS packNum, - t.package_id AS packageId, - t.multiNum AS multiNum, - t.multiSort AS multiSort, - op.id AS partsId, - op.order_id AS orderId, + ob.room_name AS roomName, + ob.name AS bodyName, + ob.room_id AS roomId, + ob.id AS bodyId, + + og.name AS groupName, + oc.name AS componentName, + + oi.pack_num AS packNum, + oi.package_id AS packageId, + + ob.multi_num AS multiNum, + ob.multi_sort AS multiSort, + + op.id AS partsId, + op.order_id AS orderId, + op.name, op.model, op.spec, @@ -317,50 +322,48 @@ op.brand, op.factory, op.remark, - op.color AS partsColor, - op.width AS partsWidth, - op.length AS partsLength, - op.thickness AS partsThickness, + op.color AS partsColor, + op.width AS partsWidth, + op.length AS partsLength, + op.thickness AS partsThickness, op.category, op.subparts, op.type - FROM order_parts op - JOIN ( - SELECT - oi.parts_id, - oi.package_id, - oi.room_id, - oi.body_id, - GROUP_CONCAT(og.name SEPARATOR ',') AS group_names, - MIN(oc.name) AS component_names, - MIN(ob.room_name) AS room_name, - MIN(ob.name) AS body_name, - SUM(oi.pack_num) AS pack_num, - MIN(ob.multi_num) AS multiNum, - MIN(ob.multi_sort) AS multiSort + FROM order_item oi + + JOIN order_parts op + ON oi.parts_id = op.id + AND oi.organ_id = op.organ_id + AND oi.order_id = op.order_id + LEFT JOIN order_group og ON oi.organ_id = og.organ_id AND oi.order_id = og.order_id AND oi.group_id = og.id + LEFT JOIN order_body ob ON oi.organ_id = ob.organ_id AND oi.order_id = ob.order_id AND oi.body_id = ob.id + LEFT JOIN order_component oc ON oi.organ_id = oc.organ_id AND oi.order_id = oc.order_id - AND oc.id = oi.comp_id - WHERE oi.package_id = #{packageNo} + AND oi.comp_id = oc.id + + WHERE + oi.package_id = #{packageNo} AND oi.parts_id != 0 - GROUP BY oi.room_id, oi.body_id, oi.parts_id, oi.package_id - ) t ON t.parts_id = op.id - WHERE op.deleted = false + + AND op.deleted = false AND op.type != '封边条' + AND op.order_id IN #{orderId} + order by partsId @@ -402,17 +405,17 @@ parameterType="java.lang.Long" resultMap="PartsListMap"> SELECT - t.room_name AS roomName, - t.body_name AS bodyName, - t.room_id AS roomId, - t.body_id AS bodyId, - t.group_names AS processGroup, - t.component_names AS componentName, - t.num AS num, - t.multiNum AS multiNum, - t.multiSort AS multiSort, - op.id AS partsId, - op.order_id AS orderId, + ob.room_name AS roomName, + ob.name AS bodyName, + ob.room_id AS roomId, + ob.id AS bodyId, + og.name AS processGroup, + oc.name AS componentName, + (oi.num - oi.pack_num) AS num, + ob.multi_num AS multiNum, + ob.multi_sort AS multiSort, + op.id AS partsId, + op.order_id AS orderId, op.name, op.model, op.spec, @@ -420,71 +423,69 @@ op.brand, op.factory, op.remark, - op.color AS partsColor, - op.width AS partsWidth, - op.length AS partsLength, - op.thickness AS partsThickness, + op.color AS partsColor, + op.width AS partsWidth, + op.length AS partsLength, + op.thickness AS partsThickness, op.category, op.subparts, op.type - FROM order_parts op - JOIN ( - SELECT - oi.parts_id, - oi.room_id, - oi.body_id, - GROUP_CONCAT(og.name SEPARATOR ',') AS group_names, - MIN(oc.name) AS component_names, - MIN(ob.room_name) AS room_name, - MIN(ob.name) AS body_name, - SUM(oi.num - oi.pack_num) AS num, - MIN(ob.multi_num) AS multiNum, - MIN(ob.multi_sort) AS multiSort FROM order_item oi + + JOIN order_parts op + ON oi.parts_id = op.id + LEFT JOIN order_group og ON oi.organ_id = og.organ_id AND oi.order_id = og.order_id AND oi.group_id = og.id + LEFT JOIN order_body ob ON oi.organ_id = ob.organ_id AND oi.order_id = ob.order_id AND oi.body_id = ob.id + LEFT JOIN order_component oc ON oi.organ_id = oc.organ_id AND oi.order_id = oc.order_id - AND oc.id = oi.comp_id + AND oi.comp_id = oc.id + WHERE oi.parts_id != 0 AND oi.package_id = 0 AND oi.source_id = 0 - GROUP BY oi.room_id, oi.body_id, oi.parts_id - ) t ON t.parts_id = op.id - WHERE op.deleted = false + AND op.deleted = false AND op.type != '封边条' AND op.order_id IN #{orderId} - + order by partsId diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml index db1f0ecb1..3d46949f1 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml @@ -5,7 +5,7 @@ parameterType="java.util.List" resultType="com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO"> select - order_id as orderId, + order_id as id, COUNT(*) AS packCount from order_package where @@ -26,7 +26,7 @@ resultType="com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO"> select - op.order_id as orderId, + op.order_id as id, COUNT(DISTINCT oi.plate_id) AS packPieceCount from order_package op left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.package_no = oi.package_id diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml index 3e58c2ba8..911c9be59 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml @@ -814,28 +814,32 @@ parameterType="java.lang.Long" resultMap="PlateDetailsMap"> SELECT - t.group_names AS processGroup, - t.component_names AS componentName, - t.room_name AS roomName, - t.body_name AS bodyName, - t.room_id AS roomId, - t.body_id AS bodyId, - t.multi_num AS multiNum, - t.multi_sort AS multiSort, - op.id AS plateId, - op.plate_no AS plateNo, - op.custom_plate_no AS customPlateNo, - op.name AS plateName, - ogs.material AS plateMaterial, - ogs.color AS plateColor, - ogs.brand AS brand, - op.order_id AS orderId, - op.height AS plateHeight, - op.width AS plateWidth, - op.thickness AS plateThickness, - op.area AS plateArea, + og.name AS processGroup, + oc.name AS componentName, + + ob.room_name AS roomName, + ob.name AS bodyName, + ob.room_id AS roomId, + ob.id AS bodyId, + ob.multi_num AS multiNum, + ob.multi_sort AS multiSort, + + op.id AS plateId, + op.plate_no AS plateNo, + op.custom_plate_no AS customPlateNo, + op.name AS plateName, + ogs.material AS plateMaterial, + ogs.color AS plateColor, + ogs.brand AS brand, + op.order_id AS orderId, + + op.height AS plateHeight, + op.width AS plateWidth, + op.thickness AS plateThickness, + op.area AS plateArea, op.texture, op.remark, + op.is_special_shaped AS specialShaped, op.is_sculpt AS profiling, op.is_row_hole AS rowHole, @@ -852,212 +856,224 @@ op.seal_right AS sealRight, op.seal_up AS sealUp, op.seal_down AS sealDown + FROM order_plate op + LEFT JOIN order_goods ogs ON op.organ_id = ogs.organ_id AND op.order_id = ogs.order_id AND op.goods_id = ogs.id - JOIN ( - SELECT - oi.plate_id, - oi.room_id, - oi.body_id, - GROUP_CONCAT(og.name SEPARATOR ',') AS group_names,-- 聚合加工组 - MIN(oc.name) AS component_names, - MIN(ob.room_name) AS room_name, - MIN(ob.name) AS body_name, - MIN(ob.multi_num) AS multi_num, - MIN(ob.multi_sort) AS multi_sort - FROM order_item oi + + JOIN order_item oi + ON oi.organ_id = op.organ_id + AND oi.order_id = op.order_id + AND oi.plate_id = op.id + LEFT JOIN order_group og ON oi.organ_id = og.organ_id AND oi.order_id = og.order_id AND oi.group_id = og.id + LEFT JOIN order_body ob ON oi.organ_id = ob.organ_id AND oi.order_id = ob.order_id AND oi.body_id = ob.id + LEFT JOIN order_component oc ON oi.organ_id = oc.organ_id AND oi.order_id = oc.order_id - AND oc.id = oi.comp_id - WHERE oi.plate_id != 0 - AND oi.package_id = 0 - GROUP BY oi.plate_id, room_id, body_id - ) t ON t.plate_id = op.id - WHERE op.deleted = false - AND op.order_id IN + AND oi.comp_id = oc.id + + WHERE + op.deleted = false + AND op.order_id in #{orderId} + + AND oi.plate_id != 0 + AND oi.package_id = 0 + AND oi.organ_id = 1 + order by plateId