云
9 小时以前 02a1ae81eba7b48223052fb833859f0a65dd7d21
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/bagcode/MesProBagCodeMapper.java
@@ -260,11 +260,33 @@
                .orderByAsc(MesProBagCodeDO::getId));
    }
    default List<MesProBagCodeDO> selectUnboundPalletlessList() {
        return selectList(new LambdaQueryWrapperX<MesProBagCodeDO>()
                .isNull(MesProBagCodeDO::getBatchId)
                .isNull(MesProBagCodeDO::getPalletId)
                .in(MesProBagCodeDO::getStatus, MesProBagCodeStatusEnum.GENERATED.getStatus(),
                        MesProBagCodeStatusEnum.PRINTED.getStatus())
                .isNotNull(MesProBagCodeDO::getItemId)
                .orderByAsc(MesProBagCodeDO::getId));
    }
    /** 批次内有效袋码的品种编号集合(忽略历史空品种袋码),用于录入批次时的品种一致性校验 */
    @Select("SELECT DISTINCT item_id FROM mes_pro_bag_code " +
            "WHERE deleted = 0 AND status <> 30 AND batch_id = #{batchId} AND item_id IS NOT NULL")
    List<Long> selectDistinctItemIdsByBatchId(@Param("batchId") Long batchId);
    /**
     * 物理删除生成组下的一批袋码(仅用于生成失败/取消后的半成品清理)
     * <p>
     * 半成品从未对外展示,逻辑删除只会留下几十万条垃圾并占用索引空间,因此这里直接物理删除。
     *
     * @param uuid  生成组 UUID
     * @param limit 单次最多删除行数
     * @return 实际删除行数
     */
    @org.apache.ibatis.annotations.Delete("DELETE FROM mes_pro_bag_code WHERE uuid = #{uuid} LIMIT #{limit}")
    int deletePhysicallyByUuidChunk(@Param("uuid") String uuid, @Param("limit") int limit);
    default List<MesProBagCodeDO> selectListByIdsForUpdate(Collection<Long> ids) {
        return selectList(new LambdaQueryWrapperX<MesProBagCodeDO>()
                .in(MesProBagCodeDO::getId, ids)