Your control logic does not make sense.
In loop() you will call rotate() four times and then stop calling it. In rotate you step the motor one position and check whether the total number of steps has reached 21481. (Of course it hasn't - it will never get past four.)
You need to decide whether you're going to have rotate move the stepper to the required position and return when the movement is completed, or call it repeatedly until the movement is completed (in which case you need to provide some way for loop() to determine when the movement is completed).
If this is all your sketch ever needs to do, then the simplest approach would be along these lines (pseudocode):
for(int shot = 0; shot < TotalShots; shot++)
{
for(int step = 0; step < StepsPerShot; step++)
{
stuff to make the stepper move one step
}
stuff to take a shot
}
while(true) {} // execution does not proceed past this point