Files
pj_supermarket_cloud/lib/pages/take_food/controller.dart
T
2026-01-30 20:20:59 +08:00

204 lines
5.6 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;
orderPayType = OrderPayType.RESERVE_QR_CODE;
payUser.value = ServiceUser();
payUser.refresh();
carList.value = [];
}
doPay() async {
payUser.refresh();
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 = data.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.qrcodeScanStream.listen((event) async {
final serviceCode = await BarcodeScanManage.instance.getCodeInfo(event);
if (serviceCode == null) return;
if (serviceCode.payType == OrderPayType.RESERVE_QR_CODE) {
orderPayType = OrderPayType.RESERVE_QR_CODE;
globalQrCode = serviceCode;
orderId = serviceCode.id;
await getOrderDetail();
} else if (serviceCode.payType == OrderPayType.ACT_CANCEL) {
orderPayType = OrderPayType.ACT_CANCEL;
globalQrCode = serviceCode;
orderId = serviceCode.id;
// 查询核销活动
final act = await WalletApi.getComAct({
"actItemId": serviceCode.id,
"userId": serviceCode.userId,
});
if (act == null) {
await TtsManage.speak("核销活动不存在");
return;
}
// 更新用户
payUser.value?.username = act.username;
payUser.value?.userId = act.userId;
payUser.value?.userAvatar = act.userAvatar;
payUser.refresh();
// 生成简单购物车
carList.value = [
ServiceCar(productName: "生日活动核销", productPrice: 0, productCount: 1)
];
senSubScreen();
} else {
await TtsManage.speak("无效的二维码");
}
return;
});
} 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;
}
EasyLoading.show(
status: '核销中...',
maskType: EasyLoadingMaskType.black,
);
disposeOrderQrCodeCancel(
serviceId: serviceId!,
userId: payUser.value!.userId!,
);
}
Future<void> disposeOrderQrCodeCancel({
required String serviceId,
required String userId,
}) async {
try {
// 线上订餐二维码支付
if (orderPayType == OrderPayType.RESERVE_QR_CODE) {
final pa = {
"orderId": orderId,
"hardwareId": serviceId,
};
final flag = await HardApi.cancelQrCode(pa);
if (flag == false) throw Error();
}
// 活动核销
if (orderPayType == OrderPayType.ACT_CANCEL) {
final pa = {
"actItemId": orderId,
"userId": userId,
"hardwareId": serviceId,
};
final flag = await HardApi.cancelActQrCode(pa);
if (flag == false) throw Error();
}
EasyLoading.dismiss();
Toast.success(msg: "核销成功");
TtsManage.speak("核销成功");
doCancelPay();
} catch (e, stack) {
logger.e("核销订单orderType:|${orderPayType.title}|error:|$e|stack:|$stack|");
EasyLoading.dismiss();
}
}
/// 发送给父屏订单信息
void senSubScreen() {
if (ObjectUtil.isEmpty(carList)) return;
}
}