Files
pj_supermarket_cloud/lib/pages/card_active/controller.dart
T
2025-03-09 20:35:03 +08:00

235 lines
6.3 KiB
Dart

import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:pj_supermarket_cloud/common/index.dart';
class CardActiveController extends GetxController {
final appC = Get.find<AppControl>();
SerialCardManage get serialCardManage => appC.serialCardManage;
// 语音锁
bool _speechingLock = false;
// table
RxInt currentPage = 1.obs;
RxInt totalPage = 0.obs;
RxInt pageSize = 10.obs;
RxList<ServiceOpenCard> tableList = <ServiceOpenCard>[].obs;
// 读卡器
RxString readCardNumber = "未读取".obs;
RxBool readLoading = false.obs;
// 写卡
RxBool writeLoading = false.obs;
_initData() {
update(["card_active"]);
}
@override
void onInit() {
super.onInit();
_closeStatus();
getTableList();
}
@override
void onReady() {
super.onReady();
_initData();
}
@override
void onClose() {
super.onClose();
_closeStatus();
}
Future<void> doPage({int? page}) async {
if (page != null) currentPage.value = page;
getTableList();
}
Future<void> getTableList() async {
final appSetting = await AppSettingTool.getSysSetting();
final deptId = appSetting.merchantDeptId;
final pa = {
"current": currentPage.value,
"size": pageSize.value,
"deptId": "",
"walletTypeId": "",
};
final data = await WalletApi.openCardList(pa);
if (data == null) return;
totalPage.value = data.total;
final records = data.records;
if (records != null) {
tableList.value = records;
}
}
// 写卡
void doWriteCard(ServiceOpenCard v) async {
if (v.isActiveHardware == true) {
Toast.error(msg: "该卡已经激活,无需重复激活");
return;
}
if (ObjectUtil.isEmpty(v.cardNumber)) {
Toast.error(msg: "没有设置卡号");
return;
}
try {
await serialCardManage.connect();
if (!serialCardManage.isConnect) {
Toast.error(msg: "连接读卡器失败");
return;
}
writeLoading.value = true;
// writeCardDialog(
// context: Get.context!,
// cardNumber: v.cardNumber!,
// doCancel: () {
// Get.back();
// serialCardManage.readerClose();
// serialCardManage.close();
// _closeWriteStatus();
// },
// );
serialCardManage.callback = (type, status, res) async {
switch (status) {
case SerialCardResStatus.success:
Toast.success(msg: "写入成功");
serialCardManage.readerClose();
serialCardManage.close();
if (ObjectUtil.isNotEmpty(v.id)) {
await _getOpenCardSuccess(v.id!);
currentPage.value = 1;
getTableList();
}
Navigator.of(Get.context!).pop();
break;
case SerialCardResStatus.warning:
break;
case SerialCardResStatus.error:
_speeching("请在合适区域放置饭卡");
Toast.error(msg: "请在合适区域放置饭卡");
break;
}
};
_speeching("请在合适区域放置饭卡");
serialCardManage.sendWrite(v.cardNumber!);
} catch (e, stack) {
logger.d("写卡失败error:|$e|stack:|$stack|");
Toast.error(msg: "写入失败,请重试");
}
}
// 读卡
void doSelectHorType() async {
try {
await serialCardManage.connect();
if (!serialCardManage.isConnect) {
Toast.error(msg: "连接读卡器失败");
return;
}
readLoading.value = true;
// readCardDialog(
// context: Get.context!,
// doCancel: () {
// serialCardManage.readerClose();
// serialCardManage.close();
// _closeReadStatus();
// Get.back();
// },
// );
serialCardManage.callback = (type, status, res) {
switch (status) {
case SerialCardResStatus.success:
Toast.success(msg: "读取成功");
readLoading.value = false;
readCardNumber.value = res;
serialCardManage.readerClose();
serialCardManage.close();
break;
case SerialCardResStatus.warning:
break;
case SerialCardResStatus.error:
Toast.error(msg: "请在合适区域放置饭卡");
_speeching("请在合适区域放置饭卡");
break;
}
};
_speeching("请在合适区域放置饭卡");
serialCardManage.sendRead();
} catch (e, stack) {
_closeReadStatus();
logger.d("读卡失败error:|$e|stack:|$stack|");
Toast.error(msg: "读取失败,请重试");
}
}
Future<void> _getOpenCardSuccess(String id) async {
try {
EasyLoading.show(status: '激活饭卡中...');
final pa = {"id": id};
final data = await WalletApi.openCardSuccess(pa);
if (data == false) throw Error();
EasyLoading.dismiss();
_speeching("激活成功");
Toast.success(msg: "激活成功");
} catch (e, stack) {
logger.e("激活饭卡请求失败error:|$e|stack:|$stack|");
EasyLoading.dismiss();
Toast.error(msg: "激活失败");
}
}
// 重新激活
Future<void> doRefreshAvatar(ServiceOpenCard v) async {
if (v.isActiveHardware == false) {
Toast.error(msg: "该卡为激活状态,不能重新激活");
return;
}
try {
final isSure = await appMessageDialog(Get.context!, "是否重新激活");
if (!isSure) return;
final pa = {"id": v.id};
final data = await WalletApi.refreshAvatar(pa);
if (data == false) return;
getTableList();
} catch (e, stack) {
logger.d("重新激活失败error:|$e|stack:|$stack|");
}
}
Future<void> _speeching(String str) async {
if (_speechingLock) return;
try {
_speechingLock = true;
await Future.delayed(const Duration(seconds: 1));
await LocalTtsPlugs.speeching(appId: Constants.ttsId, str: str);
await Future.delayed(const Duration(seconds: 2));
} finally {
_speechingLock = false;
}
}
void _closeReadStatus() {
readLoading.value = false;
readCardNumber.value = "未读取";
}
// 重置状态
void _closeStatus() {
_speechingLock = false;
}
}