Почему дублируется
Партнёр может скопировать файл повторно с тем же именем (по ошибке). Система видит новый файл и обрабатывает повторно, что ведёт к дублированию заказов.
Решение – идемпотентность на уровне файлов
Нужно хранить уже обработанные имена файлов и их даты модификации (или контрольные суммы). Например: таблица
processed_files с колонками filename, size, modified_time, processed_at. Перед обработкой проверять, есть ли уже запись с таким именем и размером. Если есть — пропустить.Дополнительно
Можно использовать
.done файл (пустышка), который партнёр создаёт после окончания записи, и система ждёт наличия .done.Или переименовывать обработки файл в
.processed и не сканировать «старые» имена.Почему не подходят другие
A (переименовывать) – но партнёр может положить файл заново уже с новым именем? Не решает глобально.
C (удалять) – плохо для аудита и отказоустойчивости.
D (ручная обработка) – не масштабируется.
Реальный кейс
В логистике дублирование файлов приводило к тому, что машина направлялась дважды. После внедрения таблицы
processed_files защита от дублей сработала.