From 2b57c5db5ae68d833357bf162b8b1d6c8b37c75b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=80=C3=AE=C3=97=C3=9A=C3=95=C3=B1?= Date: Fri, 15 Jul 2022 17:10:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/api_v1/endpoints/interview.py | 19 +--- crud/crud_interview_remark.py | 4 +- db/ckdb.py | 1 + models/interview_zsgc.py | 84 ++++++++++++---- utils/jianli.py | 18 +++- 接口文档/offer阶段查询接口文档.txt | 78 +++++++++++++++ 接口文档/主页初筛查询接口文档.txt | 97 +++++++++++++++++++ 接口文档/修改简历数据接口文档.txt | 18 ++++ ...{主页查询接口文档.txt => 复筛查询接口文档.txt} | 33 ++++++- 接口文档/待入职阶段查询接口文档.txt | 80 +++++++++++++++ 接口文档/查询备注接口文档.txt | 35 +++++++ 接口文档/添加备注接口文档.txt | 19 ++++ 接口文档/面试阶段查询接口文档.txt | 78 +++++++++++++++ 13 files changed, 521 insertions(+), 43 deletions(-) create mode 100644 接口文档/offer阶段查询接口文档.txt create mode 100644 接口文档/主页初筛查询接口文档.txt create mode 100644 接口文档/修改简历数据接口文档.txt rename 接口文档/{主页查询接口文档.txt => 复筛查询接口文档.txt} (79%) create mode 100644 接口文档/待入职阶段查询接口文档.txt create mode 100644 接口文档/查询备注接口文档.txt create mode 100644 接口文档/添加备注接口文档.txt create mode 100644 接口文档/面试阶段查询接口文档.txt diff --git a/api/api_v1/endpoints/interview.py b/api/api_v1/endpoints/interview.py index b82bf75..c6022cf 100644 --- a/api/api_v1/endpoints/interview.py +++ b/api/api_v1/endpoints/interview.py @@ -1,31 +1,18 @@ -import datetime -import mimetypes -from collections import defaultdict -import time import os -from urllib.parse import quote import re -from clickhouse_driver import Client import pandas as pd -import numpy as np from fastapi import APIRouter, Depends, Request, File, UploadFile from motor.motor_asyncio import AsyncIOMotorDatabase -from pandas import DataFrame -from starlette.responses import StreamingResponse from utils.jianli import get_resume import crud, schemas -from common import * -from api import deps from core.configuration import * from db import get_database -from db.ckdb import get_ck_db, CKDrive, ckdb -from db.redisdb import get_redis_pool, RedisDrive +from db.ckdb import get_ck_db, CKDrive + -from models.behavior_analysis import BehaviorAnalysis -from models.user_analysis import UserAnalysis from models.interview_zsgc import InterviewDo -from utils import DfToStream, get_bijiao, get_time, qujian_time, Download_xlsx +from utils import get_time, qujian_time, Download_xlsx router = APIRouter() diff --git a/crud/crud_interview_remark.py b/crud/crud_interview_remark.py index 62e317f..b9ad07b 100644 --- a/crud/crud_interview_remark.py +++ b/crud/crud_interview_remark.py @@ -10,8 +10,8 @@ class ApiInterviewRemark(CRUDBase): # 获取简历所有备注 async def get_interview_remarks(self, db: AsyncIOMotorDatabase, data_in: schemas.FindRemark): where = data_in.where - where.update({'uid': data_in.remark_uid}) - return await self.find_many(db, where) + where.update({'remark_uid': data_in.remark_uid}) + return await self.find_many(db, where,{'_id': 0}) # 插入一条全新的备注 async def insert_remark(self, db: AsyncIOMotorDatabase, data_in: schemas.BaseRemark): diff --git a/db/ckdb.py b/db/ckdb.py index cd35a14..88fb52c 100644 --- a/db/ckdb.py +++ b/db/ckdb.py @@ -31,6 +31,7 @@ class CKDrive: async def execute(self, sql) -> dict: data, columns = await self._execute(sql, with_column_types=True, columnar=True) df = pd.DataFrame({col[0]: d for d, col in zip(data, columns)}) + df = df.fillna('') return df.T.to_dict() async def execute_dict(self, sql, insert_data) -> dict: diff --git a/models/interview_zsgc.py b/models/interview_zsgc.py index 7be793f..0a9b2d8 100644 --- a/models/interview_zsgc.py +++ b/models/interview_zsgc.py @@ -36,6 +36,54 @@ class InterviewDo: self.where = self.query_in.interview_query def insert_interview_sql(self): + # 简历初始文档 + data_mode = { + "interview_name": "吴操", + "interview_type": 1, + "interview_sign": 0, + "hope_money": "", + "feedback": 0, + "interview_round": 0, + "event_time": "", + "name": "", + "phone": "", + "job_name": "", + "hr_name": "吴操", + "work_exp": 0, + "interview_stage": 1, + "owner_name": 2, + "education": 1, + "work_undergo": [], + "project_undergo": [], + "work_list": [], + "school": "", + "at_school": "", + "specialty": "", + "specialty_do": [], + "mmended_state": 0, + "mail": "", + "account": "", + "id_card": "", + "gender": "", + "age": 0, + "gam": "", + "interview_state": 1, + "counts": 1, + "nation": "汉", + "review": [], + "upgrade": [], + "come_time": "", + "now_money": "", + "men_state": 1, + "teacher_state": 1, + "teacher_back": 1, + "offer_state": 1, + "offer_exam_state": 1, + "notice_state": 1, + "pass_why": 0, + "pass_text": [], + } + insert_data = [] res_data = [] if isinstance(self.data_in, dict): @@ -43,29 +91,25 @@ class InterviewDo: if isinstance(self.data_in, list): insert_data = self.data_in - sql = f"insert into HR.resumes(interview_name, interview_type, interview_sign, feedback, interview_round, star_time, end_time, event_time, uid, name, phone, job_name, hr_name, work_exp, interview_stage, owner_name, education, work_undergo, project_undergo, work_list, school, at_school, specialty, specialty_do, mmended_state, mail, account, id_card, gender, age, gam, interview_state, graduate_time, counts, nation, come_time, review, upgrade) values" + sql = f"insert into HR.resumes(interview_name, interview_type, interview_sign, hope_money, feedback," \ + f" interview_round, event_time, uid, name, phone, job_name, hr_name, work_exp, interview_stage, owner_name," \ + f" education, work_undergo, project_undergo, work_list, school, at_school, specialty, specialty_do, " \ + f"mmended_state, mail, account, id_card, gender, age, gam, interview_state, counts, nation, come_time," \ + f" review, upgrade, now_money, men_state, teacher_state, teacher_back, offer_state, offer_exam_state," \ + f" notice_state, pass_why, pass_text) values" now_time = datetime.datetime.now() for data in insert_data: - s1 = data['star_time'] - s2 = data['end_time'] - s3 = data['event_time'] - s4 = data['graduate_time'] + s1 = data['event_time'] + s2 = data['hope_money'] + s3 = data['now_money'] if not s1: - data['star_time'] = None - else: - data['star_time'] = parser.parse(s1) - if not s2: - data['end_time'] = None - else: - data['end_time'] = parser.parse(s2) - if not s3: data['event_time'] = now_time else: - data['event_time'] = parser.parse(s3) - if not s4: - data['graduate_time'] = None - else: - data['graduate_time'] = parser.parse(s4) + data['event_time'] = parser.parse(s1) + if s2 and isinstance(s2, int): + data['hope_money'] = str(s2) + if s3 and isinstance(s3, int): + data['now_money'] = str(s3) data_true = deepcopy(data) data_true['uid'] = get_uid() education = data_true['education'] @@ -97,7 +141,9 @@ class InterviewDo: data_true['work_exp'] = 0.0 else: data_true['work_exp'] = float(true_work_exp.group()) - res_data.append(data_true) + append_data = deepcopy(data_mode) + append_data.update(data_true) + res_data.append(append_data) print(sql) return {'sql': sql, 'insert_data': res_data diff --git a/utils/jianli.py b/utils/jianli.py index b19b672..a66411e 100644 --- a/utils/jianli.py +++ b/utils/jianli.py @@ -23,7 +23,7 @@ data_mode = { "interview_name": "吴操", "interview_type": 1, "interview_sign": 0, - "hope_money": 10000, + "hope_money": "", "feedback": 0, "interview_round": 0, "event_time": "", @@ -51,7 +51,19 @@ data_mode = { "gam": "", "interview_state": 1, "counts": 1, - "nation": 1, + "nation": "汉", + "review": [], + "upgrade": [], + "come_time": "", + "now_money": "", + "men_state": 1, + "teacher_state": 1, + "teacher_back": 1, + "offer_state": 1, + "offer_exam_state": 1, + "notice_state": 1, + "pass_why": 0, + "pass_text": [], } @@ -92,7 +104,7 @@ def chkworlkandtime(listdata): 'name': res['公司名'][i]['text'], 'time': res['时间'][i]['text'] } - ress.append(date) + ress.append(str(date)) return ress diff --git a/接口文档/offer阶段查询接口文档.txt b/接口文档/offer阶段查询接口文档.txt new file mode 100644 index 0000000..748af56 --- /dev/null +++ b/接口文档/offer阶段查询接口文档.txt @@ -0,0 +1,78 @@ +·: /api/v1/itr/interview_offer_find + +: +{ + "data_in": "string", # [޸ݺͲʱҪʹ] + "interview_query": {"interview_stage": 4}, # ѯdict Ϊ + "find_column": [ # Ҫѯֶliststr + "name" + ] +} + +# ڲ˵ +ֵ: +{ + "code": 200, + "msg": "ok", + "data": { + "0": { + "interview_name": "", # Թ + "interview_type": 0, # 0:ԣ1: + "interview_sign": 1, # ǩ 1:ǩ0:δǩ + "feedback": 0, # Է 1:ѷ0:δ + "interview_round": 1, # Խ׶ 1ԣ2ԣ3 + "star_time": "2022-07-11T10:30:00", # Կʼʱ + "end_time": "2022-07-11T11:00:00", # Խʱ + "event_time": "2022-07-01T10:00:00", # Ͷʱ + "uid": "123456789", # Ψһid + "name": "", # + "phone": "13789923799", # ֻ + "job_name": "python", # ӦƸְλ + "hr_name": "", # Ը ѡ + "work_exp": "2", # + "interview_stage": 1, # ׶ 1:ɸ 2:ɸ 3: 4:ͨoffer 5:ְ + "owner_name": 2, # Դ 1:ǰ,2:˲ſ,3:Ƹ,4:BossֱƸ,5:58ͬ + "education": 1, # ѧ 1:ר,2:,3:о,4:ʿ,5:˶ʿ + "work_undergo": "", # + "school": "人ѧ", # ҵԺУ + "specialty": "רҵ", # רҵ + "mmended_state": 0, # Ƽ״̬ + "mail": "250213000@qq.com", # + "account": "人", # ڵ + "id_card": "421202199986750339", # ֤ + "gender": "", # Ա + "interview_state": 2, # ǰ״̬ 1: 2: 3:ѽ + "graduate_time": "2022-07-01T08:00:00", # ҵʱ + "counts": 1 # ڼͶݼ + } + } +} + +ʵʷֵ: +{ + "code": 200, + "msg": "ok", + "data": { + "0": { + "uid": "3ae3f4d54e03ca", + "age": 20, + "gender": "", + "at_school": "2005.9-2009.6", + "name": "³", + "event_time": "2022-07-12T17:42:13", + "owner_name": 2, + "education": 2, + "school": "ѧ", + "specialty": "ѧ뼼", + "interview_name": "", + "mmended_state": 0, + "work_list": [], + "work_exp": 0, + "job_name": "androidʦ", + "feedback": 0, + "interview_round": 0, + "interview_state": 1, + "interview_stage": 4 + } + } +} \ No newline at end of file diff --git a/接口文档/主页初筛查询接口文档.txt b/接口文档/主页初筛查询接口文档.txt new file mode 100644 index 0000000..3cb1b7b --- /dev/null +++ b/接口文档/主页初筛查询接口文档.txt @@ -0,0 +1,97 @@ +·: /api/v1/itr/interview_home_find + +: +{ + "data_in": "string", # [޸ݺͲʱҪʹ] + "interview_query": {"interview_stage": 1}, # ѯdict,Ϊ{} + "find_column": [ # Ҫѯֶliststr + "name" + ] +} + +# ڲ˵ +ֵ: +{ + "code": 200, + "msg": "ok", + "data": { + "0": { + "interview_name": "", # Թ + "interview_type": 0, # 0:ԣ1: + "interview_sign": 1, # ǩ 1:ǩ0:δǩ + "feedback": 0, # Է 1:ѷ0:δ + "interview_round": 1, # Խ׶ 1ԣ2ԣ3 + "star_time": "2022-07-11T10:30:00", # Կʼʱ + "end_time": "2022-07-11T11:00:00", # Խʱ + "event_time": "2022-07-01T10:00:00", # Ͷʱ + "uid": "123456789", # Ψһid + "name": "", # + "phone": "13789923799", # ֻ + "job_name": "python", # ӦƸְλ + "hr_name": "", # Ը ѡ + "work_exp": "2", # + "interview_stage": 1, # ׶ 1:ɸ 2:ɸ 3: 4:ͨoffer 5:ְ + "owner_name": 2, # Դ 1:ǰ,2:˲ſ,3:Ƹ,4:BossֱƸ,5:58ͬ + "education": 1, # ѧ 1:ר,2:,3:о,4:ʿ,5:˶ʿ + "work_undergo": "", # + "school": "人ѧ", # ҵԺУ + "specialty": "רҵ", # רҵ + "mmended_state": 0, # Ƽ״̬ + "mail": "250213000@qq.com", # + "account": "人", # ڵ + "id_card": "421202199986750339", # ֤ + "gender": "", # Ա + "interview_state": 2, # ǰ״̬ 1: 2: 3:ѽ + "graduate_time": "2022-07-01T08:00:00", # ҵʱ + "counts": 1 # ڼͶݼ + } + } +} + +ʵʷֵ: +{ + "code": 200, + "msg": "ok", + "data": { + "0": { + "uid": "3ae3f4d54e03ca", + "age": 20, + "gender": "", + "at_school": "2005.9-2009.6", + "name": "³", + "event_time": "2022-07-12T17:42:13", + "owner_name": 2, + "education": 2, + "school": "ѧ", + "specialty": "ѧ뼼", + "interview_name": "", + "mmended_state": 0, + "work_list": [], + "work_exp": 0, + "notice_state": 1, + "job_name": "androidʦ", + "interview_stage": 1 + }, + "1": { + "uid": "3ae63e44e24a38", + "age": 29, + "gender": "", + "at_school": "6", + "name": "", + "event_time": "2022-07-15T15:32:56", + "owner_name": 2, + "education": 2, + "school": "人֯ѧ", + "specialty": "", + "interview_name": "", + "mmended_state": 0, + "work_list": [ + "{'name': 'ʿƼ޹˾', 'time': '2016.08-2017.6'}" + ], + "work_exp": 6, + "notice_state": 1, + "job_name": "Androidʦ", + "interview_stage": 1 + } + } +} \ No newline at end of file diff --git a/接口文档/修改简历数据接口文档.txt b/接口文档/修改简历数据接口文档.txt new file mode 100644 index 0000000..856eb24 --- /dev/null +++ b/接口文档/修改简历数据接口文档.txt @@ -0,0 +1,18 @@ +·: /api/v1/itr/interview_update + +: +{ + "data_in": {"interview_stage": 2}, # ֵ,Ҫ޸ĵ + "interview_query": {"uid": "3ae63e44e24a38"}, # ޸Ĭϴǰݵuid + "find_column": [ # Ҫѯֶliststr + "name" + ] +} + + +ֵ: +{ + "code": 200, + "msg": "ok", + "data": {} # ڼͶݼ +} \ No newline at end of file diff --git a/接口文档/主页查询接口文档.txt b/接口文档/复筛查询接口文档.txt similarity index 79% rename from 接口文档/主页查询接口文档.txt rename to 接口文档/复筛查询接口文档.txt index 8594a60..7e0b418 100644 --- a/接口文档/主页查询接口文档.txt +++ b/接口文档/复筛查询接口文档.txt @@ -1,15 +1,15 @@ -·: /api/v1/itr/interview_find +·: /api/v1/itr/interview_screen_find : { "data_in": "string", # [޸ݺͲʱҪʹ] - "interview_query": {"interview_stage": 1}, # ѯdict + "interview_query": {"interview_stage": 2}, # ѯdict Ϊ "find_column": [ # Ҫѯֶliststr "name" ] } - +# ڲ˵ ֵ: { "code": 200, @@ -46,4 +46,31 @@ "counts": 1 # ڼͶݼ } } +} + +ʵʷֵ: +{ + "code": 200, + "msg": "ok", + "data": { + "0": { + "uid": "3ae3f4d54e03ca", + "age": 20, + "gender": "", + "at_school": "2005.9-2009.6", + "name": "³", + "event_time": "2022-07-12T17:42:13", + "owner_name": 2, + "education": 2, + "school": "ѧ", + "specialty": "ѧ뼼", + "interview_name": "", + "mmended_state": 0, + "work_list": [], + "work_exp": 0, + "notice_state": 1, + "job_name": "androidʦ", + "interview_stage": 2 + } + } } \ No newline at end of file diff --git a/接口文档/待入职阶段查询接口文档.txt b/接口文档/待入职阶段查询接口文档.txt new file mode 100644 index 0000000..423c079 --- /dev/null +++ b/接口文档/待入职阶段查询接口文档.txt @@ -0,0 +1,80 @@ +·: /api/v1/itr/interview_waite_in_find + +: +{ + "data_in": "string", # [޸ݺͲʱҪʹ] + "interview_query": {"interview_stage": 5}, # ѯdict Ϊ + "find_column": [ # Ҫѯֶliststr + "name" + ] +} + +# ڲ˵ +ֵ: +{ + "code": 200, + "msg": "ok", + "data": { + "0": { + "interview_name": "", # Թ + "interview_type": 0, # 0:ԣ1: + "interview_sign": 1, # ǩ 1:ǩ0:δǩ + "feedback": 0, # Է 1:ѷ0:δ + "interview_round": 1, # Խ׶ 1ԣ2ԣ3 + "star_time": "2022-07-11T10:30:00", # Կʼʱ + "end_time": "2022-07-11T11:00:00", # Խʱ + "event_time": "2022-07-01T10:00:00", # Ͷʱ + "uid": "123456789", # Ψһid + "name": "", # + "phone": "13789923799", # ֻ + "job_name": "python", # ӦƸְλ + "hr_name": "", # Ը ѡ + "work_exp": "2", # + "interview_stage": 1, # ׶ 1:ɸ 2:ɸ 3: 4:ͨoffer 5:ְ + "owner_name": 2, # Դ 1:ǰ,2:˲ſ,3:Ƹ,4:BossֱƸ,5:58ͬ + "education": 1, # ѧ 1:ר,2:,3:о,4:ʿ,5:˶ʿ + "work_undergo": "", # + "school": "人ѧ", # ҵԺУ + "specialty": "רҵ", # רҵ + "mmended_state": 0, # Ƽ״̬ + "mail": "250213000@qq.com", # + "account": "人", # ڵ + "id_card": "421202199986750339", # ֤ + "gender": "", # Ա + "interview_state": 2, # ǰ״̬ 1: 2: 3:ѽ + "graduate_time": "2022-07-01T08:00:00", # ҵʱ + "counts": 1 # ڼͶݼ + } + } +} + +ʵʷֵ: +{ + "code": 200, + "msg": "ok", + "data": { + "0": { + "uid": "3ae3f4d54e03ca", + "age": 20, + "gender": "", + "at_school": "2005.9-2009.6", + "name": "³", + "event_time": "2022-07-12T17:42:13", + "owner_name": 2, + "education": 2, + "school": "ѧ", + "specialty": "ѧ뼼", + "interview_name": "", + "mmended_state": 0, + "work_list": [], + "work_exp": 0, + "job_name": "androidʦ", + "feedback": 0, + "interview_round": 0, + "interview_state": 1, + "interview_stage": 5, + "pass_why": 0, + "pass_text": [] + } + } +} \ No newline at end of file diff --git a/接口文档/查询备注接口文档.txt b/接口文档/查询备注接口文档.txt new file mode 100644 index 0000000..29112a9 --- /dev/null +++ b/接口文档/查询备注接口文档.txt @@ -0,0 +1,35 @@ +ӿ: api/v1/itr/add_remark + + +: +{ + "remark_uid": "3ae3f4d54e03ca", # ѯļuid + "where": {} # Ԥֶζɾѡ +} + + +ֵ: +{ + "code": 200, + "msg": "ok", + "data": [ + { + "remark_id": "1657867100", + "remark_from": "", + "comment": "پÿ", + "stage_num": 0, + "remark_time": "2022-07-15T14:38:20.279000", + "remark_uid": "3ae3f4d54e03ca", + "remark_stage": 5 + }, + { + "remark_id": 1657872635, + "remark_from": "", + "comment": "پòǺܿ", + "stage_num": 0, + "remark_time": "2022-07-15T16:10:35.622000", + "remark_uid": "3ae3f4d54e03ca", + "remark_stage": 5 + } + ] +} \ No newline at end of file diff --git a/接口文档/添加备注接口文档.txt b/接口文档/添加备注接口文档.txt new file mode 100644 index 0000000..a0bcef0 --- /dev/null +++ b/接口文档/添加备注接口文档.txt @@ -0,0 +1,19 @@ +ӿ: api/v1/itr/add_remark + + +: +{ + "remark_from": "", # дע + "comment": "پÿ", # ע + "stage_num": 0, # ע鿴Ȩ + "remark_uid": "3ae3f4d54e03ca", # עļuid + "remark_stage": 5 # עʱ׶ +} + + +ֵ: +{ + "code": 200, + "msg": "ok", + "data": "" +} \ No newline at end of file diff --git a/接口文档/面试阶段查询接口文档.txt b/接口文档/面试阶段查询接口文档.txt new file mode 100644 index 0000000..8c38e87 --- /dev/null +++ b/接口文档/面试阶段查询接口文档.txt @@ -0,0 +1,78 @@ +·: /api/v1/itr/interview_exam_find + +: +{ + "data_in": "string", # [޸ݺͲʱҪʹ] + "interview_query": {"interview_stage": 3}, # ѯdict Ϊ + "find_column": [ # Ҫѯֶliststr + "name" + ] +} + +# ڲ˵ +ֵ: +{ + "code": 200, + "msg": "ok", + "data": { + "0": { + "interview_name": "", # Թ + "interview_type": 0, # 0:ԣ1: + "interview_sign": 1, # ǩ 1:ǩ0:δǩ + "feedback": 0, # Է 1:ѷ0:δ + "interview_round": 1, # Խ׶ 1ԣ2ԣ3 + "star_time": "2022-07-11T10:30:00", # Կʼʱ + "end_time": "2022-07-11T11:00:00", # Խʱ + "event_time": "2022-07-01T10:00:00", # Ͷʱ + "uid": "123456789", # Ψһid + "name": "", # + "phone": "13789923799", # ֻ + "job_name": "python", # ӦƸְλ + "hr_name": "", # Ը ѡ + "work_exp": "2", # + "interview_stage": 1, # ׶ 1:ɸ 2:ɸ 3: 4:ͨoffer 5:ְ + "owner_name": 2, # Դ 1:ǰ,2:˲ſ,3:Ƹ,4:BossֱƸ,5:58ͬ + "education": 1, # ѧ 1:ר,2:,3:о,4:ʿ,5:˶ʿ + "work_undergo": "", # + "school": "人ѧ", # ҵԺУ + "specialty": "רҵ", # רҵ + "mmended_state": 0, # Ƽ״̬ + "mail": "250213000@qq.com", # + "account": "人", # ڵ + "id_card": "421202199986750339", # ֤ + "gender": "", # Ա + "interview_state": 2, # ǰ״̬ 1: 2: 3:ѽ + "graduate_time": "2022-07-01T08:00:00", # ҵʱ + "counts": 1 # ڼͶݼ + } + } +} + +ʵʷֵ: +{ + "code": 200, + "msg": "ok", + "data": { + "0": { + "uid": "3ae3f4d54e03ca", + "age": 20, + "gender": "", + "at_school": "2005.9-2009.6", + "name": "³", + "event_time": "2022-07-12T17:42:13", + "owner_name": 2, + "education": 2, + "school": "ѧ", + "specialty": "ѧ뼼", + "interview_name": "", + "mmended_state": 0, + "work_list": [], + "work_exp": 0, + "job_name": "androidʦ", + "feedback": 0, + "interview_round": 0, + "interview_state": 1, + "interview_stage": 3 + } + } +} \ No newline at end of file