feat: auto-populate department_id on create + seed default campus with backfill
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { Injectable, NotFoundException } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Repository, DataSource } from 'typeorm';
|
||||
import { Repository, In, DataSource } from 'typeorm';
|
||||
import { Bill } from '../entities/bill.entity';
|
||||
import { BillItem } from '../entities/bill-item.entity';
|
||||
import { RoomExpense } from '../entities/room-expense.entity';
|
||||
@@ -177,10 +177,19 @@ export class BillsService {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 合并所有涉及的学生
|
||||
const allStudentIds = new Set([...studentBillData.keys(), ...personalMap.keys()]);
|
||||
|
||||
// 生成账单
|
||||
// Batch-load student departmentIds
|
||||
const studentIdsArr = [...allStudentIds];
|
||||
const studentDeptMap = new Map<number, number>();
|
||||
if (studentIdsArr.length > 0) {
|
||||
const studentsData: { id: number; department_id: number | null }[] = await this.dataSource.query(
|
||||
`SELECT id, department_id FROM students WHERE id IN (${studentIdsArr.join(',')})`
|
||||
);
|
||||
for (const s of studentsData) if (s.department_id != null) studentDeptMap.set(s.id, s.department_id);
|
||||
}
|
||||
const bills: Bill[] = [];
|
||||
for (const studentId of allStudentIds) {
|
||||
const shared = studentBillData.get(studentId)?.shared || 0;
|
||||
@@ -195,6 +204,7 @@ export class BillsService {
|
||||
personalAmount: personal,
|
||||
totalAmount: total,
|
||||
status: 'draft',
|
||||
departmentId: studentDeptMap.get(studentId),
|
||||
});
|
||||
const savedBill = await this.billRepo.save(bill);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user