设备 预约接口

This commit is contained in:
czz
2025-06-16 21:43:07 +08:00
parent f7b50ae609
commit 89d0bbcc00
29 changed files with 2134 additions and 1085 deletions

View File

@@ -0,0 +1,218 @@
import 'dart:async';
import 'dart:convert';
import 'dart:math';
import 'dart:typed_data';
import 'package:ef/ef.dart';
import 'package:json_annotation/json_annotation.dart';
part 'bedController.g.dart'; // 由json_serializable自动生成的部分
@JsonSerializable()
class BedModel {
int patternType = 2; //1.助眠 2.手动
int noAutoPattern = -1; //1 TV 2 零重力 3 阅读 4 放平
int zhuMianPattern = -1; //1 一键放松 2 休闲模式 3腰部放松 4 腿部放松
// int anMoleftRight = 1; //1.左侧律动 2右侧律动
bool anMoStart = false; //启动按摩
bool isAnMoBei = false; //背部律动
bool isAnMoTui = false; //腿部律动
int anMoPattern = -1; //1234分别为模式1、2、3、4
double slideValue_bei = 1.0; //背部力度调节
double slideValue_tui = 1.0; //腿部力度调节
// bool isStart = false; //开启 关闭
int timerPattern = 2; //定时设置 10、20、30分钟
bool isZhuMian = false; //一键助眠开启
int zhuMainInitTime = 0;
int zhuMainRunTime = 1800; //默认床垫30分钟床为15分钟
int zhuMainRunAllTime = 1800; //默认床垫30分钟床为15分钟
int useLastTime = DateTime.now().millisecondsSinceEpoch; //最新的使用时间
String? deviceMac; // 当前选中设备mac地址
List bodyData = [
{"lastData": {}, "bodyData": []},
{"lastData": {}, "bodyData": []}
];
BedModel();
factory BedModel.fromJson(Map<String, dynamic> json) {
try {
return _$BedModelFromJson(json);
} catch (e) {
return BedModel();
}
}
Map<String, dynamic> toJson() => _$BedModelToJson(this);
}
class BedController extends GetControllerEx<BedModel> {
// WebsocketProp? websocketProp;
// ble.ConnectedDeviceProp? deviceProp;
// GlobalController get glcontroller => Get.find<GlobalController>();
Function? calibrationListenCall;
List pinlvTimerList = [null, null];
BedController() {
attr = GetModel(BedModel()).obs;
}
// @override
// void onInit() {
// super.onInit();
// GlobalController globalController = Get.find();
// Timer.periodic(Duration(milliseconds: 1000), (e) {
// if (model.isZhuMian) {
// var deviceInfo = globalController.model.deviceMain; //获取当前选中设备信息
// if (deviceInfo != null &&
// deviceInfo.isNotEmpty &&
// model.deviceMac != deviceInfo["mac"]) {
// model.deviceMac = deviceInfo["mac"];
// String deviceType = deviceInfo["deviceType"]["id"];
// if (deviceType == "1") {
// //床
// model.zhuMainRunTime = 900;
// model.zhuMainRunAllTime = 900;
// } else if (deviceType == "3") {
// //床垫
// model.zhuMainRunTime = 1800;
// model.zhuMainRunAllTime = 1800;
// }
// }
// int time =
// DateTime.now().millisecondsSinceEpoch - model.zhuMainInitTime;
// time = time ~/ 1000;
// if (time <= model.zhuMainRunAllTime) {
// model.zhuMainRunTime = model.zhuMainRunAllTime - time;
// } else {
// model.isZhuMian = false;
// model.zhuMainRunTime = 0;
// }
// }
// updateAll();
// });
// }
// Future bleSendCode(d) async {
// Completer completer = Completer();
// bleSendCodeNext(completer, d);
// return completer.future;
// }
// Future bleSendCodeNext(Completer completer, d) async {
// if (deviceProp == null) {
// showToast("蓝牙设备尚未连接");
// completer.completeError(Exception("蓝牙设备尚未连接"));
// return;
// }
// if (deviceProp!.isClose) {
// showToast("蓝牙已断开,请稍后再试");
// completer.completeError(Exception("蓝牙已断开"));
// return;
// }
// model.useLastTime = DateTime.now().millisecondsSinceEpoch;
// deviceProp!.write(Uint8List.fromList(d), ([d]) {
// completer.complete("success");
// }, (d) {
// completer.completeError(Exception("蓝牙发送失败"));
// });
// }
// websocketInit() {
// websocketProp = WebsocketProp();
// websocketProp!.initState(CommonVariables.wsUrl, {"message": onMessage});
// }
// websocketSend(v) {
// var deviceMain = glcontroller.model.deviceMain;
// if (deviceMain == null || deviceMain["mac"] == null) {
// return;
// }
// print("websocketSend 发送 $v");
// websocketProp?.sendMessage(
// {"type": "10002", "did": deviceMain["bindMacA"], "state": v});
// if (deviceMain["bindMacB"] != null && deviceMain["bindMacB"] != "") {
// websocketProp?.sendMessage(
// {"type": "10002", "did": deviceMain["bindMacB"], "state": v});
// }
// }
// bodyDataHandle(index, data) {
// var bodyData = model.bodyData[index]["bodyData"];
// if (bodyData.length > 0 &&
// data["data"]["deviceSendTime"] != null &&
// data["data"]["deviceSendTime"] ==
// bodyData[bodyData.length - 1]["deviceSendTime"]) {
// return;
// }
// model.bodyData[index]["lastData"] = data["data"];
// model.bodyData[index]["bodyData"].add(data["data"]);
// if (model.bodyData[index]["bodyData"].length > 120) {
// model.bodyData[index]["bodyData"].removeAt(0);
// }
// }
// onMessage(d) {
// var data = jsonDecode(d);
// if (calibrationListenCall != null) {
// calibrationListenCall?.call(data);
// return;
// }
// // print("receive ${data["data"]["deviceNo"]}");
// String mac = "${data?["data"]?["deviceNo"]}".toUpperCase() ?? "";
// if (CommonVariables.test) {
// if (data["data"]["breathRate"] == 0) {
// data["data"]["breathRate"] = Random().nextInt(10) + 10;
// }
// if (data["data"]["heartRate"] == 0) {
// data["data"]["heartRate"] = Random().nextInt(10) + 60;
// }
// }
// if ("${glcontroller.model.deviceMain["bindMacA"]}".length > 6 &&
// mac == "${glcontroller.model.deviceMain["bindMacA"]}".toUpperCase()) {
// bodyDataHandle(0, data);
// } else if ("${glcontroller.model.deviceMain["bindMacB"]}".length > 6 &&
// mac == "${glcontroller.model.deviceMain["bindMacB"]}".toUpperCase()) {
// bodyDataHandle(1, data);
// }
// }
// anmoReset() {
// pinlvTimerList = [null, null];
// model.anMoStart = false; //启动按摩
// model.isAnMoBei = false;
// model.isAnMoTui = false;
// model.anMoPattern = -1; //1234分别为模式1、2、3、4
// model.slideValue_bei = 1.0; //背部力度调节
// model.slideValue_tui = 1.0; //腿部力度调节
// model.timerPattern = -1; //定时设置 10、20、30分钟
// updateAll();
// }
// resetParm() {
// model.noAutoPattern = -1; //1 TV 2 零重力 3 阅读 4放平
// model.zhuMianPattern = -1; //1 一键放松 2 休闲模式 3腰部放松 4 腿部放松
// model.isZhuMian = false;
// model.useLastTime = DateTime.now().millisecondsSinceEpoch;
// model.bodyData = [
// {"lastData": {}, "bodyData": []},
// {"lastData": {}, "bodyData": []}
// ];
// anmoReset();
// }
// anMoChange() {
// model.zhuMianPattern = -1; //1 一键放松 2 休闲模式 3腰部放松 4 腿部放松
// model.isZhuMian = false;
// updateAll();
// }
}

