def recommend_travel_group_list(user, amount=10): # 遍历好友的旅行记录 # 根据时间和今天的距离排序进行推荐 # 总数不超过amount user_id = user.get_user_id() friend_list = user.get_friend_list() other_travel_group_list = [] for fr in friend_list: for tg_id in user.get_others_travel_group_list(fr): travel_group = mod_travel.TravelGroup(user_id=user_id, travel_group_id=tg_id) travel_list = travel_group.get_travel_list() if len(travel_list) == 0: continue travel = mod_travel.Travel(user_id=user_id, travel_id=travel_list[0]) company_list = travel.get_company_list() # 得到朋友travel的company,自己不允许出现在里面 if user_id not in company_list: rep_time = travel.get_travel_info().get_date_start() # represent time in isoformat # e.g. "1989-06-04" other_travel_group_list.append({ 'travel_group_id': tg_id, 'time_delta_days': get_time_delta_days(rep_time) }) other_travel_group_list.sort(key=lambda x: x['time_delta_days']) return generate_rec_list(other_travel_group_list, amount, key="travel_group_id")
def recommend_travel_list_by_travel(user, travel_id, amount=5, max_dist=1200): # 遍历好友的旅行记录 # 根据城市和该travel的距离、时间间隔排序进行推荐 # 总数不超过amount user_id = user.get_user_id() travel = mod_travel.Travel(user_id, travel_id) # travel 是Travel类实例对象 travel_info = travel.get_travel_info() my_city = travel_info.get_city_id() friend_list = user.get_friend_list() # friend id list other_travel_group_list = [] for fr in friend_list: for tg_id in user.get_others_travel_group_list(fr): travel_group = mod_travel.TravelGroup(user_id=user_id, travel_group_id=tg_id) # rep_time = mod_travel.Travel(user_id=user_id, travel_id=travel_list[0]).get_travel_info().get_date_start() for travel_id in travel_group.get_travel_list(): travel = mod_travel.Travel(user_id=user_id, travel_id=travel_id) company_list = travel.get_company_list() if user_id not in company_list: rep_time = travel.get_travel_info().get_date_start() city = travel.get_travel_info().get_city_id() dist = get_city_distance(my_city, city) if (city != my_city) and (dist < max_dist): other_travel_group_list.append({ "travel_id": travel_id, "time_delta_days": get_time_delta_days(rep_time), "city_distance": dist }) other_travel_group_list.sort(key=lambda x: ((int(x['city_distance'] / 50)) ** 2 + (int(x['time_delta_days'] / 1)) ** 2)) return generate_rec_list(other_travel_group_list, amount, key="travel_id")
def recommend_city_list_by_travel(user, travel_id, amount=3, max_dist=1200): # 遍历好友的旅行记录 # 根据城市和该travel的距离排序进行推荐 # 不包括本城市 # 总数不超过amount user_id = user.get_user_id() travel = mod_travel.Travel(user_id, travel_id) # travel 是Travel类实例对象 travel_info = travel.get_travel_info() my_city = travel_info.get_city_id() friend_list = user.get_friend_list() # friend id list other_travel_group_list = [] for fr in friend_list: for tg_id in user.get_others_travel_group_list(fr): travel_group = mod_travel.TravelGroup(user_id=user_id, travel_group_id=tg_id) for travel_id in travel_group.get_travel_list(): travel = mod_travel.Travel(user_id=user_id, travel_id=travel_id) company_list = travel.get_company_list() if user_id not in company_list: city = travel.get_travel_info().get_city_id() dist = get_city_distance(my_city, city) if (city != my_city) and (dist < max_dist): other_travel_group_list.append({ 'city_id': city, 'city_distance': dist }) other_travel_group_list.sort(key=lambda x: x['city_distance']) return generate_rec_list(other_travel_group_list, amount, key="city_id")
def remove_travel(request_data): travel_group = mod_travel.TravelGroup(user_id=request_data['user_id'], travel_group_id=request_data['travel_group_id']) travel_group.remove_travel(travel_id=request_data['travel_id']) response = {} return response
def move_travel(request_data): travel_group = mod_travel.TravelGroup(user_id=request_data['user_id'], travel_group_id=request_data['travel_group_id']) travel_group.move_travel_to_other_group(travel_id=request_data['travel_id'], other_travel_group_id=request_data['other_travel_group_id']) response = {} return response
def set_travel_group_info(request_data): travel_group = mod_travel.TravelGroup(user_id=request_data['user_id'], travel_group_id=request_data['travel_group_id']) travel_group.set_travel_group_name(name=request_data['travel_group_name']) travel_group.set_travel_group_note(note=request_data['travel_group_note']) travel_group.set_travel_group_color(color=request_data['travel_group_color']) response = {} return response
def get_travel_list(request_data): travel_group = mod_travel.TravelGroup(user_id=request_data['user_id'], travel_group_id=request_data['travel_group_id']) travel_list = travel_group.get_travel_list() response = { 'count': len(travel_list), 'travel_list': travel_list } return response
def get_others_travel_group_info_list(request_data): user = LOGGED_IN_USERS[request_data['user_id']] others_travel_group_list = user.get_others_travel_group_list(other_user_id=request_data['other_user_id']) response = { 'count': len(others_travel_group_list), 'travel_group_info_list': [dict(mod_travel.TravelGroup(user_id=user.get_user_id(), travel_group_id=travel_group_id)) for travel_group_id in others_travel_group_list] } return response
def get_others_all_travel_group_details(request_data): user = LOGGED_IN_USERS[request_data['user_id']] others_travel_group_list = user.get_others_travel_group_list(other_user_id=request_data['other_user_id']) travel_group_list = [mod_travel.TravelGroup(user_id=user.get_user_id(), travel_group_id=travel_group_id) for travel_group_id in others_travel_group_list] response = { 'count': len(travel_group_list), 'travel_group_info_list': [travel_group.get_travel_group_detail() for travel_group in travel_group_list] } return response
def add_travel(request_data): travel_group = mod_travel.TravelGroup(user_id=request_data['user_id'], travel_group_id=request_data['travel_group_id']) travel = travel_group.add_travel(date_start=request_data['date_start'], date_end=request_data['date_end'], city_id=request_data['city_id'], travel_note=request_data['travel_note'], visibility=request_data['visibility']) response = { 'travel_id': travel.get_travel_id() } return response
def get_travel_info_list(request_data): user_id = request_data['user_id'] travel_group = mod_travel.TravelGroup(user_id=user_id, travel_group_id=request_data['travel_group_id']) travel_list = travel_group.get_travel_list() response = { 'count': len(travel_list), 'travel_info_list': [dict(mod_travel.TravelInfo(user_id=user_id, travel_id=travel_id)) for travel_id in travel_list] } return response
def copy_travel(request_data): user_id = request_data['user_id'] src_travel = mod_travel.Travel(user_id=user_id, travel_id=request_data['source_travel_id']) src_travel_info = src_travel.get_travel_info() src_travel_group_dbobj = mod_travel.get_travel_group_instance_by_travel_id(travel_id=src_travel.get_travel_id()) src_travel_owner_user_dbobj = mod_travel.get_travel_group_owner_user_instance( travel_group_id=src_travel_group_dbobj.travel_group_id) travel_group = mod_travel.TravelGroup(user_id=user_id, travel_group_id=request_data['travel_group_id']) new_travel = travel_group.add_travel(city_id=src_travel_info.get_city_id(), date_start=isoformat_to_date(src_travel_info.get_date_start()), date_end=isoformat_to_date(src_travel_info.get_date_end()), travel_note=src_travel_info.get_travel_note(), visibility=src_travel_info.get_visibility()) if user_id in src_travel.get_company_list() and request_data['add_association']: new_travel.add_company(company_user_id=src_travel_owner_user_dbobj.user_id) response = { 'new_travel_id': new_travel.get_travel_id() } return response
def get_travel_group_info(request_data): travel_group = mod_travel.TravelGroup(user_id=request_data['user_id'], travel_group_id=request_data['travel_group_id']) response = dict(travel_group) return response
def get_travel_group_details(request_data): travel_group = mod_travel.TravelGroup(user_id=request_data['user_id'], travel_group_id=request_data['travel_group_id']) response = travel_group.get_travel_group_detail() return response