예제 #1
0
    def _check_student_relative(self, student_relative_info):
        name = student_relative_info.get('name', '')
        birthday = student_relative_info.get('birthday', '')
        class_id = student_relative_info.get('class_id', '')
        relative_list = student_relative_info.get("relative_list", [])

        if birthday and not convert.is_date(birthday):
            return 1, '%s: student info error.'%name
        if not name or not class_id:
            return 1, '%s: student info error.'%name

        relative_op = RelativeLogic()
        for relative_info in relative_list:
            relative_birthday = relative_info.get("birthday", "")
            if relative_birthday and not convert.is_date(convert.bs2utf8(relative_birthday)):
                return 2, '%s: relative info error.' % relative_info.get("name", "")
            phone = convert.bs2utf8(relative_info.get("phone", ""))
            if phone and not convert.is_mobile(phone):
                return 2, '%s: relative info error.' % relative_info.get("name", "")
            name = convert.bs2utf8(relative_info.get("name", ""))
            if not name:
                return 2, '%s: relative info error.' % relative_info.get("name", "")
            if phone:
                db_relative_list = relative_op.info_by_phone(phone=phone)
                if db_relative_list and convert.bs2utf8(db_relative_list[0].get("name", "")) != name:
                    LOG.info("relative info, phone:%s and name:%s error"%(phone, name))
                    return 2, '%s: relative info error.' % relative_info.get("name", "")
        return 0, 'relative ok'
예제 #2
0
    def _save_student_relative(self, student_relative_info):
        name = student_relative_info.get('name', '')
        sex = student_relative_info.get('sex')
        birthday = student_relative_info.get('birthday', '')
        class_id = student_relative_info.get('class_id', '')
        relation_number = student_relative_info.get("relation_number")
        relative_list = student_relative_info.get("relative_list", [])

        stu_op = StudentLogic()
        relative_op = RelativeLogic()
        relation_op = RelationLogic()
        student_info = stu_op.input(name=name, sex=sex, birthday=birthday, class_id=class_id,
                                    relation_number=relation_number)
        if not student_info:
            #self.finish(json.dumps({'state': 1, 'message': 'student info error'}))
            return 1, '%s:student info error.'%name
        for relative in relative_list:
            relative_info = relative_op.input(
                name=convert.bs2utf8(relative.get("name", "")),
                sex=relative.get("sex", 0),
                birthday=convert.bs2utf8(relative.get("birthday", "")),
                phone=convert.bs2utf8(relative.get("phone", "")))
            if not relative_info:
                #self.finish(json.dumps({'state': 2, 'message': '%s: relative info error' % relative.get("name", "")}))
                return 2, '%s: relative info error.' % relative.get("name", "")
            relation_op.input(relative.get("relation", ""), student_id=student_info.get("id"),
                              relative_id=relative_info.get("id"))
        return 0, 'save student success.'
예제 #3
0
    def post(self, delete_obj):
        try:
            id = self.get_argument('id', '')
            kwargs = {}
            _op = Logic()

            if delete_obj == "school":
                _op = SchoolLogic()

            if delete_obj == "grade":
                _op = GradeLogic()

            if delete_obj == "class":
                _op = ClassLogic()

            if delete_obj == "teacher":
                _op = TeacherLogic()

            if delete_obj == "student":
                _op = StudentLogic()

            if delete_obj == "relative":
                _op = RelativeLogic()

            if delete_obj == "relation":
                _op = RelationLogic()

            if delete_obj == "face":
                _op = FaceLogic()

            if delete_obj == "user":
                # only admin
                current_user_level = self.get_secure_cookie('user_level')
                kwargs.update({"current_user_level": current_user_level})
                _op = UserLogic()

            if not id:
                self.finish(
                    json.dumps({
                        'state': 1,
                        'message': 'params %s is None' % delete_obj
                    }))
            id = id.split(",")
            _message = _op.delete(id, **kwargs)
            if _message:
                self.finish(json.dumps({'state': 9, 'message': _message}))
                return
            self.finish(
                json.dumps({
                    'state': 0,
                    'message': 'delete info success.'
                }))
        except Exception as ex:
            LOG.error("Delete %s error:%s" % (delete_obj, ex))
            self.finish(
                json.dumps({
                    'state': 10,
                    'message': 'Delete action error'
                }))
