2024-09-04 09:53:59 +08:00

425 lines
16 KiB
Dart
Executable File

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_page.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_state.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_entity.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import '../../../../../tools/commonDataManage.dart';
import '../../../../../tools/custom_bottom_sheet.dart';
import '../../../../../tools/dateTool.dart';
import '../../../../../tools/eventBusEventManage.dart';
import '../../../../../tools/pickers/time_picker/time_utils.dart';
import '../../../../../tools/showTipView.dart';
import '../../../lockOperatingRecord/keyOperationRecord_entity.dart';
typedef BlockIsHaveAllDataCallback = void Function(bool isAllData);
class ElectronicKeyDetailLogic extends BaseGetXController {
final ElectronicKeyDetailState state = ElectronicKeyDetailState();
List<dynamic> get weekDayStr {
return state.weekDay.map((e) => TimeUtils.translateWeekday(e)).toList();
}
//修改钥匙名称请求
Future<void> modifyKeyNameRequest() async {
if (state.changeNameController.text.isEmpty) {
showToast('请输入钥匙名称'.tr);
return;
}
final KeyOperationRecordEntity entity = await ApiRepository.to
.modifyKeyNameForAdmin(state.itemData.value.keyId.toString(),
state.changeNameController.text, '');
if (entity.errorCode!.codeIsSuccessful) {
state.itemData.value.keyName = state.changeNameController.text;
state.keyName.value = state.itemData.value.keyName!;
Get.back();
showToast('修改成功'.tr, something: () {
eventBus.fire(ElectronicKeyListRefreshUI());
eventBus.fire(AuthorizedAdminPageRefreshUI());
});
}
}
//编辑电子钥匙有效期请求 updateType 1:仅管理自己创建的用户 2:远程开锁
Future<void> updateKeyDateRequest(int updateType) async {
final KeyOperationRecordEntity entity = await ApiRepository.to
.updateKeyDate(
keyId: state.itemData.value.keyId.toString(),
lockId: state.itemData.value.lockId.toString(),
endDate: state.endDate.value.toString(),
startDate: state.starDate.value.toString(),
weekDays: state.itemData.value.weekDays!,
keyType: state.itemData.value.keyType!,
startTime: int.parse(state.starTime.value),
endTime: int.parse(state.endTime.value),
isOnlyManageSelf:
state.onlyManageYouCreatesUser.value == true ? 1 : 0,
remoteEnable: state.isRemoteUnlock.value == true ? 1 : 2);
if (entity.errorCode!.codeIsSuccessful) {
showToast('修改成功'.tr, something: () {
eventBus.fire(ElectronicKeyListRefreshUI());
eventBus.fire(AuthorizedAdminPageRefreshUI());
});
}
}
//删除电子钥匙名称请求
Future<void> deleteKeyRequest(int includeUnderlings) async {
final ElectronicKeyListEntity entity = await ApiRepository.to
.deleteElectronicKey(
keyId: state.itemData.value.keyId.toString(),
includeUnderlings: includeUnderlings);
if (entity.errorCode!.codeIsSuccessful) {
showToast('删除成功'.tr, something: () {
eventBus.fire(ElectronicKeyListRefreshUI());
eventBus.fire(AuthorizedAdminPageRefreshUI());
Get.back();
});
}
}
//设置授权管理员
Future<void> setAdministrator() async {
final ElectronicKeyListEntity entity =
await ApiRepository.to.setAdministrator(
keyId: state.itemData.value.keyId.toString(),
);
if (entity.errorCode!.codeIsSuccessful) {
showToast('设置成功'.tr, something: () {
eventBus.fire(ElectronicKeyListRefreshUI());
eventBus.fire(AuthorizedAdminPageRefreshUI());
Get.back();
});
}
}
//取消授权管理员
Future<void> cancelAdministrator() async {
final ElectronicKeyListEntity entity =
await ApiRepository.to.cancelAdministrator(
keyId: state.itemData.value.keyId.toString(),
);
if (entity.errorCode!.codeIsSuccessful) {
showToast('设置成功'.tr, something: () {
eventBus.fire(ElectronicKeyListRefreshUI());
eventBus.fire(AuthorizedAdminPageRefreshUI());
Get.back();
});
}
}
//冻结
Future<void> freezeKey(int includeUnderlings) async {
final ElectronicKeyListEntity entity = await ApiRepository.to.freezeKey(
keyId: state.itemData.value.keyId.toString(),
includeUnderlings: includeUnderlings);
if (entity.errorCode!.codeIsSuccessful) {
showToast('设置成功'.tr, something: () {
eventBus.fire(ElectronicKeyListRefreshUI());
eventBus.fire(AuthorizedAdminPageRefreshUI());
Get.back();
});
}
}
//解除冻结
Future<void> cancelFreeze(int includeUnderlings) async {
final ElectronicKeyListEntity entity = await ApiRepository.to.cancelFreeze(
keyId: state.itemData.value.keyId.toString(),
includeUnderlings: includeUnderlings);
if (entity.errorCode!.codeIsSuccessful) {
showToast('设置成功'.tr, something: () {
eventBus.fire(ElectronicKeyListRefreshUI());
eventBus.fire(AuthorizedAdminPageRefreshUI());
Get.back();
});
}
}
//检查实名认证状态
Future<void> checkRealNameStatus(int realNameAuthStatus) async {
//打开实名认证 必须输入身份证号和真实姓名
if (realNameAuthStatus == 1) {
final ValueAddedServicesHighFunctionEntity entity =
await ApiRepository.to.keyCheckFace(
lockId: CommonDataManage().currentKeyInfo.lockId ?? 0,
);
if (entity.errorCode!.codeIsSuccessful) {
if (state.getRealName.value.isEmpty ||
state.getIDCardNumber.value.isEmpty) {
ShowCupertinoAlertView().showOpenAuthWithIDCardInfoAlert(
(String? idCard, String? realName) {
state.getIDCardNumber.value = idCard ?? '';
state.getRealName.value = realName ?? '';
updateRealNameInfoWithAuthStatus(realNameAuthStatus);
});
} else {
updateRealNameInfoWithAuthStatus(realNameAuthStatus);
}
} else if (entity.errorCode == 432) {
//432--余量不足,需购买
ShowCupertinoAlertView().showBuyTipWithContentAlert(
titleStr: '实名认证为付费功能,请购买后再使用'.tr,
sureClick: () {
Get.toNamed(Routers.valueAddedServicesRealNamePage);
// Get.toNamed(Routers.advancedFeaturesWebPage, arguments: {
// 'webBuyType': XSConstantMacro.webBuyTypeAuth,
// });
});
} else if (entity.errorCode == 433) {
//需联系管理员购买
ShowCupertinoAlertView().showContactAdministratorBuyAlert();
}
} else {
updateRealNameInfoWithAuthStatus(realNameAuthStatus);
}
}
//更新钥匙实名认证信息--实名认证状态
Future<void> updateRealNameInfoWithAuthStatus(int realNameAuthStatus) async {
final KeyOperationRecordEntity entity = await ApiRepository.to
.updateRealNameInfo(
lockId: state.itemData.value.lockId ?? 0,
keyId: state.itemData.value.keyId ?? 0,
uid: state.itemData.value.uid ?? 0,
faceAuthentication: realNameAuthStatus,
realName: state.getRealName.value,
idCardNumber: state.getIDCardNumber.value);
if (entity.errorCode!.codeIsSuccessful) {
state.isRealNameAuth.value = !state.isRealNameAuth.value;
showToast('修改成功'.tr, something: () {
eventBus.fire(ElectronicKeyListRefreshUI());
eventBus.fire(AuthorizedAdminPageRefreshUI());
});
}
}
//更新钥匙实名认证信息
Future<void> updateRealNameInfoRequest(ShowAlertEnum alertEnum) async {
switch (alertEnum) {
case ShowAlertEnum.realName:
if (state.changeRealNameController.text.isEmpty) {
showToast('请输入真实姓名'.tr);
return;
}
break;
case ShowAlertEnum.idCardNumber:
if (state.changeIDCardController.text.isEmpty) {
showToast('请输入身份证号'.tr);
return;
}
break;
default:
}
final KeyOperationRecordEntity entity = await ApiRepository.to
.updateRealNameInfo(
lockId: state.itemData.value.lockId ?? 0,
keyId: state.itemData.value.keyId ?? 0,
uid: state.itemData.value.uid ?? 0,
faceAuthentication: state.isRealNameAuth.value ? 1 : 2,
realName: state.changeRealNameController.text,
idCardNumber: state.changeIDCardController.text);
if (entity.errorCode!.codeIsSuccessful) {
if (alertEnum == ShowAlertEnum.realName) {
state.itemData.value.userIdCard!.realName =
state.changeRealNameController.text;
state.getRealName.value = state.itemData.value.userIdCard!.realName!;
} else if (alertEnum == ShowAlertEnum.idCardNumber) {
state.itemData.value.userIdCard!.idCardNumber =
state.changeIDCardController.text;
state.getIDCardNumber.value =
state.itemData.value.userIdCard!.idCardNumber!;
}
showToast('修改成功'.tr, something: () {
eventBus.fire(ElectronicKeyListRefreshUI());
eventBus.fire(AuthorizedAdminPageRefreshUI());
});
}
}
String getKeyTypeShowDateTime() {
String useDateStr = '';
if (state.keyType.value == 1) {
useDateStr = '永久'.tr;
} else if (state.keyType.value == 2) {
useDateStr =
'${DateTool().dateToYMDHNString(state.starDate.value)}\n${DateTool().dateToYMDHNString(state.endDate.value)}';
} else if (state.keyType.value == 3) {
useDateStr = '单次'.tr;
} else if (state.keyType.value == 4) {
useDateStr =
'${DateTool().dateToYMDString(state.starDate.value)}\n${DateTool().dateToYMDString(state.endDate.value)}';
}
return useDateStr;
}
Future<void> openModalBottomSheet(BuildContext context) async {
List<String> textList = <String>[];
final bool isAdminKey = state.itemData.value.keyRight == 1;
final bool isLockOwner = CommonDataManage().currentKeyInfo.isLockOwner == 1;
if (isAdminKey) {
// 授权管理员
textList = <String>[
if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen)
'解除冻结'.tr
else
'冻结'.tr,
if (isLockOwner) '取消授权'.tr
];
} else if (isLockOwner) {
// 锁拥有者
if (state.keyType.value == 1 || state.keyType.value == 2) {
textList = <String>[
if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen)
'解除冻结'.tr
else
'冻结'.tr,
if (state.itemData.value.keyRight == 1) '取消授权'.tr else '授权'.tr
];
} else if (state.keyType.value == 4) {
textList = <String>[
if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen)
'解除冻结'.tr
else
'冻结'.tr
];
}
} else {
textList = <String>[
if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen)
'解除冻结'.tr
else
'冻结'.tr,
];
}
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadiusDirectional.circular(10)),
builder: (BuildContext context) {
return AlertBottomWidget(
topTitle: '',
items: textList,
chooseCallback: (int value) {
final int index = value;
if (index == 0) {
if (state.itemData.value.keyStatus ==
XSConstantMacro.keyStatusFrozen) {
// 解除冻结
if (state.itemData.value.keyRight == 1) {
// 管理员
ShowTipView().showDeleteAdministratorIsHaveAllDataDialog(
'同时解冻其发送的钥匙'.tr, (bool isAllData) {
cancelFreeze(isAllData ? 1 : 0);
});
} else {
ShowTipView()
.showIosTipWithContentDialog('会在用户APP连网后生效'.tr, () {
cancelFreeze(0);
});
}
} else {
if (state.itemData.value.keyRight == 1) {
// 管理员
ShowTipView().showDeleteAdministratorIsHaveAllDataDialog(
'同时冻结其发送的钥匙'.tr, (bool isAllData) {
freezeKey(isAllData ? 1 : 0);
});
} else {
ShowTipView()
.showIosTipWithContentDialog('冻结会在用户APP连网后生效'.tr, () {
freezeKey(0);
});
}
}
} else {
// 取消/授权管理员
if (state.itemData.value.keyRight == 1) {
// 管理员
ShowTipView().showIosTipWithContentDialog(
'取消授权会在用户APP连网后生效'.tr, cancelAdministrator);
} else {
ShowTipView().showIosTipWithContentDialog(
'授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码'.tr, setAdministrator);
}
}
},
);
});
}
void deletKeyLogic() {
if (state.itemData.value.keyRight == 1) {
// 授权管理员
ShowTipView().showDeleteAdministratorIsHaveAllDataDialog(
'同时删除其发送的所有钥匙,钥匙删除后不能恢复'.tr, (bool isAllData) {
deleteKeyRequest(isAllData ? 1 : 0);
});
} else {
// 普通用户
ShowTipView().showIosTipWithContentDialog('删除钥匙会在用户APP连网后生效'.tr, () {
deleteKeyRequest(0);
});
}
}
TextEditingController getCurrentController(ShowAlertEnum alertEnum) {
TextEditingController currentController = TextEditingController();
switch (alertEnum) {
case ShowAlertEnum.name:
currentController = state.changeNameController;
break;
case ShowAlertEnum.realName:
currentController = state.changeRealNameController;
break;
case ShowAlertEnum.idCardNumber:
currentController = state.changeIDCardController;
break;
default:
}
return currentController;
}
void noModificationAllowedDuringFreeze() {
if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) {
showToast('冻结状态下不允许修改钥匙权限'.tr);
return;
}
}
//检测实名认证是否支持开启
Future<void> keyCheckFace() async {
final ValueAddedServicesHighFunctionEntity entity =
await ApiRepository.to.keyCheckFace(
lockId: CommonDataManage().currentKeyInfo.lockId ?? 0,
);
if (entity.errorCode!.codeIsSuccessful) {
//打开实名认证,需要弹出输入身份证信息框
state.isRequireAuth.value = true;
state.isRealNameAuth.value = true;
} else if (entity.errorCode == 432) {
//432--余量不足,需购买
ShowCupertinoAlertView().showBuyTipWithContentAlert(
titleStr: '实名认证为付费功能,请购买后再使用'.tr,
sureClick: () {
// Get.toNamed(Routers.advancedFeaturesWebPage, arguments: {
// 'webBuyType': XSConstantMacro.webBuyTypeAuth,
// });
Get.toNamed(Routers.valueAddedServicesRealNamePage);
});
} else if (entity.errorCode == 433) {
//需联系管理员购买
ShowCupertinoAlertView().showContactAdministratorBuyAlert();
}
}
}