View File

@@ -0,0 +1,46 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'bedController.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
BedModel _$BedModelFromJson(Map<String, dynamic> json) => BedModel()
..patternType = (json['patternType'] as num).toInt()
..noAutoPattern = (json['noAutoPattern'] as num).toInt()
..zhuMianPattern = (json['zhuMianPattern'] as num).toInt()
..anMoStart = json['anMoStart'] as bool
..isAnMoBei = json['isAnMoBei'] as bool
..isAnMoTui = json['isAnMoTui'] as bool
..anMoPattern = (json['anMoPattern'] as num).toInt()
..slideValue_bei = (json['slideValue_bei'] as num).toDouble()
..slideValue_tui = (json['slideValue_tui'] as num).toDouble()
..timerPattern = (json['timerPattern'] as num).toInt()
..isZhuMian = json['isZhuMian'] as bool
..zhuMainInitTime = (json['zhuMainInitTime'] as num).toInt()
..zhuMainRunTime = (json['zhuMainRunTime'] as num).toInt()
..zhuMainRunAllTime = (json['zhuMainRunAllTime'] as num).toInt()
..useLastTime = (json['useLastTime'] as num).toInt()
..deviceMac = json['deviceMac'] as String?
..bodyData = json['bodyData'] as List<dynamic>;
Map<String, dynamic> _$BedModelToJson(BedModel instance) => <String, dynamic>{
'patternType': instance.patternType,
'noAutoPattern': instance.noAutoPattern,
'zhuMianPattern': instance.zhuMianPattern,
'anMoStart': instance.anMoStart,
'isAnMoBei': instance.isAnMoBei,
'isAnMoTui': instance.isAnMoTui,
'anMoPattern': instance.anMoPattern,
'slideValue_bei': instance.slideValue_bei,
'slideValue_tui': instance.slideValue_tui,
'timerPattern': instance.timerPattern,
'isZhuMian': instance.isZhuMian,
'zhuMainInitTime': instance.zhuMainInitTime,
'zhuMainRunTime': instance.zhuMainRunTime,
'zhuMainRunAllTime': instance.zhuMainRunAllTime,
'useLastTime': instance.useLastTime,
'deviceMac': instance.deviceMac,
'bodyData': instance.bodyData,
};

