zhaoqingang
2025-04-11 e078028f1a8da34f3cc2cb5095b8e103a996f553
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
from datetime import datetime
 
from sqlalchemy import or_
 
from app.models import KnowledgeModel, group_knowledge_table, KnowledgeUserModel
from app.models.user_model import UserModel
from Log import logger
from app.task.fetch_agent import get_one_from_ragflow_knowledge
 
 
async def get_knowledge_list(db, user_id, keyword, page_size, page_index, status, knowledge, location):
    user = db.query(UserModel).filter(UserModel.id == user_id).first()
    if user is None:
        return {"rows": []}
    query = db.query(KnowledgeModel).filter(KnowledgeModel.knowledge_type==knowledge)
    if user.permission != "admin":
        klg_list = [j.id for i in user.groups for j in i.knowledges]
        for i in db.query(KnowledgeUserModel).filter(KnowledgeUserModel.user_id == user_id, KnowledgeUserModel.status == 1).all():
            if i.kb_id not in klg_list:
                klg_list.append(i.kb_id)
        query = query.filter(or_(KnowledgeModel.id.in_(klg_list), KnowledgeModel.tenant_id == str(user_id)))
 
        if location:
            query = query.filter(or_(KnowledgeModel.permission == "team", KnowledgeModel.tenant_id == str(user_id)))
 
    if keyword:
        query = query.filter(KnowledgeModel.name.like('%{}%'.format(keyword)))
    total = query.count()
    if page_size:
        query = query.order_by(KnowledgeModel.update_date.desc()).limit(page_size).offset((page_index - 1) * page_size)
    return {"total":  total, "rows": [kld.to_json(str(user_id) if user.permission != "admin" else "admin") for kld in query.all()]}
 
 
async def create_knowledge_service(db, klg_id, name, description, icon, klg_type, user_id):
    try:
        dialog_model = KnowledgeModel(id=klg_id,name=name, description=description,icon=icon, knowledge_type=klg_type, tenant_id=user_id,update_date=datetime.now(),create_date=datetime.now())
        db.add(dialog_model)
        kb_user = KnowledgeUserModel(kb_id=klg_id, user_id=user_id, status=1, update_date=datetime.now(),
                                     create_date=datetime.now())
        db.add(kb_user)
        db.commit()
        db.refresh(dialog_model)
    except Exception as e:
        logger.error(e)
        db.rollback()
        return False
    return True
 
 
async def sync_knowledge_service(db, klg_id):
    knowledge = db.query(KnowledgeModel).filter(KnowledgeModel.id == klg_id).first()
    if knowledge:
        try:
            app_knowledge = get_one_from_ragflow_knowledge(klg_id)
            if app_knowledge:
                knowledge.name = app_knowledge["name"]
                knowledge.description = app_knowledge["description"]
                knowledge.permission = app_knowledge["permission"]
                knowledge.documents = app_knowledge["doc_num"]
                knowledge.status = app_knowledge["status"]
                knowledge.embd_id = app_knowledge["embd_id"]
                knowledge.update_date = datetime.now()
                db.add(knowledge)
                db.commit()
                db.refresh(knowledge)
        except Exception as e:
            logger.error(e)
            db.rollback()
            return False
        return True
 
 
async def delete_knowledge_service(db, klg_id):
 
    try:
        db.query(KnowledgeModel).filter(KnowledgeModel.id==klg_id).delete()
        db.commit()
    except Exception as e:
        logger.error(e)
        db.rollback()
        return False
    return True
 
 
 
async def update_knowledge_icon_service(db, klg_id, icon):
    try:
        db.query(KnowledgeModel).filter_by(id=klg_id).update({"icon":icon, "update_date": datetime.now()})
        db.commit()
    except Exception as e:
        logger.error(e)
        db.rollback()
        return False
    return True
 
 
 
async def get_knowledge_users_service(db, kb_id, user_id, page, page_size, member):
    kb_user_list = []
    user_ids = []
    kb_info = db.query(KnowledgeModel).filter(KnowledgeModel.id == kb_id).first()
    query = db.query(KnowledgeUserModel).filter(KnowledgeUserModel.kb_id == kb_id)
    if member:
        query = query.filter(KnowledgeUserModel.user_id != user_id)
    total = query.count()
 
    for kld in query.limit(page_size).offset((page - 1) * page_size).all():
        user_ids.append(kld.user_id)
        print(kb_info.tenant_id)
        kb_user_list.append(kld.to_json(kb_info.tenant_id))
    user = {i.id: i.username for i in db.query(UserModel).filter(UserModel.id.in_(user_ids)).all()}
    for kld in kb_user_list:
        kld["username"] = user.get(kld["user_id"], "")
    return {"total": total, "rows": kb_user_list}
 
 
async def set_knowledge_owner_service(db, kb_id, user_id, u_id):
    try:
        db.query(KnowledgeModel).filter_by(id=kb_id).update({"tenant_id": str(user_id), "update_date": datetime.now()})
        db.commit()
    except Exception as e:
        logger.error(e)
        db.rollback()
        return False
    return True
 
 
async def add_knowledge_user_service(db, kb_id, user_id):
    try:
 
        kb_user = KnowledgeUserModel(kb_id=kb_id, user_id=user_id, status=1, update_date=datetime.now(),
                                     create_date=datetime.now())
        db.add(kb_user)
        db.commit()
    except Exception as e:
        logger.error(e)
        db.rollback()
        return False
    return True