From ce24ef2db084083bf6737beed1a9e09196061009 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 24 Jun 2026 15:19:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=A0=86=E6=89=93=E5=8C=85=20?= =?UTF-8?q?=E9=85=8D=E4=BB=B6=E5=A4=9A=E5=8A=A0=E5=B7=A5=E7=BB=84/?= =?UTF-8?q?=E9=83=A8=E4=BB=B6=E7=BB=84=E5=B1=95=E7=A4=BA=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/pack/vo/OrderPartsRespVO.java | 4 + .../query/vo/pack/PackageDetailsRespVO.java | 6 +- .../mysql/orderParts/OrderPartsMapper.java | 9 ++ .../heapsplit/HeapSplitServiceImpl.java | 24 ++++- .../service/manage/pack/PackServiceImpl.java | 96 ++++++++++++++----- .../mapper/orderParts/OrderPartsMapper.xml | 56 ++++++++--- 6 files changed, 152 insertions(+), 43 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/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 d89f8173d..a97057548 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,11 +98,15 @@ public class OrderPartsRespVO { @Schema(description = "组件名称") private String componentName; + private List componentNameList; + private List processGroupNameList; @Schema(description = "加工组") private String processGroup; + private Long groupId; + @Schema(description = "分堆状态,true:已分堆") private Boolean heapSplitStatus; 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 49e98e0f1..34c597ad7 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 @@ -75,6 +75,8 @@ public class PackageDetailsRespVO { private List processGroupNameList; + private List componentNameList; + @Schema(description = "备注(板材和配件都要传递)") private String remark; @@ -139,9 +141,7 @@ public class PackageDetailsRespVO { @Schema(description = "柜体ID") private Long bodyId; - - @Schema(description = "加工组-用于计算-不显示") - private List groupId; + private Long groupId; @Schema(description = "正面孔数量") private Integer frontHoleCount; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java index d7bc70a05..81c16bce1 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java @@ -125,6 +125,15 @@ public interface OrderPartsMapper extends BaseMapperX { */ List selectPackedParts(@Param("orderIds") Set orderIds, @Param("packageNo") String packageId); + /** + * 查询包裹配件加工组、部件关联关系 + * + * @param orderIds + * @param partsIds + * @return + */ + List selectPackedPartsGroupAndComponent(@Param("orderIds") Set orderIds, @Param("partsIds") Set partsIds); + /** * 查询订单列表未打包配件 * 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 4553328fd..2f0dbf46c 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 @@ -201,7 +201,11 @@ public class HeapSplitServiceImpl implements HeapSplitService { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(OrderItemDO::getPartsId, partsId); + // 有加工组的扣减groupId = 0的,没加工组的扣减groupId = null && compId = null的 + wrapper.eq(OrderItemDO::getPartsId, partsId) + .and(w -> w.eq(OrderItemDO::getGroupId, 0) + .or(x -> x.isNull(OrderItemDO::getGroupId) + .isNull(OrderItemDO::getCompId))); if (filterHeapSplit) { wrapper.eq(OrderItemDO::getHeapSplitStatus, false); @@ -320,11 +324,13 @@ public class HeapSplitServiceImpl implements HeapSplitService { v.setNum(BigDecimal.ZERO); v.setHeapNum(BigDecimal.ZERO); v.setProcessGroupNameList(new ArrayList<>()); + v.setComponentNameList(new ArrayList<>()); return v; }); // ===== 3. num 累加 ===== - if (row.getNum() != null) { + if (row.getNum() != null && + (ObjectUtil.equals(row.getGroupId(), 0L) || (ObjectUtil.isNull(row.getGroupId()) && ObjectUtil.isNull(row.getComponentName())))) { vo.setNum(vo.getNum().add(row.getNum())); } @@ -337,6 +343,11 @@ public class HeapSplitServiceImpl implements HeapSplitService { if (row.getProcessGroup() != null) { vo.getProcessGroupNameList().add(row.getProcessGroup()); } + + // ===== 6. 部件组(允许重复)===== + if (row.getComponentName() != null) { + vo.getComponentNameList().add(row.getComponentName()); + } } // ===== 7. 收尾处理 ===== @@ -350,8 +361,17 @@ public class HeapSplitServiceImpl implements HeapSplitService { vo.setProcessGroup(""); } + // ===== 部件组拼接 ===== + List componentNameList = vo.getComponentNameList(); + if (CollUtil.isNotEmpty(componentNameList)) { + vo.setComponentName(String.join(",", componentNameList)); + } else { + vo.setComponentName(null); + } + // 可释放内存 vo.setProcessGroupNameList(null); + vo.setComponentNameList(null); // ===== multiSort 处理(柜体编号)===== if (vo.getMultiNum() > 1) { 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 66dde3639..e815fb425 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 @@ -6,6 +6,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -51,6 +52,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -444,7 +446,11 @@ public class PackServiceImpl implements PackService { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(OrderItemDO::getPartsId, partsId); + // 有加工组的扣减groupId = 0的,没加工组的扣减groupId = null && compId = null的 + wrapper.eq(OrderItemDO::getPartsId, partsId) + .and(w -> w.eq(OrderItemDO::getGroupId, 0) + .or(x -> x.isNull(OrderItemDO::getGroupId) + .isNull(OrderItemDO::getCompId))); if (isAdd) { // 新增要查的是没打包的 @@ -640,7 +646,7 @@ public class PackServiceImpl implements PackService { item.setPackNum(item.getPackNum() + remain); orderItemMapper.updateById(item); - // 新建分堆记录 + // 新建打包记录 OrderItemDO newItem = buildPackItem(item, packNo, remain); orderItemMapper.insert(newItem); @@ -1206,13 +1212,15 @@ public class PackServiceImpl implements PackService { // ===== 初始化 ===== newVo.setProcessGroupNameList(new ArrayList<>()); + newVo.setComponentNameList(new ArrayList<>()); newVo.setNum(BigDecimal.ZERO); return newVo; }); // ===== 2. num 累加 ===== - if (row.getNum() != null) { + if (row.getNum() != null && + (ObjectUtil.equals(row.getGroupId(), 0L) || (ObjectUtil.isNull(row.getGroupId()) && ObjectUtil.isNull(row.getComponentName())))) { vo.setNum(vo.getNum().add(row.getNum())); } @@ -1220,6 +1228,11 @@ public class PackServiceImpl implements PackService { if (row.getProcessGroup() != null) { vo.getProcessGroupNameList().add(row.getProcessGroup()); } + + // ===== 4. 部件组(允许重复)===== + if (row.getComponentName() != null) { + vo.getComponentNameList().add(row.getComponentName()); + } } Collection values = map.values(); @@ -1233,8 +1246,17 @@ public class PackServiceImpl implements PackService { vo.setProcessGroup(null); } + // ===== 部件组拼接 ===== + List componentNameList = vo.getComponentNameList(); + if (CollUtil.isNotEmpty(componentNameList)) { + vo.setComponentName(String.join(",", componentNameList)); + } else { + vo.setComponentName(null); + } + // 可释放内存 vo.setProcessGroupNameList(null); + vo.setComponentNameList(null); // ===== multiSort 处理(柜体编号)===== if (vo.getMultiNum() > 1) { @@ -1266,7 +1288,7 @@ public class PackServiceImpl implements PackService { List packPartsList = orderPartsMapper.selectPackedParts(orderIds, packageNo); Collection resultList = buildPackPlateGroup(packPlateList); - resultList.addAll(buildPackPartsGroup(packPartsList)); + resultList.addAll(buildPackPartsGroup(orderIds, packPartsList)); return CollUtil.newArrayList(resultList); } @@ -1335,7 +1357,27 @@ public class PackServiceImpl implements PackService { * @param parts * @return */ - private Collection buildPackPartsGroup(List parts) { + private Collection buildPackPartsGroup(Set orderIds, List parts) { + if (CollUtil.isEmpty(parts)) { + return Collections.emptyList(); + } + + // 提取当前包裹涉及的配件 + Set partsIds = parts.stream() + .map(PackageDetailsRespVO::getPartsId) + .collect(Collectors.toSet()); + + // 查询加工组/组件关系 + List relations = + orderPartsMapper.selectPackedPartsGroupAndComponent(orderIds, partsIds); + Map> relationMap = + relations.stream() + .collect(Collectors.groupingBy(item -> + item.getPartsId() + + "_" + item.getRoomId() + + "_" + item.getBodyId() + )); + Map map = new LinkedHashMap<>(); for (PackageDetailsRespVO row : parts) { @@ -1351,7 +1393,6 @@ public class PackServiceImpl implements PackService { BeanUtils.copyProperties(row, newVo); // ===== 初始化 ===== - newVo.setProcessGroupNameList(new ArrayList<>()); newVo.setPackNum(BigDecimal.ZERO); return newVo; @@ -1361,34 +1402,41 @@ public class PackServiceImpl implements PackService { 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); + String key = vo.getPartsId() + + "_" + vo.getRoomId() + + "_" + vo.getBodyId(); + + List relationList = relationMap.get(key); + + if (CollUtil.isNotEmpty(relationList)) { + + String processGroup = relationList.stream() + .map(PackageDetailsRespVO::getProcessGroup) + .filter(StrUtil::isNotBlank) + .collect(Collectors.joining(",")); + + vo.setProcessGroup(StrUtil.blankToDefault(processGroup, null)); + + String componentName = relationList.stream() + .map(PackageDetailsRespVO::getComponentName) + .filter(StrUtil::isNotBlank) + .collect(Collectors.joining(",")); + + vo.setComponentName(StrUtil.blankToDefault(componentName, null)); } - // 可释放内存 - vo.setProcessGroupNameList(null); + if (ObjectUtil.isNotNull(vo.getMultiNum()) + && vo.getMultiNum() > 1) { - // ===== multiSort 处理(柜体编号)===== - if (vo.getMultiNum() > 1) { vo.setCabinetName( vo.getCabinetName() + "-" + vo.getMultiSort() ); - } else { - vo.setCabinetName(vo.getCabinetName()); } } @@ -1410,7 +1458,7 @@ public class PackServiceImpl implements PackService { List packPlateList = orderPlateMapper.selectPackedPlateList(orderIds, packageNo); Collection resultList = buildPackPlateGroup(packPlateList); - resultList.addAll(buildPackPartsGroup(packPartsList)); + resultList.addAll(buildPackPartsGroup(orderIds, packPartsList)); return CollUtil.newArrayList(resultList); } 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 a042cf320..cb54049ca 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 @@ -303,9 +303,6 @@ 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, @@ -337,21 +334,11 @@ 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 oi.comp_id = oc.id - WHERE oi.package_id = #{packageNo} AND oi.parts_id != 0 @@ -366,7 +353,47 @@ order by partsId + @@ -410,6 +437,7 @@ ob.room_id AS roomId, ob.id AS bodyId, og.name AS processGroup, + oi.group_id AS groupId, oc.name AS componentName, (oi.num - oi.pack_num) AS num, ob.multi_num AS multiNum, @@ -454,7 +482,6 @@ oi.parts_id != 0 AND oi.package_id = 0 AND oi.source_id = 0 - AND (oi.group_id != 0 or oi.group_id is null) AND op.deleted = false AND op.type != '封边条' AND oi.order_id IN @@ -474,6 +501,7 @@ ob.id AS bodyId, oi.heap_split_status AS heapSplitStatus, + oi.group_id AS groupId, og.name AS processGroup, oc.name AS componentName,