229 lines
8.2 KiB
Dart
Executable File
229 lines
8.2 KiB
Dart
Executable File
|
||
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];
|
||
}
|
||
}
|
||
});
|
||
}),
|
||
);
|
||
},
|
||
);
|
||
}
|
||
|
||
}
|