getOrderSource增加组件排单id、板件id列表、订单id列表

This commit is contained in:
gaoqr
2026-08-03 11:35:37 +08:00
parent 31b3c82317
commit 3fdaecf86a
7 changed files with 115 additions and 62 deletions
@@ -32,6 +32,15 @@ import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderSource { public class OrderSource {
@Schema(description = "组件生产系统来源订单 ID 列表")
private List<String> sourceOrderIds;
@Schema(description = "组件生产系统来源板件 ID 列表")
private List<String> sourceBlockItemList;
@Schema(description = "组件生产系统生产排单 ID")
private Long producingPlanOrderId;
@Schema(description = "优化后的大板数据") @Schema(description = "优化后的大板数据")
private List<OptimizeBoardModelDO> optimizeBoardModelDOS; private List<OptimizeBoardModelDO> optimizeBoardModelDOS;
@@ -22,7 +22,6 @@ import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 订单开料排单 Mapper * 订单开料排单 Mapper
@@ -142,22 +141,14 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
List<OrderGoodsResp> selectPlanGoodsList(@Param("planId") Long planId, @Param("organId") Long organId); List<OrderGoodsResp> selectPlanGoodsList(@Param("planId") Long planId, @Param("organId") Long organId);
/** /**
* 统计涉及移除小板的排单下还存在的排单数量 * 查询指定排单当前剩余的全部订单 ID。
* *
* @param planIds * @param planIds 排单 ID 列表
* @param organId * @param organId 组织 ID
* @return * @return 排单与剩余订单 ID 的对应关系列表
*/ */
List<OrderPlanPlateStatisticsRespVO> countDeletePlanPlate(@Param("planIds") List<Long> planIds, @Param("orderIds") Set<Long> orderIds, @Param("organId") Long organId); List<OrderPlanPlateStatisticsRespVO> selectPlanOrderIds(@Param("planIds") List<Long> planIds,
@Param("organId") Long organId);
/**
* 查询排单下订单id的列表
*
* @param planIds
* @param organId
* @return
*/
List<OrderPlanPlateStatisticsRespVO> selectPlanOrderIds(@Param("planIds") List<Long> planIds, @Param("orderIds") Set<Long> orderIds, @Param("organId") Long organId);
/** /**
* 查询排单+订单下订单材质orderGoodsId * 查询排单+订单下订单材质orderGoodsId
@@ -474,4 +474,26 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
* @return * @return
*/ */
List<Long> selectPlanIdsByOrderCondition(@Param("orderIds") List<Long> orderIds, @Param("customer") String customer, @Param("organId") Long organId); List<Long> selectPlanIdsByOrderCondition(@Param("orderIds") List<Long> orderIds, @Param("customer") String customer, @Param("organId") Long organId);
/**
* 查询订单下组件生产系统的来源板件 ID 列表。
*
* @param orderId 订单 ID
* @param organId 组织 ID
* @return 来源板件 ID 列表
*/
List<String> selectSourceBlockItemIdsByOrderId(@Param("orderId") Long orderId,
@Param("organId") Long organId);
/**
* 查询排单下组件生产系统的来源板件 ID 列表。
*
* @param orderIds 排单关联的订单 ID 列表,用于匹配 organ_id、order_id、plan_id 联合索引
* @param planId 排单 ID
* @param organId 组织 ID
* @return 来源板件 ID 列表
*/
List<String> selectSourceBlockItemIdsByPlanId(@Param("orderIds") List<Long> orderIds,
@Param("planId") Long planId,
@Param("organId") Long organId);
} }
@@ -303,6 +303,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// } // }
return OrderSource.builder() return OrderSource.builder()
.sourceOrderIds(collectSourceOrderIds(Collections.singletonList(orderDO)))
.sourceBlockItemList(normalizeSourceIds(
plateMapper.selectSourceBlockItemIdsByOrderId(orderId, getUserOrganId())))
.orderList(Collections.singletonList(orderDO)) .orderList(Collections.singletonList(orderDO))
.goodsList(goodsDOS) .goodsList(goodsDOS)
.plateList(BeanUtil.copyToList(plateDOS, PlateDetailRespVO.class)) .plateList(BeanUtil.copyToList(plateDOS, PlateDetailRespVO.class))
@@ -386,6 +389,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// } // }
return OrderSource.builder() return OrderSource.builder()
.sourceOrderIds(collectSourceOrderIds(orderDOS))
.sourceBlockItemList(normalizeSourceIds(
plateMapper.selectSourceBlockItemIdsByPlanId(orderIds, planId, getUserOrganId())))
.producingPlanOrderId(planDO.getProducingPlanOrderId())
.orderList(orderDOS) .orderList(orderDOS)
.plan(planDO) .plan(planDO)
.goodsList(goodsDOS) .goodsList(goodsDOS)
@@ -399,6 +406,28 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
.build(); .build();
} }
private List<String> collectSourceOrderIds(List<OrderDO> orders) {
if (CollUtil.isEmpty(orders)) {
return Collections.emptyList();
}
return normalizeSourceIds(orders.stream()
.filter(Objects::nonNull)
.map(OrderDO::getSourceOrderIds)
.filter(CollUtil::isNotEmpty)
.flatMap(Collection::stream)
.toList());
}
private List<String> normalizeSourceIds(List<String> sourceIds) {
if (CollUtil.isEmpty(sourceIds)) {
return Collections.emptyList();
}
return sourceIds.stream()
.filter(StringUtils::isNotBlank)
.distinct()
.toList();
}
// 保存优化后的数据 // 保存优化后的数据
@@ -1337,31 +1337,30 @@ public class PlanServiceImpl implements PlanService {
// 移除排单板件 & 重新计算订单和材质下的数量和面积 // 移除排单板件 & 重新计算订单和材质下的数量和面积
removePlanOrderAndGoodsPlate(plateDOS, deleteOrderIds); removePlanOrderAndGoodsPlate(plateDOS, deleteOrderIds);
// 删除已无排单板件的排单 // 查询受影响排单的全部剩余订单,同时用于重算订单列表和识别空排单
List<Long> deleteEmptyPlanIdList = planMapper.countDeletePlanPlate(deletePlanIds, deleteOrderIds, organId) List<OrderPlanPlateStatisticsRespVO> orderPlanOrderIdList =
.stream().filter(m -> m.getCount() == 0).map(OrderPlanPlateStatisticsRespVO::getPlanId).distinct().collect(Collectors.toList()); planMapper.selectPlanOrderIds(deletePlanIds, organId);
Map<Long, List<Long>> planIdToOrderIds = orderPlanOrderIdList.stream()
.collect(Collectors.groupingBy(
OrderPlanPlateStatisticsRespVO::getPlanId,
LinkedHashMap::new,
Collectors.mapping(OrderPlanPlateStatisticsRespVO::getOrderId,
Collectors.collectingAndThen(Collectors.toList(),
orderIds -> orderIds.stream().distinct().toList()))));
List<Long> deleteEmptyPlanIdList = deletePlanIds.stream()
.filter(planId -> !planIdToOrderIds.containsKey(planId))
.toList();
if (CollUtil.isNotEmpty(deleteEmptyPlanIdList)) { if (CollUtil.isNotEmpty(deleteEmptyPlanIdList)) {
planMapper.physicalDeleteByIds(deleteEmptyPlanIdList, getUserOrganId()); planMapper.physicalDeleteByIds(deleteEmptyPlanIdList, organId);
} }
// 更新排单下的订单列表 // 更新排单下的订单列表
List<OrderPlanPlateStatisticsRespVO> orderPlanOrderIdList = planMapper.selectPlanOrderIds(deletePlanIds, deleteOrderIds, organId);
if(CollUtil.isNotEmpty(orderPlanOrderIdList)){
Map<Long, List<Long>> planIdToOrderIds = orderPlanOrderIdList.stream()
.collect(Collectors.groupingBy(
row -> row.getPlanId(),
Collectors.mapping(OrderPlanPlateStatisticsRespVO::getOrderId, Collectors.toList())
));
for (Map.Entry<Long, List<Long>> entry : planIdToOrderIds.entrySet()) { for (Map.Entry<Long, List<Long>> entry : planIdToOrderIds.entrySet()) {
Long planId = entry.getKey();
String orderNos = entry.getValue().toString();
planMapper.update(new LambdaUpdateWrapper<PlanDO>() planMapper.update(new LambdaUpdateWrapper<PlanDO>()
.eq(PlanDO::getId, planId) .eq(PlanDO::getId, entry.getKey())
.eq(PlanDO::getOrganId, organId) .eq(PlanDO::getOrganId, organId)
.set(PlanDO::getOrderNos, orderNos)); .set(PlanDO::getOrderNos, entry.getValue().toString()));
}
} }
syncDeletedProducingPlanBlocks( syncDeletedProducingPlanBlocks(
deletePlans, sourceBlockIdsByPlanId, new HashSet<>(deleteEmptyPlanIdList)); deletePlans, sourceBlockIdsByPlanId, new HashSet<>(deleteEmptyPlanIdList));
@@ -272,25 +272,6 @@
and op.plan_id = #{planId}; and op.plan_id = #{planId};
</select> </select>
<select id="countDeletePlanPlate" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanPlateStatisticsRespVO">
select op.plan_id as planId,
count(op.id) as count
from order_plate op
where
op.organ_id = #{organId}
and op.plan_id != 0
and op.plan_id in
<foreach collection="planIds" item="planId" open="(" close=")" separator=",">
#{planId}
</foreach>
and op.order_id in
<foreach collection="orderIds" item="orderId" open="(" close=")" separator=",">
#{orderId}
</foreach>
and op.deleted = false
group by op.plan_id;
</select>
<select id="selectPlanOrderIds" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanPlateStatisticsRespVO"> <select id="selectPlanOrderIds" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanPlateStatisticsRespVO">
select distinct op.plan_id, op.order_id select distinct op.plan_id, op.order_id
from order_plate op from order_plate op
@@ -301,11 +282,8 @@
<foreach collection="planIds" item="planId" open="(" close=")" separator=","> <foreach collection="planIds" item="planId" open="(" close=")" separator=",">
#{planId} #{planId}
</foreach> </foreach>
and op.order_id in
<foreach collection="orderIds" item="orderId" open="(" close=")" separator=",">
#{orderId}
</foreach>
and op.deleted = false and op.deleted = false
order by op.plan_id, op.order_id
</select> </select>
<select id="selectPlanOrderGoodsId" resultType="java.lang.Long"> <select id="selectPlanOrderGoodsId" resultType="java.lang.Long">
@@ -1756,4 +1756,29 @@
<result property="multiSort" column="multiSort"/> <result property="multiSort" column="multiSort"/>
</resultMap> </resultMap>
<select id="selectSourceBlockItemIdsByOrderId" resultType="java.lang.String">
SELECT op.source_block_item_id
FROM order_plate op
WHERE op.organ_id = #{organId}
AND op.order_id = #{orderId}
AND op.deleted = false
AND op.source_block_item_id IS NOT NULL
AND op.source_block_item_id != ''
ORDER BY op.id
</select>
<select id="selectSourceBlockItemIdsByPlanId" resultType="java.lang.String">
SELECT op.source_block_item_id
FROM order_plate op
WHERE op.organ_id = #{organId}
AND op.order_id IN
<foreach collection="orderIds" item="orderId" open="(" close=")" separator=",">
#{orderId}
</foreach>
AND op.plan_id = #{planId}
AND op.deleted = false
AND op.source_block_item_id IS NOT NULL
AND op.source_block_item_id != ''
ORDER BY op.id
</select>
</mapper> </mapper>