From 7f498b6b62c5724b4ad9d82077123b72cd12fcf8 Mon Sep 17 00:00:00 2001 From: liyi Date: Sat, 8 Mar 2025 10:38:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=8E=8C=E9=9D=99?= =?UTF-8?q?=E8=84=89=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api.js | 105 ++++++++++++++++++++++++++++++++++++ common.js | 77 ++++++++++++++++++++++++-- constant.js | 2 + export.js | 18 ++++++- star-cloud/generalExtend.js | 40 +++++++++++++- uni/storage.js | 9 ++++ web/storage.js | 9 ++++ 7 files changed, 252 insertions(+), 8 deletions(-) diff --git a/api.js b/api.js index 4719e9f..cc8a82d 100644 --- a/api.js +++ b/api.js @@ -455,6 +455,7 @@ export function addFaceRequest(data) { /** * 人脸-更新(永久/限时/单次/循环) * + * @param data.lockId 锁id(必填) * @param data.faceId 人脸id(必填) * @param data.faceType 人脸类型(必填) * @param data.faceName 人脸昵称 @@ -528,4 +529,108 @@ export function getFaceListRequest(data) { method: 'POST', data }) +} + + +/** + * 掌静脉-添加(永久/限时/循环) + * + * @param data.lockId 锁id + * @param data.palmVeinType 掌静脉类型 + * @param data.addType 新增类型,1蓝牙,2远程,3发卡器 + * @param data.palmVeinName 掌静脉昵称 + * @param data.palmVeinNumber 掌静脉序号 + * @param data.startDate 开始时间 + * @param data.endDate 结束时间 + * @param data.weekDay 循环周期 + * @param data.isCoerced 是否胁迫卡 + * @param data.palmVeinRight 是否授权管理员 + * @param data.palmVeinUserNo 掌静脉UserNo + * @returns {Promise} + */ +export function addPalmVeinRequest(data) { + return request({ + url: '/v1/palmVein/add', + method: 'POST', + data + }) +} + +/** + * 掌静脉-更新 + * + * @param data.lockId 锁id + * @param data.palmVeinId 掌静脉id(必填) + * @param data.palmVeinType 掌静脉类型(必填) + * @param data.palmVeinName 掌静脉昵称 + * @param data.startDate 开始时间 + * @param data.endDate 结束时间 + * @param data.weekDay 循环周期 + * @param data.palmVeinRight 是否授权管理员 + * @param data.isCoerced 胁迫掌静脉,1-胁迫人脸,2-非胁迫人脸 + * @returns {Promise} + */ +export function updatePalmVeinRequest(data) { + return request({ + url: '/v1/palmVein/update', + method: 'POST', + data + }) +} + +/** + * 掌静脉-删除 + * @param data.lockId 锁id + * @param data.palmVeinId 掌静脉id + * @returns {Promise} + */ +export function deletePalmVeinRequest(data) { + return request({ + url: '/v1/palmVein/delete', + method: 'POST', + data + }) +} + +/** + * 删除所有掌静脉 + * @param data.lockId 锁id + * @returns {Promise} + */ +export function clearAllPalmVein(data) { + return request({ + url: '/v1/palmVein/clear', + method: 'POST', + data + }) +} + +/** + * 检查人脸姓名是否重复 + * @param data.lockId 锁id + * @param data.palmVeinName 卡姓名 + * @returns {Promise} + */ +export function checkRepeatPalmVeinName(data) { + return request({ + url: '/v1/palmVein/checkPalmVeinName', + method: 'POST', + data + }) +} + + +/** + * 获取掌静脉列表 + * @param data.lockId 锁id + * @param data.pageNo 页码(选填) + * @param data.pageSize 每页显示数(选填) + * @returns {Promise} + */ +export function getPalmVeinListRequest(data) { + return request({ + url: '/v1/palmVein/list', + method: 'POST', + data + }) } \ No newline at end of file diff --git a/common.js b/common.js index 2e441ba..48f0e79 100644 --- a/common.js +++ b/common.js @@ -18,14 +18,14 @@ import { import { addCustomPasswordRequest, addFaceRequest, addFingerprintRequest, - addIcCardRequest, + addIcCardRequest, addPalmVeinRequest, changeAdminKeyboardPwdRequest, clearAllFace, clearAllFingerprint, - clearAllIcCard, + clearAllIcCard, clearAllPalmVein, deleteFaceRequest, deleteFingerprintRequest, deleteIcCardRequest, - deleteLockRequest, + deleteLockRequest, deletePalmVeinRequest, deletePasswordRequest, getLastRecordTimeRequest, getLockNetTokenRequest, @@ -35,14 +35,14 @@ import { updateFaceRequest, updateFingerprintRequest, updateIcCardRequest, - updateLockUserNoRequest, + updateLockUserNoRequest, updatePalmVeinRequest, updatePasswordRequest, uploadRecordRequest } from './api' import { buildNumber, emitRegisterCardConfirmEvent, emitRegisterFaceConfirmEvent, emitRegisterFaceProcessEvent, - emitRegisterFingerprintConfirmEvent, emitRegisterFingerprintProcessEvent, + emitRegisterFingerprintConfirmEvent, emitRegisterFingerprintProcessEvent, emitRegisterPalmVeinConfirmEvent, getStorage, setStorage, version @@ -1152,6 +1152,73 @@ export async function parsingCharacteristicValue(binaryData) { await this.disconnectDevice() } break; + case subCmdIds.registerPalmVein: + if (decrypted[2] === Result.Success.code) { + // 锁版应答成功 + switch (this.requestParams.operate) { + case 1: + // 修改 + const updateResult = await updatePalmVeinRequest({ + ...this.requestParams, + palmVeinId: this.requestParams.palmVeinId, + palmVeinRight: this.requestParams.isAdmin, + lockId: this.lockInfo.lockId, + palmVeinNumber: this.requestParams.palmVeinNumber, + palmVeinType: this.requestParams.palmVeinType, + palmVeinNo: this.requestParams.palmVeinNo + }) + this.characteristicValueCallback(updateResult) + await this.disconnectDevice() + break; + case 2: + // 删除 + const deleteResult = await deletePalmVeinRequest({ + palmVeinId: this.requestParams.palmVeinId, + lockId: this.lockInfo.lockId, + }) + this.characteristicValueCallback(deleteResult) + await this.disconnectDevice() + break; + case 3: + // 删除全部 + const deleteAllResult = await clearAllPalmVein({ + lockId: this.lockInfo.lockId, + }) + this.characteristicValueCallback(deleteAllResult) + await this.disconnectDevice() + break; + default: + this.characteristicValueCallback(new Result(decrypted[2])) + break; + } + } + break; + case subCmdIds.registerPalmVeinConfirm: + // 收到锁版回复判断操作类型进行对应api操作 + if (decrypted[2] === Result.Success.code) { + switch (this.requestParams.operate) { + case 0: + // 注册 + const addResult = await addPalmVeinRequest({ + ...this.requestParams, + isCoerced: this.requestParams.isForce, + palmVeinRight: this.requestParams.isAdmin, + lockId: this.lockInfo.lockId, + palmVeinNumber: this.requestParams.palmVeinNumber, + palmVeinUserNo: this.requestParams.palmVeinUserNo + }) + if (addResult.code === Result.Success.code) { + // 增加返回一个卡序号 + addResult.data.palmVeinNumber = decrypted[6] * 256 + decrypted[7]; + } + // 触发卡片确认事件 + emitRegisterPalmVeinConfirmEvent(addResult) + // 断开蓝牙连接 + await this.disconnectDevice() + break; + } + } + break; default: break } diff --git a/constant.js b/constant.js index 3ea7a1b..b906303 100644 --- a/constant.js +++ b/constant.js @@ -76,6 +76,8 @@ export const eventKeys = { registerFaceProcess: 'registerFaceProcess', // 注册人脸确认 registerFaceConfirm: 'registerFaceConfirm', + // 注册掌纹确认 + registerPalmVeinConfirm: 'registerPalmVeinConfirm', } diff --git a/export.js b/export.js index 9d29cef..5ae945d 100644 --- a/export.js +++ b/export.js @@ -1,13 +1,13 @@ import { emitRegisterCardConfirmEventUni, emitRegisterFaceConfirmEventUni, emitRegisterFaceProcessEventUni, - emitRegisterFingerprintConfirmEventUni, emitRegisterFingerprintProcessEventUni, + emitRegisterFingerprintConfirmEventUni, emitRegisterFingerprintProcessEventUni, emitRegisterPalmVeinConfirmEventUni, getStorageUni, removeStorageUni, setStorageUni } from './uni/storage' import { emitRegisterCardConfirmEventWeb, emitRegisterFaceConfirmEventWeb, emitRegisterFaceProcessEventWeb, - emitRegisterFingerprintConfirmEventWeb, emitRegisterFingerprintProcessEventWeb, + emitRegisterFingerprintConfirmEventWeb, emitRegisterFingerprintProcessEventWeb, emitRegisterPalmVeinConfirmEventWeb, getStorageWeb, removeStorageWeb, setStorageWeb @@ -140,4 +140,18 @@ export const emitRegisterFaceConfirmEvent = resultData => { if (starCloudInstance.platform === 2) { return emitRegisterFaceConfirmEventWeb(resultData) } +} + +/** + * 触发掌静脉注册确认事件 + * @param resultData 事件响应数据 + * @returns {*} + */ +export const emitRegisterPalmVeinConfirmEvent = resultData => { + if (starCloudInstance.platform === 1) { + return emitRegisterPalmVeinConfirmEventUni(resultData) + } + if (starCloudInstance.platform === 2) { + return emitRegisterPalmVeinConfirmEventWeb(resultData) + } } \ No newline at end of file diff --git a/star-cloud/generalExtend.js b/star-cloud/generalExtend.js index 8b1b7a7..d417743 100644 --- a/star-cloud/generalExtend.js +++ b/star-cloud/generalExtend.js @@ -3,7 +3,7 @@ import {cmdIds, Result, subCmdIds} from '../constant' import {convertWeekdaysToNumber, createPackageEnd, md5Encrypt, parseTimeToList, timestampToArray} from "../format.js"; import {sm4} from "sm-crypto"; import { - checkRepeatCardName, checkRepeatFaceName, checkRepeatFingerprintName, + checkRepeatCardName, checkRepeatFaceName, checkRepeatFingerprintName, checkRepeatPalmVeinName, clearAllIcCard, deleteIcCardRequest, getFingerprintListRequest, getIcCardListRequest, @@ -57,6 +57,10 @@ function _checkRequiredFields(params, requiredFields) { * @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.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' 时需要 (选填) * @returns {Promise} - 返回注册结果的 Promise 对象 */ export async function registerExtendedProducts(params) { @@ -169,6 +173,40 @@ export async function registerExtendedProducts(params) { } } + // 如果是掌静脉的话需要增加的参数 + if (params.type === 'palmVein') { + if (params.operate === 0) { + const cardRequiredFields = ['palmVeinName', 'palmVeinNumber', 'palmVeinType']; + const missingField = _checkRequiredFields(params, cardRequiredFields); + if (missingField) { + return new Result(Result.NotMoreData, null, `掌静脉信息不完整: ${missingField}`); + } + // 检查卡昵称是否重复 + const checkRepeatFaceNameResult = await checkRepeatPalmVeinName({ + lockId: this.lockInfo.lockId, + palmVeinName: params.palmVeinName + }) + if (checkRepeatFaceNameResult.code !== Result.Success.code) { + return checkRepeatFaceNameResult + } + } + + // 修改指纹时的参数校验 + if (params.operate === 1 || params.operate === 2) { + let cardRequiredFields = ['palmVeinId']; + if (params.operate === 1) { + cardRequiredFields.push('palmVeinType') + } + if (params.operate === 2) { + cardRequiredFields.push('palmVeinNumber') + } + const missingField = _checkRequiredFields(params, cardRequiredFields); + if (missingField) { + return new Result(Result.NotMoreData, null, `掌静脉信息不完整: ${missingField}`); + } + } + } + // 添加类型:1蓝牙,2远程,3发卡器 params.addType = 1; // 操作后不断开蓝牙 diff --git a/uni/storage.js b/uni/storage.js index 058fe6d..a0af2f0 100644 --- a/uni/storage.js +++ b/uni/storage.js @@ -60,4 +60,13 @@ export function emitRegisterFaceProcessEventUni(resultData) { */ export function emitRegisterFaceConfirmEventUni(resultData) { uni.$emit(eventKeys.registerFaceConfirm, resultData) +} + +/** + * 触发掌静脉认事件 + * @param resultData 事件响应数据 + * @returns {*} + */ +export function emitRegisterPalmVeinConfirmEventUni(resultData) { + uni.$emit(eventKeys.registerPalmVeinConfirm, resultData) } \ No newline at end of file diff --git a/web/storage.js b/web/storage.js index b3f3af8..556025c 100644 --- a/web/storage.js +++ b/web/storage.js @@ -61,4 +61,13 @@ export function emitRegisterFaceProcessEventWeb(resultData) { */ export function emitRegisterFaceConfirmEventWeb(resultData) { // TODO 待实现web端触发事件 +} + +/** + * 触发掌静脉认事件 + * @param resultData 事件响应数据 + * @returns {*} + */ +export function emitRegisterPalmVeinConfirmEventWeb(resultData) { + // TODO 待实现web端触发事件 } \ No newline at end of file