feat: 实现单价分离、班级转课、消课筛选和手动录入功能

Coze-Commit-Type: user
Coze-User-ID: 3722323274763196
Coze-Conversation-ID: 5260473
This commit is contained in:
user9994793890
2026-05-29 10:40:41 +08:00
parent ee860ce0ae
commit 3468394c6c
10 changed files with 727 additions and 66 deletions

View File

@@ -204,6 +204,8 @@ class StudentAccount(Model):
id = db.Column(db.Integer, primary_key=True)
student_id = db.Column(db.Integer, db.ForeignKey('students.id'), nullable=False)
course_id = db.Column(db.Integer, db.ForeignKey('courses.id'), nullable=False)
from_class_id = db.Column(db.Integer, db.ForeignKey('classes.id'))
from_teacher_id = db.Column(db.Integer, db.ForeignKey('teachers.id'))
normal_hours = db.Column(db.Numeric(10, 2), default=0)
gifted_hours = db.Column(db.Numeric(10, 2), default=0)
consumed_normal = db.Column(db.Numeric(10, 2), default=0)
@@ -225,6 +227,8 @@ class StudentAccount(Model):
student = db.relationship('Student', backref='accounts')
course = db.relationship('Course', backref='accounts')
from_class = db.relationship('Class_', foreign_keys=[from_class_id])
from_teacher = db.relationship('Teacher', foreign_keys=[from_teacher_id])
monthly_snapshots = db.relationship('MonthlySnapshot', backref='account', lazy='dynamic')
class_records = db.relationship('ClassRecord', backref='account', lazy='dynamic')
@@ -418,9 +422,21 @@ class TransferRecord(Model):
to_student_id = db.Column(db.Integer, db.ForeignKey('students.id'))
from_course_id = db.Column(db.Integer, db.ForeignKey('courses.id'), nullable=False)
to_course_id = db.Column(db.Integer, db.ForeignKey('courses.id'))
from_class_id = db.Column(db.Integer, db.ForeignKey('classes.id'))
to_class_id = db.Column(db.Integer, db.ForeignKey('classes.id'))
from_teacher_id = db.Column(db.Integer, db.ForeignKey('teachers.id'))
to_teacher_id = db.Column(db.Integer, db.ForeignKey('teachers.id'))
transfer_type = db.Column(db.String(20), nullable=False)
# 转课类型:class_transfer(班级转课) / gift(转赠)
transfer_class_type = db.Column(db.String(20), default='class_transfer')
# 是否变更单价:no_change(无单价变更) / price_changed(有单价变更)
price_change_type = db.Column(db.String(20), default='no_change')
transfer_hours = db.Column(db.Numeric(10, 2), nullable=False)
original_unit_price = db.Column(db.Numeric(10, 4))
new_unit_price = db.Column(db.Numeric(10, 4))
transfer_amount = db.Column(db.Numeric(10, 2))
price_change_reason = db.Column(db.Text)
effective_date = db.Column(db.Date)
operator_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
remark = db.Column(db.Text)
created_at = db.Column(db.DateTime, default=datetime.now)
@@ -429,15 +445,27 @@ class TransferRecord(Model):
to_student = db.relationship('Student', foreign_keys=[to_student_id], backref='transfers_in')
from_course = db.relationship('Course', foreign_keys=[from_course_id])
to_course = db.relationship('Course', foreign_keys=[to_course_id])
from_class = db.relationship('Class_', foreign_keys=[from_class_id])
to_class = db.relationship('Class_', foreign_keys=[to_class_id])
from_teacher = db.relationship('Teacher', foreign_keys=[from_teacher_id])
to_teacher = db.relationship('Teacher', foreign_keys=[to_teacher_id])
operator = db.relationship('User', backref='transfer_operations')
def to_dict(self):
return {'id': self.id, 'from_student_id': self.from_student_id,
'to_student_id': self.to_student_id,
'from_course_id': self.from_course_id, 'to_course_id': self.to_course_id,
'from_class_id': self.from_class_id, 'to_class_id': self.to_class_id,
'from_teacher_id': self.from_teacher_id, 'to_teacher_id': self.to_teacher_id,
'transfer_type': self.transfer_type,
'transfer_class_type': self.transfer_class_type,
'price_change_type': self.price_change_type,
'transfer_hours': float(self.transfer_hours or 0),
'original_unit_price': float(self.original_unit_price or 0),
'new_unit_price': float(self.new_unit_price or 0),
'transfer_amount': float(self.transfer_amount or 0),
'price_change_reason': self.price_change_reason,
'effective_date': str(self.effective_date) if self.effective_date else None,
'remark': self.remark,
'created_at': str(self.created_at)}