diff --git a/lib/common/models/database/database_enum_models.dart b/lib/common/models/database/database_enum_models.dart index bc915ed..82f6495 100644 --- a/lib/common/models/database/database_enum_models.dart +++ b/lib/common/models/database/database_enum_models.dart @@ -44,6 +44,8 @@ enum OrderPayType implements BaseEnum { FOREIGN_TICKET_QR_CODE("6", "外来人员二维码支付"), RESERVE_QR_CODE("7", "线上订餐二维码支付"), CASH("8", "现金支付"), + WECHANT_SELF_QR_CODE_PAY("10", "微信付款码支付"), + ALI_SELF_QR_CODE_PAY("11", "支付宝付款码支付"), ; @override @@ -59,6 +61,14 @@ enum OrderPayType implements BaseEnum { OrderPayType.FOREIGN_TICKET_QR_CODE, ].contains(payType); } + + // 是否是自付款(微信、支付宝) + static bool isExternalPay(OrderPayType payType) { + return [ + OrderPayType.WECHANT_SELF_QR_CODE_PAY, + OrderPayType.ALI_SELF_QR_CODE_PAY, + ].contains(payType); + } } /// 订单状态 diff --git a/lib/common/utils/app/app_network_tool.dart b/lib/common/utils/app/app_network_tool.dart index 88d0a99..45eaf33 100644 --- a/lib/common/utils/app/app_network_tool.dart +++ b/lib/common/utils/app/app_network_tool.dart @@ -53,18 +53,6 @@ abstract class AppNetworkTool { return true; } - // 生成离线网络用户 - static ServiceUser generateOfflinePayUser({ - String userName = "离线用户", - String cardNumber = "离线用户", - }) { - return ServiceUser( - username: userName, - walletCardNumber: cardNumber, - userMobile: "离线用户", - ); - } - // 自动监听网络变化 static void listenNetwork() async { subscription = Connectivity() diff --git a/lib/common/utils/app/app_user_tool.dart b/lib/common/utils/app/app_user_tool.dart index 84ae269..8078c43 100644 --- a/lib/common/utils/app/app_user_tool.dart +++ b/lib/common/utils/app/app_user_tool.dart @@ -9,4 +9,32 @@ abstract class AppUserTool { final accessToken = userSetting.accessToken; return ObjectUtil.isNotEmpty(accessToken); } + + // 生成离线网络用户 + static ServiceUser generateOfflinePayUser({ + String userId = "-1", + String userName = "离线用户", + String cardNumber = "-1", + }) { + return ServiceUser( + userId: userId, + username: userName, + walletCardNumber: cardNumber, + userMobile: "离线用户", + ); + } + + // 生成外部用户 + static ServiceUser generateExternalUser({ + String userId = "-1", + String userName = "外部用户", + String cardNumber = "-1", + }) { + return ServiceUser( + userId: userId, + username: userName, + walletCardNumber: cardNumber, + userMobile: "外部用户", + ); + } } diff --git a/lib/common/utils/manage/http_manage.dart b/lib/common/utils/manage/http_manage.dart index c980105..ca28c61 100644 --- a/lib/common/utils/manage/http_manage.dart +++ b/lib/common/utils/manage/http_manage.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:common_utils/common_utils.dart'; import 'package:dio/dio.dart'; import 'package:dio/io.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:pj_supermarket_cloud/common/index.dart'; @@ -83,6 +84,7 @@ class HttpManage { ServiceBase data = ServiceBase.fromJson(response.data); if (data.code != 0) { Toast.error(msg: data.msg ?? "服务器未知错误"); + EasyLoading.dismiss(); handler.next(e); return; } diff --git a/lib/common/widgets/order/mixin/order_mixin.dart b/lib/common/widgets/order/mixin/order_mixin.dart index 2ed8fd9..4ae9f7b 100644 --- a/lib/common/widgets/order/mixin/order_mixin.dart +++ b/lib/common/widgets/order/mixin/order_mixin.dart @@ -352,6 +352,11 @@ mixin OrderMixin { if (globalQrCode == null) return ""; switch (orderType) { case OrderType.BELOW: + if (ObjectUtil.isNotEmpty(globalQrCode?.id)) { + if (OrderPayType.isExternalPay(orderPayType.value!)) { + orderSourceTypeId = globalQrCode!.id.toString(); + } + } break; case OrderType.RESERVE: if (ObjectUtil.isEmpty(globalQrCode!.id)) { diff --git a/lib/pages/order_history/view.dart b/lib/pages/order_history/view.dart index e49eb23..7a5a505 100644 --- a/lib/pages/order_history/view.dart +++ b/lib/pages/order_history/view.dart @@ -218,7 +218,8 @@ class OrderHistoryPage extends GetView { offstage: !OrderStatus.successPayCodes() .contains(v.status.code) || DateTime.now().difference(v.createTime).inHours > - 4, + 4 || + controller.sysType.value == SysType.SUPERMARKET, ), FButton( label: Text( diff --git a/lib/pages/supermarket_order/controller.dart b/lib/pages/supermarket_order/controller.dart index 7ef40e3..d6e8937 100644 --- a/lib/pages/supermarket_order/controller.dart +++ b/lib/pages/supermarket_order/controller.dart @@ -314,6 +314,11 @@ class SupermarketOrderController extends GetxController with OrderMixin { BarcodeScanManage.instance.startListening(); BarcodeScanManage.instance.gunScanStream.listen((event) async { if (ObjectUtil.isEmpty(event)) return; + // 判断是否为支付包或者微信或者钱包二维码 + if (payQrCode(event)) { + handlePayQrCode(event); + return; + } // 根据条码查询商品 final skuDao = appC.dataBase.getSupermarketSkuDao; SupermarketSpuEntity? scanProduct = await skuDao.getByBarCode(event); @@ -345,6 +350,72 @@ class SupermarketOrderController extends GetxController with OrderMixin { }); } + // 判断是否为支付包或者微信或者钱包二维码 + bool payQrCode(String event) { + // 微信支付 + if (event.length == 18 && event.startsWith("13")) { + return true; + } + // 支付宝支付 + if (event.length == 18 && event.startsWith("28")) { + return true; + } + // 钱包二维码支付 + if (event.length == 32) { + return true; + } + return false; + } + + // 处理扫码枪支付 + Future handlePayQrCode(String event) async { + OrderPayType orderPayType = OrderPayType.WECHANT_SELF_QR_CODE_PAY; + // 微信支付 + if (event.length == 18 && event.startsWith("13")) { + orderPayType = OrderPayType.WECHANT_SELF_QR_CODE_PAY; + } + // 支付宝支付 + if (event.length == 18 && event.startsWith("28")) { + orderPayType = OrderPayType.ALI_SELF_QR_CODE_PAY; + } + // 钱包二维码支付 + if (event.length == 32) { + orderPayType = OrderPayType.WALLET_QR_CODE; + } + // 创建本地订单 + this.orderType = OrderType.BELOW; + this.orderPayType.value = orderPayType; + this.orderPayDisplayType.value = OrderPayDisplayType.qrCode; + this.globalQrCode = ServiceQRCode( + id: event, + itemId: "-1", + typeId: "-1", + userId: "-1", + orderType: OrderType.BELOW, + payType: orderPayType, + exceedTime: -1, + extra: "-1", + ); + payUser.value = AppUserTool.generateExternalUser(); + final validShopCar = _validateShopCar(); + if (!validShopCar) return; + EasyLoading.show( + status: '支付中...', + maskType: EasyLoadingMaskType.black, + ); + try { + await createSqlOrder(); + await updateSqlOrder(); + await createApiOrder(); + } catch (error, stack) { + logger.e("|$_tag|,处理扫码枪支付失败|$error|stack|$stack|"); + } finally { + EasyLoading.dismiss(); + _clearShopCard(); + putOffSendSubScreen(); + } + } + // ************************************************************************** // 扫码枪的回调 end // **************************************************************************