diff --git a/api.js b/api.js index cc8a82d..1cf2073 100644 --- a/api.js +++ b/api.js @@ -633,4 +633,109 @@ export function getPalmVeinListRequest(data) { method: 'POST', 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} + */ +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} + */ +export function updateRemoteRequest(data) { + return request({ + url: '/v1/remote/update', + method: 'POST', + data + }) +} + +/** + * 遥控-删除 + * @param data.lockId 锁id + * @param data.remoteId 遥控id + * @returns {Promise} + */ +export function deleteRemoteRequest(data) { + return request({ + url: '/v1/remote/delete', + method: 'POST', + data + }) +} + +/** + * 删除所有遥控 + * @param data.lockId 锁id + * @returns {Promise} + */ +export function clearAllRemote(data) { + return request({ + url: '/v1/remote/clear', + method: 'POST', + data + }) +} + +/** + * 检查遥控姓名是否重复 + * @param data.lockId 锁id + * @param data.remoteName 卡姓名 + * @returns {Promise} + */ +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} + */ +export function getRemoteListRequest(data) { + return request({ + url: '/v1/remote/list', + method: 'POST', + data + }) } \ No newline at end of file diff --git a/common.js b/common.js index 48f0e79..d99d14d 100644 --- a/common.js +++ b/common.js @@ -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 } diff --git a/constant.js b/constant.js index b906303..4081898 100644 --- a/constant.js +++ b/constant.js @@ -78,6 +78,8 @@ export const eventKeys = { registerFaceConfirm: 'registerFaceConfirm', // 注册掌纹确认 registerPalmVeinConfirm: 'registerPalmVeinConfirm', + // 注册遥控确认 + registerRemoteConfirm: 'registerRemoteConfirm', } diff --git a/export.js b/export.js index 5ae945d..08bdc09 100644 --- a/export.js +++ b/export.js @@ -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 @@ -154,4 +164,18 @@ export const emitRegisterPalmVeinConfirmEvent = resultData => { if (starCloudInstance.platform === 2) { return emitRegisterPalmVeinConfirmEventWeb(resultData) } +} + +/** + * 触发遥控确认事件 + * @param resultData 事件响应数据 + * @returns {*} + */ +export const emitRegisterRemoteConfirmEvent = resultData => { + if (starCloudInstance.platform === 1) { + return emitRegisterRemoteConfirmEventUni(resultData) + } + if (starCloudInstance.platform === 2) { + return emitRegisterRemoteConfirmEventWeb(resultData) + } } \ No newline at end of file diff --git a/star-cloud/generalExtend.js b/star-cloud/generalExtend.js index d417743..6bd81ad 100644 --- a/star-cloud/generalExtend.js +++ b/star-cloud/generalExtend.js @@ -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} - 返回注册结果的 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; // 操作后不断开蓝牙 diff --git a/uni/storage.js b/uni/storage.js index a0af2f0..837f6fd 100644 --- a/uni/storage.js +++ b/uni/storage.js @@ -69,4 +69,13 @@ 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) } \ No newline at end of file diff --git a/web/storage.js b/web/storage.js index 556025c..9d253ba 100644 --- a/web/storage.js +++ b/web/storage.js @@ -70,4 +70,13 @@ export function emitRegisterFaceConfirmEventWeb(resultData) { */ export function emitRegisterPalmVeinConfirmEventWeb(resultData) { // TODO 待实现web端触发事件 +} + +/** + * 触发遥控认事件 + * @param resultData 事件响应数据 + * @returns {*} + */ +export function emitRegisterRemoteConfirmEventWeb(resultData) { + // TODO 待实现web端触发事件 } \ No newline at end of file