async def get_user_role(ns={}): sor = ns['sor'] # get role ns['del_flg'] = '0' res_role = await sor.R('userrole', ns) if res_role: user_role = res_role[0] else: return { "status": False, "msg": "userrole table, user id can not find..." } roleid = user_role.get('roleid') # get role name role_name = await sor.R('role', {'id': roleid}) if role_name: role = role_name[0].get('role') else: return { "status": False, "msg": "role table, can not get role name" } return role async def user_browse_history_add(ns={}): # ns = { # 'userid': '9KVhsVCJsW_29q3hRhMAr', # 用户ID # 'product_id': 'p2s2YPPU7uquza3gGw9k2', # 产品ID # 'ip_address': '192.168.1.1', # IP地址 # 'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/98.0.4758.102' # 用户代理 # } # 必要参数校验 if not ns.get('userid') or not ns.get('product_id'): return { 'status': False, 'msg': 'userid and product_id are required' } db = DBPools() async with db.sqlorContext('kboss') as sor: try: # 根据timestamp时间字段:browse_time去重 查找10个小时内是否存在 browse_time = datetime.datetime.now() - datetime.timedelta(hours=10) check_sql = """ SELECT * FROM user_browse_history WHERE userid = '%s' AND product_id = '%s' AND del_flg = '0' AND browse_time >= '%s'; """ % (ns.get('userid'), ns.get('product_id'), browse_time) check_result = await sor.sqlExe(check_sql, {}) if check_result: return { 'status': False, 'msg': 'The user has browsed this product within the last 10 hours' } # 生成记录ID record_id = uuid() # 插入浏览记录 insert_sql = """ INSERT INTO user_browse_history ( id, userid, product_id, ip_address, user_agent, del_flg ) VALUES ('%s', '%s', '%s', '%s', '%s', '0'); """ % (record_id, ns.get('userid'), ns.get('product_id'), ns.get('ip_address', ''), ns.get('user_agent', '')) await sor.sqlExe(insert_sql, {}) return { 'status': True, 'msg': 'Browse history recorded successfully', 'data': {'record_id': record_id} } except Exception as e: return { 'status': False, 'msg': 'Failed to record browse history, %s' % str(e) } async def publish_product_search_detail(ns={}): """ :param ns: :return: """ if ns.get('userid'): userid = ns.get('userid') else: userid = await get_user() db = DBPools() async with db.sqlorContext('kboss') as sor: user_role = None orgid = None # 区分运营和普通客户 if userid: user_list = await sor.R('users', {'id': userid}) orgid = user_list[0]['orgid'] user_role = await get_user_role({'userid': userid, 'sor': sor}) # 如果用户角色是运营并且from='b' product_list中的phone_number和email做加星号处理 product_list = await sor.R('user_publish_product', {'id': ns.get('id'), 'del_flg': '0'}) product_category = await sor.R('user_publish_product_category', {'id': product_list[0]['product_category'].split(',')[0]}) product_list[0]['product_category'] = product_category[0]['product_category'] if user_role == '运营' and ns.get('from') == 'b': pass elif orgid == product_list[0]['orgid']: pass else: for product in product_list: if product.get('phone_number'): product['phone_number'] = product['phone_number'][:3] + '****' + product['phone_number'][7:] else: product['phone_number'] = '198****8601' if product.get('email'): product['email'] = product['email'][:2] + '****' + product['email'][6:] else: product['email'] = 'kawa@****.com' # 保存浏览记录 if userid: await user_browse_history_add({'userid': userid, 'product_id': ns.get('id')}) return { 'status': True, 'msg': 'Product retrieved successfully', 'data': product_list[0] } ret = await publish_product_search_detail(params_kw) return ret