Condensed Consolidated Statements of Income (Unaudited) - USD ($) shares in Thousands, $ in Thousands |
3 Months Ended | 6 Months Ended | ||
|---|---|---|---|---|
Jun. 28, 2019 |
Jun. 29, 2018 |
Jun. 28, 2019 |
Jun. 29, 2018 |
|
| Income Statement [Abstract] | ||||
| Revenue | $ 331,589 | $ 321,132 | $ 657,517 | $ 641,649 |
| Cost of revenue | 300,553 | 292,064 | 596,149 | 586,114 |
| Selling, general and administrative expenses | 19,843 | 16,070 | 39,762 | 33,865 |
| Operating income | 11,193 | 12,998 | 21,606 | 21,670 |
| Interest expense, net | (1,329) | (1,140) | (2,904) | (2,305) |
| Income from operations before income taxes | 9,864 | 11,858 | 18,702 | 19,365 |
| Income tax expense | 2,247 | 2,663 | 3,994 | 4,058 |
| Net income | $ 7,617 | $ 9,195 | $ 14,708 | $ 15,307 |
| Earnings per share | ||||
| Basic (in dollars per share) | $ 0.66 | $ 0.82 | $ 1.29 | $ 1.37 |
| Diluted (in dollars per share) | $ 0.66 | $ 0.81 | $ 1.28 | $ 1.35 |
| Weighted average common shares outstanding - basic (in shares) | 11,455 | 11,235 | 11,376 | 11,191 |
| Diluted weighted average common shares outstanding - diluted (in shares) | 11,605 | 11,383 | 11,512 | 11,351 |