fix:未启用会议室过滤+增加已预定按地点或时间查询
This commit is contained in:
@@ -148,7 +148,9 @@ def query_avali_room(data: dict,params: dict,start_time=None,end_time=None) -> s
|
||||
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:
|
||||
@@ -162,6 +164,7 @@ def query_avali_room(data: dict,params: dict,start_time=None,end_time=None) -> s
|
||||
raise Exception(f"query_avali_room: 会议室信息获取不符合预期 => {meeting_room}")
|
||||
unavali_room = []
|
||||
avali_room = []
|
||||
# 过滤有时间冲突的会议
|
||||
if time_exist:
|
||||
tmp_params = params.copy()
|
||||
tmp_params['pageSize'] = pageSize
|
||||
@@ -182,6 +185,7 @@ def query_avali_room(data: dict,params: dict,start_time=None,end_time=None) -> s
|
||||
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))
|
||||
unavali_room.append(meetings['meetingRoomId'])
|
||||
@@ -189,7 +193,9 @@ def query_avali_room(data: dict,params: dict,start_time=None,end_time=None) -> s
|
||||
|
||||
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]
|
||||
@@ -212,7 +218,9 @@ def query_booking_info(params: dict) -> str:
|
||||
params['access_token'] = access_token
|
||||
params['startTimeStamp'] = get_time_info(0)
|
||||
params['endTimeStamp'] = get_time_info(10)
|
||||
# 查询所有已预定的会议
|
||||
meeting_room = getinfo.query_meetingbooking_info(params)
|
||||
# 过滤掉已经取消的会议
|
||||
result = params_filter.filter_state(meeting_room)
|
||||
# print(result)
|
||||
return json.loads(json.dumps(result))
|
||||
@@ -221,12 +229,22 @@ def query_booking_info(params: dict) -> str:
|
||||
return error_respones.format("查询已预定会议")
|
||||
|
||||
|
||||
def query_booking_info_by_user(params: dict):
|
||||
def query_booking_info_by_user(params: dict, data=None):
|
||||
logger.info("Start to query_booking_info_by_user")
|
||||
user_id = params.get('user_id', None)
|
||||
params['pageSize'] = by_user_query_size
|
||||
if not user_id:
|
||||
return query_booking_info(params)
|
||||
region = data.get('Region', None)
|
||||
start_time = data.get('start_time', None)
|
||||
end_time = data.get('end_time', None)
|
||||
if start_time or end_time:
|
||||
time_date = getinfo.standard_format(start_time) or getinfo.standard_format(end_time)
|
||||
current_date = time_date.split(' ')[0]
|
||||
mintime = datetime.min.time().strftime('%H:%M:%S')
|
||||
maxtime = datetime.max.time().strftime('%H:%M:%S')
|
||||
start_time = getinfo.standard_format(start_time) or " ".join((current_date, mintime))
|
||||
end_time = getinfo.standard_format(end_time) or " ".join((current_date, maxtime))
|
||||
try:
|
||||
all_book_info = query_booking_info(params)
|
||||
if isinstance(all_book_info, dict):
|
||||
@@ -234,13 +252,29 @@ def query_booking_info_by_user(params: dict):
|
||||
rooms = all_book_info.get("data", [])
|
||||
logger.debug("rooms is {0}".format(rooms))
|
||||
book_info = []
|
||||
# 从所有已预定会议中过滤出当前用户的预定会议
|
||||
if rooms:
|
||||
for room in rooms:
|
||||
filtered_meetings = [meeting for meeting in room['meetingDTOList'] if meeting['ownerId'] == user_id]
|
||||
room_name = room['meetingDTOList'][0].get('meetingRoomName')
|
||||
|
||||
if region and region not in room_name :
|
||||
continue
|
||||
filtered_meetings = []
|
||||
for meeting in room['meetingDTOList']:
|
||||
if meeting['ownerId'] == user_id:
|
||||
m_start = getinfo.standard_format(meeting['startTimeStamp'])
|
||||
m_end = getinfo.standard_format(meeting['endTimeStamp'])
|
||||
if start_time and end_time:
|
||||
if getinfo.is_time_overlap([start_time, end_time], [m_start, m_end]):
|
||||
filtered_meetings.append(meeting)
|
||||
else:
|
||||
filtered_meetings.append(meeting)
|
||||
|
||||
if filtered_meetings:
|
||||
filter_room = room.copy()
|
||||
filter_room['meetingDTOList'] = filtered_meetings
|
||||
book_info.append(filter_room)
|
||||
|
||||
result = {'code': all_book_info['code'], 'data': book_info}
|
||||
logger.info("result is -----------",result)
|
||||
return result
|
||||
@@ -252,11 +286,10 @@ def query_booking_info_by_user(params: dict):
|
||||
logger.error("location: query_booking_info_by_user => {0}".format(str(e)))
|
||||
return error_respones.format(f"查询指定用户{user_id}已预定会议")
|
||||
|
||||
|
||||
'''
|
||||
预定会议
|
||||
'''
|
||||
|
||||
|
||||
def book_meeting(params: dict, data: dict) -> str:
|
||||
"""
|
||||
data {
|
||||
@@ -432,7 +465,7 @@ def build_prompt(params,map_meetingname_to_id:list):
|
||||
"func_name":"query_avali_room",
|
||||
"start_time":"",
|
||||
"end_time":"",
|
||||
"Region":"",
|
||||
"Region":"",
|
||||
"capacity":""
|
||||
}
|
||||
'''
|
||||
@@ -455,7 +488,10 @@ def build_prompt(params,map_meetingname_to_id:list):
|
||||
'''
|
||||
qry_user_book_info_for_mart_str = '''
|
||||
{
|
||||
"func_name":"query_user_booking_info"
|
||||
"func_name":"query_user_booking_info",
|
||||
"Region":"",
|
||||
"start_time":"",
|
||||
"end_time":""
|
||||
}
|
||||
'''
|
||||
cancel_meeting_info_for_mart_str = '''
|
||||
@@ -513,7 +549,7 @@ def build_prompt(params,map_meetingname_to_id:list):
|
||||
```
|
||||
{book_for_mart_str}
|
||||
```
|
||||
2. 用户需要查询已有的会议室预订情况或者预订情况时,实时查询,禁止使用历史对话数据,禁止假设返回信息,直接构造并返回json,示例如下:
|
||||
2. 用户需要查询已有的会议室预订情况或者会议预订情况时,实时查询,禁止使用历史对话数据,禁止假设返回信息,(会议地区Region,会议开始和结束时间可以为空),直接构造并返回json,示例如下:
|
||||
```
|
||||
{qry_user_book_info_for_mart_str}
|
||||
```
|
||||
@@ -740,7 +776,7 @@ def process_query_book_room(**kwargs) -> tuple:
|
||||
查询指定用户的已预定信息
|
||||
'''
|
||||
def process_user_query_book_room(**kwargs) -> tuple:
|
||||
result = query_booking_info_by_user(params=kwargs['params'])
|
||||
result = query_booking_info_by_user(params=kwargs['params'], data=kwargs['data'])
|
||||
book_promot = f'''
|
||||
系统调用API查询当前租户下已经预订的会议室的结果如下(如果有一个或多个已预定会议,必须对返回的已预定会议按顺序编号):
|
||||
{result}
|
||||
@@ -816,6 +852,7 @@ func_tion_call_map = {
|
||||
|
||||
|
||||
def extract_json_blocks(text):
|
||||
#过滤出带{}的json块
|
||||
json_blocks = re.findall(r'\{[^{}]*\}', text)
|
||||
valid_blocks = []
|
||||
for block in json_blocks:
|
||||
@@ -866,10 +903,10 @@ def process_chat(covers_id:str,user_id: str, user_input: str, params: dict):
|
||||
redis_message_manage.set_history(covers_id, req.all_messages())
|
||||
content = req.output
|
||||
logger.info(f"process chat content is : {content}")
|
||||
content = check_and_process_think(content)
|
||||
if "func_name" in content:
|
||||
# 去除think的之前的数据再提取
|
||||
text = check_and_process_think(content)
|
||||
json_content = extract_json_blocks(text)
|
||||
json_content = extract_json_blocks(content)
|
||||
logger.info("jsoncontent----------{0}".format(json_content))
|
||||
# if not json_content:
|
||||
# json_content = extract_json_blocks(content)
|
||||
|
||||
@@ -23,7 +23,6 @@ QUERY_MEETING_ROOM = config('QUERY_MEETING_ROOM', default="")
|
||||
QUERY_MEETINGBOOKING_INFO = config('QUERY_MEETINGBOOKING_INFO', default="")
|
||||
BOOKMEETING = config('BOOKMEETING', default="")
|
||||
CANCEL_MEETING = config('CANCEL_MEETING', default="")
|
||||
# CANCEL_MEETING2 = config('CANCEL_MEETING2', default="")
|
||||
EDIT_MEETING = config('EDIT_MEETING', default="")
|
||||
DEFAULT_HEADER = {'Content-Type': 'application/json'}
|
||||
page_size = config('DEFAULT_PAGESIZE', default=50, cast=int)
|
||||
@@ -52,6 +51,8 @@ def check_required_params(required_fields, params):
|
||||
标准时间转化
|
||||
'''
|
||||
def standard_format(time_str):
|
||||
if not time_str:
|
||||
return
|
||||
try:
|
||||
if time_str.isdigit():
|
||||
logger.info("是时间戳格式")
|
||||
@@ -101,6 +102,7 @@ def get_access_token(tenant_id):
|
||||
params['timestamp'] = str(int(time.time() * 1000))
|
||||
params['appKey'] = APPKEY
|
||||
app_secret = APPSECRET
|
||||
# 生成签名
|
||||
sort_param = sign_opt.opt_sort_data(params)
|
||||
signature = sign_opt.opt_sha256(app_secret, sort_param)
|
||||
params["signature"] = signature
|
||||
@@ -135,6 +137,7 @@ def get_access_token(tenant_id):
|
||||
获取租户所在中心域名
|
||||
'''
|
||||
def get_domain(params):
|
||||
# 返回的中心域名,包含token的,以及会议室请求相关的
|
||||
logger.info(f"Start to get domain , params is {params}")
|
||||
params = deepcopy(params)
|
||||
request_url = DEFAULT_AUTH_URL + GATEWAY_INTF
|
||||
|
||||
@@ -30,7 +30,9 @@ def filter_params(data, endpoint_name):
|
||||
return [filter_params(item, endpoint_name) for item in data]
|
||||
return data
|
||||
|
||||
|
||||
'''
|
||||
将已取消的从已预定会议中过滤掉
|
||||
'''
|
||||
def filter_state(content: dict):
|
||||
filtered_data = []
|
||||
for room in content['data']:
|
||||
@@ -51,6 +53,9 @@ def filter_state(content: dict):
|
||||
result = {'code': content['code'], 'data': filtered_data}
|
||||
return result
|
||||
|
||||
'''
|
||||
过滤掉未启用的会议室
|
||||
'''
|
||||
def filter_meetingroom(data: dict):
|
||||
new_data = deepcopy(data)
|
||||
filtered_rooms = []
|
||||
|
||||
Reference in New Issue
Block a user