예제 #4
0
 def bath_update_relative(self):
     message = ""
     student_id = convert.bs2utf8(self.get_argument('student_id', ''))
     relative_list = convert.bs2utf8(self.get_argument('relative_list', '[]'))
     relative_list = json.loads(relative_list)
     relative_op = RelativeLogic()
     relation_op = RelationLogic()
     for relative_info in relative_list:
         try:
             relative_id = relative_info.pop("id", "")
             relation = relative_info.pop("relation", "")
             if relative_id:
                 #update relative, relation
                 _ = relative_op.update(id=relative_id, **relative_info)
                 if not _:
                     message += "update relative error:%s" % relative_info.get("name", "")
                     continue
                 relation_info = relation_op.update(relative_id=relative_id, student_id=student_id, relation=relation)
                 if not relation_info:
                     message += "update relation error:%s, %s"%(relative_info.get("name", ""), relation)
                     continue
             else:
                 #add relative, relation
                 _ = relative_op.input(name=convert.bs2utf8(relative_info.get("name", "")),
                                       sex=relative_info.get("sex", 0),
                                       birthday=convert.bs2utf8(relative_info.get("birthday", "")),
                                       phone=convert.bs2utf8(relative_info.get("phone", "")))
                 if not _:
                     message += "add relative error:%s" % relative_info.get("name", "")
                     continue
                 relation_info = relation_op.input(relation, student_id=student_id, relative_id=_.get("id"))
                 if not relation_info:
                     message += "add relation error:%s, %s"%(relative_info.get("name", ""), relation)
                     continue
         except Exception as ex:
             LOG.error("update error: %s, %s"%(relative_info.get("name", ""), ex))
             message += "update error:%s" %relative_info.get("name", "")
     if not message:
         self.finish(json.dumps({'state': 0, 'message': 'update relative success'}))
     else:
         self.finish(json.dumps({'state': 1, 'message': message}))
예제 #5
0
    def bind_user(self):
        phone = convert.bs2utf8(self.get_argument('phone', ''))
        verify_code = convert.bs2utf8(self.get_argument('verify_code', ''))
        edu_session = convert.bs2utf8(self.get_argument('edu_session', ''))
        relative_op = RelativeLogic()
        teacher_op = TeacherLogic()
        verify_op = VerifyManageLogic()
        wx_op = WXUserLogic()

        #verify code
        _ = verify_op.verify_code_phone(phone=phone, code=verify_code)
        if not _:
            LOG.error("bind user verify code error: phone:%s" % phone)
            self.finish(
                json.dumps({
                    'state': 1,
                    'message': 'verify code error'
                }))
            return
        bind_ids = ""
        old_wx_info = wx_op.info(edu_session)
        if old_wx_info.get("wx_type") == 1:
            #verify relative
            relative_list = relative_op.info_by_phone(phone=phone)
            if not relative_list:
                LOG.error("bind user phone not singn relative: phone:%s" %
                          phone)
                self.finish(
                    json.dumps({
                        'state': 2,
                        'message': 'phone not singn relative'
                    }))
                return
            bind_ids = ",".join(
                [relative_info.id for relative_info in relative_list])

        if old_wx_info.get("wx_type") == 2:
            teacher_list = teacher_op.info_by_phone(phone=phone)
            if not teacher_list:
                LOG.error("bind user phone not singn teacher: phone:%s" %
                          phone)
                self.finish(
                    json.dumps({
                        'state': 2,
                        'message': 'phone not singn teacher'
                    }))
                return
            bind_ids = ",".join(
                [teacher_info.id for teacher_info in teacher_list])

        #verify phone exit
        old_wx_info = wx_op.info_by_phone(phone, old_wx_info.get("wx_type"))
        if old_wx_info:
            LOG.error("bind user phone exit: phone:%s" % phone)
            self.finish(json.dumps({'state': 3, 'message': 'phone exit'}))
            return

        #bind phone
        wx_op.update(edu_session, phone=phone)
        self.finish(
            json.dumps({
                'state': 0,
                'edu_session': edu_session,
                'bind_ids': bind_ids,
                'message': 'ok'
            }))
