fix:修复 批量授权锁 发送完应没有短信、邮件、微信通知,应直接提示操作成功

This commit is contained in:
anfe 2024-05-22 15:23:44 +08:00
parent 25598cd270
commit 9a56b0ae1d
7 changed files with 141 additions and 100 deletions

View File

@ -5,7 +5,11 @@ import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/login/login/entity/LoginEntity.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/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart'; import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/tools/NativeInteractionTool.dart';
import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart';
@ -26,18 +30,21 @@ import 'authorizedAdmin_state.dart';
class AuthorizedAdminLogic extends BaseGetXController { class AuthorizedAdminLogic extends BaseGetXController {
final AuthorizedAdminState state = AuthorizedAdminState(); final AuthorizedAdminState state = AuthorizedAdminState();
int? keyId;
// //
late StreamSubscription<Reply> _replySubscription; late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = _replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) async { EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
// //
if (reply is TransferPermissionsReply) { if (reply is TransferPermissionsReply) {
var token = reply.data.sublist(2, 6); final List<int> token = reply.data.sublist(2, 6);
var saveStrList = changeIntListToStringList(token); final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList); Storage.setStringList(saveBlueToken, saveStrList);
int status = reply.data[6]; final int status = reply.data[6];
switch (status) { switch (status) {
case 0x00: case 0x00:
@ -45,20 +52,24 @@ class AuthorizedAdminLogic extends BaseGetXController {
break; break;
case 0x06: case 0x06:
// //
var privateKey = await Storage.getStringList(saveBluePrivateKey); final List<String>? privateKey =
List<int> getPrivateKeyList = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!); changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey); final List<String>? publicKey =
List<int> publicKeyDataList = changeStringListToIntList(publicKey!); await Storage.getStringList(saveBluePublicKey);
final List<int> publicKeyDataList =
changeStringListToIntList(publicKey!);
var token = await Storage.getStringList(saveBlueToken); final List<String>? token =
List<int> getTokenList = changeStringListToIntList(token!); await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderFactoryDataReset( IoSenderManage.senderFactoryDataReset(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
keyID: "1", keyID: '1',
needAuthor: 1, needAuthor: 1,
publicKey: publicKeyDataList, publicKey: publicKeyDataList,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
@ -76,21 +87,25 @@ class AuthorizedAdminLogic extends BaseGetXController {
BlueManage().blueSendData(BlueManage().connectDeviceName, BlueManage().blueSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState state) async { (BluetoothConnectionState state) async {
if (state == BluetoothConnectionState.connected) { if (state == BluetoothConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey); final List<String>? privateKey =
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey); final List<String>? publicKey =
List<int> publicKeyDataList = changeStringListToIntList(publicKey!); await Storage.getStringList(saveBluePublicKey);
final List<int> publicKeyDataList =
changeStringListToIntList(publicKey!);
var token = await Storage.getStringList(saveBlueToken); final List<String>? token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!); final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderTransferPermissions( IoSenderManage.senderTransferPermissions(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
authUserID: await Storage.getUid(), authUserID: await Storage.getUid(),
keyID: "1", keyID: '1',
oldUserID: await Storage.getUid(), oldUserID: await Storage.getUid(),
newUserID: "100002", newUserID: '100002',
needAuthor: 1, needAuthor: 1,
publicKey: publicKeyDataList, publicKey: publicKeyDataList,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
@ -102,40 +117,40 @@ class AuthorizedAdminLogic extends BaseGetXController {
// //
Future<void> sendElectronicKeyRequest() async { Future<void> sendElectronicKeyRequest() async {
if (state.emailOrPhoneController.text.isEmpty) { if (state.emailOrPhoneController.text.isEmpty) {
showToast("请输入接收者账号"); showToast('请输入接收者账号');
return; return;
} }
if (state.keyNameController.text.isEmpty) { if (state.keyNameController.text.isEmpty) {
showToast("请输入接收者姓名"); showToast('请输入接收者姓名');
return; return;
} }
var startDate = "0"; String startDate = '0';
var endDate = "0"; String endDate = '0';
var startTime = "0"; String startTime = '0';
var endTime = "0"; String endTime = '0';
AppLog.log("state.type.value:${state.seletType.value}"); AppLog.log('state.type.value:${state.seletType.value}');
String getKeyType = "1"; String getKeyType = '1';
if (state.seletType.value == 0) { if (state.seletType.value == 0) {
getKeyType = "2"; getKeyType = '2';
startDate = startDate =
DateTool().dateToTimestamp(state.beginDate.value, 1).toString(); DateTool().dateToTimestamp(state.beginDate.value, 1).toString();
endDate = DateTool().dateToTimestamp(state.endDate.value, 1).toString(); endDate = DateTool().dateToTimestamp(state.endDate.value, 1).toString();
startTime = "0"; startTime = '0';
endTime = "0"; endTime = '0';
if (startDate.isEmpty) { if (startDate.isEmpty) {
showToast("请选择开始时间"); showToast('请选择开始时间');
return; return;
} }
if (endDate.isEmpty) { if (endDate.isEmpty) {
showToast("请选择结束时间"); showToast('请选择结束时间');
return; return;
} }
if (int.parse(startDate) >= int.parse(endDate)) { if (int.parse(startDate) >= int.parse(endDate)) {
showToast("失效时间要大于生效时间"); showToast('失效时间要大于生效时间');
return; return;
} }
} }
@ -143,12 +158,12 @@ class AuthorizedAdminLogic extends BaseGetXController {
// //
if (state.isAuthentication.value == true) { if (state.isAuthentication.value == true) {
if (state.realNameController.text.isEmpty) { if (state.realNameController.text.isEmpty) {
showToast("请输入真实姓名".tr); showToast('请输入真实姓名'.tr);
return; return;
} }
if (state.idCardController.text.isEmpty) { if (state.idCardController.text.isEmpty) {
showToast("请输入身份证号".tr); showToast('请输入身份证号'.tr);
return; return;
} }
// //
@ -179,38 +194,39 @@ class AuthorizedAdminLogic extends BaseGetXController {
required String startDate, required String startDate,
required String startTime, required String startTime,
required String endTime}) async { required String endTime}) async {
var entity = await ApiRepository.to.sendElectronicKey( final AuthorizedAdminSendEntity entity = await ApiRepository.to
createUser: state.isCreateUser.value ? "1" : "0", .sendElectronicKey(
countryCode: state.countryCode.value, createUser: state.isCreateUser.value ? '1' : '0',
usernameType: '1', countryCode: state.countryCode.value,
endDate: int.parse(endDate), usernameType: '1',
faceAuthentication: state.isAuthentication.value == true ? '1' : '2', endDate: int.parse(endDate),
isCameraEnable: '2', faceAuthentication:
isRemoteUnlock: '2', state.isAuthentication.value == true ? '1' : '2',
keyNameForAdmin: state.keyNameController.text, isCameraEnable: '2',
keyRight: '1', isRemoteUnlock: '2',
keyType: getKeyType, keyNameForAdmin: state.keyNameController.text,
lockId: CommonDataManage().currentKeyInfo.lockId!.toString(), keyRight: '1',
operatorUid: '', keyType: getKeyType,
receiverUsername: state.emailOrPhoneController.text, lockId: CommonDataManage().currentKeyInfo.lockId!.toString(),
remarks: '', operatorUid: '',
startDate: int.parse(startDate), receiverUsername: state.emailOrPhoneController.text,
weekDays: state.weekdaysList, remarks: '',
startTime: int.parse(startTime), startDate: int.parse(startDate),
endTime: int.parse(endTime), weekDays: state.weekdaysList,
isOnlyManageSelf: state.onlyManageYouCreatesUser.value ? 1 : 0, startTime: int.parse(startTime),
realName: state.isRequireAuth.value == true endTime: int.parse(endTime),
? state.realNameController.text isOnlyManageSelf: state.onlyManageYouCreatesUser.value ? 1 : 0,
: "", realName: state.isRequireAuth.value == true
idCardNumber: state.isRequireAuth.value == true ? state.realNameController.text
? state.idCardController.text : '',
: ""); idCardNumber: state.isRequireAuth.value == true
? state.idCardController.text
: '');
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
state.isCreateUser.value = false; state.isCreateUser.value = false;
state.isSendSuccess.value = true; state.isSendSuccess.value = true;
// Toast.show(msg: "添加成功");
state.addUserId.value = entity.data!.receiverUser!.id.toString(); state.addUserId.value = entity.data!.receiverUser!.id.toString();
// addUserConnectBlue(state.addUserId.value); keyId = entity.data!.keyId;
eventBus.fire(AuthorizedAdminPageRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI());
} else { } else {
if (entity.errorCode == 425) { if (entity.errorCode == 425) {
@ -218,16 +234,15 @@ class AuthorizedAdminLogic extends BaseGetXController {
state.isCreateUser.value = true; state.isCreateUser.value = true;
ShowTipView().showIosTipWithContentDialog( ShowTipView().showIosTipWithContentDialog(
'${"是否发送授权管理员给未注册账号".tr}\n${state.emailOrPhoneController.text}', '${"是否发送授权管理员给未注册账号".tr}\n${state.emailOrPhoneController.text}',
() { sendElectronicKeyRequest);
sendElectronicKeyRequest();
});
} }
} }
} }
// //
Future<void> keyCheckFace() async { Future<void> keyCheckFace() async {
AdvancedFunctionRecordEntity entity = await ApiRepository.to.keyCheckFace( final AdvancedFunctionRecordEntity entity =
await ApiRepository.to.keyCheckFace(
lockId: CommonDataManage().currentKeyInfo.lockId ?? 0, lockId: CommonDataManage().currentKeyInfo.lockId ?? 0,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
@ -240,7 +255,7 @@ class AuthorizedAdminLogic extends BaseGetXController {
titleStr: '实名认证为付费功能,请购买后再使用'.tr, titleStr: '实名认证为付费功能,请购买后再使用'.tr,
sureClick: () { sureClick: () {
Get.toNamed(Routers.advancedFeaturesWebPage, Get.toNamed(Routers.advancedFeaturesWebPage,
arguments: {'isShop': false}); arguments: <String, bool>{'isShop': false});
}); });
} else if (entity.errorCode == 433) { } else if (entity.errorCode == 433) {
// //
@ -250,12 +265,12 @@ class AuthorizedAdminLogic extends BaseGetXController {
// isOn:: 1 2 // isOn:: 1 2
Future<void> updateRoomCheckIn() async { Future<void> updateRoomCheckIn() async {
var entity = await ApiRepository.to.setRoomStatusData( final LoginEntity entity = await ApiRepository.to.setRoomStatusData(
lockId: CommonDataManage().currentKeyInfo.lockId!, lockId: CommonDataManage().currentKeyInfo.lockId!,
roomStatus: 1, roomStatus: 1,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("标记成功"); showToast('标记成功');
} }
} }
@ -279,6 +294,31 @@ class AuthorizedAdminLogic extends BaseGetXController {
return currentController; 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('获取模板失败 0x02');
}
} else {
showToast('获取模板失败 0x01');
}
}
@override @override
void onReady() { void onReady() {
// TODO: implement onReady // TODO: implement onReady

View File

@ -362,8 +362,7 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
if (state.emailOrPhoneController.text.contains('@')) { if (state.emailOrPhoneController.text.contains('@')) {
Get.toNamed(Routers.sendEmailNotificationPage); Get.toNamed(Routers.sendEmailNotificationPage);
} else { } else {
NativeInteractionTool() logic.sendMsg(isPhone: true);
.loadNativeShare(shareText: state.pwdShareStr);
} }
}, },
), ),
@ -373,8 +372,8 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
OutLineBtn( OutLineBtn(
btnName: '微信通知', btnName: '微信通知',
onClick: () { onClick: () {
NativeInteractionTool() logic.sendMsg(
.loadNativeShare(shareText: state.pwdShareStr); isPhone: state.emailOrPhoneController.text.contains('@'));
}, },
), ),
SizedBox( SizedBox(

View File

@ -15,25 +15,25 @@ class AuthorizedAdminState {
final FlutterContactPicker contactPicker = FlutterContactPicker(); final FlutterContactPicker contactPicker = FlutterContactPicker();
late Contact contact; late Contact contact;
var isAuthentication = false.obs; // RxBool isAuthentication = false.obs; //
final onlyManageYouCreatesUser = false.obs; // final RxBool onlyManageYouCreatesUser = false.obs; //
var beginDate = DateTool() RxString beginDate = DateTool()
.dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()) .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString())
.obs; // .obs; //
var endDate = DateTool() RxString endDate = DateTool()
.dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()) .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString())
.obs; // .obs; //
var isSendSuccess = false.obs; RxBool isSendSuccess = false.obs;
var countryName = '中国'.obs; RxString countryName = '中国'.obs;
var countryCode = '86'.obs; RxString countryCode = '86'.obs;
var weekdaysList = [].obs; RxList weekdaysList = [].obs;
var isCreateUser = false.obs; //1 0 RxBool isCreateUser = false.obs; //1 0
var seletType = 0.obs; RxInt seletType = 0.obs;
String pwdShareStr = '您好,您的授权管理员生成成功'; String pwdShareStr = '您好,您的授权管理员生成成功';
var addUserId = ''.obs; RxString addUserId = ''.obs;
var isRequireAuth = false.obs; // RxBool isRequireAuth = false.obs; //
} }

View File

@ -2,7 +2,7 @@ import 'dart:ffi';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/authorizedAdmin/volumeAuthorizationLock/notice_template_entity.dart'; import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/notice_template_entity.dart';
import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart'; import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';

View File

@ -1,7 +1,7 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/blue/entity/lock_user_no_list_entity.dart'; import 'package:star_lock/blue/entity/lock_user_no_list_entity.dart';
import 'package:star_lock/login/selectCountryRegion/common/countryRegionEntity.dart'; import 'package:star_lock/login/selectCountryRegion/common/countryRegionEntity.dart';
import 'package:star_lock/main/lockDetail/authorizedAdmin/volumeAuthorizationLock/notice_template_entity.dart'; import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/notice_template_entity.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';

View File

@ -1,34 +1,38 @@
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import '../app_settings/app_settings.dart'; import '../app_settings/app_settings.dart';
/// ///
class NativeInteractionConfig{ class NativeInteractionConfig {
static String methodSendChannel = 'starLockFlutterSend'; static String methodSendChannel = 'starLockFlutterSend';
static String receiveEventChannel = 'starLockFlutterReceive'; static String receiveEventChannel = 'starLockFlutterReceive';
} }
///flutter向原生发送消息 ///flutter向原生发送消息
typedef BlockBlueStatus = void Function(String status); typedef BlockBlueStatus = void Function(String status);
class NativeInteractionTool{
var sendChannel = MethodChannel(NativeInteractionConfig.methodSendChannel); class NativeInteractionTool {
var receiveChannel = MethodChannel(NativeInteractionConfig.receiveEventChannel); MethodChannel sendChannel =
MethodChannel(NativeInteractionConfig.methodSendChannel);
MethodChannel receiveChannel =
MethodChannel(NativeInteractionConfig.receiveEventChannel);
/// ///
loadNativeShare({required String shareText}){ void loadNativeShare({required String shareText}) {
sendChannel.invokeMethod('loadNativeShare', {'shareText':shareText}); sendChannel.invokeMethod(
'loadNativeShare', <String, String>{'shareText': shareText});
} }
/// ///
sendGetBlueStatus(){ void sendGetBlueStatus() {
sendChannel.invokeMethod('sendGetBlueStatus'); sendChannel.invokeMethod('sendGetBlueStatus');
} }
/// ///
receiveChannelBlueIsOnEvent(BlockBlueStatus blockBlueStatus){ void receiveChannelBlueIsOnEvent(BlockBlueStatus blockBlueStatus) {
receiveChannel.setMethodCallHandler((MethodCall call) async { receiveChannel.setMethodCallHandler((MethodCall call) async {
AppLog.log('收到原生发送的信息call.method: ${call.method} call.arguments:${call.arguments}'); AppLog.log(
'收到原生发送的信息call.method: ${call.method} call.arguments:${call.arguments}');
switch (call.method) { switch (call.method) {
case 'getBlueStatus': case 'getBlueStatus':
// / // /
@ -42,5 +46,3 @@ class NativeInteractionTool{
}); });
} }
} }