feat:增加掌静脉相关功能

This commit is contained in:
liyi 2025-03-08 10:38:30 +08:00
parent ed52a5b901
commit 7f498b6b62
7 changed files with 252 additions and 8 deletions

105
api.js
View File

@ -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<unknown>}
*/
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<unknown>}
*/
export function updatePalmVeinRequest(data) {
return request({
url: '/v1/palmVein/update',
method: 'POST',
data
})
}
/**
* 掌静脉-删除
* @param data.lockId 锁id
* @param data.palmVeinId 掌静脉id
* @returns {Promise<unknown>}
*/
export function deletePalmVeinRequest(data) {
return request({
url: '/v1/palmVein/delete',
method: 'POST',
data
})
}
/**
* 删除所有掌静脉
* @param data.lockId 锁id
* @returns {Promise<unknown>}
*/
export function clearAllPalmVein(data) {
return request({
url: '/v1/palmVein/clear',
method: 'POST',
data
})
}
/**
* 检查人脸姓名是否重复
* @param data.lockId 锁id
* @param data.palmVeinName 卡姓名
* @returns {Promise<unknown>}
*/
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<unknown>}
*/
export function getPalmVeinListRequest(data) {
return request({
url: '/v1/palmVein/list',
method: 'POST',
data
})
}

View File

@ -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
}

View File

@ -76,6 +76,8 @@ export const eventKeys = {
registerFaceProcess: 'registerFaceProcess',
// 注册人脸确认
registerFaceConfirm: 'registerFaceConfirm',
// 注册掌纹确认
registerPalmVeinConfirm: 'registerPalmVeinConfirm',
}

View File

@ -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)
}
}

View File

@ -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<Result>} - 返回注册结果的 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;
// 操作后不断开蓝牙

View File

@ -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)
}

View File

@ -61,4 +61,13 @@ export function emitRegisterFaceProcessEventWeb(resultData) {
*/
export function emitRegisterFaceConfirmEventWeb(resultData) {
// TODO 待实现web端触发事件
}
/**
* 触发掌静脉认事件
* @param resultData 事件响应数据
* @returns {*}
*/
export function emitRegisterPalmVeinConfirmEventWeb(resultData) {
// TODO 待实现web端触发事件
}