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
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_face_by_user_id(self, user_id, filters, page=1): """ 根据用户id查询其下人脸信息 :param :return: """ faces, total = FaceDao.get_face_by_user_id(user_id, page, filters) if not faces: return {'data': [], 'total': 0} user = UserDao.get_user_by_user_id(user_id) res = {} data = [] for face in faces: data.append({ 'id': face.id, 'name': face.face_name, 'belong': user.username, 'url': face.face_url, 'status': face.status, 'stu_class': face.face_class, 'open_check': face.open_check }) res.update({ 'data': data, 'total': total }) return res
def get_record(self, user_id, page, filters): records, total = RecordDao.get_record_by_user_id( user_id, page, filters) if not records: return {'data': [], 'total': 0} # 根据user_id 获取教师姓名 不需要判断。 被禁用的teacher无法进入系统 user = UserDao.get_user_by_user_id(user_id) res = {} data = [] for record in records: unchecked = json.loads(record.unchecked) data.append({ 'id': record.id, 'belong': user.username, 'pro_class': record.pro_class, 'unchecked': unchecked.get('data'), 'create_time': record.create_time.strftime('%Y-%m-%d %H:%M:%S'), 'end_time': record.end_time.strftime('%Y-%m-%d %H:%M:%S') }) res.update({'data': data, 'total': total}) return res
def update_experiment(self, user_id, eid, status): """ 修改实验状态 :param status: :param user_id: :param eid: :return: """ user = UserDao.get_user_by_user_id(user_id) if user.role != User.Role.MANAGER: raise Exception("只有管理员可以审批") experiment = ExperimentDao.get_experiment_by_id(eid) if not experiment: raise Exception("不存在该计划") try: experiment.status = status content = '' if status == Experiment.Status.SUCCESS: content = '您的实验:%s, 已经审批通过。' % experiment.name elif status == Experiment.Status.FAILED: content = '您的实验:%s, 审批未通过, 请联系系统管理员重新申请。' % experiment.name email = email_service.send_msg(user_id, u'系统管理员', experiment.teacher_id, content) db.session.add(email) db.session.commit() except Exception as e: db.session.rollback() raise Exception(str(e))
def make_employee_to_deliver(self, user_id, employee_name, order_number): manager_user = UserDao.get_user_by_user_id(user_id) if manager_user.identity_type != User.IdentityType.MANAGER: raise Exception('你没有权限操作') employee = UserDao.get_deliver_by_real_name(employee_name) if not employee: raise Exception('不存在该姓名的快递员') # 进行指派 logistics = LogisticsDao.query_logistic_by_logistic_order_number( order_number) if not logistics: raise Exception('不存在该物流信息') if logistics.status != Logistics.Status.ARRAY_SITE: raise Exception('该订单不满足配送条件') try: # 修改状态 logistics.status = Logistics.Status.DELIVERING contents = json.loads(logistics.contents).get('data') contents.append({ 'content': datetime.now().strftime('%Y-%m-%d %H:%M:%S') + '包裹正在配送中, 配送员:%s, 联系电话:%s' % (employee.real_name, employee.telephone) }) logistics.contents = json.dumps({'data': contents}) logistics.user_id = employee.id db.session.commit() except Exception as e: db.session.rollback() raise Exception('指派过程出现异常, 错误信息:%s' % str(e))
def get_user_info(self, user_id): user = UserDao.get_user_by_user_id(user_id) if not user: raise Exception("不存在该用户或被禁用") user_info = { 'id': user.id, 'username': user.username, 'role': User.Role.__label__.get(user.role, '未知') } return user_info
def get_user_info(self, user_id): user = UserDao.get_user_by_user_id(user_id) if not user: raise Exception("不存在该用户或被禁用") user_info = { 'id': user.id, 'real_name': user.real_name, 'identity_type': user.identity_type } return user_info
def get_user_info(self, user_id): user = UserDao.get_user_by_user_id(user_id) if not user: raise Exception("不存在该用户或被禁用") user_info = { 'id': user.id, 'username': user.username, 'nickname': user.nickname, } return user_info
def join_experiment(self, user_id, eid): """ 参加某个实验 :return: """ user = UserDao.get_user_by_user_id(user_id) if user.role != User.Role.STUDENT: raise Exception("只有学生可选") try: experiments = json.loads(user.join_experiments) experiments.append(eid) user.join_experiments = json.dumps(experiments) experiment = ExperimentDao.get_experiment_by_id(eid) user = UserDao.get_user_by_user_id(experiment.teacher_id) email = email_service.send_msg(experiment.teacher_id, user.username, user_id, u'欢迎参加%s实验' % experiment.name) db.session.add(email) db.session.commit() except Exception as e: db.session.rollback() raise Exception(str(e))
def send_record(type): """ 发送日/周/月报 - 各老师或班级的签到记录 :param type: :return: """ global create_time mark = '' if type == RecordType.DAY: create_time = (datetime.now() + timedelta(days=-1)).strftime('%Y-%m-%d %H:%M:%S'), mark = u'日报' elif type == RecordType.WEEK: create_time = (datetime.now() + timedelta(days=-7)).strftime('%Y-%m-%d %H:%M:%S'), mark = u'周报' elif type == RecordType.MONTH: create_time = (datetime.now() + timedelta(days=-30)).strftime('%Y-%m-%d %H:%M:%S'), mark = u'月报' # 获取最近一周的签到记录 query_filter = { 'end_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'create_time': create_time } records = RecordDao.get_all_record_by_filters(query_filter) user_records = defaultdict(list) for record in records: user_records[record.user_id].append(record) for k, v in user_records.items(): email_info = EmailDao.get_email_by_user_id(k) if not email_info: continue email = email_info.email user = UserDao.get_user_by_user_id(k) if not user: continue title = '%s: %s ~ %s 之间的签到记录' % (mark, query_filter.get('end_time'), query_filter.get('end_time')) head_text = '%s 你好, face_auth自动推送签到记录<br>' % user.username.encode('utf-8') msg = [] msg.append(head_text) for record in v: unchecked = json.loads(record.unchecked).get('data') unchecked_people = ''.join(unchecked) create_time = record.create_time.strftime('%Y-%m-%d %H:%M:%S') end_time = record.end_time.strftime('%Y-%m-%d %H:%M:%S') if not unchecked_people: unchecked_people = u'无' msg.append('班级: %s, 未签到的人: %s, 签到时间范围: %s ~ %s <br>' % (record.pro_class, unchecked_people, create_time, end_time)) mail_service.send_msg_to_all(title, ''.join(msg), email) print '%s发送完成, 发送时间:%s' % (mark, datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
def user_increase(self, user_id, username): """ 用户变为快递员 """ try: manager_user = UserDao.get_user_by_user_id(user_id) if manager_user.identity_type != User.IdentityType.MANAGER: raise Exception('你没有权限操作') user = UserDao.get_user_by_username(username) if not user: raise Exception('用户不存在') user.identity_type = User.IdentityType.COURIER db.session.commit() except Exception as e: db.session.rollback() raise e
def delete_user(self, user_id, username): """ 删除用户 """ try: manager_user = UserDao.get_user_by_user_id(user_id) if manager_user.identity_type != User.IdentityType.MANAGER: raise Exception('你没有权限操作') user = UserDao.get_user_by_username(username) if not user: raise Exception('用户不存在') user.status = User.Status.ABANDON db.session.commit() except Exception as e: db.session.rollback() raise e
def get_all_logistics(self, user_id): manager_user = UserDao.get_user_by_user_id(user_id) if manager_user.identity_type != User.IdentityType.MANAGER: raise Exception('你没有权限操作') logistics_infos = LogisticsDao.query_all_logistics() res = [] for logistics_info in logistics_infos: res.append({ 'order_number': logistics_info.order_number, 'send_name': logistics_info.send_name, 'contents': json.loads(logistics_info.contents).get('data') if json.loads(logistics_info.contents).get('data') else [], 'status': Logistics.Status.__label__.get(logistics_info.status) }) return res
def get_all_user_infos(self, user_id, identity_type): """ 管理员查询所有用户信息 :param user_id: :return: """ manager_user = UserDao.get_user_by_user_id(user_id) if manager_user.identity_type != User.IdentityType.MANAGER: raise Exception('你没有权限查看') user_infos = UserDao.get_users_by_identity_type(identity_type) res = [] if int(identity_type) == User.IdentityType.CUSTOMER: identity_type = '普通客户' elif int(identity_type) == User.IdentityType.COURIER: identity_type = '快递员' else: identity_type = '' for user_info in user_infos: res.append({ 'username': user_info.username, 'real_name': user_info.real_name, 'identity_type': identity_type }) return res