Boolean Difference not working with joined mesh
Too close vertexes is not friendly for boolean to work properly:(
The key is to avoid too close vertexes. There are two methods below.

Use individual origins to shrink all cylinders a little bit, you'll get what you need.

You can also rearrange the topology of the base part, more or less subdivision.