154 lines
4.0 KiB
Dart
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;
|
|
}
|
|
}
|