Daisy ad8eda0345 1,新增增值服务相关网页购买统一处理
2,新增短信余量接口、购买流程对接逻辑
3,新增邮件余量接口、购买流程对接逻辑
2024-05-30 11:53:25 +08:00

250 lines
8.5 KiB
Dart
Executable File

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/regularExpression.dart';
import 'package:star_lock/tools/showCupertinoAlertView.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/showTipView.dart';
import 'package:star_lock/tools/storage.dart';
class SendElectronicKeyViewLogic extends BaseGetXController {
String type;
final SendElectronicKeyViewState state = SendElectronicKeyViewState();
SendElectronicKeyViewLogic(this.type);
@override
void onInit() {
super.onInit();
Storage.getBool(ifIsDemoModeOrNot)
.then((value) => state.isDemoMode = value ?? false);
}
//发送钥匙请求
Future<void> sendElectronicKeyRequest() async {
if (state.emailOrPhoneController.text.isEmpty) {
showToast("请输入接收者账号".tr);
return;
}
var startDate = "0";
var endDate = "0";
var startTime = "0";
var 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 {
var entity = await ApiRepository.to.sendElectronicKey(
createUser: state.isCreateUser == true ? "1" : "0",
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
: "");
if (entity.errorCode!.codeIsSuccessful) {
state.isSendSuccess = true;
resetData();
update();
eventBus.fire(ElectronicKeyListRefreshUI());
} else {
if (entity.errorCode == 425) {
//用户未注册
state.isCreateUser = true;
update();
ShowTipView().showIosTipWithContentDialog(
'${"是否发送电子钥匙给未注册账号".tr}\n${state.emailOrPhoneController.text}', () {
sendElectronicKeyRequest();
});
}
}
}
//检测实名认证是否支持开启
Future<void> keyCheckFace() async {
final AdvancedFunctionRecordEntity 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,
});
});
} 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;
}
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 = [];
update();
}
}