import dxCommonUtils from "../../dxmodules/dxCommonUtils.js";
|
import dxos from "../../dxmodules/dxOs.js";
|
import config from "../../dxmodules/dxConfig.js";
|
import logger from "../../dxmodules/dxLogger.js";
|
import ota from "../../dxmodules/dxOta.js";
|
import std from "../../dxmodules/dxStd.js";
|
import driver from "../driver.js";
|
import configService from "./configService.js";
|
import sqliteService from "./sqliteService.js";
|
import faceService from "./faceService.js";
|
import dxMap from '../../dxmodules/dxMap.js'
|
import bus from "../../dxmodules/dxEventBus.js";
|
import api from './api.js'
|
import weComService from "./weComService.js";
|
const mqttService = {}
|
|
mqttService.receiveMsg = function (data) {
|
// {"topic":"ddddd","payload":"{\n \"msg\": \"world\"\n}"}
|
logger.info('[mqttService] receiveMsg :' + JSON.stringify(data.topic))
|
if (typeof mqttService[data.topic.match(/[^/]+$/)[0]] == 'function') {
|
let payload = parsePayloadSafely(data)
|
if (typeof payload == 'string') {
|
return reply(data, payload, CODE.E_100)
|
}
|
mqttService[data.topic.match(/[^/]+$/)[0]](data)
|
} else {
|
logger.error("未实现的topic", data.topic)
|
}
|
}
|
|
function parsePayloadSafely(event) {
|
try {
|
return JSON.parse(event.payload)
|
} catch (error) {
|
return "Invalid JSON format"
|
}
|
}
|
|
// =================================权限增删改查=================================
|
/**
|
* 添加权限
|
*/
|
mqttService.insertPermission = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
if (data.length > 100) {
|
return reply(event, "data length should not be greater than 100", CODE.E_100)
|
}
|
let res = api.insertPermission(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
/**
|
* 查询权限
|
*/
|
mqttService.getPermission = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.getPermission(data)
|
return reply(event, res)
|
}
|
|
/**
|
* 删除权限
|
*/
|
mqttService.delPermission = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.delPermission(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
/**
|
* 修改权限
|
*/
|
mqttService.modifyPermission = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
if (data.length > 100) {
|
return reply(event, "data length should not be greater than 100", CODE.E_100)
|
}
|
let res = api.modifyPermission(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
/**
|
* 清空权限
|
*/
|
mqttService.clearPermission = function (event) {
|
let ret = api.clearPermission()
|
if (typeof ret == "string") {
|
return reply(event, "sql error ret:" + ret, CODE.E_100)
|
} else {
|
return reply(event)
|
}
|
}
|
|
|
// =================================人员增删改查=================================
|
/**
|
* 添加人员
|
*/
|
mqttService.insertUser = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
if (data.length > 100) {
|
return reply(event, "data length should not be greater than 100", CODE.E_100)
|
}
|
let res = api.insertUser(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
|
/**
|
* 查询人员
|
*/
|
mqttService.getUser = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.getUser(data)
|
return reply(event, res)
|
}
|
|
/**
|
* 删除人员
|
*/
|
mqttService.delUser = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.delUser(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
/**
|
* 清空人员
|
*/
|
mqttService.clearUser = function (event) {
|
let ret = api.clearUser()
|
if (typeof ret == "string") {
|
return reply(event, "sql error ret:" + ret, CODE.E_100)
|
} else {
|
return reply(event)
|
}
|
}
|
|
/**
|
* 修改人员
|
*/
|
mqttService.modifyUser = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
if (data.length > 100) {
|
return reply(event, "data length should not be greater than 100", CODE.E_100)
|
}
|
let res = api.modifyUser(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event, res)
|
}
|
|
// =================================凭证增删改查=================================
|
/**
|
* 添加凭证
|
*/
|
mqttService.insertKey = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
if (data.length > 100) {
|
return reply(event, "data length should not be greater than 100", CODE.E_100)
|
}
|
let res = api.insertKey(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
/**
|
* 查询凭证
|
*/
|
mqttService.getKey = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.getKey(data)
|
if (typeof res == 'string') {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event, res)
|
}
|
|
/**
|
* 删除凭证
|
*/
|
mqttService.delKey = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.delKey(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
|
/**
|
* 清空凭证
|
*/
|
mqttService.clearKey = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let ret = api.clearKey(data)
|
if (typeof ret == "string") {
|
return reply(event, "sql error ret:" + ret, CODE.E_100)
|
} else {
|
return reply(event)
|
}
|
}
|
|
/**
|
* 修改凭证
|
*/
|
mqttService.modifyKey = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
if (data.length > 100) {
|
return reply(event, "data length should not be greater than 100", CODE.E_100)
|
}
|
let res = api.modifyKey(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
|
// =================================密钥增删改查=================================
|
/**
|
* 添加密钥
|
*/
|
mqttService.insertSecurity = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
if (data.length > 100) {
|
return reply(event, "data length should not be greater than 100", CODE.E_100)
|
}
|
let res = api.insertSecurity(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
/**
|
* 查询密钥
|
*/
|
mqttService.getSecurity = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.getSecurity(data)
|
if (typeof res == 'string') {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event, res)
|
}
|
|
/**
|
* 删除密钥
|
*/
|
mqttService.delSecurity = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.delSecurity(data)
|
if (Array.isArray(res)) {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
/**
|
* 清空密钥
|
*/
|
mqttService.clearSecurity = function (event) {
|
let ret = api.clearSecurity()
|
if (typeof ret == "string") {
|
return reply(event, "sql error ret:" + ret, CODE.E_100)
|
} else {
|
return reply(event)
|
}
|
}
|
|
/**
|
* 远程控制
|
*/
|
mqttService.control = function (event) {
|
let payload = JSON.parse(event.payload)
|
let ret = api.control(payload)
|
// 远程抓拍、企业微信解绑,需要等流程完成后才回复,不能立即回复
|
if (payload.data.command != 8 && payload.data.command != 11) {
|
// 如果是指纹操作,但是设备不支持指纹的话,就直接返回错误
|
if(payload.data.command == 12 && !driver.device.finger){
|
return reply(event, "finger not supported", CODE.E_100)
|
}
|
if (typeof ret == "string") {
|
return reply(event, "unknown failure", CODE.E_100)
|
} else {
|
return reply(event)
|
}
|
}
|
}
|
|
/**
|
* 查询配置
|
*/
|
mqttService.getConfig = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.getConfig(data)
|
if (typeof res == "string") {
|
return reply(event, res, CODE.E_100)
|
} else {
|
return reply(event, res)
|
}
|
}
|
|
/**
|
* 修改配置
|
*/
|
mqttService.setConfig = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.setConfig(data)
|
if (typeof res == "string") {
|
return reply(event, res, CODE.E_100)
|
} else {
|
return reply(event)
|
}
|
}
|
|
/**
|
* 升级固件
|
*/
|
mqttService.upgradeFirmware = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.upgradeFirmware(data)
|
if (typeof res == "string") {
|
return reply(event, res, CODE.E_100)
|
} else {
|
return reply(event)
|
}
|
}
|
|
/**
|
* 查询识别记录
|
*/
|
mqttService.getRecords = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.getRecords(data, true)
|
return reply(event, res)
|
}
|
|
|
/**
|
* 删除记录
|
*/
|
mqttService.delRecords = function (event) {
|
let payload = JSON.parse(event.payload)
|
let data = payload.data
|
let res = api.delRecords(data)
|
if (typeof res == 'string') {
|
return reply(event, res, CODE.E_100)
|
}
|
return reply(event)
|
}
|
|
/**
|
* 通行上报回复
|
*/
|
mqttService.access_reply = function (event) {
|
let payload = JSON.parse(event.payload)
|
if (payload.serialNo && payload.code == '000000') {
|
let record = sqliteService.d1_pass_record.findAllById(payload.serialNo)
|
if (record.length > 0) {
|
dxos.systemBrief(`rm -rf ${record[0].code}`)
|
}
|
sqliteService.d1_pass_record.deleteByid(payload.serialNo)
|
}
|
}
|
|
/**
|
* 在线验证回复
|
*/
|
mqttService.access_online_reply = function (data) {
|
driver.sync.response("mqtt.getOnlinecheck", JSON.parse(data.payload))
|
}
|
|
// 设备绑定二维码回复
|
mqttService.wecom_reply = function (data) {
|
let payload = JSON.parse(data.payload)
|
data = payload.data
|
bus.fire("showQrCode", data)
|
}
|
|
const CODE = {
|
// 成功
|
S_000: "000000",
|
// 未知错误
|
E_100: "100000",
|
// 设备已被禁用
|
E_101: "100001",
|
// 设备正忙,请稍后再试
|
E_102: "100002",
|
// 签名检验失败
|
E_103: "100003",
|
// 超时错误
|
E_104: "100004",
|
// 设备离线
|
E_105: "100005",
|
}
|
mqttService.CODE = CODE
|
mqttService.report = function () {
|
// 在线上报
|
let payloadReply = mqttReply(std.genRandomStr(10), {
|
appVersion: config.get("sys.version") || '',
|
mac: config.get("sys.mac") || '',
|
clientId: dxMap.get("CLIENT").get("CLIENT_ID") || '',
|
name: config.get("sys.deviceName") || '',
|
type: config.get("net.type") || 1,
|
ssid: config.get("net.ssid") || '',
|
psk: config.get("net.psk") || '',
|
dhcp: config.get("net.dhcp") || 2,
|
ip: config.get("net.ip") || '',
|
gateway: config.get("net.gateway") || '',
|
dns: config.get("net.dns") || '',
|
subnetMask: config.get("net.mask") || '',
|
netMac: config.get("net.mac") || ''
|
}, CODE.S_000)
|
driver.mqtt.send("access_device/v2/event/connect", JSON.stringify(payloadReply))
|
|
// 企微绑定状态获取
|
if (weComService.isWeCom()) {
|
driver.mqtt.send("access_device/v2/event/wecom", JSON.stringify(mqttReply(std.genRandomStr(10), { type: 0 }, CODE.S_000)))
|
}
|
}
|
|
// mqtt请求统一回复
|
function reply(event, data, code) {
|
let topic = getReplyTopic(event)
|
let reply = JSON.stringify(mqttReply(JSON.parse(event.payload).serialNo, data, isEmpty(code) ? CODE.S_000 : code))
|
driver.mqtt.send(topic, reply)
|
}
|
|
/**
|
* 获取回复主题
|
*/
|
function getReplyTopic(data) {
|
return data.topic.replace("/" + config.get("sys.sn"), '') + "_reply";
|
}
|
|
// mqtt回复格式构建
|
function mqttReply(serialNo, data, code) {
|
return {
|
serialNo: serialNo,
|
uuid: config.get("sys.uuid"),
|
sign: '',
|
code: code,
|
data: data,
|
time: Math.floor(Date.parse(new Date()) / 1000)
|
}
|
}
|
mqttService.mqttReply = mqttReply
|
|
// 判空
|
function isEmpty(value) {
|
return value === undefined || value === null || value === ""
|
}
|
|
export default mqttService
|