From 807082cf0a7b88146607afe32c7a7613bc8ff69a Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Fri, 3 Apr 2026 11:59:36 +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?=E5=B0=81=E5=8C=85=E3=80=81=E4=BF=9D=E5=AD=98=E5=88=86=E5=A0=86?= =?UTF-8?q?=E6=8A=BD=E8=B1=A1=E5=92=8C=E5=A4=8D=E6=9D=82=E5=BA=A6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E5=88=A0=E9=99=A4=E9=85=8D=E4=BB=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=9B2=E3=80=81=E5=88=86=E5=A0=86=E6=89=93?= =?UTF-8?q?=E5=8C=85=E9=83=A8=E5=88=86=E6=8E=A5=E5=8F=A3=E5=85=A5=E5=8F=82?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E4=BC=98=E5=8C=96=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executor/enums/ErrorCodeConstants.java | 10 +- .../enums/OrderPackageMethodEnum.java | 30 + .../admin/manage/pack/PackController.java | 26 +- .../pack/heapsplit/HeapSplitSaveReqVO.java | 8 + .../admin/manage/pack/vo/OrderPackReqVO.java | 12 +- .../admin/manage/pack/vo/OrderPackRespVO.java | 8 - .../admin/manage/pack/vo/OrderPartsReqVO.java | 42 -- .../manage/pack/vo/OrderPartsRespVO.java | 50 +- .../admin/manage/pack/vo/PackReqVO.java | 2 + .../vo/PackScanComponentCorrelationReqVO.java | 8 +- .../manage/pack/vo/PackageDetailsReqVO.java | 3 + .../admin/manage/pack/vo/PackingReqVO.java | 2 +- .../manage/pack/vo/PlateDetailsRespVO.java | 46 +- .../manage/query/vo/pack/OrderPackageVO.java | 2 + .../query/vo/pack/PackageDetailsRespVO.java | 74 +-- .../executor/dal/mysql/order/OrderMapper.java | 8 - .../mysql/orderParts/OrderPartsMapper.java | 2 +- ...atusEnum.java => HeapSplitStatusEnum.java} | 12 +- .../PackScanComponentCorrelationTypeEnum.java | 1 + .../heapsplit/HeapSplitServiceImpl.java | 324 ++++++---- .../service/manage/pack/PackService.java | 41 +- .../service/manage/pack/PackServiceImpl.java | 555 ++++++++---------- .../executor/service/order/OrderService.java | 7 - .../service/order/OrderServiceImpl.java | 5 - .../resources/mapper/order/OrderMapper.xml | 31 - .../mapper/orderParts/OrderPartsMapper.xml | 20 +- .../resources/message_errorcode.properties | 7 +- .../message_errorcode_cht.properties | 7 +- .../resources/message_errorcode_en.properties | 7 +- 29 files changed, 662 insertions(+), 688 deletions(-) create mode 100644 cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/OrderPackageMethodEnum.java delete mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsReqVO.java rename cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/heapsplit/{HeapSplitTaskStatusEnum.java => HeapSplitStatusEnum.java} (66%) diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java index f9c1c737f..4b98a0c88 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java @@ -196,9 +196,9 @@ public class ErrorCodeConstants { public static final ErrorCode ORDER_COMPONENT_NOT_PROCESS = new ErrorCode(1_003_010_006, "order.component.not.process"); public static final ErrorCode ORDER_COMPONENT_RESTORE_REPEAT = new ErrorCode(1_003_010_007, "order.component.restore.repeat"); - //=========== 部件管理 1-003-011-000 ============ - public static final ErrorCode HEAP_SPLIT_TASK_NOT_EXIST = new ErrorCode(1_003_011_000, "heap.split.task.not.exist"); - public static final ErrorCode HEAP_SPLIT_TASK_NAME_EXIST = new ErrorCode(1_003_011_001, "heap.split.task.name.exist"); - public static final ErrorCode HEAP_SPLIT_NO_NEED_RESTART = new ErrorCode(1_003_011_002, "heap.split.no.need.restart"); - public static final ErrorCode HEAP_SPLIT_NEED_RESTART = new ErrorCode(1_003_011_003, "heap.split.need.restart"); + //=========== 分堆打包 1-003-011-000 ============ + public static final ErrorCode PARTS_PACK_NUM_NOT_ENOUGH = new ErrorCode(1_003_010_000, "parts.pack.num.not.enough"); + public static final ErrorCode PARTS_PACK_ITEM_SOURCE_NOT_EXISTS = new ErrorCode(1_003_010_001, "parts.pack.item.source.not.exist"); + public static final ErrorCode PARTS_HEAPSPLIT_NUM_NOT_ENOUGH = new ErrorCode(1_003_010_002, "parts.heapsplit.num.not.enough"); + public static final ErrorCode PARTS_HEAPSPLIT_ITEM_SOURCE_NOT_EXISTS = new ErrorCode(1_003_010_003, "parts.heapsplit.item.source.not.exist"); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/OrderPackageMethodEnum.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/OrderPackageMethodEnum.java new file mode 100644 index 000000000..6d7733ce7 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/OrderPackageMethodEnum.java @@ -0,0 +1,30 @@ +package com.cf.imes.module.executor.enums; + +import com.cf.imes.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 打包配置 - 打包方式枚举 + * + * @author Gqr + * @since 2026/4/1 10:50 + */ +@AllArgsConstructor +@Getter +public enum OrderPackageMethodEnum implements IntArrayValuable { + ROOM_NAME(0), + BODY_NAME(1), + ORDER(2); + + private final int method; + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(OrderPackageMethodEnum::getMethod).toArray(); + + @Override + public int[] array() { + return ARRAYS; + } +} 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 e6e621688..9bc34ac56 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 @@ -7,7 +7,6 @@ import com.cf.imes.module.executor.controller.admin.manage.pack.vo.*; import com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.OrderPackageVO; import com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.PackageDetailsRespVO; import com.cf.imes.module.executor.service.manage.pack.PackService; -import com.cf.imes.module.executor.service.manage.query.ProductionStatusService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -33,9 +32,6 @@ public class PackController { @Resource private PackService packService; - @Resource - private ProductionStatusService productionStatusService; - @GetMapping("/page") @Operation(summary = "打包分页查询") @PreAuthorize("@ss.hasPermission('manage:pack:query')") @@ -65,27 +61,35 @@ public class PackController { @PostMapping("/getOrderPack") - @Operation(summary = "查看生产订单对应的包裹信息-未分页") + @Operation(summary = "查看订单列表对应的包裹列表") @PreAuthorize("@ss.hasAnyPermissions('manage:pack:export-pack-num','manage:pack:pack')") public CommonResult> getOrderPack(@Valid @RequestBody PackageDetailsReqVO reqVO) { return success(packService.getOrderPack(reqVO)); } @GetMapping("/packageDetails/{packageNo}") - @Operation(summary = "查询包裹的详细信息") + @Operation(summary = "查询包裹编号对应的包裹中的明细") + @Parameter(name = "packageNo", description = "包裹编号", required = true) @PreAuthorize("@ss.hasAnyPermissions('manage:pack:pack-details','manage:pack:query')") - public CommonResult> queryPackageDetails(@PathVariable String packageNo){ - return success(packService.getPackageDetails(packageNo)); + public CommonResult> queryOrdersPackageDetails(@PathVariable String packageNo){ + return success(packService.getOrdersPackageDetails(packageNo)); + } + + @GetMapping("/packageDetails/{orderId}/{packageNo}") + @Operation(summary = "查询订单编号下对应包裹编号的包裹中的明细") + @Parameter(name = "orderId", description = "订单编号", required = true) + @Parameter(name = "packageNo", description = "包裹编号", required = true) + @PreAuthorize("@ss.hasAnyPermissions('manage:pack:pack-details','manage:pack:query')") + public CommonResult> queryOrderPackageDetails(@PathVariable Long orderId, @PathVariable String packageNo) { + return success(packService.getOrderPackageDetails(orderId, packageNo)); } - @GetMapping("/getPageOrderPack") + @PostMapping("/getPageOrderPack") @Operation(summary = "查看生产订单对应的包裹信息-分页") @PreAuthorize("@ss.hasPermission('manage:pack:pack-details')") public CommonResult> getPageOrderPack(@Valid PackageDetailsReqVO reqVO) { - return success(packService.getPageOrderPack(reqVO)); - } @PutMapping("/updatePack") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/HeapSplitSaveReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/HeapSplitSaveReqVO.java index ec15fe34c..19b7a08c6 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/HeapSplitSaveReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/HeapSplitSaveReqVO.java @@ -1,7 +1,10 @@ package com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit; +import com.cf.imes.framework.common.validation.InEnum; import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackagePartsSaveReqVO; +import com.cf.imes.module.executor.enums.OrderPackageMethodEnum; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Size; import lombok.Data; import java.util.ArrayList; @@ -29,5 +32,10 @@ public class HeapSplitSaveReqVO { private List delParts = new ArrayList<>(); @Schema(description = "订单id列表") + @Size(min = 1, max = 100, message = "订单号列表不能为空且长度不能超过100") private List orderIds = new ArrayList<>(); + + @Schema(description = "打包方式:0柜名、1房名、2订单") + @InEnum(OrderPackageMethodEnum.class) + private Integer packMethod; } 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/OrderPackReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackReqVO.java index 0ead1470b..a8fdd9326 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackReqVO.java @@ -1,11 +1,12 @@ package com.cf.imes.module.executor.controller.admin.manage.pack.vo; +import com.cf.imes.framework.common.validation.InEnum; +import com.cf.imes.module.executor.enums.OrderPackageMethodEnum; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Size; import lombok.Data; import lombok.ToString; -import jakarta.validation.constraints.NotNull; - import java.util.ArrayList; import java.util.List; @@ -14,8 +15,8 @@ import java.util.List; @ToString(callSuper = true) public class OrderPackReqVO { - @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "订单号为空") + @Schema(description = "订单号列表", requiredMode = Schema.RequiredMode.REQUIRED) + @Size(min = 1, max = 100, message = "订单号列表不能为空且长度不能超过100") private List orderIds; @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED) @@ -31,7 +32,8 @@ public class OrderPackReqVO { private List deletePlateIdList = new ArrayList<>(); @Schema(description = "打包方式:0柜名、1房名、2订单") - private Integer packMethod = 1; + @InEnum(OrderPackageMethodEnum.class) + private Integer packMethod; @Schema(description = "新增打包的配件列表") private List addPartsList = new ArrayList<>(); 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/OrderPackRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackRespVO.java index f0f627bc5..f2ceaee9d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackRespVO.java @@ -1,6 +1,5 @@ package com.cf.imes.module.executor.controller.admin.manage.pack.vo; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Data; @@ -12,10 +11,6 @@ import java.util.List; @Data @Builder public class OrderPackRespVO { - - @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED) - private Long id; - @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) private Long orderId; @@ -25,9 +20,6 @@ public class OrderPackRespVO { @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED) private String packageNo; - @Schema(description = "包裹类型,-1未定义,0板材,1配件,2其他配件", requiredMode = Schema.RequiredMode.REQUIRED) - private Integer packageType; - @Schema(description = "包裹名", requiredMode = Schema.RequiredMode.REQUIRED) private String name; 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/OrderPartsReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsReqVO.java deleted file mode 100644 index f29939c60..000000000 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsReqVO.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.cf.imes.module.executor.controller.admin.manage.pack.vo; - - -import com.alibaba.excel.annotation.ExcelProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.ToString; - -import jakarta.validation.constraints.NotNull; -import java.util.List; - -@Schema(description = "管理后台 - 订单模块表 Request VO") -@Data -//@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class OrderPartsReqVO /*extends PageParam*/ { - - - @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) -// @NotNull(message = "订单号为空") - private Long orderId; - - private List orderIds; - - - @Schema(description = "更新配件时传-包裹ID") - private Long packId; - - - @Schema(description = "新增的配件ID") - private List addPartsIdList; - - - @Schema(description = "更新配件时传-删除的配件ID") - private List deletePartsIdList; - - - @Schema(description = "新增的板件ID") - private List addPlateIdList; - - -} 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 309de53b4..58a472c34 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 @@ -2,6 +2,7 @@ package com.cf.imes.module.executor.controller.admin.manage.pack.vo; import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,84 +11,85 @@ import java.util.List; @Schema(description = "管理后台 - 配件列表详情 Response VO") @Data +@JsonInclude(JsonInclude.Include.NON_NULL) public class OrderPartsRespVO { - @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "包裹ID") private Long packageId; @Schema(description = "订单ID") private Long orderId; - @Schema(description = "包裹号", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "包裹号") private String packageNo; - @Schema(description = "房间名称", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "房间名称") @ExcelProperty("房间名称") private String roomName; - @Schema(description = "柜体名称", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "柜体名称") @ExcelProperty("柜体名称") private String cabinetName; - @Schema(description = "房间ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "房间ID") private String roomId; - @Schema(description = "柜体ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "柜体ID") private String bodyId; - @Schema(description = "配件ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件ID") private Long partsId; - @Schema(description = "配件名称", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件名称") private String name; - @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "型号") private String model; - @Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "规格") private String spec; - @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "数量") private BigDecimal num; - @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "单位") private String unit; - @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "品牌") private String brand; - @Schema(description = "厂家", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "厂家") private String factory; - @Schema(description = "配件类型", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件类型") private String type; - @Schema(description = "是否复合配件", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "是否复合配件") private Boolean isComposite; - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "备注") private String remark; - @Schema(description = "配件颜色", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件颜色") private String partsColor; - @Schema(description = "配件宽度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件宽度") private Double partsWidth; - @Schema(description = "配件长度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件长度") private Double partsLength; - @Schema(description = "配件厚度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件厚度") private Double partsThickness; - @Schema(description = "配件主类:1封边2五金3组件", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件主类:1封边2五金3组件") private String category; - @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔") private String subparts; @Schema(description = "数量-用于计算,不显示") @@ -98,7 +100,7 @@ public class OrderPartsRespVO { private List processGroupNameList; - @Schema(description = "加工组", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "加工组") private String processGroup; @Schema(description = "分堆状态,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/PackReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackReqVO.java index 9e3cb93ba..c2ee206bb 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackReqVO.java @@ -2,6 +2,7 @@ package com.cf.imes.module.executor.controller.admin.manage.pack.vo; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.ToString; @@ -15,5 +16,6 @@ public class PackReqVO { private List orderIds; @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "包裹编号不能为空") private Long packageNo; } 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/PackScanComponentCorrelationReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackScanComponentCorrelationReqVO.java index 6a37737f3..92731cbf2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackScanComponentCorrelationReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackScanComponentCorrelationReqVO.java @@ -4,6 +4,8 @@ import com.cf.imes.framework.common.validation.InEnum; import com.cf.imes.module.executor.enums.OrderItemTypeEnum; import com.cf.imes.module.executor.enums.pack.PackScanComponentCorrelationTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.Data; import java.util.List; @@ -20,16 +22,20 @@ public class PackScanComponentCorrelationReqVO { @InEnum(PackScanComponentCorrelationTypeEnum.class) @Schema(description = "扫描类型,0本身、1部件父级、2部件顶级") + @NotNull(message = "扫描类型不能为空") private Integer type; @Schema(description = "扫描本体编号") + @NotNull(message = "扫描本体编号不能为空") private Long id; @InEnum(OrderItemTypeEnum.class) @Schema(description = "扫描本体类型") + @NotNull(message = "扫描本体类型不能为空") private Integer itemType; - @Schema(description = "订单ID列表") + @Schema(description = "订单ID列表", requiredMode = Schema.RequiredMode.REQUIRED) + @Size(max = 100, message = "订单ID列表最大长度为100") private List orderIds; @Schema(description = "是否关联加工组") 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/PackageDetailsReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackageDetailsReqVO.java index 7b4a6081f..8c4403a12 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackageDetailsReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackageDetailsReqVO.java @@ -3,6 +3,7 @@ package com.cf.imes.module.executor.controller.admin.manage.pack.vo; import com.cf.imes.framework.common.pojo.PageParam; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Size; import lombok.Data; import lombok.ToString; import org.hibernate.validator.constraints.Length; @@ -23,6 +24,8 @@ public class PackageDetailsReqVO extends PageParam { @Length(max = 19,message = "订单号长度不能超过 19 位") private String orderId; + @Schema(description = "订单号列表", requiredMode = Schema.RequiredMode.REQUIRED) + @Size(max = 100, message = "订单号列表长度不能超过 100 个") private List orderIds; 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/PackingReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackingReqVO.java index b49f60464..f03c64f56 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackingReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackingReqVO.java @@ -14,7 +14,7 @@ public class PackingReqVO { @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "包裹异常,请查看是否封包") + @NotNull(message = "包裹编号不能为空,请查看是否封包") private Long packageNo; 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 a9d7bbf16..fa374ac86 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 @@ -17,88 +17,88 @@ import java.util.List; @JsonInclude(JsonInclude.Include.NON_NULL) public class PlateDetailsRespVO { - @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "包裹ID") private Long packageId; - @Schema(description = "包裹号", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "包裹号") private String packageNo; - @Schema(description = "房间名称", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "房间名称") @ExcelProperty("房间名称") private String roomName; - @Schema(description = "柜体名称", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "柜体名称") @ExcelProperty("柜体名称") private String cabinetName; - @Schema(description = "房间ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "房间ID") private String roomId; - @Schema(description = "柜体ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "柜体ID") private String bodyId; - @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "订单ID") private String orderId; - @Schema(description = "板材ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "板材ID") private String plateId; - @Schema(description = "自定义板编号", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "自定义板编号") private String customPlateNo; - @Schema(description = "板编号", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "板编号") @ExcelProperty("板编号") private String plateNo; - @Schema(description = "板名称", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "板名称") @ExcelProperty("板名称") private String plateName; - @Schema(description = "材料", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "材料") @ExcelProperty("材料") private String material; - @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "颜色") @ExcelProperty("颜色") private String color; - @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "宽度") @ExcelProperty("宽度") private Double width; - @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "长度") @ExcelProperty("长度") private Double height; - @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "厚度") @ExcelProperty("厚度") private Double thickness; - @Schema(description = "面积", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "面积") @ExcelProperty("面积") private Double area; - @Schema(description = "纹路", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "纹路") @ExcelProperty("纹路") private Integer texture; - @Schema(description = "异形", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "异形") @ExcelProperty("异形") private Boolean specialShaped; - @Schema(description = "正反面造型", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "正反面造型") @ExcelProperty("正反面造型") private Boolean profiling; - @Schema(description = "排孔", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "排孔") @ExcelProperty("排孔") private Boolean rowHole; - @Schema(description = "加工组", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "加工组") @ExcelProperty("加工组") private String processGroup; - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "备注") @ExcelProperty("备注") 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/manage/query/vo/pack/OrderPackageVO.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/OrderPackageVO.java index c99ec6f68..3c5865681 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/OrderPackageVO.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/OrderPackageVO.java @@ -1,6 +1,7 @@ package com.cf.imes.module.executor.controller.admin.manage.query.vo.pack; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,6 +9,7 @@ import java.time.LocalDateTime; @Schema(description = "管理后台 - 订单包裹表 Response VO") @Data +@JsonInclude(JsonInclude.Include.NON_NULL) public class OrderPackageVO { 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 ad5b88685..38a3fb444 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 @@ -13,112 +13,112 @@ import java.util.List; @JsonInclude(JsonInclude.Include.NON_NULL) public class PackageDetailsRespVO { - @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "包裹ID") private Long packageNo; - @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "订单ID") private Long orderId; - @Schema(description = "房间名称-板材类型显示", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "房间名称-板材类型显示") private String roomName; - @Schema(description = "柜体名称", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "柜体名称") private String cabinetName; - @Schema(description = "板材ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "板材ID") private Long plateId; - @Schema(description = "板编号", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "板编号") private String plateNo; - @Schema(description = "自定义板编号", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "自定义板编号") private String customPlateNo; - @Schema(description = "板名称", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "板名称") private String plateName; - @Schema(description = "材料", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "材料") private String material; - @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "颜色") private String color; - @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "宽度") private Double width; - @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "长度") private Double height; - @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "厚度") private Double thickness; - @Schema(description = "面积", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "面积") private Double area; - @Schema(description = "纹路", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "纹路") private String texture; - @Schema(description = "是否异型", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "是否异型") private Boolean specialShaped; - @Schema(description = "是否造型", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "是否造型") private Boolean profiling; - @Schema(description = "是否有孔", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "是否有孔") private Boolean rowHole; - @Schema(description = "加工组", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "加工组") private String processGroup; - @Schema(description = "备注(板材和配件都要传递)", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "备注(板材和配件都要传递)") private String remark; - @Schema(description = "配件名称-配件类型显示", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件名称-配件类型显示") private String partsName; - @Schema(description = "配件ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件ID") private Long partsId; - @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "型号") private String model; - @Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "规格") private String spec; - @Schema(description = "明细配件类型, 2 五金/配件 3 其他 4 报价配件", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "明细配件类型, 2 五金/配件 3 其他 4 报价配件") private String type; - @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED) - private BigDecimal num; + @Schema(description = "数量") + private BigDecimal packNum; - @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "单位") private String unit; - @Schema(description = "是否复合部件:0 否 1 是", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "是否复合部件:0 否 1 是") private Boolean isComposite; - @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "品牌") private String brand; - @Schema(description = "厂家", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "厂家") private String factory; - @Schema(description = "配件颜色", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件颜色") private String partsColor; - @Schema(description = "配件宽度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件宽度") private Double partsWidth; - @Schema(description = "配件长度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件长度") private Double partsLength; - @Schema(description = "配件厚度", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件厚度") private Double partsThickness; - @Schema(description = "配件主类:1封边2五金3组件", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "配件主类:1封边2五金3组件") private String category; - @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔") private String subparts; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java index 1af0d93cf..f1371d1ca 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java @@ -35,7 +35,6 @@ import java.time.LocalTime; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * 订单表 order_{N} Mapper @@ -320,11 +319,4 @@ public interface OrderMapper extends BaseMapperX { * @return */ OrderPlateNumAndAreaDO selectPlateNumAndArea(@Param("orderId") Long orderId); - - /** - * 更新订单打包状态 - * - * @param orderIds - */ - void updateOrdersPackageStatus(@Param("orderIds") List orderIds); } 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 120815e75..4a0acafce 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 @@ -134,7 +134,7 @@ public interface OrderPartsMapper extends BaseMapperX { List selectOrdersPartsList(@Param("orderIds") List orderIds); /** - * 查询订单列表未打包配件 + * 查询订单列表分堆配件 * * @param orderIds * @return diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/heapsplit/HeapSplitTaskStatusEnum.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/heapsplit/HeapSplitStatusEnum.java similarity index 66% rename from cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/heapsplit/HeapSplitTaskStatusEnum.java rename to cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/heapsplit/HeapSplitStatusEnum.java index 13d5b5e21..4ab5aa35d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/heapsplit/HeapSplitTaskStatusEnum.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/heapsplit/HeapSplitStatusEnum.java @@ -4,23 +4,23 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; /** - * 分堆任务状态枚举 + * 分堆状态枚举 * * @author Gqr * @since 2026/3/11 10:35 */ @RequiredArgsConstructor @Getter -public enum HeapSplitTaskStatusEnum { +public enum HeapSplitStatusEnum { /** - * 未完成 + * 未分堆 */ - UNFINISHED(0), + NO(0), /** - * 已完成 + * 已分堆 */ - FINISHED(1); + YES(1); private final int status; } \ 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/enums/pack/PackScanComponentCorrelationTypeEnum.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/pack/PackScanComponentCorrelationTypeEnum.java index 149ae9586..8a3d50cde 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/pack/PackScanComponentCorrelationTypeEnum.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/pack/PackScanComponentCorrelationTypeEnum.java @@ -19,6 +19,7 @@ public enum PackScanComponentCorrelationTypeEnum implements IntArrayValuable { * 本身 */ SELF(0), + /** * 部件父级 */ 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 a8a68b994..80267f24b 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 @@ -1,5 +1,6 @@ package com.cf.imes.module.executor.service.heapsplit; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -13,6 +14,8 @@ import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper; import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper; import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper; +import com.cf.imes.module.executor.enums.OrderPackageMethodEnum; +import com.cf.imes.module.executor.enums.heapsplit.HeapSplitStatusEnum; import jakarta.annotation.Resource; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -22,9 +25,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.function.Function; import java.util.stream.Collectors; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PARTS_HEAPSPLIT_NUM_NOT_ENOUGH; + /** * 分堆 ServiceImpl 接口实现类 * @@ -46,16 +50,18 @@ public class HeapSplitServiceImpl implements HeapSplitService { @Override @Transactional(rollbackFor = Exception.class) public void saveHeapsplit(HeapSplitSaveReqVO reqVO) { + Integer packMethod = reqVO.getPackMethod(); + List orderIds = reqVO.getOrderIds(); // 更新板件分堆状态 List plateIds = reqVO.getPlateIds(); if (CollUtil.isNotEmpty(plateIds)) { List> platePartitions = CollUtil.split(plateIds, 1000); for (List batch : platePartitions) { orderItemMapper.update(new LambdaUpdateWrapper() - .in(OrderItemDO::getOrderId, reqVO.getOrderIds()) + .in(OrderItemDO::getOrderId, orderIds) .in(OrderItemDO::getPlateId, batch) - .eq(OrderItemDO::getHeapSplitStatus, 0) - .set(OrderItemDO::getHeapSplitStatus, 1)); + .eq(OrderItemDO::getHeapSplitStatus, HeapSplitStatusEnum.NO.getStatus()) + .set(OrderItemDO::getHeapSplitStatus, HeapSplitStatusEnum.YES.getStatus())); } } @@ -65,60 +71,122 @@ public class HeapSplitServiceImpl implements HeapSplitService { List> delPlatePartitions = CollUtil.split(delPlateIds, 1000); for (List batch : delPlatePartitions) { orderItemMapper.update(new LambdaUpdateWrapper() - .in(OrderItemDO::getOrderId, reqVO.getOrderIds()) + .in(OrderItemDO::getOrderId, orderIds) .in(OrderItemDO::getPlateId, batch) - .eq(OrderItemDO::getHeapSplitStatus, 1) - .set(OrderItemDO::getHeapSplitStatus, 0)); - } - } - - // 更新配件分堆状态 - List parts = reqVO.getParts(); - Map> groupMap = - parts.stream().collect(Collectors.groupingBy(PackagePartsSaveReqVO::getBodyId)); - - for (Map.Entry> entry : groupMap.entrySet()) { - Long bodyId = entry.getKey(); - List partsList = entry.getValue(); - - for (PackagePartsSaveReqVO partsSaveReqVO : partsList) { - Long partsId = partsSaveReqVO.getPartsId(); - Integer num = partsSaveReqVO.getNum(); - // partsId下的所有明细,基于num正序,优先分堆数量小的 - List orderItemDOS = orderItemMapper.selectList(new LambdaQueryWrapper() - .eq(OrderItemDO::getPartsId, partsId) - .in(OrderItemDO::getOrderId, reqVO.getOrderIds()) - .eq(OrderItemDO::getBodyId, bodyId) - .eq(OrderItemDO::getHeapSplitStatus, false) - .orderByAsc(OrderItemDO::getNum)); - - allocateSingleGroup(orderItemDOS, num); + .eq(OrderItemDO::getHeapSplitStatus, HeapSplitStatusEnum.YES.getStatus()) + .set(OrderItemDO::getHeapSplitStatus, HeapSplitStatusEnum.NO.getStatus())); } } // 删除配件分堆状态 - List delParts = reqVO.getDelParts(); - Map> delGroupMap = - delParts.stream().collect(Collectors.groupingBy(PackagePartsSaveReqVO::getBodyId)); - for (Map.Entry> entry : delGroupMap.entrySet()) { - Long bodyId = entry.getKey(); - List partsList = entry.getValue(); + processParts(reqVO.getDelParts(), packMethod, orderIds, false); + // 更新配件分堆状态 + processParts(reqVO.getParts(), packMethod, orderIds, true); + } - for (PackagePartsSaveReqVO partsSaveReqVO : partsList) { - Long partsId = partsSaveReqVO.getPartsId(); - Integer num = partsSaveReqVO.getNum(); - // partsId下的所有明细,基于num正序,优先分堆数量小的 - List orderItemDOS = orderItemMapper.selectList(new LambdaQueryWrapper() - .eq(OrderItemDO::getPartsId, partsId) - .in(OrderItemDO::getOrderId, reqVO.getOrderIds()) - .eq(OrderItemDO::getBodyId, bodyId) - .orderByAsc(OrderItemDO::getNum)); + /** + * 配件分堆状态和数量处理 + * + * @param list + * @param packMethod + * @param orderIds + * @param isAdd + */ + private void processParts( + List list, + Integer packMethod, + List orderIds, + boolean isAdd) { - restoreGroup(orderItemDOS, num); + if (CollUtil.isEmpty(list)) { + return; + } + + Map> groupMap = + list.stream().collect(Collectors.groupingBy(item -> getGroupKey(item, packMethod))); + + for (Map.Entry> entry : groupMap.entrySet()) { + + Long groupKey = entry.getKey(); + + for (PackagePartsSaveReqVO vo : entry.getValue()) { + + LambdaQueryWrapper wrapper = buildWrapper( + groupKey, + vo.getPartsId(), + packMethod, + orderIds, + isAdd // add才需要heapSplit过滤 + ); + + List orderItemDOS = orderItemMapper.selectList(wrapper); + + if (isAdd) { + allocateGroup(orderItemDOS, vo.getNum()); + } else { + restoreGroup(orderItemDOS); + } } } } + /** + * 分组规则 + * @param item + * @param packMethod + * @return + */ + private Long getGroupKey(PackagePartsSaveReqVO item, Integer packMethod) { + if (ObjectUtil.equals(OrderPackageMethodEnum.ROOM_NAME.getMethod(), packMethod)) { + return item.getRoomId(); + } else if (ObjectUtil.equals(OrderPackageMethodEnum.BODY_NAME.getMethod(), packMethod)) { + return item.getBodyId(); + } else if (ObjectUtil.equals(OrderPackageMethodEnum.ORDER.getMethod(), packMethod)) { + return item.getOrderId(); + } + return 0L; + } + + /** + * 动态构建查询wrapper + * + * @param groupKey + * @param partsId + * @param packMethod + * @param orderIds + * @param filterHeapSplit + * @return + */ + private LambdaQueryWrapper buildWrapper( + Long groupKey, + Long partsId, + Integer packMethod, + List orderIds, + boolean filterHeapSplit) { + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + + wrapper.eq(OrderItemDO::getPartsId, partsId); + + if (filterHeapSplit) { + wrapper.eq(OrderItemDO::getHeapSplitStatus, false); + } + + if (ObjectUtil.equals(OrderPackageMethodEnum.ROOM_NAME.getMethod(), packMethod)) { + wrapper.eq(OrderItemDO::getRoomId, groupKey) + .in(OrderItemDO::getOrderId, orderIds); + } else if (ObjectUtil.equals(OrderPackageMethodEnum.BODY_NAME.getMethod(), packMethod)) { + wrapper.eq(OrderItemDO::getBodyId, groupKey) + .in(OrderItemDO::getOrderId, orderIds); + } else if (ObjectUtil.equals(OrderPackageMethodEnum.ORDER.getMethod(), packMethod)) { + wrapper.eq(OrderItemDO::getOrderId, groupKey); + } + + wrapper.orderByAsc(OrderItemDO::getNum); + + return wrapper; + } + @Override public OrdersHeapSplitDetailRespVO getOrdersHeapSplitedDetail(List orderIds) { OrdersHeapSplitDetailRespVO respVO = new OrdersHeapSplitDetailRespVO(); @@ -127,7 +195,13 @@ public class HeapSplitServiceImpl implements HeapSplitService { return respVO; } - private void allocateSingleGroup(List list, int targetNum) { + /** + * 分堆打包数量 + * + * @param list 同一查询范围的order_parts id相同的orderitem列表 + * @param targetNum 分配目标数 + */ + private void allocateGroup(List list, int targetNum) { int remain = targetNum; @@ -137,7 +211,7 @@ public class HeapSplitServiceImpl implements HeapSplitService { break; } - double current = Optional.ofNullable(item.getNum()).orElse(0.0); + double current = item.getNum() - item.getHeapNum(); if (current <= 0) { continue; } @@ -146,7 +220,7 @@ public class HeapSplitServiceImpl implements HeapSplitService { if (current <= remain) { // 标记分堆 - item.setHeapSplitStatus(1); + item.setHeapSplitStatus(HeapSplitStatusEnum.YES.getStatus()); // 更新分堆数量 item.setHeapNum(current); @@ -159,11 +233,11 @@ public class HeapSplitServiceImpl implements HeapSplitService { // 情况2:> 需要拆分 else { - // 1️⃣ 原记录扣减 - item.setHeapNum(current - remain); + // 1、原记录累加分堆数量 + item.setHeapNum(item.getHeapNum() + remain); orderItemMapper.updateById(item); - // 2️⃣ 新建分堆记录 + // 2、 新建分堆记录 OrderItemDO newItem = buildHeapItem(item, remain); orderItemMapper.insert(newItem); @@ -173,115 +247,113 @@ public class HeapSplitServiceImpl implements HeapSplitService { } if (remain > 0) { - throw new ServiceException(new ErrorCode(10001, "数量不足,剩余未分配:" + remain)); + throw new ServiceException(PARTS_HEAPSPLIT_NUM_NOT_ENOUGH); } } + /** + * 分堆未全覆盖创建item副本 + * + * @param source + * @param heapNum + * @return + */ private OrderItemDO buildHeapItem(OrderItemDO source, double heapNum) { OrderItemDO newItem = new OrderItemDO(); - // 基础字段复制(建议用BeanUtils) + // 字段复制 BeanUtils.copyProperties(source, newItem); newItem.setId(null); // 新ID newItem.setHeapNum(heapNum); // 标记为“已分堆” - newItem.setHeapSplitStatus(1); + newItem.setHeapSplitStatus(HeapSplitStatusEnum.YES.getStatus()); newItem.setSourceId(source.getId()); return newItem; } - private void restoreGroup(List list, int targetNum) { - int remain = targetNum; - - Map originMap = list.stream() - .filter(i -> ObjectUtil.equals(0L, i.getSourceId())) - .collect(Collectors.toMap(OrderItemDO::getId, Function.identity())); + /** + * 还原配件分堆数量 + * + * @param list 同一查询范围的order_parts id相同的orderitem列表 + */ + private void restoreGroup(List list) { List deleteIds = new ArrayList<>(); List updateList = new ArrayList<>(); + List insertList = new ArrayList<>(); - // 1️⃣ 先处理子 item(sourceId != 0) - List subItems = list.stream() - .filter(i -> ObjectUtil.notEqual(0L, i.getSourceId()) - && i.getHeapSplitStatus() == 1) - .toList(); - for (OrderItemDO item : subItems) { + Map> groupMap = list.stream() + .collect(Collectors.groupingBy(i -> + ObjectUtil.equals(0L, i.getSourceId()) ? i.getId() : i.getSourceId() + )); - if (remain <= 0) break; + for (Map.Entry> entry : groupMap.entrySet()) { - double heap = Optional.ofNullable(item.getHeapNum()).orElse(0.0); - if (heap <= 0) continue; + List items = entry.getValue(); - double toRestore = Math.min(heap, remain); + // 找父 + OrderItemDO parent = items.stream() + .filter(i -> ObjectUtil.equals(0L, i.getSourceId())) + .findFirst() + .orElseThrow(() -> new ServiceException(new ErrorCode(10001, "未找到父节点"))); - OrderItemDO origin = originMap.get(item.getSourceId()); - if (origin == null) { - throw new ServiceException(new ErrorCode(10002, "找不到来源原 item")); - } + // 找子 + List subItems = items.stream() + .filter(i -> !ObjectUtil.equals(0L, i.getSourceId())) + .toList(); - // 🔥 从 origin.heapNum 扣减 - double originHeap = Optional.ofNullable(origin.getHeapNum()).orElse(0.0); - origin.setHeapNum(originHeap - toRestore); + double parentHeap = Optional.ofNullable(parent.getHeapNum()).orElse(0.0); + double subTotal = subItems.stream() + .mapToDouble(i -> Optional.ofNullable(i.getHeapNum()).orElse(0.0)) + .sum(); - if (origin.getHeapNum() <= 0) { - origin.setHeapNum(0.0); - origin.setHeapSplitStatus(0); - } - updateList.add(origin); + if (CollUtil.isNotEmpty(subItems)) { + // 有子 + if (ObjectUtil.equals(parent.getHeapSplitStatus(), HeapSplitStatusEnum.YES.getStatus())) { + // 父本身已分堆,则降级成子 + parent.setSourceId(parent.getId()); + updateList.add(parent); + + // 增加一个父,数量是 num-原来的父的已分堆heapNum=现在 + OrderItemDO newBase = new OrderItemDO(); + BeanUtil.copyProperties(parent, newBase); + + newBase.setId(null); + newBase.setSourceId(0L); + newBase.setHeapNum(parent.getNum() - subTotal); + newBase.setHeapSplitStatus(HeapSplitStatusEnum.NO.getStatus()); + insertList.add(newBase); + + } else { + // 本身没分堆,把父的子heapNum扣掉 + parent.setHeapNum(parentHeap - subTotal); + updateList.add(parent); + } + + // 删除原来的子 + deleteIds.addAll(subItems.stream().map(OrderItemDO::getId).toList()); - // 子 item处理 - if (toRestore == heap) { - // 全扣 → 删除 - deleteIds.add(item.getId()); } else { - // 部分扣 → 更新剩余 - item.setHeapNum(heap - toRestore); - updateList.add(item); + // 没有子,分堆了就还原数 + if (ObjectUtil.equals(parent.getHeapSplitStatus(), HeapSplitStatusEnum.YES.getStatus())) { + parent.setHeapNum(0.0); + parent.setHeapSplitStatus(HeapSplitStatusEnum.NO.getStatus()); + updateList.add(parent); + } } - - remain -= toRestore; } - // 2️⃣ 再处理原 item(剩余的 heapNum) - List originItems = originMap.values().stream() - .filter(i -> i.getHeapSplitStatus() == 1) - .toList(); - - for (OrderItemDO item : originItems) { - - if (remain <= 0) break; - - double heap = Optional.ofNullable(item.getHeapNum()).orElse(0.0); - if (heap <= 0) continue; - - double toRestore = Math.min(heap, remain); - - item.setHeapNum(heap - toRestore); - - if (item.getHeapNum() <= 0) { - item.setHeapNum(0.0); - item.setHeapSplitStatus(0); - } - - updateList.add(item); - - remain -= toRestore; - } - - // 3️⃣ 校验 - if (remain > 0) { - throw new ServiceException(new ErrorCode(10003, "还原失败,数量不足,剩余:" + remain)); - } - - // 4️⃣ 批量执行 + // 执行数据库操作 if (!updateList.isEmpty()) { orderItemMapper.updateBatch(updateList); } - + if (!insertList.isEmpty()) { + orderItemMapper.insertBatch(insertList); + } if (!deleteIds.isEmpty()) { orderItemMapper.deleteByIds(deleteIds); } 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 c33760c34..aba51f4c9 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 @@ -30,24 +30,6 @@ public interface PackService { // 查看生产订单对应的板材信息 List getOrderPlateList(Long orderId); - - /** - * 查询订单列表中未打包的板件 - * - * @param orderIds - * @return - */ - List getOrdersPackPlateList(List orderIds); - - /** - * 查询订单列表中未打包的配件 - * - * @param orderIds - * @return - */ - List getOrdersPackPartsList(List orderIds); - - /** * 拆包 * @@ -70,8 +52,11 @@ public interface PackService { List selectPack(Long orderId); - - // 删除包裹及其关联的包裹信息(删除全部) + /** + * 删除包裹 + * + * @param reqVO + */ void deleteOrderPack(PackReqVO reqVO); @@ -94,12 +79,6 @@ public interface PackService { // 查询预打包优化信息 String getPrePackInfo(Long orderId); - /** - * 校验打包状态:已打包的不允许扫描关联 - * @param orderId - */ - void validOrderPackageStatus(Long orderId); - /** * 获取部件关联板件和配件id * @@ -122,5 +101,13 @@ public interface PackService { * @param packageNo * @return */ - List getPackageDetails(String packageNo); + List getOrdersPackageDetails(String packageNo); + + /** + * 获取包裹板件、配件详情 + * + * @param packageNo + * @return + */ + List getOrderPackageDetails(Long orderId, String packageNo); } 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 e2dd66d6c..f0bc11bf9 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 @@ -2,8 +2,8 @@ package com.cf.imes.module.executor.service.manage.pack; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.text.CharSequenceUtil; 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; @@ -16,7 +16,7 @@ import com.cf.imes.framework.common.util.Assert.AssertUtils; import com.cf.imes.framework.common.util.json.JsonUtils; import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd; -import com.cf.imes.framework.mybatis.core.query.QueryWrapperX; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.module.executor.api.plan.OrderPlanApi; import com.cf.imes.module.executor.controller.admin.manage.pack.vo.*; import com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.OrderPackageVO; @@ -35,6 +35,7 @@ import com.cf.imes.module.executor.dal.mysql.pack.OrderPackageMapper; import com.cf.imes.module.executor.dal.mysql.pack.OrderPackageNewMapper; import com.cf.imes.module.executor.dal.mysql.pack.OrderPrepackagedMapper; import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper; +import com.cf.imes.module.executor.enums.OrderPackageMethodEnum; import com.cf.imes.module.executor.enums.pack.PackScanComponentCorrelationTypeEnum; import com.cf.imes.module.executor.service.order.OrderService; import com.cf.imes.module.executor.service.orderParts.OrderPartsService; @@ -57,7 +58,6 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.function.Function; import java.util.stream.Collectors; import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator; @@ -65,12 +65,12 @@ import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.ge import static com.cf.imes.module.executor.enums.ErrorCodeConstants.NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_ALREADY_PACKAGED; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_DATE_ERROR; -import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_NOT_EXISTS; -import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_NO_DATA_ERROR; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_PACK_DATA_ERROR; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_PACK_DATA_NULL_ERROR; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_PACK_ERROR; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_PARTS_NOT_EXISTS; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PARTS_PACK_ITEM_SOURCE_NOT_EXISTS; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PARTS_PACK_NUM_NOT_ENOUGH; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PART_PACK_DATA_ERROR; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLATE_NOT_EXISTS; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.THE_CURRENT_PACKAGE_TYPE_IS_INCORRECT; @@ -176,35 +176,6 @@ public class PackServiceImpl implements PackService { } - @Override - public List getOrdersPackPlateList(List orderIds) { - - List plateDetailsRespVOS = orderPlateMapper.selectOrdersPackPlateList(orderIds); - - if (plateDetailsRespVOS.isEmpty()) { - - return new ArrayList<>(); - } - - return plateDetailsRespVOS; - - - } - - @Override - public List getOrdersPackPartsList(List orderIds) { - - List orderPartsRespVOS = orderPartsMapper.selectOrdersPartsList(orderIds); - - if (orderPartsRespVOS.isEmpty()) { - - return new ArrayList<>(); - } - - return orderPartsRespVOS; - - } - @Override public List getOrderPack(PackageDetailsReqVO reqVO) { @@ -229,13 +200,14 @@ public class PackServiceImpl implements PackService { @Override public PageResult getPageOrderPack(PackageDetailsReqVO reqVO) { - PageDTO page = new PageDTO<>(reqVO.getPageNo(), reqVO.getPageSize()); + PageDTO page = new PageDTO<>(reqVO.getPageNo(), reqVO.getPageSize()); List packId = null; Long orderId = Long.valueOf(reqVO.getOrderId()); - if (reqVO.getPlateNo() != null) { + String packageNo = reqVO.getPackageNo(); + if (CharSequenceUtil.isNotEmpty(packageNo)) { List plateId = orderPlateMapper.selectplateByPlateNoList(reqVO.getPlateNo(), orderId, getUserOrganId()) .stream().map(PlateDO::getId).toList(); @@ -244,32 +216,25 @@ public class PackServiceImpl implements PackService { return null; } - packId = orderItemMapper.selectPackByPlateId(plateId,orderId ,getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList(); + packId = orderItemMapper.selectPackByPlateId(plateId, orderId, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList(); } + IPage orderPackagDONews = orderPackageNewMapper.selectPage(page, new LambdaQueryWrapperX() + .eq(OrderPackagDONew::getOrderId, orderId) + .likeIfPresent(OrderPackagDONew::getPackageNo, packageNo) + .eqIfPresent(OrderPackagDONew::getPackageNo, packId) + .eqIfPresent(OrderPackagDONew::getStatus, reqVO.getPackStatus()) + .orderByDesc(OrderPackagDONew::getCreateTime) + ); - QueryWrapperX queryWrapperX = new QueryWrapperX<>(); - queryWrapperX - .eq("o.organ_id", getUserOrganId()) - .eq("o.deleted", false) - .eq("o.id", reqVO.getOrderId()) - .eq("op.deleted", false) - .likeIfPresent("op.package_no", reqVO.getPackageNo()) - .inIfPresent("op.id", packId) - .eqIfPresent("op.status", reqVO.getPackStatus()) - .orderByDesc("op.create_time"); - - - IPage orderPackageDOIPage = orderPackageMapper.selectByOrderNo(page, queryWrapperX); - - - if (CollUtil.isEmpty(orderPackageDOIPage.getRecords())) { + List records = orderPackagDONews.getRecords(); + if (CollUtil.isEmpty(records)) { return new PageResult<>(); } - return new PageResult<>(orderPackageDOIPage.getRecords(), orderPackageDOIPage.getTotal()); + return new PageResult<>(BeanUtil.copyToList(records, OrderPackageVO.class), orderPackagDONews.getTotal()); } @@ -305,30 +270,7 @@ public class PackServiceImpl implements PackService { } ordersMapper.updateById(orderDO); } -// OrderPackageDO packageDO = orderPackageMapper.selectById(packageID); -// -// AssertUtils.notEmpty(packageDO, ORDER_PACK_DATA_NULL_ERROR); -// -// Long orderId = packageDO.getOrderId(); -// -// OrderDO orderDO = ordersMapper.selectById(orderId); -// -// AssertUtils.notEmpty(orderDO, ORDER_NO_DATA_ERROR); -// -// orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus()); -// -// if(orderDO.getStatus().equals(OrderStatusEnum.FINISH_PRODUCTION.getStatus())){ -// orderDO.setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus()); -// orderDO.setFinishTime(null); -// } -// -// ordersMapper.updateById(orderDO); -// -// packageDO.setStatus(OrderPackageStatusEnum.UNPACKED.getStatus()); -// orderPackageMapper.updateById(packageDO); return typeConversion(orderPackagDONews.get(0), orderIds); - - } @@ -368,54 +310,7 @@ public class PackServiceImpl implements PackService { } // 配件明细新增包裹 ID - if (CollUtil.isNotEmpty(addPartsList)) { - // 1️⃣ 根据 packMethod 决定分组 key - Map> groupMap = - addPartsList.stream().collect(Collectors.groupingBy(item -> { - if (packMethod == 1) { - return item.getBodyId(); - } else if (packMethod == 0) { - return item.getRoomId(); - } else if (packMethod == 2) { - return item.getOrderId(); - } - return 0L; - })); - - // 2️⃣ 分组处理 - for (Map.Entry> entry : groupMap.entrySet()) { - - Long groupKey = entry.getKey(); - List partsList = entry.getValue(); - - for (PackagePartsSaveReqVO partsSaveReqVO : partsList) { - - Long partsId = partsSaveReqVO.getPartsId(); - Integer num = partsSaveReqVO.getNum(); - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - - wrapper.eq(OrderItemDO::getPartsId, partsId) - - .eq(OrderItemDO::getPackageId, 0); - - // 3️⃣ 根据 packMethod 动态加条件 - if (packMethod == 0) { - wrapper.eq(OrderItemDO::getRoomId, groupKey).in(OrderItemDO::getOrderId, orderIds); - } else if (packMethod == 1) { - wrapper.eq(OrderItemDO::getBodyId, groupKey).in(OrderItemDO::getOrderId, orderIds); - } else if (packMethod == 2) { - wrapper.eq(OrderItemDO::getOrderId, groupKey); - } - - wrapper.orderByAsc(OrderItemDO::getNum); - - List orderItemDOS = orderItemMapper.selectList(wrapper); - - allocateSingleGroup(orderItemDOS, packageNo, num); - } - } - } + processParts(addPartsList, packMethod, orderIds, packageNo, true); // 更新订单打包状态 for (Long orderId : orderIds) { @@ -444,31 +339,6 @@ public class PackServiceImpl implements PackService { } } - // 配件明细新增包裹 ID - if (CollUtil.isNotEmpty(addPartsList)) { - Map> groupMap = - addPartsList.stream().collect(Collectors.groupingBy(PackagePartsSaveReqVO::getBodyId)); - - for (Map.Entry> entry : groupMap.entrySet()) { - Long bodyId = entry.getKey(); - List partsList = entry.getValue(); - - for (PackagePartsSaveReqVO partsSaveReqVO : partsList) { - Long partsId = partsSaveReqVO.getPartsId(); - Integer num = partsSaveReqVO.getNum(); - // partsId下的所有明细,基于num正序,优先打包数量小的 - List orderItemDOS = orderItemMapper.selectList(new LambdaQueryWrapper() - .eq(OrderItemDO::getPartsId, partsId) - .in(OrderItemDO::getOrderId, orderIds) - .eq(OrderItemDO::getBodyId, bodyId) - .eq(OrderItemDO::getPackageId, 0) - .orderByAsc(OrderItemDO::getNum)); - - allocateSingleGroup(orderItemDOS, existPackageNo, num); - } - } - } - // 板件明细移除包裹 ID List> split3 = CollUtil.split(deletePlateIdList, 1000); if (CollUtil.isNotEmpty(split3)) { @@ -478,55 +348,10 @@ public class PackServiceImpl implements PackService { } // 配件明细移除包裹 ID - if (CollUtil.isNotEmpty(delPartsList)) { + processParts(delPartsList, packMethod, orderIds, existPackageNo, false); - // 1️⃣ 按 packMethod 分组 - Map> groupMap = - delPartsList.stream().collect(Collectors.groupingBy(item -> { - if (packMethod == 1) { - return item.getBodyId(); - } else if (packMethod == 0) { - return item.getRoomId(); - } else if (packMethod == 2) { - return item.getOrderId(); - } - return 0L; - })); - - // 2️⃣ 分组处理 - for (Map.Entry> entry : groupMap.entrySet()) { - - Long groupKey = entry.getKey(); - List partsList = entry.getValue(); - - for (PackagePartsSaveReqVO partsSaveReqVO : partsList) { - - Long partsId = partsSaveReqVO.getPartsId(); - Integer num = partsSaveReqVO.getNum(); - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - - wrapper.eq(OrderItemDO::getPartsId, partsId) - .eq(OrderItemDO::getPackageId, existPackageNo); - - // 3️⃣ 根据 packMethod 加条件 - if (packMethod == 0) { - wrapper.eq(OrderItemDO::getRoomId, groupKey).in(OrderItemDO::getOrderId, orderIds); - } else if (packMethod == 1) { - wrapper.eq(OrderItemDO::getBodyId, groupKey).in(OrderItemDO::getOrderId, orderIds); - } else if (packMethod == 2) { - wrapper.eq(OrderItemDO::getOrderId, groupKey); - } - - // 4️⃣ 排序(小的先还原 ✔) - wrapper.orderByAsc(OrderItemDO::getNum); - - List orderItemDOS = orderItemMapper.selectList(wrapper); - - restoreGroup(orderItemDOS, num); - } - } - } + // 配件明细新增包裹 ID + processParts(addPartsList, packMethod, orderIds, existPackageNo, true); // 更新封包状态 orderPackageNewMapper.update(new LambdaUpdateWrapper() @@ -550,101 +375,203 @@ public class PackServiceImpl implements PackService { } - private void restoreGroup(List list, int targetNum) { - int remain = targetNum; + /** + * 分组规则 + * @param item + * @param packMethod + * @return + */ + private Long getGroupKey(PackagePartsSaveReqVO item, Integer packMethod) { + if (ObjectUtil.equals(OrderPackageMethodEnum.ROOM_NAME.getMethod(), packMethod)) { + return item.getRoomId(); + } else if (ObjectUtil.equals(OrderPackageMethodEnum.BODY_NAME.getMethod(), packMethod)) { + return item.getBodyId(); + } else if (ObjectUtil.equals(OrderPackageMethodEnum.ORDER.getMethod(), packMethod)) { + return item.getOrderId(); + } + return 0L; + } - Map originMap = list.stream() - .filter(i -> ObjectUtil.equals(0L, i.getSourceId())) - .collect(Collectors.toMap(OrderItemDO::getId, Function.identity())); + /** + * 动态构建查询wrapper + * + * @param groupKey + * @param partsId + * @param packMethod + * @param orderIds + * @param packageNo + * @param isAdd + * @return + */ + private LambdaQueryWrapper buildWrapper( + Long groupKey, + Long partsId, + Integer packMethod, + List orderIds, + String packageNo, + boolean isAdd) { - List deleteIds = new ArrayList<>(); - List updateList = new ArrayList<>(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - // 1️⃣ 先处理子 item(sourceId != 0) - List subItems = list.stream() - .filter(i -> ObjectUtil.notEqual(0L, i.getSourceId()) - && i.getPackageId() != 0L) - .collect(Collectors.toList()); - for (OrderItemDO item : subItems) { + wrapper.eq(OrderItemDO::getPartsId, partsId); - if (remain <= 0) break; - - double pack = Optional.ofNullable(item.getPackNum()).orElse(0.0); - if (pack <= 0) continue; - - double toRestore = Math.min(pack, remain); - - OrderItemDO origin = originMap.get(item.getSourceId()); - if (origin == null) { - throw new ServiceException(new ErrorCode(10002, "找不到来源原 item")); - } - - // 🔥 从 origin.packNum 扣减 - double originPack = Optional.ofNullable(origin.getPackNum()).orElse(0.0); - origin.setPackNum(originPack - toRestore); - - if (origin.getPackNum() <= 0) { - origin.setPackNum(0.0); - origin.setPackageId(0L); - } - - updateList.add(origin); - - // 子 item处理 - if (toRestore == pack) { - // 全扣 → 删除 - deleteIds.add(item.getId()); - } else { - // 部分扣 → 更新剩余 - item.setPackNum(pack - toRestore); - updateList.add(item); - } - - remain -= toRestore; + if (isAdd) { + // 新增要查的是没打包的 + wrapper.eq(OrderItemDO::getPackageId, 0L); + } else { + // 删除看的是已打包的 + wrapper.eq(OrderItemDO::getPackageId, packageNo); } - // 2️⃣ 再处理原 item(剩余的 packNum) - List originItems = originMap.values().stream() - .filter(i -> i.getPackageId() != 0L) - .collect(Collectors.toList()); + if (ObjectUtil.equals(OrderPackageMethodEnum.ROOM_NAME.getMethod(), packMethod)) { + wrapper.eq(OrderItemDO::getRoomId, groupKey) + .in(OrderItemDO::getOrderId, orderIds); + } else if (ObjectUtil.equals(OrderPackageMethodEnum.BODY_NAME.getMethod(), packMethod)) { + wrapper.eq(OrderItemDO::getBodyId, groupKey) + .in(OrderItemDO::getOrderId, orderIds); + } else if (ObjectUtil.equals(OrderPackageMethodEnum.ORDER.getMethod(), packMethod)) { + wrapper.eq(OrderItemDO::getOrderId, groupKey); + } - for (OrderItemDO item : originItems) { + wrapper.orderByAsc(OrderItemDO::getNum); - if (remain <= 0) break; + return wrapper; + } - double pack = Optional.ofNullable(item.getPackNum()).orElse(0.0); - if (pack <= 0) continue; + /** + * 配件打包数量处理 + * + * @param partsList + * @param packMethod + * @param orderIds + * @param packageId + * @param isAdd + */ + private void processParts(List partsList, + Integer packMethod, + List orderIds, + String packageId, + boolean isAdd) { - double toRestore = Math.min(pack, remain); + if (CollUtil.isEmpty(partsList)) return; - item.setPackNum(pack - toRestore); + // 分组 + Map> groupMap = + partsList.stream().collect(Collectors.groupingBy(item -> getGroupKey(item, packMethod))); - if (item.getPackNum() <= 0) { - item.setPackNum(0.0); - item.setPackageId(0L); + for (Map.Entry> entry : groupMap.entrySet()) { + + Long groupKey = entry.getKey(); + + for (PackagePartsSaveReqVO vo : entry.getValue()) { + + LambdaQueryWrapper wrapper = + buildWrapper(groupKey, vo.getPartsId(), packMethod, orderIds, packageId, isAdd); + + List list = orderItemMapper.selectList(wrapper); + + if (isAdd) { + // 分配打包数量 + allocateGroup(list, packageId, vo.getNum()); + } else { + // 还原打包数量 + restoreGroup(list); + } } - - updateList.add(item); - - remain -= toRestore; - } - - // 3️⃣ 校验 - if (remain > 0) { - throw new ServiceException(new ErrorCode(10003, "还原失败,数量不足,剩余:" + remain)); - } - - // 4️⃣ 批量执行 - if (!updateList.isEmpty()) { - orderItemMapper.updateBatch(updateList); - } - - if (!deleteIds.isEmpty()) { - orderItemMapper.deleteBatchIds(deleteIds); } } - private void allocateSingleGroup(List list, String packNo, int targetNum) { + /** + * 还原配件打包数量 + * + * @param list 同一查询范围的order_parts id相同的orderitem列表 + */ + private void restoreGroup(List list) { + List deleteIds = new ArrayList<>(); + List updateList = new ArrayList<>(); + List insertList = new ArrayList<>(); + + Map> groupMap = list.stream() + .collect(Collectors.groupingBy(i -> + ObjectUtil.equals(0L, i.getSourceId()) ? i.getId() : i.getSourceId() + )); + + for (Map.Entry> entry : groupMap.entrySet()) { + + List items = entry.getValue(); + + // 找父 + OrderItemDO parent = items.stream() + .filter(i -> ObjectUtil.equals(0L, i.getSourceId())) + .findFirst() + .orElseThrow(() -> new ServiceException(PARTS_PACK_ITEM_SOURCE_NOT_EXISTS)); + + // 找子 + List subItems = items.stream() + .filter(i -> !ObjectUtil.equals(0L, i.getSourceId())) + .toList(); + + double parentPack = Optional.ofNullable(parent.getPackNum()).orElse(0.0); + double subTotal = subItems.stream() + .mapToDouble(i -> Optional.ofNullable(i.getPackNum()).orElse(0.0)) + .sum(); + + if (CollUtil.isNotEmpty(subItems)) { + // 有子 + if (ObjectUtil.notEqual(parent.getPackageId(), 0L)) { + // 父本身已打包,则降级成子 + parent.setSourceId(parent.getId()); + updateList.add(parent); + + // 增加一个父,数量是 num-原来的父的已打包packNum=现在 + OrderItemDO newBase = new OrderItemDO(); + BeanUtil.copyProperties(parent, newBase); + + newBase.setId(null); + newBase.setSourceId(0L); + newBase.setPackNum(parent.getNum() - subTotal); + newBase.setPackageId(0L); + insertList.add(newBase); + + } else { + // 本身没打包,把父-子packNum扣掉 + parent.setPackNum(parentPack - subTotal); + updateList.add(parent); + } + + // 删除原来的子 + deleteIds.addAll(subItems.stream().map(OrderItemDO::getId).toList()); + + } else { + // 没有子,打包了就还原数 + if (ObjectUtil.notEqual(parent.getPackageId(), 0L)) { + parent.setPackNum(0.0); + parent.setPackageId(0L); + updateList.add(parent); + } + } + } + + // 执行数据库操作 + if (!updateList.isEmpty()) { + orderItemMapper.updateBatch(updateList); + } + if (!insertList.isEmpty()) { + orderItemMapper.insertBatch(insertList); + } + if (!deleteIds.isEmpty()) { + orderItemMapper.deleteByIds(deleteIds); + } + } + + /** + * 分配打包数量 + * + * @param list 同一查询范围的order_parts id相同的orderitem列表 + * @param packNo 包裹编号 + * @param targetNum 分配目标数 + */ + private void allocateGroup(List list, String packNo, int targetNum) { int remain = targetNum; @@ -654,9 +581,7 @@ public class PackServiceImpl implements PackService { break; } - double current = Optional.ofNullable(item.getPackNum()) - .filter(v -> v > 0) - .orElse(Optional.ofNullable(item.getNum()).orElse(0.0)); + double current = item.getNum() - item.getPackNum(); if (current <= 0) { continue; } @@ -678,8 +603,8 @@ public class PackServiceImpl implements PackService { // 情况2:> 需要拆分 else { - // 原记录扣减 - item.setPackNum(current - remain); + // 原记录累加打包数量 + item.setPackNum(item.getPackNum() + remain); orderItemMapper.updateById(item); // 新建分堆记录 @@ -692,10 +617,18 @@ public class PackServiceImpl implements PackService { } if (remain > 0) { - throw new ServiceException(new ErrorCode(10001, "数量不足,剩余未分配:" + remain)); + throw new ServiceException(PARTS_PACK_NUM_NOT_ENOUGH); } } + /** + * 打包未全覆盖创建item副本 + * + * @param source + * @param packNo + * @param packNum + * @return + */ private OrderItemDO buildPackItem(OrderItemDO source, String packNo, double packNum) { OrderItemDO newItem = new OrderItemDO(); @@ -767,8 +700,6 @@ public class PackServiceImpl implements PackService { - - // 删除包裹及其关联的包裹信息(删除全部) @Override @Transactional(rollbackFor = Exception.class) public void deleteOrderPack(PackReqVO reqVO) { @@ -784,9 +715,8 @@ public class PackServiceImpl implements PackService { } // 如果有未拆包的提示先拆包 - if (orderPackagDOS.stream().anyMatch(o -> o.getStatus() == OrderPackageStatusEnum.PACKAGED.getStatus())) { - // todo 异常提示 - throw new ServiceException(new ErrorCode(10001, "请先拆包")); + if (orderPackagDOS.stream().anyMatch(o -> ObjectUtil.equals(OrderPackageStatusEnum.PACKAGED.getStatus(), o.getStatus()))) { + throw new ServiceException(ORDER_ALREADY_PACKAGED); } // 整理出该包裹对应的订单id列表 List packOrderIds = orderPackagDOS.stream() @@ -834,7 +764,7 @@ public class PackServiceImpl implements PackService { continue; } - // 1️⃣ 找基准 item(source = true) + // 1、找基准 item(source = true) OrderItemDO baseItem = partItemDOS.stream() .filter(i -> ObjectUtil.equals(entry.getKey(), i.getId())) .findFirst() @@ -846,7 +776,7 @@ public class PackServiceImpl implements PackService { double basePack = Optional.ofNullable(baseItem.getPackNum()).orElse(0.0); double sumOthers = 0.0; - // 2️⃣ 累加其他 item + // 2、累加其他 item for (OrderItemDO item : list) { if (item.getId().equals(baseItem.getId())) continue; @@ -855,12 +785,12 @@ public class PackServiceImpl implements PackService { deleteIds.add(item.getId()); } - // ✅ 情况1:未打包 → 正常合并 + // 情况1:未打包 → 正常合并 if (!basePacked) { - baseItem.setPackNum(basePack + sumOthers); + baseItem.setPackNum(basePack - sumOthers); updateList.add(baseItem); } - // ✅ 情况2:已打包 → 拆分新基准 + // 情况2:已打包 → 拆分新基准 else { // ① 原基准降级 baseItem.setSourceId(baseItem.getId()); @@ -872,8 +802,8 @@ public class PackServiceImpl implements PackService { newBase.setId(null); newBase.setSourceId(0L); - newBase.setPackageId(0L); // ❗新基准一定是未打包 - newBase.setPackNum(sumOthers); + newBase.setPackageId(0L); // 新基准一定是未打包 + newBase.setPackNum(baseItem.getNum() - sumOthers); insertList.add(newBase); } @@ -889,7 +819,7 @@ public class PackServiceImpl implements PackService { } if (!deleteIds.isEmpty()) { - orderItemMapper.deleteBatchIds(deleteIds); + orderItemMapper.deleteByIds(deleteIds); } } // 移除配件的打包状态 @@ -1064,7 +994,7 @@ public class PackServiceImpl implements PackService { List orderDO = ordersMapper.selectByIds(orderIds); AssertUtils.notEmpty(orderDO, ORDER_PACK_ERROR); - if (StrUtil.isNotEmpty(packNo)) { + if (CharSequenceUtil.isNotEmpty(packNo)) { List orderPackageDOS = orderPackageNewMapper.selectList(new LambdaQueryWrapper() .eq(OrderPackagDONew::getPackageNo, packNo)); AssertUtils.notEmpty(orderPackageDOS, ORDER_PACK_DATA_ERROR); @@ -1077,11 +1007,9 @@ public class PackServiceImpl implements PackService { // 类型转换 private OrderPackRespVO typeConversion(OrderPackageDO orderPackageDO) { return OrderPackRespVO.builder() -// .id(orderPackageDO.getId()) .orderId(orderPackageDO.getOrderId()) .organId(orderPackageDO.getOrganId()) .packageNo(orderPackageDO.getPackageNo()) - .packageType(orderPackageDO.getType()) .name(orderPackageDO.getName()) .status(orderPackageDO.getStatus()) .remark(orderPackageDO.getRemark()) @@ -1209,16 +1137,6 @@ public class PackServiceImpl implements PackService { } - @Override - public void validOrderPackageStatus(Long orderId) { - OrderDO order = orderService.getOrder(orderId); - AssertUtils.notEmpty(order, ORDER_NOT_EXISTS); - - // 已经打包的提示 - Integer packaged = order.getPackaged(); - AssertUtils.equals(OrderPackageStatusEnum.PACKAGED.getStatus(), packaged, ORDER_ALREADY_PACKAGED); - } - @Override public List getComponentCorrelation(PackScanComponentCorrelationReqVO reqVO) { Long id = reqVO.getId(); @@ -1285,7 +1203,7 @@ public class PackServiceImpl implements PackService { } @Override - public List getPackageDetails(String packageNo) { + public List getOrdersPackageDetails(String packageNo) { List orderPackagDONews = orderPackageNewMapper.selectList(new LambdaQueryWrapper() .eq(OrderPackagDONew::getPackageNo, packageNo)); @@ -1298,4 +1216,21 @@ public class PackServiceImpl implements PackService { packPlateList.addAll(packPartsList); return packPlateList; } + + @Override + public List getOrderPackageDetails(Long orderId, String packageNo) { + List orderPackagDONews = orderPackageNewMapper.selectList(new LambdaQueryWrapper() + .eq(OrderPackagDONew::getPackageNo, packageNo) + .eq(OrderPackagDONew::getOrderId, orderId) + ); + + if (CollUtil.isEmpty(orderPackagDONews)) { + return new ArrayList<>(); + } + Set orderIds = Set.of(orderId); + List packPartsList = orderPartsMapper.selectPackedParts(orderIds, packageNo); + List packPlateList = orderPlateMapper.selectPackedPlateList(orderIds, packageNo); + packPlateList.addAll(packPartsList); + return packPlateList; + } } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java index d5c16022d..3cff5fdcf 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java @@ -182,13 +182,6 @@ public interface OrderService { OrderAllData getOrderAllData(Long orderId, Long planId); - /** - * 检查item是否有未打包的并更新订单打包状态 - * - * @param orderIds - */ - void updateOrdersPackageStatus(List orderIds); - /** * 获取订单id对应的所有父子订单id * diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java index 28c78e371..a49b40cb2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java @@ -1683,11 +1683,6 @@ public class OrderServiceImpl implements OrderService { } - @Override - public void updateOrdersPackageStatus(List orderIds) { - orderMapper.updateOrdersPackageStatus(orderIds); - - } @Override public List getFatherAndSonOrderIds(List orderIds) { 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 b03dd5638..a3aa7ea3d 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 @@ -644,35 +644,4 @@ and o.deleted = false - - UPDATE orders o - SET o.packaged = - CASE - WHEN - EXISTS (SELECT 1 FROM order_item oi - WHERE oi.order_id = o.id - AND oi.package_id = 0 and oi.plate_id != 0 - AND oi.order_id IN - - #{orderId} - - ) - OR EXISTS (SELECT 1 FROM order_item oi - JOIN order_parts op on oi.organ_id = op.organ_id and oi.order_id = op.order_id and oi.parts_id = op.id - WHERE oi.order_id = o.id - AND oi.package_id = 0 and oi.parts_id != 0 and op.type != '封边条' - AND oi.order_id IN - - #{orderId} - - ) - THEN '${@com.cf.imes.framework.common.enums.OrderPackageStatusEnum@UNPACKED.status}' - ELSE '${@com.cf.imes.framework.common.enums.OrderPackageStatusEnum@PACKAGED.status}' - END - WHERE o.id in - - #{orderId} - - - \ No newline at end of file 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 badb28813..4c853cfef 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 @@ -288,7 +288,7 @@ - +