feat:新接口适配,代码优化
This commit is contained in:
@@ -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查询了现有的可用会议室的结果如下(如果有一个或多个可用会议室,必须对返回的会议室按顺序编号):
|
||||
```
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user