253 lines
6.7 KiB
Dart
253 lines
6.7 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;
|
|
|
|
// table
|
|
RxInt currentPage = 1.obs;
|
|
|
|
RxInt totalPage = 0.obs;
|
|
|
|
RxInt pageSize = 10.obs;
|
|
|
|
RxList<ServiceOpenCard> tableList = <ServiceOpenCard>[].obs;
|
|
|
|
Rx<ServiceOpenCard?> detail = Rx(null);
|
|
|
|
RxBool readLoading = false.obs;
|
|
|
|
// 写卡
|
|
RxBool writeLoading = false.obs;
|
|
|
|
// 卡号
|
|
final carNumberC = TextEditingController();
|
|
|
|
_initData() {
|
|
update(["card_active"]);
|
|
}
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
getTableList();
|
|
}
|
|
|
|
@override
|
|
void onReady() {
|
|
super.onReady();
|
|
_initData();
|
|
}
|
|
|
|
@override
|
|
void onClose() {
|
|
super.onClose();
|
|
carNumberC.dispose();
|
|
}
|
|
|
|
Future<void> doPage({int? page}) async {
|
|
if (page != null) currentPage.value = page;
|
|
// 收起键盘
|
|
FocusManager.instance.primaryFocus?.unfocus();
|
|
getTableList();
|
|
}
|
|
|
|
Future<void> doReset() async {
|
|
currentPage.value = 1;
|
|
carNumberC.clear();
|
|
// 收起键盘
|
|
FocusManager.instance.primaryFocus?.unfocus();
|
|
await getTableList();
|
|
}
|
|
|
|
Future<void> getTableList() async {
|
|
EasyLoading.show(
|
|
status: '查询中...',
|
|
maskType: EasyLoadingMaskType.black,
|
|
);
|
|
try {
|
|
final appSetting = await AppSettingTool.getSysSetting();
|
|
final deptId = appSetting.merchantDeptId;
|
|
final pa = {
|
|
"current": currentPage.value,
|
|
"size": pageSize.value,
|
|
"deptId": "",
|
|
"walletTypeId": "",
|
|
"cardNumber": carNumberC.text,
|
|
};
|
|
final data = await WalletApi.openCardList(pa);
|
|
if (data == null) return;
|
|
totalPage.value = data.total;
|
|
final records = data.records;
|
|
if (records != null) {
|
|
tableList.value = records;
|
|
}
|
|
} finally {
|
|
EasyLoading.dismiss();
|
|
}
|
|
}
|
|
|
|
// 写卡
|
|
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;
|
|
detail.value = null;
|
|
final context = Get.context!;
|
|
cardDialog(
|
|
title: "写卡",
|
|
loading: readLoading,
|
|
detail: detail,
|
|
doSubmit: () {
|
|
Navigator.of(context).pop();
|
|
_closeStatus();
|
|
},
|
|
);
|
|
serialCardManage.callback = (type, status, res) async {
|
|
switch (status) {
|
|
case SerialCardResStatus.success:
|
|
if (ObjectUtil.isNotEmpty(v.id)) {
|
|
await _getOpenCardSuccess(v.id!);
|
|
getTableList();
|
|
}
|
|
detail.value = v;
|
|
_closeStatus();
|
|
break;
|
|
case SerialCardResStatus.warning:
|
|
break;
|
|
case SerialCardResStatus.error:
|
|
TtsManage.speak("请在合适区域放置饭卡");
|
|
Toast.error(msg: "请在合适区域放置饭卡");
|
|
break;
|
|
}
|
|
};
|
|
TtsManage.speak("请在合适区域放置饭卡");
|
|
serialCardManage.sendWrite(v.cardNumber!);
|
|
} catch (e, stack) {
|
|
_closeStatus();
|
|
logger.d("写卡失败error:|$e|stack:|$stack|");
|
|
Toast.error(msg: "写入失败,请重试");
|
|
}
|
|
}
|
|
|
|
// 读卡
|
|
void doReadCard() async {
|
|
final context = Get.context!;
|
|
try {
|
|
await serialCardManage.connect();
|
|
if (!serialCardManage.isConnect) {
|
|
Toast.error(msg: "连接读卡器失败");
|
|
return;
|
|
}
|
|
readLoading.value = true;
|
|
detail.value = null;
|
|
cardDialog(
|
|
title: "读卡",
|
|
loading: readLoading,
|
|
detail: detail,
|
|
doSubmit: () {
|
|
Navigator.of(context).pop();
|
|
_closeStatus();
|
|
},
|
|
);
|
|
serialCardManage.callback = (type, status, res) async {
|
|
switch (status) {
|
|
case SerialCardResStatus.success:
|
|
if (ObjectUtil.isEmpty(res)) {
|
|
_closeStatus();
|
|
return;
|
|
}
|
|
res = res.replaceAll(RegExp(r'[^a-zA-Z0-9]'), '');
|
|
if (ObjectUtil.isEmpty(res)) {
|
|
TtsManage.speak("此饭卡未绑定用户");
|
|
_closeStatus();
|
|
return;
|
|
}
|
|
TtsManage.speak("读取成功");
|
|
final pa = {"cardNumber": res};
|
|
final data = await WalletApi.openCardList(pa);
|
|
if (data != null && data.records != null) {
|
|
detail.value = data.records![0];
|
|
}
|
|
_closeStatus();
|
|
break;
|
|
case SerialCardResStatus.warning:
|
|
break;
|
|
case SerialCardResStatus.error:
|
|
TtsManage.speak("请在合适区域放置饭卡");
|
|
break;
|
|
}
|
|
};
|
|
TtsManage.speak("请在合适区域放置饭卡");
|
|
serialCardManage.sendRead();
|
|
} catch (e, stack) {
|
|
_closeStatus();
|
|
logger.d("读卡失败error:|$e|stack:|$stack|");
|
|
Toast.error(msg: "读取失败,请重试");
|
|
}
|
|
}
|
|
|
|
Future<void> _getOpenCardSuccess(String id) async {
|
|
try {
|
|
EasyLoading.show(
|
|
status: '激活饭卡中...',
|
|
maskType: EasyLoadingMaskType.black,
|
|
);
|
|
final pa = {"id": id};
|
|
final data = await WalletApi.openCardSuccess(pa);
|
|
if (data == false) throw Error();
|
|
EasyLoading.dismiss();
|
|
TtsManage.speak("激活成功");
|
|
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;
|
|
TtsManage.speak("重新激活成功");
|
|
Toast.success(msg: "重新激活成功");
|
|
getTableList();
|
|
} catch (e, stack) {
|
|
logger.d("重新激活失败error:|$e|stack:|$stack|");
|
|
}
|
|
}
|
|
|
|
void _closeStatus() {
|
|
serialCardManage.readerClose();
|
|
serialCardManage.close();
|
|
readLoading.value = false;
|
|
}
|
|
}
|