daily/Crud/UserCrud.py

122 lines
4.1 KiB
Python
Raw Normal View History

2023-02-28 13:52:51 +08:00
from sqlalchemy.orm import Session
from sqlalchemy import func
2023-03-01 16:04:43 +08:00
from Models.DepartmentModel import Department
from Models.PostModel import Post
2023-03-02 09:27:05 +08:00
from Models.UserModel import User, UserInfo
2023-02-28 13:52:51 +08:00
from Schemas import UserSchemas
2023-03-01 16:04:43 +08:00
import json
from Utils.SqlAlchemyUtils import get_db_i
2023-02-28 13:52:51 +08:00
2023-03-07 12:03:06 +08:00
def get_user_info(db: Session, email: str):
user = db.query(User).filter_by(email=email).first()
2023-02-28 13:52:51 +08:00
return user
2023-03-17 16:29:13 +08:00
def get_user_info_by_phone(db: Session, phone: str):
user = db.query(User).filter_by(phone=phone).first()
return user
2023-03-07 12:03:06 +08:00
def get_full_user_info(db: Session, email: str):
user = db.query(User).filter_by(email=email).first()
2023-03-06 14:48:41 +08:00
if not user:
return None
departments = []
posts = []
if user.department:
department_id_list = [int(department) for department in user.department.split(",")]
departments = [item.to_dict() for item in
db.query(Department).filter(Department.id.in_(department_id_list))]
if user.post:
post_id_list = [int(post) for post in user.post.split(",")]
posts = [item.to_dict() for item in db.query(Post).filter(Post.id.in_(post_id_list))]
user_data = user.to_dict()
user_data['department_list'] = departments
user_data['post_list'] = posts
return user_data
2023-03-07 12:03:06 +08:00
def create_user(db: Session, email: str):
user = User(email=email)
2023-03-02 15:19:14 +08:00
db.add(user)
db.commit()
2023-02-28 13:52:51 +08:00
db.refresh(user)
return user
2023-03-07 12:03:06 +08:00
def change_user_info(db: Session, email: str, user_info_change: UserSchemas.UserInfoChange):
db.query(User).filter_by(email=email).update(user_info_change.dict())
2023-02-28 13:52:51 +08:00
db.commit()
2023-03-07 12:03:06 +08:00
return db.query(User).filter_by(email=email).first()
2023-03-01 16:04:43 +08:00
2023-03-02 09:27:05 +08:00
# 根据email从用户信息表内配置用户数据,相当于用户接入后的数据库操作
2023-03-07 12:03:06 +08:00
def update_user_info_from_email(db: Session, email: str):
2023-03-02 09:27:05 +08:00
user_info = db.query(UserInfo).filter_by(email=email).first()
if user_info:
2023-03-07 12:03:06 +08:00
db.query(User).filter_by(email=email).update(
2023-03-02 09:27:05 +08:00
{'email': email, "name": user_info.name, "post": user_info.post,
"department": user_info.department, 'registered': True})
else:
2023-03-07 12:03:06 +08:00
db.query(User).filter_by(email=email).update(
2023-03-02 09:27:05 +08:00
{'email': email, 'registered': True})
db.commit()
2023-03-01 16:04:43 +08:00
def load_company_config_to_db():
db = get_db_i()
try:
2023-03-02 09:27:05 +08:00
data = json.load(open('Config/company.json', 'r', encoding="utf-8"))
2023-03-01 16:04:43 +08:00
db.query(Department).delete()
db.query(Post).delete()
db.commit()
for department_type in data['部门'].keys():
for department_name in data['部门'][department_type]:
department = Department(name=department_name, type=department_type)
db.add(department)
db.commit()
department_name_dic = {item.name: item.id for item in db.query(Department).all()}
for department_name, posts in data['职务'].items():
for post_name in posts:
db.add(Post(name=post_name, belong=department_name_dic[department_name]))
db.commit()
except Exception as e:
print(e)
finally:
db.close()
def get_user_by_departments(db: Session, departments: []):
set_emails = set()
users = []
for department in departments:
res = db.query(User).filter(func.find_in_set(department, User.department))
for item in res:
if item.email not in set_emails:
set_emails.add(item.email)
users.append(item.to_dict())
return users
def get_user_by_department_type(db: Session, department_type: str):
departments = [item.id for item in db.query(Department).filter_by(type=department_type)]
users = get_user_by_departments(db, departments)
2023-04-03 17:04:48 +08:00
users = [get_full_user_info(db, user['email']) for user in users if user["name"] != '邢军']
return users
2023-04-03 17:04:48 +08:00
def get_department_list(db: Session):
2023-07-06 00:52:27 +08:00
return db.query(Department).order_by(Department.index).all()
2023-06-30 13:39:24 +08:00
def get_department_config(db: Session):
type_dic = {}
for d in db.query(Department).all():
2023-06-30 17:18:31 +08:00
if d.sub_type not in type_dic:
2023-06-30 13:39:24 +08:00
type_dic[d.sub_type] = []
type_dic[d.sub_type].append(d.name)
return type_dic