feat:提交预订会议室

This commit is contained in:
雷雨
2025-12-03 16:29:45 +08:00
parent f6720ed11a
commit 7ebd1b105b
2 changed files with 54 additions and 10 deletions

View File

@@ -3,13 +3,14 @@ from decouple import config
from datetime import datetime from datetime import datetime
from langchain_openai import ChatOpenAI from langchain_openai import ChatOpenAI
from typing import TypedDict, Annotated, List, Optional, Union from typing import TypedDict, Annotated, List, Optional, Union
import logging,json import logging, json
from yj_room_agent.db import snow_id, db_main from yj_room_agent.db import snow_id, db_main
from yj_room_agent.template import template from yj_room_agent.template import template
from yj_room_agent.tools import json_tools, getinfo, params_filter from yj_room_agent.tools import json_tools, getinfo, params_filter
from langgraph.graph import StateGraph, END, START from langgraph.graph import StateGraph, END, START
from langgraph.checkpoint.memory import MemorySaver from langgraph.checkpoint.memory import MemorySaver
from yj_room_agent.temp_history import msg_history from yj_room_agent.temp_history import msg_history
DEFAULT_QUERY_SIZE = config('DEFAULT_QUERY_SIZE', cast=int, default=30) DEFAULT_QUERY_SIZE = config('DEFAULT_QUERY_SIZE', cast=int, default=30)
room_llm = ChatOpenAI( room_llm = ChatOpenAI(
model=config('MODEL_NAME', default=''), model=config('MODEL_NAME', default=''),
@@ -22,6 +23,15 @@ room_llm = ChatOpenAI(
logger = logging.getLogger('django') logger = logging.getLogger('django')
def parse_time(time_str: str) -> int:
try:
timestamp = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S").timestamp()
return int(timestamp * 1000)
except Exception as ee:
print("解析时间错误:" + str(ee.with_traceback()))
return int(datetime.now().timestamp() * 1000)
class RoomChatAgentState(TypedDict): class RoomChatAgentState(TypedDict):
user_query: str user_query: str
conversation_id: str conversation_id: str
@@ -150,15 +160,47 @@ def query_avliable_meeting_room_node(state: RoomChatAgentState) -> dict:
def book_meeting_node(state: RoomChatAgentState) -> dict: def book_meeting_node(state: RoomChatAgentState) -> dict:
logger.info(f"user:{state.get('user_id', '1')} ---------------进入 pre_book_meeting_node(预会议) 节点-") logger.info(f"user:{state.get('user_id', '1')} ---------------进入 book_meeting_node(预会议) 节点-")
data = { data = state.get('pre_book_meeting_data', {})
'code': 200, params = state.get('params', {})
'message': '预约会议成功', result=None
'data': { try:
'meeting_id': '17592186050585', new_data = {
"subject": data.get('subject', '系统默认主题'),
"meetingRoomId": data["room_id"],
"meetingRoomName": "会议室名称",
"meetingDateTimeStamp": parse_time(data["start_time"]),
"startDateTimeStamp": parse_time(data["start_time"]),
"endDateTimeStamp": parse_time(data["end_time"]),
"meetingPersonYhtUserIds": [
],
"meetingPersonAmount": data.get('capacity', 0),
"remindArray": [
15
],
"content": "会议内容",
"isSendMail": True,
"isSendMsg": True
} }
} result=getinfo.book_meeting(params, new_data)
return {'last_node': 'book_meeting', 'book_meeting_data': data} data = result.get('data', {})
start_time = data.get('startTime', None)
end_time = data.get('endTime', None)
del data['startDateTime']
del data['endDateTime']
del data['meetingDateTime']
if start_time:
st = params_filter.parse_timestamp_to_str(start_time)
data['startTime'] = st
if end_time:
end = params_filter.parse_timestamp_to_str(end_time)
data['endTime'] = end
result['data'] = data
except Exception as e:
logger.error(f"user:{state.get('user_id', '1')} 预订会议失败:{e}")
result={"code":"500","message":f"预订会议失败,原因:{e}"}
return {'last_node': 'book_meeting', 'book_meeting_data': result}
# 取消会议室,需要判断历史消息或者用户输入,判断是否有会议室号,如果有,则取消会议,如果没有,触发查询已预订会议 # 取消会议室,需要判断历史消息或者用户输入,判断是否有会议室号,如果有,则取消会议,如果没有,触发查询已预订会议
@@ -172,7 +214,7 @@ def query_meeting_node(state: RoomChatAgentState) -> dict:
logger.info(f"user:{state.get('user_id', '1')} ---------------进入 query_meeting_node(查询已预订会议) 节点-") logger.info(f"user:{state.get('user_id', '1')} ---------------进入 query_meeting_node(查询已预订会议) 节点-")
param = state.get('params', {}) param = state.get('params', {})
# 示例数据,后面替换用友查询接口数据 # 示例数据,后面替换用友查询接口数据
meeting_room=getinfo.query_meetingbooking_info(param) meeting_room = getinfo.query_meetingbooking_info(param)
result = params_filter.filter_state(meeting_room) result = params_filter.filter_state(meeting_room)
return {'query_meeting_data': result, 'last_node': 'query_meeting'} return {'query_meeting_data': result, 'last_node': 'query_meeting'}

View File

@@ -302,6 +302,8 @@ def book_meeting(params: dict, data: dict):
request_url = gateway_url + BOOKMEETING request_url = gateway_url + BOOKMEETING
logger.debug("request url => {0}".format(request_url)) logger.debug("request url => {0}".format(request_url))
logger.debug("book_meeting params => {0}".format(params)) logger.debug("book_meeting params => {0}".format(params))
acc=get_access_token(tenant_id)
params['access_token'] = acc
respones = requests.post(url=request_url, params=params, respones = requests.post(url=request_url, params=params,
headers=header, data=json.dumps(data),verify=False) headers=header, data=json.dumps(data),verify=False)
logger.info("book meeting respones => {0}".format(respones.text)) logger.info("book meeting respones => {0}".format(respones.text))