def get_own_card_in_make_card(): """ 拉取制作名片的相关信息 :return: """ obj = BusinessCardModel.get_name_card(g.open_id) if not obj: obj = { "avatar": session['user_data']['headimgurl'], "name": '', "company": '', "industry": u'互联网/软件', "role": u'产品', "resources_key": '', "invitation_code": '', "province": '', "city": '', "area": '', } obj['target_url'] = '/api/v1/generatedNameCard' else: obj['target_url'] = '/api/v1/updateNameCard' # 处理登录跳转接口 if 'group_token' in session: obj['after_login_url'] = url_for('web_app.all_cards', group_token=session['group_token']) else: obj['after_login_url'] = url_for('web_app.contact_list') obj = BusinessCardModel.handle_data_use_in_json(obj) response = make_response(json.dumps(obj)) response.headers['Content-Type'] = 'application/json' return response
def join_card_by_user_code(): """ 扫描二维码跳转页面 :return: """ # 由于该页面是一个主入口,逻辑处理需要严谨 # 必须参数,from_open_id: 来源用户,invitation_code:邀请码 from_open_id = request.args.get('from_open_id', None) invitation_code = request.args.get('invitation_code', None) if from_open_id is None or invitation_code is None: return abort(404) # 检查来源用户是否存在 if not BusinessCardModel.has_card(from_open_id): return abort(404) # 检查邀请码???(暂时忽略) pass # 如果是自己扫描自己的二维码,就什么都不处理,跳转到资源社区主页 if g.open_id == from_open_id: return redirect(url_for('web_app.contact_list')) # 用户已经生成名片,发送申请资源请求,跳转到资源社区主页 if BusinessCardModel.has_card(g.open_id): ApplyFriendsModel.apply_friend(g.open_id, from_open_id, u'通过扫描您的海报申请资源对接') return redirect(url_for('web_app.contact_list')) # 用户还没有生成名片,跳转到生成名片页面 return redirect(url_for('web_app.build_card') + "?from_open_id=" + from_open_id + "&invitation_code=" + invitation_code)
def get_card_of_a_prople(open_id): """ 获取某位用户的信息 :param open_id: 用户openid :return: """ if not BusinessCardModel.has_card(open_id): return abort(404) card = BusinessCardModel.get_name_card(open_id) card = BusinessCardModel.handle_data_use_in_json(card) if card['redundancy_labels']: card['keys'] = card['redundancy_labels'].split('#') else: card['keys'] = [] if FriendModel.is_friend(g.open_id, open_id) or open_id == g.open_id: card['is_friend'] = 0 else: card['is_friend'] = 1 # 判断是不是自己 if open_id == g.open_id: card['is_me'] = 0 else: card['is_me'] = 1 response = make_response(json.dumps(card)) response.headers['Content-Type'] = 'application/json' return response
def generated_name_card(): """ 生成名片接口 @author: yubang :return: str """ open_id = g.open_id name = request.form.get('name', None) company = request.form.get('company', None) industry = request.form.get('industry', None) resources_key = request.form.get('resources_key', None) avatar = request.form.get('avatar', None) role = request.form.get('role', None) invitation_code = request.form.get('invitation_code', None) # 省市 province = request.form.get('province', None) city = request.form.get('city', None) area = request.form.get('area', None) # 检测邀请码 if not BusinessCardModel.check_invitation_code(invitation_code): response = make_response(json.dumps({"code": -5, "msg": u'邀请码不正确!'})) response.headers['Content-Type'] = 'application/json' return response r = BusinessCardModel.make_a_card(open_id, name, company, industry, resources_key, avatar, role, invitation_code, province, city, area) result = dict() if r: result['code'] = 0 result['msg'] = 'ok' else: result['code'] = 0 result['msg'] = u'请勿重复生成名片!' # 处理加入群情况 if 'group_token' in session: try: GroupRecordModel.join_group(g.open_id, session['group_token']) except: pass # 特殊处理扫描海报二维码后生成名片的情况 from_open_id = request.form.get('from_open_id', None) if from_open_id and BusinessCardModel.has_card(from_open_id): ApplyFriendsModel.apply_friend(g.open_id, from_open_id, u'通过扫描您的海报申请资源对接') response = make_response(json.dumps(result)) response.headers['Content-Type'] = 'application/json' return response
def apply_friend(): """ 申请添加好友页面 :return: """ target_open_id = request.args.get('open_id', None) source_open_id = g.open_id if not BusinessCardModel.has_card(target_open_id) or not BusinessCardModel.has_card(source_open_id): return abort(404) return send_file('templates/v1/apply_friend.html', cache_timeout=0)
def update_card(): """ 修改名片页面 :return: """ if not BusinessCardModel.has_card(g.open_id): return redirect(url_for('web_app.build_card')) card = BusinessCardModel.get_name_card(g.open_id) g.target_url = '/api/v1/updateNameCard' return send_file('templates/v1/build_card.html', cache_timeout=0)
def chat_html(friend_open_id): """ 聊天页面 :param friend_open_id: 好友openid :return: """ own_card = BusinessCardModel.get_name_card(g.open_id) friend_card = BusinessCardModel.get_name_card(friend_open_id) obj = {"own_card": own_card, "friend_card": friend_card} title = friend_card['name'] return render_template("v1/chat.html", title=title, friend_open_id=friend_open_id, obj=obj)
def add_friend(cls, source_open_id, target_open_id): """ 添加好友 :param source_open_id: 用户1openid :param target_open_id: 用户2openid :return: boolean """ if cls.is_friend(source_open_id, target_open_id): return False if not BusinessCardModel.has_card(target_open_id): return False if source_open_id == target_open_id: return False sql = "insert into " + cls.get_table_name() + "(source_open_id, target_open_id, status, create_time) " \ "values(%s, %s, 0, now());" db_lib = cls.get_db_lib() db_lib.insert(sql, [source_open_id, target_open_id]) db_lib.insert(sql, [target_open_id, source_open_id]) # 异步通知修改冗余标签 get_update_card_redundancy_labels_dao().delay(source_open_id, target_open_id) return True
def generated_name_card(): """ 生成名片接口 @author: yubang :return: str """ open_id = g.open_id name = request.form.get('name', None) company = request.form.get('company', None) industry = request.form.get('industry', None) resources = request.form.get('resources', None) resources_label = request.form.get('resources_label', None) resources_key = request.form.get('resources_key', None) avatar = request.form.get('avatar', None) r = BusinessCardModel.make_a_card(open_id, name, company, industry, resources, resources_label, resources_key, avatar) result = dict() if r: result['code'] = 0 result['msg'] = 'ok' else: result['code'] = -1 result['msg'] = u'请勿重复生成名片!' response = make_response(json.dumps(result)) response.headers['Content-Type'] = 'application/json' return response
def get_cards(): """ 获取名片列表 :return: """ page = request.form.get('page', None) search_nickname = request.form.get('search_nickname', None) status = request.form.get('status', None) page = int(page) if int(status) == 0: order_by_str = " order by id asc " else: order_by_str = " order by id desc " objs, nums = BusinessCardModel.get_a_page_of_cards(page, 10, search_nickname, order_by_str) max_page = nums / 10 if nums % 10: max_page += 1 r = make_response(json.dumps({"objs": objs, "max_page": max_page, "page": page})) r.headers['Content-Type'] = 'application/json' return r
def search_name_card(page, count_of_page): """ 搜索名片接口 :param page: 页数 :param count_of_page: 每页记录数 @author: yubang :return: """ industry = request.form.get('industry', None) role = request.form.get('role', None) search_key = request.form.get('search_key', None) if search_key is None or industry is None or role is None: return abort(404) objs, nums, max_page = BusinessCardModel.search_cards( g.open_id, industry.encode("UTF-8"), role.encode("UTF-8"), search_key.encode("UTF-8"), page, count_of_page) response = make_response( json.dumps({ "objs": objs, "nums": nums, "max_page": max_page })) response.headers['Content-Type'] = 'application/json' return response
def update_name_card(): """ 更新个人名片信息 :return: """ open_id = g.open_id name = request.form.get('name', None) company = request.form.get('company', None) industry = request.form.get('industry', None) resources = request.form.get('resources', None) resources_label = request.form.get('resources_label', None) resources_key = request.form.get('resources_key', None) avatar = request.form.get('avatar', None) result = {"code": 0, "msg": 'ok'} r = BusinessCardModel.update_a_card(open_id, name, company, industry, resources, resources_label, resources_key, avatar) if not r: result['code'] = -1 result['msg'] = u'修改失败!' response = make_response(json.dumps(result)) response.headers['Content-Type'] = 'application/json' return response
def get_cards(): """ 获取名片列表 :return: """ page = request.form.get('page', None) search_nickname = request.form.get('search_nickname', None) status = request.form.get('status', None) page = int(page) if int(status) == 0: order_by_str = " order by id asc " else: order_by_str = " order by id desc " objs, nums = BusinessCardModel.get_a_page_of_cards(page, 10, search_nickname, order_by_str) max_page = nums / 10 if nums % 10: max_page += 1 r = make_response( json.dumps({ "objs": objs, "max_page": max_page, "page": page })) r.headers['Content-Type'] = 'application/json' return r
def apply_friend(): """ 申请添加好友 :return: """ source_open_id = g.open_id target_open_id = request.form.get('target_open_id', None) remarks = request.form.get('remarks', None) if not BusinessCardModel.has_card( target_open_id) or not BusinessCardModel.has_card(source_open_id): return abort(404) r = ApplyFriendsModel.apply_friend(source_open_id, target_open_id, remarks) response = make_response(json.dumps({"r": r})) response.headers['Content-Type'] = 'application/json' return response
def people(open_id): """ 联系人列表 :param open_id: 用户openid :return: """ if not BusinessCardModel.has_card(open_id): return abort(404) return send_file('templates/v1/people.html', cache_timeout=0)
def delete_card(card_id): """ 删除一张名片 :param card_id: 名片id :return: """ r = BusinessCardModel.delete_card(card_id) response = make_response(json.dumps({"code": r})) response.headers['Content-Type'] = 'application/json' return response
def get_recommended_for_you(page, count_of_page): """ 获取为你推荐接口 @author: yubang :return: """ objs, nums, max_page = BusinessCardModel.get_own_recommend_cards(g.open_id, page, count_of_page) response = make_response(json.dumps({"objs": objs, "nums": nums, "max_page": max_page})) response.headers['Content-Type'] = 'application/json' return response
def get_contacts(): """ 获取联系人接口 @author: yubang :return: str """ open_id = g.open_id objs = FriendModel.get_all_friends(open_id) # 处理搜索条件 search_key = request.form.get('search_key', None).encode("UTF-8") industry = request.form.get('industry', None).encode("UTF-8") role = request.form.get('role', None).encode("UTF-8") output_objs = [] for obj in objs: if obj['name'].encode('UTF-8').find( search_key) == -1 and obj['company'].encode('UTF-8').find( search_key) == -1 and obj['redundancy_labels'].encode( 'UTF-8').find(search_key) == -1: continue if obj['industry'].encode('UTF-8').find(industry) == -1: continue if obj['role'].encode('UTF-8').find(role) == -1: continue output_objs.append(obj) objs = output_objs # 添加自己的信息 card = BusinessCardModel.get_name_card(g.open_id) card['name_pinyin'] = '' card = BusinessCardModel.handle_data_use_in_json(card) objs.insert(0, card) result = {"code": 0, "msg": 'ok', "content": objs} response = make_response(json.dumps(result)) response.headers['Content-Type'] = 'application/json' return response
def build_card(): """ 生成名片页面 :return: """ if BusinessCardModel.has_card(g.open_id): return redirect(url_for('web_app.update_card')) g.target_url = '/api/v1/generatedNameCard' return send_file('templates/v1/build_card.html', cache_timeout=0)
def recommend_card(card_id, status): """ 处理小编推荐接口 :param card_id: 名片ID :param status: 名片推荐状态 :return: """ r = BusinessCardModel.recommend_card(card_id, status) response = make_response(json.dumps({"code": r})) response.headers['Content-Type'] = 'application/json' return response
def get_all_friends(cls, open_id): """ 获取用户所有好友 :param open_id: 用户id :return: """ t = " %s as A, %s as B " % (cls.get_table_name(), BusinessCardModel.get_table_name()) sql = "select B.name, B.company, B.open_id, B.avatar, B.industry, B.name_pinyin, B.role, B.redundancy_labels from " + t + " where A.source_open_id = %s AND A.status = 0 AND A.target_open_id = B.open_id order by B.name_pinyin asc;" db_lib = cls.get_db_lib() objs = db_lib.query_for_list(sql, [open_id]) return objs
def get_all_friends(cls, open_id): """ 获取用户所有好友 :param open_id: 用户id :return: """ t = " %s as A, %s as B " % (cls.get_table_name(), BusinessCardModel.get_table_name()) sql = "select B.name, B.company, B.open_id, B.avatar, B.industry, B.name_pinyin from " + t + " where A.source_open_id = %s AND A.status = 0 AND A.target_open_id = B.open_id order by B.name asc;" db_lib = cls.get_db_lib() objs = db_lib.query_for_list(sql, [open_id]) return objs
def get_chat_need_message(): """ 获取聊天页面初始化信息 :return: """ friend_open_id = request.form.get('friend_open_id', None) own_card = BusinessCardModel.get_name_card(g.open_id) own_card = BusinessCardModel.handle_data_use_in_json(own_card) friend_card = BusinessCardModel.get_name_card(friend_open_id) friend_card = BusinessCardModel.handle_data_use_in_json(friend_card) obj = {"own_card": own_card, "friend_card": friend_card} title = friend_card['name'] r = {'own_card': own_card, 'title': title, 'obj': obj} response = make_response(json.dumps(r)) response.headers['Content-Type'] = 'application/json' return response
def get_editor_recommend(page, count_of_page): """ 获取小编推荐接口 :param page: 页数 :param count_of_page: 每页记录数 @author: yubang :return: """ objs, nums, max_page = BusinessCardModel.get_recommend_cards(g.open_id, page, count_of_page) response = make_response(json.dumps({"objs": objs, "nums": nums, "max_page": max_page})) response.headers['Content-Type'] = 'application/json' return response
def update_name_card(): """ 更新个人名片信息 :return: """ open_id = g.open_id name = request.form.get('name', None) company = request.form.get('company', None) industry = request.form.get('industry', None) resources_key = request.form.get('resources_key', None) avatar = request.form.get('avatar', None) role = request.form.get('role', None) result = {"code": 0, "msg": 'ok'} invitation_code = request.form.get('invitation_code', None) # 省市 province = request.form.get('province', None) city = request.form.get('city', None) area = request.form.get('area', None) # 检测邀请码 if not BusinessCardModel.check_invitation_code(invitation_code): response = make_response(json.dumps({"code": -5, "msg": u'邀请码不正确!'})) response.headers['Content-Type'] = 'application/json' return response r = BusinessCardModel.update_a_card(open_id, name, company, industry, resources_key, avatar, role, invitation_code, province, city, area) if not r: # 防止什么都没修改 result['code'] = 0 result['msg'] = u'修改失败!' response = make_response(json.dumps(result)) response.headers['Content-Type'] = 'application/json' return response
def poster(open_id): """ 用户海报页面 (注意,该页面不需要登录校验~~~~) :return: """ if not BusinessCardModel.has_card(open_id): return abort(404) card = BusinessCardModel.get_name_card(open_id) if card['redundancy_labels']: card['keys'] = card['redundancy_labels'].split('#') # 只取前5个 if len(card['keys']) > 5: card['keys'] = card['keys'][:5] else: card['keys'] = [] # 生成二维码地址 url = url_for('web_app.join_card_by_user_code', _external=True)+ "?from_open_id=" + card['open_id'] + "&invitation_code=" + card['invitation_code'] card['url'] = urllib.quote(url) return render_template('v1/poster.html', card=card)
def get_recommended_for_you(page, count_of_page): """ 获取为你推荐接口 @author: yubang :return: """ objs, nums, max_page = BusinessCardModel.get_own_recommend_cards( g.open_id, page, count_of_page) response = make_response( json.dumps({ "objs": objs, "nums": nums, "max_page": max_page })) response.headers['Content-Type'] = 'application/json' return response
def search_name_card(page, count_of_page): """ 搜索名片接口 :param page: 页数 :param count_of_page: 每页记录数 @author: yubang :return: """ name = request.form.get('name', None) company = request.form.get('company', None) resources_label = request.form.get('resources_label', None) resources_key = request.form.get('resources_key', None) objs, nums, max_page = BusinessCardModel.search_cards(g.open_id, name, company, resources_label, resources_key, page, count_of_page) response = make_response(json.dumps({"objs": objs, "nums": nums, "max_page": max_page})) response.headers['Content-Type'] = 'application/json' return response
def get_editor_recommend(page, count_of_page): """ 获取小编推荐接口 :param page: 页数 :param count_of_page: 每页记录数 @author: yubang :return: """ objs, nums, max_page = BusinessCardModel.get_recommend_cards( g.open_id, page, count_of_page) response = make_response( json.dumps({ "objs": objs, "nums": nums, "max_page": max_page })) response.headers['Content-Type'] = 'application/json' return response
def send_message(cls, from_open_id, to_open_id, message, message_type): """ 发送一条消息 :param from_open_id: 发送方openid :param to_open_id: 接收方openid :param message: 消息内容 :param message_type: 消息类型,0为文字 :return: """ # 判断目标用户是否存在 if not BusinessCardModel.has_card(to_open_id): return 0 sql = "insert into " + cls.table_name + "(from_open_id, to_open_id, message_content, message_type, status, " \ "create_time) values(%s, %s, %s, %s, 0, now());" r = cls.db_lib.insert(sql, [from_open_id, to_open_id, message, message_type]) return r
def card(open_id): """ 获取个人名片 :param open_id: 名片openid :return: """ card = BusinessCardModel.get_name_card(open_id) if not card: return abort(404) url = url_for("api.add_friend", _external=True, friend_open_id=open_id) url = urllib.quote(url) if card['redundancy_labels']: card['keys'] = card['redundancy_labels'].split('#') else: card['keys'] = [] return render_template('v1/card.html', card=card, url=url)
def to_wechat_link(group_token): """ 微信群的链接 :return: """ if not GroupLinksModel.has_link(group_token): return abort(404) session['group_token'] = group_token if BusinessCardModel.has_card(g.open_id): # 判断是否要添加入群 if not GroupRecordModel.has_join_group(g.open_id, group_token): GroupRecordModel.join_group(g.open_id, group_token) log.info(u'%s执行了记录加入群的数据库操作' % g.open_id) log.info(u'%s点击了群链接' % g.open_id) return redirect(url_for('web_app.all_cards', group_token=group_token)) else: return redirect(url_for('web_app.build_card') + "?group_token="+group_token)
def get_name_card(): """ 拉取个人名片信息 @author: yubang :return: """ open_id = g.open_id obj = BusinessCardModel.get_name_card(open_id) result = {"code": 0, "msg": 'ok'} if not obj: result['code'] = -1 result['msg'] = u'还没生成名片' else: obj['create_time'] = obj['create_time'].strftime("%Y-%m-%d %H:%M:%S") obj['update_time'] = obj['update_time'].strftime("%Y-%m-%d %H:%M:%S") result['content'] = obj response = make_response(json.dumps(result)) response.headers['Content-Type'] = 'application/json' return response
def add_friend(cls, source_open_id, target_open_id): """ 添加好友 :param source_open_id: 用户1openid :param target_open_id: 用户2openid :return: boolean """ if cls.is_friend(source_open_id, target_open_id): return False if not BusinessCardModel.has_card(target_open_id): return False if source_open_id == target_open_id: return False sql = "insert into " + cls.get_table_name() + "(source_open_id, target_open_id, status, create_time) " \ "values(%s, %s, 0, now());" db_lib = cls.get_db_lib() db_lib.insert(sql, [source_open_id, target_open_id]) db_lib.insert(sql, [target_open_id, source_open_id]) return True
def search_name_card(page, count_of_page): """ 搜索名片接口 :param page: 页数 :param count_of_page: 每页记录数 @author: yubang :return: """ name = request.form.get('name', None) company = request.form.get('company', None) resources_label = request.form.get('resources_label', None) resources_key = request.form.get('resources_key', None) objs, nums, max_page = BusinessCardModel.search_cards( g.open_id, name, company, resources_label, resources_key, page, count_of_page) response = make_response( json.dumps({ "objs": objs, "nums": nums, "max_page": max_page })) response.headers['Content-Type'] = 'application/json' return response
def handle(*k, **v): if not BusinessCardModel.has_card(g.open_id): return redirect(url_for('web_app.build_card')) return fn(*k, **v)
def get_last_chat_message(cls, open_id): """ 获取最后一条联系人信息 :param open_id: :return: """ temp_str = "(select * from %s order by create_time desc) temp_table" % cls.table_name sql = "select * from " + temp_str + " where to_open_id = %s group by from_open_id order by create_time desc" objs = cls.get_db_lib().query_for_list(sql, [open_id]) r = list() for obj in objs: r.append(obj) sql = "select * from " + temp_str + " where from_open_id = %s group by to_open_id" objs = cls.get_db_lib().query_for_list(sql, [open_id]) new_objs = [] for obj in objs: index = 0 exist_sign = False while index < len(r): if obj['to_open_id'] == r[index]['from_open_id']: if obj['create_time'].now() > r[index]['create_time'].now(): r[index] = obj exist_sign = True break index += 1 if not exist_sign: new_objs.append(obj) r.extend(new_objs) # 填充联系人信息 index = 0 while index < len(r): if r[index]['to_open_id'] != open_id: r[index]['user'] = BusinessCardModel.get_name_card(r[index]['to_open_id']) else: r[index]['user'] = BusinessCardModel.get_name_card(r[index]['from_open_id']) r[index]['user'] = BusinessCardModel.handle_data_use_in_json(r[index]['user']) r[index]['message_nums'] = cls.get_message_number(open_id, r[index]['user']['open_id']) index += 1 # 特殊处理资源小助手 reource_obj = model_manager['ResourceHelperMessageModel'].get_last_message(open_id) if reource_obj: reource_obj['user'] = {'name': u'资源小助手', "avatar": '/static/v1/img/webwxgetmsgimg.jpg', 'open_id': ''} reource_obj['message_nums'] = (model_manager['ResourceHelperMessageModel'].get_not_read_message_number(open_id), 0) r.append(reource_obj) # 按时间排序 i = 0 while i < len(r): j = i + 1 while j < len(r): if r[i]['create_time'] < r[j]['create_time']: temp_obj = r[i] r[i] = r[j] r[j] = temp_obj j += 1 i += 1 r = map(cls.handle_data_use_in_json, r) return r