wp_nav_menu add class to child item with sub child

I have not tested this but it looks like you aren’t testing for $depth the way you need to be.

This block:

$classes[] = ($args->walker->has_children) ? 'dropdown' : '';
$classes[] = ($item->current || $item->current_item_anchestor) ? 'active' : '';
$classes[] = 'menu-item-' . $item->ID;
if( $depth && $args->walker->has_children ){
    $classes[] = 'dropdown-submenu';
}

Should be something like:

if ($args->walker->has_children) {
  if (0 === $depth) {
    $classes[] = 'dropdown';
  } else {
    $classes[] = 'dropdown-submenu';
  }
} 
$classes[] = ($item->current || $item->current_item_anchestor) ? 'active' : '';
$classes[] = 'menu-item-' . $item->ID;