예제 #6
0
    def update_user_phone(self):
        phone = convert.bs2utf8(self.get_argument('phone', ''))
        verify_code = convert.bs2utf8(self.get_argument('verify_code', ''))
        edu_session = convert.bs2utf8(self.get_argument('edu_session', ''))
        relative_op = RelativeLogic()
        teacher_op = TeacherLogic()
        verify_op = VerifyManageLogic()
        wx_op = WXUserLogic()

        # verify code
        _ = verify_op.verify_code_phone(phone=phone, code=verify_code)
        if not _:
            self.finish(
                json.dumps({
                    'state': 1,
                    'message': 'verify code error'
                }))
            return
        old_wx_info = wx_op.info(edu_session)
        if not old_wx_info:
            LOG.error("update user wx id not singn: phone:%s" % phone)
            self.finish(json.dumps({'state': 3, 'message': 'wx id not singn'}))
            return

        #验证待绑定手机号,是否被占用(微信号认证过,或者家属占用,或教师占用)
        verify_wx_info = wx_op.info_by_phone(phone, old_wx_info.get("wx_type"))
        if verify_wx_info:
            LOG.error("update user phone, new phone exit wx: phone:%s" % phone)
            self.finish(
                json.dumps({
                    'state': 3,
                    'message': 'new phone exit wx'
                }))
            return

        # 新号码已经被其他家属占用
        if old_wx_info.get("wx_type") == 1:
            verify_relative_list = relative_op.info_by_phone(phone=phone)
            if verify_relative_list:
                LOG.error(
                    "update user phone, new phone exit relative: phone:%s" %
                    phone)
                self.finish(
                    json.dumps({
                        'state': 3,
                        'message': 'new phone exit relative'
                    }))
                return

            # 待更新手机号码的亲属,通过旧手机号(可能存在多个)
            old_relative_list = relative_op.info_by_phone(
                phone=old_wx_info.get("phone"))
            for relative_info in old_relative_list:
                relative_op.update(relative_info.id, phone=phone)
            # 更新微信号的手机号码
            wx_op.update(edu_session, phone=phone)
            self.finish(
                json.dumps({
                    'state': 0,
                    'edu_session': edu_session,
                    'message': 'ok'
                }))

        #新号码已经被其他教师占用
        if old_wx_info.get("wx_type") == 2:
            verify_teacher_list = teacher_op.info_by_phone(phone=phone)
            if verify_teacher_list:
                LOG.error(
                    "update user phone, new phone exit teacher: phone:%s" %
                    phone)
                self.finish(
                    json.dumps({
                        'state': 3,
                        'message': 'new phone exit teacher'
                    }))
                return
            # 待更新手机号码的教师,通过旧手机号(可能存在多个)
            old_teacher_list = teacher_op.info_by_phone(
                phone=old_wx_info.get("phone"))
            for teacher_info in old_teacher_list:
                teacher_op.update(teacher_info.id, phone=phone)
            # 更新微信号的手机号码
            wx_op.update(edu_session, phone=phone)
            self.finish(
                json.dumps({
                    'state': 0,
                    'edu_session': edu_session,
                    'message': 'ok'
                }))
