def send_msg_v1(self, user_id, eid, content): """ 发送消息 :param user_id: :param eid: :param content: :return: """ try: user = UserDao.get_user_by_user_id(user_id) add_emails = [] if user.role == User.Role.MANAGER: # 发消息人是管理员, 给所有人发送 users = UserDao.get_all_users() for user_ in users: email = self.send_msg(user_id, '系统管理员', user_.id, content) add_emails.append(email) elif user.role == User.Role.STUDENT: # 发消息人是老师, 给当前选实验的人发送 students = UserDao.get_all_student() for student in students: join_list = json.loads(student.join_experiments) if eid in join_list: # 当前用户选修了该实验 email = self.send_msg(user_id, user.username, student.id, content) add_emails.append(email) db.session.bulk_save_objects(add_emails) db.session.commit() except Exception as e: db.session.rollback() raise Exception(str(e))
def get_all_experiments(self, user_id): """ 根据user_id的身份获取所有实验 :param user_id: :return: """ user = UserDao.get_user_by_user_id(user_id) experiments = [] if user.role == User.Role.MANAGER: # 管理员可见所有 experiments = ExperimentDao.get_all_experiments() elif user.role == User.Role.TEACHER: # 老师仅可见自己的 experiments = ExperimentDao.get_experiments_by_teacher_id(user_id) elif user.role == User.Role.STUDENT: # 学生仅可见审批通过的 experiments = ExperimentDao.get_experiments_by_status( Experiment.Status.SUCCESS) lab_ids = [_.lab_no for _ in experiments] laboratories = LaboratoryDao.get_lab_by_ids(lab_ids) lab_no2name = {_.id: _.name for _ in laboratories} res = [] for experiment in experiments: # 查询所有选择该实验的学生 students = UserDao.get_all_student() all_select_names = [] for student in students: join_list = json.loads(student.join_experiments) if experiment.id in join_list: all_select_names.append(student.username) teacher_name = UserDao.get_user_by_user_id( experiment.teacher_id).username res.append({ 'id': experiment.id, 'name': experiment.name, 'start_time': experiment.start_time.strftime('%Y-%m-%d %H:%M:%S'), 'end_time': experiment.end_time.strftime('%Y-%m-%d %H:%M:%S'), 'remark': experiment.remark, 'lab_name': lab_no2name.get(experiment.lab_no, '未知'), 'teacher_name': teacher_name, 'status': Experiment.Status.__label__.get(experiment.status, '未知'), 'all_selects': all_select_names }) return res
def get_all_experiments_pass(self, user_id): """ 根据user_id的身份获取所有实验 :param user_id: :return: """ user = UserDao.get_user_by_user_id(user_id) if user.role != User.Role.TEACHER: raise Exception("仅有老师有权限") experiments = ExperimentDao.get_experiments_by_teacher_id_pass(user_id) lab_ids = [_.lab_no for _ in experiments] laboratories = LaboratoryDao.get_lab_by_ids(lab_ids) lab_no2name = {_.id: _.name for _ in laboratories} res = [] for experiment in experiments: # 查询所有选择该实验的学生 students = UserDao.get_all_student() all_select_names = [] for student in students: join_list = json.loads(student.join_experiments) if experiment.id in join_list: all_select_names.append(student.username) teacher_name = UserDao.get_user_by_user_id( experiment.teacher_id).username res.append({ 'id': experiment.id, 'name': experiment.name, 'start_time': experiment.start_time.strftime('%Y-%m-%d %H:%M:%S'), 'end_time': experiment.end_time.strftime('%Y-%m-%d %H:%M:%S'), 'remark': experiment.remark, 'lab_name': lab_no2name.get(experiment.lab_no, '未知'), 'teacher_name': teacher_name, 'status': Experiment.Status.__label__.get(experiment.status, '未知'), 'all_selects': all_select_names }) return res