feat:取餐

This commit is contained in:
dzc committed 2025-04-28 16:54:33 +08:00
1 parent 5613a2fa9e
commit 2f72e7a3c0
14 files changed
+36 -22

No files matched your search

@@ -15,7 +15,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_PATH = "pj_cashier/database";
private static final String DATABASE_NAME = "cash_register.db";
private static final int DATABASE_VERSION = 2;
private static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, getCustomDatabasePath(context), null, DATABASE_VERSION);
@@ -212,6 +212,9 @@ class ServiceQRCode {
@JsonSerializable()
class ServiceHardOrder {
/// 用户id
final String? userId;
/// 用户名
final String? username;
@@ -222,6 +225,7 @@ class ServiceHardOrder {
final String? userAvatar;
ServiceHardOrder({
this.userId,
this.username,
this.userMobile,
this.userAvatar,
@@ -121,6 +121,7 @@ Map<String, dynamic> _$ServiceQRCodeToJson(ServiceQRCode instance) =>
ServiceHardOrder _$ServiceHardOrderFromJson(Map<String, dynamic> json) =>
ServiceHardOrder(
userId: json['userId'] as String?,
username: json['username'] as String?,
userMobile: json['userMobile'] as String?,
userAvatar: json['userAvatar'] as String?,
@@ -128,6 +129,7 @@ ServiceHardOrder _$ServiceHardOrderFromJson(Map<String, dynamic> json) =>
Map<String, dynamic> _$ServiceHardOrderToJson(ServiceHardOrder instance) =>
<String, dynamic>{
'userId': instance.userId,
'username': instance.username,
'userMobile': instance.userMobile,
'userAvatar': instance.userAvatar,
@@ -30,7 +30,7 @@ abstract class BroadcastDao {
DELETE FROM broadcast
WHERE
serviceCode IN ($placeholders)
AND strftime('%Y-%m-%d', saleDate) = strftime('%Y-%m-%d', 'now', 'localtime')
AND strftime('%Y-%m-%d', createTime) = strftime('%Y-%m-%d', 'now', 'localtime')
''';
return await database.rawDelete(sql, [...codes]);
}
+1 -1
View File
@@ -35,7 +35,7 @@ const typeConverters = <Type>[
BoolConverter,
];
@Database(version: 2, entities: entities)
@Database(version: 1, entities: entities)
@TypeConverters(typeConverters)
abstract class AppDatabase extends FloorDatabase {
BroadcastDao get getBroadcastDao;
+1 -1
View File
@@ -102,7 +102,7 @@ class _$AppDatabase extends AppDatabase {
Callback? callback,
]) async {
final databaseOptions = sqflite.OpenDatabaseOptions(
version: 2,
version: 1,
onConfigure: (database) async {
await database.execute('PRAGMA foreign_keys = ON');
await callback?.onConfigure?.call(database);
@@ -70,7 +70,7 @@ abstract class SyncTakeFoodBroadcastTool {
msg += "${v.content},";
}
msg = msg.substring(0, msg.length - 1);
msg += "的用户,请尽快取餐";
msg += "的用户,尽快取餐";
// 播报当前组
await TtsManage.speak(msg);
// 如果不是最后一组,等待一段时间再播报下一组
@@ -117,7 +117,7 @@ abstract class SyncTakeFoodBroadcastTool {
static Future<bool> _queryTodayBroadcastGroup(dynamic pa) async {
final serviceList = await HardApi.broadcastToday(pa);
if (serviceList == null) return false;
final result = serviceList.size == 100;
final result = serviceList.total == 100;
if (ObjectUtil.isEmptyList(serviceList.records)) return false;
final appC = Get.find<AppControl>();
final broadcastDao = appC.dataBase.getBroadcastDao;
@@ -141,9 +141,9 @@ abstract class SyncTakeFoodBroadcastTool {
) {
return BroadcastEntity(
content: obj.content,
broadcastCount: 0,
broadcastCount: obj.broadcastCount ?? 0,
broadcastMaxCount: obj.broadcastMaxCount ?? 20,
isBroadcast: true,
isBroadcast: obj.isBroadcast,
isDone: false,
productDesc: obj.productDesc,
serviceCode: obj.id,
+3 -2
View File
@@ -9,6 +9,7 @@ Widget appUserInfo(
dynamic username = "未知",
dynamic balance = "未知",
String? avatar = "",
bool visibleMoney = true,
}) {
if (ObjectUtil.isEmpty(username)) {
username = "未知";
@@ -23,7 +24,7 @@ Widget appUserInfo(
final style = theme.typography.lg;
return <Widget>[
ObjectUtil.isNotEmpty(avatar)
? appImg(avatar)
? appImg(avatar).width(80.w).height(80.w)
: Image.asset(
AssetsImages.defaultAvatar,
fit: BoxFit.cover,
@@ -36,7 +37,7 @@ Widget appUserInfo(
<Widget>[
Text("饭卡余额:", style: style),
appPrice(context, balance),
].toRow(),
].toRow().offstage(offstage: !visibleMoney),
].toColumn(crossAxisAlignment: CrossAxisAlignment.start),
].toRow(mainAxisAlignment: MainAxisAlignment.center).width(double.infinity);
}
@@ -111,6 +111,12 @@ class CanteenReserveController extends GetxController {
final broadcastDao = appC.dataBase.getBroadcastDao;
v.broadcastCount = 0;
await broadcastDao.edit(v);
// 同步给后台
final pa = {
"ids": [v.serviceCode],
"count": -1
};
await HardApi.broadcast(pa);
await _getReservePage();
EasyLoading.dismiss();
}
+1 -1
View File
@@ -45,7 +45,7 @@ class CanteenReservePage extends GetView<CanteenReserveController> {
size: theme.typography.base.fontSize,
),
label: Text(
'同步所有广播',
'刷新',
style: theme.typography.base.copyWith(
color: theme.colorScheme.primary,
),
+1 -1
View File
@@ -91,11 +91,11 @@ class LoginController extends GetxController {
userSetting.password = passwordC.value.text;
userSetting.tenantId = currentTenant.id;
await AppSettingTool.setUserSetting(userSetting);
await TtsManage.speak("登录成功");
if (visibleMsg) {
Toast.success(msg: "登录成功");
EasyLoading.dismiss();
}
await TtsManage.speak("登录成功");
Get.offAndToNamed(RouteNames.panel);
_clearForm();
} catch (e) {
@@ -55,6 +55,7 @@ class TakeFoodController extends GetxController {
}
doPay() async {
payUser.refresh();
await orderQrCodeCancel();
}
@@ -67,7 +68,7 @@ class TakeFoodController extends GetxController {
if (data == null) throw Error();
if (ObjectUtil.isEmpty(data)) return;
payUser.value?.username = data.username;
payUser.value?.userId = globalQrCode?.userId;
payUser.value?.userId = data.userId;
payUser.value?.userAvatar = data.userAvatar;
payUser.refresh();
await getCarList();
@@ -137,7 +138,7 @@ class TakeFoodController extends GetxController {
final flag = await HardApi.cancelQrCode(pa);
if (flag == false) throw Error();
EasyLoading.dismiss();
Toast.error(msg: "核销成功");
Toast.success(msg: "核销成功");
TtsManage.speak("核销成功");
doCancelPay();
} catch (e, stack) {
+1 -1
View File
@@ -1,4 +1,4 @@
library;
export 'widgets/controller.dart';
export './controller.dart';
export './view.dart';
+7 -7
View File
@@ -83,10 +83,10 @@ class TakeFoodPage extends GetView<TakeFoodController> {
).center(),
),
DataCell(
appPrice(context, v.productPrice),
appPrice(context, v.productPrice).center(),
),
DataCell(
appPrice(context, v.totalPrice),
appPrice(context, v.totalPrice).center(),
),
],
),
@@ -103,14 +103,14 @@ class TakeFoodPage extends GetView<TakeFoodController> {
final theme = FTheme.of(context);
return <Widget>[
Obx(() {
final payUser = controller.payUser.value;
return appUserInfo(
context,
username: payUser?.username,
balance: payUser?.walletBalance,
avatar: payUser?.userAvatar,
username: controller.payUser.value?.username,
balance: controller.payUser.value?.walletBalance,
avatar: controller.payUser.value?.userAvatar,
visibleMoney: false,
);
}).width(400.w).center(),
}).width(600.w).center(),
SizedBox(height: 200.h),
<Widget>[
FButton(