Beispiel #1
0
 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
Beispiel #2
0
    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
Beispiel #3
0
 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))
Beispiel #4
0
 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
Beispiel #6
0
 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))
Beispiel #7
0
 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))
Beispiel #8
0
 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
Beispiel #10
0
 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
Beispiel #11
0
 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))
Beispiel #12
0
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
Beispiel #15
0
 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