diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanRespVO.java index 90672f235..d304b40eb 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanRespVO.java @@ -29,6 +29,9 @@ public class PlanRespVO { @ExcelProperty("排单状态:0 新单,1 板材已申请,2 开料中,3 已开料") private Integer status; + @Schema(description = "是否置顶") + private Boolean isTop; + @Schema(description = "是否已投产") private Boolean isScheduled; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlateInfoVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlateInfoVO.java index f9ac34c20..f04c71dfb 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlateInfoVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlateInfoVO.java @@ -32,6 +32,9 @@ public class PlateInfoVO { @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED) private String material; + @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED) + private String brand; + @Schema(description = "排单ID", requiredMode = Schema.RequiredMode.REQUIRED) private Long planId; 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 0d63cafd8..84402a795 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 @@ -26,6 +26,10 @@ public class NoPlanPlatePageReqVO extends PageParam { private String orderId; + @Schema(description = "排单ID") + private Long planId; + + @Schema(description = "板编号") private String plateNo; @@ -52,6 +56,10 @@ public class NoPlanPlatePageReqVO extends PageParam { private Integer thickness; + @Schema(description = "品牌-在排单界面添加板材时为必传的") + private String brand; + + @Schema(description = "板名称") private String plateName; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plan/PlanDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plan/PlanDO.java index 49b78b962..d30a93689 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plan/PlanDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plan/PlanDO.java @@ -56,7 +56,7 @@ public class PlanDO extends BaseDO { /** * 板材过滤条件 */ - private String filter; + private Integer filter; /** diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java index 0a6f30fbc..05eac4e85 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java @@ -3,9 +3,11 @@ package com.cf.imes.module.executor.dal.mysql.plan; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.cf.imes.framework.common.enums.PlanStatusEnum; 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.order.vo.order.OrderStatisticsReqVO; +import com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp; import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsAreaRespVO; import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsCountRespVO; import com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize; @@ -13,6 +15,8 @@ import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.time.LocalDateTime; +import java.util.Arrays; import java.util.List; /** @@ -152,6 +156,14 @@ public interface PlanMapper extends BaseMapperX { .eq(PlanDO::getOrganId,organId) .eq(PlanDO::getDeleted,false) .eq(PlanDO::getIsTop,true) + .in(PlanDO::getStatus, Arrays.asList(PlanStatusEnum.NOCUTTING.getStatus(),PlanStatusEnum.OPENING.getStatus())) .orderByAsc(PlanDO::getUpdateTime)); } + + List selectIsTopUpPlan(@Param("updateTime") LocalDateTime updateTime,@Param("organId") Long organId); + + + List selectIsTopDownPlan(@Param("updateTime") LocalDateTime updateTime,@Param("organId") Long organId); + + List selectPlanGoodsList(@Param("planId") Long planId, @Param("organId") Long organId); } \ 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/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 7c5d47f82..554bfe78e 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 @@ -1650,6 +1650,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { if(OrderPlateCutStatusEnum.OPENING.getStatus().equals(cutedType) && !planDO.getStatus().equals(OrderPlateCutStatusEnum.OPENED.getStatus())){ planDO.setStatus(PlanStatusEnum.OPENING.getStatus()); + planDO.setProduceTime(null); List orderDOS = orderMapper.selectBatchIds(orderIds); AssertUtils.notEmpty(orderDOS,ORDER_PLAN_ERROR); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java index ef1442074..587021512 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java @@ -115,8 +115,6 @@ public class PlanServiceImpl implements PlanService { private static final String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model"; - private static final String ORDER_PLATE_MODEL = "imes_order_optimize"; - private static final String PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL = "imes_plan_process_scheme_optimize_model"; private static final String PLAN_ACTUAL_GOODS_MODEL = "imes_plan_actual_goods_model"; @@ -158,8 +156,6 @@ public class PlanServiceImpl implements PlanService { List planDOS = new ArrayList<>(); - List ids = new ArrayList<>(); - List orderIds = new ArrayList<>(); List plateIds = new ArrayList<>(); @@ -173,58 +169,27 @@ public class PlanServiceImpl implements PlanService { if (savePlanPlateList.getMixConfig() != null && Boolean.TRUE.equals(savePlanPlateList.getMixConfig().getIsMixed())) { + // 混单时走的逻辑 Integer mixedType = Optional.ofNullable(savePlanPlateList.getMixConfig().getMixedType()).orElse(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType()); - // 混单时走的逻辑 List plateItemList = Optional.ofNullable(savePlanPlateList.getPlateItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR)); List goodsItemList = Optional.ofNullable(savePlanPlateList.getGoodsItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR)); List planActualGoodsLists = Optional.ofNullable(createReqVO.getPlanActualGoodsListList()).orElse(new ArrayList<>()); - Map> grouped = new HashMap<>(); - if(CollUtil.isNotEmpty(planActualGoodsLists)) { + // 混单时判断是否进行板材对应并创建排单 + mixConfigPlateCorresponding(planActualGoodsLists,planActualGoodsModelDOS,planItemDOS,plateItemList,goodsItemList,planDOS,processId,loginUser,mixedType); - getCreatePlanMultipleGoodsList(planActualGoodsLists,planItemDOS,plateItemList,planActualGoodsModelDOS,planDOS,processId,loginUser); - if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.equals(mixedType)){ - // 筛选出材质和厚度相同的大板 - grouped = groupByMaterialAndThicknessEqualToOne(goodsItemList); - - }else { - - grouped = groupByThicknessEqualToOne(goodsItemList); - } - - if(CollUtil.isNotEmpty(grouped)) { - createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser); - } - - }else { - - if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.equals(mixedType)){ - // 筛选出材质和厚度相同的大板 - grouped = groupByMaterialAndThickness(goodsItemList); - - }else { - // 筛选出厚度相同的大板 - grouped = groupByThickness(goodsItemList); - - } - - createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser); - - } - - // 获取所有的大板ID - ids.addAll(goodsItemList.stream().map(SavePlanPlateList.GoodsItemList::getId).distinct().toList()); // 获取所有的小板ID plateIds.addAll(plateItemList.stream().map(SavePlanPlateList.PlateItemList::getPlateId).toList()); // 获取所有的生产单ID orderIds.addAll(plateItemList.stream().map(SavePlanPlateList.PlateItemList::getOrderId).distinct().toList()); + } else { // 非混单 @@ -234,10 +199,9 @@ public class PlanServiceImpl implements PlanService { // 查找材质和厚度和颜色相同的大板 Map> grouped = groupByMaterialAndThicknessAndColorAndBrand(goodsItemList); - createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser); + createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser,PlanTypeEnum.ORDERPLAN.getType()); + - // 获取所有的大板ID - ids.addAll(goodsItemList.stream().map(SavePlanPlateList.GoodsItemList::getId).distinct().toList()); // 获取所有的小板ID plateIds.addAll(plateItemList.stream().map(SavePlanPlateList.PlateItemList::getPlateId).toList()); // 获取所有的生产单ID @@ -456,46 +420,13 @@ public class PlanServiceImpl implements PlanService { IPage planDOPageResult = new PageDTO<>(); + // 是否进行翻页 if(pageReqVO.getIsUp() != null) { - PlanDO planDO = planMapper.selectById(pageReqVO.getId()); - - AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR); - - - if(planDO.getIsTop()){ - - - - - }else { - - List plan = pageReqVO.getIsUp() ? - planMapper.selectPlanIds(planDO.getSort(), getUserOrganId()) : - - planMapper.selectPlanIdsFalse(planDO.getSort(), getUserOrganId()); - - if (plan.isEmpty()) { - - List planDOS = planMapper.selectIsTopPlanList(getUserOrganId()); - - if(CollUtil.isEmpty(planDOS)) { - throw exception(NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE, pageReqVO.getIsUp() ? "第" : "最后"); - } - - plan.add(planDOS.get(0)); - } - - planDOPageResult.setRecords(plan); - planDOPageResult.setTotal(1L); - - } - - + planPageTurning(pageReqVO,planDOPageResult); }else { - QueryWrapperX queryWrapperX = new QueryWrapperX<>(); queryWrapperX .eq("op.organ_id",getUserOrganId()) @@ -1135,6 +1066,53 @@ public class PlanServiceImpl implements PlanService { + // 排单翻页 + private void planPageTurning(PlanPageReqVO pageReqVO,IPage planDOPageResult) { + + PlanDO planDO = planMapper.selectById(pageReqVO.getId()); + + AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR); + + List plan; + + // 置顶时进行翻页 + if(Boolean.TRUE.equals(planDO.getIsTop())){ + + plan = Boolean.TRUE.equals(pageReqVO.getIsUp()) ? + + planMapper.selectIsTopUpPlan(planDO.getUpdateTime(), getUserOrganId()) : + + planMapper.selectIsTopDownPlan(planDO.getUpdateTime(), getUserOrganId()); + + } + // 非置顶进行翻页 + else { + + plan = Boolean.TRUE.equals(pageReqVO.getIsUp()) ? + planMapper.selectPlanIds(planDO.getSort(), getUserOrganId()) : + + planMapper.selectPlanIdsFalse(planDO.getSort(), getUserOrganId()); + + if (plan.isEmpty() && Boolean.TRUE.equals(pageReqVO.getIsUp())) { + + List planDOS = planMapper.selectIsTopPlanList(getUserOrganId()); + + AssertUtils.notEmpty(planDOS,NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE,Boolean.TRUE.equals(pageReqVO.getIsUp()) ? "第" : "最后"); + + plan.add(planDOS.get(0)); + } + + } + + AssertUtils.notEmpty(plan,NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE,Boolean.TRUE.equals(pageReqVO.getIsUp()) ? "第" : "最后"); + + planDOPageResult.setRecords(plan); + planDOPageResult.setTotal(1L); + + } + + + @Transactional(rollbackFor = Exception.class) @@ -1168,7 +1146,7 @@ public class PlanServiceImpl implements PlanService { AssertUtils.notEmpty(deletePlateIds,DELETE_PLAN_PLATE_DATA_ERROR); - List deleteOrderIds = deleteOrderPlateIds.stream().map(OrderPlateIds::getOrderId).toList(); + List deleteOrderIds = deleteOrderPlateIds.stream().map(OrderPlateIds::getOrderId).distinct().toList(); AssertUtils.notEmpty(deleteOrderIds,DELETE_PLAN_PLATE_DATA_ERROR); @@ -1252,7 +1230,7 @@ public class PlanServiceImpl implements PlanService { // 查询排单对应的小板ID的数量 - List planItemDOS = planItemMapper.selectPlanPlateList(deletePlanIds, deleteOrderIds, getUserOrganId()); + List planItemDOS = planItemMapper.selectPlanPlateList(deletePlanIds, null, getUserOrganId()); List planIds = planItemDOS.stream().map(PlanItemDO::getPlanId).distinct().toList(); @@ -1278,17 +1256,14 @@ public class PlanServiceImpl implements PlanService { List planDOList = planDOS.stream().filter(f -> planIds.contains(f.getId())).toList(); - List planOrderIds = planItemDOS.stream().map(PlanItemDO::getOrderId).distinct().toList(); - if(planOrderIds.size() != deleteOrderIds.size()){ + planDOList.forEach(f->{ + String string = planItemDOS.stream().filter(p -> f.getId().equals(p.getPlanId())).map(PlanItemDO::getOrderId).distinct().toList().toString(); + f.setOrderNos(string); + }); - planDOList.forEach(f->{ - f.setOrderNos(planItemDOS.stream().filter(p->f.getId().equals(p.getPlanId())).map(PlanItemDO::getOrderId).distinct().toString()); - }); + planMapper.updateBatch(planDOList); - planMapper.updateBatch(planDOList); - - } } @@ -1361,6 +1336,8 @@ public class PlanServiceImpl implements PlanService { planItemMapper.insertBatch(planItemDOS); + planMapper.updateBatch(planDOS); + } @@ -1518,6 +1495,61 @@ public class PlanServiceImpl implements PlanService { + // 混单时判断是否进行板材对应并创建排单 + private void mixConfigPlateCorresponding(List planActualGoodsLists, + List planActualGoodsModelDOS, + List planItemDOS, + List plateItemList, + List goodsItemList, + List planDOS, + Long processId, + LoginUser loginUser, + Integer mixedType){ + + + Map> grouped; + + if(CollUtil.isNotEmpty(planActualGoodsLists)) { + + getCreatePlanMultipleGoodsList(planActualGoodsLists,planItemDOS,plateItemList,planActualGoodsModelDOS,planDOS,processId,loginUser); + + if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.equals(mixedType)){ + // 筛选出材质和厚度相同的大板 + grouped = groupByMaterialAndThicknessEqualToOne(goodsItemList); + + }else { + + grouped = groupByThicknessEqualToOne(goodsItemList); + } + + if(CollUtil.isNotEmpty(grouped)) { + createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser,PlanTypeEnum.ORDERPLAN.getType()); + } + + }else { + + if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.equals(mixedType)){ + // 筛选出材质和厚度相同的大板 + grouped = groupByMaterialAndThickness(goodsItemList); + + }else { + // 筛选出厚度相同的大板 + grouped = groupByThickness(goodsItemList); + + } + + createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser,PlanTypeEnum.ORDERPLAN.getType()); + + } + + + planDOS.forEach(f->f.setFilter(f.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType()) ? mixedType : 0)); + + + } + + + private void updateProcessSchemeStatus(List planIds) { @@ -1618,12 +1650,12 @@ public class PlanServiceImpl implements PlanService { private void getCreatePlanMultipleGoodsList(List planActualGoodsLists, - List planItemDOS, - List plateItemList, - List planActualGoodsModelDOS , - List planDOS, - Long processId, - LoginUser loginUser) { + List planItemDOS, + List plateItemList, + List planActualGoodsModelDOS , + List planDOS, + Long processId, + LoginUser loginUser) { planActualGoodsLists.forEach(f -> { @@ -1674,11 +1706,12 @@ public class PlanServiceImpl implements PlanService { private void createPlanAndPlateDataList(Map> grouped, - List planItemDOS, - List plateItemList, - List planDOS, - Long processId, - LoginUser loginUser){ + List planItemDOS, + List plateItemList, + List planDOS, + Long processId, + LoginUser loginUser, + Integer planType){ AtomicLong sort = new AtomicLong(System.currentTimeMillis()); @@ -1698,7 +1731,7 @@ public class PlanServiceImpl implements PlanService { planDOS.add(PlanDO.builder() .id(planId) .sort(sort.get()) - .type(PlanTypeEnum.MIXEDORDERPLAN.getType()) + .type(planType) .processId(processId) .orderNos(orderIdList.toString()) .produceTime(null) 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 8bc4e027a..5051f7454 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 @@ -10,8 +10,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.cf.imes.framework.common.enums.MixConfigTypeEnum; import com.cf.imes.framework.common.enums.OrderPlateCutStatusEnum; import com.cf.imes.framework.common.enums.OrderPlateTypeEnum; +import com.cf.imes.framework.common.enums.PlanTypeEnum; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; import com.cf.imes.framework.common.pojo.PageResult; @@ -25,6 +27,7 @@ import com.cf.imes.framework.mybatis.core.query.QueryWrapperX; import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO; +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.plate.vo.*; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; @@ -46,6 +49,7 @@ import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper; import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper; import com.cf.imes.module.executor.enums.OrderItemType; import com.cf.imes.module.executor.enums.OrderStatusEnum; +import com.cf.imes.module.executor.service.order.OrderInputProcessor; import com.cf.imes.module.executor.service.plan.PlanService; import com.cf.imes.module.executor.util.elasticsearch.EsUtils; import com.cf.imes.module.system.enums.ErrorCodeConstants; @@ -65,6 +69,7 @@ import java.util.stream.Collectors; import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLAN_NOT_EXISTS; import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; /** * 生产单板件 Service 实现类 @@ -113,6 +118,9 @@ public class PlateServiceImpl implements PlateService { @Resource private ESDocumentService esDocumentService; + @Resource + private OrderInputProcessor orderInputProcessor; + @Resource private EsUtils esUtils; @@ -124,6 +132,10 @@ public class PlateServiceImpl implements PlateService { private static final String ORDER_PLATE_MODEL = "imes_order_plate_model"; private static final String FIELD_PLATE_ID = "plateId"; + private static final String FIELD_OG_MATERIAL = "og.material"; + private static final String FIELD_OG_BRAND = "og.brand"; + private static final String FIELD_OG_COLOR = "og.color"; + private static final String FIELD_OP_THICKNESS = "op.thickness"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -306,7 +318,6 @@ public class PlateServiceImpl implements PlateService { statusList.add(OrderStatusEnum.IN_PRODUCTION.getStatus()); statusList.add(OrderStatusEnum.SORTED.getStatus()); - Integer pageNo = (pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize(); QueryWrapperX queryWrapperX = new QueryWrapperX<>(); queryWrapperX @@ -314,20 +325,84 @@ public class PlateServiceImpl implements PlateService { .eq("o.deleted",false) .in("o.status",statusList) .isNull("opi.plan_id") - .isNotNull("op.id") + .isNotNull("op.id"); + + if(pageReqVO.getPlanId() != null){ + + Long planId = pageReqVO.getPlanId(); + + List goodsRespVOS = planMapper.selectPlanGoodsList(planId, getUserOrganId()); + + AssertUtils.notEmpty(goodsRespVOS,PLAN_NOT_EXISTS); + + PlanDO planDO = planMapper.selectById(planId); + + AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); + + + + List material = goodsRespVOS.stream().map(OrderGoodsResp::getMaterial).distinct().toList(); + + List color = goodsRespVOS.stream().map(OrderGoodsResp::getColor).distinct().toList(); + + List brand = goodsRespVOS.stream().map(OrderGoodsResp::getBrand).distinct().toList(); + + List thickness = goodsRespVOS.stream().map(OrderGoodsResp::getThickness).distinct().toList(); + + + // 混单 + if(planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())){ + // 相同材质和厚度 + 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); + + } + // 相同厚度 + 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); + } + + } + // 非混单 + else { + queryWrapperX + .inIfPresent(FIELD_OG_MATERIAL,material) + .inIfPresent(FIELD_OG_BRAND,brand) + .inIfPresent(FIELD_OG_COLOR,color) + .inIfPresent(FIELD_OP_THICKNESS,thickness); + } + + } + // 无排单ID时 + else { + + 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()); + } + + + 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()) - .likeIfPresent("og.material",pageReqVO.getMaterial()) - .likeIfPresent("og.color",pageReqVO.getColor()) - .eqIfPresent("op.thickness",pageReqVO.getThickness()) .betweenIfPresent("op.height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()}) .betweenIfPresent("op.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()}) - .betweenIfPresent("op.thickness", new BigDecimal[]{pageReqVO.getThicknessMinRang(), pageReqVO.getThicknessMaxRang()}) + .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()) @@ -336,6 +411,9 @@ public class PlateServiceImpl implements PlateService { .orderByDesc("o.id"); + Integer pageNo = (pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize(); + + List plateResLists = orderMapper.selectNoPlanOrderPlateList(queryWrapperX,pageNo,pageReqVO.getPageSize()); if(CollUtil.isEmpty(plateResLists)){ @@ -456,6 +534,8 @@ public class PlateServiceImpl implements PlateService { List orderBodyNumVOS = new ArrayList<>(); + List orderPlateModelDOS = new ArrayList<>(); + List goodsIds = new ArrayList<>(reqVO.stream().map(OptimizationSavePlateReqVO::getGoodsId).distinct().toList()); List orderIds = reqVO.stream().map(OptimizationSavePlateReqVO::getOrderId).distinct().toList(); @@ -510,60 +590,71 @@ public class PlateServiceImpl implements PlateService { .plateNum(f.getMultiple()) .build()); - for (int i = 0; i < f.getMultiple(); i++) { - // 生成板编号 - long obtainingTime = SnowflakeIdWorker3rd.obtainingTime(); + // 生成板编号 + long obtainingTime = SnowflakeIdWorker3rd.obtainingTime(); - String plateNo = (obtainingTime) + Long.toString(idWorker.nextId()).substring(2); + String plateNo = (obtainingTime) + Long.toString(idWorker.nextId()).substring(2); - plateNoList.add(plateNo); + plateNoList.add(plateNo); - String remake1 = f.getRemake1() == null ? "" : f.getRemake1() + ";"; + String remake1 = f.getRemake1() == null ? "" : f.getRemake1() + ";"; - String remake2 = f.getRemake2() == null ? "" : f.getRemake2(); + String remake2 = f.getRemake2() == null ? "" : f.getRemake2(); - // 小板ID - Long plateId = (Long) identifierGenerator.nextId(null); + // 小板ID + Long plateId = (Long) identifierGenerator.nextId(null); - plateDOS.add(PlateDO.builder() - .id(plateId) - .orderId(orderId) - .name(f.getName()) - .plateNo(plateNo) - .type(OrderPlateTypeEnum.SELFINCREASINGBOARD.getType()) - .isOptimized(true) - .thickness(goodsDO.getThickness()) - .goodsId(goodsDO.getId()) - .holeArrange(f.getPlaceHole()) - .remark(remake1 + remake2) - .area(f.getWidth().multiply(f.getHeight()).movePointLeft(6).stripTrailingZeros()) - .width(f.getWidth()) - .height(f.getHeight()) - .texture(f.getTexture()) - .sealLeft(f.getSealLeft()) - .sealRight(f.getSealRight()) - .sealUp(f.getSealUp()) - .sealDown(f.getSealDown()) - .build()); - // 生产单明细表新增数据 - orderItemDOS.add(OrderItemDO.builder() - .orderId(f.getOrderId()) - .type(OrderItemType.BOARD.getCode()) - .roomId(f.getRoomId()) - .bodyId(f.getBodyId()) - .plateId(plateId) - .build()); + plateDOS.add(PlateDO.builder() + .id(plateId) + .orderId(orderId) + .name(f.getName()) + .plateNo(plateNo) + .type(OrderPlateTypeEnum.SELFINCREASINGBOARD.getType()) + .isOptimized(true) + .thickness(goodsDO.getThickness()) + .goodsId(goodsDO.getId()) + .holeFace(f.getPlaceHole()) + .remark(remake1 + remake2) + .area(f.getWidth().multiply(f.getHeight()).movePointLeft(6).stripTrailingZeros()) + .width(f.getWidth()) + .height(f.getHeight()) + .texture(f.getTexture()) + .sealLeft(f.getSealLeft()) + .sealRight(f.getSealRight()) + .sealUp(f.getSealUp()) + .sealDown(f.getSealDown()) + .build()); - planItemDOS.add(PlanItemDO.builder() - .planId(f.getPlanId()) - .goodsId(goodsDO.getId()) - .orderId(f.getOrderId()) - .plateId(plateId) - .build()); - } + // 生产单造型数据 + orderPlateModelDOS.add(OrderModelDO.builder() + .plateId(plateId) + .orderId(orderId) + .goodsId(goodsDO.getGoodsId()) + .plateGoodsId(goodsDO.getId()) + .texture(f.getTexture()) + .boardType(OrderPlateTypeEnum.SELFINCREASINGBOARD.getDescription()) + .build()); + + + // 生产单明细表新增数据 + orderItemDOS.add(OrderItemDO.builder() + .orderId(f.getOrderId()) + .type(OrderItemType.BOARD.getCode()) + .roomId(f.getRoomId()) + .bodyId(f.getBodyId()) + .plateId(plateId) + .build()); + + planItemDOS.add(PlanItemDO.builder() + .planId(f.getPlanId()) + .goodsId(goodsDO.getId()) + .orderId(f.getOrderId()) + .plateId(plateId) + .build()); + insertPlateRespVOS.add(InsertPlateRespVO.builder() .blockKey(f.getBlockKey()) @@ -600,6 +691,8 @@ public class PlateServiceImpl implements PlateService { orderItemMapper.insertBatch(orderItemDOS); + orderInputProcessor.batchSaveModel(orderPlateModelDOS); + return insertPlateRespVOS; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml index 058f9616f..294d516ab 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml @@ -102,9 +102,10 @@ FROM order_plan WHERE organ_id = #{organId} - AND deleted = false - and is_top = false - and sort < #{sort} + and deleted = false + and is_top = false + and status in (0,1) + and sort < #{sort} ORDER BY sort desc limit 1; @@ -120,6 +121,7 @@ WHERE organ_id = #{organId} AND deleted = false and is_top = false + and status in (0,1) and sort > #{sort} ORDER BY sort limit 1; @@ -225,4 +227,56 @@ + + + + + + + + \ No newline at end of file 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 dd45a8a6b..30aeedfb0 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 @@ -49,6 +49,7 @@ + @@ -71,7 +72,7 @@ og.material as material, og.thickness as thickness , og.color as color, - + og.brand as brand, oi.plate_id as plateId, op.area as plateArea