From eb93ce805b9bb4813df6ed1dc56bdd7fc1370209 Mon Sep 17 00:00:00 2001 From: liyi Date: Sat, 8 Mar 2025 16:33:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E9=AA=8C=E6=94=B6=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=94=B9=E5=8A=A8=E3=80=81=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common.js | 49 ++++++++++++++------------- star-cloud/generalExtend.js | 67 +++++++++++++++++++++++++++++++------ uni/index.js | 50 +++++++++++++++++++++++---- 3 files changed, 126 insertions(+), 40 deletions(-) diff --git a/common.js b/common.js index d99d14d..5cf6670 100644 --- a/common.js +++ b/common.js @@ -961,7 +961,7 @@ export async function parsingCharacteristicValue(binaryData) { cardId: this.requestParams.cardId, cardRight: this.requestParams.isAdmin, lockId: this.lockInfo.lockId, - cardNumber: this.requestParams.cardNo, + cardNumber: this.requestParams.cardNumber, cardType: this.requestParams.cardType, cardUserNo: this.requestParams.cardUserNo }) @@ -1002,12 +1002,12 @@ export async function parsingCharacteristicValue(binaryData) { isCoerced: this.requestParams.isForce, cardRight: this.requestParams.isAdmin, lockId: this.lockInfo.lockId, - cardNumber: this.requestParams.cardNo, + cardNumber: this.requestParams.cardNumber, cardUserNo: this.requestParams.cardUserNo }) if (addResult.code === Result.Success.code) { // 增加返回一个卡序号 - addResult.data.cardNo = decrypted[6] * 256 + decrypted[7]; + addResult.data.cardNumber = decrypted[6] * 256 + decrypted[7]; } // 触发卡片确认事件 emitRegisterCardConfirmEvent(addResult) @@ -1026,7 +1026,6 @@ export async function parsingCharacteristicValue(binaryData) { this.characteristicValueCallback(new Result(Result.Success.code, { maxRegCount: decrypted[11], }, Result.Success.message)) - await this.disconnectDevice() break; case 1: // 修改 @@ -1043,6 +1042,8 @@ export async function parsingCharacteristicValue(binaryData) { const deleteResult = await deleteFingerprintRequest({ fingerprintId: this.requestParams.fingerprintId, lockId: this.lockInfo.lockId, + fingerprintNumber: this.requestParams.fingerprintNumber, + deleteType: this.requestParams.deleteType || 1, }) this.characteristicValueCallback(deleteResult) await this.disconnectDevice() @@ -1068,23 +1069,26 @@ export async function parsingCharacteristicValue(binaryData) { }) break; case subCmdIds.registerFingerprintConfirm: - if (this.requestParams.operate === 0) { - const addResult = await addFingerprintRequest({ - ...this.requestParams, - isCoerced: this.requestParams.isForce, - fingerRight: this.requestParams.isAdmin, - lockId: this.lockInfo.lockId, - fingerprintNumber: this.requestParams.no || this.requestParams.fingerprintNumber, - fingerprintUserNo: this.requestParams.fingerprintUserNo - }) - if (addResult.code === Result.Success.code) { - // 增加返回一个指纹序号 - addResult.data.fingerprintNumber = decrypted[9] * 256 + decrypted[10]; + if (decrypted[2] === Result.Success.code) { + if (this.requestParams.operate === 0) { + const addResult = await addFingerprintRequest({ + ...this.requestParams, + isCoerced: this.requestParams.isForce, + fingerRight: this.requestParams.isAdmin, + lockId: this.lockInfo.lockId, + fingerprintNumber: this.requestParams.fingerprintNumber, + fingerprintUserNo: this.requestParams.fingerprintUserNo + }) + if (addResult.code === Result.Success.code) { + // 增加返回一个指纹序号 + addResult.data.fingerprintNumber = decrypted[6] * 256 + decrypted[7]; + } + console.log('registerFingerprintConfirm', decrypted) + // 触发指纹确认事件 + emitRegisterFingerprintConfirmEvent(addResult) + // 断开蓝牙连接 + await this.disconnectDevice() } - // 触发指纹确认事件 - emitRegisterFingerprintConfirmEvent(addResult) - // 断开蓝牙连接 - await this.disconnectDevice() } break; case subCmdIds.registerFace: @@ -1096,7 +1100,6 @@ export async function parsingCharacteristicValue(binaryData) { this.characteristicValueCallback(new Result(Result.Success.code, { maxRegCount: decrypted[11], }, Result.Success.message)) - await this.disconnectDevice() break; case 1: // 修改 @@ -1144,12 +1147,12 @@ export async function parsingCharacteristicValue(binaryData) { isCoerced: this.requestParams.isForce, fingerRight: this.requestParams.isAdmin, lockId: this.lockInfo.lockId, - faceNumber: this.requestParams.no || this.requestParams.faceNumber, + faceNumber: this.requestParams.faceNumber, faceUserNo: this.requestParams.faceUserNo }) if (addResult.code === Result.Success.code) { // 增加返回一个序号 - addResult.data.faceNumber = decrypted[9] * 256 + decrypted[10]; + addResult.data.faceNumber = decrypted[6] * 256 + decrypted[7]; } // 触发事件 emitRegisterFaceConfirmEvent(addResult) diff --git a/star-cloud/generalExtend.js b/star-cloud/generalExtend.js index 6bd81ad..f95e3dc 100644 --- a/star-cloud/generalExtend.js +++ b/star-cloud/generalExtend.js @@ -11,7 +11,7 @@ import { clearAllIcCard, deleteIcCardRequest, getFingerprintListRequest, - getIcCardListRequest, + getIcCardListRequest, getPalmVeinListRequest, getRemoteListRequest, updateIcCardRequest } from "../api.js"; @@ -24,7 +24,7 @@ import { */ function _checkRequiredFields(params, requiredFields) { for (let field of requiredFields) { - if (!params[field]) { + if (params[field] === undefined || params[field] === null) { return `${field} 不能为空`; } } @@ -33,10 +33,10 @@ function _checkRequiredFields(params, requiredFields) { /** - * 注册扩展产品(卡片、指纹等) + * 注册扩展产品(卡片、指纹、人脸、遥控、掌静脉等) * * @param {Object} params - 所需参数 - * @param {string} params.type - 产品类型,['card','fingerprint','face'] + * @param {string} params.type - 产品类型,['card','fingerprint','face','remote','palmVein'] * @param {string} params.keyId - 钥匙 ID * @param {string} params.uid - 用户 ID * @param {number} params.userCountLimit - 使用次数限制,整型,0xFFFF 表示不限次数 @@ -49,23 +49,28 @@ function _checkRequiredFields(params, requiredFields) { * @param {number} params.endDate - 失效日期,时间戳,永久则填0 * @param {string} params.startTime - 生效时间,字符串,例如:'00:00' * @param {string} params.endTime - 失效时间,字符串,例如:'00:00' - * @param {number} params.cardId - 卡片Id,仅当 type 为 'card' 且operate=1 时需要 - * @param {number} params.cardNo - 卡片序号,仅当 type 为 'card' 时需要 + * @param {number} params.cardId - 卡片Id,添加后由监听事件返回,仅当 type 为 'card' 且operate!=1 时需要 + * @param {number} params.cardNumber - 卡片序号,仅当 type 为 'card' 时需要 * @param {string} params.cardName - 卡片名称,仅当 type 为 'card' 时需要 * @param {number} params.cardType - 卡片类型,1:永久,2:期限,4:循环,仅当 type 为 'card' 时需要 * @param {number} params.cardUserNo - 卡UserNo,仅当 type 为 'card' 时需要 (选填) + * @param {number} params.fingerprintId - 指纹id,添加后由监听事件返回,仅当 type 为 'fingerprint' 且operate!=1 时需要 * @param {number} params.fingerprintName - 指纹名,仅当 type 为 'fingerprint' 时需要 * @param {string} params.fingerprintNumber - 指纹序号,仅当 type 为 'fingerprint' 时需要 * @param {number} params.fingerprintType - 指纹类型,1:永久,2:期限,3:单次,4:循环,仅当 type 为 'fingerprint' 时需要 * @param {number} params.fingerprintUserNo - 指纹UserNo,仅当 type 为 'fingerprint' 时需要 (选填) + * @param {number} params.deleteType - 删除方式,仅当 type 为 'fingerprint' 时需要 删除方式:1-通过APP走蓝牙删除,必需先通过APP蓝牙删除后再调用该接口,2-通过网关或WiFi锁删除,如果是WiFi锁或有连接网关,则可以传2,直接调用该接口从锁里删除指纹 + * @param {number} params.faceId - 人脸id,添加后由监听事件返回,仅当 type 为 'face' 且operate!=1 时需要 * @param {number} params.faceName - 人脸名,仅当 type 为 'face' 时需要 * @param {string} params.faceNumber - 指纹序号,仅当 type 为 'face' 时需要 * @param {number} params.faceType - 指纹类型,1:永久,2:期限,4:循环,仅当 type 为 'face' 时需要 * @param {number} params.faceUserNo - 指纹UserNo,仅当 type 为 'face' 时需要 (选填) + * @param {number} params.palmVeinId - 掌静脉id,添加后由监听事件返回,仅当 type 为 'palmVein' 且operate!=1 时需要 * @param {number} params.palmVeinName - 掌静脉名,仅当 type 为 'palmVein' 时需要 * @param {string} params.palmVeinNumber - 掌静脉序号,仅当 type 为 'palmVein' 时需要 * @param {number} params.palmVeinType - 掌静脉类型,1:永久,2:期限,4:循环,仅当 type 为 'palmVein' 时需要 * @param {number} params.palmVeinUserNo - 掌静脉UserNo,仅当 type 为 'palmVein' 时需要 (选填) + * @param {number} params.remoteId - 遥控名,添加后由监听事件返回,仅当 type 为 'remote' 且operate!=1 时需要 * @param {number} params.remoteName - 遥控名,仅当 type 为 'remote' 时需要 * @param {string} params.remoteNumber - 遥控序号,仅当 type 为 'remote' 时需要 * @param {number} params.remoteType - 遥控类型,1:永久,2:期限,4:循环,仅当 type 为 'remote' 时需要 @@ -83,7 +88,7 @@ export async function registerExtendedProducts(params) { if (params.type === 'card') { // 注册卡片时的参数校验 if (params.operate === 0) { - const cardRequiredFields = ['cardName', 'cardType', 'cardNo']; + const cardRequiredFields = ['cardName', 'cardType', 'cardNumber']; const missingField = _checkRequiredFields(params, cardRequiredFields); if (missingField) { return new Result(Result.NotMoreData, null, `卡片信息不完整: ${missingField}`); @@ -105,7 +110,7 @@ export async function registerExtendedProducts(params) { cardRequiredFields.push('cardType') } if (params.operate === 2) { - cardRequiredFields.push('cardNo') + cardRequiredFields.push('cardNumber') } const missingField = _checkRequiredFields(params, cardRequiredFields); if (missingField) { @@ -139,6 +144,7 @@ export async function registerExtendedProducts(params) { cardRequiredFields.push('fingerprintType') } if (params.operate === 2) { + cardRequiredFields.push('deleteType') cardRequiredFields.push('fingerprintNumber') } const missingField = _checkRequiredFields(params, cardRequiredFields); @@ -255,11 +261,12 @@ export async function registerExtendedProducts(params) { // 操作后不断开蓝牙 params.disconnect = false; + console.log('params', params) + let { type, keyId, uid, - cardNo, operate, isAdmin, userCountLimit, @@ -328,8 +335,24 @@ export async function registerExtendedProducts(params) { contentArray[i + 44] = uid.charCodeAt(i) } - contentArray[64] = (cardNo || 0) / 256 - contentArray[65] = (cardNo || 0) % 256 + // 子命令 + if (type === 'card') { + contentArray[64] = (params.cardNumber || 0) / 256 + contentArray[65] = (params.cardNumber || 0) % 256 + } else if (type === 'fingerprint') { + contentArray[64] = (params.fingerprintNumber || 0) / 256 + contentArray[65] = (params.fingerprintNumber || 0) % 256 + } else if (type === 'face') { + contentArray[64] = (params.faceNumber || 0) / 256 + contentArray[65] = (params.faceNumber || 0) % 256 + } else if (type === 'remote') { + contentArray[64] = (params.remoteNumber || 0) / 256 + contentArray[65] = (params.remoteNumber || 0) % 256 + } else if (type === 'palmVein') { + contentArray[64] = (params.palmVeinNumber || 0) / 256 + contentArray[65] = (params.palmVeinNumber || 0) % 256 + } + contentArray[66] = (userCountLimit || 0xffff) / 256 contentArray[67] = (userCountLimit || 0xffff) % 256 contentArray[68] = operate @@ -489,4 +512,26 @@ export async function getIcCardList(params) { */ export async function getFingerprintList(params) { return await getFingerprintListRequest(params) +} + +/** + * 获取掌静脉列表 + * @param params.lockId 锁id (必填) + * @param params.pageNo 页码(选填) + * @param params.pageSize 每页显示数(选填) + * @returns {Promise} + */ +export async function getPalmVeinList(params) { + return await getPalmVeinListRequest(params) +} + +/** + * 获取掌静脉列表 + * @param params.lockId 锁id (必填) + * @param params.pageNo 页码(选填) + * @param params.pageSize 每页显示数(选填) + * @returns {Promise} + */ +export async function getRemoteList(params) { + return await getRemoteListRequest(params) } \ No newline at end of file diff --git a/uni/index.js b/uni/index.js index dee03f9..fda93d5 100644 --- a/uni/index.js +++ b/uni/index.js @@ -1,5 +1,6 @@ import starCloudInstance from '../star-cloud' import { Result } from '../constant' +import {getPalmVeinListRequest, getRemoteListRequest} from "../api.js"; export { Result } @@ -266,10 +267,10 @@ export const refreshHotWaterInfo = async params => { /** - * 注册扩展产品(卡片、指纹等) + * 注册扩展产品(卡片、指纹、人脸、遥控、掌静脉等) * * @param {Object} params - 所需参数 - * @param {string} params.type - 产品类型,['card','fingerprint'] + * @param {string} params.type - 产品类型,['card','fingerprint','face','remote','palmVein'] * @param {string} params.keyId - 钥匙 ID * @param {string} params.uid - 用户 ID * @param {number} params.userCountLimit - 使用次数限制,整型,0xFFFF 表示不限次数 @@ -278,19 +279,36 @@ export const refreshHotWaterInfo = async params => { * @param {number} params.isForce - 是否胁迫,整型,1 表示是,0 表示否 * @param {number} params.isRound - 是否循环,整型,1 表示是,0 表示否 * @param {array} params.weekDays - 循环周期,数组,Bit0 -- 6 置位分别代表周日 -- 周六,例如:循环星期一、星期二、星期四,对应为:[1,2,4] - * @param {number} params.startDate - 生效日期,时间戳 - * @param {number} params.endDate - 失效日期,时间戳 + * @param {number} params.startDate - 生效日期,时间戳,永久则填0 + * @param {number} params.endDate - 失效日期,时间戳,永久则填0 * @param {string} params.startTime - 生效时间,字符串,例如:'00:00' * @param {string} params.endTime - 失效时间,字符串,例如:'00:00' - * @param {number} params.cardId - 卡片Id,仅当 type 为 'card' 且operate=1 时需要 - * @param {number} params.cardNo - 卡片序号,仅当 type 为 'card' 时需要 + * @param {number} params.cardId - 卡片Id,添加后由监听事件返回,仅当 type 为 'card' 且operate!=1 时需要 + * @param {number} params.cardNumber - 卡片序号,仅当 type 为 'card' 时需要 * @param {string} params.cardName - 卡片名称,仅当 type 为 'card' 时需要 * @param {number} params.cardType - 卡片类型,1:永久,2:期限,4:循环,仅当 type 为 'card' 时需要 * @param {number} params.cardUserNo - 卡UserNo,仅当 type 为 'card' 时需要 (选填) + * @param {number} params.fingerprintId - 指纹id,添加后由监听事件返回,仅当 type 为 'fingerprint' 且operate!=1 时需要 * @param {number} params.fingerprintName - 指纹名,仅当 type 为 'fingerprint' 时需要 * @param {string} params.fingerprintNumber - 指纹序号,仅当 type 为 'fingerprint' 时需要 * @param {number} params.fingerprintType - 指纹类型,1:永久,2:期限,3:单次,4:循环,仅当 type 为 'fingerprint' 时需要 * @param {number} params.fingerprintUserNo - 指纹UserNo,仅当 type 为 'fingerprint' 时需要 (选填) + * @param {number} params.deleteType - 删除方式,仅当 type 为 'fingerprint' 时需要 删除方式:1-通过APP走蓝牙删除,必需先通过APP蓝牙删除后再调用该接口,2-通过网关或WiFi锁删除,如果是WiFi锁或有连接网关,则可以传2,直接调用该接口从锁里删除指纹 + * @param {number} params.faceId - 人脸id,添加后由监听事件返回,仅当 type 为 'face' 且operate!=1 时需要 + * @param {number} params.faceName - 人脸名,仅当 type 为 'face' 时需要 + * @param {string} params.faceNumber - 指纹序号,仅当 type 为 'face' 时需要 + * @param {number} params.faceType - 指纹类型,1:永久,2:期限,4:循环,仅当 type 为 'face' 时需要 + * @param {number} params.faceUserNo - 指纹UserNo,仅当 type 为 'face' 时需要 (选填) + * @param {number} params.palmVeinId - 掌静脉id,添加后由监听事件返回,仅当 type 为 'palmVein' 且operate!=1 时需要 + * @param {number} params.palmVeinName - 掌静脉名,仅当 type 为 'palmVein' 时需要 + * @param {string} params.palmVeinNumber - 掌静脉序号,仅当 type 为 'palmVein' 时需要 + * @param {number} params.palmVeinType - 掌静脉类型,1:永久,2:期限,4:循环,仅当 type 为 'palmVein' 时需要 + * @param {number} params.palmVeinUserNo - 掌静脉UserNo,仅当 type 为 'palmVein' 时需要 (选填) + * @param {number} params.remoteId - 遥控名,添加后由监听事件返回,仅当 type 为 'remote' 且operate!=1 时需要 + * @param {number} params.remoteName - 遥控名,仅当 type 为 'remote' 时需要 + * @param {string} params.remoteNumber - 遥控序号,仅当 type 为 'remote' 时需要 + * @param {number} params.remoteType - 遥控类型,1:永久,2:期限,4:循环,仅当 type 为 'remote' 时需要 + * @param {number} params.remoteUserNo - 遥控UserNo,仅当 type 为 'remote' 时需要 (选填) * @returns {Promise} - 返回注册结果的 Promise 对象 */ export const registerExtendedProducts = async params => { @@ -330,4 +348,24 @@ export const getIcCardList = async params => { */ export const getFingerprintList = async params => { return await starCloudInstance.getFingerprintList(params) +} + +/** + * 获取掌静脉列表 + * @param params.lockId 锁id (必填) + * @param params.pageNo 页码(选填) + * @param params.pageSize 每页显示数(选填) + */ +export const getPalmVeinList = async params => { + return await starCloudInstance.getPalmVeinList(params) +} + +/** + * 获取遥控列表 + * @param params.lockId 锁id (必填) + * @param params.pageNo 页码(选填) + * @param params.pageSize 每页显示数(选填) + */ +export const getRemoteList = async params => { + return await starCloudInstance.getRemoteList(params) } \ No newline at end of file