From 87c4a3ecce80c293790ddc0a57f787b1d1977194 Mon Sep 17 00:00:00 2001 From: liuzhaotian Date: Thu, 16 Jan 2025 12:32:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B0=8F=E6=9D=BF=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9B=B4=E6=94=B9=EF=BC=8C=E6=9F=9C=E4=BD=93=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E9=80=BB=E8=BE=91=E6=9B=B4=E6=94=B9=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=BC=80=E6=96=99=E7=8A=B6=E6=80=81=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executor/enums/ErrorCodeConstants.java | 3 +- .../admin/plan/vo/PlanSaveReqVO.java | 14 -- .../admin/plate/vo/NoPlanPlatePageReqVO.java | 2 +- .../optimizeplan/OptimizePlanServiceImpl.java | 18 +- .../service/order/OrderServiceImpl.java | 173 +++++++++--------- .../service/plan/PlanServiceImpl.java | 45 ++++- .../service/plate/PlateServiceImpl.java | 2 +- .../mapper/orderItem/OrderItemMapper.xml | 2 + .../api/systemconfig/SystemConfigApi.java | 3 + .../system/enums/ErrorCodeConstants.java | 2 + .../api/systemconfig/SystemConfigApiImpl.java | 41 ++++- 11 files changed, 183 insertions(+), 122 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java index 40fe7c712..87527c033 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java @@ -28,7 +28,8 @@ public class ErrorCodeConstants { public static final ErrorCode ORDER_NOT_EXISTS = new ErrorCode(1_001_109_000, "生产单不存在"); public static final ErrorCode ORDER_NOT_CANCEL = new ErrorCode(1_001_109_000, "生产单以进入生产状态,无法作废"); public static final ErrorCode ORDER_PLAN_ERROR = new ErrorCode(1_001_109_001, "选中删除对象有已开料板件,请联系管理员修改开料状态后再删除!"); - public static final ErrorCode ORDER_ERROR = new ErrorCode(1_001_109_002, "当前生产单柜体,房间已全部删除!"); + public static final ErrorCode PLATE_IS_PLAN = new ErrorCode(1_001_109_002, "删除对象中有已排单板件,请将该对象从排单中移除后再选择删除!"); + public static final ErrorCode ORDER_ERROR = new ErrorCode(1_001_109_003, "当前生产单柜体,房间已全部删除!"); // ========== 生产单 TODO 补充编号 ========== public static final ErrorCode MODULE_NOT_EXISTS = new ErrorCode(1_001_110_000, "模块不存在"); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanSaveReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanSaveReqVO.java index 981c28a75..ca1b04676 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanSaveReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanSaveReqVO.java @@ -46,18 +46,4 @@ public class PlanSaveReqVO { private List deleteOrderPlateIds; - - -// @Schema(description = "排单类型:1 混单排单,2 生产单排单", requiredMode = Schema.RequiredMode.REQUIRED) -// @NotNull(message = "排单类型:1 混单排单,2 生产单排单不能为空", groups = CreateGroup.class) -// @PlanTypeValid -// private Integer type; - - - -// @Schema(description = "板材过滤条件") -// @Size(max = 7,message = "板材过滤条件数量不正确") -// private List filter; - - } \ 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/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 4e1af4ca9..150e8a1a9 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 @@ -53,7 +53,7 @@ public class NoPlanPlatePageReqVO extends PageParam { @Schema(description = "板名称") - private String name; + private String plateName; @Schema(description = "长 小范围") 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 f3d0072cc..2b5690a7c 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 @@ -1399,7 +1399,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { Date date = new Date(); - Long goodsNum = null; + long goodsNum = 0L; List planNo = new ArrayList<>(); @@ -1425,20 +1425,22 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { if(OrderPlateCutStatusEnum.NOCUTTING.getStatus().equals(cutedType)){ // 开料的大板数量 - Long cutedBoardNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardNumber()).orElseThrow(()-> new ServiceException(UPDATE_NO_PLAN_PLATE_DATA_ERROR)); + long cutedBoardNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardNumber()).orElse(0L); // 开料的小板数量 - Long cutedBlockNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBlockNumber()).orElseThrow(()-> new ServiceException(UPDATE_NO_PLAN_PLATE_DATA_ERROR)); + long cutedBlockNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBlockNumber()).orElse(0L); - cutedBoardNumber -= goodsNo.size(); + if(cutedBoardNumber != 0L && cutedBlockNumber != 0L) { - cutedBlockNumber -= planNo.size(); + cutedBoardNumber -= goodsNo.size(); - goodsNum = cutedBoardNumber; + cutedBlockNumber -= planNo.size(); - objectObjectHashMap.put("cutedBoardNumber", cutedBoardNumber); - objectObjectHashMap.put("cutedBlockNumber", cutedBlockNumber); + goodsNum = cutedBoardNumber; + objectObjectHashMap.put("cutedBoardNumber", cutedBoardNumber); + objectObjectHashMap.put("cutedBlockNumber", cutedBlockNumber); + } } 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 3a5eb8029..3282d32c6 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 @@ -35,7 +35,6 @@ import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderPlateList; import com.cf.imes.module.executor.dal.dataobject.pack.OrderPackageDO; import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO; -import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO; import com.cf.imes.module.executor.dal.dataobject.rawgoods.RawGoodsDO; @@ -74,7 +73,6 @@ import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; @@ -295,8 +293,8 @@ public class OrderServiceImpl implements OrderService { @Transactional(rollbackFor = Exception.class) public void updateDeleteBody(Long orderId, Set roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0 - // 判断生产单的状态和生产单柜体对应的板擦是否已开料 - List planIds = validateOrderStatus(orderId, roomIds, bodyId, getUserOrganId()); + // 判断生产单的状态和生产单柜体对应的板材是否已经排单 + validateOrderStatus(orderId, roomIds, bodyId, getUserOrganId()); List bodyIds = validateOrderBodyExists(orderId, bodyId, getUserOrganId(), roomIds, OrderDeletedEnum.NOT_DELETED.getStatus()); @@ -312,14 +310,14 @@ public class OrderServiceImpl implements OrderService { if (!plateDOList.isEmpty()) { - // 删除小板,大板,包裹,排单信息 + // 删除小板,大板,包裹,目前只要小板排单,就不能删除小板信息 OrderServiceImpl o = (OrderServiceImpl) AopContext.currentProxy(); - o.updateDeletePlate(plateDOList, orderId, bodyIds, planIds); + o.updateDeletePlate(plateDOList, orderId, bodyIds); } // 删除配件信息 - List partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件 + List partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); if (!partsList.isEmpty()){ // // 判断是否含有重复的配件 @@ -1059,7 +1057,7 @@ public class OrderServiceImpl implements OrderService { } // 判断生产单状态是否符合(如果已开料,不允许删除) - private List validateOrderStatus(Long orderId,Set roomIds, Long bodyId, Long organId) { + private void validateOrderStatus(Long orderId,Set roomIds, Long bodyId, Long organId) { // 校验存在 OrderDO orderDO = orderMapper.selectOrderOne(orderId, organId); if (orderDO == null) @@ -1073,23 +1071,24 @@ public class OrderServiceImpl implements OrderService { // 判断小板是否已开料,已开料不允许删除 List planIds = orderItemMapper.selectOrderPlanList(orderId,roomIds,bodyId,organId); - if(!planIds.isEmpty()) { + AssertUtils.empty(planIds, PLATE_IS_PLAN); - List planDOS = planMapper.selectPlanStatus(planIds, organId); +// if(CollUtil.isNotEmpty(planIds)) { +// +// List planDOS = planMapper.selectPlanStatus(planIds, organId); +// +// AssertUtils.empty(planDOS, ORDER_PLAN_ERROR); +// +// } - AssertUtils.empty(planDOS, ORDER_PLAN_ERROR); - - } - - return planIds; } - // 删除小板,大板,包裹,排单信息 + // 删除小板,大板,包裹 @Transactional(rollbackFor = Exception.class) - public void updateDeletePlate(List plateDOList, Long orderId ,List bodyIds,List planIds) { + public void updateDeletePlate(List plateDOList, Long orderId ,List bodyIds) { List plateIds = plateDOList.stream().map(PlateDO::getId).toList(); @@ -1099,12 +1098,6 @@ public class OrderServiceImpl implements OrderService { // 删除小板的信息 和 排单小板关联表中的小板信息 plateMapper.updateDeletedPlate(plateIds, getUserOrganId(), orderId); - planItemMapper.delete(new LambdaQueryWrapperX() - .eq(PlanItemDO::getOrganId, getUserOrganId()) - .eq(PlanItemDO::getOrderId,orderId) - .in(PlanItemDO::getPlateId, plateIds) - .in(PlanItemDO::getPlanId, planIds)); - // 删除包裹,只需删除,无需还原 List packIds = orderItemMapper.selectPackId(orderId,bodyIds, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList(); @@ -1145,20 +1138,28 @@ public class OrderServiceImpl implements OrderService { } - if (!planIds.isEmpty()) { - - // 判断删除的柜体对应的板材是否和排单板材一样 - List goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId()); - - // 一样,同时删除排单的信息 - if (goodsDOS.isEmpty()) { - planService.deletePlan(planIds); - } else { - // 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到) - esUtils.deleteEsDocument("planId",planIds,ORDER_REMAIN_PLATE_MODEL); - } - - } +// if (CollUtil.isNotEmpty(planIds)) { +// +// planItemMapper.delete(new LambdaQueryWrapperX() +// .eq(PlanItemDO::getOrganId, getUserOrganId()) +// .eq(PlanItemDO::getOrderId, orderId) +// .in(PlanItemDO::getPlateId, plateIds) +// .in(PlanItemDO::getPlanId, planIds)); +// +// // 删除小板信息需要确认:优化画图的信息是否都在 余料的那个字段里 +// +// // 判断删除的柜体对应的板材是否和排单板材一样 +// List goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId()); +// +// // 一样,同时删除排单的信息 +// if (goodsDOS.isEmpty()) { +// planService.deletePlan(planIds); +// } else { +// // 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到) +// esUtils.deleteEsDocument("planId",planIds,ORDER_REMAIN_PLATE_MODEL); +// } +// +// } } @@ -1185,55 +1186,55 @@ public class OrderServiceImpl implements OrderService { } - // 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板ID修改为新的大板ID - List goodsDOList = goodsMapper.selectNoPlanGoodsList(orderId, goodsIds, getUserOrganId()); - - List goodsList = BeanUtils.toBean(goodsDOList, GoodsDO.class); - - if (!goodsDOList.isEmpty()) { - - // 新增的大板信息 - List list = goodsDOList.stream() - .peek(m -> { - m.setId(null); - m.setPlanId(0L); - m.setCreateTime(LocalDateTime.now()); - m.setUpdateTime(LocalDateTime.now()); - }) - .toList(); - - goodsMapper.insertBatch(list); - - // 构建新的数据集,保存新的大板ID和旧的大板ID,大板的实际ID关联这两个信息 - List orderGoodsIds = BeanUtils.toBean(list, OrderGoodsIds.class); - - List orderGoodsIdsList = new ArrayList<>(); - - for (GoodsDO goodsDO : goodsList) { - orderGoodsIdsList.addAll(orderGoodsIds.stream() - .filter(f -> f.getGoodsId().equals(goodsDO.getGoodsId())) - .map(m -> m.setOldId(goodsDO.getId())).toList()); - - } - - // 需要修改的小板为未排单的部分,无论其是否删除,都需要修改,但只需修改大板ID即可,其他信息无需修改 - List plateDOS = plateMapper.selectNoPlanPlate(orderId, goodsIds, getUserOrganId()); - - List plateList = new ArrayList<>(); - - for (OrderGoodsIds ids : orderGoodsIdsList) { - - plateList.addAll(plateDOS.stream() - .filter(f -> f.getGoodsId().equals(ids.getOldId())) - .peek(m -> { - m.setGoodsId(ids.getId()); - }) - .toList()); - } - - plateMapper.updateBatch(plateList); - - } +// // 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板ID修改为新的大板ID +// List goodsDOList = goodsMapper.selectNoPlanGoodsList(orderId, goodsIds, getUserOrganId()); +// +// List goodsList = BeanUtils.toBean(goodsDOList, GoodsDO.class); +// +// if (!goodsDOList.isEmpty()) { +// +// // 新增的大板信息 +// List list = goodsDOList.stream() +// .peek(m -> { +// m.setId(null); +// m.setPlanId(0L); +// m.setCreateTime(LocalDateTime.now()); +// m.setUpdateTime(LocalDateTime.now()); +// }) +// .toList(); +// +// goodsMapper.insertBatch(list); +// +// // 构建新的数据集,保存新的大板ID和旧的大板ID,大板的实际ID关联这两个信息 +// List orderGoodsIds = BeanUtils.toBean(list, OrderGoodsIds.class); +// +// List orderGoodsIdsList = new ArrayList<>(); +// +// for (GoodsDO goodsDO : goodsList) { +// orderGoodsIdsList.addAll(orderGoodsIds.stream() +// .filter(f -> f.getGoodsId().equals(goodsDO.getGoodsId())) +// .map(m -> m.setOldId(goodsDO.getId())).toList()); +// +// } +// +// // 需要修改的小板为未排单的部分,无论其是否删除,都需要修改,但只需修改大板ID即可,其他信息无需修改 +// List plateDOS = plateMapper.selectNoPlanPlate(orderId, goodsIds, getUserOrganId()); +// +// List plateList = new ArrayList<>(); +// +// for (OrderGoodsIds ids : orderGoodsIdsList) { +// +// plateList.addAll(plateDOS.stream() +// .filter(f -> f.getGoodsId().equals(ids.getOldId())) +// .peek(m -> { +// m.setGoodsId(ids.getId()); +// }) +// .toList()); +// } +// +// plateMapper.updateBatch(plateList); +// +// } } 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 ffc5b217f..b830b66fb 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 @@ -22,6 +22,7 @@ import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO; import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList; import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PlatePlaceInfo; +import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.RemainBoardInfo; import com.cf.imes.module.executor.controller.admin.plan.vo.*; import com.cf.imes.module.executor.controller.admin.plate.vo.OrderPlateIds; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; @@ -44,7 +45,6 @@ import com.cf.imes.module.executor.enums.OrderStatusEnum; import com.cf.imes.module.executor.util.elasticsearch.EsUtils; import com.cf.imes.module.system.api.systemconfig.SystemConfigApi; import com.cf.imes.module.system.api.systemconfig.dto.SystemConfigRespDTO; -import com.fasterxml.jackson.core.type.TypeReference; import lombok.extern.slf4j.Slf4j; import org.springframework.aop.framework.AopContext; import org.springframework.stereotype.Service; @@ -63,7 +63,7 @@ import java.util.stream.Stream; import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.DATA_DATA_ERROR; import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.ES_DATA_ERROR; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.cf.imes.framework.common.util.json.JsonUtils.parseObject; +import static com.cf.imes.framework.common.util.json.JsonUtils.parseArray; import static com.cf.imes.framework.common.util.json.JsonUtils.toJsonString; import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; @@ -274,11 +274,10 @@ public class PlanServiceImpl implements PlanService { } - List plateDOS = plateMapper.selectBatchIds(plateIds); - List plateDOList = plateDOS.stream().filter(f -> f.getIsOptimized().equals(true)).toList(); + List plateList = planItemMapper.selectIsPlanPlateList(orderIds, plateIds, getUserOrganId()); - AssertUtils.empty(plateDOList,CREAT_PLAN_PLATE_DATA_ERROR); + AssertUtils.empty(plateList,CREAT_PLAN_PLATE_DATA_ERROR); List orderDOList = orderMapper.selectBatchIds(orderIds); @@ -1058,6 +1057,16 @@ public class PlanServiceImpl implements PlanService { List planDOS = validatePlanExists(deletePlanIds); + List processIds = new ArrayList<>(); + planDOS.forEach(f->{ + if (f.getStatus().equals(PlanStatusEnum.OPENED.getStatus())) { + throw exception(PLAN_PLATE_IS_ALL_CUT,f.getId()); + } + processIds.add(Optional.ofNullable(f.getProcessId()).orElseThrow(() -> exception(PLAN_PROCESS_CONFIG_IS_NULL,f.getId()))); + }); + + Integer processSize = systemConfigApi.getProcessSizeByIds(processIds).getCheckedData(); + for (PlanDO planDO : planDOS) { if (planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())) { throw exception(PLAN_PLATE_IS_ALL_CUT,planDO.getId()); @@ -1087,7 +1096,7 @@ public class PlanServiceImpl implements PlanService { // 删除优化生产中未开料的小板的优化数据 - List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, 1L, 10, ORDER_REMAIN_PLATE_MODEL, OptimizeBoardModelDO.class); + List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, deletePlanIds, processSize, ORDER_REMAIN_PLATE_MODEL, OptimizeBoardModelDO.class); if(CollUtil.isNotEmpty(optimizeBoardModelDOS)){ @@ -1096,17 +1105,33 @@ public class PlanServiceImpl implements PlanService { optimizeBoardModelDOS.forEach(f->{ - List asJsonObject = parseObject(f.getBlockPlaceInfo(), new TypeReference<>() {}); + String blockPlaceInfo = Optional.ofNullable(f.getBlockPlaceInfo()).orElseThrow(() -> new ServiceException(ORDER_PLAN_OPTIMIZE_ERROR)); + + String remainBoardInfo = Optional.ofNullable(f.getRemainBoardInfo()).orElseThrow(() -> new ServiceException(ORDER_PLAN_OPTIMIZE_ERROR)); + + List asJsonObject = new ArrayList<>(parseArray(blockPlaceInfo,PlatePlaceInfo.class)); List platePlaceInfos = asJsonObject.stream() .filter(fi -> !plateNo.contains(fi.getBo())) .toList(); - String blockPlaceInfo = toJsonString(platePlaceInfos); - - f.setBlockPlaceInfo(blockPlaceInfo); + f.setBlockPlaceInfo(toJsonString(platePlaceInfos)); f.setPlaceBlockNumber((long) platePlaceInfos.size()); + + List remainBoardInfos = new ArrayList<>(parseArray(remainBoardInfo, RemainBoardInfo.class)); + + remainBoardInfos.forEach(r->{ + r.getPlaceBoardList().forEach(p->{ + p.setBlocks(p.getBlocks().stream() + .filter(bl->!plateNo.contains(bl.getBlockId())) + .toList()); + }); + }); + + f.setRemainBoardInfo(toJsonString(remainBoardInfos)); + + }); try { 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 af57ff25e..09c469461 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 @@ -307,7 +307,7 @@ public class PlateServiceImpl implements PlateService { .inIfPresent("op.goods_id",pageReqVO.getGoodsIdList()) .likeIfPresent("o.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId() : null) .likeIfPresent("op.id",pageReqVO.getPlateId()) - .likeIfPresent("op.name",pageReqVO.getName()) + .likeIfPresent("op.name",pageReqVO.getPlateName()) .likeIfPresent("op.plate_no",pageReqVO.getPlateNo()) .likeIfPresent("op.custom_plate_no",pageReqVO.getCustomPlateNo()) .likeIfPresent("og.material",pageReqVO.getMaterial()) 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 6dd6375d2..c3c1cfa16 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 @@ -365,6 +365,8 @@ #{roomIds} + and opi.plan_id is not null + diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/systemconfig/SystemConfigApi.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/systemconfig/SystemConfigApi.java index 6c456bfe7..5060faee9 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/systemconfig/SystemConfigApi.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/systemconfig/SystemConfigApi.java @@ -37,6 +37,9 @@ public interface SystemConfigApi { @Operation(summary = "获取排单下的加工方案组的配置信息") CommonResult> getProcessByIds(@RequestParam("processIds") List processIds); + @GetMapping(PREFIX + "/organ/process-config-size") + @Operation(summary = "获取方案组对应的配置数量") + CommonResult getProcessSizeByIds(@RequestParam("processIds") List processIds); @GetMapping(PREFIX + "/organ/default-process-config") @Operation(summary = "获取默认的加工方案组的配置信息") 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 8ab34834a..9bf823381 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 @@ -343,6 +343,8 @@ public class ErrorCodeConstants { public static final ErrorCode PLAN_PLATE_OPTIMIZE_DATA_ERROR = new ErrorCode(1_002_041_037, "当前排单对应的优化数据异常,请重新进行优化"); public static final ErrorCode THIS_ORDER_PLATE_DATA_ERROR = new ErrorCode(1_002_041_038, "当前选择的生产单数据为空,请检查生产单信息或者重新导入生产单"); public static final ErrorCode THIS_PLAN_PLATE_DATA_ERROR = new ErrorCode(1_002_041_039, "当前排单对应的板材数据为空,请重新进行排单或检查生产单对应的板材信息"); + public static final ErrorCode PLAN_PROCESS_CONFIG_IS_NULL = new ErrorCode(1_002_041_040, "排单:{} 对应的方案组为空,请进行配置"); + public static final ErrorCode PLAN_PROCESS_CONFIG_ALL_IS_NULL = new ErrorCode(1_002_041_041, "当前所选排单对应的方案组配置均为空,请重新进行方案组配置"); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/systemconfig/SystemConfigApiImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/systemconfig/SystemConfigApiImpl.java index d40790c23..578133c70 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/systemconfig/SystemConfigApiImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/systemconfig/SystemConfigApiImpl.java @@ -26,10 +26,12 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.common.pojo.CommonResult.success; -import static com.cf.imes.framework.common.util.json.JsonUtils.*; +import static com.cf.imes.framework.common.util.json.JsonUtils.parseArray; +import static com.cf.imes.framework.common.util.json.JsonUtils.unzipString; import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; /** @@ -82,6 +84,43 @@ public class SystemConfigApiImpl implements SystemConfigApi { return success(BeanUtils.toBean(systemConfigDOS,SystemConfigRespDTO.class)); } + + + @Override + public CommonResult getProcessSizeByIds(List processIds) { + + List systemConfigDOS = systemConfigMapper.selectList(new LambdaQueryWrapperX() + .eq(SystemConfigDO::getOrganId, OrganContextHolder.getOrganId()) + .in(SystemConfigDO::getId, processIds) + .select(SystemConfigDO::getId,SystemConfigDO::getSetting)); + + if(CollUtil.isEmpty(systemConfigDOS)){ + throw exception(PLAN_PROCESS_CONFIG_ALL_IS_NULL); + } + + AtomicReference processSize = new AtomicReference<>(0); + + systemConfigDOS.forEach(f->{ + + try { + + List processSchemeConfigs = parseArray(f.getSetting(), ProcessSchemeConfig.class); + processSize.updateAndGet(v -> v + processSchemeConfigs.size()); + + }catch (Exception e){ + log.error(e.getMessage()); + throw exception(SYSTEM_PROCESS_SCHEME_CONFIG_FIELD_ERROR); + } + + }); + + if(processSize.get() == 0){ + throw exception(PLAN_PROCESS_CONFIG_ALL_IS_NULL); + } + + return success(processSize.get()); + } + @Override public CommonResult getDefaultProcessConfig() {