|
|
|
|
@ -0,0 +1,418 @@
|
|
|
|
|
import Taro from "@tarojs/taro";
|
|
|
|
|
import { debounce } from "lodash";
|
|
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
notifyBLECharacteristicValueChange,
|
|
|
|
|
sendCommand,
|
|
|
|
|
} from "@/utils/bluetoothWXAPI";
|
|
|
|
|
import {
|
|
|
|
|
WE100BleCommand,
|
|
|
|
|
WE100DeviceControlCommand,
|
|
|
|
|
} from "@/components/bluetoot/connection/we100";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @name 蓝牙控制函数
|
|
|
|
|
* @description 响应功能需要直接修改私有函数,仅仅是蓝牙解耦,将从页面中抽离出来。
|
|
|
|
|
*/
|
|
|
|
|
export default class BluetoothContainer {
|
|
|
|
|
bluetoothInfo: any;
|
|
|
|
|
deviceToolKitInstance: any;
|
|
|
|
|
that: any;
|
|
|
|
|
counter: number = 0; // 初始化后,同步执行次数
|
|
|
|
|
|
|
|
|
|
constructor(bluetoothInfo: any, deviceToolKitInstance: any, that: any) {
|
|
|
|
|
this.bluetoothInfo = bluetoothInfo;
|
|
|
|
|
this.deviceToolKitInstance = deviceToolKitInstance;
|
|
|
|
|
this.that = that;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 主动改变状态
|
|
|
|
|
public DeviceControl = {
|
|
|
|
|
/** @name 设置模式 */
|
|
|
|
|
workByPatitionSet: (workMode = '', gearTakeEffectOffline = false, partitionStatus = [{ gear: 0 }, { gear: 3 }, { gear: 2 }, { gear: 5 }]) => {
|
|
|
|
|
let sendParams: any = {
|
|
|
|
|
...WE100DeviceControlCommand.workByPatitionSet,
|
|
|
|
|
workMode: workMode, // 使用模式
|
|
|
|
|
gearTakeEffectOffline: gearTakeEffectOffline, // 是否离线生效
|
|
|
|
|
partitionStatus: partitionStatus // 默认用官配模式
|
|
|
|
|
};
|
|
|
|
|
const pauseArrayBuffer = this.deviceToolKitInstance.toBleCommand(
|
|
|
|
|
sendParams as any
|
|
|
|
|
);
|
|
|
|
|
sendCommand({
|
|
|
|
|
value: pauseArrayBuffer,
|
|
|
|
|
}).then(() => {
|
|
|
|
|
this.that.workStatus = 'pause';
|
|
|
|
|
this.that.resetTimer();
|
|
|
|
|
console.info(`发送暂停指令成功 参数为 =>`, sendParams);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
/** @name 设备控制:准备 */
|
|
|
|
|
standby: (workMode = '') => {
|
|
|
|
|
let sendParams: any = {
|
|
|
|
|
...WE100DeviceControlCommand.pause,
|
|
|
|
|
workMode: workMode, // 使用模式
|
|
|
|
|
};
|
|
|
|
|
const pauseArrayBuffer = this.deviceToolKitInstance.toBleCommand(
|
|
|
|
|
sendParams as any
|
|
|
|
|
);
|
|
|
|
|
sendCommand({
|
|
|
|
|
value: pauseArrayBuffer,
|
|
|
|
|
}).then(() => {
|
|
|
|
|
this.that.workStatus = 'standby';
|
|
|
|
|
this.that.resetTimer();
|
|
|
|
|
console.info(`发送暂停指令成功 参数为 =>`, sendParams);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
/** @name 设备控制:暂停 */
|
|
|
|
|
pause: (workMode = '') => {
|
|
|
|
|
let sendParams: any = {
|
|
|
|
|
...WE100DeviceControlCommand.pause,
|
|
|
|
|
workMode: workMode, // 使用模式
|
|
|
|
|
};
|
|
|
|
|
const pauseArrayBuffer = this.deviceToolKitInstance.toBleCommand(
|
|
|
|
|
sendParams as any
|
|
|
|
|
);
|
|
|
|
|
sendCommand({
|
|
|
|
|
value: pauseArrayBuffer,
|
|
|
|
|
}).then(() => {
|
|
|
|
|
this.that.workStatus = 'pause';
|
|
|
|
|
this.that.resetTimer();
|
|
|
|
|
console.info(`发送暂停指令成功 参数为 =>`, sendParams);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
/** @name 设备控制:工作 */
|
|
|
|
|
working: (workMode = '') => {
|
|
|
|
|
let sendParams: any = {
|
|
|
|
|
...WE100DeviceControlCommand.pause,
|
|
|
|
|
workMode: workMode, // 使用模式
|
|
|
|
|
};
|
|
|
|
|
const pauseArrayBuffer = this.deviceToolKitInstance.toBleCommand(
|
|
|
|
|
sendParams as any
|
|
|
|
|
);
|
|
|
|
|
sendCommand({
|
|
|
|
|
value: pauseArrayBuffer,
|
|
|
|
|
}).then(() => {
|
|
|
|
|
this.that.workStatus = 'working';
|
|
|
|
|
this.that.resetTimer();
|
|
|
|
|
console.info(`发送工作指令成功 参数为 =>`, sendParams);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
/** @name 设备控制:结束 */
|
|
|
|
|
end: (workMode = '') => {
|
|
|
|
|
let sendParams: any = {
|
|
|
|
|
...WE100DeviceControlCommand.pause,
|
|
|
|
|
workMode: workMode, // 使用模式
|
|
|
|
|
};
|
|
|
|
|
const pauseArrayBuffer = this.deviceToolKitInstance.toBleCommand(
|
|
|
|
|
sendParams as any
|
|
|
|
|
);
|
|
|
|
|
sendCommand({
|
|
|
|
|
value: pauseArrayBuffer,
|
|
|
|
|
}).then(() => {
|
|
|
|
|
this.that.workStatus = 'end';
|
|
|
|
|
this.that.resetTimer();
|
|
|
|
|
console.info(`发送结束指令成功 参数为 =>`, sendParams);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
syncOfflineSummary: () => {
|
|
|
|
|
const queryOfflineSummary = this.deviceToolKitInstance.toBleCommand({
|
|
|
|
|
...WE100BleCommand.InfoQuery.offlineSummary
|
|
|
|
|
});
|
|
|
|
|
sendCommand({
|
|
|
|
|
value: queryOfflineSummary,
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
syncOfflineDetail: () => {
|
|
|
|
|
const queryOfflineDetail = this.deviceToolKitInstance.toBleCommand({
|
|
|
|
|
...WE100BleCommand.InfoQuery.offlineDetail
|
|
|
|
|
});
|
|
|
|
|
sendCommand({
|
|
|
|
|
value: queryOfflineDetail,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 工作状态改变的相应
|
|
|
|
|
/** @name 设备响应:待机 */
|
|
|
|
|
private syncStandby(jsonStatus) {
|
|
|
|
|
console.log("上报待机", jsonStatus)
|
|
|
|
|
}
|
|
|
|
|
/** @name 设备响应:工作 */
|
|
|
|
|
private syncWorking(jsonStatus) {
|
|
|
|
|
console.log("上报工作", jsonStatus)
|
|
|
|
|
}
|
|
|
|
|
/** @name 设备响应:暂停 */
|
|
|
|
|
private syncPause(jsonStatus) {
|
|
|
|
|
console.log("上报暂停", jsonStatus)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** @name 查询信息响应 */
|
|
|
|
|
private InfoQuery = {
|
|
|
|
|
/** @name 离线记录 */
|
|
|
|
|
syncOfflineClockSummary: function (jsonStatus) {
|
|
|
|
|
console.log("离线记录", jsonStatus);
|
|
|
|
|
},
|
|
|
|
|
/** @name 离线记录详情 */
|
|
|
|
|
syncOfflineClockDetail: function (jsonStatus) {
|
|
|
|
|
console.log("离线记录详情", jsonStatus);
|
|
|
|
|
},
|
|
|
|
|
/** @name 现在的面膜上报信息 */
|
|
|
|
|
syncCurrentFacialReportInfo: function (jsonStatus) {
|
|
|
|
|
console.log("现在的面膜上报信息", jsonStatus);
|
|
|
|
|
},
|
|
|
|
|
/** @name 查询响应:自定义电流配方模式面膜模式 */
|
|
|
|
|
syncFacialMaskCustomModeInfo: function (jsonStatus) {
|
|
|
|
|
console.log("查询响应:自定义电流配方模式面膜模式", jsonStatus);
|
|
|
|
|
},
|
|
|
|
|
/** @name 设置响应:自定义电流配方模式面膜模式 */
|
|
|
|
|
syncFacialMaskCustomModeSet: function (jsonStatus) {
|
|
|
|
|
console.log("设置响应:自定义电流配方模式面膜模式", jsonStatus);
|
|
|
|
|
},
|
|
|
|
|
/** @name 查询响应:M02自定义面膜信息 */
|
|
|
|
|
syncM02MaskCustomModeInfo: function (jsonStatus) {
|
|
|
|
|
console.log("查询响应:M02自定义面膜信息", jsonStatus);
|
|
|
|
|
},
|
|
|
|
|
/** @name 设置响应:眼雕大师自定义、妆前急救自定义面膜模式 */
|
|
|
|
|
syncM02MaskCustomModeSet: function (jsonStatus) {
|
|
|
|
|
console.log("设置响应:眼雕大师自定义、妆前急救自定义面膜模式", jsonStatus);
|
|
|
|
|
},
|
|
|
|
|
/** @name 版本信息 */
|
|
|
|
|
syncVersionInfo: function (jsonStatus) {
|
|
|
|
|
console.log("版本信息", jsonStatus);
|
|
|
|
|
},
|
|
|
|
|
/** @name 设备响应:时间同步 */
|
|
|
|
|
syncTimeSync: function (jsonStatus) {
|
|
|
|
|
console.log("时间同步", jsonStatus);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @name 设备响应:通用状态响应 */
|
|
|
|
|
private syncCommonStatus(jsonStatus) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @name 设备响应:控制指令响应 */
|
|
|
|
|
private syncDeviceControl(jsonStatus) {
|
|
|
|
|
console.log("设备控制响应", jsonStatus);
|
|
|
|
|
if (jsonStatus.responseStatus == "OK") {
|
|
|
|
|
console.log("发送控制指令成功");
|
|
|
|
|
this.that.workJsonStatus = jsonStatus;
|
|
|
|
|
this.that.workStatus = jsonStatus.workStatus;
|
|
|
|
|
|
|
|
|
|
if (jsonStatus.battery) {
|
|
|
|
|
this.that.setState({
|
|
|
|
|
Electricity: jsonStatus.battery,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 判断设备主动上报的关机事件
|
|
|
|
|
if (jsonStatus.workStatus === 'end') {
|
|
|
|
|
// 判断id是否一致, 一致的话则生成护理报表, 并提示
|
|
|
|
|
if (jsonStatus.id == this.that.WE200NursingHistory.id) {
|
|
|
|
|
debounce(
|
|
|
|
|
this.that.checkInstrumentRecord.bind(this, jsonStatus),
|
|
|
|
|
500
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (jsonStatus?.workMode === this.that.state.ActiveModeItem?.modeType) {
|
|
|
|
|
this.that.setState({
|
|
|
|
|
workMode: jsonStatus?.workMode, // 仅当设备上报模式与小程序一致时,才允许改变小程序变量缓存
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 判断是否在isRuning(护理中)
|
|
|
|
|
// 仅当设备模式与小程序是否一致,才允许更改设备运行时间
|
|
|
|
|
if (
|
|
|
|
|
this.that.state.DeviceConnectStatus === 1 &&
|
|
|
|
|
this.that.isRuning &&
|
|
|
|
|
jsonStatus.workStatus !== 'end'
|
|
|
|
|
) {
|
|
|
|
|
this.that.updateDeviceSyncData(
|
|
|
|
|
{
|
|
|
|
|
totalWorkingMinutes: jsonStatus.totalWorkingMinutes,
|
|
|
|
|
totalWorkingSeconds: jsonStatus.totalWorkingSeconds,
|
|
|
|
|
},
|
|
|
|
|
jsonStatus
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
jsonStatus.workMode === 'working' &&
|
|
|
|
|
this.that.isRuning
|
|
|
|
|
) {
|
|
|
|
|
const { ActiveModeItem } = this.that.state;
|
|
|
|
|
const item = ActiveModeItem;
|
|
|
|
|
if (jsonStatus.workMode !== item?.modeType) {
|
|
|
|
|
// clearTimeout(loadingTipsTimer);
|
|
|
|
|
this.that.setState({
|
|
|
|
|
isShowCountdown: false,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
notifyBLECharacteristicValueChange() {
|
|
|
|
|
notifyBLECharacteristicValueChange({
|
|
|
|
|
deviceId: this.bluetoothInfo.deviceId,
|
|
|
|
|
servicesuuid: this.bluetoothInfo.servicesuuid,
|
|
|
|
|
characteristicsuuid1: this.bluetoothInfo.characteristicsuuid1,
|
|
|
|
|
characteristicsuuid0: this.bluetoothInfo.characteristicsuuid0,
|
|
|
|
|
}).then((res) => {
|
|
|
|
|
Taro.onBLECharacteristicValueChange((value) => {
|
|
|
|
|
const jsonStatus: any = this.deviceToolKitInstance.toJsonStatus(value.value);
|
|
|
|
|
console.log("onBLECharacteristicValueChange 订阅改变:", jsonStatus);
|
|
|
|
|
if (!jsonStatus || jsonStatus == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
this.that.workStatus = jsonStatus.workStatus; // 记录工作状态
|
|
|
|
|
|
|
|
|
|
// end 和 endWork 都是护理结束, endWork不关机, end 关机, 对小程序而言处理流程都一样
|
|
|
|
|
if (jsonStatus.workStatus && jsonStatus.workStatus == "endWork") {
|
|
|
|
|
jsonStatus.workStatus = "end";
|
|
|
|
|
console.log(jsonStatus.workStatus, "护理结束");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (jsonStatus?.commandType) {
|
|
|
|
|
//设备配对和连接的返回
|
|
|
|
|
case "BleMatch":
|
|
|
|
|
// 蓝牙相关指令
|
|
|
|
|
this.that.switchBLEMatch(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
//设备状态同步
|
|
|
|
|
case "DeviceStatusSync":
|
|
|
|
|
if (jsonStatus.battery) {
|
|
|
|
|
// 防止抖动
|
|
|
|
|
this.that.setState({
|
|
|
|
|
Electricity: jsonStatus.battery,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (jsonStatus.workStatus) {
|
|
|
|
|
case "standby":
|
|
|
|
|
//设备的待机状态 可能workMode字段为空
|
|
|
|
|
this.syncStandby(jsonStatus)
|
|
|
|
|
break;
|
|
|
|
|
case "pause":
|
|
|
|
|
this.syncPause(jsonStatus)
|
|
|
|
|
break;
|
|
|
|
|
case "working":
|
|
|
|
|
this.syncWorking(jsonStatus)
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.syncCommonStatus(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
//设备对控制指令的响应
|
|
|
|
|
case "DeviceControl":
|
|
|
|
|
this.syncDeviceControl(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
// 设备对信息查询指令的响应
|
|
|
|
|
case "InfoQuery":
|
|
|
|
|
console.log("设备对信息查询指令的响应 InfoQuery", jsonStatus);
|
|
|
|
|
switch (jsonStatus.infoQueryType) {
|
|
|
|
|
// 离线记录
|
|
|
|
|
case "offlineClockSummary":
|
|
|
|
|
this.InfoQuery.syncOfflineClockSummary(jsonStatus)
|
|
|
|
|
break;
|
|
|
|
|
// 离线记录详情
|
|
|
|
|
case "offlineClockDetail":
|
|
|
|
|
this.InfoQuery.syncOfflineClockDetail(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
// 现在的面膜报告信息
|
|
|
|
|
case "currentFacialReportInfo":
|
|
|
|
|
this.InfoQuery.syncCurrentFacialReportInfo(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
// 查询:自定义电流配方模式面膜模式
|
|
|
|
|
case "facialMaskCustomModeInfo":
|
|
|
|
|
this.InfoQuery.syncFacialMaskCustomModeInfo(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
// 设置:自定义电流配方模式面膜模式
|
|
|
|
|
case "facialMaskCustomModeSet":
|
|
|
|
|
this.InfoQuery.syncFacialMaskCustomModeSet(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
// 查询:M02自定义面膜信息
|
|
|
|
|
case "m02MaskCustomModeInfo":
|
|
|
|
|
this.InfoQuery.syncM02MaskCustomModeInfo(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
// 设置:眼雕大师自定义、妆前急救自定义面膜模式
|
|
|
|
|
case "m02MaskCustomModeSet":
|
|
|
|
|
this.InfoQuery.syncM02MaskCustomModeSet(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
// 版本信息
|
|
|
|
|
case "versionInfo":
|
|
|
|
|
this.InfoQuery.syncVersionInfo(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
// 时间同步
|
|
|
|
|
case "timeSync":
|
|
|
|
|
this.InfoQuery.syncTimeSync(jsonStatus);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (this.counter < 3) {
|
|
|
|
|
/**
|
|
|
|
|
* 延迟600毫秒获取附属设备状态
|
|
|
|
|
*/
|
|
|
|
|
const querySubDeviceArrayBuffer = this.deviceToolKitInstance.toBleCommand({
|
|
|
|
|
...WE100BleCommand.querySubDevice,
|
|
|
|
|
queryType: "WE100",
|
|
|
|
|
} as any);
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
console.log("发送查询附属设备指令 querySubDeviceArrayBuffer");
|
|
|
|
|
sendCommand({
|
|
|
|
|
value: querySubDeviceArrayBuffer,
|
|
|
|
|
});
|
|
|
|
|
}, 600);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 延迟500毫秒获取设备电量
|
|
|
|
|
*/
|
|
|
|
|
const queryDeviceArrayBuffer = this.deviceToolKitInstance.toBleCommand(
|
|
|
|
|
WE100BleCommand.queryDeviceStatus as any
|
|
|
|
|
);
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
console.log("发送查询设备电量指令");
|
|
|
|
|
sendCommand({
|
|
|
|
|
value: queryDeviceArrayBuffer,
|
|
|
|
|
});
|
|
|
|
|
}, 500);
|
|
|
|
|
this.counter++;
|
|
|
|
|
} else {
|
|
|
|
|
/**
|
|
|
|
|
* 延迟500毫秒获取设备电量
|
|
|
|
|
*/
|
|
|
|
|
const queryDeviceArrayBuffer = this.deviceToolKitInstance.toBleCommand(
|
|
|
|
|
WE100BleCommand.queryDeviceStatus as any
|
|
|
|
|
);
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
console.log("发送查询设备电量指令");
|
|
|
|
|
sendCommand({
|
|
|
|
|
value: queryDeviceArrayBuffer,
|
|
|
|
|
});
|
|
|
|
|
}, 20000);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|