Files
2026-09-21 17:37:53 +08:00

46 lines
1.2 KiB
Dart

import '../models/bill.dart';
/// 按日期分组的账单
class BillDayGroup {
final String date; // yyyy-MM-dd
final List<Bill> bills;
final double expenseTotal; // type==1 的合计
final double incomeTotal; // type==2 的合计
const BillDayGroup({
required this.date,
required this.bills,
required this.expenseTotal,
required this.incomeTotal,
});
}
/// 按 billDate 分组,并分别累计当日支出/收入。
///
/// 后端已按 `billDate DESC, createTime DESC` 排序,Dart 的 Map 保持插入顺序,
/// 因此直接顺序遍历累积即可,不要再次排序(否则会打乱同日内的时间顺序)。
List<BillDayGroup> groupBillsByDate(List<Bill> bills) {
final grouped = <String, List<Bill>>{};
for (final bill in bills) {
grouped.putIfAbsent(bill.billDate, () => []).add(bill);
}
return grouped.entries.map((entry) {
var expense = 0.0;
var income = 0.0;
for (final bill in entry.value) {
if (bill.isExpense) {
expense += bill.absAmount;
} else {
income += bill.absAmount;
}
}
return BillDayGroup(
date: entry.key,
bills: entry.value,
expenseTotal: expense,
incomeTotal: income,
);
}).toList();
}