From cd40c6f6f3a6138cb70b2e2d017cc7f34a887ef8 Mon Sep 17 00:00:00 2001
From: lgq <1015864684@qq.com>
Date: 星期五, 17 四月 2026 13:59:49 +0800
Subject: [PATCH] 1.更新vf107代码,更新自动上报通行记录接口、人员查询接口、人员添加接口

---
 vf107/src/service/mqttService.js |  440 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 407 insertions(+), 33 deletions(-)

diff --git a/vf107/src/service/mqttService.js b/vf107/src/service/mqttService.js
index b582aa4..61721b4 100644
--- a/vf107/src/service/mqttService.js
+++ b/vf107/src/service/mqttService.js
@@ -42,7 +42,7 @@
  */
 mqttService.insertPermission = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     if (data.length > 100) {
         return reply(event, "data length should not be greater than 100", CODE.E_100)
     }
@@ -58,7 +58,7 @@
  */
 mqttService.getPermission = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.getPermission(data)
     return reply(event, res)
 }
@@ -68,7 +68,7 @@
  */
 mqttService.delPermission = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.delPermission(data)
     if (Array.isArray(res)) {
         return reply(event, res, CODE.E_100)
@@ -81,7 +81,7 @@
  */
 mqttService.modifyPermission = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     if (data.length > 100) {
         return reply(event, "data length should not be greater than 100", CODE.E_100)
     }
@@ -111,7 +111,7 @@
  */
 mqttService.insertUser = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     if (data.length > 100) {
         return reply(event, "data length should not be greater than 100", CODE.E_100)
     }
@@ -128,7 +128,7 @@
  */
 mqttService.getUser = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.getUser(data)
     return reply(event, res)
 }
@@ -138,7 +138,7 @@
  */
 mqttService.delUser = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.delUser(data)
     if (Array.isArray(res)) {
         return reply(event, res, CODE.E_100)
@@ -163,7 +163,7 @@
  */
 mqttService.modifyUser = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     if (data.length > 100) {
         return reply(event, "data length should not be greater than 100", CODE.E_100)
     }
@@ -171,7 +171,7 @@
     if (Array.isArray(res)) {
         return reply(event, res, CODE.E_100)
     }
-    return reply(event, res)
+    return reply(event)
 }
 
 // =================================鍑瘉澧炲垹鏀规煡=================================
@@ -180,7 +180,7 @@
  */
 mqttService.insertKey = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     if (data.length > 100) {
         return reply(event, "data length should not be greater than 100", CODE.E_100)
     }