예제 #7
0
    def face_auth(self):
        phone = convert.bs2utf8(self.get_argument('phone', ''))
        #relevance_id = convert.bs2utf8(self.get_argument('relevance_id', ''))
        relevance_type = int(self.get_argument('relevance_type', 1))
        school_id = convert.bs2utf8(self.get_argument('school_id', ''))
        alias = convert.bs2utf8(self.get_argument('alias', ''))
        if not phone:
            self.finish(json.dumps({'state': 1, 'message': 'phone is None'}))
            return

        if not school_id:
            if relevance_type == 2:
                #teacher
                teacher_op = TeacherLogic()
                teacher_info = teacher_op.info_by_phone(phone)
                school_id = teacher_info.get("school_id", "")
            if relevance_type in (1, 3):
                #relative
                relative_op = RelativeLogic()
                school_id = relative_op.school_id_by_phone(phone)

        if not school_id:
            LOG.error("school_id is none")
            self.finish(json.dumps({'state': 3, 'message': 'school is none'}))
            return

        face_op = FaceLogic()
        _verify = face_op.verify_authd(phone, relevance_type)
        if _verify:
            LOG.error("The face token data has been stored.")
            self.finish(
                json.dumps({
                    'state': 2,
                    'message': 'The face token has been stored.'
                }))
            return

        # 将图片存储到本地
        #img = self.get_argument('image', '')
        imgs = self.request.files.get('image', '')
        if not imgs:
            LOG.error("image is none")
            self.finish(json.dumps({'state': 3, 'message': 'image is none'}))
            return
        img = imgs[0]
        filename = img['filename']
        filename = phone + "_" + str(int(
            time.time())) + "." + filename.rpartition(".")[-1]
        file_path = self.static_path + self.face_path + filename
        LOG.info("file path:%s" % file_path)
        with open(file_path, 'wb') as up:
            up.write(img['body'])
            #up.write(base64.b64decode(img.rpartition(",")[-1]))

        self._img_resize(file_path)

        # 通过第三方api获取人脸特征
        #identy_code, face_token = face_util.face_identy(file_path)
        code, face_token = face_recognition_yyl.Face_Detect(file_path)
        if code != 200:
            LOG.error("detect face error:%s" % code)
            self.finish(
                json.dumps({
                    'state': 4,
                    'message': face_token,
                    'code': code
                }))
            return
        # 将特征写入数据库
        code, faceset_token = face_recognition_yyl.Face_Add(
            school_id, face_token)
        if code != 200:
            LOG.error("add face error:%s" % code)
            self.finish(
                json.dumps({
                    'state': 4,
                    'message': face_token,
                    'code': code
                }))
            return

        _ = face_op.input(school_id,
                          phone,
                          face_token,
                          faceset_token,
                          filename,
                          relevance_type=relevance_type,
                          alias=alias)
        if _:
            self.finish(json.dumps({'state': 0, 'message': 'face auth ok'}))
        else:
            self.finish(json.dumps({'state': 5, 'message': 'face auth faild'}))
예제 #8
0
    def get(self, infos_obj):
        limit = int(self.get_argument('limit', 100))
        offset = int(self.get_argument('offset', 0))
        try:
            _op = Logic()
            _value = dict()
            if infos_obj == "school":
                _value = self._get_school_argument()
                _op = SchoolLogic()

            if infos_obj == "grade":
                _value = self._get_grade_argument()
                _op = GradeLogic()

            if infos_obj == "class":
                _value = self._get_class_argument()
                _op = ClassLogic()

            if infos_obj == "teacher":
                _value = self._get_teacher_argument()
                _op = TeacherLogic()

            if infos_obj == "teacher_history":
                _value = self._get_teacher_history_argument()
                _op = Teacher_HistoryLogic()

            if infos_obj == "student":
                _value = self._get_student_argument()
                _op = StudentLogic()

            if infos_obj == "student_history":
                _value = self._get_student_history_argument()
                _op = Student_HistoryLogic()

            if infos_obj == "relative":
                _value = self._get_relative_argument()
                _op = RelativeLogic()

            if infos_obj == "relation":
                _value = self._get_relation_argument()
                _op = RelationLogic()

            if infos_obj == "face":
                _value = self._get_face_argument()
                _op = FaceLogic()

            if infos_obj == "relative_sign":
                _value = self._get_relative_sign_argument()
                _op = SignLogic()

            if infos_obj == "teacher_sign":
                _value = self._get_teacher_sign_argument()
                _op = SignLogic()

            if infos_obj == "user":
                _value = self._get_user_argument()
                _op = UserLogic()

            _ = _op.infos(limit=limit, offset=offset, **_value)
            if _:
                self.finish(json.dumps(_))
            else:
                self.finish(
                    json.dumps({
                        'state': 1,
                        'message': 'action %s error' % infos_obj
                    }))
        except Exception as ex:
            LOG.error("query %s error:%s" % (infos_obj, ex))
            self.finish(
                json.dumps({
                    "state": 1,
                    "message": "error",
                    "data": []
                }))
