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'
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.'
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' }))
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}))
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' }))
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' }))
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'}))
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": [] }))
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' }))
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'}))