chore: 批量新增各类工具脚本与配置文件
1. 新增音频录制、下载、上传相关脚本 2. 新增数据库操作、API调用工具 3. 新增Excel数据处理脚本 4. 新增弱密码检测脚本
This commit is contained in:
@@ -0,0 +1,288 @@
|
||||
from requests import get, post
|
||||
from faker import Faker
|
||||
import random
|
||||
import time
|
||||
import uuid
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
fake = Faker('zh_CN')
|
||||
|
||||
ip = "http://band.hxzhxy.cn"
|
||||
param = {
|
||||
"username": "xtl",
|
||||
"password": "xia123456",
|
||||
"client_id": "client",
|
||||
"grant_type": "password",
|
||||
"client_secret": "123456",
|
||||
}
|
||||
|
||||
def get_token():
|
||||
data = get(url=f"{ip}/oauth/token", params=param).json()
|
||||
return data["access_token"]
|
||||
|
||||
token = get_token()
|
||||
header = {
|
||||
"content-type": "application/json",
|
||||
"authorization": f"Bearer {token}",
|
||||
}
|
||||
teamId = 106
|
||||
|
||||
def generate_leave_data(stu_id, stu_name, stu_no, grade_name, class_name, grade_id, class_id, phone=None):
|
||||
leave_types = ["事假", "病假"]
|
||||
|
||||
leave_type = random.choice(leave_types)
|
||||
is_cycle = random.choice([1, 2, 3])
|
||||
|
||||
begin_date = datetime.now() - timedelta(days=random.randint(0,15))
|
||||
end_date = begin_date + timedelta(days=random.randint(0, 120))
|
||||
|
||||
begin_section = random.randint(1, 6)
|
||||
end_section = random.randint(begin_section, 12)
|
||||
|
||||
leave_reasons = [
|
||||
"身体不适,需要休息",
|
||||
"家中有事需要处理",
|
||||
"去医院检查身体",
|
||||
"发烧感冒,需要就医",
|
||||
"参加重要家庭活动",
|
||||
"个人事务需要处理",
|
||||
"肠胃不适,需要就医",
|
||||
"头痛发热,请假休息",
|
||||
"参加校外培训活动",
|
||||
"家庭紧急事务",
|
||||
]
|
||||
|
||||
disease_date = begin_date.strftime("%Y-%m-%d")
|
||||
|
||||
if is_cycle == 3:
|
||||
week_days = ["周一", "周二", "周三", "周四", "周五"]
|
||||
selected_day = random.choice(week_days)
|
||||
sections = random.sample(range(1, 13), random.randint(2, 4))
|
||||
sections.sort()
|
||||
week_info = json.dumps({selected_day: ",".join(str(s) for s in sections)})
|
||||
end_date = begin_date
|
||||
else:
|
||||
week_info = None
|
||||
|
||||
data = {
|
||||
"stuId": str(stu_id),
|
||||
"leaveType": leave_type,
|
||||
"isCycle": is_cycle,
|
||||
"leaveReason": random.choice(leave_reasons),
|
||||
"beginDate": begin_date.strftime("%Y-%m-%d"),
|
||||
"endDate": end_date.strftime("%Y-%m-%d"),
|
||||
"beginSection": str(begin_section),
|
||||
"endSection": str(end_section),
|
||||
"diseaseDate": disease_date,
|
||||
"symptom": "",
|
||||
"fever": "",
|
||||
"hospital": "",
|
||||
"treatmentDate": "",
|
||||
"imgUrl": "[]",
|
||||
"weekInfo": week_info,
|
||||
}
|
||||
|
||||
return data
|
||||
|
||||
def get_grade_list():
|
||||
url = f"{ip}/uc/grade/listSelect/{teamId}?access_token={token}"
|
||||
response = get(url, headers=header)
|
||||
result = response.json()
|
||||
if result.get('code') == 0:
|
||||
return result.get('data', [])
|
||||
return []
|
||||
|
||||
def get_class_list(grade_id):
|
||||
url = f"{ip}/uc/class/listClass"
|
||||
params = {
|
||||
"access_token": token,
|
||||
"teamId": teamId,
|
||||
"gradeId": grade_id
|
||||
}
|
||||
response = get(url, params=params, headers=header)
|
||||
result = response.json()
|
||||
if result.get('code') == 0:
|
||||
return result.get('data', [])
|
||||
return []
|
||||
|
||||
def get_students_from_db(grade_id=None, class_id=None):
|
||||
import pymysql
|
||||
conn = pymysql.connect(
|
||||
host='100.64.0.36',
|
||||
port=3306,
|
||||
user='root',
|
||||
password='@HXYD1109mysql',
|
||||
database='school_server',
|
||||
charset='utf8'
|
||||
)
|
||||
cursor = conn.cursor()
|
||||
|
||||
sql = """
|
||||
SELECT s.id, s.stu_no, s.stu_name, s.phone,
|
||||
g.grade_name, c.class_name
|
||||
FROM student s
|
||||
LEFT JOIN grade g ON s.grade_id = g.id
|
||||
LEFT JOIN tclass c ON s.class_id = c.id
|
||||
WHERE s.team_id = %s
|
||||
"""
|
||||
params = [str(teamId)]
|
||||
|
||||
if grade_id:
|
||||
sql += " AND s.grade_id = %s"
|
||||
params.append(grade_id)
|
||||
if class_id:
|
||||
sql += " AND s.class_id = %s"
|
||||
params.append(class_id)
|
||||
|
||||
sql += " ORDER BY RAND() LIMIT 100"
|
||||
|
||||
cursor.execute(sql, params)
|
||||
students = cursor.fetchall()
|
||||
conn.close()
|
||||
return students
|
||||
|
||||
def add_leave_record(leave_data):
|
||||
url = f"{ip}/studentLeave/add"
|
||||
leave_data["access_token"] = token
|
||||
response = post(url, json=leave_data, headers=header)
|
||||
return response.json()
|
||||
|
||||
def batch_add_leaves(count=10):
|
||||
print(f"正在获取年级列表...")
|
||||
grades = get_grade_list()
|
||||
if not grades:
|
||||
print("未获取到年级数据,请检查 teamId 或 token")
|
||||
return
|
||||
|
||||
grade = random.choice(grades)
|
||||
grade_id = grade.get('id', grade.get('gradeId'))
|
||||
grade_name = grade.get('gradeName', grade.get('name', ''))
|
||||
print(f"随机选择年级: {grade_name}")
|
||||
|
||||
print(f"正在获取 [{grade_name}] 的班级列表...")
|
||||
classes = get_class_list(grade_id)
|
||||
if not classes:
|
||||
print("未获取到班级数据")
|
||||
return
|
||||
|
||||
cls = random.choice(classes)
|
||||
class_id = cls.get('id', cls.get('classId'))
|
||||
class_name = cls.get('className', cls.get('name', ''))
|
||||
print(f"随机选择班级: {class_name}")
|
||||
|
||||
print(f"\n正在从数据库获取 [{grade_name} {class_name}] 的学生数据...")
|
||||
students = get_students_from_db(grade_id, class_id)
|
||||
print(f"获取到 {len(students)} 名学生")
|
||||
|
||||
if not students:
|
||||
print("未获取到学生数据,请检查数据库连接")
|
||||
return
|
||||
|
||||
success_count = 0
|
||||
fail_count = 0
|
||||
|
||||
for i in range(min(count, len(students))):
|
||||
stu = students[i]
|
||||
stu_id, stu_no, stu_name, phone, db_grade_name, db_class_name = stu
|
||||
|
||||
leave_data = generate_leave_data(
|
||||
stu_id, stu_name, stu_no,
|
||||
grade_name, class_name, grade_id, class_id, phone
|
||||
)
|
||||
|
||||
print(f"\n[{i+1}/{min(count, len(students))}] 为学生 {stu_name}({stu_no}) 添加请假记录...")
|
||||
print(f" 请假类型: {leave_data['leaveType']}")
|
||||
print(f" 请假时间: {leave_data['beginDate']} ~ {leave_data['endDate']}")
|
||||
print(f" 请假节次: 第{leave_data['beginSection']}节 ~ 第{leave_data['endSection']}节")
|
||||
print(f" 请假事由: {leave_data['leaveReason']}")
|
||||
|
||||
try:
|
||||
result = add_leave_record(leave_data)
|
||||
if result.get('code') == 0:
|
||||
print(f" ✓ 添加成功")
|
||||
success_count += 1
|
||||
else:
|
||||
print(f" ✗ 添加失败: {result.get('msg', '未知错误')}")
|
||||
fail_count += 1
|
||||
except Exception as e:
|
||||
print(f" ✗ 请求异常: {e}")
|
||||
fail_count += 1
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
print(f"\n{'='*50}")
|
||||
print(f"批量添加完成!")
|
||||
print(f"成功: {success_count} 条")
|
||||
print(f"失败: {fail_count} 条")
|
||||
|
||||
def generate_fake_students(count=20):
|
||||
students = []
|
||||
for i in range(count):
|
||||
stu = {
|
||||
"id": i + 1,
|
||||
"stu_no": f"2024{str(i+1).zfill(4)}",
|
||||
"stu_name": fake.name(),
|
||||
"phone": fake.phone_number(),
|
||||
"grade_name": random.choice(["初一", "初二", "初三", "高一", "高二", "高三"]),
|
||||
"class_name": f"{random.randint(1, 10)}班",
|
||||
}
|
||||
students.append(stu)
|
||||
return students
|
||||
|
||||
def batch_add_leaves_with_fake_students(count=10):
|
||||
print(f"使用 Faker 生成 {count} 条请假记录...")
|
||||
|
||||
students = generate_fake_students(count)
|
||||
success_count = 0
|
||||
fail_count = 0
|
||||
|
||||
for i, stu in enumerate(students):
|
||||
leave_data = generate_leave_data(
|
||||
stu['id'], stu['stu_name'], stu['stu_no'],
|
||||
stu['grade_name'], stu['class_name'],
|
||||
None, None, stu['phone']
|
||||
)
|
||||
|
||||
print(f"\n[{i+1}/{count}] 为学生 {stu['stu_name']}({stu['stu_no']}) 添加请假记录...")
|
||||
print(f" 请假类型: {leave_data['leaveType']}")
|
||||
print(f" 请假时间: {leave_data['beginDate']} ~ {leave_data['endDate']}")
|
||||
print(f" 请假节次: 第{leave_data['beginSection']}节 ~ 第{leave_data['endSection']}节")
|
||||
print(f" 请假事由: {leave_data['leaveReason']}")
|
||||
|
||||
try:
|
||||
result = add_leave_record(leave_data)
|
||||
if result.get('code') == 0:
|
||||
print(f" ✓ 添加成功")
|
||||
success_count += 1
|
||||
else:
|
||||
print(f" ✗ 添加失败: {result.get('msg', '未知错误')}")
|
||||
fail_count += 1
|
||||
except Exception as e:
|
||||
print(f" ✗ 请求异常: {e}")
|
||||
fail_count += 1
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
print(f"\n{'='*50}")
|
||||
print(f"批量添加完成!")
|
||||
print(f"成功: {success_count} 条")
|
||||
print(f"失败: {fail_count} 条")
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("="*50)
|
||||
print("批量添加学生请假信息")
|
||||
print("="*50)
|
||||
print("1. 从数据库获取学生并添加请假记录")
|
||||
print("2. 使用 Faker 生成虚拟学生并添加请假记录")
|
||||
print("="*50)
|
||||
|
||||
choice = input("请选择模式 (1/2): ").strip()
|
||||
count = int(input("请输入要生成的请假记录数量: ").strip() or "10")
|
||||
|
||||
if choice == "1":
|
||||
batch_add_leaves(count)
|
||||
elif choice == "2":
|
||||
batch_add_leaves_with_fake_students(count)
|
||||
else:
|
||||
print("无效选择")
|
||||
Reference in New Issue
Block a user