import re from typing import Tuple import datetime import arrow import sqlalchemy as sa import json from fastapi import Depends import pandas as pd import numpy as np from utils.func import get_uid from sqlalchemy import func, or_, and_, not_ from copy import deepcopy import crud import schemas from dateutil import parser from core.config import settings from db import get_database from db.redisdb import get_redis_pool, RedisDrive from models.user_label import UserClusterDef # 面试数据ck增删改查 class InterviewDo: def __init__(self, query_in: schemas.InterviewQuery): self.query_in = query_in self.find_column = set() self.data_in = {} self.where = {} async def init(self, *args, **kwargs): self.find_column = self.query_in.find_column self.data_in = self.query_in.data_in self.where = self.query_in.interview_query def insert_interview_sql(self): insert_data = [] res_data = [] if isinstance(self.data_in, dict): insert_data = [self.data_in] 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" 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'] 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_true = deepcopy(data) data_true['uid'] = get_uid() education = data_true['education'] # 学历int转化 education_int = { '大专': 1, '本科': 2, '研究生': 3, '博士': 4, '硕士': 5, } if education and isinstance(education, str): data_true['education'] = education_int.get(education, 1) age = data_true['age'] # 年龄int转化 if age and isinstance(age, str): true_age = re.search(r"\d+\.?\d*", age) if len(true_age.group()) > 2: data_true['age'] = 20 else: data_true['age'] = int(true_age.group()) work_exp = data_true['work_exp'] # 工作经验float转化 if work_exp and isinstance(work_exp, str): true_work_exp = re.search(r"\d+\.?\d*", work_exp) if len(true_work_exp.group()) > 3: data_true['work_exp'] = 1.0 else: data_true['work_exp'] = float(true_work_exp.group()) res_data.append(data_true) print(sql) return {'sql': sql, 'insert_data': res_data } def update_interview_sql(self): updateStr = '' whereStr = '' for key, value in self.data_in.items(): if isinstance(value, str): updateStr += str(key) + ' = ' + "'" + value + "'" + ' ' continue updateStr += str(key) + ' = ' + str(value) + ' ' for key, value in self.where.items(): if isinstance(value, str): whereStr += str(key) + ' = ' + "'" + value + "'" + ' ' continue whereStr += str(key) + ' = ' + str(value) + ' ' updateStr.strip() whereStr.strip() sql = f"alter table HR.resumes update {updateStr} where {whereStr}" print(sql) return {'sql': sql, } def find_interview_sql(self): whereStr = '' findStr = '' for fstr in self.find_column: findStr += fstr + ', ' for key, value in self.where.items(): if isinstance(value, str): whereStr += str(key) + ' = ' + "'" + value + "'" + ' ' continue whereStr += str(key) + ' = ' + str(value) + ' ' whereStr = whereStr.strip() findStr = findStr.strip().strip(',') # sql = f"select {findStr} from HR.resumes where {whereStr}" sql = f"select * from HR.resumes where {whereStr}" print(sql) return {'sql': sql, } if __name__ == '__main__': find = re.search(r"\d+\.?\d*", "18岁") print(len(find.group()))