View File

@@ -8,9 +8,7 @@ part of 'device_list_controller.dart';
DeviceListModel _$DeviceListModelFromJson(Map<String, dynamic> json) =>
DeviceListModel()
..deviceList = (json['deviceList'] as List<dynamic>)
.map((e) => DeviceModel.fromJson(e as Map<String, dynamic>))
.toList()
..deviceList = json['deviceList'] as List<dynamic>
..deviceListWyf = json['deviceListWyf'] as List<dynamic>;
Map<String, dynamic> _$DeviceListModelToJson(DeviceListModel instance) =>

View File

@@ -1,6 +1,8 @@
import 'package:ef/ef.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:vbvs_app/common/color/ServiceConstant.dart';
import 'package:vbvs_app/common/color/appConstants.dart';
import 'package:vbvs_app/common/util/requestWithLog.dart';
part 'issue_controller.g.dart';
@@ -22,34 +24,35 @@ class IssueListModel {
}
class IssueListController extends GetControllerEx<IssueListModel> {
// HelpRepository helpRepository = HelpRepository();
IssueListController() {
attr = GetModel(IssueListModel()).obs;
}
void onInit() async {
super.onInit();
await getIssueList();
}
getIssueList() async {
model.isLoading = true;
updateAll();
// //初始化列表数据
// Future<void> initData() async {
// if (model.isLoading) {
// return;
// }
// model.isLoading = true;
// final List<dynamic> fetchedRepairs = await helpRepository.findHelpInfos(
// limit: model.limit, offset: model.offset);
// if (fetchedRepairs != null) {
// List<IssueModel> infos = [];
// List<dynamic> tmp = fetchedRepairs as List<dynamic>;
// try {
// // infos = tmp.map((repair) => IssueModel.fromJson(repair)).toList();
// // model.issueList!.addAll(infos);
// model.issueList.addAll(tmp);
// } catch (e) {
// print('Error parsing JSON: $e');
// }
// }
// model.offset += model.limit; // 更新 offset下一次查询跳过当前已经加载的记录
// model.hasMore = fetchedRepairs.length == model.limit; // 判断是否还有更多数据
// model.isLoading = false;
// updateAll();
// }
String serviceAddress = ServiceConstant.service_address;
String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.issue_list;
String queryUrl = "$serviceAddress$serviceName$serviceApi";
requestWithLog(
logTitle: '获取所有的问题与帮助列表',
method: MyHttpMethod.get,
queryUrl: queryUrl,
onSuccess: (res) {
model.issueList = res.data;
model.isLoading = false;
updateAll();
},
onFailure: (e) {
model.isLoading = false;
updateAll();
},
);
}
}

