Добрый день всем. В нашей админке есть форма для одобрения предоставления товаров на запрос клиентов по нажатию на кнопку "одобрить". После подтверждения данной формы - выбранный товар списывается с запасов из базы данных.
И возможно проблема банальная, но не знаю как решить. Дело в том, что если два менеджера в одно время одобряют одну заявку, то происходит двойное списание товара. То есть вместо одной единицы уходит два. То есть происходит два запроса вместо одного.
Как обычно решается данная проблема? Может нужна какая-то система блокировок, чтобы можно было блокировать второй одинаковый запрос?
Паралельный запрос на одно действие в crm
-
- Сообщения: 29
- Зарегистрирован: 2018.01.30, 11:04
- Контактная информация:
Re: Паралельный запрос на одно действие в crm
В заголовке заявки создавай поле approved (default value = false), потом внутри транзакции проверяешь это поле. Если false, то списываешь товар и устанавливаешь метку approved=true, commit и выход. Если true - то rollback и выход
- proctoleha
- Сообщения: 298
- Зарегистрирован: 2016.07.10, 19:00
Re: Паралельный запрос на одно действие в crm
Я не совсем понимаю, что значит в одно и тоже время. Запросы всегда дискретны. Не может быть такого, что в один и тот же момент времени, одновременно прилетело два запроса. Один из них будет всегда будет выполнен позже, или раньше.
Другое дело, что процесс списания, в данном случае, может занимать какое-то время. И тогда да - первый пользак нажал кнопку - полетел запрос о списании со склада. Результат обработки еще не получен, и в это время другой жмет кнопку - полетел второй запрос. Если это так, заведите поле со статусами обработки. Что-нибудь вроде: ожидает обработку (кнопка не нажата), обрабатывается (нажата), обработано
Если прилетит запрос, а статус обрабатывается, то, или ничего не делать, или выдать сообщение
Другое дело, что процесс списания, в данном случае, может занимать какое-то время. И тогда да - первый пользак нажал кнопку - полетел запрос о списании со склада. Результат обработки еще не получен, и в это время другой жмет кнопку - полетел второй запрос. Если это так, заведите поле со статусами обработки. Что-нибудь вроде: ожидает обработку (кнопка не нажата), обрабатывается (нажата), обработано
Если прилетит запрос, а статус обрабатывается, то, или ничего не делать, или выдать сообщение
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
-
- Сообщения: 29
- Зарегистрирован: 2018.01.30, 11:04
- Контактная информация:
Re: Паралельный запрос на одно действие в crm
Спасибо за ответы, проверю все описанные варианты