Well, we probably need to see some test case/test data to comment with any kind of definite advice.
But *at a guess* I'm presuming you might be seeing something along the lines of:
App in Session 1
========
- Get me sales with status = 'READY TO PROCESS'
- Update status to 'IN PROGRESS'
- gets a list, starts work
- commit
Same App in Session 2 (doing parallel work)
========
- Get me sales with status = 'READY TO PROCESS'
- Update status to 'IN PROGRESS'
- gets a list, starts work
- commit
Even after session 1 updates the status to in progress, session 2 will *still* see those orders as 'ready to process' because the commit has not occurred. Thus you get duplicate processing and a mess.
Take a look here at
https://asktom.oracle.com/pls/apex/asktom.search?tag=select-for-update-skip-locked for potential solutions