kara писал(а):Ребят, а как можно спрогнозировать, кто завтра\послезавтра заблокируется по балансу(через снятие абонплаты)?

Теоретически, делаем выборку по расчетным периодам с окончанием текущая дата +3 дня, какие пользователи в выборку попадают и у кого сума на счету + сумма в кредите меньше стоимости его тарифа, запрос сходу не набросаю, надо ковырять базу, но видится как-то так. Делал для другого биллинга такой запрос, но там в базе можно без литра водки разобраться, а в сети с UTM5 в качестве биллинга пока такой задачи не стоит.
UPD. Я конечно не настоящий сварщик (наш ДБА в запое, пришлось вспомнить мускуль), но набросал запрос, который выдает юзеров, которым осталось менее 3х дней до расчетного периода при этом сумма баланса и кредита на счету меньше суммарной стоимости по всем услугам в сервисных связках, юзер не заблокирован и не удален как и сервисные связки. Сделал округляшку сумм в выводе и нормализатор телефонов, кривой, но кому надо подправит под себя
Код: Выделить всё
SELECT
u.id as User_ID,u.login,
REPLACE(TRIM(u.full_name), '\t', ''),
SUBSTRING(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(u.mobile_telephone,' ',''),'+',''),')',''),'(',''),'-',''), 1, 11) as MPhone,
a.id as Account_ID,
ROUND(a.balance,2),
a.credit,
atl.tariff_id,
SUM(psd.cost),
ROUND(a.balance+a.credit-SUM(psd.cost),2) as DIFF,
DATEDIFF(FROM_UNIXTIME(dp.end_date),NOW()) as DaysLeft
FROM
accounts a, users u, account_tariff_link atl, discount_periods dp, service_links sl, periodic_services_data psd
WHERE
u.basic_account=a.ID
AND atl.account_id=a.ID
AND atl.is_deleted=0
AND dp.id=atl.discount_period_id
AND a.id=atl.account_id
AND a.is_deleted=0
AND a.is_blocked=0
AND a.block_id=0
AND sl.account_id=a.ID
AND sl.is_deleted=0
AND psd.id=sl.service_id
AND psd.is_deleted=0
AND (DATEDIFF(FROM_UNIXTIME(dp.end_date),NOW()) between 0 and 3)
AND (dp.end_date - UNIX_TIMESTAMP()>0) GROUP BY u.id,u.login,u.full_name,a.id,a.balance,a.credit,atl.tariff_id
HAVING
(a.balance+a.credit)-SUM(psd.cost)<0;