Compare commits

...

4 Commits

Author SHA1 Message Date
wangsiyuan 964332cf44 更新 mysql.sql 2023-12-29 00:21:30 +08:00
wangsiyuan b5b5e92b73 更新 database_manager.py 2023-12-29 00:21:28 +08:00
wangsiyuan f59b43c99e 更新 views.py 2023-12-29 00:21:26 +08:00
wangsiyuan 68a126cb8b 更新 attendance.html 2023-12-29 00:21:24 +08:00
4 changed files with 45 additions and 28 deletions

View File

@ -64,14 +64,16 @@
<script src="/static/js/logout.js"></script> <script src="/static/js/logout.js"></script>
<script> <script>
$(document).ready(function () { $(document).ready(function () {
let courseData = {};
// 获取课程名称或状态 // 获取课程名称或状态
$.get("/api/get-course-name", function (response) { $.get("/api/get-course-name", function (response) {
if (response.msg === "ok") { if (response.msg === "ok") {
// 如果后端返回课程名 // 如果后端返回课程名
$("#course-info").text("课程:" + response.data.course_name +" 在上课时间内,请及时签到"); $("#course-info").text("课程:" + response.data.course_name + "。在上课时间内,请及时签到!");
// 启用签到按钮 // 启用签到按钮
$("#sign-in-btn").prop('disabled', false); $("#sign-in-btn").prop('disabled', false);
courseData = response.data;
} else { } else {
// 根据不同的消息更新状态 // 根据不同的消息更新状态
$("#course-info").text(response.msg); // 显示没有课程的消息 $("#course-info").text(response.msg); // 显示没有课程的消息
@ -84,16 +86,16 @@
$("#sign-in-btn").click(function () { $("#sign-in-btn").click(function () {
if (!$(this).prop('disabled')) { if (!$(this).prop('disabled')) {
// 发送签到请求到后端 // 发送签到请求到后端
$.post("/api/student-sign-in", function (response) { $.post("/api/student-sign-in",courseData,function (response) {
// 处理签到后的响应 // 处理签到后的响应
if (response.success) { if (response.msg === 'ok') {
layer.msg('签到成功!'); layer.msg('签到成功!');
} else { } else {
layer.msg("签到失败!"); layer.msg(response.data);
} }
}); });
} else { } else {
alert("当前不可签到"); // Or handle disabled button click as needed layer.msg("当前不可签到"); // Or handle disabled button click as needed
} }
}); });
}); });

View File

@ -1,6 +1,4 @@
import datetime
import os import os
import openpyxl as openpyxl import openpyxl as openpyxl
from flask import Flask, redirect, url_for, render_template, session, jsonify, request, send_file from flask import Flask, redirect, url_for, render_template, session, jsonify, request, send_file
from utils.time_utils import check_now_time from utils.time_utils import check_now_time
@ -14,6 +12,7 @@ from models.User import User
import logging import logging
from config import LOGGING_CONFIG from config import LOGGING_CONFIG
from config import FILE_PATH from config import FILE_PATH
from datetime import datetime
app = Flask(__name__, static_folder='static') app = Flask(__name__, static_folder='static')
app.secret_key = SECRET_KEY # 从配置文件设置 app.secret_key = SECRET_KEY # 从配置文件设置
@ -294,7 +293,7 @@ def receive_excel():
@app.route('/api/get-course-name', methods=['GET']) @app.route('/api/get-course-name', methods=['GET'])
def get_course_name(): def get_course_name():
data = {'course_name': "信息技术"} data = {'course_name': "信息技术", "course_id": 1}
return jsonify({ return jsonify({
'msg': 'ok', 'msg': 'ok',
'data': data 'data': data
@ -324,9 +323,8 @@ def get_course_name():
# 如果是工作日,获取课程信息 # 如果是工作日,获取课程信息
print(f"day of week: {day_of_week}") print(f"day of week: {day_of_week}")
db_manager = DatabaseManager() db_manager = DatabaseManager()
data = db_manager.get_course_name(number, day_of_week) data = db_manager.get_course_name(number, day_of_week, period_id)
print(data) print(data)
# 返回课程信息 # 返回课程信息
return jsonify({ return jsonify({
'msg': 'ok', 'msg': 'ok',
@ -337,8 +335,20 @@ def get_course_name():
@app.route('/api/student-sign-in', methods=['POST']) @app.route('/api/student-sign-in', methods=['POST'])
def student_sign_in(): def student_sign_in():
number = session.get("number") number = session.get("number")
print(number) course_name = request.form.get('course_name')
return "aaa" course_id = request.form.get('course_id')
now = datetime.now()
date = now.strftime("%Y年%m月%d%H:%M")
status = "出勤"
print(f"number: {number},course_name: {course_name},course_id: {course_id}")
db_manager = DatabaseManager()
result = db_manager.update_sign_in_info(number, course_id, course_name, date, status)
if result == 1:
return jsonify({"msg": "ok", "data": "签到成功!"})
else:
return jsonify({"msg": "fail", "data": "签到失败!"})
if __name__ == '__main__': if __name__ == '__main__':
app.run(debug=True) app.run(debug=True)

View File

@ -125,21 +125,26 @@ WHERE
data = (student.student_name, student.student_number, student.user_id, student.major_id, student.class_name) data = (student.student_name, student.student_number, student.user_id, student.major_id, student.class_name)
return self.execute(sql, data) return self.execute(sql, data)
def get_course_name(self, student_number, day_of_week): def get_course_name(self, student_number, day_of_week, period_id):
# 从student表获取class_name # 从student表获取class_name
sql_student = "SELECT class_name FROM student WHERE student_number = %s;" sql_student = "SELECT class_name FROM student WHERE student_number = %s;"
class_name = self.fetch(sql_student, (student_number,))[0]['class_name'] class_name = self.fetch(sql_student, (student_number,))[0]['class_name']
# 使用class_name和day_of_week从schedule表获取course_id # 使用class_name和day_of_week从schedule表获取course_id
sql_schedule = "SELECT course_id, FROM schedule WHERE day_of_week = %s AND class_name = %s;" sql_schedule = "SELECT course_id, FROM schedule WHERE day_of_week = %s AND class_name = %s AND period_id = %s;"
course_id_list = self.fetch(sql_schedule, (day_of_week, class_name)) course_id = self.fetch(sql_schedule, (day_of_week, class_name, period_id))
# 对于每一个course_id从course表中查询course_name # 对于每一个course_id从course表中查询course_name
course_names = []
for course_id in course_id_list:
sql_course = "SELECT course_name FROM course WHERE course_id = %s;" sql_course = "SELECT course_name FROM course WHERE course_id = %s;"
course_name = self.fetch(sql_course, (course_id['course_id'],)) course_name = self.fetch(sql_course, (course_id['course_id'],))
if course_name: data = {"course_name": course_name, "course_id": course_id}
course_names.extend([cn['course_name'] for cn in course_name]) return data
return course_names def update_sign_in_info(self, student_number, course_id, course_name, date, status):
sql = """
INSERT INTO attendance_record (student_number, course_id, course_name, date, status)
VALUES (%s, %s, %s, %s, %s)
"""
val = (student_number, course_id, course_name, date, status)
result = self.execute(sql, val)
return result

View File

@ -80,15 +80,14 @@ VALUES ('大学计算机基础', 'CF001', '必修', 3, '介绍计算机基础知
('计算机网络', 'CN002', '必修', 4, '学习计算机网络的基础理论和协议'); ('计算机网络', 'CN002', '必修', 4, '学习计算机网络的基础理论和协议');
CREATE TABLE attendance_records CREATE TABLE attendance_record
( (
record_id INT AUTO_INCREMENT PRIMARY KEY, record_id INT AUTO_INCREMENT PRIMARY KEY,
student_number VARCHAR(20) NOT NULL,
course_id INT NOT NULL, course_id INT NOT NULL,
student_id INT NOT NULL, course_name VARCHAR(255) NOT NULL,
date DATE NOT NULL, date VARCHAR(255) NOT NULL,
status ENUM('present', 'absent', 'late', 'excused'), status VARCHAR(20)
FOREIGN KEY (course_id) REFERENCES course (course_id),
FOREIGN KEY (student_id) REFERENCES student (student_id)
); );
@ -246,3 +245,4 @@ VALUES ('一、二节', '08:00:00', '09:30:00'),
('三、四节', '10:00:00', '11:30:00'), ('三、四节', '10:00:00', '11:30:00'),
('五、六节', '14:30:00', '16:00:00'), ('五、六节', '14:30:00', '16:00:00'),
('七、八节', '16:30:00', '18:00:00'); ('七、八节', '16:30:00', '18:00:00');