ikun520 commited on
Commit
020163d
·
verified ·
1 Parent(s): 8db211b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -10
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 = "仙葫" if "仙葫" in str(row["地点"]) else "五合"
 
 
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
- "校区": campus,
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 = "仙葫" if "仙葫" in str(row["地点"]) else "五合"
 
 
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
- "校区": campus,
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
- "课程": str(row["课程名称"]).split("]")[1] if "]" in str(row["课程名称"]) else str(row["课程名称"]),
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 = "仙葫" if "仙葫" in str(row["地点"]) else "五合"
 
 
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
- "校区": campus,
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