Initial commit

This commit is contained in:
user9994793890
2026-05-29 10:28:07 +08:00
commit ee860ce0ae
87 changed files with 12595 additions and 0 deletions

69
xuexiao/routes/account.py Normal file
View File

@@ -0,0 +1,69 @@
"""学员课时账户:手动调整(管理员)"""
from flask import render_template, request, redirect, url_for, flash, session
from models import db, Student, Course, StudentAccount
from utils import login_required, permission_required, log_operation
import business_rules as rules
def register_routes(app):
@app.route('/accounts/adjust', methods=['GET', 'POST'], endpoint='account_adjust')
@login_required
@permission_required('student_account_adjust')
def account_adjust():
if request.method == 'POST':
student_id = int(request.form.get('student_id'))
course_id = int(request.form.get('course_id'))
try:
normal_delta = float(request.form.get('normal_delta', 0) or 0)
gifted_delta = float(request.form.get('gifted_delta', 0) or 0)
except ValueError:
flash('课时调整值格式错误', 'danger')
return redirect(url_for('account_adjust'))
reason = request.form.get('reason', '').strip()
account = rules.lock_student_account(student_id, course_id)
if not account:
account = StudentAccount(student_id=student_id, course_id=course_id)
db.session.add(account)
db.session.flush()
before = rules.account_snapshot_dict(account)
try:
rules.manual_adjust_account(
account, normal_delta=normal_delta,
gifted_delta=gifted_delta, reason=reason,
)
record = None
db.session.commit()
after = rules.account_snapshot_dict(account)
log_operation(
'手动调课时',
f'学员{student_id} 课程{course_id} 正课{normal_delta:+} 赠课{gifted_delta:+} {reason}',
before=before, after=after, commit=True,
)
flash('课时调整成功', 'success')
return redirect(url_for(
'account_adjust',
student_id=student_id, course_id=course_id,
))
except ValueError as e:
db.session.rollback()
flash(str(e), 'danger')
student_id = request.args.get('student_id', type=int)
course_id = request.args.get('course_id', type=int)
account = None
if student_id and course_id:
account = StudentAccount.query.filter_by(
student_id=student_id, course_id=course_id,
).first()
students = Student.query.filter_by(status=1).order_by(Student.id.desc()).all()
courses = Course.query.filter_by(status=1).all()
return render_template(
'account_adjust.html',
students=students, courses=courses,
account=account,
student_id=student_id, course_id=course_id,
)