logoff | Дата: Суббота, 10.12.2011, 21:15 | Сообщение # 1 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| Скрипт отсылает команду по списку приборов. Code use bn -- база BN go -- Обявили переменные declare @device_code varchar(16); declare @CommandCode int; declare @Command nvarchar(500); declare @UserName nvarchar(500); declare @UserID int;
-- теперь значения и курсор declare cur cursor local for select d.code from sys_dev_device as d-- обявление курсора для выборки inner join FLEET_object as O on O.Device_ID=d.id where d.code in ('00051695','00056432','00045678') -- список приборов, куда надо послать команду --where O.ObjectGarNum in ('А132','А2223','А43555') -- закоментировано - снять коммент, если хотите использовать -- в качестве фильтра список гаражных номеров and D.deviceactive=1 and O.ObjectActive=1 -- доп фильтры на ТС и АТ and d.deviceactive=1 and o.objectactive=1
set @UserName='Админ' -- имя пользователя, от котого посылается команда set @CommandCode='10'; -- код команды, что вы хотите послать set @Command='23|MAX SPEED=70|'; -- содержимое команды, что вы хотите послать - смотрите примеры команд
set @UserID=(select id from sys_Users where name=@UserName); -- получим ид пользователя с указанным именем if (@UserID) is null begin print ('Пользователь не найден!'); return; end;-- провка на пользователя, что он есть --if not exists (select * from sys_dev_device where code=@device_code) begin print ('указан не верный номер прибора'); return; end; -- проверка на номер прибора
OPEN cur
FETCH NEXT FROM cur INTO @device_code -- нач значение цикла WHILE @@FETCH_STATUS = 0 -- условие цикла, пока есть чего из него получать BEGIN if not exists -- проверка на то, что есть что добавлять для прибора (select @UserID as UserID, d.code as dev_code,c.CmmandID as CommandTemplID,@Command as Command, o.ObjectID as ObjectID,0 as State from FLEET_Command as C inner join sys_dev_device as D on d.id=C.Device_id inner join fleet_object as o on o.device_id=C.Device_id where d.code=@device_code and c.CommandCode=@CommandCode) print ('для АТ: '+(@device_code)+' не найден датчик')
insert into FLEET_OutCome -- сама вставка данных в таблицу сообщений (UserID,dev_code,CommandTemplID,Command,ObjectID, state) -- по указанным полям select -- из запроса @UserID as UserID, d.code as dev_code,c.CmmandID as CommandTemplID,@Command as Command, o.ObjectID as ObjectID,0 as State from FLEET_Command as C -- из таблицы списка команд inner join sys_dev_device as D on d.id=C.Device_id -- и таблицы приборов inner join fleet_object as o on o.device_id=C.Device_id -- и таблицы ТС where d.code=@device_code and c.CommandCode=@CommandCode; -- где код прибора соотвествует выборке из курсора и команда тоже есть FETCH NEXT FROM cur INTO @device_code -- след инерация цикла end; go
где where d.code in ('00051695','00056432','00045678') список приборов
set @UserName='Админ' -- имя пользователя, от котого посылается команда set @CommandCode='10'; -- код команды, что вы хотите послать (10 - это консольная команда, 1 - интервал отбивки в движении и т.д. для M2M Cyber GLX) set @Command='23|MAX SPEED=70|'; -- содержимое команды, что вы хотите послать - смотрите примеры команд, в уже отправленных
|
|
| |
logoff | Дата: Вторник, 28.02.2012, 12:44 | Сообщение # 2 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| пример отправки по сгенерированному таблицей списку
Code use bn -- база BN go -- Обявили переменные declare @device_code varchar(16); declare @CommandCode int; declare @Command nvarchar(500); declare @UserName nvarchar(500); declare @UserID int;
-- теперь значения и курсор declare cur cursor local for select d.code from sys_dev_device as d-- обявление курсора для выборки inner join FLEET_object as O on O.Device_ID=d.id where d.code in ( select d.code --select org.ShortName,o.ObjectGarNum,d.code, --otpr.Command Command --,otpr.State --,proverka.Answer proverka --,cd.tele_time last_data from dbo.FLEET_Object as O inner join dbo.SYS_DEV_Device as D on d.id=o.Device_ID left join dbo.SYS_OrgRequisite as org on org.id=o.OrganizationId left join (select ou.dev_code, ou.ObjectID, ou.Command, ou.state from [BN].[dbo].[FLEET_OutCome] ou inner join (SELECT [dev_code] ,[ObjectID] ,MAX(idrec) idrec FROM [dbo].[FLEET_OutCome] where Command like '%cmd number=9616%' group by [dev_code] ,[ObjectID]) as otpravleno on otpravleno.idrec=ou.IDRec) as otpr on otpr.ObjectID=o.ObjectID and otpr.dev_code=d.code
left join (select ou.dev_code, ou.ObjectID, ou.Answer from [BN].[dbo].[FLEET_OutCome] ou inner join (SELECT [dev_code] ,[ObjectID] ,MAX(idrec) idrec FROM [dbo].[FLEET_OutCome] where Command like '%cmd number?%' group by [dev_code] ,[ObjectID]) as otpravleno on otpravleno.idrec=ou.IDRec) as proverka on proverka.ObjectID=o.ObjectID and proverka.dev_code=d.code left join dbo.SYS_DEV_CurrentData as CD on cd.ObjectID=o.ObjectID
where o.ObjectActive=1 --and Command is null -- фильтр по не отправленным командам and State=2 --order by org.ShortName,o.ObjectGarNum )
--('00051695','00056432','00045678') -- список приборов, куда надо послать команду --where O.ObjectGarNum in ('А132','А2223','А43555') -- закоментировано - снять коммент, если хотите использовать -- в качестве фильтра список гаражных номеров and D.deviceactive=1 and O.ObjectActive=1 -- доп фильтры на ТС и АТ and d.deviceactive=1 and o.objectactive=1
set @UserName='Админ' -- имя пользователя, от котого посылается команда set @CommandCode='10'; -- код команды, что вы хотите послать set @Command='23|cmd number?|'; -- содержимое команды, что вы хотите послать - смотрите примеры команд
set @UserID=(select id from sys_Users where name=@UserName); -- получим ид пользователя с указанным именем if (@UserID) is null begin print ('Пользователь не найден!'); return; end;-- провка на пользователя, что он есть --if not exists (select * from sys_dev_device where code=@device_code) begin print ('указан не верный номер прибора'); return; end; -- проверка на номер прибора
OPEN cur
FETCH NEXT FROM cur INTO @device_code -- нач значение цикла WHILE @@FETCH_STATUS = 0 -- условие цикла, пока есть чего из него получать BEGIN if not exists -- проверка на то, что есть что добавлять для прибора (select @UserID as UserID, d.code as dev_code,c.CmmandID as CommandTemplID,@Command as Command, o.ObjectID as ObjectID,0 as State from FLEET_Command as C inner join sys_dev_device as D on d.id=C.Device_id inner join fleet_object as o on o.device_id=C.Device_id where d.code=@device_code and c.CommandCode=@CommandCode) print ('для АТ: '+(@device_code)+' не найден датчик')
insert into FLEET_OutCome -- сама вставка данных в таблицу сообщений (UserID,dev_code,CommandTemplID,Command,ObjectID, state) -- по указанным полям select -- из запроса @UserID as UserID, d.code as dev_code,c.CmmandID as CommandTemplID,@Command as Command, o.ObjectID as ObjectID,0 as State from FLEET_Command as C -- из таблицы списка команд inner join sys_dev_device as D on d.id=C.Device_id -- и таблицы приборов inner join fleet_object as o on o.device_id=C.Device_id -- и таблицы ТС where d.code=@device_code and c.CommandCode=@CommandCode; -- где код прибора соотвествует выборке из курсора и команда тоже есть FETCH NEXT FROM cur INTO @device_code -- след инерация цикла end; go
использовалось совместно вот с этим скриптом
|
|
| |