feat:增加遥控相关功能

This commit is contained in:
liyi 2025-03-08 10:50:25 +08:00
parent 7f498b6b62
commit 9893c648aa
7 changed files with 276 additions and 14 deletions

105
api.js
View File

@ -634,3 +634,108 @@ export function getPalmVeinListRequest(data) {
data
})
}
/**
* 遥控-添加(永久/限时/循环)
*
* @param data.lockId 锁id
* @param data.remoteType 遥控类型
* @param data.addType 新增类型1蓝牙2远程3发卡器
* @param data.remoteName 遥控昵称
* @param data.remoteNumber 遥控序号
* @param data.startDate 开始时间
* @param data.endDate 结束时间
* @param data.weekDay 循环周期
* @param data.isCoerced 是否胁迫卡
* @param data.remoteRight 是否授权管理员
* @param data.remoteUserNo 遥控UserNo
* @returns {Promise<unknown>}
*/
export function addRemoteRequest(data) {
return request({
url: '/v1/remote/add',
method: 'POST',
data
})
}
/**
* 遥控-更新
*
* @param data.lockId 锁id
* @param data.remoteId 遥控id必填
* @param data.remoteType 遥控类型必填
* @param data.remoteName 遥控昵称
* @param data.startDate 开始时间
* @param data.endDate 结束时间
* @param data.weekDay 循环周期
* @param data.palmVeinRight 是否授权管理员
* @param data.isCoerced 胁迫遥控1-胁迫人脸2-非胁迫人脸
* @returns {Promise<unknown>}
*/
export function updateRemoteRequest(data) {
return request({
url: '/v1/remote/update',
method: 'POST',
data
})
}
/**
* 遥控-删除
* @param data.lockId 锁id
* @param data.remoteId 遥控id
* @returns {Promise<unknown>}
*/
export function deleteRemoteRequest(data) {
return request({
url: '/v1/remote/delete',
method: 'POST',
data
})
}
/**
* 删除所有遥控
* @param data.lockId 锁id
* @returns {Promise<unknown>}
*/
export function clearAllRemote(data) {
return request({
url: '/v1/remote/clear',
method: 'POST',
data
})
}
/**
* 检查遥控姓名是否重复
* @param data.lockId 锁id
* @param data.remoteName 卡姓名
* @returns {Promise<unknown>}
*/
export function checkRepeatRemoteName(data) {
return request({
url: '/v1/remote/checkRemoteName',
method: 'POST',
data
})
}
/**
* 获取遥控列表
* @param data.lockId 锁id
* @param data.pageNo 页码选填
* @param data.pageSize 每页显示数选填
* @returns {Promise<unknown>}
*/
export function getRemoteListRequest(data) {
return request({
url: '/v1/remote/list',
method: 'POST',
data
})
}

View File

