From 1f40f5bb4ccd3b8ee17473dd9ee9df38f930cb57 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Tue, 31 Mar 2026 19:30:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=89=88=E5=88=86=E5=A0=86=E6=89=93?= =?UTF-8?q?=E5=8C=85=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/pack/HeapSplitController.java | 53 +- .../admin/manage/pack/PackController.java | 72 +- .../pack/heapsplit/HeapSplitSaveReqVO.java | 33 + .../pack/heapsplit/HeapSplitTaskRespVO.java | 30 - .../heapsplit/HeapSplitTaskSaveReqVO.java | 49 - .../OrdersHeapSplitDetailRespVO.java | 27 + .../admin/manage/pack/vo/OrderPackReqVO.java | 40 +- .../admin/manage/pack/vo/OrderPackRespVO.java | 5 + .../admin/manage/pack/vo/OrderPartsReqVO.java | 5 +- .../manage/pack/vo/OrderPartsRespVO.java | 49 +- .../pack/vo/OrdersUnpackDetailRespVO.java | 27 + .../admin/manage/pack/vo/PackReqVO.java | 19 +- .../vo/PackScanComponentCorrelationReqVO.java | 5 +- .../manage/pack/vo/PackageDetailsReqVO.java | 4 + .../manage/pack/vo/PackagePartsSaveReqVO.java | 29 + .../admin/manage/pack/vo/PackingReqVO.java | 4 +- .../manage/pack/vo/PlateDetailsRespVO.java | 3 + .../query/vo/pack/PackageDetailsRespVO.java | 66 +- .../dal/dataobject/order/OrderDO.java | 1 + .../dal/dataobject/orderItem/OrderItemDO.java | 20 + .../dal/dataobject/pack/OrderPackagDONew.java | 48 + .../executor/dal/mysql/order/OrderMapper.java | 7 + .../dal/mysql/orderItem/OrderItemMapper.java | 48 +- .../mysql/orderParts/OrderPartsMapper.java | 25 +- .../dal/mysql/pack/OrderPackageMapper.java | 7 + .../dal/mysql/pack/OrderPackageNewMapper.java | 15 + .../executor/dal/mysql/plate/PlateMapper.java | 25 +- .../PackScanComponentCorrelationTypeEnum.java | 8 +- .../service/heapsplit/HeapSplitService.java | 30 + .../heapsplit/HeapSplitServiceImpl.java | 289 ++++++ .../heapsplit/HeapSplitTaskService.java | 51 - .../heapsplit/HeapSplitTaskServiceImpl.java | 275 ----- .../service/manage/pack/PackService.java | 62 +- .../service/manage/pack/PackServiceImpl.java | 944 ++++++++++++------ .../query/ProductionStatusServiceImpl.java | 96 +- .../executor/service/order/OrderService.java | 14 + .../service/order/OrderServiceImpl.java | 41 + .../service/orderitem/OrderItemService.java | 8 +- .../orderitem/OrderItemServiceImpl.java | 19 +- .../resources/mapper/order/OrderMapper.xml | 32 + .../mapper/orderItem/OrderItemMapper.xml | 93 +- .../mapper/orderParts/OrderPartsMapper.xml | 280 ++++-- .../mapper/pack/OrderPackageMapper.xml | 9 + .../resources/mapper/plate/PlateMapper.xml | 346 +++++-- 44 files changed, 2117 insertions(+), 1196 deletions(-) create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/HeapSplitSaveReqVO.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/heapsplit/HeapSplitTaskRespVO.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/heapsplit/HeapSplitTaskSaveReqVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/OrdersHeapSplitDetailRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrdersUnpackDetailRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackagePartsSaveReqVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/pack/OrderPackagDONew.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPackageNewMapper.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitService.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitServiceImpl.java delete mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitTaskService.java delete mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitTaskServiceImpl.java diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/HeapSplitController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/HeapSplitController.java index 6f3c18664..a7c5b2b45 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/HeapSplitController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/HeapSplitController.java @@ -1,21 +1,19 @@ package com.cf.imes.module.executor.controller.admin.manage.pack; import com.cf.imes.framework.common.pojo.CommonResult; -import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitTaskListRespVO; -import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitTaskRespVO; -import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitTaskSaveReqVO; -import com.cf.imes.module.executor.service.heapsplit.HeapSplitTaskService; +import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitSaveReqVO; +import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.OrdersHeapSplitDetailRespVO; +import com.cf.imes.module.executor.service.heapsplit.HeapSplitService; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -35,38 +33,19 @@ import static com.cf.imes.framework.common.pojo.CommonResult.success; public class HeapSplitController { @Resource - private HeapSplitTaskService heapSplitTaskService; + private HeapSplitService heapSplitService; - @PostMapping("/task") - @Operation(summary = "保存分堆任务") - public CommonResult saveHeapsplitTask(@Valid @RequestBody HeapSplitTaskSaveReqVO reqVO) { - heapSplitTaskService.saveHeapsplitTask(reqVO); + @PostMapping("") + @Operation(summary = "保存分堆") + public CommonResult saveHeapsplit(@Valid @RequestBody HeapSplitSaveReqVO reqVO) { + heapSplitService.saveHeapsplit(reqVO); return success(true); } - @GetMapping("/task") - @Operation(summary = "查询分堆任务列表") - public CommonResult> getHeapsplitTask(@RequestParam(value = "name", required = false) String name, @RequestParam(value = "status", required = false) Integer status) { - return success(heapSplitTaskService.getHeapsplitTaskList(name, status)); + @PostMapping("/details") + @Operation(summary = "查询分堆详情") + @Parameter(name = "orderIds", description = "订单ID列表", required = true) + public CommonResult getOrdersHeapSplitDetail(@RequestBody @NotEmpty(message = "订单ID不能为空") List orderIds) { + return success(heapSplitService.getOrdersHeapSplitedDetail(orderIds)); } - - @PostMapping("/task/remove") - @Operation(summary = "删除分堆任务") - public CommonResult deleteHeapsplitTask(@RequestBody List ids) { - heapSplitTaskService.deleteHeapsplitTask(ids); - return success(true); - } - - @GetMapping("/task/{id}") - @Operation(summary = "获取分堆任务") - public CommonResult getHeapsplitTaskById(@PathVariable("id") Long id) { - return success(heapSplitTaskService.getHeapsplitTask(id)); - } - - @PostMapping("/task/restart/{id}") - @Operation(summary = "重启分堆任务") - public CommonResult restartHeapsplitTask(@PathVariable("id") Long id) { - heapSplitTaskService.restartHeapsplitTask(id); - return success(true); - } -} +} \ 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/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 693e634c8..e6e621688 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 @@ -11,6 +11,7 @@ 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; +import jakarta.validation.constraints.NotEmpty; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -55,34 +56,26 @@ public class PackController { } - - @GetMapping("/getOrderPlateList") - @Operation(summary = "查询多个订单对应的板材信息") - @Parameter(name = "orderIds", description = "订单ID", required = true) - @PreAuthorize("@ss.hasAnyPermissions('manage:pack:create','manage:pack:pre-pack','manage:pack:pack')") - public CommonResult> getOrdersPlateList(@Valid @RequestParam("orderIds") List orderIds) { - - return success(packService.getOrdersPlateList(orderIds)); - + @PostMapping("/unpack/details") + @Operation(summary = "获取订单列表下未打包明细") + @Parameter(name = "orderIds", description = "订单ID列表", required = true) + public CommonResult getOrdersUnpackDetail(@RequestBody @NotEmpty(message = "订单ID不能为空") List orderIds) { + return success(packService.getOrdersUnpackDetails(orderIds)); } - @GetMapping("/getOrderPack") + @PostMapping("/getOrderPack") @Operation(summary = "查看生产订单对应的包裹信息-未分页") @PreAuthorize("@ss.hasAnyPermissions('manage:pack:export-pack-num','manage:pack:pack')") - public CommonResult> getOrderPack(@Valid PackageDetailsReqVO reqVO) { - + public CommonResult> getOrderPack(@Valid @RequestBody PackageDetailsReqVO reqVO) { return success(packService.getOrderPack(reqVO)); - } - @GetMapping("/queryPackageDetails") + @GetMapping("/packageDetails/{packageNo}") @Operation(summary = "查询包裹的详细信息") @PreAuthorize("@ss.hasAnyPermissions('manage:pack:pack-details','manage:pack:query')") - public CommonResult> queryPackageDetails(@Valid PackDetailsReqVO reqVO){ - - return CommonResult.success(productionStatusService.queryPackageDetails(reqVO)); - + public CommonResult> queryPackageDetails(@PathVariable String packageNo){ + return success(packService.getPackageDetails(packageNo)); } @@ -95,50 +88,13 @@ public class PackController { } - - - - - @GetMapping("/getParts") - @Operation(summary = "查看配件列表") - @PreAuthorize("@ss.hasPermission('manage:pack-parts:query')") - public CommonResult> getParts(@Valid OrderPartsReqVO reqVO) { - - return success(packService.getPartsList(reqVO)); - - - } - - - - - - @PutMapping("/updatePack") - @Operation(summary = "板材包裹更新-即封包") + @Operation(summary = "封包") @PreAuthorize("@ss.hasPermission('manage:pack:update')") public CommonResult updatePack(@Valid @RequestBody OrderPackReqVO packageVO) { - return success(packService.updatePack(packageVO)); - } - - - - @PutMapping("/updateParts") - @Operation(summary = "配件包裹更新-即封包") - @PreAuthorize("@ss.hasPermission('manage:pack:update')") - public CommonResult updateParts(@Valid @RequestBody OrderPartsReqVO reqVO) { - - return success(packService.updateParts(reqVO)); - - - } - - - - @GetMapping("/selectPack") @Operation(summary = "查询包裹") @Parameter(name = "orderId", description = "订单Id", required = true) @@ -169,7 +125,7 @@ public class PackController { @PreAuthorize("@ss.hasPermission('manage:pack:unpacking')") public CommonResult unpacking(@Valid @RequestBody PackingReqVO reqVO) { - OrderPackRespVO unpacking = packService.unpacking(reqVO.getPackageId()); + OrderPackRespVO unpacking = packService.unpacking(reqVO.getPackageNo()); return success(unpacking); } @@ -223,7 +179,7 @@ public class PackController { - @GetMapping("/scan/correlation") + @PostMapping("/scan/correlation") @Operation(summary = "查询扫描类型相关的板件+配件id") public CommonResult> getComponentCorrelation(@Valid @RequestBody PackScanComponentCorrelationReqVO reqVO) { return success(packService.getComponentCorrelation(reqVO)); 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 new file mode 100644 index 000000000..ec15fe34c --- /dev/null +++ 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 @@ -0,0 +1,33 @@ +package com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit; + +import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackagePartsSaveReqVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * + * @author Gqr + * @since 2026/3/10 17:36 + */ +@Schema(description = "管理后台 - 分堆打包 - 保存分堆 Request VO") +@Data +public class HeapSplitSaveReqVO { + @Schema(description = "板件id列表") + private List plateIds = new ArrayList<>(); + + @Schema(description = "删除的板件id列表") + private List delPlateIds = new ArrayList<>(); + + @Schema(description = "配件id列表") + private List parts = new ArrayList<>(); + + @Schema(description = "删除的配件id列表") + private List delParts = new ArrayList<>(); + + @Schema(description = "订单id列表") + private List orderIds = 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/heapsplit/HeapSplitTaskRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/HeapSplitTaskRespVO.java deleted file mode 100644 index bf0757a4d..000000000 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/HeapSplitTaskRespVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Data; - -import java.util.List; - -/** - * - * - * @author Gqr - * @since 2026/3/12 17:05 - */ -@Schema(description = "管理后台 - 分堆打包 - 任务内容明细 Request VO") -@Data -@Builder -public class HeapSplitTaskRespVO { - @Schema(description = "任务ID", example = "1024") - private Long id; - - @Schema(description = "订单ID列表") - private List orderIds; - - @Schema(description = "板件ID列表") - private List plateIds; - - @Schema(description = "配件ID列表") - private List partIds; -} 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/HeapSplitTaskSaveReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/HeapSplitTaskSaveReqVO.java deleted file mode 100644 index bde283441..000000000 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/HeapSplitTaskSaveReqVO.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.util.List; - -/** - * - * - * @author Gqr - * @since 2026/3/10 17:36 - */ -@Schema(description = "管理后台 - 分堆打包 - 保存分堆任务 Request VO") -@Data -public class HeapSplitTaskSaveReqVO { - @Schema(description = "任务id") - private Long id; - - @Schema(description = "任务名称") - private String name; - - @Schema(description = "已分堆板件数") - private int splittedPlateNum; - - @Schema(description = "未分堆板件数") - private int unsplitPlateNum; - - @Schema(description = "总板件数") - private int totalPlateNum; - - @Schema(description = "已分堆配件数") - private int splittedPartNum; - - @Schema(description = "未分堆配件数") - private int unsplitPartNum; - - @Schema(description = "总配件数") - private int totalPartNum; - - @Schema(description = "板件id列表") - private List plateIds; - - @Schema(description = "配件id列表") - private List partIds; - - @Schema(description = "订单id列表") - 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/heapsplit/OrdersHeapSplitDetailRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/OrdersHeapSplitDetailRespVO.java new file mode 100644 index 000000000..19449389e --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/heapsplit/OrdersHeapSplitDetailRespVO.java @@ -0,0 +1,27 @@ +package com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit; + +import com.cf.imes.module.executor.controller.admin.manage.pack.vo.OrderPartsRespVO; +import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PlateDetailsRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * + * + * @author Gqr + * @since 2026/3/12 17:05 + */ +@Schema(description = "管理后台 - 分堆打包 - 分堆明细 Request VO") +@Data +@NoArgsConstructor +public class OrdersHeapSplitDetailRespVO { + + @Schema(description = "板件列表") + private List plates; + + @Schema(description = "配件列表") + private List parts; +} 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 778c878c5..0ead1470b 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,12 +1,12 @@ package com.cf.imes.module.executor.controller.admin.manage.pack.vo; - -import com.cf.imes.module.executor.validation.manage.pack.PackTypeValid; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.ToString; import jakarta.validation.constraints.NotNull; + +import java.util.ArrayList; import java.util.List; @Schema(description = "管理后台 - 包裹新增 Request VO") @@ -14,44 +14,28 @@ import java.util.List; @ToString(callSuper = true) public class OrderPackReqVO { - - @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED) - private Long packId; - - @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "订单号为空") - private Long orderId; - + private List orderIds; @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED) private String packNo; - - @Schema(description = "包裹类型", requiredMode = Schema.RequiredMode.REQUIRED) - @PackTypeValid - private Integer packageType; - - -// @Schema(description = "包裹状态", requiredMode = Schema.RequiredMode.REQUIRED) -// private Long packStatus; - - @Schema(description = "备注") - private String remark; - + private String remark; @Schema(description = "新增的板件ID", requiredMode = Schema.RequiredMode.REQUIRED) - private List addPlateIdList; - + private List addPlateIdList = new ArrayList<>(); @Schema(description = "移除的板件ID", requiredMode = Schema.RequiredMode.REQUIRED) - private List deletePlateIdList; - - - @Schema(description = "新增的配件包裹ID", requiredMode = Schema.RequiredMode.REQUIRED) - private List addPartsIdList; + private List deletePlateIdList = new ArrayList<>(); + @Schema(description = "打包方式:0柜名、1房名、2订单") + private Integer packMethod = 1; + @Schema(description = "新增打包的配件列表") + private List addPartsList = new ArrayList<>(); + @Schema(description = "移除包裹的配件列表") + private List delPartsList = 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 30723f3df..f0f627bc5 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 @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Data; +import java.util.List; + @Schema(description = "管理后台 - 订单包裹表 Response VO") @Data @@ -17,6 +19,9 @@ public class OrderPackRespVO { @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) private Long orderId; + @Schema(description = "订单号列表", requiredMode = Schema.RequiredMode.REQUIRED) + private List orderIds; + @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED) private String 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/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 index 3f1dfe329..f29939c60 100644 --- 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 @@ -1,6 +1,7 @@ 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; @@ -16,9 +17,11 @@ public class OrderPartsReqVO /*extends PageParam*/ { @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "订单号为空") +// @NotNull(message = "订单号为空") private Long orderId; + private List orderIds; + @Schema(description = "更新配件时传-包裹ID") private Long packId; 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 da2da02bb..309de53b4 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 @@ -1,6 +1,7 @@ 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; @@ -11,6 +12,28 @@ import java.util.List; @Data public class OrderPartsRespVO { + @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED) + private Long packageId; + + @Schema(description = "订单ID") + private Long orderId; + + @Schema(description = "包裹号", requiredMode = Schema.RequiredMode.REQUIRED) + private String packageNo; + + @Schema(description = "房间名称", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("房间名称") + private String roomName; + + @Schema(description = "柜体名称", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("柜体名称") + private String cabinetName; + + @Schema(description = "房间ID", requiredMode = Schema.RequiredMode.REQUIRED) + private String roomId; + + @Schema(description = "柜体ID", requiredMode = Schema.RequiredMode.REQUIRED) + private String bodyId; @Schema(description = "配件ID", requiredMode = Schema.RequiredMode.REQUIRED) private Long partsId; @@ -67,23 +90,23 @@ public class OrderPartsRespVO { @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED) private String subparts; - @Schema(description = "数量-用于计算,不显示") private List count; - - @Schema(description = "房间-用于计算-不显示") - private List roomId; - - - @Schema(description = "柜体-用于计算-不显示") - private List bodyId; - - - @Schema(description = "加工组-用于计算-不显示") - private List groupId; - @Schema(description = "组件名称") private String componentName; + private List processGroupNameList; + + @Schema(description = "加工组", requiredMode = Schema.RequiredMode.REQUIRED) + private String processGroup; + + @Schema(description = "分堆状态,true:已分堆") + private Boolean heapSplitStatus; + + @Schema(description = "分堆数量") + private BigDecimal heapNum; + + @Schema(description = "打包数量") + private BigDecimal packNum; } 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/OrdersUnpackDetailRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrdersUnpackDetailRespVO.java new file mode 100644 index 000000000..408ae9535 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrdersUnpackDetailRespVO.java @@ -0,0 +1,27 @@ +package com.cf.imes.module.executor.controller.admin.manage.pack.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * + * + * @author Gqr + * @since 2026/3/12 17:05 + */ +@Schema(description = "管理后台 - 分堆打包 - 订单未打包明细 Request VO") +@Data +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class OrdersUnpackDetailRespVO { + + @Schema(description = "未打包板件列表") + private List plates; + + @Schema(description = "未打包配件列表") + private List parts; +} 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 3807afb46..9e3cb93ba 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 @@ -5,30 +5,15 @@ 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 @ToString(callSuper = true) public class PackReqVO { - @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "订单号为空,请重新删除配件") - private Long orderId; - - - @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "包裹信息为空,请重新删除配件") - private Long packageId; - + private List orderIds; @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED) private Long packageNo; - - - @Schema(description = "是否是其他类型的包裹", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "包裹类型为空,请重新删除配件") - private Boolean isOther; - - } 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 a505c0059..6a37737f3 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 @@ -19,7 +19,7 @@ import java.util.List; public class PackScanComponentCorrelationReqVO { @InEnum(PackScanComponentCorrelationTypeEnum.class) - @Schema(description = "扫描类型,0部件父级、1部件顶级") + @Schema(description = "扫描类型,0本身、1部件父级、2部件顶级") private Integer type; @Schema(description = "扫描本体编号") @@ -31,4 +31,7 @@ public class PackScanComponentCorrelationReqVO { @Schema(description = "订单ID列表") private List orderIds; + + @Schema(description = "是否关联加工组") + private boolean relateGroup; } 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 a9a123652..7b4a6081f 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 @@ -9,6 +9,8 @@ import org.hibernate.validator.constraints.Length; import jakarta.validation.constraints.Pattern; +import java.util.List; + @Schema(description = "管理后台 - 查看订单下对应的包裹信息") @Data @@ -21,6 +23,8 @@ public class PackageDetailsReqVO extends PageParam { @Length(max = 19,message = "订单号长度不能超过 19 位") private String orderId; + private List orderIds; + @Schema(description = "板编号") @Pattern(regexp = "^[0-9]*$",message = "板编号必须为数字") 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/PackagePartsSaveReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackagePartsSaveReqVO.java new file mode 100644 index 000000000..ff958a00c --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackagePartsSaveReqVO.java @@ -0,0 +1,29 @@ +package com.cf.imes.module.executor.controller.admin.manage.pack.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * + * + * @author Gqr + * @since 2026/3/26 17:11 + */ +@Schema(description = "管理后台 - 分堆打包 - 分堆打包配件提交 Request VO") +@Data +public class PackagePartsSaveReqVO { + @Schema(description = "配件ID") + private Long partsId; + + @Schema(description = "处理配件数量") + private Integer num; + + @Schema(description = "柜体ID") + private Long bodyId; + + @Schema(description = "房间ID") + private Long roomId; + + @Schema(description = "订单ID") + private Long orderId; +} 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 88fa31b1c..b49f60464 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 @@ -13,9 +13,9 @@ import jakarta.validation.constraints.NotNull; public class PackingReqVO { - @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "包裹异常,请查看是否封包") - private Long packageId; + 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 94f50d304..a9d7bbf16 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 @@ -162,4 +162,7 @@ public class PlateDetailsRespVO { @Schema(description = "部件名称") private String componentName; + + @Schema(description = "分堆状态,true:已分堆") + private Boolean heapSplitStatus; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/PackageDetailsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/PackageDetailsRespVO.java index 662bf9ded..ad5b88685 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 @@ -1,7 +1,7 @@ package com.cf.imes.module.executor.controller.admin.manage.query.vo.pack; -import com.cf.imes.module.executor.controller.admin.manage.pack.vo.GroupNameList; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,11 +10,14 @@ import java.util.List; @Schema(description = "管理后台 - 包裹详情 Response VO") @Data +@JsonInclude(JsonInclude.Include.NON_NULL) public class PackageDetailsRespVO { + @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED) + private Long packageNo; @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED) - private String orderId; + private Long orderId; @Schema(description = "房间名称-板材类型显示", requiredMode = Schema.RequiredMode.REQUIRED) private String roomName; @@ -70,17 +73,11 @@ public class PackageDetailsRespVO { @Schema(description = "备注(板材和配件都要传递)", requiredMode = Schema.RequiredMode.REQUIRED) private String remark; - @Schema(description = "加工组名称集合") - private List processGroupNameList; - - - - @Schema(description = "配件名称-配件类型显示", requiredMode = Schema.RequiredMode.REQUIRED) - private String name; + private String partsName; @Schema(description = "配件ID", requiredMode = Schema.RequiredMode.REQUIRED) - private Long partsId; + private Long partsId; @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED) private String model; @@ -130,15 +127,56 @@ public class PackageDetailsRespVO { private List count; - @Schema(description = "房间-用于计算-不显示") - private List roomId; + @Schema(description = "房间ID") + private Long roomId; - @Schema(description = "柜体-用于计算-不显示") - private List bodyId; + @Schema(description = "柜体ID") + private Long bodyId; @Schema(description = "加工组-用于计算-不显示") private List groupId; + @Schema(description = "排版面") + private String holeFace; + + @Schema(description = "排孔类型") + private String holeArrange; + + @Schema(description = "开门类型") + private String openDoorType; + + @Schema(description = "是否侧面造型") + private Boolean isSideSculpt; + + @Schema(description = "是否二维刀路") + private Boolean is2v; + + @Schema(description = "是否侧面二维刀路") + private Boolean isSide2v; + + @Schema(description = "部件名称") + private String componentName; + + @Schema(description = "开料长") + private BigDecimal splitHeight; + + @Schema(description = "开料宽") + private BigDecimal splitWidth; + + @Schema(description = "左封边厚度") + private BigDecimal sealLeft; + + + @Schema(description = "右封边厚度") + private BigDecimal sealRight; + + + @Schema(description = "上封边厚度") + private BigDecimal sealUp; + + + @Schema(description = "下封边厚度") + private BigDecimal sealDown; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java index ebd990ed5..876175286 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java @@ -21,6 +21,7 @@ import java.time.LocalDateTime; @NoArgsConstructor @AllArgsConstructor public class OrderDO extends BaseDO { + public static final Long PARENT_ID_ROOT = 0L; /** * 订单号,主键 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrderItemDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrderItemDO.java index 839d2fa18..4982c0b08 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrderItemDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrderItemDO.java @@ -63,6 +63,17 @@ public class OrderItemDO { * 部件数量 */ private Double num; + + /** + * 已打包数量 + */ + private Double packNum; + + /** + * 已分堆数量 + */ + private Double heapNum; + // 组织 ID @TableField(fill = FieldFill.INSERT_UPDATE) private Long organId; @@ -76,4 +87,13 @@ public class OrderItemDO { * cad视图id */ private Integer cadViewId; + + /** + * 分堆状态 + */ + private Integer heapSplitStatus; + + private Boolean source; + + private Long sourceId; } \ 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/dal/dataobject/pack/OrderPackagDONew.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/pack/OrderPackagDONew.java new file mode 100644 index 000000000..bb36472d6 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/pack/OrderPackagDONew.java @@ -0,0 +1,48 @@ +package com.cf.imes.module.executor.dal.dataobject.pack; + + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@TableName("order_package_new") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderPackagDONew extends BaseDO { + + // 组织 ID + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long organId; + + // 订单号 + private Long orderId; + + // 包裹编号 + private String packageNo; + + // 包裹名 + private String name; + + // 包裹状态,0未封包,1已封包,2已入库,3已出库 + private Integer status; + + + // 备注 + private String remark; + + + +} + 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 8e0a242bd..1af0d93cf 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 @@ -320,4 +320,11 @@ 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/orderItem/OrderItemMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java index e12ba2d28..44f5e918b 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java @@ -139,22 +139,46 @@ public interface OrderItemMapper extends BaseMapperX { void deleteOtherParts(@Param("partsId") Long partsId,@Param("orderId") Long orderId,@Param("organId") Long organId); + /** + * 更新板件item的包裹id + * + * @param plateIdList + * @param packageNo + * @param orderIds + */ + void updatePlatesItemPackageId(@Param("plateIdList") List plateIdList, @Param("packageNo") String packageNo, @Param("orderIds") List orderIds); + + /** + * 更新配件item的包裹id + * + * @param addPartsList + * @param packageNo + * @param orderIds + */ + void updatePartsItemPackageId(@Param("addPartsList") List addPartsList, @Param("packageNo") String packageNo, @Param("orderIds") List orderIds); - void insertPackId(@Param("plateIdList") List plateIdList, @Param("packId") Long packId,@Param("orderId") Long orderId,@Param("organId") Long organId); - - - void deletePackId(@Param("deletePlateIdList") List deletePlateIdList,@Param("packId") Long packId,@Param("orderId") Long orderId,@Param("organId") Long organId); + /** + * 更新板件item解包package_id = 0 + * + * @param deletePlateIdList + * @param packageNo + * @param orderIds + */ + void updatePlatesItemUnPackageId(@Param("deletePlateIdList") List deletePlateIdList, @Param("packageNo") String packageNo, @Param("orderIds") List orderIds); + /** + * 更新配件item解包package_id = 0 + * + * @param deletePartsList + * @param packageNo + * @param orderIds + */ + void updatePartsItemUnPackageId(@Param("deletePartsList") List deletePartsList, @Param("packageNo") String packageNo, @Param("orderIds") List orderIds); void insertPartsId(@Param("packId") Long packId, @Param("addPartsIdList") List addPartsIdList,@Param("orderId") Long orderId,@Param("organId") Long organId); - void insertParts(@Param("addPartsList") List addPartsList, @Param("packId")Long packId, @Param("orderId") Long orderId,@Param("organId") Long organId); - - void deletePartsList(@Param("deletePartsList")List deletePartsList,@Param("packId") Long packId,@Param("orderId") Long orderId,@Param("organId") Long organId); - - default List selectPackList(Long packId, Long orderId , Long organId) { return selectList(new LambdaQueryWrapperX() .eq(OrderItemDO::getOrganId, organId) @@ -230,16 +254,18 @@ public interface OrderItemMapper extends BaseMapperX { * * @param componentIds * @param orderIds + * @param groupId * @return */ - List selectComponentCorrelationPlateIds(@Param("orderIds") List orderIds, @Param("componentIds") List componentIds); + List selectComponentCorrelationPlateIds(@Param("orderIds") List orderIds, @Param("componentIds") List componentIds, @Param("groupId") Long groupId); /** * 查询部件关联的部件ID列表 * * @param componentIds * @param orderIds + * @param groupId * @return */ - List selectComponentCorrelationPartsIds(@Param("orderIds") List orderIds, @Param("componentIds") List componentIds); + List selectComponentCorrelationPartsIds(@Param("orderIds") List orderIds, @Param("componentIds") List componentIds, @Param("groupId") Long groupId); } \ 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/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 f3f3a953e..120815e75 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 @@ -18,6 +18,7 @@ import org.apache.ibatis.annotations.Param; import java.util.Collection; import java.util.List; +import java.util.Set; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; @@ -115,10 +116,30 @@ public interface OrderPartsMapper extends BaseMapperX { @Param("roomId")Long roomId, @Param("bodyId")Long bodyId); - IPage selectParts(@Param("page") IPage page, @Param("packageId") Long packageId, @Param("organId") Long organId); + /** + * 查询包裹配件列表 + * + * @param orderIds + * @param packageId + * @return + */ + List selectPackedParts(@Param("orderIds") Set orderIds, @Param("packageNo") String packageId); + /** + * 查询订单列表未打包配件 + * + * @param orderIds + * @return + */ + List selectOrdersPartsList(@Param("orderIds") List orderIds); - List selectPartsList(@Param("orderId") Long orderId , @Param("organId") Long organId); + /** + * 查询订单列表未打包配件 + * + * @param orderIds + * @return + */ + List selectOrdersHeapSplitPartsList(@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/pack/OrderPackageMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPackageMapper.java index 7b4368743..18513483d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPackageMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPackageMapper.java @@ -113,4 +113,11 @@ public interface OrderPackageMapper extends BaseMapperX { } + /** + * 查询订单列表下的所有包裹编号 + * + * @param orderIds + * @return + */ + List getPackageNoInOrderIds(@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/pack/OrderPackageNewMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPackageNewMapper.java new file mode 100644 index 000000000..df364c260 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPackageNewMapper.java @@ -0,0 +1,15 @@ +package com.cf.imes.module.executor.dal.mysql.pack; + +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.module.executor.dal.dataobject.pack.OrderPackagDONew; +import org.apache.ibatis.annotations.Mapper; + +/** + * + * + * @author Gqr + * @since 2026/3/25 13:55 + */ +@Mapper +public interface OrderPackageNewMapper extends BaseMapperX { +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java index e9db29e8c..08afef889 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java @@ -294,9 +294,30 @@ public interface PlateMapper extends BaseMapperX { List selectOrderNoPackPlateList(@Param("orderId") Long orderId, @Param("organId") Long organId); - List selectOrderPackPlateList(@Param("orderIds") List orderIds, @Param("organId") Long organId); + /** + * 查询订单列表下未打包的板件 + * + * @param orderIds + * @return + */ + List selectOrdersPackPlateList(@Param("orderIds") List orderIds); - IPage selectPackPlateList(@Param("page") IPage page, @Param("packageId") Long packageId, @Param("organId") Long organId); + /** + * 查询包裹板件列表 + * + * @param orderIds + * @param packageNo + * @return + */ + List selectPackedPlateList(@Param("orderIds") Set orderIds, @Param("packageNo") String packageNo); + + /** + * 查询订单列表下分堆列表 + * + * @param orderIds + * @return + */ + List selectOrdersHeapSplitPlateList(@Param("orderIds") List orderIds); List selectLabelOrderPlateDataByOrderId(@Param("orderId") Long orderId,@Param("organId") Long organId); 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 cc9913ae6..149ae9586 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 @@ -15,15 +15,19 @@ import java.util.Arrays; @RequiredArgsConstructor @Getter public enum PackScanComponentCorrelationTypeEnum implements IntArrayValuable { + /** + * 本身 + */ + SELF(0), /** * 部件父级 */ - PARENT(0), + PARENT(1), /** * 部件顶级 */ - TOP(1); + TOP(2); private final Integer type; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitService.java new file mode 100644 index 000000000..de2005a28 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitService.java @@ -0,0 +1,30 @@ +package com.cf.imes.module.executor.service.heapsplit; + +import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitSaveReqVO; +import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.OrdersHeapSplitDetailRespVO; + +import java.util.List; + + +/** + * 分堆任务 Service 接口 + * + * @author Gqr + * @since 2026/3/10 17:52 + */ +public interface HeapSplitService { + /** + * 保存分堆 + * + * @param reqVO + */ + void saveHeapsplit(HeapSplitSaveReqVO reqVO); + + /** + * 获取订单列表分堆详情 + * + * @param orderIds + * @return + */ + OrdersHeapSplitDetailRespVO getOrdersHeapSplitedDetail(List orderIds); +} 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 new file mode 100644 index 000000000..a8a68b994 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitServiceImpl.java @@ -0,0 +1,289 @@ +package com.cf.imes.module.executor.service.heapsplit; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.cf.imes.framework.common.exception.ErrorCode; +import com.cf.imes.framework.common.exception.ServiceException; +import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitSaveReqVO; +import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.OrdersHeapSplitDetailRespVO; +import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackagePartsSaveReqVO; +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 jakarta.annotation.Resource; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +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; + +/** + * 分堆 ServiceImpl 接口实现类 + * + * @author Gqr + * @since 2026/3/10 17:53 + */ +@Service +public class HeapSplitServiceImpl implements HeapSplitService { + + @Resource + private OrderItemMapper orderItemMapper; + + @Resource + private PlateMapper plateMapper; + + @Resource + private OrderPartsMapper orderPartsMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveHeapsplit(HeapSplitSaveReqVO reqVO) { + // 更新板件分堆状态 + 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::getPlateId, batch) + .eq(OrderItemDO::getHeapSplitStatus, 0) + .set(OrderItemDO::getHeapSplitStatus, 1)); + } + } + + // 删除板件分堆状态 + List delPlateIds = reqVO.getDelPlateIds(); + if (CollUtil.isNotEmpty(delPlateIds)) { + List> delPlatePartitions = CollUtil.split(delPlateIds, 1000); + for (List batch : delPlatePartitions) { + orderItemMapper.update(new LambdaUpdateWrapper() + .in(OrderItemDO::getOrderId, reqVO.getOrderIds()) + .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); + } + } + + // 删除配件分堆状态 + 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(); + + 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)); + + restoreGroup(orderItemDOS, num); + } + } + } + + @Override + public OrdersHeapSplitDetailRespVO getOrdersHeapSplitedDetail(List orderIds) { + OrdersHeapSplitDetailRespVO respVO = new OrdersHeapSplitDetailRespVO(); + respVO.setParts(orderPartsMapper.selectOrdersHeapSplitPartsList(orderIds)); + respVO.setPlates(plateMapper.selectOrdersHeapSplitPlateList(orderIds)); + return respVO; + } + + private void allocateSingleGroup(List list, int targetNum) { + + int remain = targetNum; + + for (OrderItemDO item : list) { + + if (remain <= 0) { + break; + } + + double current = Optional.ofNullable(item.getNum()).orElse(0.0); + if (current <= 0) { + continue; + } + + // 情况1:<= 直接吃掉(不拆分!) + if (current <= remain) { + + // 标记分堆 + item.setHeapSplitStatus(1); + + // 更新分堆数量 + item.setHeapNum(current); + + orderItemMapper.updateById(item); + + remain -= current; + } + + // 情况2:> 需要拆分 + else { + + // 1️⃣ 原记录扣减 + item.setHeapNum(current - remain); + orderItemMapper.updateById(item); + + // 2️⃣ 新建分堆记录 + OrderItemDO newItem = buildHeapItem(item, remain); + orderItemMapper.insert(newItem); + + remain = 0; + break; + } + } + + if (remain > 0) { + throw new ServiceException(new ErrorCode(10001, "数量不足,剩余未分配:" + remain)); + } + } + + 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.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())); + + List deleteIds = new ArrayList<>(); + List updateList = 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) { + + if (remain <= 0) break; + + double heap = Optional.ofNullable(item.getHeapNum()).orElse(0.0); + if (heap <= 0) continue; + + double toRestore = Math.min(heap, remain); + + OrderItemDO origin = originMap.get(item.getSourceId()); + if (origin == null) { + throw new ServiceException(new ErrorCode(10002, "找不到来源原 item")); + } + + // 🔥 从 origin.heapNum 扣减 + double originHeap = Optional.ofNullable(origin.getHeapNum()).orElse(0.0); + origin.setHeapNum(originHeap - toRestore); + + if (origin.getHeapNum() <= 0) { + origin.setHeapNum(0.0); + origin.setHeapSplitStatus(0); + } + + updateList.add(origin); + + // 子 item处理 + if (toRestore == heap) { + // 全扣 → 删除 + deleteIds.add(item.getId()); + } else { + // 部分扣 → 更新剩余 + item.setHeapNum(heap - toRestore); + updateList.add(item); + } + + 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 (!deleteIds.isEmpty()) { + orderItemMapper.deleteByIds(deleteIds); + } + } +} \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitTaskService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitTaskService.java deleted file mode 100644 index 563607ffa..000000000 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitTaskService.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.cf.imes.module.executor.service.heapsplit; - -import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitTaskListRespVO; -import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitTaskRespVO; -import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitTaskSaveReqVO; - -import java.util.List; - -/** - * 分堆任务 Service 接口 - * - * @author Gqr - * @since 2026/3/10 17:52 - */ -public interface HeapSplitTaskService { - /** - * 保存分堆任务 - * - * @param reqVO - */ - void saveHeapsplitTask(HeapSplitTaskSaveReqVO reqVO); - - /** - * 获取分堆任务列表 - * - * @return - */ - List getHeapsplitTaskList(String name, Integer status); - - /** - * 删除分堆任务 - * - * @param ids - */ - void deleteHeapsplitTask(List ids); - - /** - * 获取分堆任务内容 - * - * @param id - * @return - */ - HeapSplitTaskRespVO getHeapsplitTask(Long id); - - /** - * 重启分堆任务 - * - * @param id - */ - void restartHeapsplitTask(Long id); -} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitTaskServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitTaskServiceImpl.java deleted file mode 100644 index ff66ea9b0..000000000 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/heapsplit/HeapSplitTaskServiceImpl.java +++ /dev/null @@ -1,275 +0,0 @@ -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; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.cf.imes.framework.common.enums.DeletedCodeEnum; -import com.cf.imes.framework.common.enums.OrderItemTypeEnum; -import com.cf.imes.framework.common.exception.ServiceException; -import com.cf.imes.framework.common.util.Assert.AssertUtils; -import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; -import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitTaskListRespVO; -import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitTaskRespVO; -import com.cf.imes.module.executor.controller.admin.manage.pack.heapsplit.HeapSplitTaskSaveReqVO; -import com.cf.imes.module.executor.dal.dataobject.heapsplit.HeapSplitTaskDO; -import com.cf.imes.module.executor.dal.dataobject.heapsplit.HeapSplitTaskDetailDO; -import com.cf.imes.module.executor.dal.mysql.heapsplit.HeapSplitTaskDetailMapper; -import com.cf.imes.module.executor.dal.mysql.heapsplit.HeapSplitTaskMapper; -import com.cf.imes.module.executor.enums.heapsplit.HeapSplitTaskStatusEnum; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -import static com.cf.imes.module.executor.enums.ErrorCodeConstants.HEAP_SPLIT_NEED_RESTART; -import static com.cf.imes.module.executor.enums.ErrorCodeConstants.HEAP_SPLIT_NO_NEED_RESTART; -import static com.cf.imes.module.executor.enums.ErrorCodeConstants.HEAP_SPLIT_TASK_NAME_EXIST; -import static com.cf.imes.module.executor.enums.ErrorCodeConstants.HEAP_SPLIT_TASK_NOT_EXIST; - -/** - * 分堆任务 ServiceImpl 接口实现类 - * - * @author Gqr - * @since 2026/3/10 17:53 - */ -@Service -public class HeapSplitTaskServiceImpl implements HeapSplitTaskService { - @Resource - private HeapSplitTaskMapper heapSplitTaskMapper; - - @Resource - private HeapSplitTaskDetailMapper heapSplitTaskDetailMapper; - - @Override - @Transactional(rollbackFor = Exception.class) - public void saveHeapsplitTask(HeapSplitTaskSaveReqVO reqVO) { - Long taskId = reqVO.getId(); - if (ObjectUtil.isNull(taskId)) { - createHeapSplitTask(reqVO); - } else { - updateHeapSplitTask(reqVO); - } - } - - /** - * 创建分堆任务 - * - * @param reqVO - */ - public void createHeapSplitTask(HeapSplitTaskSaveReqVO reqVO) { - String taskName = reqVO.getName(); - // 1、校验任务名称 - validTaskName(taskName, null); - - // 2、创建任务 - int splittedPlateNum = reqVO.getSplittedPlateNum(); - int totalPlateNum = reqVO.getTotalPlateNum(); - int splittedPartNum = reqVO.getSplittedPartNum(); - int totalPartNum = reqVO.getTotalPartNum(); - // 所有板件&配件都分堆了就认为完成了 - boolean finish = (splittedPlateNum == totalPlateNum) && (splittedPartNum == totalPartNum); - - HeapSplitTaskDO heapSplitTaskDO = HeapSplitTaskDO.builder() - .name(taskName) - .splittedPlateNum(splittedPlateNum) - .unsplitPlateNum(reqVO.getUnsplitPlateNum()) - .totalPlateNum(totalPlateNum) - .splittedPartNum(splittedPartNum) - .unsplitPartNum(reqVO.getUnsplitPartNum()) - .totalPartNum(totalPartNum) - .status(finish ? HeapSplitTaskStatusEnum.FINISHED.getStatus() : HeapSplitTaskStatusEnum.UNFINISHED.getStatus()) - .orderIds(reqVO.getOrderIds()) - .build(); - heapSplitTaskMapper.insert(heapSplitTaskDO); - - // 3、插入任务明细,拆分每一千条插入一次 - batchInsertPlateDetail(heapSplitTaskDO.getId(), reqVO.getPlateIds()); - batchInsertPartDetail(heapSplitTaskDO.getId(), reqVO.getPartIds()); - - } - - /** - * 更新分堆任务 - * - * @param reqVO - */ - public void updateHeapSplitTask(HeapSplitTaskSaveReqVO reqVO) { - Long id = reqVO.getId(); - // 1、校验任务 - HeapSplitTaskDO heapSplitTaskDO = getById(id); - - // 2、校验任务名称 - validTaskName(reqVO.getName(), heapSplitTaskDO.getId()); - - // 3、更新完成状态 - int finishedStatus = HeapSplitTaskStatusEnum.FINISHED.getStatus(); - int unfinishedStatus = HeapSplitTaskStatusEnum.UNFINISHED.getStatus(); - if (ObjectUtil.equals(finishedStatus, heapSplitTaskDO.getStatus())) { - throw new ServiceException(HEAP_SPLIT_NEED_RESTART); - } - int splittedPlateNum = reqVO.getSplittedPlateNum(); - int totalPlateNum = reqVO.getTotalPlateNum(); - int splittedPartNum = reqVO.getSplittedPartNum(); - int totalPartNum = reqVO.getTotalPartNum(); - // 所有板件&配件都分堆了就认为完成了 - boolean finish = (splittedPlateNum == totalPlateNum) && (splittedPartNum == totalPartNum); - // 状态有所变化更新任务状态 - if(finish) { - heapSplitTaskMapper.update(new LambdaUpdateWrapper() - .eq(HeapSplitTaskDO::getId, id) - .eq(HeapSplitTaskDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus()) - .eq(HeapSplitTaskDO::getStatus, unfinishedStatus) - .set(HeapSplitTaskDO::getStatus, finishedStatus) - ); - } - - // 4、删除旧任务关联的明细 - // 循环删除,直到没有满足条件的数据 - for (int i = 0; i < Short.MAX_VALUE; i++) { - int deleteCount = heapSplitTaskDetailMapper.deleteByLimit(id, 1000); - // 达到删除预期条数,说明到底了 - if (deleteCount < 1000) { - break; - } - } - - // 5、插入任务明细 - batchInsertPlateDetail(heapSplitTaskDO.getId(), reqVO.getPlateIds()); - batchInsertPartDetail(heapSplitTaskDO.getId(), reqVO.getPartIds()); - } - - /** - * 查询 - * - * @param id - * @return - */ - private HeapSplitTaskDO getById(Long id) { - HeapSplitTaskDO heapSplitTaskDO = heapSplitTaskMapper.selectById(id); - if (ObjectUtil.isNull(heapSplitTaskDO)) { - throw new ServiceException(HEAP_SPLIT_TASK_NOT_EXIST); - } - return heapSplitTaskDO; - } - - /** - * 校验任务名是否唯一 - * - * @param name - * @param id - */ - private void validTaskName(String name, Long id) { - List heapSplitTaskDOList = heapSplitTaskMapper.selectList(new LambdaQueryWrapperX() - .eq(HeapSplitTaskDO::getName, name) - .eq(HeapSplitTaskDO::getOrganId, SecurityFrameworkUtils.getUserOrganId()) - .neIfPresent(HeapSplitTaskDO::getId, id)); - - if (CollUtil.isNotEmpty(heapSplitTaskDOList)) { - throw new ServiceException(HEAP_SPLIT_TASK_NAME_EXIST); - } - } - - /** - * 批量插入板件任务明细 - * - * @param taskId - * @param plateIds - */ - public void batchInsertPlateDetail(Long taskId, List plateIds) { - List> platePartitions = CollUtil.split(plateIds, 1000); - - for (List batch : platePartitions) { - List list = new ArrayList<>(batch.size()); - for (Long plateId : batch) { - HeapSplitTaskDetailDO heapSplitTaskPlateDetailDO = HeapSplitTaskDetailDO - .builder() - .taskId(taskId) - .detailId(plateId) - .type(OrderItemTypeEnum.PLATE.getType()) - .build(); - list.add(heapSplitTaskPlateDetailDO); - } - heapSplitTaskDetailMapper.insertBatchSomeColumn(list); - } - } - - /** - * 批量插入配件任务明细 - * - * @param taskId - * @param partIds - */ - public void batchInsertPartDetail(Long taskId, List partIds) { - List> partPartitions = CollUtil.split(partIds, 1000); - - for (List batch : partPartitions) { - List list = new ArrayList<>(batch.size()); - for (Long partId : batch) { - HeapSplitTaskDetailDO heapSplitTaskPartDetailDO = HeapSplitTaskDetailDO - .builder() - .taskId(taskId) - .detailId(partId) - .type(OrderItemTypeEnum.PARTS.getType()) - .build(); - list.add(heapSplitTaskPartDetailDO); - } - heapSplitTaskDetailMapper.insertBatchSomeColumn(list); - } - } - - @Override - public List getHeapsplitTaskList(String name, Integer status) { - return BeanUtil.copyToList(heapSplitTaskMapper.selectList(new LambdaQueryWrapperX() - .likeIfPresent(HeapSplitTaskDO::getName, name) - .eqIfPresent(HeapSplitTaskDO::getStatus, status)), HeapSplitTaskListRespVO.class); - } - - @Override - public void deleteHeapsplitTask(List ids) { - List idsToDelete = ids.stream().distinct().toList(); - - Long idsCount = heapSplitTaskMapper.selectCount(new LambdaQueryWrapper() - .in(HeapSplitTaskDO::getId, idsToDelete)); - if (idsToDelete.size() != idsCount) { - throw new ServiceException(HEAP_SPLIT_TASK_NOT_EXIST); - } - - heapSplitTaskMapper.deleteByIds(ids); - } - - @Override - public HeapSplitTaskRespVO getHeapsplitTask(Long id) { - HeapSplitTaskDO heapSplitTaskDO = getById(id); - - AssertUtils.equals(HeapSplitTaskStatusEnum.FINISHED.getStatus(), heapSplitTaskDO.getStatus(), HEAP_SPLIT_NEED_RESTART); - - // 查询任务关联的任务明细 - List heapSplitTaskDetailDOS = heapSplitTaskDetailMapper.selectList(new LambdaQueryWrapper() - .eq(HeapSplitTaskDetailDO::getTaskId, id)); - - return HeapSplitTaskRespVO.builder() - .id(id) - .orderIds(heapSplitTaskDO.getOrderIds()) - .plateIds(heapSplitTaskDetailDOS.stream().filter(detail -> detail.getType().equals(OrderItemTypeEnum.PLATE.getType())).map(HeapSplitTaskDetailDO::getDetailId).toList()) - .partIds(heapSplitTaskDetailDOS.stream().filter(detail -> detail.getType().equals(OrderItemTypeEnum.PARTS.getType())).map(HeapSplitTaskDetailDO::getDetailId).toList()) - .build(); - } - - @Override - public void restartHeapsplitTask(Long id) { - HeapSplitTaskDO heapSplitTaskDO = getById(id); - - AssertUtils.equals(HeapSplitTaskStatusEnum.UNFINISHED.getStatus(), heapSplitTaskDO.getStatus(), HEAP_SPLIT_NO_NEED_RESTART); - - heapSplitTaskMapper.update(new LambdaUpdateWrapper() - .eq(HeapSplitTaskDO::getId, id) - .eq(HeapSplitTaskDO::getStatus, HeapSplitTaskStatusEnum.FINISHED.getStatus()) - .set(HeapSplitTaskDO::getStatus, HeapSplitTaskStatusEnum.UNFINISHED.getStatus()) - ); - } -} \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/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 a395a6c67..c33760c34 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 @@ -4,6 +4,7 @@ package com.cf.imes.module.executor.service.manage.pack; import com.cf.imes.framework.common.pojo.PageResult; 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 java.util.List; @@ -14,7 +15,12 @@ public interface PackService { PageResult getPackPage(PackPageReqVO pageReqVO); - // 查看生产订单对应的包裹信息 + /** + * 查询生产单对应的包裹列表 + * + * @param reqVO + * @return + */ List getOrderPack(PackageDetailsReqVO reqVO); @@ -25,24 +31,38 @@ public interface PackService { List getOrderPlateList(Long orderId); + /** + * 查询订单列表中未打包的板件 + * + * @param orderIds + * @return + */ + List getOrdersPackPlateList(List orderIds); - // 查询多个订单对应的板材信息 - List getOrdersPlateList(List orderIds); + /** + * 查询订单列表中未打包的配件 + * + * @param orderIds + * @return + */ + List getOrdersPackPartsList(List orderIds); - - // 查看配件列表分页 - List getPartsList(OrderPartsReqVO reqVO); - - OrderPackRespVO updateParts(OrderPartsReqVO reqVO); - - - // 拆包 + /** + * 拆包 + * + * @param packageId + * @return + */ OrderPackRespVO unpacking(Long packageId); - - // 更新包裹 + /** + * 封包 + * + * @param packageVO + * @return + */ OrderPackRespVO updatePack(OrderPackReqVO packageVO); @@ -87,4 +107,20 @@ public interface PackService { * @return */ List getComponentCorrelation(PackScanComponentCorrelationReqVO reqVO); + + /** + * 获取订单列表下未打包的明细 + * + * @param orderIds + * @return + */ + OrdersUnpackDetailRespVO getOrdersUnpackDetails(List orderIds); + + /** + * 获取包裹板件、配件详情 + * + * @param packageNo + * @return + */ + List getPackageDetails(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 cd744282e..e2dd66d6c 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 @@ -1,10 +1,15 @@ 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.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; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.cf.imes.framework.common.enums.*; +import com.cf.imes.framework.common.exception.ErrorCode; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.Assert.AssertUtils; @@ -15,9 +20,11 @@ import com.cf.imes.framework.mybatis.core.query.QueryWrapperX; 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; +import com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.PackageDetailsRespVO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO; +import com.cf.imes.module.executor.dal.dataobject.pack.OrderPackagDONew; import com.cf.imes.module.executor.dal.dataobject.pack.OrderPackageDO; import com.cf.imes.module.executor.dal.dataobject.pack.OrderPrepackagedDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; @@ -25,6 +32,7 @@ import com.cf.imes.module.executor.dal.mysql.order.OrderMapper; 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.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.pack.PackScanComponentCorrelationTypeEnum; @@ -33,21 +41,24 @@ import com.cf.imes.module.executor.service.orderParts.OrderPartsService; import com.cf.imes.module.executor.service.ordercomponent.OrderComponentService; import com.cf.imes.module.executor.service.orderitem.OrderItemService; import com.cf.imes.module.executor.service.plate.PlateService; -import com.cf.imes.module.system.api.setting.SettingApi; import org.springframework.aop.framework.AopContext; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import jakarta.annotation.Resource; -import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; +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; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; @@ -73,6 +84,8 @@ public class PackServiceImpl implements PackService { @Resource private OrderPackageMapper orderPackageMapper; + @Resource + private OrderPackageNewMapper orderPackageNewMapper; @Resource private OrderItemMapper orderItemMapper; @@ -92,10 +105,6 @@ public class PackServiceImpl implements PackService { @Resource private OrderPrepackagedMapper orderPrepackagedMapper; - - @Resource - private SettingApi settingApi; - @Resource private OrderPlanApi orderPlanApi; @@ -167,71 +176,50 @@ public class PackServiceImpl implements PackService { } - - // 查询多个订单对应的板材信息 @Override - public List getOrdersPlateList(List orderIds) { + public List getOrdersPackPlateList(List orderIds) { - List plateDetailsRespVOS = orderPlateMapper.selectOrderPackPlateList(orderIds,getUserOrganId()); + List plateDetailsRespVOS = orderPlateMapper.selectOrdersPackPlateList(orderIds); if (plateDetailsRespVOS.isEmpty()) { return new ArrayList<>(); } - List packageIds = plateDetailsRespVOS.stream().map(PlateDetailsRespVO::getPackageId).distinct().toList(); - List orderPackageDOS = new ArrayList<>(); - if (!packageIds.isEmpty()) { - orderPackageDOS = orderPackageMapper.selectBatchIds(packageIds); - } - - - for (PlateDetailsRespVO plateDetailsRespVO : plateDetailsRespVOS) { - StringBuilder name = new StringBuilder(); - if (!plateDetailsRespVO.getProcessGroupNameList().isEmpty()) { - for (GroupNameList groupNameList : plateDetailsRespVO.getProcessGroupNameList()) { - // 去除最后的逗号 - name.append(groupNameList.getName()).append(","); - } - name = new StringBuilder(name.substring(0, name.length() - 1)); - } - plateDetailsRespVO.setProcessGroup(name.toString()); - - plateDetailsRespVO.setPackageNo(orderPackageDOS.stream() - .filter(m -> m.getId().equals(plateDetailsRespVO.getPackageId())) - .map(OrderPackageDO::getPackageNo).findFirst().orElse("")); - - } - return plateDetailsRespVOS; } - - // 查看生产订单对应的包裹信息 @Override - public List getOrderPack(PackageDetailsReqVO reqVO) { + public List getOrdersPackPartsList(List orderIds) { + List orderPartsRespVOS = orderPartsMapper.selectOrdersPartsList(orderIds); - List orderPackageVOS = orderPackageMapper.selectPackListByOrderId(Long.valueOf(reqVO.getOrderId()), getUserOrganId()); + if (orderPartsRespVOS.isEmpty()) { - if(orderPackageVOS.isEmpty()){ return new ArrayList<>(); } - OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId()); + return orderPartsRespVOS; - AssertUtils.notEmpty(orderDO, ORDER_DATE_ERROR); + } - orderPackageVOS.forEach(m -> { - m.setCustomOrderNo(orderDO.getCustomOrderNo()); - m.setCustomer(orderDO.getCustomer()); - m.setAddress(orderDO.getAddress()); - m.setDealer(orderDO.getDealer()); - m.setOrderRemark(orderDO.getRemark()); - } - ); + + @Override + public List getOrderPack(PackageDetailsReqVO reqVO) { + List orderIds = reqVO.getOrderIds(); + // 入参订单id列表对应的所有父子id列表 + List fatherAndSonOrderIds = orderService.getFatherAndSonOrderIds(orderIds); + if (CollUtil.isEmpty(fatherAndSonOrderIds)) { + return new ArrayList<>(); + } + + List orderPackageVOS = orderPackageMapper.getPackageNoInOrderIds(fatherAndSonOrderIds); + + if (orderPackageVOS.isEmpty()) { + return new ArrayList<>(); + } return orderPackageVOS; @@ -286,116 +274,6 @@ public class PackServiceImpl implements PackService { } - // 查看配件列表分页 - @Override - public List getPartsList(OrderPartsReqVO reqVO) { - - List orderPartsRespVOS = orderPartsMapper.selectPartsList(reqVO.getOrderId(), getUserOrganId()); - - orderPartsRespVOS.forEach(f->{ - f.setNum(f.getCount().stream().reduce(BigDecimal.ZERO, BigDecimal::add)); - - f.setCount(null); - f.setBodyId(null); - f.setRoomId(null); - f.setGroupId(null); - }); - - return orderPartsRespVOS; - - } - - - // 更新配件 - @Override - @Transactional(rollbackFor = Exception.class) - public OrderPackRespVO updateParts(OrderPartsReqVO reqVO) { - - validateOrdersExists(reqVO.getOrderId(),null); - - // 判断包裹ID是否为空,为空,走新增,不为空,走更新 - if (reqVO.getPackId() == null) { - - OrderPackageDO orderPackageDO = new OrderPackageDO(); - orderPackageDO.setOrderId(reqVO.getOrderId()); - orderPackageDO.setType(OrderPackageTypeEnum.PARTS.getType()); - orderPackageDO.setPackageNo(generatePackageNo()); - orderPackageDO.setStatus((OrderPackageStatusEnum.PACKAGED.getStatus())); - orderPackageMapper.insert(orderPackageDO); - // 订单明细表新增包裹 ID - if (reqVO.getAddPartsIdList() != null) { - orderItemMapper.insertPartsId(orderPackageDO.getId(), reqVO.getAddPartsIdList(), reqVO.getOrderId(), getUserOrganId()); - } - - // 判断当前订单的板材和配件是否已全部打包且当前订单的包裹已全部封包 - if (validateOrderPack(reqVO.getOrderId())) { - - PackServiceImpl p = (PackServiceImpl)AopContext.currentProxy(); - p.updateOrderStatus(reqVO.getOrderId()); - - } - - return typeConversion(orderPackageDO); - - } - - - if(reqVO.getAddPartsIdList().isEmpty() && reqVO.getAddPlateIdList().isEmpty() && reqVO.getDeletePartsIdList().isEmpty()){ - throw new ServiceException(PART_PACK_DATA_ERROR); - } - - - OrderPackageDO orderPackageDO = orderPackageMapper.selectByPackId(reqVO.getPackId(),reqVO.getOrderId(), getUserOrganId()); - - AssertUtils.notEmpty(orderPackageDO, ORDER_PACK_DATA_ERROR); - List orderItemDOS = orderItemMapper.selectPackList(reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId()); - List partsList = orderItemDOS.stream().map(OrderItemDO::getPartsId).distinct().toList(); - - - // 如果此时删除的包裹配件数量等于查询出来的配件数量,且新增的板材数量不为0,更改包裹的类型 - if (reqVO.getDeletePartsIdList().size() == partsList.size() && !reqVO.getAddPlateIdList().isEmpty()) { - - - // 删除订单明细表配件对应的包裹ID - orderItemMapper.deletePartsList(reqVO.getDeletePartsIdList(), reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId()); - - - // 订单明细表板材新增对应的包裹ID - orderItemMapper.insertPackId(reqVO.getAddPlateIdList(), reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId()); - - - // 更新包裹类型和包裹的状态 - orderPackageDO.setType(OrderPackageTypeEnum.PLATE.getType()); - orderPackageDO.setStatus(OrderPackageStatusEnum.PACKAGED.getStatus()); - orderPackageMapper.updateById(orderPackageDO); - return typeConversion(orderPackageDO); - - } - - - // 生产明细表新增的配件ID - if (!reqVO.getAddPartsIdList().isEmpty()) { - orderItemMapper.insertParts(reqVO.getAddPartsIdList(), reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId()); - } - // 生产明细表删除的配件ID - if (!reqVO.getDeletePartsIdList().isEmpty()) { - orderItemMapper.deletePartsList(reqVO.getDeletePartsIdList(), reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId()); - } - orderPackageDO.setStatus(OrderPackageStatusEnum.PACKAGED.getStatus()); - - orderPackageMapper.updateById(orderPackageDO); - - - // 判断当前订单的板材和配件是否已全部打包且当前订单的包裹已全部封包 - if (validateOrderPack(reqVO.getOrderId())) { - - PackServiceImpl p = (PackServiceImpl)AopContext.currentProxy(); - p.updateOrderStatus(reqVO.getOrderId()); - - } - - return typeConversion(orderPackageDO); - } // 拆包 @@ -403,124 +281,435 @@ public class PackServiceImpl implements PackService { @Transactional(rollbackFor = Exception.class) public OrderPackRespVO unpacking(Long packageID) { - OrderPackageDO packageDO = orderPackageMapper.selectById(packageID); + List orderPackagDONews = orderPackageNewMapper.selectList(new LambdaQueryWrapper() + .eq(OrderPackagDONew::getPackageNo, packageID) + ); + AssertUtils.notEmpty(orderPackagDONews, ORDER_PACK_DATA_NULL_ERROR); - AssertUtils.notEmpty(packageDO, ORDER_PACK_DATA_NULL_ERROR); + // 整理出orderIds + List orderIds = orderPackagDONews.stream().map(OrderPackagDONew::getOrderId).distinct().toList(); - Long orderId = packageDO.getOrderId(); + // 更新包裹状态 + orderPackageNewMapper.update(new LambdaUpdateWrapper() + .eq(OrderPackagDONew::getPackageNo, packageID) + .in(OrderPackagDONew::getOrderId, orderIds) + .set(OrderPackagDONew::getStatus, OrderPackageStatusEnum.UNPACKED.getStatus()) + ); - 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); + for (Long orderId : orderIds) { + OrderDO orderDO = ordersMapper.selectById(orderId); + 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); } - - ordersMapper.updateById(orderDO); - - packageDO.setStatus(OrderPackageStatusEnum.UNPACKED.getStatus()); - orderPackageMapper.updateById(packageDO); - return typeConversion(packageDO); +// 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); } - // 更新包裹 @Override @Transactional(rollbackFor = Exception.class) public OrderPackRespVO updatePack(OrderPackReqVO packageVO) { - validateOrdersExists(packageVO.getOrderId(),null); + String packNo = packageVO.getPackNo(); + List orderIds = packageVO.getOrderIds(); + List addPlateIdList = packageVO.getAddPlateIdList(); + List deletePlateIdList = packageVO.getDeletePlateIdList(); + List addPartsList = packageVO.getAddPartsList(); + List delPartsList = packageVO.getDelPartsList(); + Integer packMethod = packageVO.getPackMethod(); + + OrderPackagDONew existPackageDO = validateOrdersExists(orderIds, packNo); // 判断包裹ID是否为空,为空,走新增,不为空,走更新 - if (packageVO.getPackId() == null) { - - OrderPackageDO orderPackageDO = new OrderPackageDO(); - orderPackageDO.setOrderId(packageVO.getOrderId()); - orderPackageDO.setType(OrderPackageTypeEnum.PLATE.getType()); - orderPackageDO.setPackageNo(generatePackageNo()); - orderPackageDO.setStatus((OrderPackageStatusEnum.PACKAGED.getStatus())); - orderPackageDO.setRemark(packageVO.getRemark()); - orderPackageMapper.insert(orderPackageDO); - // 订单明细表新增包裹 ID - if (packageVO.getAddPlateIdList() != null) { - orderItemMapper.insertPackId(packageVO.getAddPlateIdList(), orderPackageDO.getId(), packageVO.getOrderId(), getUserOrganId()); + if (ObjectUtil.isEmpty(existPackageDO)) { + String packageNo = generatePackageNo(); + List orderPackageDOS = new ArrayList<>(); + for (Long orderId : orderIds) { + OrderPackagDONew orderPackageDO = new OrderPackagDONew(); + orderPackageDO.setOrderId(orderId); + orderPackageDO.setPackageNo(packageNo); + orderPackageDO.setStatus((OrderPackageStatusEnum.PACKAGED.getStatus())); + orderPackageDO.setRemark(packageVO.getRemark()); + orderPackageDOS.add(orderPackageDO); + } + orderPackageNewMapper.insertBatch(orderPackageDOS); + // 板件明细新增包裹 ID + List> split = CollUtil.split(addPlateIdList, 1000); + if (CollUtil.isNotEmpty(split)) { + for (List batch : split) { + orderItemMapper.updatePlatesItemPackageId(batch, packageNo, orderIds); + } } - if (validateOrderPack(packageVO.getOrderId())) { + // 配件明细新增包裹 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; + })); - PackServiceImpl p = (PackServiceImpl)AopContext.currentProxy(); - p.updateOrderStatus(packageVO.getOrderId()); + // 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); + } + } } - return typeConversion(orderPackageDO); + // 更新订单打包状态 + for (Long orderId : orderIds) { + if (validateOrderPack(orderId)) { + + // 修改订单的打包状态 + PackServiceImpl p = (PackServiceImpl) AopContext.currentProxy(); + p.updateOrderStatus(orderId); + } + } + + return typeConversion(orderPackageDOS.get(0), orderIds); } - - if(packageVO.getAddPlateIdList().isEmpty() && packageVO.getAddPartsIdList().isEmpty() && packageVO.getDeletePlateIdList().isEmpty()){ + if (CollUtil.isEmpty(addPlateIdList) && CollUtil.isEmpty(addPartsList) + && CollUtil.isEmpty(deletePlateIdList) && CollUtil.isEmpty(delPartsList)) { throw new ServiceException(PART_PACK_DATA_ERROR); } - - OrderPackageDO orderPackageDO = orderPackageMapper.selectByPackId(packageVO.getPackId(),packageVO.getOrderId(), getUserOrganId()); - - AssertUtils.notEmpty(orderPackageDO, ORDER_PACK_DATA_ERROR); - - List orderItemDOS = orderItemMapper.selectPackList(packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId()); - List plateList = orderItemDOS.stream().map(OrderItemDO::getPlateId).distinct().toList(); - - - // 如果此时删除的包裹板材数量等于查询出来的板材数量,且新增的配件数量不为0,更改包裹的类型 - if (packageVO.getDeletePlateIdList().size() == plateList.size() && !packageVO.getAddPartsIdList().isEmpty()) { - - - // 删除订单明细表板件对应的包裹ID - orderItemMapper.deletePackId(packageVO.getDeletePlateIdList(), packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId()); - - - // 订单明细表配件新增对应的包裹ID - orderItemMapper.insertParts(packageVO.getAddPartsIdList(), packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId()); - - - // 更新包裹类型和包裹的状态 - orderPackageDO.setType(OrderPackageTypeEnum.PARTS.getType()); - orderPackageDO.setStatus(OrderPackageStatusEnum.PACKAGED.getStatus()); - orderPackageMapper.updateById(orderPackageDO); - return typeConversion(orderPackageDO); - + String existPackageNo = existPackageDO.getPackageNo(); + // 板件明细新增包裹 ID + List> split = CollUtil.split(addPlateIdList, 1000); + if (CollUtil.isNotEmpty(split)) { + for (List batch : split) { + orderItemMapper.updatePlatesItemPackageId(batch, existPackageNo, orderIds); + } } + // 配件明细新增包裹 ID + if (CollUtil.isNotEmpty(addPartsList)) { + Map> groupMap = + addPartsList.stream().collect(Collectors.groupingBy(PackagePartsSaveReqVO::getBodyId)); - // 生产明细表新增包裹ID - if (!packageVO.getAddPlateIdList().isEmpty()) { - orderItemMapper.insertPackId(packageVO.getAddPlateIdList(), packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId()); + 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 - if (!packageVO.getDeletePlateIdList().isEmpty()) { - orderItemMapper.deletePackId(packageVO.getDeletePlateIdList(), packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId()); - } - orderPackageDO.setStatus(OrderPackageStatusEnum.PACKAGED.getStatus()); - - orderPackageMapper.updateById(orderPackageDO); - - - // 判断当前订单的板材和配件是否已全部打包且当前订单的包裹已全部封包 - if (validateOrderPack(packageVO.getOrderId())) { - - // 修改订单的打包状态 - PackServiceImpl p = (PackServiceImpl)AopContext.currentProxy(); - p.updateOrderStatus(packageVO.getOrderId()); - + // 板件明细移除包裹 ID + List> split3 = CollUtil.split(deletePlateIdList, 1000); + if (CollUtil.isNotEmpty(split3)) { + for (List batch : split3) { + orderItemMapper.updatePlatesItemUnPackageId(batch, existPackageNo, orderIds); + } } - return typeConversion(orderPackageDO); + // 配件明细移除包裹 ID + if (CollUtil.isNotEmpty(delPartsList)) { + // 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); + } + } + } + + // 更新封包状态 + orderPackageNewMapper.update(new LambdaUpdateWrapper() + .eq(OrderPackagDONew::getPackageNo, existPackageNo) + .in(OrderPackagDONew::getOrderId, orderIds) + .eq(OrderPackagDONew::getStatus, OrderPackageStatusEnum.UNPACKED.getStatus()) + .set(OrderPackagDONew::getStatus, OrderPackageStatusEnum.PACKAGED.getStatus())); + + + // 更新订单打包状态 + for (Long orderId : orderIds) { + if (validateOrderPack(orderId)) { + + // 修改订单的打包状态 + PackServiceImpl p = (PackServiceImpl) AopContext.currentProxy(); + p.updateOrderStatus(orderId); + } + } + + return typeConversion(existPackageDO, orderIds); + + } + + 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())); + + List deleteIds = new ArrayList<>(); + List updateList = new ArrayList<>(); + + // 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) { + + 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; + } + + // 2️⃣ 再处理原 item(剩余的 packNum) + List originItems = originMap.values().stream() + .filter(i -> i.getPackageId() != 0L) + .collect(Collectors.toList()); + + for (OrderItemDO item : originItems) { + + if (remain <= 0) break; + + double pack = Optional.ofNullable(item.getPackNum()).orElse(0.0); + if (pack <= 0) continue; + + double toRestore = Math.min(pack, remain); + + item.setPackNum(pack - toRestore); + + if (item.getPackNum() <= 0) { + item.setPackNum(0.0); + item.setPackageId(0L); + } + + 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) { + + int remain = targetNum; + + for (OrderItemDO item : list) { + + if (remain <= 0) { + break; + } + + double current = Optional.ofNullable(item.getPackNum()) + .filter(v -> v > 0) + .orElse(Optional.ofNullable(item.getNum()).orElse(0.0)); + if (current <= 0) { + continue; + } + + // 情况1:<= 直接吃掉(不拆分!) + if (current <= remain) { + + // 标记打包 + item.setPackageId(Long.parseLong(packNo)); + + // 更新打包数量 + item.setPackNum(current); + + orderItemMapper.updateById(item); + + remain -= current; + } + + // 情况2:> 需要拆分 + else { + + // 原记录扣减 + item.setPackNum(current - remain); + orderItemMapper.updateById(item); + + // 新建分堆记录 + OrderItemDO newItem = buildPackItem(item, packNo, remain); + orderItemMapper.insert(newItem); + + remain = 0; + break; + } + } + + if (remain > 0) { + throw new ServiceException(new ErrorCode(10001, "数量不足,剩余未分配:" + remain)); + } + } + + private OrderItemDO buildPackItem(OrderItemDO source, String packNo, double packNum) { + OrderItemDO newItem = new OrderItemDO(); + + // 基础字段复制(建议用BeanUtils) + org.springframework.beans.BeanUtils.copyProperties(source, newItem); + + newItem.setId(null); // 新ID + newItem.setPackNum(packNum); + + // 标记为“已打包” + newItem.setPackageId(Long.parseLong(packNo)); + newItem.setSourceId(source.getId()); + + return newItem; } @@ -583,62 +772,147 @@ public class PackServiceImpl implements PackService { @Override @Transactional(rollbackFor = Exception.class) public void deleteOrderPack(PackReqVO reqVO) { + Long packageNo = reqVO.getPackageNo(); + List orderIds = reqVO.getOrderIds(); - - - // 判断包裹的类型是否为其他类型,如果是,则删除其包裹信息 - if (reqVO.getIsOther()) { - - List partsIds = orderItemMapper.selectPackList(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId()) - .stream().map(OrderItemDO::getPartsId) - .distinct() - .toList(); - if(partsIds.isEmpty()){ - return; - } - - orderPartsMapper.deleteOrderParts(partsIds, reqVO.getOrderId(), getUserOrganId()); - - orderPackageMapper.updateParts(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId()); - - orderItemMapper.deleteParts(reqVO.getPackageId(), reqVO.getOrderId(), partsIds, getUserOrganId()); - - List orderPackageDOS = orderPackageMapper.selectPackStatusList(reqVO.getOrderId(), getUserOrganId()); - - if(orderPackageDOS.isEmpty()){ - - OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId()); - - orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus()); - - ordersMapper.updateById(orderDO); - - } - + List orderPackagDOS = orderPackageNewMapper.selectList(new LambdaQueryWrapper() + .eq(OrderPackagDONew::getPackageNo, packageNo) + .in(OrderPackagDONew::getOrderId, orderIds) + ); + if (CollUtil.isEmpty(orderPackagDOS)) { return; } - - - orderPackageMapper.updateParts(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId()); - - orderItemMapper.deleteOrderPack(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId()); - - orderPrepackagedMapper.deletePacked(reqVO.getOrderId(),getUserOrganId()); - - - List orderPackageDOS = orderPackageMapper.selectPackStatusList(reqVO.getOrderId(), getUserOrganId()); - - if(orderPackageDOS.isEmpty()){ - - OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId()); - - orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus()); - - ordersMapper.updateById(orderDO); - + // 如果有未拆包的提示先拆包 + if (orderPackagDOS.stream().anyMatch(o -> o.getStatus() == OrderPackageStatusEnum.PACKAGED.getStatus())) { + // todo 异常提示 + throw new ServiceException(new ErrorCode(10001, "请先拆包")); } + // 整理出该包裹对应的订单id列表 + List packOrderIds = orderPackagDOS.stream() + .map(OrderPackagDONew::getOrderId) + .distinct() + .toList(); + // 移除板件的打包状态 + orderItemMapper.update(new LambdaUpdateWrapper() + .in(OrderItemDO::getOrderId, packOrderIds) + .eq(OrderItemDO::getPackageId, packageNo) + .eq(OrderItemDO::getPartsId, 0) + .set(OrderItemDO::getPackageId, 0) + ); + + // 查询是否有部分打包的配件 + List newItemDOS = orderItemMapper.selectList(new LambdaQueryWrapper() + .in(OrderItemDO::getOrderId, packOrderIds) + .eq(OrderItemDO::getPackageId, packageNo) + .ne(OrderItemDO::getPartsId, 0) + .ne(OrderItemDO::getSourceId, 0) + ); + // 整理出存在部分打包的配件partsId + List partsIds = newItemDOS.stream() + .map(OrderItemDO::getPartsId) + .distinct() + .toList(); + + if (CollUtil.isNotEmpty(partsIds)) { + // 查询partIds下的item列表 + List partItemDOS = orderItemMapper.selectList(new LambdaQueryWrapper() + .in(OrderItemDO::getOrderId, packOrderIds) + .in(OrderItemDO::getPartsId, partsIds) + ); + // 基于order_parts id分组 + Map> partItemMap = newItemDOS.stream().collect(Collectors.groupingBy(OrderItemDO::getSourceId)); + + List updateList = new ArrayList<>(); + List deleteIds = new ArrayList<>(); + List insertList = new ArrayList<>(); + for (Map.Entry> entry : partItemMap.entrySet()) { + + List list = entry.getValue(); + if (CollUtil.isEmpty(list)) { + continue; + } + + // 1️⃣ 找基准 item(source = true) + OrderItemDO baseItem = partItemDOS.stream() + .filter(i -> ObjectUtil.equals(entry.getKey(), i.getId())) + .findFirst() + .orElseThrow(() -> new ServiceException( + new ErrorCode(10001, "未找到 sourceId对应的基准item, partsId=" + entry.getKey()) + )); + + boolean basePacked = baseItem.getPackageId() != null && baseItem.getPackageId() != 0; + double basePack = Optional.ofNullable(baseItem.getPackNum()).orElse(0.0); + double sumOthers = 0.0; + + // 2️⃣ 累加其他 item + for (OrderItemDO item : list) { + + if (item.getId().equals(baseItem.getId())) continue; + + sumOthers += Optional.ofNullable(item.getPackNum()).orElse(0.0); + deleteIds.add(item.getId()); + } + + // ✅ 情况1:未打包 → 正常合并 + if (!basePacked) { + baseItem.setPackNum(basePack + sumOthers); + updateList.add(baseItem); + } + // ✅ 情况2:已打包 → 拆分新基准 + else { + // ① 原基准降级 + baseItem.setSourceId(baseItem.getId()); + updateList.add(baseItem); + + // ② 新建基准 + OrderItemDO newBase = new OrderItemDO(); + BeanUtil.copyProperties(baseItem, newBase); + + newBase.setId(null); + newBase.setSourceId(0L); + newBase.setPackageId(0L); // ❗新基准一定是未打包 + newBase.setPackNum(sumOthers); + + insertList.add(newBase); + } + } + + // 批量执行 + if (!updateList.isEmpty()) { + orderItemMapper.updateBatch(updateList); + } + + if (!insertList.isEmpty()) { + orderItemMapper.insertBatch(insertList); + } + + if (!deleteIds.isEmpty()) { + orderItemMapper.deleteBatchIds(deleteIds); + } + } + // 移除配件的打包状态 + orderItemMapper.update(new LambdaUpdateWrapper() + .in(OrderItemDO::getOrderId, packOrderIds) + .eq(OrderItemDO::getPackageId, packageNo) + .eq(OrderItemDO::getPlateId, 0) + .set(OrderItemDO::getPackageId, 0) + ); + + + // 移除包裹关联数据 + orderPackageNewMapper.delete(new LambdaQueryWrapper() + .eq(OrderPackagDONew::getPackageNo, packageNo) + .in(OrderPackagDONew::getOrderId, packOrderIds) + ); + + // 更新订单的已打包状态 + ordersMapper.update(new LambdaUpdateWrapper() + .in(OrderDO::getId, packOrderIds) + .eq(OrderDO::getPackaged, OrderPackageStatusEnum.PACKAGED.getStatus()) + .set(OrderDO::getPackaged, OrderPackageStatusEnum.UNPACKED.getStatus()) + ); } @@ -779,23 +1053,31 @@ public class PackServiceImpl implements PackService { } + /** + * 校验包裹有效性 + * + * @param orderIds + * @param packNo + */ + private OrderPackagDONew validateOrdersExists(List orderIds, String packNo) { - private void validateOrdersExists(Long orderId, Long packId) { - - OrderDO orderDO = ordersMapper.selectById(orderId); + List orderDO = ordersMapper.selectByIds(orderIds); AssertUtils.notEmpty(orderDO, ORDER_PACK_ERROR); - if(packId != null){ - OrderPackageDO orderPackageDO = orderPackageMapper.selectById(packId); - AssertUtils.notEmpty(orderPackageDO,ORDER_PACK_DATA_ERROR); + if (StrUtil.isNotEmpty(packNo)) { + List orderPackageDOS = orderPackageNewMapper.selectList(new LambdaQueryWrapper() + .eq(OrderPackagDONew::getPackageNo, packNo)); + AssertUtils.notEmpty(orderPackageDOS, ORDER_PACK_DATA_ERROR); + return orderPackageDOS.get(0); } + return null; } // 类型转换 private OrderPackRespVO typeConversion(OrderPackageDO orderPackageDO) { return OrderPackRespVO.builder() - .id(orderPackageDO.getId()) +// .id(orderPackageDO.getId()) .orderId(orderPackageDO.getOrderId()) .organId(orderPackageDO.getOrganId()) .packageNo(orderPackageDO.getPackageNo()) @@ -807,6 +1089,19 @@ public class PackServiceImpl implements PackService { } + private OrderPackRespVO typeConversion(OrderPackagDONew orderPackageDO, List orderIds) { + return OrderPackRespVO.builder() + .orderIds(orderIds) + .organId(orderPackageDO.getOrganId()) + .packageNo(orderPackageDO.getPackageNo()) + .name(orderPackageDO.getName()) + .status(orderPackageDO.getStatus()) + .remark(orderPackageDO.getRemark()) + .build(); + + } + + // 打包翻页查询 @@ -933,28 +1228,33 @@ public class PackServiceImpl implements PackService { // 没有归属部件返回自己本身 List self = List.of(id); - Long compId; + OrderItemDO itemDO; if (com.cf.imes.module.executor.enums.OrderItemTypeEnum.PLATE_ITEM.getStatus().equals(itemType)) { // 板件 PlateDO plate = plateService.getPlate(id); AssertUtils.notEmpty(plate, PLATE_NOT_EXISTS); // 查询关联部件id - compId = orderItemService.getPlateItemCompId(id); + itemDO = orderItemService.getPlateItemCompId(id); } else { // 配件 OrderPartsDO part = orderPartsService.getPart(id); AssertUtils.notEmpty(part, ORDER_PARTS_NOT_EXISTS); // 查询关联部件id - compId = orderItemService.getPartItemCompId(id); + itemDO = orderItemService.getPartItemCompId(id); } - if (ObjectUtil.isNull(compId)) { - // 没有归属部件返回自己本身 + if (ObjectUtil.isNull(itemDO)) { + // 没查到返回自己本身 return self; } List componentIdList; - if (PackScanComponentCorrelationTypeEnum.PARENT.getType().equals(type)) { + Long compId = itemDO.getCompId(); + Long groupId = reqVO.isRelateGroup() ? itemDO.getGroupId() : null; + if (PackScanComponentCorrelationTypeEnum.SELF.getType().equals(type)) { + // 本身不查部件树 + componentIdList = null; + } else if (PackScanComponentCorrelationTypeEnum.PARENT.getType().equals(type)) { // 部件父级 componentIdList = orderComponentService.getChildComponentIdsOnMyParent(compId); } else { @@ -962,16 +1262,40 @@ public class PackServiceImpl implements PackService { componentIdList = orderComponentService.getChildComponentIdsOnTopId(compId); } - if (CollUtil.isEmpty(componentIdList)) { - // 没有归属部件返回自己本身 + // 没有归属部件且没有归属加工组返回自己本身 + if (CollUtil.isEmpty(componentIdList) && ObjectUtil.isNull(groupId)) { return self; } - List componentIdsCorrelationItemIds = orderItemService.getComponentIdsCorrelationItemIds(orderIds, componentIdList); + // 是否勾选了加工组 + List componentIdsCorrelationItemIds = orderItemService.getComponentIdsCorrelationItemIds(orderIds, componentIdList, groupId); if (CollUtil.isEmpty(componentIdsCorrelationItemIds)) { return self; } return componentIdsCorrelationItemIds; } + + @Override + public OrdersUnpackDetailRespVO getOrdersUnpackDetails(List orderIds) { + OrdersUnpackDetailRespVO ordersUnpackDetailRespVO = new OrdersUnpackDetailRespVO(); + ordersUnpackDetailRespVO.setPlates(orderPlateMapper.selectOrdersPackPlateList(orderIds)); + ordersUnpackDetailRespVO.setParts(orderPartsMapper.selectOrdersPartsList(orderIds)); + return ordersUnpackDetailRespVO; + } + + @Override + public List getPackageDetails(String packageNo) { + List orderPackagDONews = orderPackageNewMapper.selectList(new LambdaQueryWrapper() + .eq(OrderPackagDONew::getPackageNo, packageNo)); + + if (CollUtil.isEmpty(orderPackagDONews)) { + return new ArrayList<>(); + } + Set orderIds = orderPackagDONews.stream().map(OrderPackagDONew::getOrderId).collect(Collectors.toSet()); + 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/manage/query/ProductionStatusServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/query/ProductionStatusServiceImpl.java index 7c00ee03e..05f025336 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/query/ProductionStatusServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/query/ProductionStatusServiceImpl.java @@ -33,55 +33,55 @@ public class ProductionStatusServiceImpl implements ProductionStatusService { @Override public PageResult queryPackageDetails(PackDetailsReqVO reqVO) { - PageDTO page = new PageDTO<>(reqVO.getPageNo(), reqVO.getPageSize()); - - // 查看配件包裹 - if(reqVO.getType().equals(OrderPackageTypeEnum.PARTS.getType()) || reqVO.getType().equals(OrderPackageTypeEnum.OTHER_ACCESSORIES.getType())){ +// PageDTO page = new PageDTO<>(reqVO.getPageNo(), reqVO.getPageSize()); +// +// // 查看配件包裹 +// if(reqVO.getType().equals(OrderPackageTypeEnum.PARTS.getType()) || reqVO.getType().equals(OrderPackageTypeEnum.OTHER_ACCESSORIES.getType())){ +// +// +// // 查看配件包裹 +// IPage packageDetailsRespVOS = orderPartsMapper.selectParts(page,reqVO.getPackageId(),getUserOrganId()); +// if (CollUtil.isEmpty(packageDetailsRespVOS.getRecords())) { +// return new PageResult<>(); +// } +// +// packageDetailsRespVOS.getRecords().forEach(f->{ +// f.setNum(f.getCount().stream().reduce(BigDecimal.ZERO, BigDecimal::add)); +// +// f.setCount(null); +// f.setBodyId(null); +// f.setRoomId(null); +// f.setGroupId(null); +// }); +// +// return new PageResult<>(packageDetailsRespVOS.getRecords(), packageDetailsRespVOS.getTotal()); +// +// } - // 查看配件包裹 - IPage packageDetailsRespVOS = orderPartsMapper.selectParts(page,reqVO.getPackageId(),getUserOrganId()); - if (CollUtil.isEmpty(packageDetailsRespVOS.getRecords())) { - return new PageResult<>(); - } - - packageDetailsRespVOS.getRecords().forEach(f->{ - f.setNum(f.getCount().stream().reduce(BigDecimal.ZERO, BigDecimal::add)); - - f.setCount(null); - f.setBodyId(null); - f.setRoomId(null); - f.setGroupId(null); - }); - - return new PageResult<>(packageDetailsRespVOS.getRecords(), packageDetailsRespVOS.getTotal()); - - } - - - // 查看板材包裹 - IPage packageDetailsRespVOS = orderPlateMapper.selectPackPlateList(page,reqVO.getPackageId(),getUserOrganId()); - - if (CollUtil.isEmpty(packageDetailsRespVOS.getRecords())) { - return new PageResult<>(); - } - - for (PackageDetailsRespVO plateDetailsRespVO : packageDetailsRespVOS.getRecords()) { - String name = ""; - - if(!plateDetailsRespVO.getProcessGroupNameList().isEmpty()) { - for (GroupNameList groupNameList : plateDetailsRespVO.getProcessGroupNameList()) { - // 去除最后的逗号 - name += groupNameList.getName() + ","; - } - name = name.substring(0, name.length() - 1); - } - - plateDetailsRespVO.setProcessGroup(name); - } - - - return new PageResult<>(packageDetailsRespVOS.getRecords(), packageDetailsRespVOS.getTotal()); - +// // 查看板材包裹 +// IPage packageDetailsRespVOS = orderPlateMapper.selectPackPlateList(page,reqVO.getPackageId(),getUserOrganId()); +// +// if (CollUtil.isEmpty(packageDetailsRespVOS.getRecords())) { +// return new PageResult<>(); +// } +// +// for (PackageDetailsRespVO plateDetailsRespVO : packageDetailsRespVOS.getRecords()) { +// String name = ""; +// +// if(!plateDetailsRespVO.getProcessGroupNameList().isEmpty()) { +// for (GroupNameList groupNameList : plateDetailsRespVO.getProcessGroupNameList()) { +// // 去除最后的逗号 +// name += groupNameList.getName() + ","; +// } +// name = name.substring(0, name.length() - 1); +// } +// +// plateDetailsRespVO.setProcessGroup(name); +// } +// +// +// return new PageResult<>(packageDetailsRespVOS.getRecords(), packageDetailsRespVOS.getTotal()); + return null; } } 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 fc60d4e1e..d5c16022d 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,4 +182,18 @@ public interface OrderService { OrderAllData getOrderAllData(Long orderId, Long planId); + /** + * 检查item是否有未打包的并更新订单打包状态 + * + * @param orderIds + */ + void updateOrdersPackageStatus(List orderIds); + + /** + * 获取订单id对应的所有父子订单id + * + * @param orderIds + * @return + */ + List getFatherAndSonOrderIds(List orderIds); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/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 a97b90d9b..28c78e371 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,5 +1683,46 @@ public class OrderServiceImpl implements OrderService { } + @Override + public void updateOrdersPackageStatus(List orderIds) { + orderMapper.updateOrdersPackageStatus(orderIds); + } + + @Override + public List getFatherAndSonOrderIds(List orderIds) { + if (CollUtil.isEmpty(orderIds)) { + return Collections.emptyList(); + } + + // 查数据库(过滤掉不存在/已删除) + List orders = orderMapper.selectByIds(orderIds); + if (CollUtil.isEmpty(orders)) { + return Collections.emptyList(); + } + + // 用 Set 去重 + Set allIds = orders.stream() + .map(OrderDO::getId) + .collect(Collectors.toSet()); + + // 收集父ID + Set parentIds = orders.stream() + .map(OrderDO::getParentNo) + .filter(id -> ObjectUtil.notEqual(id, OrderDO.PARENT_ID_ROOT)) + .collect(Collectors.toSet()); + + if (CollUtil.isNotEmpty(parentIds)) { + // 再查一遍父订单(避免父也被删除) + List parentOrders = orderMapper.selectByIds(parentIds); + + if (CollUtil.isNotEmpty(parentOrders)) { + parentOrders.stream() + .map(OrderDO::getId) + .forEach(allIds::add); + } + } + + return new ArrayList<>(allIds); + } } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderitem/OrderItemService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderitem/OrderItemService.java index f932950bd..7e6c705b2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderitem/OrderItemService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderitem/OrderItemService.java @@ -1,5 +1,7 @@ package com.cf.imes.module.executor.service.orderitem; +import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; + import java.util.List; /** @@ -16,7 +18,7 @@ public interface OrderItemService { * @param plateId * @return */ - Long getPlateItemCompId(Long plateId); + OrderItemDO getPlateItemCompId(Long plateId); /** * 查询配件订单明细关联的部件id @@ -24,7 +26,7 @@ public interface OrderItemService { * @param partId * @return */ - Long getPartItemCompId(Long partId); + OrderItemDO getPartItemCompId(Long partId); /** * @@ -32,5 +34,5 @@ public interface OrderItemService { * @param orderIds * @return */ - List getComponentIdsCorrelationItemIds(List orderIds, List componentIds); + List getComponentIdsCorrelationItemIds(List orderIds, List componentIds, Long groupId); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderitem/OrderItemServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderitem/OrderItemServiceImpl.java index d674fba3d..6df9a760f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderitem/OrderItemServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderitem/OrderItemServiceImpl.java @@ -22,35 +22,36 @@ public class OrderItemServiceImpl implements OrderItemService { private OrderItemMapper orderItemMapper; @Override - public Long getPlateItemCompId(Long id) { + public OrderItemDO getPlateItemCompId(Long id) { List plateItemDOS = orderItemMapper.selectList(new LambdaQueryWrapper() .eq(OrderItemDO::getPlateId, id) - .select(OrderItemDO::getCompId)); + .select(OrderItemDO::getCompId, OrderItemDO::getGroupId)); if (CollUtil.isNotEmpty(plateItemDOS)) { - return plateItemDOS.get(0).getCompId(); + return plateItemDOS.get(0); } return null; } @Override - public Long getPartItemCompId(Long partId) { + public OrderItemDO getPartItemCompId(Long partId) { List partItemDOS = orderItemMapper.selectList(new LambdaQueryWrapper() - .eq(OrderItemDO::getPartsId, partId)); + .eq(OrderItemDO::getPartsId, partId) + .select(OrderItemDO::getCompId, OrderItemDO::getGroupId)); if (CollUtil.isNotEmpty(partItemDOS)) { - return partItemDOS.get(0).getCompId(); + return partItemDOS.get(0); } return null; } @Override - public List getComponentIdsCorrelationItemIds(List orderIds, List componentIds) { + public List getComponentIdsCorrelationItemIds(List orderIds, List componentIds, Long groupId) { List resultList = new ArrayList<>(); if (CollUtil.isEmpty(componentIds)) { return resultList; } // 查询关联的板件和配件id - resultList.addAll(orderItemMapper.selectComponentCorrelationPlateIds(orderIds, componentIds)); - resultList.addAll(orderItemMapper.selectComponentCorrelationPartsIds(orderIds, componentIds)); + resultList.addAll(orderItemMapper.selectComponentCorrelationPlateIds(orderIds, componentIds, groupId)); + resultList.addAll(orderItemMapper.selectComponentCorrelationPartsIds(orderIds, componentIds, groupId)); return resultList; } } 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 b7e2011cd..b03dd5638 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 @@ -643,4 +643,36 @@ and op.deleted = false 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/orderItem/OrderItemMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml index f666ff4ec..59dae31d0 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml @@ -389,38 +389,61 @@ - - + update order_item - - set package_id = #{packId} - - where organ_id = #{organId} - and order_id = #{orderId} + set package_id = #{packageNo} + where order_id IN + + #{orderId} + and plate_id in #{id} + + + + update order_item oi + set package_id = #{packageNo} + where order_id IN + + #{orderId} + + and parts_id in + + #{id} + - - + update order_item oi - set package_id = 0 - - where - organ_id = #{organId} - and order_id = #{orderId} - and package_id = #{packId} + where order_id IN + + #{orderId} + + and package_id = #{packageNo} and plate_id in #{id} + + + update order_item oi + set package_id = 0 + where order_id IN + + #{orderId} + + and package_id = #{packageNo} + and parts_id in + + #{id} + @@ -442,40 +465,6 @@ - - - update order_item oi - - set package_id = #{packId} - - where organ_id = #{organId} - and order_id = #{orderId} - and parts_id in - - #{id} - - - - - - - - update order_item oi - - set package_id = 0 - - where - organ_id = #{organId} - and order_id = #{orderId} - and package_id = #{packId} - and parts_id in - - #{id} - - - - - @@ -688,6 +677,9 @@ #{orderId} + + AND oi.group_id = #{groupId} + AND EXISTS ( SELECT 1 FROM order_plate op @@ -714,6 +706,9 @@ #{orderId} + + AND oi.group_id = #{groupId} + AND EXISTS ( SELECT 1 FROM order_parts op 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 63dd46e6f..badb28813 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 @@ -264,13 +264,17 @@ - + + + + + + - - + @@ -283,53 +287,84 @@ - - - - - + + - - - - + + + + + + @@ -348,48 +383,143 @@ - - - - + + - + diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml index 02374260c..dd9632520 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml @@ -219,4 +219,13 @@ + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml index d954e3056..8911ae997 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml @@ -754,6 +754,8 @@ + + @@ -787,9 +789,7 @@ - - - + @@ -837,103 +837,240 @@ - - + - + + + + - + + - + @@ -1064,9 +1205,22 @@ + + + + + + + + + + + + + + + + - - - \ No newline at end of file