From e491cdb48129752324c4e3764f99bd9203c56dec Mon Sep 17 00:00:00 2001
From: lgq <1015864684@qq.com>
Date: 星期二, 31 三月 2026 09:48:44 +0800
Subject: [PATCH] 1.新增VF205门禁机代码

---
 vf205_access/src/common/utils/utils.js |  132 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 132 insertions(+), 0 deletions(-)

diff --git a/vf205_access/src/common/utils/utils.js b/vf205_access/src/common/utils/utils.js
new file mode 100644
index 0000000..efb1810
--- /dev/null
+++ b/vf205_access/src/common/utils/utils.js
@@ -0,0 +1,132 @@
+/**
+ * 宸ュ叿鍑芥暟妯″潡
+ * 鎻愪緵绯荤粺甯哥敤鐨勫伐鍏峰嚱鏁帮紝鍖呮嫭鏂囦欢涓嬭浇銆佸瓧绗︿覆澶勭悊銆佺郴缁熸搷浣滅瓑
+ */
+import * as os from "os"
+import common from '../../../dxmodules/dxCommon.js'
+import logger from "../../../dxmodules/dxLogger.js"
+const utils = {}
+
+/**
+ * 鑾峰彇URL鏂囦欢鐨勪笅杞藉ぇ灏忥紙瀛楄妭鏁帮級
+ * @param {string} url - 鏂囦欢鐨刄RL鍦板潃
+ * @returns {number} 鏂囦欢澶у皬锛堝瓧鑺傦級锛屽鏋滆幏鍙栧け璐ュ垯杩斿洖0
+ */
+utils.getUrlFileSize = function (url) {
+    // 浣跨敤wget鍛戒护鑾峰彇鏂囦欢澶у皬淇℃伅
+    let actualSize = common.systemWithRes(`wget --spider -S ${url} 2>&1 | grep 'Length' | awk '{print $2}'`, 100).match(/\d+/g)
+    return actualSize ? parseInt(actualSize) : 0
+}
+
+/**
+ * 鍒ゆ柇鍊兼槸鍚︿负绌猴紙绌哄瓧绗︿覆銆乶ull鎴杣ndefined锛�
+ * @param {*} str - 瑕佸垽鏂殑鍊�
+ * @returns {boolean} 濡傛灉鍊间负绌哄垯杩斿洖true锛屽惁鍒欒繑鍥瀎alse
+ */
+utils.isEmpty = function (str) {
+    return (str === "" || str === null || str === undefined)
+}
+
+/**
+ * 瑙f瀽瀛楃涓蹭负JSON瀵硅薄
+ * 娉ㄦ剰锛歷alue鍐呬笉鑳芥湁"鍙�
+ * @param {string} inputString - 瑕佽В鏋愮殑瀛楃涓诧紝鏍煎紡涓簕key1=value1, key2=value2}
+ * @returns {Object} 瑙f瀽鍚庣殑JSON瀵硅薄
+ */
+utils.parseString = function (inputString) {
+    // 鑾峰彇{}鍙婂叾涔嬮棿鐨勫唴瀹�
+    inputString = inputString.slice(inputString.indexOf("{"), inputString.lastIndexOf("}") + 1)
+    // key=value姝e垯锛宬ey鏄痋w+锛堝瓧姣嶆暟瀛椾笅鍒掔嚎锛屽尯鍒ぇ灏忓啓锛夛紝=涓よ竟鍙湁绌烘牸锛寁alue鏄痋w+鎴栫浉閭讳袱涓�"涔嬮棿鐨勫唴瀹癸紙鍖呭惈"锛�
+    const keyValueRegex = /(\w+)\s*=\s*("[^"]*"|\w+(\.\w+)?)/g;
+    let jsonObject = {};
+    let match;
+    
+    // 閬嶅巻鍖归厤缁撴灉锛屾瀯寤篔SON瀵硅薄
+    while ((match = keyValueRegex.exec(inputString)) !== null) {
+        let key = match[1];
+        let value = match[2]
+        
+        // 鏍规嵁鍊肩殑绫诲瀷杩涜杞崲
+        if (/^\d+$/.test(value)) {
+            // 鏁板瓧绫诲瀷
+            value = parseInt(value)
+        } else if (/^\d+\.\d+$/.test(value)) {
+            // 灏忔暟绫诲瀷
+            value = parseFloat(value)
+        } else if (value == 'true') {
+            // 甯冨皵鍊紅rue
+            value = true
+        } else if (value == 'false') {
+            // 甯冨皵鍊糵alse
+            value = false
+        } else {
+            // 瀛楃涓茬被鍨嬶紝鍘婚櫎寮曞彿鍜岀┖鏍�
+            value = value.replace(/"/g, '').trim()
+        }
+        
+        jsonObject[key] = value;
+    }
+    
+    return jsonObject;
+}
+
+/**
+ * 绛夊緟鏂囦欢涓嬭浇瀹屾垚骞惰繘琛孧D5鏍¢獙
+ * 娉ㄦ剰锛氳秴鏃舵椂闂翠笉寰楄秴杩囧杺鐙楁椂闂达紝鍚﹀垯涓嬭浇鎱細瀵艰嚧绯荤粺閲嶅惎
+ * @param {string} update_addr - 涓嬭浇鍦板潃
+ * @param {string} downloadPath - 瀛樺偍璺緞
+ * @param {number} timeout - 瓒呮椂鏃堕棿锛堟绉掞級
+ * @param {string} update_md5 - MD5鏍¢獙鍊�
+ * @param {number} fileSize - 鏂囦欢澶у皬锛堝瓧鑺傦級
+ * @returns {boolean} 涓嬭浇缁撴灉锛歵rue琛ㄧず鎴愬姛锛宖alse琛ㄧず澶辫触
+ */
+utils.waitDownload = function (update_addr, downloadPath, timeout, update_md5, fileSize) {
+    // 鍒犻櫎鍘熸枃浠�
+    common.systemBrief(`rm -rf "${downloadPath}"`)
+    
+    // 寮傛涓嬭浇鏂囦欢
+    common.systemBrief(`wget -c "${update_addr}" -O "${downloadPath}" &`)
+    
+    let startTime = new Date().getTime()
+    
+    // 寰幆妫�鏌ヤ笅杞借繘搴�
+    while (true) {
+        // 璁$畻宸蹭笅杞界殑鏂囦欢澶у皬
+        let size = parseInt(common.systemWithRes(`file="${downloadPath}"; [ -e "$file" ] && wc -c "$file" | awk '{print $1}' || echo "0"`, 100).split(/\s/g)[0])
+        
+        // 濡傛灉鏂囦欢澶у皬杈惧埌棰勬湡锛岃繘琛孧D5鏍¢獙
+        if (size == fileSize) {
+            let ret = common.md5HashFile(downloadPath)
+            if (ret) {
+                let md5 = ret.map(v => v.toString(16).padStart(2, '0')).join('')
+                if (md5 == update_md5) {
+                    // MD5鏍¢獙鎴愬姛
+                    return true
+                }
+            }
+            // MD5鏍¢獙澶辫触锛屽垹闄ゆ枃浠�
+            common.systemBrief(`rm -rf "${downloadPath}"`)
+            return false
+        }
+        // 濡傛灉涓嬭浇瓒呮椂锛屽垹闄や笅杞界殑鏂囦欢骞朵笖閲嶅惎锛屽仠姝㈠紓姝ョ户缁笅杞�
+        if (new Date().getTime() - startTime > timeout) {
+            vf203.pwm.fail()
+            common.systemBrief(`rm -rf "${downloadPath}"`)
+            // 绔嬪嵆閲嶅惎
+            this.restart()
+            return false
+        }
+        
+        // 鏆傚仠100姣鍚庣户缁鏌�
+        os.sleep(100)
+    }
+}
+
+/**
+ * 绔嬪嵆閲嶅惎
+ */
+utils.restart = function () {
+    common.systemBrief("reboot -f")
+}
+
+export default utils

--
Gitblit v1.9.3