예제 #9
0
    def post(self, update_obj):
        try:
            _id = ""
            _value = {}
            _op = Logic()
            if update_obj == "school":
                _id, _value = self._get_school_argument()
                _op = SchoolLogic()

            if update_obj == "grade":
                _id, _value = self._get_grade_argument()
                _op = GradeLogic()

            if update_obj == "class":
                _id, _value = self._get_class_argument()
                _op = ClassLogic()

            if update_obj == "teacher":
                _id, _value = self._get_teacher_argument()
                _op = TeacherLogic()

            if update_obj == "student":
                _id, _value = self._get_student_argument()
                _op = StudentLogic()

            if update_obj == "relative":
                _id, _value = self._get_relative_argument()
                _op = RelativeLogic()

            if update_obj == "relation":
                _id, _value = self._get_relation_argument()
                _op = RelationLogic()

            if update_obj == "user":
                _id, _value = self._get_user_argument()
                _op = UserLogic()

            if not _value or not _id:
                LOG.error("update info, %s params is None: %s, %r" %
                          (update_obj, _id, _value))
                self.finish(
                    json.dumps({
                        'state': 1,
                        'message': 'params %s is None' % update_obj
                    }))
                return
            _ = _op.update(_id, **_value)
            if _:
                self.finish(
                    json.dumps({
                        'state': 0,
                        'message': 'update info success.'
                    }))
            else:
                self.finish(
                    json.dumps({
                        'state': 4,
                        'message': 'update info faild.'
                    }))
        except NotFound as ex:
            LOG.error("Update %s param not data:%s" % (update_obj, ex))
            self.finish(json.dumps({'state': 2, 'message': 'param not data'}))
        except ParamExist as ex:
            LOG.error("Update %s param exit:%s" % (update_obj, ex))
            self.finish(json.dumps({'state': 5, 'message': 'param exit'}))
        except Exception as ex:
            LOG.error("Update %s error:%s" % (update_obj, ex))
            self.finish(
                json.dumps({
                    'state': 3,
                    'message': 'update action error'
                }))
예제 #10
0
    def post(self, registry_obj):
        try:
            _op = Logic()
            _infos = dict()
            if registry_obj == "school":
                _infos = self._get_school_argument()
                _op = SchoolLogic()

            if registry_obj == "grade":
                _infos = self._get_grade_argument()
                _op = GradeLogic()

            if registry_obj == "class":
                _infos = self._get_class_argument()
                _op = ClassLogic()

            if registry_obj == "teacher":
                _infos = self._get_teacher_argument()
                _op = TeacherLogic()
            if registry_obj == "teacher_history":
                _infos = self._get_teacher_history_argument()
                _op = Teacher_HistoryLogic()

            if registry_obj == "student":
                _infos = self._get_student_argument()
                _op = StudentLogic()
            if registry_obj == "student_history":
                _infos = self._get_student_history_argument()
                _op = Student_HistoryLogic()

            if registry_obj == "relative":
                _infos = self._get_relative_argument()
                _op = RelativeLogic()

            if registry_obj == "relation":
                _infos = self._get_relation_argument()
                _op = RelationLogic()

            if registry_obj == "user":
                user_level = int(self.get_secure_cookie('user_level'))
                level = int(self.get_argument('level', 1))
                if user_level >= level:
                    self.finish(
                        json.dumps({
                            'state': 4,
                            'message': 'Permissions cannot operate'
                        }))
                    return
                _infos = self._get_user_argument()
                _op = UserLogic()

            _ = _op.input(**_infos)
            if _:
                self.finish(
                    json.dumps({
                        'state': 0,
                        'message': 'input info success.'
                    }))
            else:
                self.finish(
                    json.dumps({
                        'state': 1,
                        'message': 'action %s error' % registry_obj
                    }))
        except NotFound as ex:
            LOG.error("Input %s param not data:%s" % (registry_obj, ex))
            self.finish(json.dumps({'state': 2, 'message': 'param not data'}))
        except ParamExist as ex:
            LOG.error("Input %s param exit:%s" % (registry_obj, ex))
            self.finish(json.dumps({'state': 5, 'message': 'param exit'}))
        except ParamNone as ex:
            LOG.error("Input %s param exit:%s" % (registry_obj, ex))
            self.finish(json.dumps({'state': 6, 'message': 'param exit'}))
        except Exception as ex:
            LOG.error("Input %s error:%s" % (registry_obj, ex))
            self.finish(json.dumps({'state': 3, 'message': 'input error'}))