diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java index 80b81694b..3d55a3e78 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java @@ -61,7 +61,8 @@ public class PlanController { @Parameter(name = "ids", description = "排单ids", required = true) @PreAuthorize("@ss.hasPermission('placeorder:delete')") public CommonResult deletePlan(@RequestParam("ids") @NotEmpty @Size(max = 20,message = "最多可同时删除20个排单") List ids) { - return success(planService.deletePlan(ids)); + planService.deletePlan(ids); + return success(Boolean.TRUE); } @@ -175,7 +176,7 @@ public class PlanController { @Operation(summary = "获取未排单的生产单的柜体和房间名称") @Parameter(name = "orderIds", description = "生产单ID", required = true) @PreAuthorize("@ss.hasPermission('unplannedOrders:query')") - public CommonResult> getOrderRoomBody(@Valid @NotEmpty(message = "生产单ID不能为空") @RequestParam @Size(max = 20,message = "最多可同时查询20个生产单信息") List orderIds) { + public CommonResult> getOrderRoomBody(@Valid @NotEmpty(message = "生产单ID不能为空") @RequestParam List orderIds) { return success(planService.getOrderRoomBody(orderIds)); } 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 37c8b6ed9..b15bf2736 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 @@ -75,4 +75,7 @@ public interface PlanItemMapper extends BaseMapperX { } List selectOrderPlateList(@Param("orderIds") List orderIds,@Param("organId") Long organId); + + Long selectIsCuttingPlate(@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/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 845f86ed5..05537d902 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 @@ -269,17 +269,6 @@ public interface PlateMapper extends BaseMapperX { } -// default List selectIsOptimizedPlate(List orderId,List ids,List plateIds, Long organId) { -// return selectList(new LambdaQueryWrapperX() -// .eq(PlateDO::getOrganId,organId) -// .eq(PlateDO::getDeleted,false) -// .inIfPresent(PlateDO::getOrderId,orderId) -// .inIfPresent(PlateDO::getGoodsId,ids) -// .eq(PlateDO::getIsOptimized,true) -// .select(PlateDO::getId,PlateDO::getId)); -// -// } - default List selectPlateIsCuttingStatus(List orderIds,Long organId) { return selectList(new LambdaQueryWrapperX() 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 2c74f4681..56d5e9f9b 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 @@ -720,7 +720,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { plateMapper.updateBatch(plateDOS); - esUtils.deleteEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,req.getPlanConfigId(),planId,ORDER_OPTIMIZE_PLATE_MODEL); +// Long planConfigId = req.getPlanConfigId(); + +// esUtils.deleteEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,planConfigId,planId,ORDER_OPTIMIZE_PLATE_MODEL); // 保存优化后的大板数据 esUtils.saveEsDocument(ORDER_OPTIMIZE_PLATE_MODEL,req.getOptimizeBoardModelDOS()); @@ -747,6 +749,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); + List planConfigIds = modelDOList.stream().map(SaveProcessSchemeModelDO::getPlanConfigId).distinct().toList(); List plateDOS = planItemMapper.selectOrderPlanPlateListByPlanId(planId,getUserOrganId()); @@ -791,9 +794,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } - - esUtils.deleteEsDocument(FIELD_PLAN_ID,planId,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL); - + esUtils.deleteEsDocument(FIELD_PLAN_ID,FIELD_PLAN_CONFIG_ID,planId,planConfigIds,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL); esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL,modelDOList); @@ -1432,14 +1433,26 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { .filter(remainBoard -> goodsIds.contains(remainBoard.getGoodsId())) .flatMap(remainBoard -> remainBoard.getPlaceBoardList().stream()) .filter(board -> goodsNo.contains(board.getBoardId()) && !board.getCutedType().equals(cutedType) && - (cutedType.equals(OrderPlateCutStatusEnum.OPENING.getStatus()) ? - !board.getCutedType().equals(OrderPlateCutStatusEnum.OPENED.getStatus()) : true)) + (!cutedType.equals(OrderPlateCutStatusEnum.OPENING.getStatus()) || !board.getCutedType().equals(OrderPlateCutStatusEnum.OPENED.getStatus()))) .forEach(board -> { + if(cutedType.equals(OrderPlateCutStatusEnum.NOCUTTING.getStatus()) ) { + if(board.getCutedType().equals(OrderPlateCutStatusEnum.OPENED.getStatus())) { + goodsCount.incrementAndGet(); + } + planNos.addAll(board.getBlocks().stream() + .map(RemainBoardInfo.Blocks::getBlockId) + .toList()); + board.setCutedType(cutedType); + return; + } + goodsCount.incrementAndGet(); - board.setCutedType(cutedType); - planNos.addAll(board.getBlocks().stream() - .map(RemainBoardInfo.Blocks::getBlockId) - .toList()); + board.setCutedType(cutedType); + planNos.addAll(board.getBlocks().stream() + .map(RemainBoardInfo.Blocks::getBlockId) + .toList()); + + }); } @@ -1463,6 +1476,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { cutedBlockNumber += blockCount; } + cutedBoardNumber = cutedBoardNumber < 0 ? 0 : cutedBoardNumber; + + cutedBlockNumber = cutedBlockNumber < 0 ? 0 : cutedBlockNumber; + optimizeBoardModelDO.setCutedBoardNumber(cutedBoardNumber); optimizeBoardModelDO.setCutedBlockNumber(cutedBlockNumber); @@ -1535,28 +1552,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 未开料 if(OrderPlateCutStatusEnum.NOCUTTING.getStatus().equals(cutedType)){ - planDO.setStatus(PlanStatusEnum.OPENING.getStatus()); - planDO.setProduceTime(null); - - if(goodsNum.equals(0L)){ - planDO.setStatus(PlanStatusEnum.NOCUTTING.getStatus()); - } - - planMapper.updateById(planDO); - - List plateDOS = plateMapper.selectPlateIsCuttingStatus(orderIds, getUserOrganId()); - List orderIdList = plateDOS.stream().map(PlateDO::getOrderId).distinct().toList(); - - orderIds.removeAll(orderIdList); - - if(CollUtil.isNotEmpty(orderIds)){ - - List orderDOS = orderMapper.selectBatchIds(orderIds); - AssertUtils.notEmpty(orderDOS,ORDER_PLAN_ERROR); - - orderDOS.forEach(f->f.setStatus(OrderStatusEnum.SORTED.getStatus())); - orderMapper.updateBatch(orderDOS); - } + OptimizePlanServiceImpl o = (OptimizePlanServiceImpl) AopContext.currentProxy(); + o.updateOrderAndPlanByCutStatusIsNoCutting(planDO,goodsNum,orderIds); return; @@ -1617,6 +1614,44 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } + + @Transactional(rollbackFor = Exception.class) + public void updateOrderAndPlanByCutStatusIsNoCutting(PlanDO planDO,Long goodsNum,List orderIds){ + + planDO.setStatus(PlanStatusEnum.OPENING.getStatus()); + planDO.setProduceTime(null); + + if(goodsNum.equals(0L)){ + + Long plateId = planItemMapper.selectIsCuttingPlate(planDO.getId(), getUserOrganId()); + + if(plateId == null){ + planDO.setStatus(PlanStatusEnum.NOCUTTING.getStatus()); + } + + } + + planMapper.updateById(planDO); + + List plateDOS = plateMapper.selectPlateIsCuttingStatus(orderIds, getUserOrganId()); + List orderIdList = plateDOS.stream().map(PlateDO::getOrderId).distinct().toList(); + + orderIds.removeAll(orderIdList); + + if(CollUtil.isNotEmpty(orderIds)){ + + List orderDOS = orderMapper.selectBatchIds(orderIds); + AssertUtils.notEmpty(orderDOS,ORDER_PLAN_ERROR); + + orderDOS.forEach(f->f.setStatus(OrderStatusEnum.SORTED.getStatus())); + orderMapper.updateBatch(orderDOS); + } + } + + + + + private void validatePlanStatus(PlanDO planDO,List isLocks){ if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java index a9ebb997e..ac5ce305a 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java @@ -35,7 +35,7 @@ public interface PlanService { * * @param planIds 编号 */ - Boolean deletePlan(List planIds); + void deletePlan(List planIds); /** * 获得生产单开料排单 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 85086015f..827b157a2 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 @@ -365,7 +365,7 @@ public class PlanServiceImpl implements PlanService { @Override @Transactional(rollbackFor = Exception.class) - public Boolean deletePlan(List planIds) { + public void deletePlan(List planIds) { // 校验存在 List planDOS = planMapper.selectBatchIds(planIds); @@ -384,6 +384,10 @@ public class PlanServiceImpl implements PlanService { }); + if(CollUtil.isEmpty(orderIds)){ + planMapper.deleteBatchIds(planDOS); + } + // 删除排单信息,更新排单对应的余料板的排单ID为0 planMapper.deleteBatchIds(planIds); @@ -455,8 +459,6 @@ public class PlanServiceImpl implements PlanService { orderMapper.updateBatch(orderList); } - - return Boolean.TRUE; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/elasticsearch/EsUtils.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/elasticsearch/EsUtils.java index 8021b1d6a..e5e0b933d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/elasticsearch/EsUtils.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/elasticsearch/EsUtils.java @@ -236,6 +236,27 @@ public class EsUtils { } + public void deleteEsDocument(String filedName1,String filedName2, Long value1,List values2, String index) { + + List fieldValues = values2.stream().map(FieldValue::of).toList(); + + DeleteByQueryRequest.Builder builder = new DeleteByQueryRequest.Builder(); + builder.index(index); + + builder.query(q->q.bool(b->b.filter(f->{ + f.term(t->t.field(filedName1).value(value1)); + f.terms(t->t.field(filedName2).terms(v2->v2.value(fieldValues))); + return f; + }))); + + try { + elasticsearchClient.deleteByQuery(builder.build()); + } catch (IOException | ElasticsearchException e) { + log.error("ES文档删除失败:", e.getMessage()); + throw new ServiceException(ES_DATA_ERROR); + } + } + public void deleteEsDocument(String filedName,List values, String index) { List fieldValues = values.stream().map(FieldValue::of).toList(); 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 41d0b5595..f09ade425 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 @@ -416,5 +416,20 @@ + + \ No newline at end of file diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index 96cbc6091..67088c487 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -372,4 +372,5 @@ public class ErrorCodeConstants { public static final ErrorCode SYSTEM_PROCESS_SCHEME_CONFIG_FIELD_ERROR = new ErrorCode(1_002_040_017, "当前方案组的配置异常,请重新配置"); public static final ErrorCode SYSTEM_PROCESS_SCHEME_CONFIG_IS_PLAN = new ErrorCode(1_002_040_018, "当前方案组已在排单中使用,无法删除"); public static final ErrorCode SYSTEM_PROCESS_SCHEME_CONFIG_MACHINE_LABEL = new ErrorCode(1_002_040_019, "当前方案组对应的解析器的机台的标签数据为空,请检查机台的标签配置信息"); + public static final ErrorCode THIS_CONFIG_DATA_ERROR = new ErrorCode(1_002_040_020, "当前系统配置的数据有误,请重新尝试排序"); }