powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Бонусная программа со сгораемыми бонусами
12 сообщений из 12, страница 1 из 1
Бонусная программа со сгораемыми бонусами
    #39697671
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Планирую бонусную программу.
Бонусы могут зачисляться на постоянной основе, либо временно — то есть начисленные бонусы должны быть использованы в течении определенного срока, по истечению которого они сгорают, если не были использованы.
Разумеется, в конкретный момент времени на бонусном счету может находится несколько бонусов с разным сроком действия.

Бонусы можно делать транзакционными — то есть отдельно учитывать каждое поступление, у которого может быть задан срок действия (дата начала и дата окончания), а текущий остаток бонусов получать суммированием действующих поступления на определенный момент времени.
Но это сложно и дорого в реализации.

Возникла мысль упростить учет бонусов.
Например зачисляется 100 бонусов со сроком действия 100 суток.
1. Обновляется баланс бонусного счета: update bonus set amount=amount+100 where bonus_id=1
2. Во вспомогательную таблицу добавляется запись со сроком окончания бонуса: insert into clearing (date, amount, bonus_id) values (sysdate+100, 100, 1)
3. В БД добавляется ежедневное задание, которое проверяет даты в таблице clearing и для наступивших строк уменьшает значение баланса бонусного счета.

Но тут сложность в том, как правильно учитывать факт использования бонуса (и удаления его из таблицы clearing).
Хотелось бы убедиться, что я ничего не упустил:
1. Используется 150 бонусов. QTY=150
2. Обновляю баланс бонусного счета: update bonus set amount=amount-QTY where bonus_id=1
3. Получаю список временных зачислений, отсортированных по дате: select * from clearing where bonus_id=1 and date>sysdate order by date
4a. Если в первой строке amount>QTY, то для этой строки уменьшаю amount на QTY.
4b. Если в первой строке amount<=QTY, то удаляю это строчку и уменьшаю QTY=QTY-amount, после чего повторяю с пункта 4a.

Все верно?
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39697752
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно что-то типа партионного учета.
Есть список бонусов с разными датами и текущий остаток каждого из них.
По мере их расходования по FIFO - удалять или куда-то архивировать для истории.
Но это сложно и дорого в реализацииЧто за чушь ? Это самый правильный метод.
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39697760
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO

Тут важен приоритет использования бонусов.

Например, положил 100 несгорающих на счет, пришло еще 100 бонусных. со сроком использования 100 дней, на следующий день потратил 180 бонусов осталось 20?

Какие остались? Сгорающие или нормальные? Резонно считать, что человек в первую очередь тратил сгорающие

Еще через день доложил еще 40 несгорающих. Получилось на счете 60.... прошло еще 98 дней (100 дней с момента акции)...

Счет обнулять надо или нет?
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39697815
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevКакие остались? Сгорающие или нормальные? Резонно считать, что человек в первую очередь тратил сгорающие
В первую очередь тратятся бонусы с ближайшей датой (order by date).
Поэтому несгораемые будут использоваться только если сгораемых более не осталось.

Leonid KudryavtsevЕще через день доложил еще 40 несгорающих. Получилось на счете 60.... прошло еще 98 дней (100 дней с момента акции)...
В приведенном примере 20 оставшихся — это несгораемые, к которым добавляется еще 40.
То есть на счете 60 бонусов без ограничения срока действия.
Те бонусы, у которых срок использования был 100 дней, уже полностью потрачены, про них можно забыть.
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39697824
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoЭто самый правильный метод.
Во втором варианте запросы и реализация гораздо проще, транзакционный (партионный) учет.
Единственный существенный недостаток — в этом варианте довольно сложно получить баланс счета на произвольный момент времени в прошлом. Но я не могу придумать, зачем в бонусной программе ретроспектива баланса.
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39698038
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Все верно?
Ну как сказать... Вы сначала называете некий механизм сложным и дорогим, а потом описываете ровно его, только с дополнительной лишней финтифлюшкой.
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39698059
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы не сказал.
1 вариант: полноценный учёт каждого начисления (партии). Баланс вычисляется суммированием действующих начислений.
2 вариант: таблица балансов, непосредственно изменяемая при начислении и вспомогательная таблица с датами для сгорания бонусов.
На мой взгляд совершенно разные подходы, второй не даёт полноценного учёта на произвольный момент, зато проще и удобнее в использовании.
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39698216
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Бонусы можно делать транзакционными — то есть отдельно учитывать каждое поступление, у которого может быть задан срок действия (дата начала и дата окончания), а текущий остаток бонусов получать суммированием действующих поступления на определенный момент времени.
Но это сложно и дорого в реализации.

Возникла мысль упростить учет бонусов.
.....


Ничего себе упростил ) ИМХО -шкурка выделки не стоит.
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39698222
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно хранить все начисления бонусов придется. Хотя бы для разборок.
Что мешает в них хранить еще и остаток и приоритетность исчерпания ?
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39698241
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoВсе равно хранить все начисления бонусов придется.
А, понял.
Ну в этом смысле да, в реальной системе журнал по учету бонусов (начислению/списанию) вестись будет.
Но он будет вестись именно для истории и разбора полетов.
Под разницей в подходах я имел ввиду то, что в первом варианте текущий баланс не хранится (он всегда вычисляется), а во втором варианте он именно что хранится в таблице, что сильно упрощает работу с ним.
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39698495
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Под разницей в подходах я имел ввиду то, что в первом варианте текущий баланс не хранится (он всегда вычисляется), а во втором варианте он именно что хранится в таблице, что сильно упрощает работу с ним.
Что тут такого страшного в хранении исходных данных по бонусами и вычислении баланса на лету? Почему считаете что куцее решение , которое хранит баланс с какой то дискретностью (если конечно этого достаточно для задачи, то не проблема), но кроме того надо сильно заморочиться с вычитанием из этого баланса использованных баллов. Ничуть не проще, а я бы даже сказал сложнее и заморочнее.
Расскажите вообще почему такая постановка задачи возникла? В чем истинные проблемы?
...
Рейтинг: 0 / 0
Бонусная программа со сгораемыми бонусами
    #39698638
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergueiЧто тут такого страшного в хранении исходных данных по бонусами и вычислении баланса на лету?
Клиентов, бонусов и начислений будет много. Скажем, порядка 1кк записей в год.
И на мой взгляд select bonus_id, amount from bonus всегда будет быстрее и лучше, чем select bonus_id, sum(amount) from charges where sysdate between sdate and edate group by bonus_id.
При втором подходе вычитать бонусы (списывать) нужно будет раз в сутки и алгоритм достаточно прозрачный.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Бонусная программа со сгораемыми бонусами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]