Files
pj_supermarket_cloud/lib/pages/take_food/controller.dart
T
2025-03-12 19:39:18 +08:00

154 lines
4.0 KiB
Dart

import 'package:common_utils/common_utils.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_subscreen_plugin/flutter_subscreen_plugin.dart';
import 'package:get/get.dart';
import 'package:pj_supermarket_cloud/common/index.dart';
class TakeFoodController extends GetxController {
final appC = Get.find<AppControl>();
Rxn<ServiceUser> payUser = Rxn<ServiceUser>(ServiceUser());
RxList<ServiceCar> carList = <ServiceCar>[].obs;
OrderPayType orderPayType = OrderPayType.RESERVE_QR_CODE;
OrderType orderType = OrderType.RESERVE;
int totalPrice = 0;
String? orderId;
ServiceQRCode? globalQrCode;
_initData() {
update(["take_food"]);
}
@override
void onInit() {
super.onInit();
SubScreenPlugin.doubleScreenShow();
SubScreenPlugin.sendMsgToViceScreen(SubScreenAction.jumpSubPage.name);
// 开启扫码功能
startQrcode();
}
@override
void onReady() {
super.onReady();
_initData();
}
@override
void onClose() {
super.onClose();
BarcodeScanManage.instance.dispose();
}
doCancelPay() {
orderId = null;
globalQrCode = null;
payUser.value = ServiceUser();
payUser.refresh();
carList.value = [];
}
doPay() async {
await orderQrCodeCancel();
}
/// 获取订单详情
Future<void> getOrderDetail() async {
if (ObjectUtil.isEmpty(orderId)) return;
final pa = {"id": orderId};
try {
final data = await HardApi.getOrder(pa);
if (data == null) throw Error();
if (ObjectUtil.isEmpty(data)) return;
payUser.value?.username = data.username;
payUser.value?.userId = globalQrCode?.userId;
payUser.value?.userAvatar = data.userAvatar;
payUser.refresh();
await getCarList();
} catch (e) {
logger.e("获取订单详情错误error:|$e|");
await TtsManage.speak("订单不存在");
}
}
/// 获取购物车详情
Future<void> getCarList() async {
if (ObjectUtil.isEmpty(orderId)) return;
final pa = {"orderId": orderId};
try {
final data = await HardApi.getCarByOrderId(pa);
if (data == null) throw Error();
carList.value = data;
senSubScreen();
} catch (e, stack) {
logger.e("获取购物车详情错误error:|$e|stack:|$stack|");
}
}
/// 开启扫码
Future<void> startQrcode() async {
try {
// 监听二维码测试
BarcodeScanManage.instance.startListening();
BarcodeScanManage.instance.scanStream.listen((event) async {
final serviceCode = await BarcodeScanManage.instance.getCodeInfo(event);
if (serviceCode == null) return;
if (serviceCode.payType != OrderPayType.RESERVE_QR_CODE) {
await TtsManage.speak("请出示线上订餐二维码");
return;
}
globalQrCode = serviceCode;
orderId = serviceCode.id;
await getOrderDetail();
});
} catch (e) {
doCancelPay();
logger.e("开启扫码错误error:|$e|");
}
}
/// 订单核销
Future<void> orderQrCodeCancel() async {
if (ObjectUtil.isEmpty(orderId)) {
Toast.error(msg: "请前往设置绑定设备");
return;
}
final appSetting = await AppSettingTool.getSysSetting();
final serviceId = appSetting.serviceId;
if (ObjectUtil.isEmpty(serviceId)) {
Toast.error(msg: "订单不存在");
return;
}
final pa = {
"orderId": orderId,
"hardwareId": serviceId,
};
try {
EasyLoading.show(
status: '核销中...',
maskType: EasyLoadingMaskType.black,
);
final flag = await HardApi.cancelQrCode(pa);
if (flag == false) throw Error();
EasyLoading.dismiss();
Toast.error(msg: "核销成功");
TtsManage.speak("核销成功");
doCancelPay();
} catch (e, stack) {
logger.e("获取订单详情错误error:|$e|stack:|$stack|");
EasyLoading.dismiss();
}
}
/// 发送给父屏订单信息
void senSubScreen() {
if (ObjectUtil.isEmpty(carList)) return;
}
}