From 603bd884699056837b4c1a61b55c3214f0b2dbaa Mon Sep 17 00:00:00 2001 From: liuzhaotian Date: Tue, 22 Oct 2024 17:09:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=AA=E6=8E=92=E5=8D=95=EF=BC=8C=E6=8E=92?= =?UTF-8?q?=E5=8D=95=E7=AE=A1=E7=90=86Sonar=E4=BB=A3=E7=A0=81=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executor/ExecutorServerApplication.java | 2 + .../admin/plan/OptimizePlanController.java | 5 +- .../SavePlanPlateResultReqVO.java | 19 - .../admin/plate/vo/PlateRespVO.java | 5 +- .../executor/dal/mysql/goods/GoodsMapper.java | 4 +- .../executor/dal/mysql/order/OrderMapper.java | 4 +- .../dal/mysql/orderBody/OrderBodyMapper.java | 67 ++- .../mysql/orderGroup/OrderGroupMapper.java | 20 + .../mysql/orderParts/OrderPartsMapper.java | 8 +- .../executor/dal/mysql/plate/PlateMapper.java | 11 +- .../optimizeplan/OptimizePlanService.java | 2 +- .../optimizeplan/OptimizePlanServiceImpl.java | 285 ++++--------- .../service/order/OrderServiceImpl.java | 382 ++++++++++-------- .../service/plan/PlanServiceImpl.java | 230 ++++------- .../service/plate/PlateServiceImpl.java | 8 - .../resources/mapper/goods/GoodsMapper.xml | 2 +- .../mapper/orderParts/OrderPartsMapper.xml | 32 ++ .../resources/mapper/plate/PlateMapper.xml | 64 ++- .../manage/ManageServerApplication.java | 2 + .../system/enums/ErrorCodeConstants.java | 1 + .../service/machine/MachineServiceImpl.java | 37 +- .../machine/MachineTemplateServiceImpl.java | 14 +- 22 files changed, 619 insertions(+), 585 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/ExecutorServerApplication.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/ExecutorServerApplication.java index 6821b8060..e1a54df6c 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/ExecutorServerApplication.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/ExecutorServerApplication.java @@ -3,6 +3,7 @@ package com.cf.imes.module.executor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @@ -10,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; * @author there */ @SpringBootApplication +@EnableAspectJAutoProxy(exposeProxy = true) // add config @EnableFeignClients @EnableAsync @EnableScheduling //开启定时任务 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/OptimizePlanController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/OptimizePlanController.java index 1665c57bd..8346a230e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/OptimizePlanController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/OptimizePlanController.java @@ -63,7 +63,7 @@ public class OptimizePlanController { }) @PreAuthorize("@ss.hasPermission('placeorder:optimize')") public CommonResult commit(@RequestParam("planId") @NotNull(message = "排单ID不能为空") Long planId, - @RequestParam("goodsNo") @NotEmpty(message = "开料大板编号不能为空") List goodsNo) { + @RequestParam("goodsNo") @NotEmpty(message = "排单异常,请重新优化或重新进入排单") List goodsNo) { return CommonResult.success(optimizePlanService.commit(planId,goodsNo)); } @@ -80,7 +80,8 @@ public class OptimizePlanController { @Operation(summary = "修改开料状态") @PreAuthorize("@ss.hasPermission('placeorder:optimize:updateCuttingStatus')") public CommonResult updateCuttingStatus(@RequestBody CuttingStatusRespVO respVO) { - return success(optimizePlanService.updateCuttingStatus(respVO)); + optimizePlanService.updateCuttingStatus(respVO); + return success(Boolean.TRUE); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/saveOptimize/SavePlanPlateResultReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/saveOptimize/SavePlanPlateResultReqVO.java index 5136ae2bd..668ccf0af 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/saveOptimize/SavePlanPlateResultReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/saveOptimize/SavePlanPlateResultReqVO.java @@ -12,9 +12,6 @@ import java.util.List; public class SavePlanPlateResultReqVO { -// @Schema(description = "优化后的生产单数据", requiredMode = Schema.RequiredMode.REQUIRED) -// private List orderList; - @Schema(description = "优化后的大板列表数据", requiredMode = Schema.RequiredMode.REQUIRED) @@ -28,20 +25,4 @@ public class SavePlanPlateResultReqVO { -// @Schema(description = "优化后的小板列表数据", requiredMode = Schema.RequiredMode.REQUIRED) -// private List plateList; -// -// -// -// @Schema(description = "优化后新增的小板ID") -// private List addPlateIds; -// -// -// -// @Schema(description = "优化后删除的小板ID") -// private List deletePlateIds; - - - - } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/PlateRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/PlateRespVO.java index cf285ddf5..31f4c7b53 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/PlateRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/PlateRespVO.java @@ -8,7 +8,6 @@ import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.List; /** * @author Beal @@ -232,8 +231,8 @@ public class PlateRespVO extends PageParam { - @Schema(description = "小板详情列表") - private List plateDetailList; +// @Schema(description = "小板详情列表") +// private List plateDetailList; } \ 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/goods/GoodsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java index 3ae2cb4bd..69660988d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java @@ -75,7 +75,7 @@ public interface GoodsMapper extends BaseMapperX { } // 删板材,批量 - void updateDeletedById(@Param("orderId") Long orderId,@Param("ids") List ids, @Param("deleted") Integer deleted, @Param("organId") Long organId); + void updateDeletedById(@Param("orderId") Long orderId,@Param("ids") List ids , @Param("organId") Long organId); void deletedById(@Param("ids") List ids, @Param("organId") Long organId); @@ -104,8 +104,6 @@ public interface GoodsMapper extends BaseMapperX { } -// List seleTestSQL(@Param("sql") String sql); - diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java index 2ce5d6617..c6ef5cd38 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java @@ -122,8 +122,8 @@ public interface OrderMapper extends BaseMapperX { // 查询单个生产单 default OrderDO selectOrderOne(Long id, Long organId) { return selectOne(new LambdaQueryWrapper() - .eq(OrderDO::getId, id) - .eq(OrderDO::getOrganId, organId)); + .eq(OrderDO::getOrganId, organId) + .eq(OrderDO::getId, id)); } // 删除状态为条件,查询生产单 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java index a2be28bad..9d2fa4948 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java @@ -13,7 +13,6 @@ import org.apache.ibatis.annotations.Param; import java.util.Collection; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; /** * 生产单柜体 Mapper @@ -54,6 +53,25 @@ public interface OrderBodyMapper extends BaseMapperX { .eq(OrderBodyDO::getOrderId, orderId)); } + default int updateDeletedBody(Collection ids , Long organId, Long orderId) { + return update(new LambdaUpdateWrapper() + .set(OrderBodyDO::getDeleted, true) + .eq(OrderBodyDO::getOrganId, organId) + .eq(OrderBodyDO::getOrderId, orderId) + .in(OrderBodyDO::getId, ids)); + } + + + default int updateNoDeletedBody(Collection ids , Long organId, Long orderId) { + return update(new LambdaUpdateWrapper() + .set(OrderBodyDO::getDeleted, false) + .eq(OrderBodyDO::getOrganId, organId) + .eq(OrderBodyDO::getOrderId, orderId) + .in(OrderBodyDO::getId, ids)); + } + + + default int deletedByOrderId(Long orderId, Long organId) { return delete(new LambdaUpdateWrapper() .eq(OrderBodyDO::getOrderId, orderId) @@ -80,6 +98,24 @@ public interface OrderBodyMapper extends BaseMapperX { .eq(OrderBodyDO::getOrganId, organId))); } + + default int selectNoDeletedBodyCount(Long orderId, Long organId ) { + return Math.toIntExact(selectCount(new LambdaUpdateWrapper() + .eq(OrderBodyDO::getOrganId, organId) + .eq(OrderBodyDO::getOrderId, orderId) + .eq(OrderBodyDO::getDeleted, false))); + } + + + default int selectDeletedBodyCount(Long orderId, Long organId ) { + return Math.toIntExact(selectCount(new LambdaUpdateWrapper() + .eq(OrderBodyDO::getOrganId, organId) + .eq(OrderBodyDO::getOrderId, orderId) + .eq(OrderBodyDO::getDeleted, true))); + } + + + // 按照房间名称查询 default List selectByRoomName(Long orderId, String roomName, Long organId, Integer deleted) { @@ -110,9 +146,36 @@ public interface OrderBodyMapper extends BaseMapperX { .eq(OrderBodyDO::getDeleted, deleted) .select(OrderBodyDO::getId)).stream() .map(OrderBodyDO::getId) - .collect(Collectors.toList()); + .toList(); } + + default List selectNoDeletedBodyId(Long orderId, Set roomIds, Long organId) { + return selectList(new LambdaQueryWrapper() + .eq(OrderBodyDO::getOrganId, organId) + .eq(OrderBodyDO::getOrderId, orderId) + .in(OrderBodyDO::getRoomId, roomIds) + .eq(OrderBodyDO::getDeleted, false) + .select(OrderBodyDO::getId)).stream() + .map(OrderBodyDO::getId) + .toList(); + } + + + default List selectDeletedBodyId(Long orderId, Set roomIds, Long organId) { + return selectList(new LambdaQueryWrapper() + .eq(OrderBodyDO::getOrganId, organId) + .eq(OrderBodyDO::getOrderId, orderId) + .in(OrderBodyDO::getRoomId, roomIds) + .eq(OrderBodyDO::getDeleted, true) + .select(OrderBodyDO::getId)).stream() + .map(OrderBodyDO::getId) + .toList(); + } + + + + // 根据生产单进行删除 default int deleteByOrderId(Long orderId, Long organId) { return delete(new LambdaQueryWrapperX() diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderGroup/OrderGroupMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderGroup/OrderGroupMapper.java index d2c3a6abb..730ce5fe3 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderGroup/OrderGroupMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderGroup/OrderGroupMapper.java @@ -48,6 +48,26 @@ public interface OrderGroupMapper extends BaseMapperX { return 0; } + default int updateDeletedGroup(Collection bodyIds , Long organId, Long orderId) { + return update(new LambdaUpdateWrapper() + .set(OrderGroupDO::getDeleted, true) + .eq(OrderGroupDO::getOrganId, organId) + .eq(OrderGroupDO::getOrderId, orderId) + .in(OrderGroupDO::getBodyId, bodyIds)); + + } + + + default int updateNoDeletedGroup(Collection bodyIds , Long organId, Long orderId) { + return update(new LambdaUpdateWrapper() + .set(OrderGroupDO::getDeleted, false) + .eq(OrderGroupDO::getOrganId, organId) + .eq(OrderGroupDO::getOrderId, orderId) + .in(OrderGroupDO::getBodyId, bodyIds)); + + } + + default int deletedById(Long id, Long organId) { return delete(new LambdaUpdateWrapper() .eq(OrderGroupDO::getBodyId, id) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java index 9eab930fe..1a66a2472 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java @@ -64,7 +64,13 @@ public interface OrderPartsMapper extends BaseMapperX { return update(wrapper); } - void updateDeletedById(@Param("partsIds") List partsIds, @Param("deleted") Integer deleted, @Param("organId") Long organId); + void updateDeletedById(@Param("partsIds") List partsIds, @Param("deleted") Integer deleted, @Param("organId") Long organId,@Param("orderId") Long orderId); + + void updateDeletedParts(@Param("partsIds") List partsIds, @Param("orderId") Long orderId, @Param("organId") Long organId); + + void updateNoDeletedParts(@Param("partsIds") List partsIds, @Param("orderId") Long orderId, @Param("organId") Long organId); + + void deletedById(@Param("partsIds") List partsIds, @Param("organId") Long organId); List selectPartList( @Param("orderIds") List orderIds,@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 bca2910b0..4e36bb25f 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 @@ -104,6 +104,11 @@ public interface PlateMapper extends BaseMapperX { void updateDeletedById(@Param("plateIds") List plateIds, @Param("deleted") Integer deleted, @Param("organId") Long organId, @Param("orderId") Long orderId); + + void updateDeletedPlate(@Param("plateIds") List plateIds, @Param("organId") Long organId, @Param("orderId") Long orderId); + + void updateNoDeletedPlate(@Param("plateIds") List plateIds, @Param("organId") Long organId, @Param("orderId") Long orderId); + int countPlateByOrderId(@Param("orderId") Long orderId, @Param("organId") Long organId, @Param("deleted") Integer deleted); @@ -149,7 +154,11 @@ public interface PlateMapper extends BaseMapperX { List selectPlateTypeByRoomId(@Param("orderId") Long orderId, @Param("bodyIds") Collection bodyIds, @Param("organId") Long organId, @Param("deleted") Integer deleted); -// 根据生产单id删除 + List selectNoDeletedPlate(@Param("orderId") Long orderId, @Param("bodyIds") Collection bodyIds,@Param("organId") Long organId); + + List selectDeletedPlate(@Param("orderId") Long orderId, @Param("bodyIds") Collection bodyIds,@Param("organId") Long organId); + + // 根据生产单id删除 default int deleteByOrderId(Long orderId, Long organId) { return delete(new LambdaQueryWrapperX() .eq(PlateDO::getOrganId, organId) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanService.java index e4a93e700..07651faa3 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanService.java @@ -30,7 +30,7 @@ public interface OptimizePlanService { Boolean commit(Long planId, List goodsNo); - Boolean updateCuttingStatus(CuttingStatusRespVO respVO); + void updateCuttingStatus(CuttingStatusRespVO respVO); Boolean endCutting(Long planId); 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 9c9b225f5..82df78ae0 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,8 +1,6 @@ package com.cf.imes.module.executor.service.optimizeplan; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.Snowflake; -import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch._types.FieldValue; @@ -43,7 +41,6 @@ import com.cf.imes.module.system.api.dataSource.DataSourceApi; import com.cf.imes.module.system.api.machine.MachineApi; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -52,12 +49,11 @@ import javax.annotation.Resource; import java.io.IOException; import java.time.LocalDateTime; import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.*; 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.parseTree; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_NOT_EXISTS; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLAN_NOT_EXISTS; @@ -91,7 +87,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { @Resource private ElasticsearchClient elasticsearchClient; - private Snowflake snowflake = IdUtil.getSnowflake(); @Resource private MachineApi machineApi; @@ -111,6 +106,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { private static final String FIELD_ORDER_ID = "orderId"; private static final String FIELD_PLAN_ID = "planId"; + private static final String ES_SELECT_DATA_ERROR = "优化生产ES文档查询异常: "; + @Override public List getPlateListByPlanId(Long planId) { return planMapper.selectPlateListByPlanId(planId,getUserOrganId()); @@ -146,7 +143,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); - // todo 目前只解决了非混单的情况,混单情况待解决 List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 10); @@ -154,10 +150,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0); - if(!optimizeBoardModelDO.getIsOptimized()){ - - throw exception(ORDER_PLAN_NO_OPTIMIZE_ERROR); + Boolean isOptimized = optimizeBoardModelDO.getIsOptimized(); + if(Boolean.FALSE.equals(isOptimized)){ + throw exception(ORDER_PLAN_NO_OPTIMIZE_UPDATE_ERROR); } @@ -166,30 +162,30 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 创建一个列表存储 BlockPlaceInfo 对象,将优化的小板信息拿出,获取到小板编号,查询生产单,修改生产单的状态 List outputList = new ArrayList<>(); - ObjectMapper mapper = new ObjectMapper(); + String blockPlaceInfo = optimizeBoardModelDO.getBlockPlaceInfo(); - try { - // 解析 JSON 字符串 - JsonNode jsonArray = mapper.readTree(optimizeBoardModelDO.getBlockPlaceInfo()); + AssertUtils.notEmpty(blockPlaceInfo, ORDER_PLAN_OPTIMIZE_ERROR); - // 遍历 JSON 数组并提取所需字段 - if (jsonArray.isArray()) { - for (JsonNode jsonNode : jsonArray) { - Long bi = jsonNode.get("bi").asLong(); - String bo = jsonNode.get("bo").asText(); - outputList.add(new BlockPlaceInfo(bi,bo)); - } - } - } catch (Exception e) { + JsonNode jsonArray = parseTree(blockPlaceInfo); + + boolean isArray = jsonArray.isArray(); + + if (Boolean.FALSE.equals(isArray)) { throw exception(ORDER_PLAN_OPTIMIZE_ERROR); } + for (JsonNode jsonNode : jsonArray) { + Long bi = jsonNode.get("bi").asLong(); + String bo = jsonNode.get("bo").asText(); + outputList.add(new BlockPlaceInfo(bi,bo)); + } + + for (Long goods : goodsNo) { plateNo.addAll(outputList.stream().filter(f -> f.getBi().equals(goods)).map(BlockPlaceInfo::getBo).distinct().toList()); } - List plateDOS = plateMapper.selectPlateByPlateNo(plateNo.stream().distinct().toList(), getUserOrganId()); @@ -200,22 +196,22 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { orderMapper.updateOrderListStatus(orderIds,OrderStatusEnum.IN_PRODUCTION.getStatus(),getUserOrganId()); - CutedBoardInfo cutedBoardInfo = optimizeBoardModelDO.getCutedBoardInfo() == null ? new CutedBoardInfo() : optimizeBoardModelDO.getCutedBoardInfo(); + CutedBoardInfo cutedBoardInfo = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardInfo()).orElse(new CutedBoardInfo()); - // 获取原排单的开料大板数 + 新增的开料大板数 - // 获取原排单的已开料的大板编号 - List cutedBoardList = cutedBoardInfo.getCutedBoardList() == null ? new ArrayList<>() : cutedBoardInfo.getCutedBoardList(); + List cutedBoardList = Optional.ofNullable(cutedBoardInfo.getCutedBoardList()).orElseGet(ArrayList::new); - goodsNo.addAll(cutedBoardList); - // 将新开料的大板编号添加到已开料的大板编号中 - cutedBoardList.addAll(Stream.concat( - cutedBoardList.stream().filter(str -> !goodsNo.contains(str)), - goodsNo.stream().filter(str -> !cutedBoardList.contains(str))) - .toList()); + + // 将开料的大板编号和已经开料的大板编号进行去重,相同去除,不同新增 + goodsNo.forEach(item -> { + if (!cutedBoardList.contains(item)) { + cutedBoardList.add(item); + } + }); + long cutedBoardNumber = cutedBoardList.size(); @@ -251,18 +247,17 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { planMapper.updateById(planDO); - List deleteOrderIds = goodsMapper.selectNoPlanOrdersListByOrderIds(orderIds, getUserOrganId()).stream().map(GoodsDO::getOrderId).distinct().toList(); orderIds.removeAll(deleteOrderIds); - if(!orderIds.isEmpty()) { + if(ObjectUtil.isNotEmpty(orderIds)) { List orderIdList = goodsMapper.selectOrderPlanList(orderIds, getUserOrganId()); List orderDOS = orderMapper.selectOrderPackList(orderIdList, getUserOrganId()); - if (!orderDOS.isEmpty()) { + if (ObjectUtil.isNotEmpty(orderDOS)) { List orderDOList = orderDOS.stream().map(m -> m.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus())).toList(); orderMapper.updateBatch(orderDOList); } @@ -278,13 +273,13 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { @Override @Transactional(rollbackFor = Exception.class) - public Boolean updateCuttingStatus(CuttingStatusRespVO respVO) { + public void updateCuttingStatus(CuttingStatusRespVO respVO) { Long planId = respVO.getPlanId(); List goodsNo = respVO.getGoodsNo(); if(goodsNo.isEmpty()){ - return true; + return; } PlanDO planDO = planMapper.selectById(planId); @@ -298,14 +293,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0); - if(!optimizeBoardModelDO.getIsOptimized()){ + Boolean isOptimized = optimizeBoardModelDO.getIsOptimized(); + + if(Boolean.FALSE.equals(isOptimized)){ throw exception(ORDER_PLAN_NO_OPTIMIZE_UPDATE_ERROR); } - CutedBoardInfo cutedBoardInfo = optimizeBoardModelDO.getCutedBoardInfo() == null ? new CutedBoardInfo() : optimizeBoardModelDO.getCutedBoardInfo(); + CutedBoardInfo cutedBoardInfo = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardInfo()).orElse(new CutedBoardInfo()); if(cutedBoardInfo.getCutedBoardNumber() != null) { @@ -316,8 +313,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 移除取消开料的数据 cutedBoardList.removeAll(goodsNo); + // 减去取消开料的大板数量 - cutedBoardNumber -= (goodsNo.isEmpty() ? 0 : goodsNo.size()); + cutedBoardNumber -= goodsNo.size(); // 将需要更新更新的数据更新到原数据中 @@ -354,14 +352,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { .toList()); } - return Boolean.TRUE; + return; } -// if(planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) && cutedBoardInfo.getCutedBoardNumber() > 0 && cutedBoardInfo.getCutedBoardNumber() < optimizeBoardModelDO.getBoardCount() ){ -// -// planMapper.updatePlanStatus(planId,PlanStatusEnum.OPENING.getStatus(),getUserOrganId()); -// } planMapper.updatePlanStatus(planId,PlanStatusEnum.OPENING.getStatus(),getUserOrganId()); @@ -389,57 +383,12 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // todo 待确认,是否要达到这样的需求 : 生产单的状态也应该更改,如果大板变为未开料,生产单对应的状态应该变为已排单(这时取消开料对应的大板对应的生产单应该在其他排单中不存在,可修改) - - - return Boolean.TRUE; } @Override @Transactional(rollbackFor = Exception.class) public Boolean endCutting(Long planId) { // 目前结束开料已去掉,所以这些代码先注释,后面如果加再修改逻辑 -// -// PlanDO planDO = planMapper.selectById(planId); -// if (Objects.isNull(planDO)) { -// throw exception(PLAN_NOT_EXISTS); -// } -// planMapper.updateById(PlanDO.builder() -// .id(planId) -// .status(PlanStatusEnum.OPENED.getStatus()) -// .produceTime(LocalDateTime.now()) -// .build()); -// -// LoginUser loginUser = getLoginUser(); -// List userProcess = processApi.getUserProcess(loginUser.getId()); -// -// if(!userProcess.isEmpty()) { -// -// List processStepIds = new ArrayList<>(); -// -// List orderIds = JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class); -// -// List processStepDOS = processStepMapper.selectOrderList(orderIds, getUserOrganId()); -// -// -// for (ProcessDTO process : userProcess) { -// processStepIds.addAll(processStepDOS.stream().filter(f -> Objects.equals(f.getProcessinfoId(), process.getId())) -// .map(ProcessStepDO::getId).toList()); -// } -// -// -// if(!processStepIds.isEmpty()) { -// -// List processStepSalaryIds = calculateSalary(processStepIds); -// -// // 修改生产明细表和步骤表的工序状态 -// processStepMapper.updateStatus(processStepSalaryIds, loginUser.getNickname()); -// -// processStepItemMapper.updateStatus(processStepIds); -// -// } -// -// } - return Boolean.TRUE; @@ -455,9 +404,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 计算当前工序的工资金额 - List salary = processStepMapper.calculateSalary(processStepAreaIds,getUserOrganId()); - - return salary; + return processStepMapper.calculateSalary(processStepAreaIds,getUserOrganId()); } @@ -504,9 +451,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { @Override public OrderSource getOrderSourceByOrderId(Long orderId) { OrderDO orderDO = orderMapper.selectById(orderId); -// if (Objects.isNull(orderDO)) { -// throw exception(ORDER_NOT_EXISTS); -// } AssertUtils.notEmpty(orderDO,ORDER_NOT_EXISTS); @@ -519,16 +463,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { AssertUtils.notEmpty(plateDOS,ORDER_PLATE_ERROR); for (PlateDetialRespVO plateDetailsRespVO : plateDOS) { - String name = ""; + StringBuilder name = new StringBuilder(); if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) { for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) { // 去除最后的逗号 - name += groupNameList.getGroupName() + ","; + name.append(groupNameList.getGroupName()).append(","); } - name = name.substring(0, name.length() - 1); + name = new StringBuilder(name.substring(0, name.length() - 1)); } - plateDetailsRespVO.setProcessGroupName(name); + plateDetailsRespVO.setProcessGroupName(name.toString()); } @@ -586,9 +530,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { @Override public OrderSource getOrderSourceByPlanId(Long planId) { PlanDO planDO = planMapper.selectById(planId); -// if (Objects.isNull(planDO)) { -// throw exception(PLAN_NOT_EXISTS); -// } AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); @@ -607,16 +548,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { AssertUtils.notEmpty(plateDetialRespVOS,ORDER_PLAN_PLATE_ERROR); for (PlateDetialRespVO plateDetailsRespVO : plateDetialRespVOS) { - String name = ""; + StringBuilder name = new StringBuilder(); if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) { for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) { // 去除最后的逗号 - name += groupNameList.getGroupName() + ","; + name.append(groupNameList.getGroupName()).append(","); } - name = name.substring(0, name.length() - 1); + name = new StringBuilder(name.substring(0, name.length() - 1)); } - plateDetailsRespVO.setProcessGroupName(name); + plateDetailsRespVO.setProcessGroupName(name.toString()); } @@ -704,17 +645,17 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { for (PlateDetialRespVO plateDetailsRespVO : plateDetialRespVOS) { - String name = ""; + StringBuilder name = new StringBuilder(); if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) { for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) { // 去除最后的逗号 - name += groupNameList.getGroupName() + ","; + name.append(groupNameList.getGroupName()).append(","); } - name = name.substring(0, name.length() - 1); + name = new StringBuilder(name.substring(0, name.length() - 1)); } - plateDetailsRespVO.setProcessGroupName(name); + plateDetailsRespVO.setProcessGroupName(name.toString()); } @@ -743,13 +684,21 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { @Transactional(rollbackFor = Exception.class) public void saveOptimizationResults(SavePlanPlateResultReqVO req) { - AssertUtils.notEmpty(req.getOptimizeBoardModelDOS(),ORDER_PLAN_OPTIMIZE_ERROR); - // 先根据排单查找是否有优化数据,如果有,删除 - List planIds = req.getOptimizeBoardModelDOS().stream().map(OptimizeBoardModelDO::getPlanId).toList(); + List planIds = req.getOptimizeBoardModelDOS().stream().map(OptimizeBoardModelDO::getPlanId).distinct().toList(); - // todo 目前只解决非混单的情况下, - List optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, planIds.size()); + List goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId()); + + AssertUtils.notEmpty(goodsDOS,CREATE_PLAN_DATA_ERROR); + + List ids = goodsDOS.stream().map(GoodsDO::getId).distinct().toList(); + + List orderIds = goodsDOS.stream().map(GoodsDO::getOrderId).distinct().toList(); + + List goodsIds = goodsDOS.stream().map(GoodsDO::getGoodsId).distinct().toList(); + + // todo 目前只解决非混单的情况下 (目前已解决混单的情况,数据正确性待校验) + List optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, goodsIds.size()); if(!optimizeBoardModelDOS.isEmpty()){ deleteByPlanId(planIds,ORDER_REMAIN_PLATE_MODEL); @@ -759,86 +708,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 保存优化后的大板数据 batchSaveBoardModel(req.getOptimizeBoardModelDOS()); - List goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId()); - List ids = goodsDOS.stream().map(GoodsDO::getId).distinct().toList(); - - List orderIds = goodsDOS.stream().map(GoodsDO::getOrderId).distinct().toList(); plateMapper.updatePlateOptimized(orderIds,ids,getUserOrganId()); -// // 保存余料板的数据 -// if (CollectionUtil.isNotEmpty(req.getOptimizeRemainPlates())) { -// -// List remainPlateDoS = BeanUtils.toBean(req.getOptimizeRemainPlates(), RemainPlateDO.class) -// .stream() -// .map(m -> m.setUseType(1)) -// .map(m -> m.setOutLineJson("")).toList(); -// -// -// List insertPlateDoS = remainPlateDoS.stream().filter(f -> f.getId() == null).toList(); -// -// List updatePlateDoS = remainPlateDoS.stream().filter(f -> f.getId() != null).toList(); -// -// Boolean aBoolean = insertPlateDoS.isEmpty() ? null : remainPlateMapper.insertBatch(insertPlateDoS); -// -// Boolean bBoolean = updatePlateDoS.isEmpty() ? null : remainPlateMapper.updateBatch(updatePlateDoS); -// -// -// } - - - - - // 有新增小板,往数据库新增小板 - // todo 目前新增小板在界面就已经走接口了,这个逻辑应该用不到了 - -// if (CollectionUtil.isNotEmpty(req.getAddPlateIds())) { -// -// List addPlates = req.getPlateList().stream() -// .filter(m -> req.getAddPlateIds().contains(m.getPlateId())) -// .map(m -> m.setPlateId(null)) -// .collect(Collectors.toList()); -// -// // 批量新增小板信息 -// List plateDOS = BeanUtils.toBean(addPlates, PlateDO.class); -// -// plateMapper.insertBatch(plateDOS); -// -// // 批量新增生产单明细表信息 -// ArrayList orderItemDOS = new ArrayList<>(); -// -// for (PlateDetialRespVO plateDetialRespVO : req.getPlateList()) { -// orderItemDOS.add(OrderItemDO.builder() -//// .id(plateDetialRespVO.getItemId()) -// .bodyId(plateDetialRespVO.getBodyId()) -// .roomId(plateDetialRespVO.getRoomId()) -//// .groupId(Long.valueOf(plateDetialRespVO.getProcessGroupId())) -// .orderId(plateDetialRespVO.getOrderId()) -// .type(1) -// .plateId(plateDetialRespVO.getPlateId()) -// .build()); -// } -// -// -// orderItemMapper.insertBatch(orderItemDOS); -// -// } -// -// // 有删除的小板ID,删除小板 -// if (CollectionUtil.isNotEmpty(req.getDeletePlateIds())) { -// -// // 删除生产单板件表的小板 -// plateMapper.deleteBatchIds(req.getDeletePlateIds()); -// -// // 删除生产单明细表中对应的小板数据 -// orderItemMapper.deleteByPlateId(req.getDeletePlateIds()); -// -// -// } - - } @Override @@ -847,7 +721,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List plateDOS = plateMapper.selectPlateNum(orderId, getUserOrganId()); if(plateDOS.isEmpty()){ - return null; + return new ArrayList<>(); } return buildRespByOrderId(orderId, plateDOS.size()); @@ -865,7 +739,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { SearchResponse search = elasticsearchClient.search(builder.build(), OrderModelDO.class); List> hits = search.hits().hits(); if (CollUtil.isNotEmpty(hits)) { - return hits.stream().map(Hit::source).collect(Collectors.toList()); + return hits.stream().map(Hit::source).toList(); } return new ArrayList<>(); } catch (Exception e) { @@ -883,7 +757,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { SearchResponse search = elasticsearchClient.search(builder.build(), OrderModelDO.class); List> hits = search.hits().hits(); if (CollUtil.isNotEmpty(hits)) { - return hits.stream().map(Hit::source).collect(Collectors.toList()); + return hits.stream().map(Hit::source).toList(); } return new ArrayList<>(); } catch (Exception e) { @@ -898,7 +772,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { * * @param optimizeBoardModelDOS */ - @Transactional(rollbackFor = Exception.class) public void batchSaveBoardModel(List optimizeBoardModelDOS) { try { BulkResponse bulkResponse = esDocumentService.bulkCreate(ORDER_REMAIN_PLATE_MODEL, optimizeBoardModelDOS); @@ -925,11 +798,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { SearchResponse search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class); List> hits = search.hits().hits(); if (CollUtil.isNotEmpty(hits)) { - return hits.stream().map(Hit::source).collect(Collectors.toList()); + return hits.stream().map(Hit::source).toList(); } return new ArrayList<>(); } catch (Exception e) { - log.error("优化生产ES文档查询异常: "+e.getMessage()); + log.error(ES_SELECT_DATA_ERROR+e.getMessage()); throw new ServiceException(DATA_DATA_ERROR); } } @@ -944,11 +817,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { SearchResponse search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class); List> hits = search.hits().hits(); if (CollUtil.isNotEmpty(hits)) { - return hits.stream().map(Hit::source).collect(Collectors.toList()); + return hits.stream().map(Hit::source).toList(); } return new ArrayList<>(); } catch (Exception e) { - log.error("优化生产ES文档查询异常: "+e.getMessage()); + log.error(ES_SELECT_DATA_ERROR+e.getMessage()); throw new ServiceException(DATA_DATA_ERROR); } } @@ -965,11 +838,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { SearchResponse search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class); List> hits = search.hits().hits(); if (CollUtil.isNotEmpty(hits)) { - return hits.stream().map(Hit::source).collect(Collectors.toList()); + return hits.stream().map(Hit::source).toList(); } return new ArrayList<>(); } catch (Exception e) { - log.error("优化生产ES文档查询异常: "+e.getMessage()); + log.error(ES_SELECT_DATA_ERROR+e.getMessage()); throw new ServiceException(DATA_DATA_ERROR); } } @@ -985,11 +858,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { SearchResponse search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class); List> hits = search.hits().hits(); if (CollUtil.isNotEmpty(hits)) { - return hits.stream().map(Hit::source).collect(Collectors.toList()); + return hits.stream().map(Hit::source).toList(); } return new ArrayList<>(); } catch (Exception e) { - log.error("优化生产ES文档查询异常: "+e.getMessage()); + log.error(ES_SELECT_DATA_ERROR+e.getMessage()); throw new ServiceException(DATA_DATA_ERROR); } } @@ -1005,7 +878,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { SearchResponse search = elasticsearchClient.search(builder.build(), OrderPartsRemark.class); List> hits = search.hits().hits(); if (CollUtil.isNotEmpty(hits)) { - return hits.stream().map(Hit::source).collect(Collectors.toList()); + return hits.stream().map(Hit::source).toList(); } return new ArrayList<>(); } catch (Exception e) { 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 db73ea9de..0e7250c6e 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 @@ -56,6 +56,7 @@ import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiDataA import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiTypeRealize; import com.cf.imes.module.executor.util.fileConversion.admin.files.excel.ExcelTypeRealize; import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.XmlTypeRealize; +import org.springframework.aop.framework.AopContext; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; @@ -261,202 +262,97 @@ public class OrderServiceImpl implements OrderService { @Override @Transactional(rollbackFor = Exception.class) public void updateDeleteBody(Long orderId, Set roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0 + // 判断生产单的状态和生产单柜体对应的板擦是否已开料 List planIds = validateOrderStatus(orderId, roomIds, bodyId, getUserOrganId()); - List bodyIds = new ArrayList<>(); - Integer index = status == 1 ? 0 : 1; - - if (roomIds != null && roomIds.size() != 0) { - bodyIds = orderBodyMapper.selectBodyIdByRoomId(orderId, roomIds, getUserOrganId(), index); - } else if (bodyId != null && bodyId != 0) { - validateOrderBodyExists(orderId, bodyId, getUserOrganId(), index); - bodyIds.add(bodyId); - } - - if (bodyIds.size() != 0){ - - List plateDOList = plateMapper.selectPlateTypeByRoomId(orderId, bodyIds, getUserOrganId(), index); + List bodyIds = validateOrderBodyExists(orderId, bodyId, getUserOrganId(), roomIds, OrderDeletedEnum.NOT_DELETED.getStatus()); - List plateIds = plateDOList.stream().map(PlateDO::getId).toList(); + if (!bodyIds.isEmpty()){ - List goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList(); -// List groupIds = orderGroupMapper.selectListByBodyId(bodyIds, orderId, getUserOrganId(), index); + orderBodyMapper.updateDeletedBody(bodyIds, getUserOrganId(), orderId);// 柜体 + + orderGroupMapper.updateDeletedGroup(bodyIds, getUserOrganId(), orderId);// 加工组 + + List plateDOList = plateMapper.selectNoDeletedPlate(orderId, bodyIds, getUserOrganId()); - orderBodyMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 柜体 - orderGroupMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 加工组 if (!plateDOList.isEmpty()) { - plateMapper.updateDeletedById(plateIds, status, getUserOrganId(), orderId);// 删小板 - // 删除包裹,只需删除,无需还原 - List packIds = orderItemMapper.selectPackId(orderId,bodyIds, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList(); + // 删除小板,大板,包裹,排单信息 + OrderServiceImpl o = (OrderServiceImpl) AopContext.currentProxy(); + o.updateDeletePlate(plateDOList, orderId, bodyIds, planIds); - orderPackageMapper.updatePackList(orderId, packIds, getUserOrganId()); - - orderItemMapper.deletePackList(orderId, packIds, getUserOrganId()); - - orderPrepackagedMapper.deletePacked(orderId, getUserOrganId()); - - List orderPackageDOS = orderPackageMapper.selectPackStatusList(orderId, getUserOrganId()); - - if (orderPackageDOS.isEmpty()) { - - OrderDO orderDO = orderMapper.selectById(orderId); - - orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus()); - - orderMapper.updateById(orderDO); - - } - - - // 删除大板 - List goodsList = plateMapper.selectPlateDeletedStatus(orderId, goodsIds, getUserOrganId()); - - List goodsIdList = goodsList.stream().map(PlateDO::getGoodsId).distinct().toList(); - - List goodsIdDeleted = Stream.concat( - goodsIds.stream().filter(str -> !goodsIdList.contains(str)), - goodsIdList.stream().filter(str -> !goodsIds.contains(str))) - .toList(); - - if (goodsIdDeleted.size() > 0) { - - goodsMapper.updateDeletedById(orderId,goodsIdDeleted, status, getUserOrganId()); - - } - - - if (!planIds.isEmpty()) { - // 判断删除的柜体对应的板材是否和排单板材一样 - List goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId()); - - // 一样,同时删除排单的信息 - if (goodsDOS.isEmpty()) { - planService.deletePlan(planIds); - } else { - // 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到) - planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL); - } - - } } + + // 删除配件信息 List partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件 - if (partsList != null && partsList.size() != 0){ - orderPartsMapper.updateDeletedById(partsList, status, getUserOrganId()); + + if (!partsList.isEmpty()){ + orderPartsMapper.updateDeletedParts(partsList, getUserOrganId(),orderId); } + } + int bodyCount = orderBodyMapper.selectNoDeletedBodyCount(orderId, getUserOrganId()); // 生产单柜体数量判断 - if (orderBodyMapper.selectCountByOrderId(orderId, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus()) == 0 ) { + if ( bodyCount == 0 ) { orderMapper.updateOrderStatus(orderId, OrderStatusEnum.EMPTY.getStatus(), getUserOrganId()); - }else { - orderMapper.updateOrderStatus(orderId, OrderStatusEnum.NEW_ORDER.getStatus(), getUserOrganId()); } } + + + + + @Override @Transactional(rollbackFor = Exception.class) public void updateRestoreBody(Long orderId, Set roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0 // 校验存在 OrderDO orderDO = orderMapper.selectOrderOne(orderId, getUserOrganId()); - if (orderDO == null) - throw exception(ORDER_NOT_EXISTS); - List bodyIds = new ArrayList<>(); - Integer index = status == 1 ? 0 : 1; + AssertUtils.notEmpty(orderDO,ORDER_NOT_EXISTS); - if (roomIds != null && roomIds.size() != 0) { - bodyIds = orderBodyMapper.selectBodyIdByRoomId(orderId, roomIds, getUserOrganId(), index); - } else if (bodyId != null && bodyId != 0) { - validateOrderBodyExists(orderId, bodyId, getUserOrganId(), index); - bodyIds.add(bodyId); - } +// List bodyIds = new ArrayList<>(); +// +// Integer index = status == 1 ? 0 : 1; +// +// if (roomIds != null && !roomIds.isEmpty()) { +// bodyIds = orderBodyMapper.selectBodyIdByRoomId(orderId, roomIds, getUserOrganId(), index); +// } else if (bodyId != null && bodyId != 0) { +// validateOrderBodyExists(orderId, bodyId, getUserOrganId(), roomIds,index); +// bodyIds.add(bodyId); +// } - if (bodyIds.size() != 0){ + List bodyIds = validateOrderBodyExists(orderId, bodyId, getUserOrganId(), roomIds, OrderDeletedEnum.DELETED.getStatus()); - List plateDOList = plateMapper.selectPlateTypeByRoomId(orderId, bodyIds, getUserOrganId(), index); - List plateIds = plateDOList.stream().map(PlateDO::getId).toList(); - List goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList(); + if (!bodyIds.isEmpty()){ - orderBodyMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 柜体 - orderGroupMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 加工组 + orderBodyMapper.updateNoDeletedBody(bodyIds, getUserOrganId(), orderId);// 柜体 + orderGroupMapper.updateNoDeletedGroup(bodyIds, getUserOrganId(), orderId);// 加工组 + + List plateDOList = plateMapper.selectDeletedPlate(orderId, bodyIds, getUserOrganId()); // 小板还原 if (!plateDOList.isEmpty()) { - plateMapper.updateDeletedById(plateIds, status, getUserOrganId(), orderId); + // 还原小板,小板对应的大板信息 + OrderServiceImpl o = (OrderServiceImpl) AopContext.currentProxy(); + o.updateRestorePlate(orderId,plateDOList); - // 还原大板 - List goodsDOS = goodsMapper.selectGoodsListByStatus(orderId, goodsIds, getUserOrganId()); - if (!goodsDOS.isEmpty()) { - goodsMapper.updateBatch(goodsDOS.stream().map(m -> m.setDeleted(false)).toList()); - } - - - // 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板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())) -// .filter(a -> a.getOldId() == null) - .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); - - } } List partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件 - if (partsList != null && partsList.size() != 0){ - orderPartsMapper.updateDeletedById(partsList, status, getUserOrganId()); + if (partsList != null && !partsList.isEmpty()){ + orderPartsMapper.updateNoDeletedParts(partsList, getUserOrganId(),orderId); } } @@ -467,10 +363,10 @@ public class OrderServiceImpl implements OrderService { return; } + int bodyCount = orderBodyMapper.selectDeletedBodyCount(orderId, getUserOrganId()); + // 生产单柜体数量判断 - if (orderBodyMapper.selectCountByOrderId(orderId, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus()) == 0) { - orderMapper.updateOrderStatus(orderId, OrderStatusEnum.EMPTY.getStatus(), getUserOrganId()); - }else { + if ( bodyCount == 0 ) { orderMapper.updateOrderStatus(orderId, OrderStatusEnum.NEW_ORDER.getStatus(), getUserOrganId()); } @@ -776,14 +672,29 @@ public class OrderServiceImpl implements OrderService { } // 验证柜体是否存在 - private void validateOrderBodyExists(Long orderId, Long bodyId, Long organId, Integer deleted) { - if (orderBodyMapper.selectCount(new LambdaQueryWrapperX() - .eq(OrderBodyDO::getOrganId, organId) - .eqIfPresent(OrderBodyDO::getOrderId, orderId) - .eqIfPresent(OrderBodyDO::getId, bodyId) - .eqIfPresent(OrderBodyDO::getDeleted, deleted)) == 0) { - throw exception(ORDER_BODY_NOT_EXISTS); + private List validateOrderBodyExists(Long orderId, Long bodyId, Long organId, Set roomIds, Integer deleted) { + + List bodyIds = new ArrayList<>(); + + if (roomIds != null && !roomIds.isEmpty()) { + bodyIds.addAll(orderBodyMapper.selectBodyIdByRoomId(orderId, roomIds, getUserOrganId(),deleted)); } + + if (bodyId != null && bodyId != 0) { + Long bodyCount = orderBodyMapper.selectCount(new LambdaQueryWrapperX() + .eq(OrderBodyDO::getOrganId, organId) + .eqIfPresent(OrderBodyDO::getDeleted, deleted) + .eqIfPresent(OrderBodyDO::getOrderId, orderId) + .eqIfPresent(OrderBodyDO::getId, bodyId)); + + if (bodyCount == 0) { + throw exception(ORDER_BODY_NOT_EXISTS); + } + + bodyIds.add(bodyId); + } + + return bodyIds; } private Map> getPlateGoods(List goodsLists) { @@ -941,11 +852,156 @@ public class OrderServiceImpl implements OrderService { AssertUtils.empty(planDOS, ORDER_PLAN_ERROR); -// planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL); - } return planIds; } + + + + // 删除小板,大板,包裹,排单信息 + @Transactional(rollbackFor = Exception.class) + public void updateDeletePlate(List plateDOList, Long orderId ,List bodyIds,List planIds) { + + + List plateIds = plateDOList.stream().map(PlateDO::getId).toList(); + + List goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList(); + + plateMapper.updateDeletedPlate(plateIds, getUserOrganId(), orderId);// 删小板 + + // 删除包裹,只需删除,无需还原 + List packIds = orderItemMapper.selectPackId(orderId,bodyIds, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList(); + + orderPackageMapper.updatePackList(orderId, packIds, getUserOrganId()); + + orderItemMapper.deletePackList(orderId, packIds, getUserOrganId()); + + orderPrepackagedMapper.deletePacked(orderId, getUserOrganId()); + + List orderPackageDOS = orderPackageMapper.selectPackStatusList(orderId, getUserOrganId()); + + if (orderPackageDOS.isEmpty()) { + + OrderDO orderDO = orderMapper.selectById(orderId); + + orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus()); + + orderMapper.updateById(orderDO); + + } + + + // 删除大板 + List goodsList = plateMapper.selectPlateDeletedStatus(orderId, goodsIds, getUserOrganId()); + + List goodsIdList = goodsList.stream().map(PlateDO::getGoodsId).distinct().toList(); + + List goodsIdDeleted = Stream.concat( + goodsIds.stream().filter(str -> !goodsIdList.contains(str)), + goodsIdList.stream().filter(str -> !goodsIds.contains(str))) + .toList(); + + if (!goodsIdDeleted.isEmpty()) { + + goodsMapper.updateDeletedById(orderId,goodsIdDeleted, getUserOrganId()); + + } + + + if (!planIds.isEmpty()) { + // 判断删除的柜体对应的板材是否和排单板材一样 + List goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId()); + + // 一样,同时删除排单的信息 + if (goodsDOS.isEmpty()) { + planService.deletePlan(planIds); + } else { + // 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到) + planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL); + } + + } + + + } + + + + + // 还原小板,小板对应的大板信息 + @Transactional(rollbackFor = Exception.class) + public void updateRestorePlate(Long orderId, List plateDOList){ + + List plateIds = plateDOList.stream().map(PlateDO::getId).toList(); + + List goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList(); + + + plateMapper.updateNoDeletedPlate(plateIds, getUserOrganId(), orderId); + + + // 还原大板 + List goodsDOS = goodsMapper.selectGoodsListByStatus(orderId, goodsIds, getUserOrganId()); + if (!goodsDOS.isEmpty()) { + goodsMapper.updateBatch(goodsDOS.stream().map(m -> m.setDeleted(false)).toList()); + } + + + // 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板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); + + } + + } + + + + } \ 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/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 90b148f22..0215b3287 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 @@ -200,7 +200,6 @@ public class PlanServiceImpl implements PlanService { .map(m -> m.setStatus(OrderStatusEnum.SORTED.getStatus())) .toList(); -// orderDOList.forEach(m -> m.setStatus(OrderStatusEnum.SORTED.getStatus())); if(!orderDOS.isEmpty()) { orderMapper.updateBatch(orderDOS); @@ -227,13 +226,13 @@ public class PlanServiceImpl implements PlanService { PlanDO plan = BeanUtils.toBean(updateReqVO, PlanDO.class); // 校验新增的板材是否和排单为统一类型的 - if(!(updateReqVO.getItemList() == null)){ + if(updateReqVO.getItemList() != null){ - // todo 目前之解决非混单的情况,混单的情况待解决 + // TODO 目前之解决非混单的情况,混单的情况待解决 String goodsId = updateReqVO.getItemList().stream().map(PlanSaveReqVO.Item::getGoodsId).distinct().toList().get(0); - // todo 目前只解决非混单的情况 + // TODO 目前只解决非混单的情况 String goodsIds = goodsMapper.selectPlanGoods(plan.getId(), getUserOrganId()).stream().map(GoodsDO::getGoodsId).toList().get(0); if(!goodsId.equals(goodsIds)){ @@ -417,32 +416,6 @@ public class PlanServiceImpl implements PlanService { .toList(); -// List orderIdList = new ArrayList<>(); -// -// List diff = new ArrayList<>(); -// -// // 根据生产单ID查询ES的优化数据 -// List optimizeBoardModelDOS = optimizePlanService.buildBoardByOrderIds(orderIds, ORDER_REMAIN_PLATE_MODEL, 100); -// -// if(optimizeBoardModelDOS.isEmpty()){ -// -// List orderList = orderMapper.selectBatchIds(orderIds); -// -// List orderDOList = orderList.stream().map(m -> m.setStatus(OrderStatusEnum.NEW_ORDER.getStatus())).toList(); -// -// orderMapper.updateBatch(orderDOList); -// -// }else { -// optimizeBoardModelDOS.forEach(f -> orderIdList.addAll(f.getOrderId())); -// -// // 已经删除的排单的生产单号和新查找的生生产单号对比,找出不同的部分 -//// diff = orderIds.stream().filter(f -> !orderIdList.contains(f)).toList(); -// diff = Stream.concat( -// orderIds.stream().filter(str -> !orderIdList.contains(str)), -// orderIdList.stream().filter(str -> !orderIds.contains(str))) -// .toList(); -// } -// if(!diff.isEmpty()){ List orderList = orderMapper.selectBatchIds(diff); @@ -510,15 +483,12 @@ public class PlanServiceImpl implements PlanService { Set machineIds = planDOPageResult.getList().stream().map(PlanDO::getMachineId).collect(Collectors.toSet()); - List planIds = planDOPageResult.getList().stream().map(PlanDO::getId).collect(Collectors.toList()); + List planIds = planDOPageResult.getList().stream().map(PlanDO::getId).toList(); List machines = machineApi.list(machineIds).getCheckedData(); -// List plateInfoVOS = planItemMapper.selectGoodsList(planIds,getUserOrganId()); - - // 查询排单对应的大板板材信息 List plateInfoVOS = goodsMapper.selectOrderGoodsPlateList(planIds, getUserOrganId()); @@ -534,26 +504,6 @@ public class PlanServiceImpl implements PlanService { }).toList(); -// List orderIdsList = new ArrayList<>(); -// -// plateInfoVOS.forEach(f-> -// orderIdsList.addAll(f.getOrderIdList())); -// -// -// List plateInfoVOList = plateMapper.selectPlateArea(orderIdsList, getUserOrganId()); -// -// -// -// // todo 目前这种情况只解决没有混单的情况,混单情况待解决 (目前解决,数据正确性待测试) -// for (PlateInfoVO plateInfoVO : plateInfoVOS) { -// plateInfoVO.setArea(plateInfoVOList.stream() -// .filter(s->s.getGoodsId().equals(plateInfoVO.getGoodsId())) -// .map(PlateInfoVO::getArea) -// .reduce(BigDecimal.ZERO,BigDecimal::add)); -// -//// plateInfoVO.setOptimizeGoodsCount(plateInfoVOList.stream().filter(s->s.getGoodsId().equals(plateInfoVO.getGoodsId())).mapToLong(PlateInfoVO::getOptimizeGoodsCount).sum()); -// } - // 根据排单ID查询ES中的优化数据 todo 目前只解决无混单的情况,混单情况待解决 List optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, infoVOList.size()); @@ -566,52 +516,31 @@ public class PlanServiceImpl implements PlanService { PageResult planRespVOPageResult = BeanUtils.toBean(planDOPageResult, PlanRespVO.class); + planRespVOPageResult.getList().forEach(e -> { // 机台信息 - e.setMachineName(machines.stream() - .filter(f -> Objects.equals(f.getId(), e.getMachineId())) - .map(CuttingRespDTO::getName) - .findAny() - .orElse(null)); + e.setMachineName(getMachineName(e.getMachineId(), machines)); // 板材信息列表 - e.setPlateInfoList(infoVOList.stream() - .filter(f -> Objects.equals(f.getPlanId(), e.getId())) - .collect(Collectors.toList())); + e.setPlateInfoList(getPlateInfoList(e.getId(), infoVOList)); // todo 小板总数量目前只解决没有混单的情况时的小板数量,后续待加入混单情况 (目前解决,数据正确性待测试) - e.setPlateNum(infoVOList.stream() - .filter(f -> Objects.equals(f.getPlanId(), e.getId())) - .mapToLong(PlateInfoVO::getCount) - .sum()); + e.setPlateNum(getPlateNum(e.getId(), infoVOList)); // todo 大板优化数量目前只解决没有混单的情况时的小板数量,后续待加入混单情况 (目前解决,数据正确性待测试) - e.setOptimizeGoodsCount(optimizeBoardModelDOS.stream() - .filter(f -> Objects.equals(f.getPlanId(), e.getId())) - // todo 目前兼容修改,新的需求不需要这个校验 - .mapToLong(m -> m.getBoardCount() == null ? 0 : m.getBoardCount()) - .sum()); + e.setOptimizeGoodsCount(getOptimizeGoodsCount(e.getId(), optimizeBoardModelDOS)); // 大板开料数 - e.setCutGoodsCount(optimizeBoardModelDOS.stream() - .filter(f->Objects.equals(f.getPlanId(), e.getId())) - .mapToLong(m-> m.getCutedBoardInfo() == null ? 0 : m.getCutedBoardInfo().getCutedBoardNumber()) - .sum()); + e.setCutGoodsCount(getCutGoodsCount(e.getId(), optimizeBoardModelDOS)); // 小板优化数量 - e.setOptimizePlateCount(optimizeBoardModelDOS.stream() - .filter(f->Objects.equals(f.getPlanId(), e.getId())) - .mapToLong(m-> m.getPlaceBlockNumber() == null ? 0 : m.getPlaceBlockNumber()) - .sum()); + e.setOptimizePlateCount(getOptimizePlateCount(e.getId(), optimizeBoardModelDOS)); // 未优化小板数量 - e.setUnOptimizePlateCount(e.getPlateNum() - optimizeBoardModelDOS.stream() - .filter(f->Objects.equals(f.getPlanId(), e.getId())) - .mapToLong(m-> m.getPlaceBlockNumber() == null ? 0 : m.getPlaceBlockNumber()) - .sum()); + e.setUnOptimizePlateCount(e.getPlateNum() - e.getOptimizePlateCount()); // 生产单信息 - e.setOrderList(planOrderRespVOS.stream() - .filter( f-> Objects.equals(f.getPlanId(), e.getId())) - .collect(Collectors.toList())); + e.setOrderList(getOrderList(e.getId(), planOrderRespVOS)); }); + return planRespVOPageResult; } + @Override public PageResult getOrderPage(OrderPageReqVOCopy pageReqVO) { PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); @@ -633,10 +562,7 @@ public class PlanServiceImpl implements PlanService { .eq("o.organ_id",getUserOrganId()) .eq("o.deleted",false) .in("o.status",statusList) -// .eq("og.organ_id",getUserOrganId()) -// .eq("og.plan_id",0) -// .eq("og.deleted",false) -// .isNull("opi.item_id") + // todo 修改排单数据筛选,目前只解决了非混单的情况,混单情况待解决 .inIfPresent(FIELD_OG_ID,goodsIds) .inIfPresent("o.id",pageReqVO.getOrderIds()) @@ -668,7 +594,6 @@ public class PlanServiceImpl implements PlanService { queryWrapperX.likeIfPresent(FIELD_OP_FILTER_TYPE, insertSeparator(filterTypes)); - // todo 目前修改一半,速度无法再进行特别的优化,需等后面修改表结构再进行优化 IPage orderRespVOCopies = orderMapper.selectOrderPage(page,queryWrapperX); if (CollUtil.isEmpty(orderRespVOCopies.getRecords())) { @@ -741,8 +666,6 @@ public class PlanServiceImpl implements PlanService { queryWrapperX.likeIfPresent("a.filter_type", insertSeparator(filterTypes)); -// List platePages = plateMapper.selectGoodsPage(pageReqVO.getOrderIds(),getUserOrganId()/*, orderRespVOCopy.getGoodsId()*/); - List notPlanOrderPlateRespVOS = plateMapper.selectGoodsPage(queryWrapperX); // todo 目前数据筛选只考虑了非混单的情况,混单情况待解决 @@ -754,30 +677,6 @@ public class PlanServiceImpl implements PlanService { -// List filteredRecords = records.stream() -// .filter(record -> { -// List filteredPages = platePages.stream() -// .filter(f -> Objects.equals(f.getOrderId(), record.getOrderId())) -// .collect(Collectors.toList()); -// if (filteredPages.isEmpty()) { -// return false; // 移除该记录 -// } else { -// record.setPlatePages(filteredPages); -// return true; // 保留该记录 -// } -// }) -// .collect(Collectors.toList()); -// -// // 处理后的 filteredRecords 将不包含过滤后的数据为空的 record -// orderRespVOCopies.setRecords(filteredRecords); -// -//// orderRespVOCopies.setTotal(orderRespVOCopies.getRecords().size()); -// -// -// return new PageResult<>(orderRespVOCopies.getRecords(), orderRespVOCopies.getTotal()); - - - } @Override @@ -798,19 +697,6 @@ public class PlanServiceImpl implements PlanService { .groupBy(GoodsDO::getGoodsId, GoodsDO::getHeight, GoodsDO::getWidth, GoodsDO::getColor, GoodsDO::getGoodsName, GoodsDO::getThickness,GoodsDO::getSpec,GoodsDO::getMaterial,GoodsDO::getTexture)); - -// // 生产单对应的大板ID -// List goodIds = reqVO.getOrderIdList().stream().map(OrderIds::getId).toList(); -// -// // 查询板材库的大板信息 -// List notPlanGoodsRespVOS = goodsMapper.selectGoodsPlateList(plateGoodIds, getUserOrganId()); - - // 查询小板数量 -// List plateDOS = plateMapper.selectGoodsPlateNum(goodIds, getUserOrganId()); - - -// List notPlanGoodsRespVOS = BeanUtils.toBean(goodsDOS, NotPlanGoodsRespVO.class); - for (NotPlanGoodsRespVO notPlanGoodsRespVO : notPlanGoodsRespVOS) { notPlanGoodsRespVO.setOrderIdList(reqVO.getOrderIdList() .stream() @@ -837,11 +723,6 @@ public class PlanServiceImpl implements PlanService { statusList.add(OrderStatusEnum.IN_PRODUCTION.getStatus()); statusList.add(OrderStatusEnum.SORTED.getStatus()); -// List orderIds = orderMapper.selectOrderIdsList(pageReqVO, statusList, getUserOrganId()) -// .stream().map(OrderDO::getId).distinct().toList(); -// -// List goodsIds = plateMapper.selectPlateIds(pageReqVO, getUserOrganId()) -// .stream().map(PlateDO::getGoodsId).distinct().toList(); QueryWrapperX queryWrapperX = new QueryWrapperX<>(); @@ -849,9 +730,7 @@ public class PlanServiceImpl implements PlanService { .eq("o.organ_id",getUserOrganId()) .eq("o.deleted",false) .in("o.status",statusList) -// .eq("og.organ_id",getUserOrganId()) -// .eq("og.plan_id",0) -// .eq("og.deleted",false) + .inIfPresent("og.order_id", pageReqVO.getOrderIds()) .inIfPresent(FIELD_OG_ID, pageReqVO.getIds()) // todo 修改排单数据筛选,目前只解决了非混单的情况,混单情况待解决 @@ -901,11 +780,11 @@ public class PlanServiceImpl implements PlanService { List goodsResp = orderMapper.selectGoodsListByGoodsId(queryWrapperX); - for (OrderGoodsResp record : records) { + for (OrderGoodsResp vosRecords : records) { List orderIdsList = new ArrayList<>(); - List> list = goodsResp.stream().filter(f -> f.getGoodsId().equals(record.getGoodsId())).map(OrderGoodsResp::getOrderIds).toList(); + List> list = goodsResp.stream().filter(f -> f.getGoodsId().equals(vosRecords.getGoodsId())).map(OrderGoodsResp::getOrderIds).toList(); if(!list.isEmpty()){ @@ -913,7 +792,7 @@ public class PlanServiceImpl implements PlanService { } - record.setOrderIds(orderIdsList); + vosRecords.setOrderIds(orderIdsList); } @@ -986,8 +865,6 @@ public class PlanServiceImpl implements PlanService { PageDTO page = new PageDTO<>(vo.getPageNo(), vo.getPageSize()); -// IPage pageResult = plateMapper.selectPlateByPlanId(page, queryWrapperX); - IPage pageResult = goodsMapper.selectPlanGoodsListByPlanId(page, queryWrapperX); if (CollUtil.isEmpty(pageResult.getRecords())) { @@ -1069,7 +946,7 @@ public class PlanServiceImpl implements PlanService { List plateResLists = goodsMapper.selectPlateListByPlanId(planIds, getUserOrganId()); if(plateResLists.isEmpty()){ - return null; + return new ArrayList<>(); } Set bodyIds = plateResLists.stream().map(PlateResList::getBodyId).collect(Collectors.toSet()); @@ -1131,7 +1008,7 @@ public class PlanServiceImpl implements PlanService { SearchResponse search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class); List> hits = search.hits().hits(); if (CollUtil.isNotEmpty(hits)) { - return hits.stream().map(Hit::source).collect(Collectors.toList()); + return hits.stream().map(Hit::source).toList(); } return new ArrayList<>(); } catch (Exception e) { @@ -1169,9 +1046,9 @@ public class PlanServiceImpl implements PlanService { List planDOS = planMapper.selectBatchIds(ids); - for (PlanDO planDO : planDOS) { + AssertUtils.notEmpty(planDOS,PLAN_NOT_EXISTS); - AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); + for (PlanDO planDO : planDOS) { if ( planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) ) { throw exception(PLAN_NOT_ALLOW_DELETE,planDO.getId()); @@ -1182,4 +1059,63 @@ public class PlanServiceImpl implements PlanService { } + + + // 机台信息 + private String getMachineName(Long machineId, List machines) { + return machines.stream() + .filter(f -> Objects.equals(f.getId(), machineId)) + .map(CuttingRespDTO::getName) + .findAny() + .orElse(null); + } + + // 板材信息列表 + private List getPlateInfoList(Long planId, List infoVOList) { + return infoVOList.stream() + .filter(f -> Objects.equals(f.getPlanId(), planId)) + .toList(); + } + + // 小板总数量 + private long getPlateNum(Long planId, List infoVOList) { + return infoVOList.stream() + .filter(f -> Objects.equals(f.getPlanId(), planId)) + .mapToLong(PlateInfoVO::getCount) + .sum(); + } + + // 大板优化数量 + private long getOptimizeGoodsCount(Long planId, List optimizeBoardModelDos) { + return optimizeBoardModelDos.stream() + .filter(f -> Objects.equals(f.getPlanId(), planId)) + .mapToLong(OptimizeBoardModelDO::getBoardCount) + .sum(); + } + + // 大板开料数 + private long getCutGoodsCount(Long planId, List optimizeBoardModelDos) { + return optimizeBoardModelDos.stream() + .filter(f -> Objects.equals(f.getPlanId(), planId)) + .mapToLong(m -> m.getCutedBoardInfo() == null ? 0 : m.getCutedBoardInfo().getCutedBoardNumber()) + .sum(); + } + + // 小板优化数量 + private long getOptimizePlateCount(Long planId, List optimizeBoardModelDos) { + return optimizeBoardModelDos.stream() + .filter(f -> Objects.equals(f.getPlanId(), planId)) + .mapToLong(m -> m.getPlaceBlockNumber() == null ? 0 : m.getPlaceBlockNumber()) + .sum(); + } + + // 生产单信息 + private List getOrderList(Long planId, List planOrderRespVos) { + return planOrderRespVos.stream() + .filter(f -> Objects.equals(f.getPlanId(), planId)) + .toList(); + } + + + } \ 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/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 bd74c4910..4497f450f 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 @@ -337,14 +337,6 @@ public class PlateServiceImpl implements PlateService { public List createNewPlate(OptimizationSavePlateReqVO reqVO) { -// AssertUtils.notEmpty(reqVO.getRoomId(),ORDER_ROOM_ERROR); -// AssertUtils.notEmpty(reqVO.getBodyId(),ORDER_BODY_ERROR); -// AssertUtils.notEmpty(reqVO.getOrderId(),ORDER_ERROR); - -// if(reqVO.getMultiple() < 1 ){ -// throw exception(PLATE_MULTIPLE_ERROR); -// } - GoodsDO goodsDO = goodsMapper.selectGoodsId(reqVO.getOrderId(), reqVO.getGoodsId(), getUserOrganId()); AssertUtils.notEmpty(goodsDO,ORDER_PLAN_ERROR); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml index b54df913c..df9c9fee9 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml @@ -41,7 +41,7 @@ UPDATE order_goods - SET deleted = #{deleted},plan_id = 0 + SET deleted = true,plan_id = 0 WHERE organ_id = #{organId} and order_id = #{orderId} and id IN diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml index 322aeec16..e4b3e7fc4 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml @@ -77,7 +77,39 @@ AND organ_id = #{organId} + and order_id = #{orderId} + + + + UPDATE order_parts + SET deleted = true + WHERE + organ_id = #{organId} + and order_id = #{orderId} + and id IN + + #{partsId} + + + + + + UPDATE order_parts + SET deleted = false + WHERE + organ_id = #{organId} + and order_id = #{orderId} + and id IN + + #{partsId} + + + + + + + DELETE FROM order_parts WHERE id IN diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml index 63776c3a5..a00a998c2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml @@ -291,6 +291,31 @@ + + UPDATE order_plate + SET deleted = true,is_optimized = false + WHERE organ_id = #{organId} + and order_id = #{orderId} + and id IN + + #{plateId} + + + + + + UPDATE order_plate + SET deleted = false,is_optimized = false + WHERE organ_id = #{organId} + and order_id = #{orderId} + and id IN + + #{plateId} + + + + + DELETE FROM order_plate WHERE id IN @@ -426,17 +451,50 @@ SELECT distinct p.* FROM order_plate p - LEFT JOIN order_item i ON p.id = i.plate_id + LEFT JOIN order_item i ON p.organ_id = i.organ_id and p.order_id = i.order_id and p.id = i.plate_id WHERE i.organ_id = #{organId} AND i.order_id = #{orderId} AND p.deleted = #{deleted} - AND i.body_id IN #{roomIdItem} - + + + + + + +