diff --git a/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/query/LambdaQueryWrapperX.java b/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/query/LambdaQueryWrapperX.java index 134a2bf56..9dfae3de0 100644 --- a/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/query/LambdaQueryWrapperX.java +++ b/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/query/LambdaQueryWrapperX.java @@ -2,6 +2,7 @@ package com.cf.imes.framework.mybatis.core.query; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.cf.imes.framework.common.util.collection.ArrayUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; @@ -100,6 +101,11 @@ public class LambdaQueryWrapperX extends LambdaQueryWrapper { return betweenIfPresent(column, val1, val2); } + public LambdaQueryWrapperX selectX(SFunction... columns) { + super.doSelect(true, CollectionUtils.toList(columns)); + return this; + } + // ========== 重写父类方法,方便链式调用 ========== @Override diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java index b94b7e900..10851e737 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java @@ -103,17 +103,6 @@ public class PlanController { return success(planService.getPlanSortPage()); } - - @GetMapping("getPlanList") - @Operation(summary = "查询排单(未分页)") - @PreAuthorize("@ss.hasPermission('placeorder:query')") - public CommonResult> getPlanList() { - - return success(planService.getPlanList()); - } - - - @PutMapping("/setSort") @Operation(summary = "设置排单优先级") @PreAuthorize("@ss.hasPermission('placeorder:priority')") 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 a46cd6867..216c37553 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 @@ -322,10 +322,6 @@ public interface OrderMapper extends BaseMapperX { } - - List selectPlanOrderList(@Param("planIds") List planIds, @Param("organId") Long organId); - - IPage selectFilterOrderPagePlate(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper wrapper); List selectFilterOrderPlateList(@Param(Constants.WRAPPER) QueryWrapperX queryWrapperX); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java index c18753b6f..aca6954e1 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java @@ -20,6 +20,7 @@ import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Set; @@ -192,4 +193,12 @@ public interface PlanMapper extends BaseMapperX { * @return */ List selectTopTenBoardCountGroupByOptimizeTime(@Param("goodsCodes") List goodsCodes, @Param("req") OrderStatisticsReqVO reqVO); + + /** + * 批量删除排单 + * + * @param ids + * @return + */ + int physicalDeleteByIds(@Param("ids") Collection ids, @Param("organId") Long organId); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java index 26105bbb8..9a7a0489e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java @@ -13,6 +13,7 @@ import com.cf.imes.module.executor.dal.dataobject.plate.PlateDetailDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Collection; import java.util.List; /** @@ -72,8 +73,15 @@ public interface PlanItemMapper extends BaseMapperX { */ List selectPlanPlateDetailList(@Param("planId") Long planId, @Param("orderIds") List orderIds, @Param("organId") Long organId); - - List selectOrderPlanPlateList(@Param("planIds") List planIds, @Param("organId") Long organId); + /** + * 查询排单大板列表 + * + * @param planIds 排单id列表 + * @param orderIds 订单id列表 + * @param organId 组织id + * @return 排单小板列表 + */ + List selectOrderPlanGoodsList(@Param("planIds") List planIds, @Param("orderIds") Collection orderIds, @Param("organId") Long organId); List selectPlateListByPlanId(@Param("planId") Long planId, @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 3de3f3fd3..50c07a349 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 @@ -465,4 +465,13 @@ public interface PlateMapper extends BaseMapperX { * @return */ int physicalDeleteByOrderIds(@Param("ids") List ids); + + /** + * 查询订单下板件的排单id列表 + * + * @param orderIds + * @param customer + * @return + */ + List selectPlanIdsByOrderCondition(@Param("orderIds") List orderIds, @Param("customer") String customer, @Param("organId") Long organId); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java index 196acf39d..359f77626 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java @@ -62,8 +62,6 @@ public interface PlanService { */ List getPlanSortPage(); - List getPlanList(); - /** * 未排订单分页查询 * 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 616a8e8e9..f8a58147f 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 @@ -81,7 +81,6 @@ import static com.cf.imes.framework.common.util.json.JsonUtils.parseArray; import static com.cf.imes.framework.redis.constants.RedisKeyConstants.ORDER_PLAN_OPTIMIZE_KEY; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; -import static com.cf.imes.module.executor.enums.EsIndexEnum.*; /** * 订单开料排单 Service 实现类 @@ -290,7 +289,7 @@ public class PlanServiceImpl implements PlanService { }); // 删除排单信息,更新排单对应的余料板的排单ID为0 - planMapper.deleteByIds(planIds); + planMapper.physicalDeleteByIds(planIds, getUserOrganId()); remainPlateMapper.deletePlanRemainPlate(planIds, getUserOrganId()); @@ -384,6 +383,7 @@ public class PlanServiceImpl implements PlanService { @Override public PageResult getPlanPage(PlanPageReqVO pageReqVO) { + Long organId = getUserOrganId(); PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); @@ -398,17 +398,40 @@ public class PlanServiceImpl implements PlanService { QueryWrapperX queryWrapperX = new QueryWrapperX<>(); queryWrapperX - .eq("op.organ_id",getUserOrganId()) + .eq("op.organ_id", organId) .eq(FIELD_OP_DELETED,false) .eqIfPresent("op.is_scheduled",pageReqVO.getIsScheduled()) .eqIfPresent(FIELD_OP_ID, pageReqVO.getId()) .eqIfPresent("op.sort", pageReqVO.getSort()) .eqIfPresent("op.type", pageReqVO.getType()) .inIfPresent("op.status", pageReqVO.getStatus()) - .betweenIfPresent("op.plan_time", pageReqVO.getPlanTime()) - .likeIfPresent("op.order_nos", pageReqVO.getOrderNos()) - .likeIfPresent(FIELD_CUSTOMER, pageReqVO.getCustomer()); + .betweenIfPresent("op.plan_time", pageReqVO.getPlanTime()); + // 入参有订单号跟客户的时候,从订单表查,然后查订单下板件的排单号,然后做排单id去做分页 + if (StringUtils.isNotEmpty(pageReqVO.getOrderNos()) || StringUtils.isNotEmpty(pageReqVO.getCustomer())) { + LambdaQueryWrapperX orderQuery = new LambdaQueryWrapperX() + .eq(OrderDO::getOrganId, organId) + .eq(OrderDO::getDeleted, false) + .eqIfPresent(OrderDO::getId, pageReqVO.getOrderNos()) + .likeIfPresent(OrderDO::getCustomer, pageReqVO.getCustomer()) + .selectX(OrderDO::getId); + + List orderIds = orderMapper.selectList(orderQuery) + .stream().map(OrderDO::getId).toList(); + + if (CollUtil.isEmpty(orderIds)) { + return new PageResult<>(); + } + + List planIds = plateMapper.selectPlanIdsByOrderCondition(orderIds, pageReqVO.getCustomer(), organId); + + if (CollUtil.isEmpty(planIds)) { + return new PageResult<>(); + } + queryWrapperX.in(FIELD_OP_ID, planIds); + } + + // 分页查询 planDOPageResult = planMapper.selectPlanPageList(page,queryWrapperX); if (CollUtil.isEmpty(planDOPageResult.getRecords())) { @@ -427,6 +450,7 @@ public class PlanServiceImpl implements PlanService { .filter(p -> ObjectUtil.equals(PlanTypeEnum.MIXEDORDERPLAN.getType(), p.getType())) .toList(); + // 查询混单实际使用板材的信息 if (CollUtil.isNotEmpty(mixedPlans)) { List goodsIds = mixedPlans.stream() @@ -450,12 +474,24 @@ public class PlanServiceImpl implements PlanService { List planIds = records.stream().map(PlanDO::getId).toList(); + // 整理出所有排单涉及的订单 + Set orderIdSet = records.stream() + .map(PlanDO::getOrderNos) + .filter(StringUtils::isNotBlank) + .flatMap(orderNos -> JSON.parseArray(orderNos) + .toJavaList(Long.class) + .stream()) + .collect(Collectors.toCollection(LinkedHashSet::new)); - // 查询排单对应的大板板材信息以及 统计小板数量和面积 - List plateInfoVOS = planItemMapper.selectOrderPlanPlateList(planIds, getUserOrganId()); - // 获取排单对应的订单的信息 - List planOrderRespVOS = orderMapper.selectPlanOrderList(planIds, getUserOrganId()); + // 查询排单对应的大板板材信息 + List plateInfoVOS = planItemMapper.selectOrderPlanGoodsList(planIds, orderIdSet, organId); + + // 获取排单涉及的所有订单信息 + Map orderMap = CollUtil.isEmpty(orderIdSet) + ? Collections.emptyMap() + : orderMapper.selectByIds(orderIdSet).stream() + .collect(Collectors.toMap(OrderDO::getId, Function.identity())); List planRespVOPageResult = BeanUtils.toBean(records, PlanRespVO.class); @@ -469,7 +505,7 @@ public class PlanServiceImpl implements PlanService { // 未优化小板数量 e.setUnOptimizePlateCount(e.getPlateNum() - e.getOptimizedPlateNum()); // 订单信息 - e.setOrderList(getOrderList(e.getId(), planOrderRespVOS)); + e.setOrderList(getOrderList(e.getOrderNos(), orderMap)); }); @@ -481,59 +517,6 @@ public class PlanServiceImpl implements PlanService { return BeanUtil.copyToList(planMapper.selectPlanSortList(), PlanRespVO.class); } - @Override - public List getPlanList() { - - List status = Arrays.asList(PlanStatusEnum.NOCUTTING.getStatus(),PlanStatusEnum.OPENING.getStatus()); - - List planDOList = planMapper.selectPlanSortList(status, getUserOrganId()); - - if (CollUtil.isEmpty(planDOList)) { - return new ArrayList<>(); - } - - List planIds = planDOList.stream().map(PlanDO::getId).toList(); - - // 查询排单对应的大板板材信息 - List plateInfoVOS = goodsMapper.selectOrderGoodsPlateList(planIds, getUserOrganId()); - - - if(CollUtil.isNotEmpty(plateInfoVOS)) { - // 查询排单对应的小板数量和小板面积 - plateInfoVOS.forEach(m -> { - - m.setCount((int) m.getPlatePages().stream().map(PlatePage::getPlateId).count()); - - m.setArea(m.getPlatePages().stream().map(PlatePage::getArea).reduce(BigDecimal.ZERO, BigDecimal::add)); - m.setPlatePages(null); - - }); - } - - // 获取排单对应的订单的信息 - List planOrderRespVOS = orderMapper.selectPlanOrderList(planIds, getUserOrganId()); - - - List planRespVOList = BeanUtils.toBean(planDOList, PlanRespVO.class); - - - planRespVOList.forEach(e -> { - // 板材信息列表 - e.setPlateInfoList(getPlateInfoList(e.getId(), plateInfoVOS)); - // 小板总数量 - e.setPlateNum(getPlateNum(e.getId(), plateInfoVOS)); - // 未优化小板数量 - e.setUnOptimizePlateCount(e.getPlateNum() - e.getOptimizedPlateNum()); - // 订单信息 - e.setOrderList(getOrderList(e.getId(), planOrderRespVOS)); - }); - - - return planRespVOList; - - - } - @Override public PageResult getOrderPage(OrderPageReqVOCopy pageReqVO) { @@ -1184,10 +1167,18 @@ public class PlanServiceImpl implements PlanService { } // 订单信息 - private List getOrderList(Long planId, List planOrderRespVos) { - return planOrderRespVos.stream() - .filter(f -> Objects.equals(f.getPlanId(), planId)) - .toList(); + private List getOrderList(String orderNos, Map orderMap) { + List orderList = JSON.parseArray(orderNos).toJavaList(Long.class).stream() + .map(orderMap::get) + .filter(Objects::nonNull) + .sorted(Comparator.comparing(OrderDO::getId).reversed()) + .map(order -> { + PlanOrderRespVO vo = BeanUtils.toBean(order, PlanOrderRespVO.class); + vo.setSalesman(order.getSalesman()); + return vo; + }) + .collect(Collectors.toList()); + return orderList; } @@ -1276,7 +1267,7 @@ public class PlanServiceImpl implements PlanService { .stream().filter(m -> m.getCount() == 0).map(OrderPlanPlateStatisticsRespVO::getPlanId).distinct().collect(Collectors.toList()); if (CollUtil.isNotEmpty(deleteEmptyPlanIdList)) { - planMapper.deleteByIds(deleteEmptyPlanIdList); + planMapper.physicalDeleteByIds(deleteEmptyPlanIdList, getUserOrganId()); } // 更新排单下的订单列表 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml index 5504ac8b4..6dff9c445 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml @@ -489,35 +489,6 @@ - - - @@ -26,7 +23,6 @@ @@ -393,4 +389,11 @@ orderDate + + DELETE FROM order_plan WHERE id IN + + #{id} + + and organ_id = #{organId} + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml index 4c898401b..6dceb3484 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml @@ -183,7 +183,7 @@ - select distinct op.plan_id as planId, @@ -195,9 +195,13 @@ join order_goods og on op.organ_id = og.organ_id and op.goods_id = og.id where op.organ_id = #{organId} - and op.plan_id in - - #{planIds} + and op.order_id in + + #{orderId} + + and op.plan_id in + + #{planId} GROUP BY planId, 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 e02e05498..76be8c28f 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 @@ -1692,6 +1692,26 @@ + +