View File

@@ -1,13 +1,15 @@
import 'package:ef/ef.dart';
import 'package:flutterflow_ui/flutterflow_ui.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:vbvs_app/common/color/ServiceConstant.dart';
import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/common/util/requestWithLog.dart';
import 'package:vbvs_app/controller/main_bottom/global_controller.dart';
part 'people_info_controller.g.dart'; // 由json_serializable自动生成的部分
@JsonSerializable()
class PeopleInfoPojo {
class PeopleInfoModel {
String? name;
String sex = "";
String? height;
@@ -15,95 +17,71 @@ class PeopleInfoPojo {
DateTime? birthday;
String? phone;
String? contact;
List peopleList = [];
PeopleInfoModel();
PeopleInfoPojo();
// // 从JSON反序列化时的异常处理
factory PeopleInfoPojo.fromJson(Map<String, dynamic> json) {
factory PeopleInfoModel.fromJson(Map<String, dynamic> json) {
try {
return _$PeopleInfoPojoFromJson(json);
return _$PeopleInfoModelFromJson(json);
} catch (e) {
// 在实际应用中,应该有更细致的异常处理策略和错误日志
return PeopleInfoPojo(); // 或者返回一个带有错误信息的特定PeopleInfoModel实例
return PeopleInfoModel(); // 或者返回一个带有错误信息的特定PeopleInfoModel实例
}
}
// 序列化为JSON时的异常处理
Map<String, dynamic> toJson() => _$PeopleInfoPojoToJson(this);
Map<String, dynamic> toJson() => _$PeopleInfoModelToJson(this);
}
class PeopleInfoController extends GetControllerEx<PeopleInfoPojo> {
class PeopleInfoController extends GetControllerEx<PeopleInfoModel> {
PeopleInfoController() {
attr = GetModel(PeopleInfoPojo()).obs;
attr = GetModel(PeopleInfoModel()).obs;
}
GlobalController get glcontroller => Get.find<GlobalController>();
@override
Future<void> initData(String mac) async {
await getPeoples(mac); // 控制器创建时立即执行
}
// getPeoples() async {
// var arr = [];
// String bindMacA =
// glcontroller.getUpperCaseMac(glcontroller.model.deviceMain["bindMacA"]);
// String bindMacB =
// glcontroller.getUpperCaseMac(glcontroller.model.deviceMain["bindMacB"]);
// arr.add(bindMacA);
// if (bindMacB.length > 6) {
// arr.add(bindMacB);
// } else {
// model.peopleList[1] = PeopleInfoPojo();
// }
// model.peopleList[0] = PeopleInfoPojo();
// print("getuser $arr");
// var data = await ef.from("app_personnel").select().inFilter("mac", arr);
// print("getuser $data");
// data?.forEach((d) {
// PeopleInfoPojo peopleInfoPojo = PeopleInfoPojo();
// peopleInfoPojo.name = d["name"];
// peopleInfoPojo.sex = d["gender"] == 1 ? "男" : "女";
// peopleInfoPojo.height = d["height"] == null ? null : "${d["height"]}";
// peopleInfoPojo.weight = d["weight"] == null ? null : "${d["weight"]}";
// if (d["birthday"] != null) {
// peopleInfoPojo.birthday = DateTime.parse(d["birthday"]).toLocal();
// }
// peopleInfoPojo.tel = d["tel"];
// peopleInfoPojo.emergencyContact = d["contact"];
// if (glcontroller.getUpperCaseMac(d['mac']) == bindMacA) {
// model.peopleList[0] = peopleInfoPojo;
// }
// if (glcontroller.getUpperCaseMac(d['mac']) == bindMacB) {
// model.peopleList[1] = peopleInfoPojo;
// }
// });
// updateAll();
// attr.value.updateAll();
// }
getPeoples(String mac) async {
String serviceAddress = ServiceConstant.service_address;
String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.person_info;
String queryUrl = "$serviceAddress$serviceName$serviceApi?mac=$mac";
// savePeoples() async {
// String bindMacA =
// glcontroller.getUpperCaseMac(glcontroller.model.deviceMain["bindMacA"]);
// String bindMacB =
// glcontroller.getUpperCaseMac(glcontroller.model.deviceMain["bindMacB"]);
// List<Future> arr = [];
// for (var i = 0; i < 2; i++) {
// if (i == 1 && bindMacB.length < 6) {
// break;
// }
// arr.add(ef.from("app_personnel").update({
// "name": model.peopleList[i].name,
// "gender": model.peopleList[i].sex == "男" ? 1 : 0,
// "height": int.tryParse("${model.peopleList[i].height}"),
// "weight": int.tryParse("${model.peopleList[i].weight}"),
// "birthday": model.peopleList[i].birthday == null
// ? null
// : model.peopleList[i].birthday.toString(),
// "tel": model.peopleList[i].tel,
// "contact": model.peopleList[i].emergencyContact
// }).eq("mac", i == 0 ? bindMacA : bindMacB));
// }
// return Future.wait(arr);
// }
requestWithLog(
logTitle: "获取设备的人员信息列表",
method: MyHttpMethod.get,
queryUrl: queryUrl,
onSuccess: (res) {
if (res.data != null && res.data is List) {
model.peopleList = res.data;
updateAll();
print("peopleList: ${model.peopleList}");
}
},
onFailure: (err) {
print("获取人员信息失败: $err");
},
);
}
// Future saveOnePeople(mac, data) async {
// return ef.from("app_personnel").update(data).eq("mac", mac);
// }
savePeoples(Map<String, dynamic> data) async {
String serviceAddress = ServiceConstant.service_address;
String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.person_info;
String queryUrl = "$serviceAddress$serviceName$serviceApi";
requestWithLog(
logTitle: "更新人员信息",
method: MyHttpMethod.put,
queryUrl: queryUrl,
data: data,
onSuccess: (res) {
print("更新人员信息成功: $res");
},
onFailure: (err) {
print("更新人员信息失败: $err");
},
);
}
}

View File

@@ -6,8 +6,8 @@ part of 'people_info_controller.dart';
// JsonSerializableGenerator
// **************************************************************************
PeopleInfoPojo _$PeopleInfoPojoFromJson(Map<String, dynamic> json) =>
PeopleInfoPojo()
PeopleInfoModel _$PeopleInfoModelFromJson(Map<String, dynamic> json) =>
PeopleInfoModel()
..name = json['name'] as String?
..sex = json['sex'] as String
..height = json['height'] as String?
@@ -15,16 +15,18 @@ PeopleInfoPojo _$PeopleInfoPojoFromJson(Map<String, dynamic> json) =>
..birthday = json['birthday'] == null
? null
: DateTime.parse(json['birthday'] as String)
..phone = json['tel'] as String?
..contact = json['emergencyContact'] as String?;
..phone = json['phone'] as String?
..contact = json['contact'] as String?
..peopleList = json['peopleList'] as List<dynamic>;
Map<String, dynamic> _$PeopleInfoPojoToJson(PeopleInfoPojo instance) =>
Map<String, dynamic> _$PeopleInfoModelToJson(PeopleInfoModel instance) =>
<String, dynamic>{
'name': instance.name,
'sex': instance.sex,
'height': instance.height,
'weight': instance.weight,
'birthday': instance.birthday?.toIso8601String(),
'tel': instance.phone,
'emergencyContact': instance.contact,
'phone': instance.phone,
'contact': instance.contact,
'peopleList': instance.peopleList,
};