如何在节点js包装器中使用会话令牌重复调用GEOTAB apis?

时间:2016-06-21 09:27:56

标签: node.js

我正在使用GEOTAB apis将车辆数据同步到我的数据库。在我的软件中,用户可以注册并添加geotab帐户以进行同步。我已经使用了节点js wrapper.With 3分钟延迟此过程调用定期

我收到错误"超出全球登录限制"

              var syncUsers = function () {
          var i;
          async.forEach(geotabUsers, function (geoUser, callback) {
            //get index 
            i = geotabUsers.indexOf(geoUser);
            if (apiInstanse[geotabUsers[i].userId] === undefined)
            {
              apiInstanse[geotabUsers[i].userId] = new API(geotabUsers[i].apiUsername, geotabUsers[i].apiPassword, geotabUsers[i].apiDatabase, js_lang.GEOTAB_SERVER);
            }
        //sync status data
            syncStatusData(apiInstanse[geotabUsers[i].userId], i, userInfo[geotabUsers[i].userId].statusDataFromVersion, geotabUsers[i].userId, userInfo[geotabUsers[i].userId].currentCompany, geotabUsers[i].apiUsername, geotabUsers[i].apiPassword, geotabUsers[i].apiDatabase, userInfo[geotabUsers[i].userId].currentPressureUnit, userInfo[geotabUsers[i].userId].currentDateFormat, userInfo[geotabUsers[i].userId].currentTimeFormat, userInfo[geotabUsers[i].userId].currentTemperatureUnit);

            //sync fault data
               syncFaultData(apiInstanse[geotabUsers[i].userId], i, userInfo[geotabUsers[i].userId].faultDataFromVersion, geotabUsers[i].userId, userInfo[geotabUsers[i].userId].currentCompany, geotabUsers[i].apiUsername, geotabUsers[i].apiPassword, geotabUsers[i].apiDatabase,function(){
                 callback();
               });

          },function(err){

            if(err)
            {
              console.log('done errro:',err);
            }

            console.log('sync done');
            continueSync();


          });

同步状态数据的功能:

          var syncStatusData = function (api, i, fromVersion, userId, currentCompany, apiUsername, apiPassword, apiDatabase, currentPressureUnit, currentDateFormat, currentTimeFormat, currentTemperatureUnits)
    {

      try {
        api.call(js_lang.GEOTAB_GETFEED_METHOD, {
          typeName: js_lang.GEOTAB_STATUS_DATA,
          resultsLimit: js_lang.GEOTAB_API_LIMIT,
          fromVersion: fromVersion
        }, function (err, data) {

          if (err) {
            console.log('api Call Error:', userId);
            console.log('apiUsername:', apiUsername);
            console.log('apiPassword:', apiPassword);
            console.log('apiDatabase:', apiDatabase);
            console.log('Error', err);
            //apiInstanse[userId] = new API(apiUsername, apiPassword, apiDatabase, js_lang.GEOTAB_SERVER);
            //throw err;
          }
          else {

            var insertStatus = [];

            var sql = "INSERT INTO " + js_lang.TABLE_STATUS_DATA + " (companyId,dateTime,deviceId ,diagnosticId,value,version,uniqueId,userId,unitOfMeasure ) VALUES ?";


            //iterate data
            if (data.data !== undefined)
            {
              for (var key in data.data) {

                if (diagnosticList[data.data[key].diagnostic.id] === undefined)
                {
                  continue;
                }

                var normalDate = FUNCTION_CLASS.getNormalDateFromUTC(data.data[key].dateTime);


                //prepare data to insert
                var insertRow = [
                  currentCompany,
                  normalDate,
                  data.data[key].device.id,
                  data.data[key].diagnostic.id,
                  data.data[key].data,
                  data.data[key].version,
                  data.data[key].id,
                  userId,
                  diagnosticList[data.data[key].diagnostic.id].unitOfMeasure
                ];
                insertStatus.push(insertRow);

              }
            }

            if (insertStatus.length > 0)
            {
              connection.query(sql, [insertStatus], function (err) {
                if (err)
                {
                  throw err;
                }
    //                    console.log('toversion:', data.toVersion);
                console.log('insert:userId:', userId);

                connection.query('UPDATE ' + js_lang.TABLE_USER + ' SET statusDataFromVersion = ? WHERE id = ?',
                        [data.toVersion, userId]);


              });
            }
            else {
              console.log('update user:', userId);



              connection.query('UPDATE ' + js_lang.TABLE_USER + ' SET statusDataFromVersion = ? WHERE id = ?',
                      [data.toVersion, userId]);





            }

          }

          if ((geotabUsers.length - 1) === i)
          {
            console.log('loop ended');
            syncStatusDone = 1;
           // continueSync();
          }
        });
      }
      catch (e) {
        continueSync();
      }

    }

同步故障数据的功能:

       var syncFaultData = function (api, i, fromVersion, userId, currentCompany, apiUsername, apiPassword, apiDatabase,callback)
{

  try {
    api.call(js_lang.GEOTAB_GETFEED_METHOD, {
      typeName: js_lang.GEOTAB_FAULT_DATA,
      resultsLimit: js_lang.GEOTAB_API_LIMIT,
      fromVersion: fromVersion
    }, function (err, data) {

      if (err) {
        console.log('api faultData Call Error:', userId);
        console.log('apiUsername:', apiUsername);
        console.log('apiPassword:', apiPassword);
        console.log('apiDatabase:', apiDatabase);
        console.log('Error', err);
        //apiInstanse[userId] = new API(apiUsername, apiPassword, apiDatabase, js_lang.GEOTAB_SERVER);
        //throw err;
      }
      else {

        var insertStatus = [];

        var sql = "INSERT INTO " + js_lang.TABLE_FAULT_DATA + " (amberWarningLamp,controllerId,count,dateTime,deviceId ,diagnosticId,dismissDateTime,dismissUser,failureModeId,faultLampState,faultState,flashCode,uniqueId,malfunctionLamp,protectWarningLamp,redStopLamp,version,companyId,userId,deleted) VALUES ?";


        //iterate data
        if (data.data !== undefined)
        {
          for (var key in data.data) {

            if (diagnosticList[data.data[key].diagnostic.id] == undefined)
            {
              continue;
            }

            var normalDate = FUNCTION_CLASS.getNormalDateFromUTC(data.data[key].dateTime);
            var thisDate = moment(new Date(data.data[key].dateTime)).tz(js_lang.TIMEZONE).format(js_lang.DATETIME_FORMAT);
            var thisDayDate = moment(new Date(data.data[key].dateTime)).tz(js_lang.TIMEZONE).format(js_lang.DATE_FORMAT);


            var controllerId = '';

            if (data.data[key].controller !== undefined && data.data[key].controller.id !== undefined)
            {
              controllerId = data.data[key].controller.id;
            }
            else if (data.data[key].controller !== undefined)
            {
              controllerId = data.data[key].controller;
            }


            var faultcount = null;

            if (data.data[key].count !== undefined)
            {
              faultcount = parseInt(data.data[key].count);
            }


            var dismissDateTime = '';

            if (data.data[key].dismissDateTime !== undefined)
            {
              dismissDateTime = moment(new Date(data.data[key].dismissDateTime)).tz(js_lang.TIMEZONE).format(js_lang.DATETIME_FORMAT);

            }

            var dismissUser = '';

            if (data.data[key].dismissUser !== undefined)
            {
              dismissUser = data.data[key].dismissUser;
            }

            var failureModeId = '';
            if (data.data[key].failureModeId !== undefined && data.data[key].failureModeId.id !== undefined)
            {
              failureModeId = data.data[key].failureModeId.id;
            }

            var faultLampState = '';
            if (data.data[key].faultLampState !== undefined)
            {
              faultLampState = data.data[key].faultLampState;
            }

            var faultState = data.data[key].faultState;

            var flashCode = '';
            if (data.data[key].flashCode !== undefined)
            {
              flashCode = data.data[key].flashCode;
            }

            var malfunctionLamp = data.data[key].malfunctionLamp;

            var protectWarningLamp = data.data[key].protectWarningLamp;

            var redStopLamp = data.data[key].redStopLamp;

            var version = '';
            if (data.data[key].version !== undefined)
            {
              version = data.data[key].version;
            }
            //prepare data to insert
            var insertRow = [
              data.data[key].amberWarningLamp,
              controllerId,
              faultcount,
              normalDate,
              data.data[key].device.id,
              data.data[key].diagnostic.id,
              dismissDateTime,
              dismissUser,
              failureModeId,
              faultLampState,
              faultState,
              flashCode,
              data.data[key].id,
              malfunctionLamp,
              protectWarningLamp,
              redStopLamp,
              version,
              currentCompany,
              userId,
              0
            ];
            insertStatus.push(insertRow);
          }
        }

        // console.log(insertStatus);
        if (insertStatus.length > 0)
        {
          connection.query(sql, [insertStatus], function (err) {
            if (err)
            {
              throw err;
            }
//                    console.log('toversion:', data.toVersion);
            console.log('insert faultData:userId:', userId);

            connection.query('UPDATE ' + js_lang.TABLE_USER + ' SET faultDataFromVersion = ? WHERE id = ?',
                    [data.toVersion, userId]);

                    callback();

          });

        }
        else {
          console.log('update faultData user:', userId);

          //test code
          //sendEmail(['ankkubosstest@gmail.com','webdeveloper@gmail.com'], 'emailSubject', 'emailText', '<div>html code<div>');

          connection.query('UPDATE ' + js_lang.TABLE_USER + ' SET faultDataFromVersion = ? WHERE id = ?',
                  [data.toVersion, userId]);


                  callback();


        }

      }

      if ((geotabUsers.length - 1) === i)
      {
        console.log('loop ended');
        syncFaultDone = 1;

      }
    });
  }
  catch (e) {
    continueSync();
  }

}

0 个答案:

没有答案