1,新增人脸部分命令协议调试

2,新增人脸相关接口处理 更新人脸信息、删除人脸、清空人脸(未完成)
3,部分人脸详情处理(待完善)
This commit is contained in:
Daisy 2024-01-24 18:51:18 +08:00
parent 6e88b01f6d
commit a5817cffeb
24 changed files with 359 additions and 289 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -10,7 +10,7 @@ import 'package:crypto/crypto.dart' as crypto;
///TODO: ///TODO:
/* /*
UseCountLimit 0 UseCountLimit 0FingerNo 255userId Delete All !@# UseCountLimit 0 UseCountLimit 0FaceNo 255userId Delete All !@#
**/ **/
class SenderAddFaceCommand extends SenderProtocol { class SenderAddFaceCommand extends SenderProtocol {
String? keyID; String? keyID;

View File

@ -1,4 +1,4 @@
//TODO: //TODO:
import 'dart:convert'; import 'dart:convert';
import '../io_reply.dart'; import '../io_reply.dart';
@ -12,8 +12,8 @@ class SenderQueryingFaceStatusCommand extends SenderProtocol {
String? keyID; String? keyID;
String? userID; String? userID;
int? role; int? role;
int? fingerCount; int? faceCount;
int? fingerNo; int? faceNo;
List<int>? token; List<int>? token;
int? needAuthor; int? needAuthor;
List<int>? publicKey; List<int>? publicKey;
@ -23,8 +23,8 @@ class SenderQueryingFaceStatusCommand extends SenderProtocol {
this.keyID, this.keyID,
this.userID, this.userID,
this.role, this.role,
this.fingerCount, this.faceCount,
this.fingerNo, this.faceNo,
this.token, this.token,
this.needAuthor, this.needAuthor,
this.publicKey, this.publicKey,
@ -62,10 +62,10 @@ class SenderQueryingFaceStatusCommand extends SenderProtocol {
subData.add(role!); subData.add(role!);
// fingerCount // fingerCount
subData.add(fingerCount!); subData.add(faceCount!);
// FingerNo // FingerNo
subData.add(fingerNo!); subData.add(faceNo!);
if (needAuthor == 0) { if (needAuthor == 0) {
//AuthCodeLen 1 //AuthCodeLen 1

View File

@ -568,8 +568,8 @@ class IoSenderManage {
{required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? role, required int? role,
required int? fingerCount, required int? faceCount,
required int? fingerNo, required int? faceNo,
required List<int>? token, required List<int>? token,
required int? needAuthor, required int? needAuthor,
required List<int>? publicKey, required List<int>? publicKey,
@ -580,8 +580,8 @@ class IoSenderManage {
keyID: keyID, keyID: keyID,
userID: userID, userID: userID,
role: role, role: role,
fingerCount: fingerCount, faceCount: faceCount,
fingerNo: fingerNo, faceNo: faceNo,
token: token, token: token,
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,

View File

@ -0,0 +1,42 @@
class AddFaceEntity {
int? errorCode;
String? description;
String? errorMsg;
Data? data;
AddFaceEntity({this.errorCode, this.description, this.errorMsg, this.data});
AddFaceEntity.fromJson(Map<String, dynamic> json) {
errorCode = json['errorCode'];
description = json['description'];
errorMsg = json['errorMsg'];
data = json['data'] != null ? Data.fromJson(json['data']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['errorCode'] = errorCode;
data['description'] = description;
data['errorMsg'] = errorMsg;
if (this.data != null) {
data['data'] = this.data!.toJson();
}
return data;
}
}
class Data {
int? faceId;
Data({this.faceId});
Data.fromJson(Map<String, dynamic> json) {
faceId = json['faceId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['faceId'] = faceId;
return data;
}
}

View File

@ -24,7 +24,7 @@ class AddFaceLogic extends BaseGetXController {
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = _replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) async { EventBusManager().eventBus!.on<Reply>().listen((reply) async {
// //
if (reply is SenderAddFaceReply) { if (reply is SenderAddFaceReply) {
_replyAddFaceBegin(reply); _replyAddFaceBegin(reply);
} }
@ -105,14 +105,14 @@ class AddFaceLogic extends BaseGetXController {
Future<void> _replyAddFaceProcess(Reply reply) async { Future<void> _replyAddFaceProcess(Reply reply) async {
int status = reply.data[2]; int status = reply.data[2];
print("33 status:$status"); print("******33 status:$status");
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
print("${reply.commandType!.typeValue} 注册人脸过程数据解析成功"); print("${reply.commandType!.typeValue} 注册人脸过程数据解析成功");
if (reply.data[5] == 255) { if (reply.data[5] == 255) {
// //
print("${reply.commandType!.typeValue} 注册人脸过程失败"); print("${reply.commandType!.typeValue} 注册人脸过程失败");
showToast("添加失败"); showToast("添加失败");
Get.close(2); Get.close(2);
@ -121,7 +121,7 @@ class AddFaceLogic extends BaseGetXController {
// //
state.regIndex.value = reply.data[6]; state.regIndex.value = reply.data[6];
print("state.regIndex.value:${state.regIndex.value}"); print("注册人脸过程state.regIndex.value:${state.regIndex.value}");
} }
break; break;
case 0x06: case 0x06:
@ -203,6 +203,8 @@ class AddFaceLogic extends BaseGetXController {
List<int> getTokenList = changeStringListToIntList(token!); List<int> getTokenList = changeStringListToIntList(token!);
print( print(
"openDoorTokenPubToken:$getTokenList state.startDate.value:${state.startDate.value}"); "openDoorTokenPubToken:$getTokenList state.startDate.value:${state.startDate.value}");
print(
"限时人脸开始时间:${state.startDate.value ~/ 1000} 限时人脸结束时间:${state.endDate.value ~/ 1000}");
IoSenderManage.senderAddFaceCommand( IoSenderManage.senderAddFaceCommand(
keyID: "1", keyID: "1",
@ -244,23 +246,25 @@ class AddFaceLogic extends BaseGetXController {
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
// Toast.show(msg: "添加成功"); // Toast.show(msg: "添加成功");
updateFaceUserNoLoadData(entity.data!.fingerprintId.toString()); print('更新人脸用户账号成功了么1');
updateFaceUserNoLoadData(entity.data!.faceId!);
} }
} }
// //
void updateFaceUserNoLoadData(String faceId) async { void updateFaceUserNoLoadData(int faceId) async {
var entity = await ApiRepository.to.updateFaceUserNoLoadData( var entity = await ApiRepository.to.updateFaceUserNo(
faceId: faceId, faceId: faceId,
lockId: state.lockId.value.toString(), lockId: state.lockId.value,
faceUserNo: state.faceNumber.value, faceUserNo: state.faceNumber.value,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
print('更新人脸用户账号成功了么2');
showToast("添加成功"); showToast("添加成功");
if (state.fromType.value == 2) { if (state.fromType.value == 2) {
// //
eventBus eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(
.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(faceId)); faceId.toString()));
} else if (state.fromType.value == 1) { } else if (state.fromType.value == 1) {
eventBus.fire(OtherTypeRefreshListEvent()); eventBus.fire(OtherTypeRefreshListEvent());
} }

View File

@ -33,12 +33,14 @@ class _AddFacePageState extends State<AddFacePage> {
SizedBox( SizedBox(
height: 50.h, height: 50.h,
), ),
Image.asset( Obx(() => Image.asset(
'images/main/icon_addFace_step1.png', state.isClickAddFace.value == false
width: 100.w, ? 'images/main/icon_addFace_step1.png'
height: 457.h, : 'images/main/icon_addFace_step2.png',
fit: BoxFit.fitHeight, width: 100.w,
), height: 457.h,
fit: BoxFit.fitHeight,
)),
SizedBox( SizedBox(
height: 60.h, height: 60.h,
), ),

View File

@ -1,4 +1,3 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -11,19 +10,23 @@ import '../addFaceType_page.dart';
class AddFaceTypeManageTabbar extends StatefulWidget { class AddFaceTypeManageTabbar extends StatefulWidget {
var initialIndex = 1; var initialIndex = 1;
AddFaceTypeManageTabbar({Key? key, required this.initialIndex}) : super(key: key); AddFaceTypeManageTabbar({Key? key, required this.initialIndex})
: super(key: key);
@override @override
State<AddFaceTypeManageTabbar> createState() => _AddFaceTypeManageTabbarState(); State<AddFaceTypeManageTabbar> createState() =>
_AddFaceTypeManageTabbarState();
} }
class _AddFaceTypeManageTabbarState extends State<AddFaceTypeManageTabbar> with SingleTickerProviderStateMixin { class _AddFaceTypeManageTabbarState extends State<AddFaceTypeManageTabbar>
with SingleTickerProviderStateMixin {
late TabController _tabController; late TabController _tabController;
final List<ItemView> _itemTabs = <ItemView>[ final List<ItemView> _itemTabs = <ItemView>[
ItemView(title: TranslationLoader.lanKeys!.permanent!.tr, selectType: "0"), ItemView(title: TranslationLoader.lanKeys!.permanent!.tr, selectType: "0"),
ItemView(title: TranslationLoader.lanKeys!.timeLimit!.tr, selectType: "1"), ItemView(title: TranslationLoader.lanKeys!.timeLimit!.tr, selectType: "1"),
ItemView(title: TranslationLoader.lanKeys!.circulation!.tr, selectType: "2"), ItemView(
title: TranslationLoader.lanKeys!.circulation!.tr, selectType: "2"),
]; ];
@override @override
@ -34,17 +37,24 @@ class _AddFaceTypeManageTabbarState extends State<AddFaceTypeManageTabbar> with
vsync: this, vsync: this,
length: _itemTabs.length, length: _itemTabs.length,
initialIndex: widget.initialIndex); initialIndex: widget.initialIndex);
_tabController.addListener(() {
// print("_tabController.animation!.value:${_tabController.animation!.value} _tabController.index:${_tabController.index}");
if (_tabController.animation!.value == _tabController.index) {
FocusScope.of(context).requestFocus(FocusNode());
}
});
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Expanded( return Expanded(
child: Column( child: Column(
children: [ children: [
_tabBar(), _tabBar(),
_pageWidget(), _pageWidget(),
], ],
)); ));
} }
TabBar _tabBar() { TabBar _tabBar() {
@ -83,7 +93,9 @@ class _AddFaceTypeManageTabbarState extends State<AddFaceTypeManageTabbar> with
child: TabBarView( child: TabBarView(
controller: _tabController, controller: _tabController,
children: _itemTabs children: _itemTabs
.map((ItemView item) => AddFaceTypePage(selectType: item.selectType,)) .map((ItemView item) => AddFaceTypePage(
selectType: item.selectType,
))
.toList(), .toList(),
), ),
); );

View File

@ -69,6 +69,8 @@ class AddFaceTypeLogic extends BaseGetXController {
faceType = 4; faceType = 4;
} }
print(
"传出去的给你限时人脸开始时间:${int.parse(startDate) ~/ 1000} 限时人脸结束时间:${int.parse(endDate) ~/ 1000}");
// //
Get.toNamed(Routers.addFacePage, arguments: { Get.toNamed(Routers.addFacePage, arguments: {
"lockId": state.lockId.value, "lockId": state.lockId.value,

View File

@ -1,4 +1,3 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -28,6 +27,8 @@ class _AddFaceTypePageState extends State<AddFaceTypePage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
state.seletType.value = widget.selectType;
return indexChangeWidget(); return indexChangeWidget();
} }

View File

@ -2,11 +2,11 @@ import 'dart:async';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart'; import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_addFace.dart';
import 'package:star_lock/blue/io_type.dart'; import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/main/lockDetail/face/faceDetail/faceDetail_state.dart'; import 'package:star_lock/main/lockDetail/face/faceDetail/faceDetail_state.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addFingerprint.dart';
import '../../../../blue/io_reply.dart'; import '../../../../blue/io_reply.dart';
import '../../../../blue/io_tool/io_tool.dart'; import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart'; import '../../../../blue/io_tool/manager_event_bus.dart';
@ -22,30 +22,30 @@ class FaceDetailLogic extends BaseGetXController {
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = _replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) { EventBusManager().eventBus!.on<Reply>().listen((reply) {
// () // ()
if ((reply is SenderAddFingerprintReply)) { if ((reply is SenderAddFaceReply)) {
_replyAddFingerprintBegin(reply); _replyAddFaceBegin(reply);
} }
}); });
} }
// //
Future<void> _replyAddFingerprintBegin(Reply reply) async { Future<void> _replyAddFaceBegin(Reply reply) async {
int status = reply.data[2]; int status = reply.data[2];
print("status:$status"); print("status:$status");
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
print("${reply.commandType!.typeValue} 数据解析成功"); print("${reply.commandType!.typeValue} 删除人脸数据解析成功");
state.sureBtnState.value = 0; state.sureBtnState.value = 0;
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
dismissEasyLoading(); dismissEasyLoading();
deletFingerprintsData(); deletFaceData();
break; break;
case 0x06: case 0x06:
// //
print("${reply.commandType!.typeValue} 需要鉴权"); print("${reply.commandType!.typeValue} 删除人脸需要鉴权");
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
@ -56,10 +56,10 @@ class FaceDetailLogic extends BaseGetXController {
List<int> getTokenList = changeStringListToIntList(token!); List<int> getTokenList = changeStringListToIntList(token!);
String? userID = await Storage.getUid(); String? userID = await Storage.getUid();
IoSenderManage.senderAddFingerprintCommand( IoSenderManage.senderAddFaceCommand(
keyID: state.keyId.value.toString(), keyID: state.keyId.value.toString(),
userID: userID, userID: userID,
fingerNo: int.parse(state.typeNumber.value), faceNo: int.parse(state.typeNumber.value),
useCountLimit: 0, useCountLimit: 0,
startTime: state.effectiveDateTime.value, startTime: state.effectiveDateTime.value,
endTime: state.failureDateTime.value, endTime: state.failureDateTime.value,
@ -81,14 +81,14 @@ class FaceDetailLogic extends BaseGetXController {
break; break;
default: default:
// //
print("${reply.commandType!.typeValue} 失败"); print("${reply.commandType!.typeValue} 删除人脸失败");
break; break;
} }
} }
// //
Future<void> senderAddFingerprint() async { Future<void> senderAddFace() async {
if (state.sureBtnState.value == 1) { if (state.sureBtnState.value == 1) {
return; return;
} }
@ -113,10 +113,10 @@ class FaceDetailLogic extends BaseGetXController {
String? userID = await Storage.getUid(); String? userID = await Storage.getUid();
IoSenderManage.senderAddFingerprintCommand( IoSenderManage.senderAddFaceCommand(
keyID: state.keyId.value.toString(), keyID: state.keyId.value.toString(),
userID: userID, userID: userID,
fingerNo: int.parse(state.typeNumber.value), faceNo: int.parse(state.typeNumber.value),
useCountLimit: 0, useCountLimit: 0,
startTime: state.effectiveDateTime.value, startTime: state.effectiveDateTime.value,
endTime: state.failureDateTime.value, endTime: state.failureDateTime.value,
@ -136,13 +136,12 @@ class FaceDetailLogic extends BaseGetXController {
}); });
} }
// //
void deletFingerprintsData() async { void deletFaceData() async {
var entity = await ApiRepository.to.deletFingerprintsData( var entity = await ApiRepository.to.deleteFaceData(
fingerprintId: state.faceItemData.value.faceId.toString(), faceId: state.faceItemData.value.faceId!,
lockId: state.faceItemData.value.lockId.toString(), lockId: state.faceItemData.value.lockId!,
type: "0", );
deleteType: "1");
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("删除成功", something: () { showToast("删除成功", something: () {
Get.back(result: "addScuess"); Get.back(result: "addScuess");
@ -150,17 +149,28 @@ class FaceDetailLogic extends BaseGetXController {
} }
} }
// //
void editFingerprintsData() async { void updateFaceNameData() async {
var entity = await ApiRepository.to.editFingerprintsData( var entity = await ApiRepository.to.updateFaceName(
fingerprintId: state.keyId.value.toString(), lockId: state.faceItemData.value.lockId!,
lockId: state.faceItemData.value.lockId.toString(), faceId: state.faceItemData.value.faceId!,
weekDay: state.weekDay.value, faceName: state.changeNameController.text,
startDate: state.effectiveDateTime.value.toString(), );
endDate: state.failureDateTime.value.toString(), if (entity.errorCode!.codeIsSuccessful) {
isCoerced: state.isStressFingerprint.value ? "2" : "1", state.typeName.value = state.changeNameController.text;
fingerprintName: state.changeNameController.text, showToast("修改成功", something: () {
changeType: "1", Get.back(result: "addScuess");
});
}
}
//
void updateFaceValidityData() async {
var entity = await ApiRepository.to.updateFaceValidity(
lockId: state.faceItemData.value.lockId!,
faceId: state.faceItemData.value.faceId!,
startDate: state.effectiveDateTime.value,
endDate: state.failureDateTime.value,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("修改成功", something: () { showToast("修改成功", something: () {

View File

@ -20,11 +20,10 @@ class FaceDetailPage extends StatefulWidget {
const FaceDetailPage({Key? key}) : super(key: key); const FaceDetailPage({Key? key}) : super(key: key);
@override @override
State<FaceDetailPage> createState() => _FingerprintDetailPageState(); State<FaceDetailPage> createState() => _FaceDetailPageState();
} }
class _FingerprintDetailPageState extends State<FaceDetailPage> class _FaceDetailPageState extends State<FaceDetailPage> with RouteAware {
with RouteAware {
final logic = Get.put(FaceDetailLogic()); final logic = Get.put(FaceDetailLogic());
final state = Get.find<FaceDetailLogic>().state; final state = Get.find<FaceDetailLogic>().state;
@ -33,7 +32,7 @@ class _FingerprintDetailPageState extends State<FaceDetailPage>
return Scaffold( return Scaffold(
backgroundColor: AppColors.mainBackgroundColor, backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar( appBar: TitleAppBar(
barTitle: "指纹详情", barTitle: "人脸详情",
haveBack: true, haveBack: true,
backgroundColor: AppColors.mainColor, backgroundColor: AppColors.mainColor,
// actionsList: [ // actionsList: [
@ -48,8 +47,7 @@ class _FingerprintDetailPageState extends State<FaceDetailPage>
body: Column( body: Column(
children: [ children: [
Obx(() => CommonItem( Obx(() => CommonItem(
leftTitel: leftTitel: "人脸号",
"${TranslationLoader.lanKeys!.fingerprint!.tr}${TranslationLoader.lanKeys!.number!.tr}",
rightTitle: state.typeNumber.value, rightTitle: state.typeNumber.value,
isHaveDirection: false, isHaveDirection: false,
isHaveLine: true)), isHaveLine: true)),
@ -87,7 +85,7 @@ class _FingerprintDetailPageState extends State<FaceDetailPage>
var data = await Get.toNamed( var data = await Get.toNamed(
Routers.otherTypeKeyChangeDatePage, Routers.otherTypeKeyChangeDatePage,
arguments: { arguments: {
"fingerprintItemData": state.faceItemData.value, "faceItemData": state.faceItemData.value,
"pushType": 1, "pushType": 1,
}); });
if (data != null) { if (data != null) {
@ -103,7 +101,7 @@ class _FingerprintDetailPageState extends State<FaceDetailPage>
var data = await Get.toNamed( var data = await Get.toNamed(
Routers.otherTypeKeyChangeValidityDatePage, Routers.otherTypeKeyChangeValidityDatePage,
arguments: { arguments: {
"fingerprintItemData": state.faceItemData.value, "faceItemData": state.faceItemData.value,
}); });
if (data != null) { if (data != null) {
setState(() { setState(() {
@ -123,11 +121,11 @@ class _FingerprintDetailPageState extends State<FaceDetailPage>
rightTitle: state.weekDay.value.join(','), rightTitle: state.weekDay.value.join(','),
isHaveDirection: true, isHaveDirection: true,
action: () async { action: () async {
// //
var data = await Get.toNamed( var data = await Get.toNamed(
Routers.otherTypeKeyChangeValidityDatePage, Routers.otherTypeKeyChangeValidityDatePage,
arguments: { arguments: {
"fingerprintItemData": state.faceItemData.value, "faceItemData": state.faceItemData.value,
}); });
if (data != null) { if (data != null) {
setState(() { setState(() {
@ -286,8 +284,8 @@ class _FingerprintDetailPageState extends State<FaceDetailPage>
return; return;
} }
Get.back(); Get.back();
// //
logic.editFingerprintsData(); logic.updateFaceNameData();
}, },
cancelClick: () { cancelClick: () {
Get.back(); Get.back();
@ -305,8 +303,8 @@ class _FingerprintDetailPageState extends State<FaceDetailPage>
tipTitle: "确定要删除吗?", tipTitle: "确定要删除吗?",
sureClick: () { sureClick: () {
Get.back(); Get.back();
// //
logic.senderAddFingerprint(); logic.senderAddFace();
}, },
cancelClick: () { cancelClick: () {
Get.back(); Get.back();

View File

@ -1,14 +1,14 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceListData_entity.dart'; import 'package:star_lock/main/lockDetail/fingerprint/fingerprintList/fingerprintListData_entity.dart';
class FaceDetailState { class FaceDetailState {
final faceItemData = FaceItemData().obs; final faceItemData = FingerprintItemData().obs;
final TextEditingController changeNameController = TextEditingController(); final TextEditingController changeNameController = TextEditingController();
final typeNumber = "".obs; // final typeNumber = "".obs; //
final typeName = "".obs; // final typeName = "".obs; //
var effectiveDateTime = 0.obs; // var effectiveDateTime = 0.obs; //
var failureDateTime = 0.obs; // var failureDateTime = 0.obs; //
final keyType = 0.obs; // :1;23:4 final keyType = 0.obs; // :1;23:4
@ -20,7 +20,6 @@ class FaceDetailState {
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,
var sureBtnState = 0.obs; // 0() 1() var sureBtnState = 0.obs; // 0() 1()
final isStressFingerprint = false.obs;
FaceDetailState() { FaceDetailState() {
Map map = Get.arguments; Map map = Get.arguments;
faceItemData.value = map["faceItemData"]; faceItemData.value = map["faceItemData"];

View File

@ -1,131 +0,0 @@
class FaceListDataEntity {
int? errorCode;
String? description;
String? errorMsg;
Data? data;
FaceListDataEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
FaceListDataEntity.fromJson(Map<String, dynamic> json) {
errorCode = json['errorCode'];
description = json['description'];
errorMsg = json['errorMsg'];
data = json['data'] != null ? Data.fromJson(json['data']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['errorCode'] = errorCode;
data['description'] = description;
data['errorMsg'] = errorMsg;
if (this.data != null) {
data['data'] = this.data!.toJson();
}
return data;
}
}
class Data {
List<FaceItemData>? list;
int? pageNo;
int? pageSize;
int? pages;
int? total;
Data({this.list, this.pageNo, this.pageSize, this.pages, this.total});
Data.fromJson(Map<String, dynamic> json) {
if (json['list'] != null) {
list = <FaceItemData>[];
json['list'].forEach((v) {
list!.add(FaceItemData.fromJson(v));
});
}
pageNo = json['pageNo'];
pageSize = json['pageSize'];
pages = json['pages'];
total = json['total'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
if (list != null) {
data['list'] = list!.map((v) => v.toJson()).toList();
}
data['pageNo'] = pageNo;
data['pageSize'] = pageSize;
data['pages'] = pages;
data['total'] = total;
return data;
}
}
class FaceItemData {
int? lockId;
int? faceId;
String? faceName;
String? faceNumber;
int? startDate;
int? endDate;
int? status;
int? addType;
int? faceType;
List? cyclicConfig;
String? featureData;
int? createDate;
String? senderUsername;
String? validTimeStr;
FaceItemData(
{this.lockId,
this.faceId,
this.faceName,
this.faceNumber,
this.startDate,
this.endDate,
this.status,
this.addType,
this.faceType,
this.cyclicConfig,
this.featureData,
this.createDate,
this.senderUsername,
this.validTimeStr});
FaceItemData.fromJson(Map<String, dynamic> json) {
lockId = json['lockId'];
faceId = json['faceId'];
faceName = json['faceName'];
faceNumber = json['faceNumber'];
startDate = json['startDate'];
endDate = json['endDate'];
status = json['status'];
addType = json['addType'];
faceType = json['faceType'];
cyclicConfig = json['cyclicConfig'];
featureData = json['featureData'];
createDate = json['createDate'];
senderUsername = json['senderUsername'];
validTimeStr = json['validTimeStr'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['lockId'] = lockId;
data['faceId'] = faceId;
data['faceName'] = faceName;
data['faceNumber'] = faceNumber;
data['startDate'] = startDate;
data['endDate'] = endDate;
data['status'] = status;
data['addType'] = addType;
data['faceType'] = faceType;
data['cyclicConfig'] = cyclicConfig;
data['featureData'] = featureData;
data['createDate'] = createDate;
data['senderUsername'] = senderUsername;
data['validTimeStr'] = validTimeStr;
return data;
}
}

View File

@ -52,7 +52,11 @@ class FaceListLogic extends BaseGetXController {
state.isDeletFaceData = false; state.isDeletFaceData = false;
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
dismissEasyLoading(); dismissEasyLoading();
deletAllFacesData(); if (state.isDeletAll == false) {
deletFacesData();
} else {
clearAllFacesData();
}
break; break;
case 0x06: case 0x06:
// //
@ -255,8 +259,8 @@ class FaceListLogic extends BaseGetXController {
keyID: BlueManage().connectDeviceName, keyID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
role: 0xff, role: 0xff,
fingerCount: 20, faceCount: 20,
fingerNo: 1, faceNo: 1,
token: getTokenList, token: getTokenList,
needAuthor: 1, needAuthor: 1,
publicKey: getPublicKeyList, publicKey: getPublicKeyList,
@ -347,27 +351,40 @@ class FaceListLogic extends BaseGetXController {
} }
} }
// //
void deletAllFacesData() async { void deletFacesData() async {
var fingerprintId = ""; var faceId = "";
var type = "1"; var type = "1";
if (state.isDeletAll == false) { if (state.isDeletAll == false) {
fingerprintId = state.deletKeyID; faceId = state.deletKeyID;
type = "0"; type = "0";
} }
print("delet fingerprintId $fingerprintId"); print("delet faceId $faceId");
var entity = await ApiRepository.to.deletFingerprintsData( var entity = await ApiRepository.to.deleteFaceData(
fingerprintId: fingerprintId, faceId: int.parse(faceId),
lockId: state.lockId.value.toString(), lockId: state.lockId.value,
type: type, );
deleteType: "1");
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
if (state.isDeletAll == false) { showToast("删除成功");
showToast("删除成功"); state.isDeletFaceData = false;
} else { getFaceListData();
showToast("重置成功"); }
} }
//
void clearAllFacesData() async {
var faceId = "";
var type = "1";
if (state.isDeletAll == false) {
faceId = state.deletKeyID;
type = "0";
}
print("delet faceId $faceId");
var entity = await ApiRepository.to.clearFaceData(
lockId: state.lockId.value,
);
if (entity.errorCode!.codeIsSuccessful) {
showToast("重置成功");
state.isDeletFaceData = false; state.isDeletFaceData = false;
getFaceListData(); getFaceListData();
} }

View File

@ -2,7 +2,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceListData_entity.dart'; import 'package:star_lock/main/lockDetail/fingerprint/fingerprintList/fingerprintListData_entity.dart';
import 'package:star_lock/tools/keySearchWidget.dart'; import 'package:star_lock/tools/keySearchWidget.dart';
import 'package:star_lock/tools/left_slide_actions.dart'; import 'package:star_lock/tools/left_slide_actions.dart';
@ -91,7 +91,7 @@ class _FaceListState extends State<FaceList> {
? ListView.separated( ? ListView.separated(
itemCount: state.faceItemListData.value.length, itemCount: state.faceItemListData.value.length,
itemBuilder: (c, index) { itemBuilder: (c, index) {
FaceItemData getFaceItemData = FingerprintItemData getFaceItemData =
state.faceItemListData.value[index]; state.faceItemListData.value[index];
// //
if (index < state.faceItemListData.value.length) { if (index < state.faceItemListData.value.length) {
@ -105,7 +105,7 @@ class _FaceListState extends State<FaceList> {
borderRadius: BorderRadius.all(Radius.circular(1)), borderRadius: BorderRadius.all(Radius.circular(1)),
), ),
child: _keyItem( child: _keyItem(
'images/icon_fingerprint.png', 'images/icon_face.png',
getFaceItemData.faceName!, getFaceItemData.faceName!,
(getFaceItemData.faceType! != 1) (getFaceItemData.faceType! != 1)
? (getFaceItemData.endDate! < ? (getFaceItemData.endDate! <
@ -141,7 +141,7 @@ class _FaceListState extends State<FaceList> {
} }
} }
Widget _buildDeleteBtn(FaceItemData faceItemData) { Widget _buildDeleteBtn(FingerprintItemData faceItemData) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
// : // :

View File

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceListData_entity.dart'; import 'package:star_lock/main/lockDetail/fingerprint/fingerprintList/fingerprintListData_entity.dart';
class FaceListState { class FaceListState {
final TextEditingController searchController = TextEditingController(); final TextEditingController searchController = TextEditingController();
@ -13,7 +13,7 @@ class FaceListState {
var deletUserID = "DeleteAll!@#"; var deletUserID = "DeleteAll!@#";
var deletFaceNo = 0; var deletFaceNo = 0;
final faceItemListData = <FaceItemData>[].obs; final faceItemListData = <FingerprintItemData>[].obs;
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,

View File

@ -82,26 +82,44 @@ class FingerprintItemData {
String? cardNumber; String? cardNumber;
int? cardType; int? cardType;
int? cardId; int? cardId;
int? faceId;
String? faceName;
String? faceNumber;
int? status;
int? addType;
int? faceType;
List? cyclicConfig;
String? featureData;
FingerprintItemData( FingerprintItemData(
{ this.fingerprintStatus, {this.fingerprintStatus,
this.lockId, this.lockId,
this.createDate, this.createDate,
this.fingerprintName, this.fingerprintName,
this.endDate, this.endDate,
this.apiUserId, this.apiUserId,
this.nickName, this.nickName,
this.isCoerced, this.isCoerced,
this.startDate, this.startDate,
this.fingerprintNumber, this.fingerprintNumber,
this.fingerprintType, this.fingerprintType,
this.fingerprintId, this.fingerprintId,
this.senderUsername, this.senderUsername,
this.weekDay, this.weekDay,
this.validTimeStr, this.validTimeStr,
this.cardName, this.cardName,
this.cardNumber, this.cardNumber,
this.cardType, this.cardType,
this.cardId}); this.cardId,
this.faceId,
this.faceName,
this.faceNumber,
this.status,
this.addType,
this.faceType,
this.cyclicConfig,
this.featureData});
FingerprintItemData.fromJson(Map<String, dynamic> json) { FingerprintItemData.fromJson(Map<String, dynamic> json) {
fingerprintStatus = json['fingerprintStatus']; fingerprintStatus = json['fingerprintStatus'];
@ -123,6 +141,14 @@ class FingerprintItemData {
cardNumber = json['cardNumber']; cardNumber = json['cardNumber'];
cardType = json['cardType']; cardType = json['cardType'];
cardId = json['cardId']; cardId = json['cardId'];
faceId = json['faceId'];
faceName = json['faceName'];
faceNumber = json['faceNumber'];
status = json['status'];
addType = json['addType'];
faceType = json['faceType'];
cyclicConfig = json['cyclicConfig'];
featureData = json['featureData'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -146,6 +172,15 @@ class FingerprintItemData {
data['cardNumber'] = cardNumber; data['cardNumber'] = cardNumber;
data['cardType'] = cardType; data['cardType'] = cardType;
data['cardId'] = cardId; data['cardId'] = cardId;
data['faceId'] = faceId;
data['faceName'] = faceName;
data['faceNumber'] = faceNumber;
data['status'] = status;
data['addType'] = addType;
data['faceType'] = faceType;
data['cyclicConfig'] = cyclicConfig;
data['featureData'] = featureData;
return data; return data;
} }
} }

View File

@ -28,7 +28,7 @@ class _RealTimePicturePageState extends State<RealTimePicturePage>
super.initState(); super.initState();
// //
Timer(const Duration(seconds: 30), () { state.autoBackTimer = Timer(const Duration(seconds: 30), () {
Get.back(); Get.back();
}); });
@ -380,6 +380,7 @@ class _RealTimePicturePageState extends State<RealTimePicturePage>
// //
CallTalk().stopPcmSound(); CallTalk().stopPcmSound();
state.realTimePicTimer.cancel(); state.realTimePicTimer.cancel();
state.autoBackTimer.cancel();
if (state.animationController != null) { if (state.animationController != null) {
state.animationController.stop(); state.animationController.stop();
} }
@ -388,6 +389,9 @@ class _RealTimePicturePageState extends State<RealTimePicturePage>
@override @override
void dispose() { void dispose() {
state.animationController.dispose(); state.animationController.dispose();
state.realTimePicTimer.cancel();
state.autoBackTimer.cancel();
CallTalk().stopPcmSound();
super.dispose(); super.dispose();
} }
} }

View File

@ -37,6 +37,8 @@ class RealTimePictureState {
late Timer openDoorTimer; late Timer openDoorTimer;
late AnimationController animationController; late AnimationController animationController;
late Timer autoBackTimer =
Timer(const Duration(seconds: 1), () {}); //30
late Timer realTimePicTimer = late Timer realTimePicTimer =
Timer(const Duration(seconds: 1), () {}); // Timer(const Duration(seconds: 1), () {}); //
var elapsedSeconds = 0.obs; var elapsedSeconds = 0.obs;

View File

@ -1,6 +1,6 @@
abstract class Api { abstract class Api {
static String baseAddress = "https://pre.lock.star-lock.cn"; // // static String baseAddress = "https://pre.lock.star-lock.cn"; //
// static String baseAddress = "https://dev.lock.star-lock.cn"; // static String baseAddress = "https://dev.lock.star-lock.cn"; //
// static String baseAddress = "http://192.168.1.15:8022"; // // static String baseAddress = "http://192.168.1.15:8022"; //
// static String baseAddress = "https://ge.lock.star-lock.cn"; // // static String baseAddress = "https://ge.lock.star-lock.cn"; //
@ -110,6 +110,9 @@ abstract class Api {
final String addFaceURL = '/face/add'; // final String addFaceURL = '/face/add'; //
final String checkFaceNameURL = '/face/checkFaceName'; // final String checkFaceNameURL = '/face/checkFaceName'; //
final String updateFaceUserNoURL = '/face/updateFaceUserNo'; // final String updateFaceUserNoURL = '/face/updateFaceUserNo'; //
final String updateFaceUserInfoURL = '/face/update'; // --
final String deleteFaceURL = '/face/delete'; //
final String clearFaceURL = '/face/clear'; //
final String getICCardListURL = '/identityCard/list'; // IC卡列表 final String getICCardListURL = '/identityCard/list'; // IC卡列表
final String addICCardURL = '/identityCard/add'; // IC卡 final String addICCardURL = '/identityCard/add'; // IC卡

View File

@ -1069,13 +1069,47 @@ class ApiProvider extends BaseProvider {
jsonEncode({'lockId': lockId, 'faceName': faceName})); jsonEncode({'lockId': lockId, 'faceName': faceName}));
// //
Future<Response> updateFaceUserNoLoadData( Future<Response> updateFaceUserNo(
String faceId, String lockId, String faceUserNo) => int faceId, int lockId, String faceUserNo) =>
post( post(
updateFaceUserNoURL.toUrl, updateFaceUserNoURL.toUrl,
jsonEncode( jsonEncode(
{'faceId': faceId, 'lockId': lockId, 'faceUserNo': faceUserNo})); {'faceId': faceId, 'lockId': lockId, 'faceUserNo': faceUserNo}));
// --
Future<Response> updateFaceName(int faceId, int lockId, String faceName) =>
post(
updateFaceUserInfoURL.toUrl,
jsonEncode(
{'faceId': faceId, 'lockId': lockId, 'faceName': faceName}));
// --
Future<Response> updateFaceValidity(
int faceId, int lockId, int startDate, int endDate) =>
post(
updateFaceUserInfoURL.toUrl,
jsonEncode({
'faceId': faceId,
'lockId': lockId,
'startDate': startDate,
'endDate': endDate
}));
//
Future<Response> deleteFaceData(int faceId, int lockId) => post(
deleteFaceURL.toUrl,
jsonEncode({
'faceId': faceId,
'lockId': lockId,
}));
//
Future<Response> clearFaceData(int lockId) => post(
clearFaceURL.toUrl,
jsonEncode({
'lockId': lockId,
}));
// IC卡列表 // IC卡列表
Future<Response> getICCardListData( Future<Response> getICCardListData(
String lockId, String pageNo, String pageSize, String searchStr) => String lockId, String pageNo, String pageSize, String searchStr) =>

View File

@ -31,8 +31,8 @@ class BaseProvider extends GetConnect with Api {
bool? isUnShowLoading = false}) async { bool? isUnShowLoading = false}) async {
// print("post: url:${url} body:${body} contentType:${contentType} headers:${headers} query:${query}"); // print("post: url:${url} body:${body} contentType:${contentType} headers:${headers} query:${query}");
if (isUnShowLoading == false) EasyLoading.show(); if (isUnShowLoading == false) EasyLoading.show();
// print('请求url======>$url');
print('星锁请求body体为${body}'); // print('请求body体======>$body');
var res = await super.post(url, body, var res = await super.post(url, body,
contentType: contentType, contentType: contentType,
headers: headers, headers: headers,
@ -56,7 +56,7 @@ class BaseProvider extends GetConnect with Api {
statusText: res.statusText, statusText: res.statusText,
); );
} else {} } else {}
// print('得到的数据======>bodyString:${res.bodyString} body:${res.body} bodyBytes:${res.bodyBytes} status:${res.status} statusText:${res.statusText} statusCode:${res.statusCode}'); // print('得到的数据======>${res.bodyString}');
getDataResult(res.body); getDataResult(res.body);
return res; return res;
} }
@ -67,19 +67,19 @@ class BaseProvider extends GetConnect with Api {
Get.offNamedUntil(Routers.starLockLoginPage, (route) => false); Get.offNamedUntil(Routers.starLockLoginPage, (route) => false);
break; break;
case 500: case 500:
EasyLoading.showToast("服务器错误",duration: 2000.milliseconds); EasyLoading.showToast("服务器错误", duration: 2000.milliseconds);
break; break;
case 421: case 421:
case 422: case 422:
case 430: //ErrorMsg case 430: //ErrorMsg
EasyLoading.showToast(T["errorMsg"],duration: 2000.milliseconds); EasyLoading.showToast(T["errorMsg"], duration: 2000.milliseconds);
break; break;
// //
// case 425: // case 425:
// Toast.show(msg: "用户不存在"); // Toast.show(msg: "用户不存在");
// break; // break;
case 10001: case 10001:
EasyLoading.showToast("数据不存在",duration: 2000.milliseconds); EasyLoading.showToast("数据不存在", duration: 2000.milliseconds);
break; break;
} }
} }

View File

@ -4,7 +4,7 @@ import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyO
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserListEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceListData_entity.dart'; import 'package:star_lock/main/lockDetail/face/addFace/addFace_entity.dart';
import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart'; import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart';
@ -1168,7 +1168,7 @@ class ApiRepository {
} }
// //
Future<FaceListDataEntity> getFaceListData({ Future<FingerprintListDataEntity> getFaceListData({
required String lockId, required String lockId,
required String pageNo, required String pageNo,
required String pageSize, required String pageSize,
@ -1176,11 +1176,11 @@ class ApiRepository {
}) async { }) async {
final res = final res =
await apiProvider.getFaceListData(lockId, pageNo, pageSize, searchStr); await apiProvider.getFaceListData(lockId, pageNo, pageSize, searchStr);
return FaceListDataEntity.fromJson(res.body); return FingerprintListDataEntity.fromJson(res.body);
} }
// //
Future<AddFingerprintEntity> addFaceData({ Future<AddFaceEntity> addFaceData({
required int lockId, required int lockId,
required String faceName, required String faceName,
required String faceNumber, required String faceNumber,
@ -1193,7 +1193,7 @@ class ApiRepository {
}) async { }) async {
final res = await apiProvider.addFaceData(lockId, faceName, faceNumber, final res = await apiProvider.addFaceData(lockId, faceName, faceNumber,
faceType, startDate, endDate, featureData, addType, cyclicConfig); faceType, startDate, endDate, featureData, addType, cyclicConfig);
return AddFingerprintEntity.fromJson(res.body); return AddFaceEntity.fromJson(res.body);
} }
// //
@ -1204,12 +1204,48 @@ class ApiRepository {
} }
// //
Future<LoginEntity> updateFaceUserNoLoadData( Future<LoginEntity> updateFaceUserNo(
{required String faceId, {required int faceId,
required String lockId, required int lockId,
required String faceUserNo}) async { required String faceUserNo}) async {
final res = final res = await apiProvider.updateFaceUserNo(faceId, lockId, faceUserNo);
await apiProvider.updateFaceUserNoLoadData(faceId, lockId, faceUserNo); return LoginEntity.fromJson(res.body);
}
// --
Future<LoginEntity> updateFaceName(
{required int faceId,
required int lockId,
required String faceName}) async {
final res = await apiProvider.updateFaceName(faceId, lockId, faceName);
return LoginEntity.fromJson(res.body);
}
// --
Future<LoginEntity> updateFaceValidity(
{required int faceId,
required int lockId,
required int startDate,
required int endDate}) async {
final res = await apiProvider.updateFaceValidity(
faceId, lockId, startDate, endDate);
return LoginEntity.fromJson(res.body);
}
//
Future<LoginEntity> deleteFaceData({
required int faceId,
required int lockId,
}) async {
final res = await apiProvider.deleteFaceData(faceId, lockId);
return LoginEntity.fromJson(res.body);
}
//
Future<LoginEntity> clearFaceData({
required int lockId,
}) async {
final res = await apiProvider.clearFaceData(lockId);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }