feat:新接口适配,代码优化

This commit is contained in:
yujj128
2025-08-01 09:35:27 +08:00
parent b52a633f54
commit 6a0f1909f0
2 changed files with 12 additions and 94 deletions

View File

@@ -83,7 +83,7 @@ def query_room_type(params: dict) -> str:
'''
查询租户下会议室信息,接口过滤根据会议室名称,类型,容量,开始时间和结束时间
查询租户下会议室信息,
'''
def query_room_info(data: dict, params: dict) -> str:
# resp = requests.get('http://127.0.0.1:8000/myapi/room/')
@@ -133,11 +133,12 @@ def query_room_info(data: dict, params: dict) -> str:
logger.exception("location: query_room_info => {0}".format(str(ex)))
return error_respones.format("查询会议室信息")
'''
查询可用会议室信息,
包含过滤掉未启用的会议室(接口自动过滤)
'''
def query_avali_meetinroom_by_interface(data: dict, params: dict) -> str:
def query_avali_room(data: dict, params: dict) -> str:
logger.info(f"当前params : {params} data: {data}")
tenant_id = params.get('tenantId', None)
try:
@@ -169,101 +170,18 @@ def query_avali_meetinroom_by_interface(data: dict, params: dict) -> str:
params['startTimeStr'] = start_time
params['endTimeStr'] = end_time
# meeting_room = getinfo.query_meetingroom(params)
meeting_room = getinfo.query_avali_meetinroom(params)
content = json.loads(json.dumps(meeting_room))
list = content['data'].get('list', [])
result = params_filter.filter_meetingroom(list)
logger.info(" filter data: {0}".format(result))
result = params_filter.filter_params(result, "query_meeting_room")
logger.debug("query_avali_meetinroom_by_interface result => {0}".format(result))
logger.debug("query_avali_room result => {0}".format(result))
return json.dumps(result, ensure_ascii=False)
except Exception as ex:
logger.exception("location: query_avali_meetinroom_by_interface => {0}".format(str(ex)))
logger.exception("location: query_avali_room=> {0}".format(str(ex)))
return error_respones.format("查询会议室信息")
executor = ThreadPoolExecutor(thread_name_prefix='pool_time_over_leap_check',max_workers=config('PROCESS_ROOM_TIME_OVER_POOL_SIZE',default=20,cast=int))
'''
多线程任务,判断房间该时段是否被占用
'''
def executor_task_of_time_over_check(start_time,end_time,meeting_info)-> Optional[str]:
logger.info("current meetings {0}".format(meeting_info))
for m in meeting_info['meetingDTOList']:
m_start_time = getinfo.standard_format(m['startTimeStamp'])
m_end_time = getinfo.standard_format(m['endTimeStamp'])
logger.info("m_start_time:{0},m_end_time:{1}".format(m_start_time, m_end_time))
if getinfo.is_time_overlap([start_time, end_time], [m_start_time, m_end_time]):
logger.info("会议{0}发生时间冲突".format(m))
return meeting_info.get('meetingRoomId')
return None
'''
查询可用会议室信息,
包含过滤掉未启用的会议室(手动过滤)
(暂时保留)
'''
def query_avali_room(data: dict,params: dict,start_time=None,end_time=None) -> str:
logger.info(f"query_avali_room params : {params}")
time_exist = False
pageSize = 300
try:
if not start_time:
return json.dumps({"msg":"请确定会议开始-结束时间"},ensure_ascii=False)
if start_time:
time_exist = True
# 时间格式标准化 2025-05-22 11:00:00
start_time = getinfo.standard_format(start_time)
# 用户没指定结束时间默认从开始往后推两小时为结束时间
if not end_time:
end_time = start_time+timedelta(hours=2)
else:
end_time = getinfo.standard_format(end_time)
logger.info("start_time:{0},end_time{1}".format(start_time,end_time))
# 获取过滤了region和capacity的会议室信息
meeting_room = json.loads(query_room_info(data,params))
logger.info("meeting_room => {0}".format(meeting_room))
if not isinstance(meeting_room, list):
raise Exception(f"query_avali_room: 会议室信息获取不符合预期 => {meeting_room}")
unavali_room = []
avali_room = []
# 过滤有时间冲突的会议
if time_exist:
tmp_params = params.copy()
tmp_params['pageSize'] = pageSize
room_ids = []
for room in meeting_room:
room_ids.append(room['id'])
if room_ids:
tmp_params['meetingRoomIds'] = ",".join(room_ids)
booking_info = query_booking_info(tmp_params)
logger.info("会议详情:{0}".format(booking_info))
if not isinstance(booking_info, dict):
raise Exception(f"query_avali_room: 已预定会议信息获取不符合预期 => {booking_info}")
booking_meeting = booking_info['data']
if booking_meeting:
#多线程并发判断
future_task_list=[executor.submit(executor_task_of_time_over_check,start_time,end_time,b) for b in booking_meeting]
for f in future_task_list:
if f.result():
unavali_room.append(f.result())
logger.info("所有发生时间冲突的会议室 => {0}".format(unavali_room))
avali_room = [room for room in meeting_room if room['id'] not in unavali_room]
# 过滤会议室信息里的多余字段
avali_room = params_filter.filter_params(avali_room, "query_meeting_room")
# 返回会议室长度限制
if len(avali_room) >= DEFAULT_QUERY_SIZE:
logger.info("avali_room 长度超出限制")
avali_room = avali_room[:DEFAULT_QUERY_SIZE]
return json.dumps(avali_room, ensure_ascii=False)
except Exception as e:
logger.exception("location: query_avali_room => {0}".format(str(e)))
return error_respones.format("获取可用会议室信息失败")
'''
查询租户下预定信息
'''
@@ -605,7 +523,7 @@ def build_prompt(params,map_meetingname_to_id:list):
3. 查询会议室信息
当用户表达需要查询会议室情况时,实时查询,禁止使用历史对话数据,禁止假设返回信息,(可以根据给出的模糊日期:例如 ‘今天’,‘明天’,然后自动拼接当天的最小时间和最大时间构造开始结束时间)直接构造并返回json示例如下
```
{qry_room_info_for_mart_str}
{qry_avail_meetingroom_for_mart_str}
```
4. 如果用户需要取消预订会议时(会议ID必须由用户提供不要获取历史消息进行推理),分两种情况:
(1)用户未提供要取消的会议号ID,不要使用历史消息进行推理按照以下的json示例返回:
@@ -704,7 +622,7 @@ def process_book_room(data, params) -> tuple:
def process_query_room(data, params) -> tuple:
logger.info("current data is :{}".format(data))
# result = query_avali_room(data=data, params=params)
result = query_avali_meetinroom_by_interface(data, params)
result = query_room_info(data, params)
book_promot = f''''''
logger.info("--process_query_room data is :{}".format(result))
book_promot = f'''
@@ -783,10 +701,8 @@ def process_cancel_room_meeting(data, params) -> tuple:
'''
def process_query_avali_room(data, params) -> tuple:
logger.info("current data is :{}".format(data))
# start_time = data.get("start_time", None)
# end_time = data.get("end_time", None)
# result = query_avali_room(data,params,start_time,end_time)
result = query_avali_meetinroom_by_interface(data=data, params=params)
result = query_avali_room(data,params)
book_promot = f'''
系统调用API查询了现有的可用会议室的结果如下(如果有一个或多个可用会议室,必须对返回的会议室按顺序编号):
```

View File

@@ -221,7 +221,9 @@ def query_meetingroom(params: dict):
f"message: {respones.text}")
logger.error(error_info)
raise Exception(error_info)
'''
查询可用会议室信息与query_meetingroom不是同一个接口
'''
def query_avali_meetinroom(params: dict):
logger.info("Start to query meetingroom2")
params = deepcopy(params)