@@ -196,7 +196,7 @@
  */
 mqttService.getKey = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.getKey(data)
     if (typeof res == 'string') {
         return reply(event, res, CODE.E_100)
@@ -209,7 +209,7 @@
  */
 mqttService.delKey = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.delKey(data)
     if (Array.isArray(res)) {
         return reply(event, res, CODE.E_100)
@@ -223,7 +223,7 @@
  */
 mqttService.clearKey = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let ret = api.clearKey(data)
     if (typeof ret == "string") {
         return reply(event, "sql error ret:" + ret, CODE.E_100)
@@ -237,7 +237,7 @@
  */
 mqttService.modifyKey = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     if (data.length > 100) {
         return reply(event, "data length should not be greater than 100", CODE.E_100)
     }
@@ -249,13 +249,163 @@
 }
 
 
+
+// =================================搴旀�ュ紑浠撳瘑鐮佸鍒犳敼鏌�=================================
+/**
+ * 娣诲姞搴旀�ュ紑浠撳瘑鐮�
+ * @param {object} event - MQTT浜嬩欢瀵硅薄
+ */
+mqttService.insertEmergencyPassword = function (event) {
+    try {
+        logger.info('[mqttService] 鎺ユ敹鍒癷nsertEmergencyPassword鍛戒护:', JSON.stringify(event.topic))
+        logger.info('[mqttService] 鍛戒护payload:', event.payload)
+        let payload = JSON.parse(event.payload)
+        let data = payload.payload && payload.payload.data ? payload.payload.data : {}
+        logger.info('[mqttService] 瑙f瀽鍚庣殑鍙傛暟:', JSON.stringify(data))
+        let res = this.insertEmergencyPasswordAgreement(data)
+        if (typeof res == 'string') {
+            logger.error('[mqttService] insertEmergencyPassword澶辫触:', res)
+            return reply(event, res, CODE.E_100)
+        }
+        logger.info('[mqttService] insertEmergencyPassword鎴愬姛')
+        return reply(event)
+    } catch (error) {
+        logger.error('[mqttService] insertEmergencyPassword error:', error)
+        return reply(event, { error: error.message }, CODE.E_100)
+    }
+}
+
+/**
+ * 娣诲姞搴旀�ュ紑浠撳瘑鐮侀�氱敤鍗忚鏍煎紡
+ * @param {object} data - 搴旀�ュ紑浠撳瘑鐮佹暟鎹璞�
+ * @returns {boolean|string} true琛ㄧず鎴愬姛锛宻tring琛ㄧず閿欒淇℃伅
+ */
+mqttService.insertEmergencyPasswordAgreement = function (data) {
+    // 搴旀�ュ紑浠撳瘑鐮佸湪璁惧涓粎鏈夊敮涓�鐨�1涓紝鎵�浠ュ厛娓呯┖琛�
+    let deleteRet = sqliteService.d1_emergency_password.deleteAll()
+    if (deleteRet != 0) {
+        return "娓呯┖鏃у瘑鐮佸け璐�: " + deleteRet
+    }
+    
+    // 妫�鏌ュ瘑鐮佹槸鍚︽湁鏁�
+    if (!data.password) {
+        return "password cannot be empty"
+    }
+    
+    // 妫�鏌ュ瘑鐮侀暱搴︽槸鍚﹀ぇ浜庣瓑浜�8浣�
+    if (data.password.length < 8) {
+        return "Password length must be at least 8 digits"
+    }
+    
+    // 鏋勫缓瀵嗙爜璁板綍
+    let record = {}
+    record.id = data.id || 'emergency_' + Date.now() // 濡傛灉娌℃湁id锛岃嚜鍔ㄧ敓鎴�
+    record.password = data.password
+    record.description = "浜戠涓嬪彂" // 閫氳繃MQTT鍜孒TTP鎺ュ彛璁剧疆鐨勫簲鎬ュ紑浠撳瘑鐮侊紝description濉厖涓�"浜戠涓嬪彂"
+    record.createTime = Date.now()
+    record.updateTime = Date.now()
+    record.status = data.status || 1
+    
+    // 淇濆瓨瀵嗙爜
+    let ret = sqliteService.d1_emergency_password.save(record)
+    if (ret == 0) {
+        return true
+    } else {
+        return "sql error ret:" + ret
+    }
+}
+
+/**
+ * 鏌ヨ搴旀�ュ紑浠撳瘑鐮�
+ * @param {object} event - MQTT浜嬩欢瀵硅薄
+ */
+mqttService.getEmergencyPassword = function (event) {
+    try {
+        logger.info('[mqttService] 鎺ユ敹鍒癵etEmergencyPassword鍛戒护:', JSON.stringify(event.topic))
+        logger.info('[mqttService] 鍛戒护payload:', event.payload)
+        let payload = JSON.parse(event.payload)
+        let res = this.getEmergencyPasswordAgreement()
+        logger.info('[mqttService] 鏌ヨ缁撴灉:', JSON.stringify(res))
+        return reply(event, res)
+    } catch (error) {
+        logger.error('[mqttService] getEmergencyPassword error:', error)
+        return reply(event, { error: error.message }, CODE.E_100)
+    }
+}
+
+/**
+ * 鏌ヨ搴旀�ュ紑浠撳瘑鐮侀�氱敤鍗忚鏍煎紡
+ * @returns {object} 鏌ヨ缁撴灉
+ */
+mqttService.getEmergencyPasswordAgreement = function () {
+    let passwords = sqliteService.d1_emergency_password.findAll()
+    if (passwords && passwords.length > 0) {
+        let password = passwords[0];
+        // 杞崲鏃堕棿鎴充负瀛楃涓叉牸寮�
+        if (password.createTime) {
+            // 灏濊瘯灏哻reateTime杞崲涓烘暟瀛�
+            const createTimeNum = Number(password.createTime);
+            if (!isNaN(createTimeNum)) {
+                // 妫�鏌ユ椂闂存埑鏄惁涓烘绉掔骇锛堝ぇ浜庣瓑浜�10浣嶏級
+                if (createTimeNum.toString().length >= 10) {
+                    // 宸茬粡鏄绉掔骇锛岃浆鎹负绉掔骇
+                    password.createTime = timestampToDateString(createTimeNum / 1000);
+                } else {
+                    // 绉掔骇锛岀洿鎺ヤ娇鐢�
+                    password.createTime = timestampToDateString(createTimeNum);
+                }
+            }
+        }
+        if (password.updateTime) {
+            // 灏濊瘯灏唘pdateTime杞崲涓烘暟瀛�
+            const updateTimeNum = Number(password.updateTime);
+            if (!isNaN(updateTimeNum)) {
+                // 妫�鏌ユ椂闂存埑鏄惁涓烘绉掔骇锛堝ぇ浜庣瓑浜�10浣嶏級
+                if (updateTimeNum.toString().length >= 10) {
+                    // 宸茬粡鏄绉掔骇锛岃浆鎹负绉掔骇
+                    password.updateTime = timestampToDateString(updateTimeNum / 1000);
+                } else {
+                    // 绉掔骇锛岀洿鎺ヤ娇鐢�
+                    password.updateTime = timestampToDateString(updateTimeNum);
+                }
+            }
+        }
+        return password;
+    }
+    return {};
+}
+
+
+/**
+ * 娓呯┖搴旀�ュ紑浠撳瘑鐮�
+ * @param {object} event - MQTT浜嬩欢瀵硅薄
+ */
+mqttService.clearEmergencyPassword = function (event) {
+    try {
+        logger.info('[mqttService] 鎺ユ敹鍒癱learEmergencyPassword鍛戒护:', JSON.stringify(event.topic))
+        logger.info('[mqttService] 鍛戒护payload:', event.payload)
+        let ret = sqliteService.d1_emergency_password.deleteAll()
+        if (ret == 0) {
+            logger.info('[mqttService] clearEmergencyPassword鎴愬姛')
+            return reply(event)
+        } else {
+            logger.error('[mqttService] clearEmergencyPassword澶辫触:', "sql error ret:" + ret)
+            return reply(event, "sql error ret:" + ret, CODE.E_100)
+        }
+    } catch (error) {
+        logger.error('[mqttService] clearEmergencyPassword error:', error)
+        return reply(event, { error: error.message }, CODE.E_100)
+    }
+}
+
+
 // =================================瀵嗛挜澧炲垹鏀规煡=================================
 /**
  * 娣诲姞瀵嗛挜
  */
 mqttService.insertSecurity = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     if (data.length > 100) {
         return reply(event, "data length should not be greater than 100", CODE.E_100)
     }
@@ -271,7 +421,7 @@
  */
 mqttService.getSecurity = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.getSecurity(data)
     if (typeof res == 'string') {
         return reply(event, res, CODE.E_100)
@@ -284,7 +434,7 @@
  */
 mqttService.delSecurity = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.delSecurity(data)
     if (Array.isArray(res)) {
         return reply(event, res, CODE.E_100)
@@ -304,24 +454,230 @@
     }
 }
 
+
+// =================================搴旀�ュ紑浠撳瘑鐮佸鍒犳敼鏌�=================================
+/**
+ * 娣诲姞搴旀�ュ紑浠撳瘑鐮�
+ * @param {object} event - MQTT浜嬩欢瀵硅薄
+ */
+mqttService.insertEmergencyPassword = function (event) {
+    try {
+        logger.info('[mqttService] 鎺ユ敹鍒癷nsertEmergencyPassword鍛戒护:', JSON.stringify(event.topic))
+        logger.info('[mqttService] 鍛戒护payload:', event.payload)
+        let payload = JSON.parse(event.payload)
+        let data = payload.payload && payload.payload.data ? payload.payload.data : {}
+        logger.info('[mqttService] 瑙f瀽鍚庣殑鍙傛暟:', JSON.stringify(data))
+        let res = this.insertEmergencyPasswordAgreement(data)
+        if (typeof res == 'string') {
+            logger.error('[mqttService] insertEmergencyPassword澶辫触:', res)
+            return reply(event, res, CODE.E_100)
+        }
+        logger.info('[mqttService] insertEmergencyPassword鎴愬姛')
+        return reply(event)
+    } catch (error) {
+        logger.error('[mqttService] insertEmergencyPassword error:', error)
+        return reply(event, { error: error.message }, CODE.E_100)
+    }
+}
+
+/**
+ * 娣诲姞搴旀�ュ紑浠撳瘑鐮侀�氱敤鍗忚鏍煎紡
+ * @param {object} data - 搴旀�ュ紑浠撳瘑鐮佹暟鎹璞�
+ * @returns {boolean|string} true琛ㄧず鎴愬姛锛宻tring琛ㄧず閿欒淇℃伅
+ */
+mqttService.insertEmergencyPasswordAgreement = function (data) {
+    // 搴旀�ュ紑浠撳瘑鐮佸湪璁惧涓粎鏈夊敮涓�鐨�1涓紝鎵�浠ュ厛娓呯┖琛�
+    let deleteRet = sqliteService.d1_emergency_password.deleteAll()
+    if (deleteRet != 0) {
+        return "娓呯┖鏃у瘑鐮佸け璐�: " + deleteRet
+    }
+    
+    // 妫�鏌ュ瘑鐮佹槸鍚︽湁鏁�
+    if (!data.password) {
+        return "password cannot be empty"
+    }
+    
+    // 妫�鏌ュ瘑鐮侀暱搴︽槸鍚﹀ぇ浜庣瓑浜�8浣�
+    if (data.password.length < 8) {
+        return "Password length must be at least 8 digits"
+    }
+    
+    // 鏋勫缓瀵嗙爜璁板綍
+    let record = {}
+    record.id = data.id || 'emergency_' + Date.now() // 濡傛灉娌℃湁id锛岃嚜鍔ㄧ敓鎴�
+    record.password = data.password
+    record.description = "浜戠涓嬪彂" // 閫氳繃MQTT鍜孒TTP鎺ュ彛璁剧疆鐨勫簲鎬ュ紑浠撳瘑鐮侊紝description濉厖涓�"浜戠涓嬪彂"
+    record.createTime = Date.now()
+    record.updateTime = Date.now()
+    record.status = data.status || 1
+    
+    // 淇濆瓨瀵嗙爜
+    let ret = sqliteService.d1_emergency_password.save(record)
+    if (ret == 0) {
+        return true
+    } else {
+        return "sql error ret:" + ret
+    }
+}
+
+/**
+ * 鏌ヨ搴旀�ュ紑浠撳瘑鐮�
+ * @param {object} event - MQTT浜嬩欢瀵硅薄
+ */
+mqttService.getEmergencyPassword = function (event) {
+    try {
+        logger.info('[mqttService] 鎺ユ敹鍒癵etEmergencyPassword鍛戒护:', JSON.stringify(event.topic))
+        logger.info('[mqttService] 鍛戒护payload:', event.payload)
+        let payload = JSON.parse(event.payload)
+        let res = this.getEmergencyPasswordAgreement()
+        logger.info('[mqttService] 鏌ヨ缁撴灉:', JSON.stringify(res))
+        return reply(event, res)
+    } catch (error) {
+        logger.error('[mqttService] getEmergencyPassword error:', error)
+        return reply(event, { error: error.message }, CODE.E_100)
+    }
+}
+
+/**
+ * 鏌ヨ搴旀�ュ紑浠撳瘑鐮侀�氱敤鍗忚鏍煎紡
+ * @returns {object} 鏌ヨ缁撴灉
+ */
+mqttService.getEmergencyPasswordAgreement = function () {
+    let passwords = sqliteService.d1_emergency_password.findAll()
+    if (passwords && passwords.length > 0) {
+        let password = passwords[0];
+        // 杞崲鏃堕棿鎴充负瀛楃涓叉牸寮�
+        if (password.createTime) {
+            // 灏濊瘯灏哻reateTime杞崲涓烘暟瀛�
+            const createTimeNum = Number(password.createTime);
+            if (!isNaN(createTimeNum)) {
+                // 妫�鏌ユ椂闂存埑鏄惁涓烘绉掔骇锛堝ぇ浜庣瓑浜�10浣嶏級
+                if (createTimeNum.toString().length >= 10) {
+                    // 宸茬粡鏄绉掔骇锛岃浆鎹负绉掔骇
+                    password.createTime = timestampToDateString(createTimeNum / 1000);
+                } else {
+                    // 绉掔骇锛岀洿鎺ヤ娇鐢�
+                    password.createTime = timestampToDateString(createTimeNum);
+                }
+            }
+        }
+        if (password.updateTime) {
+            // 灏濊瘯灏唘pdateTime杞崲涓烘暟瀛�
+            const updateTimeNum = Number(password.updateTime);
+            if (!isNaN(updateTimeNum)) {
+                // 妫�鏌ユ椂闂存埑鏄惁涓烘绉掔骇锛堝ぇ浜庣瓑浜�10浣嶏級
+                if (updateTimeNum.toString().length >= 10) {
+                    // 宸茬粡鏄绉掔骇锛岃浆鎹负绉掔骇
+                    password.updateTime = timestampToDateString(updateTimeNum / 1000);
+                } else {
+                    // 绉掔骇锛岀洿鎺ヤ娇鐢�
+                    password.updateTime = timestampToDateString(updateTimeNum);
+                }
+            }
+        }
+        return password;
+    }
+    return {};
+}
+
+
+/**
+ * 娓呯┖搴旀�ュ紑浠撳瘑鐮�
+ * @param {object} event - MQTT浜嬩欢瀵硅薄
+ */
+mqttService.clearEmergencyPassword = function (event) {
+    try {
+        logger.info('[mqttService] 鎺ユ敹鍒癱learEmergencyPassword鍛戒护:', JSON.stringify(event.topic))
+        logger.info('[mqttService] 鍛戒护payload:', event.payload)
+        let ret = sqliteService.d1_emergency_password.deleteAll()
+        if (ret == 0) {
+            logger.info('[mqttService] clearEmergencyPassword鎴愬姛')
+            return reply(event)
+        } else {
+            logger.error('[mqttService] clearEmergencyPassword澶辫触:', "sql error ret:" + ret)
+            return reply(event, "sql error ret:" + ret, CODE.E_100)
+        }
+    } catch (error) {
+        logger.error('[mqttService] clearEmergencyPassword error:', error)
+        return reply(event, { error: error.message }, CODE.E_100)
+    }
+}
+
+
 /**
  * 杩滅▼鎺у埗
+ * @param {object} event - MQTT浜嬩欢瀵硅薄
  */
 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 {
+    try {
+            logger.info('[mqttService] 鎺ユ敹鍒癱ontrol鍛戒护:', JSON.stringify(event.topic))
+            logger.info('[mqttService] 鍛戒护payload:', event.payload)
+            let payload = JSON.parse(event.payload)
+            let data = payload.payload.data || {}
+            switch (data.command) {
+                case 0:
+                    //閲嶅惎
+                    logger.info('[mqttService] 鎵ц閲嶅惎鍛戒护')
+                    reply(event)
+                    common.asyncReboot(2)
+                    return
+                case 1:
+                    //杩滅▼寮�闂�
+                    logger.info('[mqttService] 鎵ц杩滅▼寮�闂ㄥ懡浠�')
+                    driver.gpio.open()
+                    break
+                case 4:
+                    //閲嶇疆
+                    logger.info('[mqttService] 鎵ц閲嶇疆鍛戒护')
+                    common.systemBrief("rm -rf /app/data/config/*")
+                    common.systemBrief("rm -rf /app/data/db/*")
+                    common.systemBrief("rm -rf /app/data/user/*")
+                    common.systemBrief("rm -rf /app/data/user/*")
+                    common.systemBrief("rm -rf /vgmj.db")
+                    reply(event)
+                    common.asyncReboot(2)
+                    return
+                case 5:
+                    //鎾斁璇煶
+                    logger.info('[mqttService] 鎵ц鎾斁璇煶鍛戒护')
+                    if (data.extra) {
+                        let res = common.systemWithRes(`test -e "/app/code/resource/wav/${data.extra.wav}.wav" && echo "OK" || echo "NO"`, 2)
+                        if (res.includes('OK')) {
+                            driver.alsa.play(`/app/code/resource/wav/${data.extra.wav}.wav`)
+                        }
+                    }
+                    break
+                case 6:
+                    // 6锛氬睆骞曞睍绀哄浘鐗�
+                    // TODO
+                    logger.info('[mqttService] 鎵ц灞忓箷灞曠ず鍥剧墖鍛戒护')
+                    break
+                case 7:
+                    // 7锛氬睆骞曞睍绀烘枃瀛�
+                    // TODO
+                    logger.info('[mqttService] 鎵ц灞忓箷灞曠ず鏂囧瓧鍛戒护')
+                    break
+                case 10:
+                    logger.info('[mqttService] 鎵ц浜岀淮鐮佸睍绀哄懡浠�')
+                    if (!isEmpty(data.extra.qrCodeBase64) && typeof data.extra.qrCodeBase64 == 'string') {
+                        //base64杞浘鐗囦繚瀛�
+                        let src = `/app/code/resource/image/app_qrcode.png`
+                        std.ensurePathExists(src)
+                        common.base64_2binfile(src, data.extra.qrCodeBase64)
+                        logger.info('[mqttService] 浜岀淮鐮佷繚瀛樻垚鍔�')
+                        return reply(event)
+                    }
+                    break
+                default:
+                    logger.info('[mqttService] 鏈煡鍛戒护:', data.command)
+                    break
+            }
+            logger.info('[mqttService] control鍛戒护鎵ц瀹屾垚')
             return reply(event)
+        } catch (error) {
+            logger.error('[mqttService] control error:', error)
+            return reply(event, { error: error.message }, CODE.E_100)
         }
-    }
 }
 
 /**
@@ -343,7 +699,7 @@
  */
 mqttService.setConfig = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.setConfig(data)
     if (typeof res == "string") {
         return reply(event, res, CODE.E_100)
@@ -356,8 +712,9 @@
  * 鍗囩骇鍥轰欢
  */
 mqttService.upgradeFirmware = function (event) {
+    logger.info('[mqttService] 鎺ユ敹鍒板崌绾у浐浠跺懡浠�:', JSON.stringify(event.topic))
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.upgradeFirmware(data)
     if (typeof res == "string") {
         return reply(event, res, CODE.E_100)
@@ -371,7 +728,7 @@
  */
 mqttService.getRecords = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.getRecords(data, true)
     return reply(event, res)
 }
@@ -382,7 +739,7 @@
  */
 mqttService.delRecords = function (event) {
     let payload = JSON.parse(event.payload)
-    let data = payload.data
+    let data = payload.payload && payload.payload.data ? payload.payload.data : payload.data
     let res = api.delRecords(data)
     if (typeof res == 'string') {
         return reply(event, res, CODE.E_100)
@@ -487,6 +844,23 @@
 }
 mqttService.mqttReply = mqttReply
 
+/**
+ * 鏃堕棿鎴宠浆鏃ユ湡瀛楃涓�
+ * @param {number} timestamp - 鏃堕棿鎴筹紙绉掔骇锛�
+ * @returns {string} 鏃ユ湡瀛楃涓诧紝鏍煎紡锛歒YYY-MM-DD HH:MM:SS
+ */
+function timestampToDateString(timestamp) {
+    const date = new Date(timestamp * 1000);
+    const year = date.getFullYear();
+    const month = String(date.getMonth() + 1).padStart(2, '0');
+    const day = String(date.getDate()).padStart(2, '0');
+    const hours = String(date.getHours()).padStart(2, '0');
+    const minutes = String(date.getMinutes()).padStart(2, '0');
+    const seconds = String(date.getSeconds()).padStart(2, '0');
+    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+}
+mqttService.timestampToDateString = timestampToDateString
+
 // 鍒ょ┖
 function isEmpty(value) {
     return value === undefined || value === null || value === ""

--
Gitblit v1.9.3