From 15e4864ef3c73516a092e4e0a90c81dc2ff9bf70 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 13 May 2026 09:51:18 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E8=AE=A2=E5=8D=95/=E6=8E=92=E5=8D=95?= =?UTF-8?q?=E6=9C=AA=E6=8E=92=E5=B0=8F=E6=9D=BF=E6=9F=A5=E8=AF=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E9=87=8D=E6=9E=84=EF=BC=9B2=E3=80=81=E6=9C=AA?= =?UTF-8?q?=E6=8E=92/=E5=B7=B2=E6=8E=92=E6=9D=BF=E4=BB=B6=E5=92=8C?= =?UTF-8?q?=E9=80=A0=E5=9E=8B=E6=9F=A5=E8=AF=A2=E4=BC=98=E5=8C=96=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/manage/pack/PackController.java | 2 +- .../admin/plan/vo/PlateDetailRespVO.java | 3 - .../admin/plate/PlateController.java | 10 +- .../admin/plate/vo/NoPlanPlatePageReqVO.java | 17 +- .../dal/dataobject/plate/PlateDetailDO.java | 287 +++++++++++++++ .../dal/mysql/planitem/PlanItemMapper.java | 10 +- .../executor/dal/mysql/plate/PlateMapper.java | 23 +- .../optimizeplan/OptimizePlanServiceImpl.java | 104 ++++-- .../executor/service/plate/PlateService.java | 10 +- .../service/plate/PlateServiceImpl.java | 154 ++++---- .../mapper/planitem/PlanItemMapper.xml | 106 +++--- .../resources/mapper/plate/PlateMapper.xml | 344 +++++++++++++++--- 12 files changed, 834 insertions(+), 236 deletions(-) create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDetailDO.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/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 cebac85c1..f013f909d 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 @@ -35,7 +35,7 @@ public class PackController { @GetMapping("/page") @Operation(summary = "打包分页查询") @PreAuthorize("@ss.hasPermission('manage:pack:query')") - public CommonResult> getPlatePage(@Valid PackPageReqVO pageReqVO) { + public CommonResult> getPackPlatePage(@Valid PackPageReqVO pageReqVO) { return CommonResult.success(packService.getPackPage(pageReqVO)); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlateDetailRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlateDetailRespVO.java index 5d018b7ad..ca8e700da 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlateDetailRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlateDetailRespVO.java @@ -219,7 +219,4 @@ public class PlateDetailRespVO { // 加工组ID和名称 @Schema(description = "加工组名称", requiredMode = Schema.RequiredMode.REQUIRED) private List processGroupLists; - - @Schema(description = "造型数据") - private String modelData; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java index a9dff9f7c..522eaf038 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java @@ -8,7 +8,7 @@ import com.cf.imes.framework.excel.core.util.ExcelUtils; import com.cf.imes.framework.operatelog.core.annotations.OperateLog; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderCadViewPlatePageReqVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO; -import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList; +import com.cf.imes.module.executor.controller.admin.plan.vo.PlateDetailRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.*; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO; @@ -78,13 +78,11 @@ public class PlateController { - @GetMapping("/getPlatePage") + @PostMapping("/orders/noplan") @Operation(summary = "获取未排单的订单板件") @PreAuthorize("@ss.hasAnyPermissions('manage:un-order-plan:insert-plate','manage:order-plan:insert-plate')") - public CommonResult> getPlatePage(@Valid NoPlanPlatePageReqVO reqVO) { - - return success(plateService.getOrderPlatePage(reqVO)); - + public CommonResult> getOrdersNoPlanPlate(@Valid @RequestBody NoPlanPlatePageReqVO reqVO) { + return success(plateService.getOrdersNoPlanPlate(reqVO)); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/NoPlanPlatePageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/NoPlanPlatePageReqVO.java index c57e65152..ccbc4d707 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/NoPlanPlatePageReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/NoPlanPlatePageReqVO.java @@ -4,12 +4,11 @@ package com.cf.imes.module.executor.controller.admin.plate.vo; import com.cf.imes.framework.common.pojo.PageParam; import com.cf.imes.framework.common.validation.NumberValid; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Size; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -import org.hibernate.validator.constraints.Length; -import jakarta.validation.constraints.Pattern; import java.math.BigDecimal; import java.util.List; @@ -21,9 +20,8 @@ public class NoPlanPlatePageReqVO extends PageParam { @Schema(description = "订单id") - @Pattern(regexp = "^[0-9]*$",message = "订单号必须为数字") - @Length(max = 19,message = "订单号长度不能超过19位") - private String orderId; + @Size(min = 1, max = 100, message = "订单id列表不能为空且数量不能超过100个") + private List orderIds; @Schema(description = "排单ID") @@ -57,18 +55,25 @@ public class NoPlanPlatePageReqVO extends PageParam { @Schema(description = "材质-在排单界面添加板材时为必传的") private String material; + private List materialList; + @Schema(description = "颜色-在排单界面添加板材时为必传的") private String color; + private List colorList; + @Schema(description = "厚度-在排单界面添加板材时为必传的") private Integer thickness; + private List thicknessList; @Schema(description = "品牌-在排单界面添加板材时为必传的") private String brand; + private List brandList; + @Schema(description = "板名称") private String plateName; @@ -107,6 +112,8 @@ public class NoPlanPlatePageReqVO extends PageParam { @Schema(description = "纹路") private Integer texture; + private List textureList; + @Schema(description = "异形") private Boolean isSpecialShaped; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDetailDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDetailDO.java new file mode 100644 index 000000000..8973141ad --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDetailDO.java @@ -0,0 +1,287 @@ +package com.cf.imes.module.executor.dal.dataobject.plate; + +import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessGroupList; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 板件明细 + * + * @author Gqr + * @since 2026/5/12 10:21 + */ +@Data +public class PlateDetailDO { + + /** + * 板件ID + */ + private Long plateId; + + /** + * 房间ID + */ + private Long roomId; + + /** + * 房间名称 + */ + private String roomName; + + /** + * 柜体ID + */ + private Long bodyId; + + /** + * 柜体名称 + */ + private String bodyName; + + /** + * 订单号 + */ + private Long orderId; + + /** + * 商品ID-大板分类ID + */ + private Long id; + + /** + * 大板实际ID + */ + private String goodsId; + + /** + * 商品名称 + */ + private String goodsName; + + /** + * 板编号 + */ + private String plateNo; + + /** + * 自定义板编号 + */ + private String customPlateNo; + + /** + * 板名称 + */ + private String name; + + /** + * 板颜色 + */ + private String color; + + /** + * 品牌 + */ + private String brand; + + /** + * 板材质 + */ + private String material; + + /** + * 板长 + */ + private Double height; + + /** + * 板宽 + */ + private Double width; + + /** + * 板厚 + */ + private Double thickness; + + /** + * 拆单宽度 + */ + private BigDecimal splitWidth; + + /** + * 拆单高度 + */ + private BigDecimal splitHeight; + + /** + * 拆单厚度 + */ + private BigDecimal splitThickness; + + /** + * 是否异性-是否弧形地脚,不处理异形 + */ + private Boolean isSpecialShaped; + + /** + * 左封边厚度 + */ + private BigDecimal sealLeft; + + /** + * 右封边厚度 + */ + private BigDecimal sealRight; + + /** + * 上封边厚度 + */ + private BigDecimal sealUp; + + /** + * 下封边厚度 + */ + private BigDecimal sealDown; + + /** + * 面积 + */ + private BigDecimal area; + + /** + * 纹路类型,0 正纹 1 可翻转 2 反纹 + */ + private Integer texture; + + /** + * 孔面类型,0 正面 1 反面 2 侧面 + */ + private Integer holeFace; + + /** + * 排孔类型,0 正纹 1 反面 2 随意面 + */ + private Integer holeArrange; + + /** + * 异型孔数量 + */ + private Integer unregularPointCount; + + /** + * 正面孔数量 + */ + private Integer frontHoleCount; + + /** + * 背面孔数量 + */ + private Integer backHoleCount; + + /** + * 侧面孔数量 + */ + private Integer sideHoleCount; + + /** + * 正面造型量 + */ + private Integer frontModelCount; + + /** + * 背面造型量 + */ + private Integer backModelCount; + + /** + * 是否门板 + */ + private Boolean isDoor; + + /** + * 是否孤形对角 + */ + private Boolean isArcAcross; + + /** + * 模块类型 ID + */ + private Long moduleTypeId; + + /** + * 排单过滤类型,1 有挖穿造型 2 有挖穿孔 4 有二维刀路 8 可叠 + */ + private String filterType; + + /** + * 异型偏移 x + */ + private Double offsetX; + + /** + * 异型偏移 y + */ + private Double offsetY; + + /** + * 备注 + */ + private String remark; + + /** + * 是否作废 + */ + private Boolean isCancel; + + /** + * 板类型,0 层板 1 立板 2 背板 + */ + private Integer type; + + /** + * 加工组名称 + */ + private String processGroupName; + + /** + * 开门类型,0 无 1 左 2 右 3 上 4 下 + */ + private Integer openDoorType; + + /** + * 是否有孔 + */ + private Boolean hasHole; + + /** + * 是否造型 + */ + private Boolean isSculpt; + + /** + * 是否侧面造型 + */ + private Boolean isSideSculpt; + + /** + * 是否二维刀路 + */ + private Boolean is2v; + + /** + * 是否侧面二维刀路 + */ + private Boolean isSide2v; + + /** + * 加工组名称 + */ + private List processGroupLists; + + /** + * 造型数据 + */ + private String modelData; +} \ 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/planitem/PlanItemMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java index eee9370bb..ed81868aa 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java @@ -8,6 +8,7 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.LabelOrderPla import com.cf.imes.module.executor.controller.admin.plan.vo.*; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO; +import com.cf.imes.module.executor.dal.dataobject.plate.PlateDetailDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -37,7 +38,14 @@ public interface PlanItemMapper extends BaseMapperX { @Param("orderGoodsIds") List orderGoodsIds, @Param("orderIds") Long... orderIds); - List selectPlanPlateDetailList(@Param("planId") Long planId, @Param("organId") Long organId); + /** + * 查询排单小板 + * + * @param planId + * @param organId + * @return + */ + List selectPlanPlateDetailList(@Param("planId") Long planId, @Param("orderIds") List orderIds, @Param("organId") Long organId); List selectOrderPlanPlateList(@Param("planIds") List planIds, @Param("organId") Long organId); 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 c73f814e3..fe3d70c4f 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 @@ -7,18 +7,18 @@ import com.cf.imes.framework.common.enums.OrderPlateTypeEnum; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO; import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PlateDetailsRespVO; import com.cf.imes.module.executor.controller.admin.manage.process.vo.PlateDetails; import com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.PackageDetailsRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.LabelOrderPlateData; import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPackReqVO; -import com.cf.imes.module.executor.controller.admin.plan.vo.PlateDetailRespVO; +import com.cf.imes.module.executor.controller.admin.plate.vo.NoPlanPlatePageReqVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsIdVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlatePageReqVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; +import com.cf.imes.module.executor.dal.dataobject.plate.PlateDetailDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -193,9 +193,24 @@ public interface PlateMapper extends BaseMapperX { - List selectPlateListByGoodsIds(@Param("orderId") Long orderId, @Param("organId") Long organId); + List selectPlateListByGoodsIds(@Param("orderId") Long orderId, @Param("organId") Long organId); - List selectNoPlanPlate(@Param("orderIds") List orderIds, @Param("ids") List ids, @Param("organId") Long organId); + /** + * 查询未排单板件 + * + * @param orderIds + * @param ids + * @param organId + * @return + */ + List selectNoPlanPlate(@Param("orderIds") List orderIds, @Param("ids") List ids, @Param("organId") Long organId); + + /** + * 查询未排单板件(带添加小板筛选) + * + * @return + */ + List selectNoPlanPlateWithFilter(@Param("reqVO") NoPlanPlatePageReqVO reqVO, @Param("organId") Long organId); // 批量删除 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java index 3001f4cd1..d293c8080 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java @@ -1,5 +1,6 @@ package com.cf.imes.module.executor.service.optimizeplan; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ObjectUtil; @@ -53,6 +54,7 @@ import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderPlateModel; import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; +import com.cf.imes.module.executor.dal.dataobject.plate.PlateDetailDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO; import com.cf.imes.module.executor.dal.dataobject.remainplaten.RemainPlateDO; import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper; @@ -283,7 +285,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { OrderSource orderSource; if (ObjectUtil.isNotNull(orderId)) { orderSource = getOrderSourceByOrderId(orderId); -// orderSource.setMachineDTO(machineApi.getMachineDetail(machineId).getCheckedData()); return orderSource; } if (ObjectUtil.isNotNull(planId)) { @@ -305,13 +306,13 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { AssertUtils.notEmpty(goodsDOS, ORDER_PLATE_EMPTY); - List plateDOS = plateMapper.selectPlateListByGoodsIds(orderId,getUserOrganId()); + List plateDOS = plateMapper.selectPlateListByGoodsIds(orderId, getUserOrganId()); AssertUtils.notEmpty(plateDOS, ORDER_PLATE_EMPTY); List models = plateDOS.stream() - .map(PlateDetailRespVO::getModelData) + .map(PlateDetailDO::getModelData) .filter(StringUtils::isNotBlank) .map(json -> JsonUtils.parseObject(json, OrderModelDO.class)) .toList(); @@ -322,10 +323,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List printOrderPartsRespVOS = orderPartsMapper.selectPartList(Collections.singletonList(orderId), getUserOrganId()); - // 查询订单对应的配件的ES信息 - List orderPartsRemarks = esUtils.getEsDocument(FIELD_ORDER_ID, orderId, printOrderPartsRespVOS.size(), ORDER_PARTS_REMARK_MODEL.getIndex(), OrderPartsRemark.class); - - // 查询订单对应的包裹信息 List printOrderPackReqVOS = plateMapper.selectOrderPackList(orderId,getUserOrganId()); @@ -342,10 +339,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { return OrderSource.builder() .orderList(Collections.singletonList(orderDO)) .goodsList(goodsDOS) - .plateList(plateDOS) + .plateList(BeanUtil.copyToList(plateDOS, PlateDetailRespVO.class)) .plateModels(models) .orderPartsRespVOS(printOrderPartsRespVOS) - .orderPartsRemarks(orderPartsRemarks) + .orderPartsRemarks(null) .orderPackReqVOS(printOrderPackReqVOS) .build(); @@ -372,31 +369,19 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List ids = goodsDOS.stream().map(GoodsReqVO::getId).toList(); // 查询排单对应的小板信息 - List plateDetailRespVOS = planItemMapper.selectPlanPlateDetailList(planId,getUserOrganId()); + List plateDetailRespVOS = planItemMapper.selectPlanPlateDetailList(planId, orderIds, getUserOrganId()); AssertUtils.notEmpty(plateDetailRespVOS, ORDER_PLAN_PLATE_ERROR); - for (PlateDetailRespVO plateDetailsRespVO : plateDetailRespVOS) { - StringBuilder name = new StringBuilder(); - if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) { - for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) { - // 去除最后的逗号 - name.append(groupNameList.getGroupName()).append(","); - - } - name = new StringBuilder(name.substring(0, name.length() - 1)); - } - plateDetailsRespVO.setProcessGroupName(name.toString()); - - } + List resultPlateList = mergeGroupName(plateDetailRespVOS); List orderDOS = orderMapper.selectBatchIds(orderIds); AssertUtils.notEmpty(orderDOS, ORDER_PLAN_ORDERS_EMPTY); List models = - plateDetailRespVOS.stream() - .map(PlateDetailRespVO::getModelData) + resultPlateList.stream() + .map(PlateDetailDO::getModelData) .filter(StringUtils::isNotBlank) .map(json -> JsonUtils.parseObject(json, OrderModelDO.class)) .toList(); @@ -422,9 +407,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 查询订单对应的配件信息 List printOrderPartsRespVOS = orderPartsMapper.selectPartList(orderIds, getUserOrganId()); - // 查询订单对应的配件的ES信息 - List orderPartsRemarks = esUtils.getEsDocument(FIELD_ORDER_ID, orderIds, printOrderPartsRespVOS.size(), ORDER_PARTS_REMARK_MODEL.getIndex(), OrderPartsRemark.class); - // 查询订单对应的包裹信息 List printOrderPackReqVOS = plateMapper.selectPlanPackList(ids,getUserOrganId()); @@ -446,12 +428,12 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { .orderList(orderDOS) .plan(planDO) .goodsList(goodsDOS) - .plateList(plateDetailRespVOS) + .plateList(BeanUtil.copyToList(resultPlateList, PlateDetailRespVO.class)) .plateModels(models) .planActualGoodsModelDO(planActualGoodsModelDO) .optimizeRemainPlates(optimizeRemainPlates) .orderPartsRespVOS(printOrderPartsRespVOS) - .orderPartsRemarks(orderPartsRemarks) + .orderPartsRemarks(null) .orderPackReqVOS(printOrderPackReqVOS) .build(); } @@ -788,13 +770,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { throw new ServiceException(ORDER_PLAN_CREATE_PLATE_NUM_REACH_THRESHOLD_ERROR, planCreatePlateThreshold); } - List plateDetailRespVOS = plateMapper.selectNoPlanPlate(orderIds, orderGoodsIds, getUserOrganId()); + // 查询未排单小板 + List plateDetailRespVOS = plateMapper.selectNoPlanPlate(orderIds, orderGoodsIds, getUserOrganId()); AssertUtils.notEmpty(plateDetailRespVOS, ORDER_PLATE_EMPTY); + List resultPlateList = mergeGroupName(plateDetailRespVOS); + List models = - plateDetailRespVOS.stream() - .map(PlateDetailRespVO::getModelData) + resultPlateList.stream() + .map(PlateDetailDO::getModelData) .filter(StringUtils::isNotBlank) .map(json -> JsonUtils.parseObject(json, OrderModelDO.class)) .toList(); @@ -804,12 +789,63 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { return OrderSource.builder() .orderList(buildTree(orderDOS)) .goodsList(goodsReqVOS) - .plateList(plateDetailRespVOS) + .plateList(BeanUtil.copyToList(resultPlateList, PlateDetailRespVO.class)) .plateModels(models) .build(); } + /** + * 合并加工组名称 + * + * @param list + */ + public List mergeGroupName(List list) { + + if (list == null || list.isEmpty()) { + return Collections.emptyList(); + } + + // plateId -> (groupName + 代表对象) + Map resultMap = new LinkedHashMap<>(); + Map> groupNameMap = new HashMap<>(); + + for (PlateDetailDO item : list) { + + Long plateId = item.getPlateId(); + if (plateId == null) { + continue; + } + + // 保留第一条作为代表对象(或你也可以自定义取最新) + resultMap.putIfAbsent(plateId, item); + + if (item.getProcessGroupName() != null) { + groupNameMap + .computeIfAbsent(plateId, k -> new LinkedHashSet<>()) + .add(item.getProcessGroupName()); + } + } + + // 组装最终结果 + List result = new ArrayList<>(resultMap.size()); + + for (Map.Entry entry : resultMap.entrySet()) { + + Long plateId = entry.getKey(); + PlateDetailDO item = entry.getValue(); + + Set groupNames = groupNameMap.get(plateId); + if (groupNames != null && !groupNames.isEmpty()) { + item.setProcessGroupName(String.join(",", groupNames)); + } + + result.add(item); + } + + return result; + } + /** * 将订单列表整理成父子结构 * 规则: diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java index aafd649ed..d2ca08bcf 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java @@ -4,7 +4,7 @@ import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderCadViewPlatePageReqVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO; -import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList; +import com.cf.imes.module.executor.controller.admin.plan.vo.PlateDetailRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.*; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO; @@ -70,7 +70,13 @@ public interface PlateService { PageResult getGoodsPlate(GoodsPlateFilterPageReqVO pageReqVO); - PageResult getOrderPlatePage(NoPlanPlatePageReqVO reqVO); + /** + * 查询订单未排单小板 + * + * @param reqVO + * @return + */ + List getOrdersNoPlanPlate(NoPlanPlatePageReqVO reqVO); /** diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java index e16a55549..679dc0725 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java @@ -22,7 +22,6 @@ import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX; -import com.cf.imes.framework.mybatis.core.query.QueryWrapperX; import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderCadViewPlatePageReqVO; @@ -31,7 +30,7 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO; import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentPageReqVO; import com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp; -import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList; +import com.cf.imes.module.executor.controller.admin.plan.vo.PlateDetailRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.*; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; @@ -42,6 +41,7 @@ import com.cf.imes.module.executor.dal.dataobject.orderItem.OrdersViewPlatesPage import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; +import com.cf.imes.module.executor.dal.dataobject.plate.PlateDetailDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO; import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper; import com.cf.imes.module.executor.dal.mysql.order.OrderMapper; @@ -334,24 +334,16 @@ public class PlateServiceImpl implements PlateService { @Override - public PageResult getOrderPlatePage(NoPlanPlatePageReqVO pageReqVO) { - - List statusList = new ArrayList<>(); - statusList.add(OrderStatusEnum.NEW_ORDER.getStatus()); - statusList.add(OrderStatusEnum.IN_PRODUCTION.getStatus()); - statusList.add(OrderStatusEnum.SORTED.getStatus()); + public List getOrdersNoPlanPlate(NoPlanPlatePageReqVO pageReqVO) { + // 置空内部条件 + pageReqVO.setMaterialList(null); + pageReqVO.setColorList(null); + pageReqVO.setBrandList(null); + pageReqVO.setThicknessList(null); + pageReqVO.setTextureList(null); Long organId = getUserOrganId(); - QueryWrapperX queryWrapperX = new QueryWrapperX<>(); - queryWrapperX - .eq("o.organ_id", organId) - .eq("o.deleted", false) - .in("o.status", statusList) - .isNotNull("op.id") - .eq("op.deleted", false); - - if (pageReqVO.getPlanId() != null) { Long planId = pageReqVO.getPlanId(); @@ -379,67 +371,75 @@ public class PlateServiceImpl implements PlateService { if (planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())) { // 混单添加查询条件 - mixedInsertQuery(pageReqVO, planDO, material, thickness, queryWrapperX); + mixedInsertQuery(pageReqVO, planDO, material, thickness); } // 非混单 else { // 非混单条件查询条件 - noMixedInsertQuery(pageReqVO, planDO, material, brand, color, thickness, texture, queryWrapperX); + noMixedInsertQuery(pageReqVO, planDO, material, brand, color, thickness, texture); } } - // 无排单ID时 - else { + // 查询订单未排单小板 + List plateDetailDOS = plateMapper.selectNoPlanPlateWithFilter(pageReqVO, organId); + // 合并加工组 + List resultPlateList = mergeGroupName(plateDetailDOS); - queryWrapperX - .likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial()) - .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) - .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor()) - .eqIfPresent(FIELD_OP_THICKNESS, pageReqVO.getThickness()); + return BeanUtil.copyToList(resultPlateList, PlateDetailRespVO.class); + } + + /** + * 合并加工组名称 + * + * @param list + */ + public List mergeGroupName(List list) { + + if (list == null || list.isEmpty()) { + return Collections.emptyList(); } + // plateId -> (groupName + 代表对象) + Map resultMap = new LinkedHashMap<>(); + Map> groupNameMap = new HashMap<>(); - queryWrapperX - .inIfPresent("op.goods_id", pageReqVO.getGoodsIdList()) - .likeIfPresent("o.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId() : null) - .likeIfPresent("op.id", pageReqVO.getPlateId()) - .likeIfPresent("op.name", pageReqVO.getPlateName()) - .likeIfPresent("op.plate_no", pageReqVO.getPlateNo()) - .likeIfPresent("op.custom_plate_no", pageReqVO.getCustomPlateNo()) - .betweenIfPresent("op.height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()}) - .betweenIfPresent("op.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()}) - .betweenIfPresent(FIELD_OP_THICKNESS, new BigDecimal[]{pageReqVO.getThicknessMinRang(), pageReqVO.getThicknessMaxRang()}) - .eqIfPresent("op.texture", pageReqVO.getTexture()) - .eqIfPresent("op.is_special_shaped", pageReqVO.getIsSpecialShaped()) - .eqIfPresent("op.is_sculpt", pageReqVO.getIsSculpt()) - .eqIfPresent("op.is_row_hole", pageReqVO.getIsRowHole()) - .likeIfPresent("op.remark", pageReqVO.getRemark()) - .orderByDesc("o.id, op.id"); + for (PlateDetailDO item : list) { + Long plateId = item.getPlateId(); + if (plateId == null) { + continue; + } - Integer pageNo = (pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize(); - - - List plateResLists = orderMapper.selectNoPlanOrderPlateList(queryWrapperX, pageNo, pageReqVO.getPageSize(), organId); - - if (CollUtil.isEmpty(plateResLists)) { - - return new PageResult<>(); + // 保留第一条作为代表对象(或你也可以自定义取最新) + resultMap.putIfAbsent(plateId, item); + if (item.getProcessGroupName() != null) { + groupNameMap + .computeIfAbsent(plateId, k -> new LinkedHashSet<>()) + .add(item.getProcessGroupName()); + } } - queryWrapperX - .groupBy("o.id"); + // 组装最终结果 + List result = new ArrayList<>(resultMap.size()); - List plateCount = orderMapper.selectNoPlanOrderPlateCount(queryWrapperX, organId); + for (Map.Entry entry : resultMap.entrySet()) { - long sum = plateCount.stream().mapToLong(Long::longValue).sum(); + Long plateId = entry.getKey(); + PlateDetailDO item = entry.getValue(); - return new PageResult<>(plateResLists, sum); + Set groupNames = groupNameMap.get(plateId); + if (groupNames != null && !groupNames.isEmpty()) { + item.setProcessGroupName(String.join(",", groupNames)); + } + result.add(item); + } + + return result; } @@ -768,8 +768,7 @@ public class PlateServiceImpl implements PlateService { private void mixedInsertQuery(NoPlanPlatePageReqVO pageReqVO, PlanDO planDO, List material, - List thickness, - QueryWrapperX queryWrapperX) { + List thickness) { if (Boolean.TRUE.equals(pageReqVO.getIsMixed())) { @@ -779,21 +778,14 @@ public class PlateServiceImpl implements PlateService { // 相同材质和厚度 if (planDO.getFilter().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())) { - queryWrapperX - .inIfPresent(FIELD_OG_MATERIAL, material) - .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) - .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor()) - .inIfPresent(FIELD_OP_THICKNESS, thickness); + pageReqVO.setMaterialList(material); + pageReqVO.setThicknessList(thickness); } // 相同厚度 else { - queryWrapperX - .likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial()) - .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) - .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor()) - .inIfPresent(FIELD_OP_THICKNESS, thickness); + pageReqVO.setThicknessList(thickness); } @@ -807,8 +799,7 @@ public class PlateServiceImpl implements PlateService { List brand, List color, List thickness, - List texture, - QueryWrapperX queryWrapperX) { + List texture) { // 是否开启混单 if (Boolean.TRUE.equals(pageReqVO.getIsMixed())) { @@ -819,29 +810,22 @@ public class PlateServiceImpl implements PlateService { // 相同材质和厚度 混单 if (pageReqVO.getMixedType().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())) { - queryWrapperX - .inIfPresent(FIELD_OG_MATERIAL, material) - .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) - .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor()) - .inIfPresent(FIELD_OP_THICKNESS, thickness); + pageReqVO.setMaterialList(material); + pageReqVO.setThicknessList(thickness); } // 相同厚度 混单 else { - queryWrapperX - .likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial()) - .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) - .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor()) - .inIfPresent(FIELD_OP_THICKNESS, thickness); + pageReqVO.setThicknessList(thickness); } } else { - queryWrapperX - .inIfPresent(FIELD_OG_MATERIAL, material) - .inIfPresent(FIELD_OG_BRAND, brand) - .inIfPresent(FIELD_OG_COLOR, color) - .inIfPresent(FIELD_OP_THICKNESS, thickness) - .inIfPresent(FIELD_OG_TEXTURE, texture); + // 非混单 + pageReqVO.setMaterialList(material); + pageReqVO.setBrandList(brand); + pageReqVO.setColorList(color); + pageReqVO.setThicknessList(thickness); + pageReqVO.setTextureList(texture); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml index 5b48d2402..394556f83 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml @@ -349,7 +349,7 @@ - + @@ -418,54 +418,76 @@ - + @@ -428,67 +422,311 @@ - and op.deleted = false +