Так что я застрял. Я работаю по кредитной системе с истечением срока. Похоже на мили кредитной карты, но не совсем. Кстати, я сожалею о книге в будущем, но мне нужно было добавить достаточно деталей, чтобы помочь получить полную картину.
Что мне нужно, так это система, в которой пользователь накапливает кредиты за выполнение действий. Но они также могут потратить эти кредиты на деятельность. Срок действия кредитов истекает через 30 дней, если они не используются. Кажется, я застрял на том, как точно рассчитать это в пакете, который будет работать каждую ночь. Буду очень признателен за любые идеи на любом языке, так как мне кажется, что я застрял на одной незначительной детали, которую я не могу обойти. Вот пример данных:
7/1: +5 - пользователь регистрируется
7/2: +5 - пользователь взаимодействует с системой
7/2: -3 - активность покупок пользователей
7/3: +5 - пользователь взаимодействует с системой
Таким образом, на данный момент пользователь получил 15 кредитов и потратил 3. Оставив ему всего 12 кредитов. (По крайней мере, я получил базовую математику: P)
Я должен добавить, что в настоящее время мы играем с идеей иметь два поля: последнее обработанное, затем обработанное. Итак, эти значения в это время при условии, что это была новая регистрация:
Дата последней обработки: 7/1
Дата следующего процесса: 8/1
Так что теперь 8/1 приходит. Пакет запускается и просматривает все кредиты, которые старше 30 дней. Который на данный момент равен 5.
Это то место, где оно начинает расплываться.
Затем система должна просмотреть все кредиты, потраченные за последние 30 дней, чтобы выяснить, используют ли они какие-либо кредиты. Потому что они должны только истечь, если они не были использованы. Таким образом, их 3. Итак, я вычитаю пользователю 2 кредита, потому что это разница между кредитами, заработанными старше 30 дней, и затраченными. Поэтому я заканчиваю партию и устанавливаю даты соответственно на следующий день. Теперь, предполагая, что они не потратили больше, я начинаю подсчет кредитов, заработанных старше 30 лет, что составляет 5, и потраченных кредитов, которые снова равны 3. Но я, очевидно, не хочу рассматривать 3 кредита, которые я рассматривал вчера. Что является хорошим подходом, чтобы не включать эти 3 кредита снова для рассмотрения.
Вот где я застрял.
Мы думаем о том, чтобы написать дебетовую запись для просроченных кредитов, чтобы мы могли отслеживать их, но с трудом представляли, как я могу использовать ее в этом расчете.
Если вы прочитали это далеко, спасибо. Если вы даже приложите некоторое усилие в ответе, я, как минимум, проголосую за усилия.
EDIT:
Хорошо, Грег упомянул кое-что, о чем я забыл обратиться. Идея поставить флаг на рассмотренные кредиты. Допустимая точка, но не та, которая может работать из-за следующего сценария:
Допустим, в определенный день пользователь тратит 10 кредитов. Но кредиты с истекшим сроком действия, которые партия рассматривает, только накопились до 5. Ну, у него все еще должно быть еще 5 кредитов, чтобы не истек срок действия, потому что он потратил больше, чем один срок действия. Таким образом, флаг не будет работать, потому что мы пропустили бы эти 5 дополнительных кредитов. Надеюсь, это имеет смысл?