From a9170fdbd0beec0ba50c2af7841377e4a8a253f9 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Mon, 10 Aug 2026 17:40:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E6=9C=AA=E6=8E=92?= =?UTF-8?q?=E8=B4=B4=E7=9A=AE=E5=88=97=E8=A1=A8=E8=8E=B7=E5=8F=96=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/veneer/VeneerPlanController.java | 16 +++ .../vo/VeneerPlanNoPlanPlateDataRespVO.java | 27 ++++ .../veneer/vo/VeneerPlanNoPlanPlateReqVO.java | 26 ++++ .../dal/mysql/veneer/VeneerPlanMapper.java | 14 ++ .../service/veneer/VeneerPlanService.java | 10 ++ .../service/veneer/VeneerPlanServiceImpl.java | 70 ++++++++++ .../mapper/veneer/VeneerPlanMapper.xml | 131 ++++++++++++++++++ .../message_errorcode_cht.properties | 2 + .../resources/message_errorcode_en.properties | 2 + .../resources/message_errorcode_zh.properties | 2 + 10 files changed, 300 insertions(+) create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPlanNoPlanPlateDataRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPlanNoPlanPlateReqVO.java diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerPlanController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerPlanController.java index 821d66dfc..f832b914d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerPlanController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerPlanController.java @@ -7,6 +7,8 @@ import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanCreateRe import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPageReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPageRespVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPlateRespVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanNoPlanPlateDataRespVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanNoPlanPlateReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanProduceReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanRemovePlateReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanSortReqVO; @@ -183,6 +185,20 @@ public class VeneerPlanController { return success(veneerPlanService.getPlanPlateList(planId)); } + /** + * 查询指定订单中当前贴皮排单可继续加入的未排贴皮板件。 + * + * @param req 订单ID列表和目标贴皮排单ID + * @return 未排贴皮板件及原板件造型数据 + */ + @PostMapping("/orders/noplan") + @Operation(summary = "获取贴皮排单未排贴皮板件") + @PreAuthorize("@ss.hasPermission('placeorder:query')") + public CommonResult getVeneerPlanNoPlanPlateData( + @Valid @RequestBody VeneerPlanNoPlanPlateReqVO req) { + return success(veneerPlanService.getNoPlanPlateData(req)); + } + /** * 查询未完成开料的贴皮排单优先级列表。 * diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPlanNoPlanPlateDataRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPlanNoPlanPlateDataRespVO.java new file mode 100644 index 000000000..f29f3baca --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPlanNoPlanPlateDataRespVO.java @@ -0,0 +1,27 @@ +package com.cf.imes.module.executor.controller.admin.veneer.vo; + +import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 贴皮排单待选未排板件及造型数据响应。 + */ +@Schema(description = "管理后台 - 贴皮排单待选未排板件数据 Response VO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VeneerPlanNoPlanPlateDataRespVO { + + @Schema(description = "未排贴皮及原板件信息") + private List plateList; + + @Schema(description = "原板件造型信息,按 plateId 与 plateList 关联") + private List plateModels; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPlanNoPlanPlateReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPlanNoPlanPlateReqVO.java new file mode 100644 index 000000000..e41dd1ea7 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPlanNoPlanPlateReqVO.java @@ -0,0 +1,26 @@ +package com.cf.imes.module.executor.controller.admin.veneer.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.util.List; + +/** + * 贴皮排单待选未排板件查询参数。 + */ +@Schema(description = "管理后台 - 贴皮排单待选未排板件查询 Request VO") +@Data +public class VeneerPlanNoPlanPlateReqVO { + + @Schema(description = "订单ID列表", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "{veneer.plan.noplan.order.ids.required}") + @Size(max = 200, message = "{veneer.plan.noplan.order.ids.max}") + private List orderIds; + + @Schema(description = "目标贴皮排单ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{veneer.plan.id.required}") + private Long planId; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/VeneerPlanMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/VeneerPlanMapper.java index 38b19b6ee..f5b148da6 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/VeneerPlanMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/VeneerPlanMapper.java @@ -5,6 +5,7 @@ import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPageReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPageRespVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPlateRespVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.UnplannedVeneerPlateRespVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanSortReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanSortRespVO; import com.cf.imes.module.executor.dal.dataobject.veneer.OrderPlateVeneerDO; @@ -41,6 +42,19 @@ public interface VeneerPlanMapper extends BaseMapperX { */ List selectPlanPlateList(@Param("planId") Long planId); + /** + * 查询指定订单中与目标贴皮排单商品匹配的未排贴皮板件。 + * + * @param orderIds 订单ID列表 + * @param planId 目标贴皮排单ID + * @param organId 组织ID + * @return 未排贴皮板件原始数据 + */ + List selectNoPlanVeneerPlateList( + @Param("orderIds") List orderIds, + @Param("planId") Long planId, + @Param("organId") Long organId); + /** * 查询尚未完成开料的贴皮排单优先级列表。 * diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanService.java index df25e3f78..c4d708d2d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanService.java @@ -6,6 +6,8 @@ import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanCreateRe import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPageReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPageRespVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPlateRespVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanNoPlanPlateDataRespVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanNoPlanPlateReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanProduceReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanRemovePlateReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanSortReqVO; @@ -85,6 +87,14 @@ public interface VeneerPlanService { */ List getPlanPlateList(Long planId); + /** + * 查询指定订单中与目标贴皮排单商品匹配的未排贴皮板件。 + * + * @param req 订单ID列表和目标贴皮排单ID + * @return 未排贴皮板件及原板件造型数据 + */ + VeneerPlanNoPlanPlateDataRespVO getNoPlanPlateData(VeneerPlanNoPlanPlateReqVO req); + /** * 查询未完成开料的贴皮排单优先级列表。 * diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanServiceImpl.java index fffbf8563..45d78e45c 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanServiceImpl.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.json.JsonUtils; import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; @@ -17,6 +18,8 @@ import com.cf.imes.module.executor.controller.admin.plan.vo.PlanOrderRespVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanAddPlateReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanCreateReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanGroupReqVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanNoPlanPlateDataRespVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanNoPlanPlateReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPageReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPageRespVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanPlateRespVO; @@ -26,7 +29,9 @@ import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanSortReqV import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanSortRespVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanUpdateReqVO; import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPlanWithdrawProduceReqVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.UnplannedVeneerPlateRespVO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; +import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.veneer.OrderPlateVeneerDO; import com.cf.imes.module.executor.dal.dataobject.veneer.OrderVeneerGoodsDO; import com.cf.imes.module.executor.dal.dataobject.veneer.OrderVeneerPlanDO; @@ -432,6 +437,71 @@ public class VeneerPlanServiceImpl implements VeneerPlanService { return veneerPlanMapper.selectPlanPlateList(planId); } + @Override + public VeneerPlanNoPlanPlateDataRespVO getNoPlanPlateData( + VeneerPlanNoPlanPlateReqVO req) { + OrderVeneerPlanDO plan = validatePlanExists(req.getPlanId()); + LoginUser loginUser = Objects.requireNonNull(SecurityFrameworkUtils.getLoginUser()); + + // 只查询当前排单贴皮商品对应的未排记录,A/B 面保留为独立记录。 + List rawPlates = + veneerPlanMapper.selectNoPlanVeneerPlateList( + req.getOrderIds(), plan.getId(), loginUser.getOrganId()); + List plates = mergeNoPlanVeneerPlateDetails(rawPlates); + + // 同一原板的 A/B 面共用一份造型数据,通过 plateId 关联,避免重复返回。 + Map modelMap = new LinkedHashMap<>(); + for (UnplannedVeneerPlateRespVO plate : plates) { + if (plate.getPlateId() == null || StrUtil.isBlank(plate.getModelData()) + || modelMap.containsKey(plate.getPlateId())) { + continue; + } + OrderModelDO model = JsonUtils.parseObject(plate.getModelData(), OrderModelDO.class); + if (model != null) { + model.setPlateId(plate.getPlateId()); + modelMap.put(plate.getPlateId(), model); + } + } + + return VeneerPlanNoPlanPlateDataRespVO.builder() + .plateList(plates) + .plateModels(new ArrayList<>(modelMap.values())) + .build(); + } + + /** + * 合并同一贴皮面因多个加工组产生的重复行。 + * + * @param rawPlates SQL 原始查询结果 + * @return 按贴皮分解记录 ID 去重后的结果 + */ + private List mergeNoPlanVeneerPlateDetails( + List rawPlates) { + if (CollUtil.isEmpty(rawPlates)) { + return List.of(); + } + + Map plateMap = new LinkedHashMap<>(); + Map> groupNameMap = new HashMap<>(); + for (UnplannedVeneerPlateRespVO plate : rawPlates) { + if (plate.getId() == null) { + continue; + } + plateMap.putIfAbsent(plate.getId(), plate); + if (StrUtil.isNotBlank(plate.getProcessGroupName())) { + groupNameMap.computeIfAbsent(plate.getId(), key -> new LinkedHashSet<>()) + .add(plate.getProcessGroupName()); + } + } + + plateMap.forEach((id, plate) -> { + Set groupNames = groupNameMap.get(id); + plate.setProcessGroupName(CollUtil.isEmpty(groupNames) + ? null : String.join(",", groupNames)); + }); + return new ArrayList<>(plateMap.values()); + } + @Override public List getPlanSortPage() { return veneerPlanMapper.selectPlanSortList( diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/veneer/VeneerPlanMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/veneer/VeneerPlanMapper.xml index 8feffb6c5..23255022f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/veneer/VeneerPlanMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/veneer/VeneerPlanMapper.xml @@ -2,6 +2,15 @@ + + + + + + + +