zhaoqingang
2024-11-12 2669d0e0a93e06983dade724146bd0e1b6da6ba7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import base64
 
from datetime import datetime
 
from app.api import pwd_context
from app.config.config import settings
from app.models import RoleModel, GroupModel
from app.models.user_model import UserModel
from app.Log import logger
from app.service.bisheng import BishengService
from app.service.ragflow import RagflowService
 
 
async def get_user_list(db, page_size: int, page_index: int, keyword: str):
    query = db.query(UserModel)
    if keyword:
        query = query.filter(UserModel.group_name.like('%{}%'.format(keyword)))
    users = query.order_by(UserModel.id.desc()).limit(page_size).offset(
        (page_index - 1) * page_size).all()
    return {"total": query.count(), "rows":  [user.to_json() for user in users]}
 
 
async def edit_user_status(db, status: str, user_id: int):
    try:
        db.query(UserModel).filter(UserModel.id == user_id).update({"status":status})
        db.commit()
    except Exception as e:
        logger.error(e)
        db.rollback()
        return False
    return True
 
 
async def delete_user_data(db, user_id: str):
    try:
        db.query(UserModel).filter(UserModel.id == user_id).delete()
        db.commit()
    except Exception as e:
        logger.error(e)
        db.rollback()
        return False
    return True
 
 
async def create_user(db, user_name, email, phone, login_name, password, roles, groups):
    try:
        bisheng_service = BishengService(settings.sgb_base_url)
        ragflow_service = RagflowService(settings.fwr_base_url)
 
        # 注册到毕昇
        try:
            bisheng_info = await bisheng_service.register(user_name, password)
        except Exception as e:
            logger.error(f"Failed to register with Bisheng: {str(e)}")
            return False
 
        # 注册到ragflow
        try:
            ragflow_info = await ragflow_service.register(user_name, password)
        except Exception as e:
            logger.error(f"Failed to register with Ragflow: {str(e)}")
            return False
 
        # 存储用户信息
        hashed_password = pwd_context.hash(password)
        user_model =  UserModel(username=user_name, hashed_password=hashed_password, email=email,ragflow_id=ragflow_info.get("id"),bisheng_id=bisheng_info.get("user_id"),
                                phone=phone,login_name=login_name)
 
        user_model.roles = [db.get(RoleModel, roleId) for roleId in roles]
        if groups:
            user_model.groups = [db.get(GroupModel, groupId) for groupId in groups]
        db.add(user_model)
        db.commit()
        db.refresh(user_model)
    except Exception as e:
        logger.error(e)
        db.rollback()
        return False
    return True
 
 
async def edit_user_data(db, user_id, email, phone, login_name, roles, groups):
    try:
        user = db.query(UserModel).filter(UserModel.id == user_id).first()
        user.email = email
        user.phone = phone
        user.login_name = login_name
        user.email = email
        user.updated_at = datetime.now()
        user.roles = [db.get(RoleModel, roleId) for roleId in roles]
        user.groups = [db.get(GroupModel, groupId) for groupId in groups]
        db.commit()
    except Exception as e:
        logger.error(e)
        db.rollback()
        return False
    return True
 
 
async def edit_user_pwd(db, user_id, password="000000"):
    try:
        #TODO
        hashed_password = pwd_context.hash(password)
        user = db.query(UserModel).filter(UserModel.id == user_id).first()
        user.hashed_password = hashed_password
        db.commit()
    except Exception as e:
        logger.error(e)
        db.rollback()
        return False
    return True
 
 
async def get_user_info(db, page_size: int, page_index: int, keyword: str):
    query = db.query(UserModel)
    if keyword:
        query = query.filter(UserModel.group_name.like('%{}%'.format(keyword)))
    users = query.order_by(UserModel.id.desc()).limit(page_size).offset(
        (page_index - 1) * page_size).all()
    return {"total": query.count(), "rows":  [user.to_json() for user in users]}