Their battle line is stupid. Arrows are not indirect-fire weapons. Put them in place of the shieldmen with a line of regular infantry and have them fall back behind the troops when the enemy gets past the moat until the threat is repelled, then go out and shoot some more. The mages should be scattered behind the line, not in a single large block on one flank. Speaking of which, their flanks are effectively unprotected. Have the shieldmen protect the flanks with heavier magic support. Otherwise, even if the monsters aren't smart enough to go around, their sheer numbers will flow around the front and spill through the flanks.
Of course they could also use the damn giant wall and towers...