Consolidated Statements of Income - USD ($) shares in Thousands, $ in Thousands |
12 Months Ended | ||
|---|---|---|---|
Dec. 31, 2020 |
Dec. 31, 2019 |
Dec. 31, 2018 |
|
| Income Statement [Abstract] | |||
| Revenue | $ 1,395,529 | $ 1,382,525 | $ 1,279,036 |
| Cost of revenue | 1,271,375 | 1,254,560 | 1,164,609 |
| Selling, general and administrative expenses | 80,679 | 78,316 | 66,372 |
| Operating income | 43,475 | 49,649 | 48,055 |
| Interest expense, net | (4,793) | (6,470) | (5,071) |
| Income from operations before income taxes | 38,682 | 43,179 | 42,984 |
| Income tax expense | 1,731 | 10,003 | 7,898 |
| Net income | $ 36,951 | $ 33,176 | $ 35,086 |
| Earnings per share | |||
| Basic (in dollars per share) | $ 3.19 | $ 2.90 | $ 3.13 |
| Diluted (in dollars per share) | $ 3.14 | $ 2.86 | $ 3.08 |
| Weighted average common shares outstanding - basic (in shares) | 11,599 | 11,444 | 11,224 |
| Weighted average common shares outstanding - diluted (in shares) | 11,751 | 11,612 | 11,378 |