Как пройти данные маяка BLE, которые хранятся в aws DynamodB, используя javascript - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть несколько маяков BLE, которые отправляют данные в таблицу в aws DynamodB. Я знаю, как сканировать всю таблицу и получать данные, но это может вызвать большую нагрузку, поскольку данные постоянно добавляются в таблицу. У меня есть другая таблица сотрудников, и каждому сотруднику назначен идентификатор dma c, я хочу сначала отсканировать эту таблицу и получить всех сотрудников и их dmacs, затем я хочу просмотреть таблицу маяков и получить только данные маяков. которые соответствуют dma c таблицы сотрудника с текущей отметкой времени.

данные от маяков поступают в двух форматах

формат один

{
  "gmac": "kbeacon/publish/D03304001882",
  "payload": {
    "gmac": "D03304001882",
    "msg": "advData",
    "obj": [
      {
        "dmac": "6814030A33DD",
        "majorID": 1,
        "minorID": 1009,
        "refpower": -55,
        "rssi": -65,
        "time": "2020-04-21 12:16:10",
        "type": 4,
        "uuid": "7777772E6B6B6D636E2E636F6D000001"
      },
      {
        "dmac": "6714030A33DD",
        "majorID": 1,
        "minorID": 1005,
        "refpower": -55,
        "rssi": -64,
        "time": "2020-04-21 12:16:10",
        "type": 4,
        "uuid": "7777772E6B6B6D636E2E636F6D000001"
      },
      {
        "dmac": "7614030A33DD",
        "majorID": 1,
        "minorID": 1010,
        "refpower": -55,
        "rssi": -53,
        "time": "2020-04-21 12:16:10",
        "type": 4,
        "uuid": "7777772E6B6B6D636E2E636F6D000001"
      },
    ]
  },
  "timestamp": "1587471373840"
}

формат 2

{
  "gmac": "kbeacon/publish/D03304001882",
  "payload": {
    "advDevices": 16,
    "blever": "3881",
    "downDevices": 0,
    "gmac": "D03304001882",
    "msg": "alive",
    "pubaction": "kbeacon/pubaction/D03304001882",
    "subaction": "kbeacon/subaction/D03304001882",
    "temp": 42,
    "ver": "KBEACONGW_V2.4.2"
  },
  "timestamp": "1586355708349"
}

мне нужна помощь с реализацией кода javescript с использованием aws -sdk для решения этой задачи

то, что я пробовал

let params = {
        TableName: "gmhk_bleclhk_kkm_employeeTable",
      };

  docClient.scan(params, async (err, data) => {
    if (err) {
      console.log(err);
    } else {
      let newitem;
        await data.Items.map(async (element) => {
          newitem = {
            dmac:element.DMAC,
            name: element.FIRST_NAME+" "+element.LAST_NAME,
            department: element.DEPARTMENT,
            lastentry:'--',
            attendance:'--'
          }
          this.state.emData.push(newitem)
      })        
    } 
  })

  let params2 = {
    TableName: "gmhk_bleclhk_kkm_003Table",
  };
  docClient.scan(params2, async (err, data) => {
    if (err) {
      console.log(err);
    } else {
      await data.Items[0].payload.obj.map(async (item) => {
        await this.state.emData.map(async (item2) => {
          let newitem2;
          if(item.dmac === item2.dmac){
            newitem2 = {
              dmac:item2.dmac,
              name: item2.name,
              department: item2.department,
              lastentry:item.time,
              attendance:'present'
            }
            this.state.emData2.push(newitem2)
          }
        })
    })
    this.setState({loading:true})
    }
  })

но это не так t пройти через каждый элемент в таблице

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...