2024-06-21 15:28:53 +08:00

229 lines
8.2 KiB
Dart
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
import '../../../../../appRouters.dart';
import '../../../../../common/XSConstantMacro/XSConstantMacro.dart';
import '../../../../../network/api_repository.dart';
import '../../../../../tools/dateTool.dart';
import '../massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'massSendElectronicKeyProgress_page.dart';
import 'massSendElectronicKey_state.dart';
class MassSendElectronicKeyLogic extends BaseGetXController {
MassSendElectronicKeyState state = MassSendElectronicKeyState();
List<dynamic> get weekDayStr {
return state.weekdaysList.map((e) => TimeUtils.translateWeekday(e)).toList();
}
//群发钥匙检查
Future<void> massKeyChecksRequest() async {
String getFailureDateTime = '0';
if (int.parse(state.type.value) != 1) {
getFailureDateTime = DateTool().dateToTimestamp(state.endTime.value, 1).toString();
}
if (state.lockIdList.isEmpty) {
showToast('请选择锁'.tr);
return;
}
if (state.receiverList.value.isEmpty) {
showToast('请选择接收者'.tr);
return;
}
if(state.type.value == '0'){
final String startDate = DateTool().dateToTimestamp(state.beginTime.value, 1).toString();
final String endDate = DateTool().dateToTimestamp(state.endTime.value, 1).toString();
if (startDate.isEmpty) {
showToast('请选择开始时间'.tr);
return;
}
if (endDate.isEmpty) {
showToast('请选择结束时间'.tr);
return;
}
if (int.parse(startDate) >= int.parse(endDate)) {
showToast('失效时间要大于生效时间'.tr);
return;
}
}
final KeyDetailEntity entity = await ApiRepository.to.canSendKey(getFailureDateTime, state.lockIdList);
if (entity.errorCode!.codeIsSuccessful) {
// 遍历发送
for (int i = 0; i < state.receiverList.value.length; i++) {
final LockUserItemData data = state.receiverList.value[i];
await batchSendElectronicKeyRequest(data.userid ?? '', data.nickname ?? '');
}
// 发送完成之后遍历数据如果所有的数据都发送成功改变state.isSendSuccess的值如果有一个发送失败不改变state.isSendSuccess的值然后弹框显示进度
bool isSendSuccess = true;
for (int i = 0; i < state.receiverList.value.length; i++) {
final LockUserItemData data = state.receiverList.value[i];
if (!(data.isSendSuccess ?? false)) {
isSendSuccess = false;
break;
}
}
state.isSendSuccess.value = isSendSuccess;
if(!state.isSendSuccess.value){
// 如果有发送失败的,弹框显示发送失败的原因
showMassSendElectronicKeyProgress();
}else{
// 如果全部发送成功,重置数据改变状态
resetData();
}
} else {
showToast(entity.errorMsg!);
}
}
//批处理群发钥匙
Future<void> batchSendElectronicKeyRequest(String receiverUserID, String receiverUserName) async {
//发送钥匙请求
String startDate = '0';
String endDate = '0';
String startTime = '0';
String endTime = '0';
int typeValue = int.parse(state.type.value);
switch (typeValue) {
case 0:
{
typeValue = XSConstantMacro.keyTypeTime;
startDate = DateTool().dateToTimestamp(state.beginTime.value, 1).toString();
endDate = DateTool().dateToTimestamp(state.endTime.value, 1).toString();
startTime = '0';
endTime = '0';
if (startDate.isEmpty) {
showToast('请选择开始时间'.tr);
return;
}
if (endDate.isEmpty) {
showToast('请选择结束时间'.tr);
return;
}
if (int.parse(startDate) >= int.parse(endDate)) {
showToast('失效时间要大于生效时间'.tr);
return;
}
}
break;
case 1:
typeValue = XSConstantMacro.keyTypeLong;
break;
// case 2:
// typeValue = XSConstantMacro.keyTypeOnce;
// break;
case 2:
typeValue = XSConstantMacro.keyTypeLoop;
if (state.beginTime.value.isEmpty) {
showToast('请选择有效期'.tr);
return;
}
startDate = DateTool().dateToTimestamp(state.beginTime.value, 1).toString();
endDate = DateTool().dateToTimestamp(state.endTime.value, 1).toString();
startTime = DateTool().dateToTimestamp(state.effectiveDateTime.value, 0).toString();
endTime = DateTool().dateToTimestamp(state.failureDateTime.value, 0).toString();
break;
default:
typeValue = XSConstantMacro.keyTypeLong;
break;
}
// String getKeyType = typeValue.toString();
final KeyDetailEntity entity = await ApiRepository.to.batchSendKey(
lockIds: state.lockIdList,
createUser: state.isCreateUser.value == true ? 1 : 0,
countryCode: state.countryCode.value,
receiverUsername: receiverUserID,
keyName: receiverUserName,
keyType: typeValue,
weekDays: state.weekdaysList,
startDate: int.parse(startDate),
endDate: int.parse(endDate),
startTime: int.parse(startTime),
endTime: int.parse(endTime),
remoteUnlockSwitch: state.isRemoteUnlock.value ? 1 : 2,
keyRight: 0,
isShowNetworkErrorMsg: false
);
if (entity.errorCode!.codeIsSuccessful) {
// 发送成功之后默认是需要创建的
state.isCreateUser.value = false;
// 发送成功之后查询发送类列表里面对应的数据将发送成功的状态改为true
for (int i = 0; i < state.receiverList.value.length; i++) {
final LockUserItemData data = state.receiverList.value[i];
if (data.userid == receiverUserID) {
data.isSendSuccess = true;
data.sendFailReason = '';
}
}
// resetData();
} else {
// showToast('${entity.errorMsg}');
if (entity.errorCode == 425) {
//用户未注册 重新发送
state.isCreateUser.value = true;
await batchSendElectronicKeyRequest(receiverUserID, receiverUserName);
}else{
// 发送失败之后查询发送类列表里面对应的数据将发送成功的状态改为false
for (int i = 0; i < state.receiverList.value.length; i++) {
final LockUserItemData data = state.receiverList.value[i];
if (data.userid == receiverUserID) {
data.isSendSuccess = false;
data.sendFailReason = entity.errorMsg;
}
}
}
}
}
void resetData() {
if (state.type.value == '0') {
state.beginTime.value = DateTool().dateToYMDHNString(
DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间
state.endTime.value = DateTool().dateToYMDHNString(
DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间
} else {
state.beginTime.value = ''; //默认为当前时间
state.endTime.value = ''; //默认为当前时间
}
}
void showMassSendElectronicKeyProgress() {
showDialog(
context: Get.context!,
builder: (BuildContext context) {
return Dialog(
backgroundColor: Colors.transparent,
child: MassSendElectronicKeyProgressPage(receiverList:state.receiverList.value, callback: (List receiverList){
Navigator.pushNamed(context, Routers.massSendReceiverPage,
arguments: <String, List>{
'lockUserList': state.receiverList.value,
}).then((Object? value) {
if (value != null) {
value as Map<String, dynamic>;
state.receiverList.value = value['lockUserList'];
for (int i = 0; i < state.receiverList.value.length; i++) {
final LockUserItemData data = state.receiverList.value[i];
}
}
});
}),
);
},
);
}
}