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/service/accessService.js | 501 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 501 insertions(+), 0 deletions(-)
diff --git a/vf205_access/src/service/accessService.js b/vf205_access/src/service/accessService.js
new file mode 100644
index 0000000..0bdd955
--- /dev/null
+++ b/vf205_access/src/service/accessService.js
@@ -0,0 +1,501 @@
+/**
+ * 闂ㄧ閫氳鏈嶅姟妯″潡
+ * 澶勭悊闂ㄧ閫氳鐩稿叧鐨勪笟鍔¢�昏緫锛屽寘鎷汉鑴�/瀵嗙爜鐧藉悕鍗曟牎楠屻�佹潈闄愬垽鏂�侀�氳璁板綍淇濆瓨绛�
+ */
+import logger from "../../dxmodules/dxLogger.js"
+import std from "../../dxmodules/dxStd.js"
+import config from "../../dxmodules/dxConfig.js"
+import common from "../../dxmodules/dxCommon.js"
+import map from '../../dxmodules/dxMap.js'
+import bus from '../../dxmodules/dxEventBus.js'
+import driver from "../driver.js"
+import mqttService from "./mqttService.js"
+import sqliteService from "./sqliteService.js"
+import utils from '../common/utils/utils.js'
+import http from "../../dxmodules/dxHttp.js"
+import grainService from './grainService.js'
+const accessService = {}
+
+/**
+ * 灏嗗崄杩涘埗鏁拌浆鎹负灏忕搴忓崄鍏繘鍒跺瓧绗︿覆
+ * @param {number} decimalNumber - 鍗佽繘鍒舵暟
+ * @param {number} byteSize - 瀛楄妭澶у皬
+ * @returns {string} 灏忕搴忓崄鍏繘鍒跺瓧绗︿覆
+ */
+function decimalToLittleEndianHex(decimalNumber, byteSize) {
+ const littleEndianBytes = [];
+ for (let i = 0; i < byteSize; i++) {
+ littleEndianBytes.push(decimalNumber & 0xFF);
+ decimalNumber >>= 8; // 鐩稿綋浜庨櫎浠�256
+ }
+ const littleEndianHex = littleEndianBytes
+ .map((byte) => byte.toString(16).padStart(2, '0'))
+ .join('');
+ return littleEndianHex;
+}
+
+/**
+ * 灏嗘暟鎹寘杞崲涓哄瓧绗︿覆鏍煎紡
+ * @param {object} pack - 鏁版嵁鍖呭璞�
+ * @returns {string} 杞崲鍚庣殑瀛楃涓�
+ */
+function pack2str(pack) {
+ pack.data = (!pack.data) ? [] : pack.data.match(/.{2}/g)
+ let len = decimalToLittleEndianHex(pack.data.length, 2)
+ let str = "55aa" + pack.cmd + pack.result + len + pack.data.join('')
+ let crc = common.calculateBcc([0x55, 0xaa, parseInt(pack.cmd, 16), parseInt(pack.result, 16), pack.data.length % 256, pack.data.length / 256].concat(pack.data.map(v => parseInt(v, 16))))
+ return str + crc.toString(16).padStart(2, '0')
+}
+
+/**
+ * 浜鸿劯/瀵嗙爜鐧藉悕鍗曟牎楠�
+ * @param {object} data - 閫氳鏁版嵁锛屽寘鍚玹ype锛堢爜鍒讹級鍜宑ode锛堢爜鍐呭锛�
+ * @param {string} fileName - 閫氳鍥剧墖鏂囦欢璺緞
+ * @param {boolean|undefined} similarity - 鐩镐技搴﹂獙璇佺粨鏋滐紝false琛ㄧず楠岃瘉澶辫触
+ * @returns {number|string|boolean} -1锛堝弬鏁伴敊璇級锛�0锛堥�氳鎴愬姛锛夛紝1锛堝湪绾块獙璇侊級锛宻tring锛堟牎楠屽け璐ョ殑鍘熷洜锛夛紝false锛堥�氳鍔犻攣锛�
+ */
+accessService.access = function (data, fileName, similarity) {
+ // 閫氳鍔犻攣锛岄槻姝㈤噸澶嶉獙璇�
+ let lockMap = map.get("access_lock")
+ if (lockMap.get("access_lock")) {
+ logger.error("[access]: 閫氳鍔犻攣锛岃绋嶅悗鍐嶈瘯")
+ return false
+ }
+ lockMap.put("access_lock", true)
+
+ try {
+ // 璁板綍閫氳鏃堕棿鎴�
+ data.time = Math.floor(Date.parse(new Date()) / 1000)
+
+ // 鏍规嵁code鏌ヨ鍑瘉
+ let res
+ if (data.type == "300") {
+ // 浜鸿劯绫诲瀷锛屼娇鐢╱serId鏌ヨ
+ res = sqliteService.d1_voucher.findByUserIdAndType(data.code, data.type)
+ } else {
+ // 鍏朵粬绫诲瀷锛屼娇鐢╟ode鏌ヨ
+ res = sqliteService.d1_voucher.findByCodeAndType(data.code, data.type)
+ }
+
+ // 鏉冮檺璁よ瘉缁撴灉
+ let ret = true
+ // 鏄惁鏄檶鐢熶汉
+ let isStranger = false
+
+ if (similarity === false) {
+ // 濡傛灉鐩镐技搴﹂獙璇佸け璐ワ紝鍒欎笉杩涜璁よ瘉
+ ret = false
+ isStranger = true
+ } else {
+ // 楠岃瘉鍑瘉鏄惁瀛樺湪
+ if (res.length == 0) {
+ logger.error("[access]: 閫氳澶辫触锛屾病鏌ヨ鍒板嚟璇侊紒")
+ ret = false
+ isStranger = true
+ } else {
+ // 鍑瘉瀛樺湪锛岃幏鍙栫敤鎴蜂俊鎭�
+ data.userId = res[0].userId
+ data.keyId = res[0].id
+
+ // 鏍规嵁userId鏌ヨ浜哄憳淇℃伅
+ res = sqliteService.d1_person.findByUserId(data.userId)
+ if (res.length == 0) {
+ logger.error("[access]: 閫氳澶辫触锛屾病鏌ヨ鍒颁汉鍛橈紒")
+ ret = false
+ isStranger = true
+ } else {
+ // 鑾峰彇浜哄憳濮撳悕銆佽韩浠借瘉鍙峰拰韬唤绫诲瀷
+ let idCard
+ let userType = 0
+ try {
+ idCard = JSON.parse(res[0].extra).idCard
+ userType = JSON.parse(res[0].extra).type || 0
+ } catch (error) {
+ logger.error("鏃犺韩浠借瘉鍙锋垨绫诲瀷")
+ }
+ data.extra = { name: res[0].name, idCard: idCard, type: userType }
+ }
+
+ // 澶勭悊鍙屼汉璁よ瘉淇℃伅
+ if (data.dualAuthInfo) {
+ logger.info("[access]: 澶勭悊鍙屼汉璁よ瘉淇℃伅: " + JSON.stringify(data.dualAuthInfo))
+ // 瀛樺偍绗竴鐢ㄦ埛淇℃伅
+ let firstUserId = data.dualAuthInfo.firstUserId
+ // 鏌ヨ绗竴鐢ㄦ埛鐨勮缁嗕俊鎭�
+ let res1 = sqliteService.d1_person.findByUserId(firstUserId)
+ if (res1.length > 0) {
+ // 鑾峰彇绗竴鐢ㄦ埛鐨勫鍚嶃�佽韩浠借瘉鍙峰拰韬唤绫诲瀷
+ let idCard1
+ let firstUserType = 0
+ try {
+ idCard1 = JSON.parse(res1[0].extra).idCard
+ firstUserType = JSON.parse(res1[0].extra).type || 0
+ } catch (error) {
+ logger.error("鏃犵涓�鐢ㄦ埛韬唤璇佸彿鎴栫被鍨�")
+ }
+ data.userId = firstUserId
+ data.extra = { name: res1[0].name, idCard: idCard1, type: firstUserType }
+ } else {
+ // 濡傛灉娌℃湁鏌ヨ鍒扮涓�鐢ㄦ埛淇℃伅锛屼娇鐢ㄩ粯璁ゅ��
+ data.userId = firstUserId
+ data.extra = { name: data.dualAuthInfo.firstUserName, idCard: "", type: 0 }
+ }
+ // 瀛樺偍绗簩鐢ㄦ埛淇℃伅
+ data.userId2 = data.dualAuthInfo.secondUserId
+ // 鏌ヨ绗簩鐢ㄦ埛鐨勮缁嗕俊鎭�
+ let res2 = sqliteService.d1_person.findByUserId(data.dualAuthInfo.secondUserId)
+ if (res2.length > 0) {
+ // 鑾峰彇绗簩鐢ㄦ埛鐨勫鍚嶅拰韬唤璇佸彿
+ let idCard2
+ let secondUserType = 0
+ try {
+ idCard2 = JSON.parse(res2[0].extra).idCard
+ secondUserType = JSON.parse(res2[0].extra).type || 0
+ } catch (error) {
+ logger.error("鏃犵浜岀敤鎴疯韩浠借瘉鍙锋垨绫诲瀷")
+ }
+ data.extra2 = { name: res2[0].name, idCard: idCard2 }
+ // 瀛樺偍绗簩鐢ㄦ埛鐨勬潈闄怚D锛堣韩浠界被鍨嬶級
+ data.permissionId2 = secondUserType.toString()
+ } else {
+ // 濡傛灉娌℃湁鏌ヨ鍒扮浜岀敤鎴蜂俊鎭紝浣跨敤榛樿鍊�
+ data.extra2 = { name: data.dualAuthInfo.secondUserName, idCard: "" }
+ data.permissionId2 = ""
+ }
+ // 澶勭悊绗竴鐢ㄦ埛鐨勪汉鑴稿浘鐗�
+ if (data.firstUserFileName) {
+ let firstUserSrc = `/app/data/passRecord/${firstUserId}_${data.time}_1.jpg`
+ std.ensurePathExists(firstUserSrc) // 纭繚鐩綍瀛樺湪
+ if (std.exist(data.firstUserFileName)) {
+ // 绉诲姩鍥剧墖鍒版寚瀹氱洰褰�
+ common.systemBrief(`mv ${data.firstUserFileName} ${firstUserSrc}`)
+ // 鏇存柊data涓殑code涓虹涓�鐢ㄦ埛鐨勫浘鐗囪矾寰�
+ data.code = firstUserSrc
+ }
+ }
+ // 澶勭悊绗簩鐢ㄦ埛鐨勪汉鑴稿浘鐗�
+ if (fileName) {
+ let secondUserSrc = `/app/data/passRecord/${data.userId2}_${data.time}_2.jpg`
+ std.ensurePathExists(secondUserSrc) // 纭繚鐩綍瀛樺湪
+ if (std.exist(fileName)) {
+ // 绉诲姩鍥剧墖鍒版寚瀹氱洰褰�
+ common.systemBrief(`mv ${fileName} ${secondUserSrc}`)
+ // 鏇存柊data涓殑code2涓虹浜岀敤鎴风殑鍥剧墖璺緞
+ data.code2 = secondUserSrc
+ }
+ }
+ }
+ }
+
+ // 楠岃瘉鏉冮檺
+ if (ret) {
+ // 鏍规嵁userId鏌ヨ鏉冮檺
+ res = sqliteService.d1_permission.findByUserId(data.userId)
+ if (res && res.length > 0 && judgmentPermission(res)) {
+ logger.info("[access]: 鏉冮檺璁よ瘉閫氳繃")
+ ret = true
+ // 瀛樺偍鐢ㄦ埛韬唤绫诲瀷浣滀负鏉冮檺ID锛堟湰绯荤粺涓韩浠藉嵆鏉冮檺锛�
+ let userType = 0
+ try {
+ if (data.extra) {
+ userType = data.extra.type || 0
+ } else {
+ // 浠庢暟鎹簱鏌ヨ鐢ㄦ埛淇℃伅鑾峰彇韬唤绫诲瀷
+ let userRes = sqliteService.d1_person.findByUserId(data.userId)
+ if (userRes && userRes.length > 0) {
+ userType = JSON.parse(userRes[0].extra).type || 0
+ }
+ }
+ } catch (error) {
+ logger.error("瑙f瀽鐢ㄦ埛绫诲瀷澶辫触")
+ }
+ data.permissionId = userType.toString()
+ // 鏆傚仠浜鸿劯璁よ瘉鍔熻兘
+ driver.face.status(false)
+ logger.info("[access]: 鏆傚仠浜鸿劯璁よ瘉鍔熻兘")
+ } else {
+ logger.info("[access]: 鏃犳潈闄�")
+ ret = false
+ }
+ }
+
+ // 鏃犳潈闄愭椂锛屽皾璇曞湪绾块獙璇�
+ if (!ret && config.get('mqtt.onlinecheck') == 1 && driver.mqtt.getStatus()) {
+ logger.info("[access]: 鏃犳潈闄愶紝璧板湪绾块獙璇�")
+ let serialNo = std.genRandomStr(10)
+ driver.mqtt.send("access_device/v2/event/access_online", JSON.stringify(mqttService.mqttReply(serialNo, data, mqttService.CODE.S_000)))
+ driver.alsa.play(`/app/code/resource/${config.get("base.language") == "CN" ? "CN" : "EN"}/wav/verify.wav`)
+
+ // 绛夊緟鍦ㄧ嚎楠岃瘉缁撴灉
+ let payload = driver.mqtt.getOnlinecheck()
+ if (payload && payload.serialNo == serialNo && payload.code == '000000') {
+ ret = true
+ // 鏆傚仠浜鸿劯璁よ瘉鍔熻兘
+ driver.face.status(false)
+ logger.info("[access]: 鏆傚仠浜鸿劯璁よ瘉鍔熻兘")
+ } else {
+ logger.info("[access]: 鍦ㄧ嚎楠岃瘉澶辫触")
+ ret = false
+ }
+ }
+ }
+
+ // 纭畾璇煶鏂囦欢鍚嶇О
+ let alsaFile = (data.type).toString().startsWith("10") ? '10x' : data.type
+
+ //鏆傚仠浜鸿劯璁よ瘉鍔熻兘
+
+
+ if (ret == true) {
+ // 楠岃瘉姘斾綋娴撳害
+ grainService.checkGasConcentration(function() {
+ // 浠庡瓨鍌ㄧ殑姘斾綋鏁版嵁涓幏鍙栭獙璇佺粨鏋�
+ const gasData = grainService.getGasData()
+
+ if(gasData && gasData.data && gasData.data.status === "0") {
+ logger.info("[access]: 姘斾綋娴撳害楠岃瘉鍚堟牸")
+ // 閫氳鎴愬姛澶勭悊
+ driver.screen.accessSuccess()
+ logger.info("[access]: 閫氳鎴愬姛")
+
+ // 鏄剧ず閫氳鎴愬姛缁撴灉
+ bus.fire("showAccessResult", {
+ faceAuth: true,
+ gasConcentration: true,
+ accessAllowed: true,
+ message: "*浠撳唴姘斾綋娴撳害鍚堟牸锛屽厑璁搁�氳*"
+ })
+
+ // 瑙﹀彂閫氳鎴愬姛浜嬩欢锛岄�氱煡UI鏇存柊
+ bus.fire("accessSuccess", { data: data, fileName: fileName })
+ driver.alsa.play(`/app/code/resource/${config.get("base.language") == "CN" ? "CN" : "EN"}/wav/access_s.wav`)
+ driver.gpio.open() // 寮�闂�
+ savePassPic(data, fileName) // 淇濆瓨閫氳鍥剧墖
+ reply(data, true) // 涓婃姤閫氳璁板綍
+ } else {
+ logger.info("[access]: 姘斾綋娴撳害楠岃瘉涓嶅悎鏍�")
+ // 閫氳澶辫触澶勭悊
+ driver.screen.accessFail()
+ logger.error("[access]: 閫氳澶辫触")
+ // 瑙﹀彂澶辫触寮圭獥
+ bus.fire("showAccessResult", {
+ faceAuth: true,
+ gasConcentration: false,
+ accessAllowed: false,
+ message: "*浠撳唴姘斾綋娴撳害涓嶅悎鏍硷紝绂佹閫氳*"
+ })
+ if (utils.isEmpty(similarity)) {
+ driver.alsa.play(`/app/code/resource/${config.get("base.language") == "CN" ? "CN" : "EN"}/wav/access_f.wav`)
+ }
+ // if (isStranger && !config.get("sys.strangerImage")) {
+ // // 闄岀敓浜轰笉淇濆瓨鐓х墖
+ // } else {
+ // savePassPic(data, fileName)
+ // }
+ savePassPic(data, fileName)
+ // 娣诲姞姘斾綋娴撳害澶辫触淇℃伅
+ data.message = "姘斾綋娴撳害涓嶅悎鏍�"
+ reply(data, false) // 涓婃姤閫氳璁板綍
+ }
+ })
+
+ } else {
+ // 閫氳澶辫触澶勭悊
+ driver.screen.accessFail()
+ logger.error("[access]: 閫氳澶辫触")
+ // 瑙﹀彂澶辫触寮圭獥
+ bus.fire("showAccessResult", {
+ faceAuth: true,
+ gasConcentration: false,
+ accessAllowed: false,
+ message: "*鏉冮檺璁よ瘉澶辫触锛岀姝㈤�氳*"
+ })
+ if (utils.isEmpty(similarity)) {
+ driver.alsa.play(`/app/code/resource/${config.get("base.language") == "CN" ? "CN" : "EN"}/wav/recg_f.wav`)
+ }
+ // if (isStranger && !config.get("sys.strangerImage")) {
+ // // 闄岀敓浜轰笉淇濆瓨鐓х墖
+ // } else {
+ // savePassPic(data, fileName)
+ // }
+ savePassPic(data, fileName)
+
+ reply(data, false) // 涓婃姤閫氳璁板綍
+ }
+ } catch (error) {
+ logger.error(error)
+ }
+
+ // 璇煶鎾姤闇�瑕佹椂闂达紝鎵�浠ュ欢杩�1绉掕В閿�
+ std.sleep(1000)
+ lockMap.put("access_lock", false)
+ logger.error("[access]: 瑙i攣鎴愬姛")
+ // 瑙﹀彂閫氳瑙i攣瀹屾垚浜嬩欢锛岄�氱煡UI閲嶇疆
+ // bus.fire("accessUnlockComplete")
+}
+
+/**
+ * 淇濆瓨閫氳鍥剧墖
+ * @param {object} data - 閫氳鏁版嵁
+ * @param {string} fileName - 鍥剧墖鏂囦欢璺緞
+ */
+function savePassPic(data, fileName) {
+ if (data.type == "300") { // 浠呭鐞嗕汉鑴哥被鍨�
+ // 濡傛灉鏄弻浜鸿璇侊紝宸茬粡鍦ㄥ鐞嗗弻浜鸿璇佷俊鎭椂淇濆瓨浜嗗浘鐗囷紝杩欓噷璺宠繃
+ if (data.dualAuthInfo) {
+ return
+ }
+ let src = `/app/data/passRecord/${data.userId}_${data.time}.jpg`
+ std.ensurePathExists(src) // 纭繚鐩綍瀛樺湪
+ if (std.exist(fileName)) {
+ // 绉诲姩鍥剧墖鍒版寚瀹氱洰褰�
+ common.systemBrief(`mv ${fileName} ${src}`)
+ // 鍙竻鐞嗗師濮嬩复鏃跺浘鐗囨枃浠讹紙浠ユ椂闂存埑鍛藉悕鐨勬枃浠讹級锛屼繚鐣欒皟鏁村悗鐨勫浘鐗囨枃浠�
+ common.systemBrief(`rm -rf /app/data/user/temp/[0-9]*.jpg`)
+ // 鏇存柊data涓殑code涓哄浘鐗囪矾寰�
+ data.code = src
+ } else {
+ logger.error("[access]: 閫氳澶辫触锛屽浘鐗囦笉瀛樺湪锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛�" + fileName)
+ }
+ }
+}
+
+/**
+ * 鏍¢獙鏉冮檺鏃堕棿鏄惁鍙互閫氳
+ * @param {array} permissions - 鏉冮檺璁板綍鏁扮粍
+ * @returns {boolean} true琛ㄧず鏈夋潈闄愶紝false琛ㄧず鏃犳潈闄�
+ */
+function judgmentPermission(permissions) {
+ let currentTime = Math.floor(Date.now() / 1000)
+ for (let permission of permissions) {
+ if (permission.timeType == 0) {
+ // 姘镐箙鏉冮檺
+ return true
+ } else if (permission.beginTime <= currentTime && currentTime <= permission.endTime) {
+ if (permission.timeType == 1) {
+ // 鏃堕棿娈垫潈闄�
+ return true
+ }
+ if (permission.timeType == 2) {
+ // 姣忔棩鏉冮檺
+ let seconds = Math.floor((new Date() - new Date().setHours(0, 0, 0, 0)) / 1000);
+ if (permission.repeatBeginTime <= seconds && seconds <= permission.repeatEndTime) {
+ return true
+ }
+ }
+ if (permission.timeType == 3 && permission.period) {
+ // 鍛ㄩ噸澶嶆潈闄�
+ let dayTimes = JSON.parse(permission.period)[new Date().getDay() + 1]
+ if (dayTimes && dayTimes.split("|").some((dayTime) => isCurrentTimeInTimeRange(dayTime))) {
+ return true
+ }
+ }
+ }
+ }
+ return false
+}
+
+/**
+ * 鍒ゆ柇褰撳墠鏃堕棿鏄惁鍦ㄦ椂闂存鍐�
+ * @param {string} time - 鏃堕棿娈靛瓧绗︿覆锛屾牸寮忓"15:00-19:00"
+ * @returns {boolean} true琛ㄧず褰撳墠鏃堕棿鍦ㄦ椂闂存鍐咃紝false琛ㄧず涓嶅湪
+ */
+function isCurrentTimeInTimeRange(time) {
+ // 鍒嗗壊寮�濮嬫椂闂村拰缁撴潫鏃堕棿
+ let [startTime, endTime] = time.split('-');
+ // 瑙f瀽寮�濮嬫椂闂寸殑灏忔椂鍜屽垎閽�
+ let [startHour, startMinute] = startTime.split(':');
+ // 瑙f瀽缁撴潫鏃堕棿鐨勫皬鏃跺拰鍒嗛挓
+ let [endHour, endMinute] = endTime.split(':');
+
+ // 鑾峰彇褰撳墠鏃堕棿
+ let currentTime = new Date();
+
+ // 鍒涘缓寮�濮嬫椂闂寸殑鏃ユ湡瀵硅薄
+ let startDate = new Date();
+ startDate.setHours(parseInt(startHour, 10));
+ startDate.setMinutes(parseInt(startMinute, 10));
+ // 鍒涘缓缁撴潫鏃堕棿鐨勬棩鏈熷璞�
+ let endDate = new Date();
+ endDate.setHours(parseInt(endHour, 10));
+ endDate.setMinutes(parseInt(endMinute, 10));
+
+ // 妫�鏌ュ綋鍓嶆椂闂存槸鍚﹀湪鏃堕棿鑼冨洿鍐�
+ return currentTime >= startDate && currentTime <= endDate;
+}
+
+/**
+ * 閫氳璁板綍涓婃姤
+ * @param {object} data - 閫氳鏁版嵁
+ * @param {boolean} result - 閫氳缁撴灉锛宼rue琛ㄧず鎴愬姛锛宖alse琛ㄧず澶辫触
+ */
+function reply(data, result) {
+ // 浣跨敤绾跨▼澶勭悊鏁翠釜reply鍑芥暟锛岄伩鍏嶅牭濉炰富杩涚▼
+ std.setTimeout(() => {
+ try {
+ // 鏋勫缓閫氳璁板綍
+ let record = {
+ id: std.genRandomStr(16),
+ result: result ? 0 : 1, // 0琛ㄧず鎴愬姛锛�1琛ㄧず澶辫触
+ }
+
+ // 澶嶅埗data涓殑瀛楁锛屾帓闄xtra鍜宔xtra2
+ for (const key in data) {
+ if (key !== 'extra' && key !== 'extra2' && !(key in record)) {
+ record[key] = data[key]
+ }
+ }
+
+ // 澶勭悊extra瀛楁
+ if (data.extra) {
+ record.extra = JSON.stringify(data.extra)
+ }
+
+ // 澶勭悊extra2瀛楁
+ if (data.extra2) {
+ record.extra2 = JSON.stringify(data.extra2)
+ }
+
+ // 瀛樺偍閫氳璁板綍锛屽垽鏂笂闄�
+ let count = sqliteService.d1_pass_record.count()
+ let configNum = config.get("access.offlineAccessNum");
+ configNum = configNum ? configNum : 2000;
+
+ if (configNum > 0) {
+ if (count >= configNum) {
+ // 杈惧埌鏈�澶у瓨鍌ㄦ暟閲忥紝鍒犻櫎鏈�鏃х殑璁板綍
+ let lastRecord = sqliteService.d1_pass_record.findAllOrderBytimeDesc({ page: 0, size: 1 })
+ if (lastRecord && lastRecord.length == 1) {
+ // 濡傛灉鏄汉鑴歌褰曪紝鍒犻櫎瀵瑰簲鐨勫浘鐗囨枃浠�
+ if (lastRecord[0].type == 300) {
+ common.systemBrief(`rm -rf ${lastRecord[0].code}`)
+ }
+ sqliteService.d1_pass_record.deleteByid(lastRecord[0].id)
+ }
+ }
+ // 淇濆瓨鏂拌褰�
+ sqliteService.d1_pass_record.save(record)
+ }
+
+ // // 鐢熸垚搴忓垪鍙�
+ // let serialNo = std.genRandomStr(10)
+
+ // // 澶勭悊浜鸿劯鍥剧墖
+ // if (record.type == 300) {
+ // let m = map.get("faceAccesss")
+ // m.del(serialNo)
+ // m.put(serialNo, record.code ? record.code : "")
+ // // 灏嗗浘鐗囪浆鎹负base64鏍煎紡
+ // record.code = driver.face.fileToBase64(record.code)
+ // }
+
+ // // 鏋勫缓MQTT娑堟伅骞跺彂閫�
+ // let payload = mqttService.mqttReply(serialNo, [record], mqttService.CODE.S_000)
+ // driver.mqtt.send("access_device/v2/event/access", JSON.stringify(payload))
+ } catch (error) {
+ logger.error(`[accessService]: 澶勭悊閫氳璁板綍澶辫触: ${error.message}`)
+ }
+ }, 0)
+}
+
+export default accessService
--
Gitblit v1.9.3