yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/task/MesWmStockTakingTaskLineMapper.java
@@ -33,11 +33,19 @@
                .orderByAsc(MesWmStockTakingTaskLineDO::getId));
    }
    /**
     * 按 任务 + 物料 + 库位 查询盘点清单行
     *
     * 同一物料在同一库位可能因批次/供应商不同存在多行,此时取最早生成的一行,
     * 避免 selectOne 因多行直接抛异常(用户未选择盘点清单时走该兜底逻辑)。
     */
    default MesWmStockTakingTaskLineDO selectByTaskIdAndItemIdAndAreaId(Long taskId, Long itemId, Long areaId) {
        return selectOne(new LambdaQueryWrapperX<MesWmStockTakingTaskLineDO>()
        List<MesWmStockTakingTaskLineDO> list = selectList(new LambdaQueryWrapperX<MesWmStockTakingTaskLineDO>()
                .eq(MesWmStockTakingTaskLineDO::getTaskId, taskId)
                .eq(MesWmStockTakingTaskLineDO::getItemId, itemId)
                .eqIfPresent(MesWmStockTakingTaskLineDO::getAreaId, areaId));
                .eqIfPresent(MesWmStockTakingTaskLineDO::getAreaId, areaId)
                .orderByAsc(MesWmStockTakingTaskLineDO::getId));
        return list.isEmpty() ? null : list.get(0);
    }
}