Биллинговая система Nodeny
28 Марта 2024, 14:14:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Честные услуги  (Прочитано 3460 раз)
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« : 14 Апреля 2019, 17:05:13 »

Сделал модуль "честные услуги". Как работает:

в момент блокировки учетной записи запоминается сколько времени сталось до завершения услуги. В момент переключения в разблокированное состояние время завершения устанавливается текущее время + остаток на момент блокировки.

Мне кажется, эта фича станет основной по решению проблемы ухода в минус вместо всяких заморозок и т.д. Я даже назвал "честным" такой модуль, потому что с стороны клиента не должно возникать никаких претензий. Объясню на примерах:

1) У абона 10 грн на счету, завершается тариф и подключается новый, стоимостью 100 грн. На счету -90 грн. Учетка блокируется. Модуль "честных услуг" запоминает, что до конца действия тарифа (допустим) 30 дней. Через 5 дней абон пополняет счет и длительность услуги устанавливается +30 дней от момента пополнения

Допустим дальше:

2) через 3 дня со счета абона списали 50 грн за вызов мастера. Счет в минусе - клиент блокируется. Модуль "честных услуг" запоминает, что до конца действия тарифа 27 дней (3 из 30 он отработал). Клиент пополняет счет через 10 дней и получает + 27 дней

Допустим дальше:

3) Наступил новый месяц. Счет снова в минусе. Модуль "честных услуг" запоминает, что до конца действия тарифа 30 дней. Клиент 1 день тупит и берет кредит на 2 дня. Через 2 дня кредит анулируется, учетка блокируется и модуль запоминает 28 дней. Абон уезжает в Польшу на несколько месяцев, счет в минусе. Все это время услуга не завершалась. Приезжает, пополняет счет и пользуется 28 дней


Модуль готов, сейчас его тестирую
Записан
skreep
Пользователь
**

Карма: 2
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #1 : 15 Апреля 2019, 13:18:10 »

Доброго дня!!!

 Як даний модуль буде взаємодіяти з тарифами де активовано "короткі послуги", абонплата за добу?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #2 : 15 Апреля 2019, 17:51:51 »

На всякий случай повторю: фича "честных услуг" может активироваться для конкретной услуги. С короткими услугами не должна конфликтовать т.к все, что она делает - меняет длительность уже подключенной услуги. Короткие услуги ориентируются на баланс и если он меньше стоимости услуги, подключает услугу на другой период и другую стоимость. Дальше модуль кротких услуг никак не влияет на уже подключенный тариф. А вот "честные услуги" влияют, а именно на длительность
Записан
tima
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 5


Просмотр профиля
« Ответ #3 : 28 Мая 2020, 17:33:23 »

День добрый! После установки модуля честных услуг, при попытке ручного изменения поля «Заблокирован» получаю ошибку:
Код:
The target table v_fair_services of the UPDATE is not updatable
{
  'param' => [
    'off',
    14
  ],
  'sql' => 'UPDATE users SET state=?, modify_time=UNIX_TIMESTAMP() WHERE id=? LIMIT 1'
};
 UPDATE users SET state='off', modify_time=UNIX_TIMESTAMP() WHERE id='14' LIMIT 1
Подскажите, плиз, куда смотреть. Заранее благодарен.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #4 : 28 Мая 2020, 21:24:22 »

какая версия mysql у тебя?
Записан
tima
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 5


Просмотр профиля
« Ответ #5 : 28 Мая 2020, 21:52:36 »

Код:
mysql  Ver 14.14 Distrib 5.7.30, for FreeBSD12.1 (amd64) using  EditLine wrapper
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #6 : 29 Мая 2020, 12:06:40 »

Да, огорчает mysql. В новых версиях не умеет делать то, что умел в старых. Придется переписать апдейт VIEW на апдейт с JOIN. Выполни:

Код:
DROP TRIGGER IF EXISTS `tr_fair_service`;

DELIMITER $$
CREATE TRIGGER tr_fair_service AFTER UPDATE ON users
    FOR EACH ROW
    IF OLD.state='on' AND NEW.state='off' THEN
            UPDATE
                users_services u LEFT JOIN services s ON u.service_id = s.service_id
            SET fair_stop=UNIX_TIMESTAMP(), fair_end=tm_end-UNIX_TIMESTAMP(), tm_end=0
                WHERE s.fair=1 AND uid=OLD.id AND tm_end > (UNIX_TIMESTAMP() + 5);
    ELSE
        IF OLD.state='off' AND NEW.state='on' THEN
            UPDATE
                users_services u LEFT JOIN services s ON u.service_id = s.service_id
            SET tm_end=UNIX_TIMESTAMP()+fair_end, fair_end=0
                WHERE s.fair=1 AND uid=OLD.id AND fair_end > 0;
        END IF;
    END IF;
$$
DELIMITER ;


DROP TRIGGER IF EXISTS `tr_fair_service_insert`;

DELIMITER $$
CREATE TRIGGER tr_fair_service_insert AFTER INSERT ON users_services
    FOR EACH ROW
    IF (SELECT 1 FROM services WHERE service_id=NEW.service_id AND fair=1) AND
       (SELECT 1 FROM users WHERE id=NEW.uid AND state='off')
    THEN
        UPDATE
            users_services u LEFT JOIN services s ON u.service_id = s.service_id
        SET fair_stop=UNIX_TIMESTAMP(), fair_end=tm_end-UNIX_TIMESTAMP(), tm_end=0
            WHERE id=NEW.id AND tm_end > 0 AND (tm_end - UNIX_TIMESTAMP()) > 5;
    END IF;
$$
DELIMITER ;
Записан
tima
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 5


Просмотр профиля
« Ответ #7 : 29 Мая 2020, 16:19:11 »

Спасибо! Помогло )
Пока проверяю работу модуля, нашел особенность  - при подключении честной услуги заблокированному абоненту (не зависимо от состояния баланса) – не отображается в списке подключенных услуг, но при этом снимает деньги с баланса, отображая это в «Истории».
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!