Я пытаюсь найти хороший способ обработки повторяющихся событий в .NET, особенно для приложения ASP.NET MVC. Идея состоит в том, что пользователь может создать событие и указать, что событие может повторяться после определенного интервала (например, «каждые две недели», «один раз в месяц» и т. Д.).
Каков наилучший способ справиться с этим? Мой мозговой штурм сейчас состоит в том, чтобы иметь две таблицы: Job и RecurringJob. Задание является «основной» записью и содержит описание задания, а также ключ к тому, для какого клиента он предназначен, в то время как RecurringJob ссылается на задание и имеет дополнительную информацию о частоте возникновения (например, 1 для «один раз в месяц») а также временной интервал (например, «Еженедельно», «Ежемесячно»). Вопрос заключается в том, как определить и установить следующее вхождение задания, поскольку это должно выполняться регулярно. Я видел две последовательности мыслей с этим: эта логика должна либо храниться в столбце базы данных и периодически обновляться, либо рассчитываться на лету в коде.
Есть какие-нибудь мысли или предложения по решению этой проблемы?
Редактировать: это веб-приложение на основе подписки, которое я создаю, чтобы сервисные предприятия могли легко планировать свои обычные повторяющиеся задания и отслеживать своих клиентов. Таким образом, типичное использование может заключаться в том, чтобы создать для г-на Смита задание «подстригать газон», которое происходит каждый месяц. Точная дата не важна - это возможность для клиента видеть, что г-н Смит подрезает свой газон каждый месяц и следить за ним об этом.
Позвольте мне перефразировать вышесказанное, чтобы лучше передать мою идею. Пример использования приложения может быть следующим:
- Пользователь открывает запись о клиенте для Джона Смита и щелкает ссылку Добавить работу .
- Пользователь заполняет форму для создания задания с именем «Срезать газон», дата начала которого 15.11.2009 г., и устанавливает флажок, указывающий, что это задание происходит постоянно. Пользователю предоставляется дополнительный экран, запрашивающий частоту выполнения задания. Пользователь указывает (еще не решил, как на данный момент - допустим, выберите списки), что задание выполняется раз в месяц.
- Пользователь нажимает сохранить.
Теперь, когда пользователь просматривает запись для Джона Смита, он видит, что у него есть задание «Срезать газон», которое происходит каждый месяц, начиная с 15.11.2009. На главной панели инструментов, когда за неделю до предполагаемой даты начала, пользователь видит задание, отображаемое с помощью индикатора, такого как «15.12.2009 - Срезанный газон (Джон Смит)». За неделю до назначенной даты кто-то из компании звонит ему по расписанию, и он говорит, что его не будет в городе до 1 января 2010 года, поэтому он хочет перенести свое назначение на эту дату. Наш пользователь может изменить дату для задания на 1/1/2010, и теперь повторение начнется через месяц после этой даты (например, в следующий раз будет 01.02.2010). Идея заключается в том, что приложение предназначено для таких компаний, как уход за газонами, сантехники, чистящие средства для ковров и т. П., Где точная дата не так важна (поскольку она может меняться и будет меняться, когда люди заняты), главное - дать бизнес показатель того, что ежемесячное обслуживание мистера Смита подходит к концу, и кто-то должен позвонить ему, чтобы определить, когда именно это может быть запланировано. По сути, дайте этим предприятиям возможность отслеживать повторные сделки и узнайте, когда пришло время связаться с клиентом.