Update app.py
Browse files
app.py
CHANGED
|
@@ -1,10 +1,48 @@
|
|
| 1 |
from flask import Flask, jsonify, render_template, request
|
| 2 |
import pandas as pd
|
| 3 |
import re
|
|
|
|
| 4 |
from datetime import datetime, timedelta
|
| 5 |
|
| 6 |
app = Flask(__name__)
|
| 7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
# 加载学生数据表
|
| 9 |
student_file_path = r"./数据表/区队-学号-姓名-1.xlsx"
|
| 10 |
try:
|
|
@@ -154,10 +192,12 @@ def get_student_courses():
|
|
| 154 |
|
| 155 |
# 根据地点判断校区
|
| 156 |
location = row["地点"].split("(")[0] if "(" in row["地点"] else row["地点"]
|
| 157 |
-
campus =
|
|
|
|
|
|
|
| 158 |
|
| 159 |
results.append({
|
| 160 |
-
"课程": row["课程"].split("]")[1] if "]" in row["课程"] else row["课程"],
|
| 161 |
"教师": row["教师"],
|
| 162 |
"地点": location,
|
| 163 |
"星期": day,
|
|
@@ -165,7 +205,7 @@ def get_student_courses():
|
|
| 165 |
"节次": periods,
|
| 166 |
"节次范围": f"第{periods[0]}-{periods[-1]}节",
|
| 167 |
"周次": row["周次"],
|
| 168 |
-
"校区":
|
| 169 |
"上课班级": str(row["行政班级"]) if "行政班级" in row else ""
|
| 170 |
})
|
| 171 |
|
|
@@ -207,10 +247,12 @@ def get_courses_by_teacher():
|
|
| 207 |
|
| 208 |
# 根据地点判断校区
|
| 209 |
location = row["地点"].split("(")[0] if "(" in row["地点"] else row["地点"]
|
| 210 |
-
campus =
|
|
|
|
|
|
|
| 211 |
|
| 212 |
results.append({
|
| 213 |
-
"课程": row["课程"].split("]")[1] if "]" in row["课程"] else row["课程"],
|
| 214 |
"教师": row["教师"],
|
| 215 |
"地点": location,
|
| 216 |
"星期": day,
|
|
@@ -218,7 +260,7 @@ def get_courses_by_teacher():
|
|
| 218 |
"节次": periods,
|
| 219 |
"节次范围": f"第{periods[0]}-{periods[-1]}节",
|
| 220 |
"周次": row["周次"],
|
| 221 |
-
"校区":
|
| 222 |
"上课班级": str(row["行政班级"]) if "行政班级" in row else ""
|
| 223 |
})
|
| 224 |
|
|
@@ -295,13 +337,40 @@ def get_courses_by_classroom():
|
|
| 295 |
|
| 296 |
# 解析课程信息
|
| 297 |
results = []
|
|
|
|
|
|
|
| 298 |
for _, row in filtered_data.iterrows():
|
| 299 |
day_and_period = parse_day_and_period(str(row["节次"]))
|
| 300 |
if day_and_period:
|
| 301 |
day, periods = day_and_period
|
| 302 |
course_date = calculate_date(week, day)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 303 |
results.append({
|
| 304 |
-
"课程":
|
| 305 |
"教师": str(row["教师"]),
|
| 306 |
"地点": str(row["教室"]),
|
| 307 |
"星期": day,
|
|
@@ -370,10 +439,12 @@ def get_student_courses_v2():
|
|
| 370 |
|
| 371 |
# 根据地点判断校区
|
| 372 |
location = row["地点"].split("(")[0] if "(" in row["地点"] else row["地点"]
|
| 373 |
-
campus =
|
|
|
|
|
|
|
| 374 |
|
| 375 |
results.append({
|
| 376 |
-
"课程": row["课程"].split("]")[1] if "]" in row["课程"] else row["课程"],
|
| 377 |
"教师": row["教师"],
|
| 378 |
"地点": location,
|
| 379 |
"星期": day,
|
|
@@ -381,7 +452,7 @@ def get_student_courses_v2():
|
|
| 381 |
"节次": periods,
|
| 382 |
"节次范围": f"第{periods[0]}-{periods[-1]}节",
|
| 383 |
"周次": row["周次"],
|
| 384 |
-
"校区":
|
| 385 |
"上课班级": str(row["行政班级"]) if "行政班级" in row else ""
|
| 386 |
})
|
| 387 |
|
|
|
|
| 1 |
from flask import Flask, jsonify, render_template, request
|
| 2 |
import pandas as pd
|
| 3 |
import re
|
| 4 |
+
import json
|
| 5 |
from datetime import datetime, timedelta
|
| 6 |
|
| 7 |
app = Flask(__name__)
|
| 8 |
|
| 9 |
+
# 加载教室到校区的映射
|
| 10 |
+
try:
|
| 11 |
+
with open('./数据表/classroom_to_campus_mapping.json', 'r', encoding='utf-8') as f:
|
| 12 |
+
classroom_to_campus_mapping = json.load(f)
|
| 13 |
+
print(f"成功加载教室到校区映射,共{len(classroom_to_campus_mapping)}个教室")
|
| 14 |
+
except Exception as e:
|
| 15 |
+
print(f"加载教室到校区映射失败: {e}")
|
| 16 |
+
classroom_to_campus_mapping = {}
|
| 17 |
+
|
| 18 |
+
# 根据教室名称获取校区的函数
|
| 19 |
+
def get_campus_by_classroom(location):
|
| 20 |
+
"""
|
| 21 |
+
根据教室名称获取校区
|
| 22 |
+
"""
|
| 23 |
+
if not location:
|
| 24 |
+
return "未知校区"
|
| 25 |
+
|
| 26 |
+
# 移除括号内容,获取纯教室名称
|
| 27 |
+
clean_location = re.sub(r'\([^)]*\)', '', location).strip()
|
| 28 |
+
|
| 29 |
+
# 首先尝试直接匹配
|
| 30 |
+
if location in classroom_to_campus_mapping:
|
| 31 |
+
return classroom_to_campus_mapping[location]
|
| 32 |
+
|
| 33 |
+
# 尝试匹配清理后的教室名称
|
| 34 |
+
if clean_location in classroom_to_campus_mapping:
|
| 35 |
+
return classroom_to_campus_mapping[clean_location]
|
| 36 |
+
|
| 37 |
+
# 如果映射中没有找到,使用原有的逻辑作为备用
|
| 38 |
+
if "仙葫" in location:
|
| 39 |
+
return "仙葫校区"
|
| 40 |
+
elif "五合" in location:
|
| 41 |
+
return "五合校区"
|
| 42 |
+
|
| 43 |
+
# 默认返回五合校区
|
| 44 |
+
return "五合校区"
|
| 45 |
+
|
| 46 |
# 加载学生数据表
|
| 47 |
student_file_path = r"./数据表/区队-学号-姓名-1.xlsx"
|
| 48 |
try:
|
|
|
|
| 192 |
|
| 193 |
# 根据地点判断校区
|
| 194 |
location = row["地点"].split("(")[0] if "(" in row["地点"] else row["地点"]
|
| 195 |
+
campus = get_campus_by_classroom(str(row["地点"]))
|
| 196 |
+
# 简化校区名称显示
|
| 197 |
+
campus_display = campus.replace("校区", "")
|
| 198 |
|
| 199 |
results.append({
|
| 200 |
+
"课程": row["课程"].split("]")[1].strip() if "]" in row["课程"] and len(row["课程"].split("]")) > 1 and row["课程"].split("]")[1].strip() else row["课程"],
|
| 201 |
"教师": row["教师"],
|
| 202 |
"地点": location,
|
| 203 |
"星期": day,
|
|
|
|
| 205 |
"节次": periods,
|
| 206 |
"节次范围": f"第{periods[0]}-{periods[-1]}节",
|
| 207 |
"周次": row["周次"],
|
| 208 |
+
"校区": campus_display,
|
| 209 |
"上课班级": str(row["行政班级"]) if "行政班级" in row else ""
|
| 210 |
})
|
| 211 |
|
|
|
|
| 247 |
|
| 248 |
# 根据地点判断校区
|
| 249 |
location = row["地点"].split("(")[0] if "(" in row["地点"] else row["地点"]
|
| 250 |
+
campus = get_campus_by_classroom(str(row["地点"]))
|
| 251 |
+
# 简化校区名称显示
|
| 252 |
+
campus_display = campus.replace("校区", "")
|
| 253 |
|
| 254 |
results.append({
|
| 255 |
+
"课程": row["课程"].split("]")[1].strip() if "]" in row["课程"] and len(row["课程"].split("]")) > 1 and row["课程"].split("]")[1].strip() else row["课程"],
|
| 256 |
"教师": row["教师"],
|
| 257 |
"地点": location,
|
| 258 |
"星期": day,
|
|
|
|
| 260 |
"节次": periods,
|
| 261 |
"节次范围": f"第{periods[0]}-{periods[-1]}节",
|
| 262 |
"周次": row["周次"],
|
| 263 |
+
"校区": campus_display,
|
| 264 |
"上课班级": str(row["行政班级"]) if "行政班级" in row else ""
|
| 265 |
})
|
| 266 |
|
|
|
|
| 337 |
|
| 338 |
# 解析课程信息
|
| 339 |
results = []
|
| 340 |
+
seen_courses = set() # 用于去重的集合
|
| 341 |
+
|
| 342 |
for _, row in filtered_data.iterrows():
|
| 343 |
day_and_period = parse_day_and_period(str(row["节次"]))
|
| 344 |
if day_and_period:
|
| 345 |
day, periods = day_and_period
|
| 346 |
course_date = calculate_date(week, day)
|
| 347 |
+
|
| 348 |
+
# 提取课程名称
|
| 349 |
+
raw_course_name = str(row["课程名称"])
|
| 350 |
+
if "]" in raw_course_name:
|
| 351 |
+
parts = raw_course_name.split("]")
|
| 352 |
+
if len(parts) > 1 and parts[1].strip():
|
| 353 |
+
course_name = parts[1].strip()
|
| 354 |
+
else:
|
| 355 |
+
course_name = raw_course_name # 如果分割后为空,使用原始名称
|
| 356 |
+
else:
|
| 357 |
+
course_name = raw_course_name
|
| 358 |
+
|
| 359 |
+
# 如果课程名称为空或只有空白字符,跳过这条记录
|
| 360 |
+
if not course_name or course_name.strip() == "" or course_name == "nan":
|
| 361 |
+
continue
|
| 362 |
+
|
| 363 |
+
# 创建唯一标识符:星期+节次+课程名称
|
| 364 |
+
course_key = (day, tuple(periods), course_name)
|
| 365 |
+
|
| 366 |
+
# 如果这个课程时间段组合已经存在,跳过
|
| 367 |
+
if course_key in seen_courses:
|
| 368 |
+
continue
|
| 369 |
+
|
| 370 |
+
seen_courses.add(course_key)
|
| 371 |
+
|
| 372 |
results.append({
|
| 373 |
+
"课程": course_name,
|
| 374 |
"教师": str(row["教师"]),
|
| 375 |
"地点": str(row["教室"]),
|
| 376 |
"星期": day,
|
|
|
|
| 439 |
|
| 440 |
# 根据地点判断校区
|
| 441 |
location = row["地点"].split("(")[0] if "(" in row["地点"] else row["地点"]
|
| 442 |
+
campus = get_campus_by_classroom(str(row["地点"]))
|
| 443 |
+
# 简化校区名称显示
|
| 444 |
+
campus_display = campus.replace("校区", "")
|
| 445 |
|
| 446 |
results.append({
|
| 447 |
+
"课程": row["课程"].split("]")[1].strip() if "]" in row["课程"] and len(row["课程"].split("]")) > 1 and row["课程"].split("]")[1].strip() else row["课程"],
|
| 448 |
"教师": row["教师"],
|
| 449 |
"地点": location,
|
| 450 |
"星期": day,
|
|
|
|
| 452 |
"节次": periods,
|
| 453 |
"节次范围": f"第{periods[0]}-{periods[-1]}节",
|
| 454 |
"周次": row["周次"],
|
| 455 |
+
"校区": campus_display,
|
| 456 |
"上课班级": str(row["行政班级"]) if "行政班级" in row else ""
|
| 457 |
})
|
| 458 |
|