Рестарт сессии со сдвигом дат |
|
Скрипт позволяет сдвинуть даты интервала ограничения доступа на месяц вперед (если дата не нулевая), закрыть сессию, сбросив все счетчики и запустить новую для клиентов группы, у которых текущий баланс превышает заданное значение Cash. При этом остатки по предыдущей сессии переносятся в следующую. (Т.о. можно разрешить работу в следующем месяце, только клиентам, на счету которых находится сумма, превышающая значение Cash.) После выполнение скрипта состояние клиента остается прежним (каким оно было до выполнения скрипта). Для автоматизации скрипт запускается в конце каждого месяца.
Скрипт запускается из командной строки в каталоге scripts.
cscript.exe rstsess3d.vbs APIPassword GroupID Cash /sn:ServerName
APIPassword - пароль доступа.
GroupID - GUID или имя группы в пределах которой производится выполнение скрипта.
Cash - сумма, добавляемая к текущему балансу клиента (если требуется вычитание - параметр указывается со знаком минус).
ServerName - имя сервера - необязательный параметр - задается при запуске скрипта с удаленного компьютера.
Set Args = WScript.Arguments.Unnamed
If Args.Count <> 3 Then
WScript.Echo "??? usage: cscript.exe rstsess3d.vbs APIPassword GroupID Cash /sn:ServerName"
WScript.Quit
End If
APIPass = Args(0)
Obj = Args(1)
Cash = Args(2)
If WScript.Arguments.Named.Exists("sn") Then
ServName = WScript.Arguments.Named.Item("sn")
Set Srv = CreateObject("TrafInsp.TrafInspAdmin",ServName)
Else
Set Srv = CreateObject("TrafInsp.TrafInspAdmin")
End If
Srv.APILogon(APIPass)
UserList = Srv.ApiGetBillProp(3, Obj)
' Получили список клиентов группы
' Проверяем, что это таблица - двухмерный массив
If Not IsArray(UserList) Or Not IsArray(UserList(0)) Then
WScript.Echo "Нет данных"
WScript.Quit
End If
Dim ArAtr(1)
ArAtr(0) = 11 'User_Date1
ArAtr(1) = 12 'User_Date2
Dim ArAtrVal(2)
For I = 0 To UBound(UserList, 1)
User = UserList(I)
' Получили строку - описание пользователя
UserID = User(1)
UserState = Srv.APIGetUserState(UserID)
' Считываем текущее состояние сессии
OldState = UserState(4)
OldBall = UserState(19)
If OldBall >= (Cash*Sgn(Cash)) Then
UserAttr = Srv.APIGetAttr(3, UserID, ArAtr)
Date1s = UserAttr(0)
Date2e = UserAttr(1)
' Переводим пользователя в СТОП
Srv.APISetUserState UserID, -1, 0, "Script", "Очищаем сессию"
' Переводим сессию пользователя в состояние, которое было ранее
' Если надо всех обязательно запустить, то поправьте OldState на '2'
Srv.APISetUserState UserID, Cash+OldBall, OldState, "Script", "Запускаем сессию"
If Date1s <> "0:00:00" Then
D1Year = Int(Right(Date1s,4))
D1Month = Int(Mid(Date1s,4,2))
D1Month = D1Month +1
If D1Month = 13 Then
D1Year = D1Year + 1
D1Month = 1
End If
Date1s = "01." & Right("00" & D1Month,2) & "." & D1Year
End If
If Date2e <> "0:00:00" Then
D2Year = Int(Right(Date2e,4))
D2Month = Int(Mid(Date2e,4,2))
D2Month = D2Month +1
If D2Month = 13 Then
D2Year = D2Year + 1
D2Month = 1
End If
Date2e = "01." & Right("00" & D2Month,2) & "." & D2Year
End If
ArAtrVal(0) = CDate(Date1s)
ArAtrVal(1) = CDate(Date2e)
Srv.APISetAttr 3, UserID, ArAtr, ArAtrVal, True
WScript.Echo "Клиент " & User(0) & ": доступ " & ArAtrVal(0) & "|" & ArAtrVal(1) & ", на счету " & Cash+OldBall
End If
Next
Текущая страница справки: help.smart-soft.ru/index.html?apidemorst3d.htm