魏少阳 202c97e0d3 Merge branch 'bugly' into build-addGateway-20240814
# Conflicts:
#	android/app/src/main/AndroidManifest.xml
#	lib/login/login/starLock_login_logic.dart
#	lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
#	lib/main/lockDetail/doorLockLog/doorLockLog_page.dart
#	lib/main/lockDetail/lockDetail/lockDetail_logic.dart
#	lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_logic.dart
#	lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_page.dart
#	lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart
#	lib/mine/mineSet/mineSet/mineSet_logic.dart
#	lib/tools/advancedCalendar/src/widget.dart
#	pubspec.yaml
2024-12-04 14:25:23 +08:00

313 lines
11 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/authorizedAdmin/authorizedAdmin/authorizedAdmin_entity.dart';
import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/notice_template_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_entity.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/NativeInteractionTool.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/commonDataManage.dart';
import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
import 'package:star_lock/tools/regularExpression.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:star_lock/tools/showTipView.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../../../blue/blue_manage.dart';
class SendElectronicKeyViewLogic extends BaseGetXController {
SendElectronicKeyViewLogic(this.type);
String type;
final SendElectronicKeyViewState state = SendElectronicKeyViewState();
int? keyId;
String? emailOrPhone;
List<dynamic> get weekDayStr {
return state.weekdaysList
.map((int e) => TimeUtils.translateWeekday(e))
.toList();
}
@override
void onInit() {
super.onInit();
Storage.getBool(ifIsDemoModeOrNot)
.then((bool? value) => state.isDemoMode = value ?? false);
}
//发送钥匙请求
Future<void> sendElectronicKeyRequest() async {
if (state.emailOrPhoneController.text.isEmpty) {
showToast('请输入接收者账号'.tr);
return;
}
String startDate = '0';
String endDate = '0';
String startTime = '0';
String endTime = '0';
int typeValue;
switch (type) {
case '0':
// 限时
if (state.timeLimitBeginTime.isEmpty) {
showToast('请选择开始时间'.tr);
return;
}
if (state.timeLimitEndTime.isEmpty) {
showToast('请选择结束时间'.tr);
return;
}
typeValue = XSConstantMacro.keyTypeTime;
startDate =
DateTool().dateToTimestamp(state.timeLimitBeginTime, 1).toString();
endDate =
DateTool().dateToTimestamp(state.timeLimitEndTime, 1).toString();
startTime = '0';
endTime = '0';
if (int.parse(startDate) >= int.parse(endDate)) {
showToast('失效时间需晚于生效时间'.tr);
return;
}
break;
case '1':
typeValue = XSConstantMacro.keyTypeLong;
break;
case '2':
typeValue = XSConstantMacro.keyTypeOnce;
break;
case '3':
typeValue = XSConstantMacro.keyTypeLoop;
if (state.cycleBeginTime.isEmpty) {
showToast('请选择有效期'.tr);
return;
}
startDate =
DateTool().dateToTimestamp(state.cycleBeginTime, 1).toString();
endDate = DateTool().dateToTimestamp(state.cycleEndTime, 1).toString();
startTime =
DateTool().dateToTimestamp(state.effectiveDateTime, 0).toString();
endTime =
DateTool().dateToTimestamp(state.failureDateTime, 0).toString();
break;
default:
typeValue = XSConstantMacro.keyTypeTime;
break;
}
String getKeyType = typeValue.toString();
//如果打开了实名认证,需要弹出输入身份证信息框
if (state.isAuthentication.value == true) {
if (state.realNameController.text.isEmpty) {
showToast('请输入真实姓名'.tr);
return;
}
if (state.idCardController.text.isEmpty) {
showToast('请输入身份证号'.tr);
return;
}
//弹出身份证信息确认框
ShowCupertinoAlertView().realNameIDCardInfoComfirmAlert(
getNameStr: state.realNameController.text,
getIDCardStr: state.idCardController.text,
onConfirm: () {
goSendElectronicKey(
startDate: startDate,
endDate: endDate,
startTime: startTime,
endTime: endTime,
typeValue: typeValue,
getKeyType: getKeyType);
});
} else {
goSendElectronicKey(
startDate: startDate,
endDate: endDate,
startTime: startTime,
endTime: endTime,
typeValue: typeValue,
getKeyType: getKeyType);
}
}
//只负责发起发送钥匙请求,数据已经准备好
Future<void> goSendElectronicKey({
required String startDate,
required String endDate,
required String startTime,
required String endTime,
required int typeValue,
required String getKeyType,
}) async {
final AuthorizedAdminSendEntity entity = await ApiRepository.to
.sendElectronicKey(
createUser: state.createUser.value,
countryCode: state.countryCode,
usernameType: RegularExpression()
.isPhoneNumber(state.emailOrPhoneController.text) ==
true
? '1'
: '2',
endDate: int.parse(endDate),
faceAuthentication:
state.isAuthentication.value == true ? '1' : '2',
isCameraEnable: '2',
isRemoteUnlock: state.isRemoteUnlock.value == true ? '1' : '2',
keyNameForAdmin: state.keyNameController.text,
keyRight: '0',
keyType: getKeyType,
lockId: CommonDataManage().currentKeyInfo.lockId.toString(),
operatorUid: '',
receiverUsername: state.emailOrPhoneController.text,
remarks: '',
startDate: int.parse(startDate),
weekDays: state.weekdaysList,
startTime: int.parse(startTime),
endTime: int.parse(endTime),
isOnlyManageSelf: 0,
realName: state.isRequireAuth.value == true
? state.realNameController.text
: '',
idCardNumber: state.isRequireAuth.value == true
? state.idCardController.text
: '');
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('add_electronic_key', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_electronic_key_result':'成功',
});
emailOrPhone = state.emailOrPhoneController.text;
state.createUser.value = 0;
state.isSendSuccess = true;
keyId = entity.data!.keyId;
state.userNameType.value = entity.data?.usernameType ?? 0;
resetData();
update();
eventBus.fire(ElectronicKeyListRefreshUI());
} else {
UmengCommonSdk.onEvent('add_electronic_key', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_electronic_key_result':'${entity.errorCode}--${entity.errorMsg}',
});
emailOrPhone = null;
if (entity.errorCode == 425) {
//用户未注册
update();
ShowTipView().showIosTipWithContentDialog(
'${"是否发送电子钥匙给未注册账号".tr}\n${state.emailOrPhoneController.text}', () {
state.createUser.value = 1;
sendElectronicKeyRequest();
});
}
}
}
//检测实名认证是否支持开启
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.isAuthentication.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();
}
}
TextEditingController getCurrentController(int lineIndex) {
TextEditingController currentController = TextEditingController();
switch (lineIndex) {
case 1:
currentController = state.emailOrPhoneController;
break;
case 2:
currentController = state.keyNameController;
break;
case 3:
currentController = state.realNameController;
break;
case 4:
currentController = state.idCardController;
break;
default:
}
return currentController;
}
//发送消息
Future<void> sendMsg({required bool isPhone}) async {
if (keyId == null) {
return;
}
final NoticeTemplateEntity entity = await ApiRepository.to
.getNoticeTemplate(
lockId: CommonDataManage().currentKeyInfo.lockId!,
keyId: keyId!,
channelType: isPhone ? 1 : 2);
if (entity.errorCode!.codeIsSuccessful) {
final List<Item?> list =
entity.data!.list!.where((Item item) => item.isUse == 0).toList();
if (list.isNotEmpty) {
final Item item = list.first!;
final String template = item.template ?? '';
NativeInteractionTool().loadNativeShare(shareText: template);
} else {
showToast('获取模板失败'.tr);
}
} else {
showToast('获取模板失败'.tr);
}
}
void resetData() {
state.emailOrPhoneController.text = '';
state.keyNameController.text = '';
state.realNameController.text = '';
state.idCardController.text = '';
state.timeLimitBeginTime = DateTool().dateToYMDHNString(
DateTime.now().millisecondsSinceEpoch.toString()); // 限时开始时间
state.timeLimitEndTime = DateTool().dateToYMDHNString(
DateTime.now().millisecondsSinceEpoch.toString()); // 限时结束时间
state.cycleBeginTime = ''; // 循环开始时间
state.cycleEndTime = ''; // 循环结束时间
state.effectiveDateTime = ''; // 生效时间
state.failureDateTime = ''; // 失效时间
state.weekdaysList = <int>[];
state.createUser.value = 0;
update();
}
}