first commit
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
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();
|
||||
}
|
||||
Reference in New Issue
Block a user