@ -18,7 +18,7 @@ import {
import {
addCustomPasswordRequest, addFaceRequest,
addFingerprintRequest,
addIcCardRequest, addPalmVeinRequest,
addIcCardRequest, addPalmVeinRequest, addRemoteRequest,
changeAdminKeyboardPwdRequest, clearAllFace,
clearAllFingerprint,
clearAllIcCard, clearAllPalmVein,
@ -36,13 +36,18 @@ import {
updateFingerprintRequest,
updateIcCardRequest,
updateLockUserNoRequest, updatePalmVeinRequest,
updatePasswordRequest,
updatePasswordRequest, updateRemoteRequest,
uploadRecordRequest
} from './api'
import {
buildNumber,
emitRegisterCardConfirmEvent, emitRegisterFaceConfirmEvent, emitRegisterFaceProcessEvent,
emitRegisterFingerprintConfirmEvent, emitRegisterFingerprintProcessEvent, emitRegisterPalmVeinConfirmEvent,
emitRegisterCardConfirmEvent,
emitRegisterFaceConfirmEvent,
emitRegisterFaceProcessEvent,
emitRegisterFingerprintConfirmEvent,
emitRegisterFingerprintProcessEvent,
emitRegisterPalmVeinConfirmEvent,
emitRegisterRemoteConfirmEvent,
getStorage,
setStorage,
version
@ -1219,6 +1224,71 @@ export async function parsingCharacteristicValue(binaryData) {
}
}
break;
case subCmdIds.registerRemote:
if (decrypted[2] === Result.Success.code) {
// 锁版应答成功
switch (this.requestParams.operate) {
case 1:
// 修改
const updateResult = await updateRemoteRequest({
...this.requestParams,
remoteId: this.requestParams.remoteId,
remoteRight: this.requestParams.isAdmin,
lockId: this.lockInfo.lockId,
remoteType: this.requestParams.remoteType,
})
this.characteristicValueCallback(updateResult)
await this.disconnectDevice()
break;
case 2:
// 删除
const deleteResult = await deletePalmVeinRequest({
remoteId: this.requestParams.remoteId,
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.registerRemoteConfirm:
// 收到锁版回复判断操作类型进行对应api操作
if (decrypted[2] === Result.Success.code) {
switch (this.requestParams.operate) {
case 0:
// 注册
const addResult = await addRemoteRequest({
...this.requestParams,
isCoerced: this.requestParams.isForce,
remoteRight: this.requestParams.isAdmin,
lockId: this.lockInfo.lockId,
remoteNumber: this.requestParams.remoteNumber,
remoteUserNo: this.requestParams.remoteUserNo
})
if (addResult.code === Result.Success.code) {
// 增加返回一个卡序号
addResult.data.remoteNumber = decrypted[6] * 256 + decrypted[7];
}
// 触发卡片确认事件
emitRegisterRemoteConfirmEvent(addResult)
// 断开蓝牙连接
await this.disconnectDevice()
break;
}
}
break;
default:
break
}

View File

@ -78,6 +78,8 @@ export const eventKeys = {
registerFaceConfirm: 'registerFaceConfirm',
// 注册掌纹确认
registerPalmVeinConfirm: 'registerPalmVeinConfirm',
// 注册遥控确认
registerRemoteConfirm: 'registerRemoteConfirm',
}

View File

@ -1,13 +1,23 @@
import {
emitRegisterCardConfirmEventUni, emitRegisterFaceConfirmEventUni, emitRegisterFaceProcessEventUni,
emitRegisterFingerprintConfirmEventUni, emitRegisterFingerprintProcessEventUni, emitRegisterPalmVeinConfirmEventUni,
emitRegisterCardConfirmEventUni,
emitRegisterFaceConfirmEventUni,
emitRegisterFaceProcessEventUni,
emitRegisterFingerprintConfirmEventUni,
emitRegisterFingerprintProcessEventUni,
emitRegisterPalmVeinConfirmEventUni,
emitRegisterRemoteConfirmEventUni,
getStorageUni,
removeStorageUni,
setStorageUni
} from './uni/storage'
import {
emitRegisterCardConfirmEventWeb, emitRegisterFaceConfirmEventWeb, emitRegisterFaceProcessEventWeb,
emitRegisterFingerprintConfirmEventWeb, emitRegisterFingerprintProcessEventWeb, emitRegisterPalmVeinConfirmEventWeb,
emitRegisterCardConfirmEventWeb,
emitRegisterFaceConfirmEventWeb,
emitRegisterFaceProcessEventWeb,
emitRegisterFingerprintConfirmEventWeb,
emitRegisterFingerprintProcessEventWeb,
emitRegisterPalmVeinConfirmEventWeb,
emitRegisterRemoteConfirmEventWeb,
getStorageWeb,
removeStorageWeb,
setStorageWeb
@ -155,3 +165,17 @@ export const emitRegisterPalmVeinConfirmEvent = resultData => {
return emitRegisterPalmVeinConfirmEventWeb(resultData)
}
}
/**
* 触发遥控确认事件
* @param resultData 事件响应数据
* @returns {*}
*/
export const emitRegisterRemoteConfirmEvent = resultData => {
if (starCloudInstance.platform === 1) {
return emitRegisterRemoteConfirmEventUni(resultData)
}
if (starCloudInstance.platform === 2) {
return emitRegisterRemoteConfirmEventWeb(resultData)
}
}

View File

@ -3,9 +3,14 @@ import {cmdIds, Result, subCmdIds} from '../constant'
import {convertWeekdaysToNumber, createPackageEnd, md5Encrypt, parseTimeToList, timestampToArray} from "../format.js";
import {sm4} from "sm-crypto";
import {
checkRepeatCardName, checkRepeatFaceName, checkRepeatFingerprintName, checkRepeatPalmVeinName,
checkRepeatCardName,
checkRepeatFaceName,
checkRepeatFingerprintName,
checkRepeatPalmVeinName,
checkRepeatRemoteName,
clearAllIcCard,
deleteIcCardRequest, getFingerprintListRequest,
deleteIcCardRequest,
getFingerprintListRequest,
getIcCardListRequest,
updateIcCardRequest
} from "../api.js";
@ -57,10 +62,14 @@ 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' 时需要 选填
* @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.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<Result>} - 返回注册结果的 Promise 对象
*/
export async function registerExtendedProducts(params) {
@ -207,6 +216,40 @@ export async function registerExtendedProducts(params) {
}
}
// 如果是遥控的话需要增加的参数
if (params.type === 'remote') {
if (params.operate === 0) {
const cardRequiredFields = ['remoteName', 'remoteNumber', 'remoteType'];
const missingField = _checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.NotMoreData, null, `遥控信息不完整: ${missingField}`);
}
// 检查卡昵称是否重复
const checkRepeatFaceNameResult = await checkRepeatRemoteName({
lockId: this.lockInfo.lockId,
remoteName: params.remoteName
})
if (checkRepeatFaceNameResult.code !== Result.Success.code) {
return checkRepeatFaceNameResult
}
}
// 修改指纹时的参数校验
if (params.operate === 1 || params.operate === 2) {
let cardRequiredFields = ['remoteId'];
if (params.operate === 1) {
cardRequiredFields.push('remoteType')
}
if (params.operate === 2) {
cardRequiredFields.push('remoteNumber')
}
const missingField = _checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.NotMoreData, null, `遥控信息不完整: ${missingField}`);
}
}
}
// 添加类型1蓝牙2远程3发卡器
params.addType = 1;
// 操作后不断开蓝牙

View File

@ -70,3 +70,12 @@ export function emitRegisterFaceConfirmEventUni(resultData) {
export function emitRegisterPalmVeinConfirmEventUni(resultData) {
uni.$emit(eventKeys.registerPalmVeinConfirm, resultData)
}
/**
* 触发遥控认事件
* @param resultData 事件响应数据
* @returns {*}
*/
export function emitRegisterRemoteConfirmEventUni(resultData) {
uni.$emit(eventKeys.registerRemoteConfirm, resultData)
}

View File

@ -71,3 +71,12 @@ export function emitRegisterFaceConfirmEventWeb(resultData) {
export function emitRegisterPalmVeinConfirmEventWeb(resultData) {
// TODO 待实现web端触发事件
}
/**
* 触发遥控认事件
* @param resultData 事件响应数据
* @returns {*}
*/
export function emitRegisterRemoteConfirmEventWeb(resultData) {
// TODO 待实现web端触发事件
}