То есть от дубля кода мне никуда не деться?
Нет не правильно. Дублирование это зло. В один момент вы можете забыть, что у вас покупка в двух местах. В одном поправите - во втором забудете. 

Вам нужно создать какой-то сервис куда вы сможете вынести эту логику. Например OrderService. В нем будут методы купить и продать. Этот сервис вы подключаете в контроллер. И из контроллера вызываете. В итоге у вас может быть кучу контроллеров и действий, которые работают с одним сервисом.
Вынести ознакомление за контроллер продаж и покупок.
Либо, сделать права доступа на экшены. 
Чтобы на экшен ознакомление был доступ у всех