def get_members(self): members = self.get_members_ext(self.validator.data['filter_key']) if not members: return [] cids = [i['customer_id'] for i in members] profiles, tags = {}, {} if cids: spec = json.dumps({'user_id': cids}) try: profiles = thrift_callex(config.OPENUSER_SERVER, QFCustomer, 'get_profiles', config.OPENUSER_APPID, spec) profiles = {i.user_id:i.__dict__ for i in profiles} except: log.warn('get openuser_info error:%s' % traceback.format_exc()) raise ThirdError('获取消费者信息失败') tags = self.get_tags(cids) tags_dict = {flag.keys()[0]:flag.values()[0] for flag in config.MEMBER_FLAGS} for m in members: customer_id = m['customer_id'] info = profiles.get(customer_id,{}) m['avatar'] = info.get('avatar') or config.HJ_AVATAR m['gender'] = info.get('gender', 1) m['nickname'] = info.get('nickname') or customer_id m['last_txdtm'] = tstamp_to_str(m['last_txdtm']) m['tag'] = tags[customer_id] mem_tags = tags[customer_id] m['tag'] = [tag for tag in mem_tags if tag in tags_dict] m['is_auth'] = 1 if 'submit' in tags[customer_id] else 0 m['customer_id'] = hids.encode(customer_id) return members
def GET(self): cids = self.req.input().get('customer_id') or '' cids = [cid for cid in cids.split(',') if cid.strip()] customer_ids = [] for cid in cids: if cid.strip(): try: customer_ids.append(hids.decode(cid)[0]) except: pass if not customer_ids: return self.write(success({'info': []})) infos = [] try: spec = json.dumps({'user_id': customer_ids}) profiles = thrift_callex(config.OPENUSER_SERVER, OpenUser, 'get_profiles', config.OPENUSER_APPID, spec) profiles = {i.user_id: i.__dict__ for i in profiles} except: log.warn('get openuser_info error:%s' % traceback.format_exc()) for customer_id in customer_ids: if customer_id in profiles: profile = profiles[customer_id] info = { i: profile[i] or '' for i in ('avatar', 'gender', 'nickname') } info['gender'] = info['gender'] or 3 info['customer_id'] = hids.encode(customer_id) infos.append(info) return self.write(success({'info': infos}))
def get_cards(self, customer_id, groupid=None, offset=0, limit=10): '''获取会员卡''' self._cards_total_num = 0 mems = None with get_connection('qf_mchnt') as db: mems = db.select('member', where={'customer_id': customer_id}, fields='userid', other='order by ctime desc') if not mems: return [] # 获取关系列表 # 子商户全转化为大商户userid relations = get_relations() or {} userids = [] for mem in mems: userid = relations.get(mem['userid'], mem['userid']) if userid not in userids: userids.append(userid) if is_valid_int(groupid): userid_cache_list = userid_cache[groupid] userids = list(set(userids) & set(userid_cache_list)) self._cards_total_num = len(userids) userids = userids[offset:offset + limit] if not userids: return [] user_exts = apcli_ex('getUserExts', userids) user_exts = {i.uid: i for i in user_exts} apollo_shops = apcli_ex('findUserBriefsByIds', userids) or {} if apollo_shops: apollo_shops = {shop.uid: shop for shop in apollo_shops} bg_urls = config.CARDS_BG_URLS cards = [] for userid in userids: card = { 'userid': hids.encode(int(userid)), 'nickname': '', 'bg_url': bg_urls[userid % 10 % len(bg_urls)], } user = apollo_shops.get(userid) if user: card['nickname'] = user.shopname user_ext = user_exts.get(userid) if user_ext: card['logo_url'] = user_ext.logo_url card['head_img'] = user_ext.head_img if (not card.get('head_img') or card['head_img'] == config.DEFAULT_HJ_HEAD_IMG): card['head_img'] = config.DEFAULT_SHOP_HEAD_IMG if not card.get('logo_url'): card['logo_url'] = config.DEFAULT_SHOP_LOGO_URL cards.append(card) return cards
def trade_push(self, actv, member, code_info): '''推送''' customer_id = member['customer_id'] appid, hj_appid = self.get_appid() try: p = {} p['appid'] = appid # 获取openid p['openid'] = thrift_callex(config.OPENUSER_SERVER, OpenUser, 'get_openids_by_user_ids', hj_appid, [ customer_id, ])[0] # 店铺名 user = apcli_ex('findUserBriefById', int(self.user.userid)) p['shopname'] = user.shopname if user else '' p['exchange_num'] = member['exchange_num'] + 1 p['exchange_pt'] = actv['exchange_pt'] p['obtain_amt'] = actv['obtain_amt'] p['busicd'] = 'card_actv_exchange' p['goods_amt'] = actv['goods_amt'] p['goods_name'] = actv['goods_name'] p['code'] = code_info['code'] p['customer_id'] = hids.encode(customer_id) p['activity_id'] = actv['id'] p['card_id'] = member['id'] p = { unicode_to_utf8(k): unicode_to_utf8(v) for k, v in p.iteritems() } HttpClient(config.TRADE_PUSH_SERVER).post('/push/v2/push', params=p) except: log.warn('error:%s' % traceback.format_exc())
def get_actv_prepaid(self, userid, customer_id): actv = {'desc': '0元', 'title': '储值状态', 'link': ''} balance = self.get_balance(userid, customer_id) or 0 actv['desc'] = '余额:{}元'.format(fen_to_yuan(balance)) actv['link'] = getattr(config, 'MEMBER_PREPAID_LINK', '').format( hids.encode(int(customer_id))) return actv
def get_takeout_url(self, userid): '''获取外卖链接''' payinfo = adjust_payinfo_ex(userid, goods_code='diancan') or {} if payinfo.get('overdue', True): return '' data = {'userid': userid, 'enuserid': hids.encode(userid)} return config.TAKEOUT_URL.format(**data)
def get_actv_card(self, userid, customer_id): actv = {'desc': '暂无集点活动进行', 'title': '集点状态', 'link': ''} # 大商户的子商户userid relates = apcli_ex('getUserRelation', userid, 'merchant') or [] userids = [i.userid for i in relates] userids.append(userid) infos = pt = None with get_connection('qf_mchnt') as db: actvs = db.select('card_actv', where={ 'start_time': ('<=', int(time.time())), 'expire_time': ('>', int(time.time())), 'userid': ('in', userids) }, fields='exchange_pt, id') or [] infos = {i['id']: i['exchange_pt'] for i in actvs} if infos: pt = db.select('member_pt', where={ 'customer_id': customer_id, 'activity_id': ('in', infos.keys()) }, fields='cur_pt, activity_id, id') or [] if infos: actv['link'] = getattr(config, 'MEMBER_CARD_LINK', '').format(hids.encode(int(customer_id))) # 若仅有一张集点卡 if len(pt) == 1: cur_pt = pt[0]['cur_pt'] exc_pt = infos[pt[0]['activity_id']] actv['desc'] = ('已集点{}/{}'.format(cur_pt, exc_pt) if cur_pt < exc_pt else '有{}个礼品可兑换'.format( cur_pt / exc_pt)) # 如果返回mp_id, 前端将自己跳转至详细页 actv['activity_id'] = str(pt[0]['activity_id']) actv['mp_id'] = str(pt[0]['id']) # 若有多张集点卡 elif len(pt) > 1: actv['desc'] = '有{}张集点卡'.format(len(pt)) else: actv['desc'] = '有0张集点卡' if len(actvs) == 1: exc_pt = actvs[0]['exchange_pt'] actv['desc'] = '已集点0/{}'.format(exc_pt) return actv
def get_sub_list(self, params): ret = {'shops': [], 'total_num': 0} # 大商户userid big_uid = hids.decode(params.get('code')) if not big_uid: return success(ret) big_uid = big_uid[0] # 子商户userid relates = apcli_ex('getUserRelation', int(big_uid), 'merchant') or [] link_ids = [i.userid for i in relates] ret['total_num'] = len(relates) limit, offset = self.get_pageinfo() link_ids = link_ids[offset:offset + limit] if not link_ids: return success(ret) users = apcli_ex('findUserBriefsByIds', link_ids) or [] user_dict = {user.uid: user.__dict__ for user in users} user_exts = apcli_ex('getUserExts', link_ids) or [] user_ext_dict = {i.uid: i.__dict__ for i in user_exts} shops = [] for link_id in link_ids: tmp = {} user = user_dict.get(link_id, {}) tmp['shopname'] = user.get('shopname', '') tmp['mobile'] = user.get('mobile', '') tmp['address'] = user.get('address', '') tmp['enuserid'] = hids.encode(link_id) user_ext = user_ext_dict.get(link_id, {}) tmp['head_img'] = user_ext.get('head_img', '') tmp['logo_url'] = user_ext.get('logo_url', '') if not tmp['head_img']: tmp['head_img'] = get_qd_conf_value_ex(groupid=user.get( 'groupid' or 0), mode='default_head_img', key='ext') or '' if not tmp['logo_url']: tmp['logo_url'] = get_qd_conf_value_ex(groupid=user.get( 'groupid', 0), mode='default_logo_url', key='ext') or '' shops.append(tmp) ret['shops'] = shops return success(ret)
def GET(self): params = self.req.input() userid = self.get_userid(params) # 店铺信息 shopinfo = self.get_shopinfo(userid) # 分店信息 sub_info = {'sub_code': '', 'total_num': 0} big_uid = max(big_uid_cache[userid], 0) if big_uid > 0: sub_info['sub_code'] = hids.encode(int(big_uid), userid) relates = apcli_ex('getUserRelation', int(big_uid), 'merchant') or [] sub_info['total_num'] = len(relates) return success({ 'shopinfo': shopinfo, 'pay_url': config.QRCODE_URL % hids.encode(userid), 'takeout_url': self.get_takeout_url(userid), 'sub_info': sub_info })
def GET(self): if self.customer.is_login(): return self.write( success({ 'customer_id': hids.encode(self.customer.customer_id), 'csid': self.get_cookie('csid') })) else: # 如果校验失败, 删除cookie del_domains = getattr(config, 'DEL_DOMAINS', ['o.qfpay.com']) for domain in del_domains: self.resp.del_cookie('csid', domain=domain) return self.write(error(QFRET.SESSIONERR))
def GET(self): userid = int(self.user.userid) with get_connection_exception('qf_marketing') as db: records = db.select('verify_record', where={'userid': userid}, other=self.get_other(fields=('ctime', )), fields='src, verify_id, activity_id, ctime') if not records: return success({'records': []}) actv_ids = [i['activity_id'] for i in records] actvs = db.select('activity_verify', where={'id': ('in', actv_ids)}, fields='id, name, img, src') or [] actv_dict = {i['id']: i for i in actvs} # 补充活动信息 tidy_records = defaultdict(list) for i in records: actv_id = i.pop('activity_id') i['name'] = '优惠' i['img'] = '' if actv_id in actv_dict: actv = actv_dict[actv_id] i['name'] = actv['name'] i['img'] = actv['img'] i['code'] = hids.encode(CodeDef.DW_CODE, i.pop('verify_id')) t = str(i['ctime'])[:10] tidy_records[t].append(i) # 获取头部信息 last_day = str(records[-1]['ctime'])[:10] first_day = str(records[0]['ctime'])[:10] sql = ( 'select DATE_FORMAT(ctime, "%%Y-%%m-%%d") as date, ' 'count(1) as num from verify_record ' 'where userid=%d and ctime>="%s 00:00:00" and ctime <= "%s 23:59:59" ' 'group by DATE_FORMAT(ctime, "%%Y%%m%%d") order by ctime desc' % (userid, last_day, first_day)) diff_days = db.query(sql) or [] ret = [] for i in diff_days: t = {} t['date'] = i['date'] t['total_num'] = i['num'] t['records'] = tidy_records.get(i['date']) or [] ret.append(t) return success({'records': ret})
def get_shops(self, userid, offset=0, limit=5): ''' 获取门店列表 ''' self._shop_num = 0 relations = get_relations() or {} relations_re = defaultdict(list) for linkid, uid in relations.iteritems(): relations_re[uid].append(linkid) if userid not in relations_re: return [] self._shop_num = len(relations_re[userid]) userids = relations_re[userid][offset:limit] if not userids: return [] user_exts = apcli_ex('getUserExts', userids) user_exts = {i.uid: i for i in user_exts} apollo_shops = apcli_ex('findUserBriefsByIds', userids) or {} if apollo_shops: apollo_shops = {shop.uid: shop for shop in apollo_shops} # 店铺信息 shops = [] for uid in userids: shopinfo = {} shopinfo['userid'] = hids.encode(int(uid)) user = apollo_shops.get(uid) if user: shopinfo['address'] = user.address shopinfo['mobile'] = user.mobile shopinfo['shopname'] = user.shopname user_ext = user_exts.get(uid) if user_ext: shopinfo['head_img'] = user_ext.head_img shopinfo['logo_url'] = user_ext.logo_url shopinfo['mobile'] = user_ext.contact if (not shopinfo.get('head_img') or shopinfo['head_img'] == config.DEFAULT_HJ_HEAD_IMG): shopinfo['head_img'] = config.DEFAULT_SHOP_HEAD_IMG if not shopinfo.get('logo_url'): shopinfo['logo_url'] = config.DEFAULT_SHOP_LOGO_URL shops.append(shopinfo) return shops
def GET(self): # customer_id customer_id = self.get_customer_id() # 活动id activity_id = self.req.input().get('activity_id') if not is_valid_int(activity_id): raise ParamError('集点活动不存在') activity_id = int(activity_id) # 活动信息 actv = None with get_connection('qf_mchnt') as db: actv = db.select_one('card_actv', where={'id': activity_id}) if not actv: raise ParamError('活动不存在') with get_connection_exception('qf_mchnt') as db: where = {'activity_id': activity_id, 'customer_id': customer_id} customer = db.select_one('member_pt', where=where) # 若未有集点卡记录 if not customer: raise ParamError('未领取集点卡') # 消费者records现有的兑换码 where['status'] = CODE_STATUS_CREATE codes = db.select(table='exchange_record', where=where, other='order by ctime desc') or [] codes = self.tidy_codes(codes, customer, actv) return success({ 'codes': [{ 'id': str(i['id']), 'code': '{:0>4d}'.format(i['code']), 'qrcode': ''.join([ self.pre_code, hids.encode(i['code'], actv['id'], i['id']) ]) } for i in codes], 'card_info': self.card_info(actv) })
def POST(self): idnumber = self.req.input().get('idnumber', '').strip() if not idnumber: raise ParamError('身份证号码必填') userid = int(self.user.userid) user = apcli_ex('findUserByid', int(self.user.userid)) if not user: raise DBError('商户不存在') if (user.idnumber or '').upper() != idnumber.upper(): raise ParamError('身份证不匹配') code = hids.encode(userid, int(time.time())) return success({'code': code})
def GET(self): params = self.req.input() for i in ('out_trade_no', 'userid'): if not params.get(i): raise ParamError('%s is must' % i) # 校验是否开通积分功能 open_pt(params['userid']) data = { #'userid' : params['userid'], 'mchid' : hids.encode(config.WXY_QT2_CONF['app_uid'], int(params['userid'])), 'out_trade_no' : params['out_trade_no'] } ret = qt2_requests('/trade/v1/query', data, 'get') if not ret['data']: raise ParamError('out_trade_no不存在') return success(ret['data'][0])
def POST(self): userid = int(self.user.userid) params = self.req.input() if not params.get('encid'): raise ParamError(self._base_err) encode = params.get('encid').lstrip(self.MEMBER_PRE_CODE) customer_id, tstmp = hids.decode(encode) limit = getattr(config, 'ADD_MEMBER_LIMIT', 30) if time.time()- tstmp > limit: raise ParamError('二维码过期了') is_new = self.be_member(userid, customer_id) return success({ 'is_new': is_new, 'customer_id': hids.encode(customer_id) })
def GET(self): customer_id = self.get_cid() groupid = self.get_query_groupid(self.req.input()) ret = {} profile = get_profile(customer_id) ret['profile'] = { i: profile[i] for i in ('nickname', 'gender', 'avatar') } ret['profile']['customer_id'] = hids.encode(customer_id) ret['cards'] = self.get_cards(customer_id, groupid, 0, 2) # 会员卡数量 ret['cards_total_num'] = self._cards_total_num # 活动信息 ret['actv_info'] = self.get_actv_info(customer_id, groupid) return self.write(success(ret))
def POST(self): params = self.req.input() if not is_valid_int(params.get('txamt')): raise ParamError('txmat is must') for i in ('openid', 'out_trade_no', 'userid'): if not params.get(i): raise ParamError('%s is must' % i) pay_type = params.get('pay_type', '800207') if pay_type not in ('800207', '800213'): raise ParamError('暂不支持该支付类型') # 校验是否开通积分功能 open_pt(params['userid']) data = { 'txamt' : int(params['txamt']), 'sub_openid' : params['openid'], 'pay_type' : pay_type, 'txcurrcd' : 'CNY', 'out_trade_no' : params['out_trade_no'], 'txdtm' : time.strftime(DTM_FMT), 'goods_name' : params.get('goods_name', ''), 'mchid' : hids.encode(config.WXY_QT2_CONF['app_uid'], int(params['userid'])) } if is_valid_datetime(params.get('txdtm')): data['txdtm'] = params['txdtm'] ret = qt2_requests('/trade/v1/payment', data, 'post') resperr = ret.pop('resperr', '') ret.pop('respmsg', '') return success(ret, resperr)
def GET(self): d = self.req.input() page = d.get('page', 0) pagesize = d.get('pagesize', 10) userid = self.user.userid paging = (int(pagesize), int(pagesize) * int(page)) other = 'order by create_time desc limit {} offset {}'.format(*paging) ret = {'records': []} # 查询交易记录和消费品名称 records = [] titles = [] titles_dict = {} with get_connection_exception('qf_marketing') as db: records = db.select( table='record', fields=['customer_id', 'create_time', 'activity_id', 'xx_id'], where={ 'type': RECORD_STATUS_USE, 'xx_type': ACTIVITY_SHARE_TYPE_GOODS_COUPON, 'use_mchnt_id': userid, }, other=other) if not records: return self.write(success(ret)) act_ids = [record.get('activity_id') for record in records] titles = db.select(table='activity', fields=['title', 'id'], where={'id': ('in', act_ids)}) if not titles: raise ParamError('获取兑换商品失败') titles_dict = {title['id']: title['title'] for title in titles} # 查询消费者信息 cids = {i['customer_id'] for i in records} spec = json.dumps({'user_id': list(cids)}) client = ThriftClient(config.OPENUSER_SERVER, OpenUser) client.raise_except = True infos = [] try: infos = client.call('get_profiles', config.OPENUSER_APPID, spec) infos = {i.user_id: i.__dict__ for i in infos} except: log.warn(traceback.format_exc()) raise ThirdError('获取用户信息失败') # 整理信息 for i in records: cust_id = int(i['customer_id']) cust_info = infos.get(cust_id) or {} avatar_str = cust_info.get('avatar') or '' i['avatar_url'] = avatar_str.split(':', 1)[-1] i['gender'] = cust_info.get('gender') or 0 i['nickname'] = cust_info.get('nickname') or '微信支付顾客' i['exchange_time'] = i['create_time'].strftime('%H:%M:%S') i['goods_name'] = titles_dict.get(i.pop('activity_id'), '未知商品') i['exchange_code'] = hids.encode(i.pop('xx_id')) date_records = defaultdict(list) for i in records: t = i.pop('create_time').strftime(DATE_FMT) date_records[t].append(i) # 查询每日的交易数量 sql = ( 'select FROM_UNIXTIME(create_time, "%%Y-%%m-%%d") as date, ' 'count(id) as num from record ' 'where use_mchnt_id=%s and xx_type=%s and type=%d ' 'group by FROM_UNIXTIME(create_time, "%%Y%%m%%d") ' 'order by create_time desc' % (str(userid), ACTIVITY_SHARE_TYPE_GOODS_COUPON, RECORD_STATUS_USE)) data_infos = [] with get_connection('qf_marketing') as db: data_infos = db.query(sql) if not data_infos: raise ParamError('获取消费者数量失败') # 整理返回信息 ret = [] for i in data_infos: date = i['date'] tmp = {} tmp['date'] = i['date'] tmp['use_cnt'] = i['num'] tmp['customers'] = date_records.get(date) or [] ret.append(tmp) return self.write(success({'records': ret}))
def get_list(self, params): ''' 若传入groupid, 将返回该渠道下所有的商户(无视方圆20公里限制) ''' userids = self.get_all_userids(params) if not userids: return success({'shops': []}) # 对userid进行优先级排序 userids = self.sort(userids) limit, offset = self.get_pageinfo() ret_userids = userids[offset:offset + limit] if ret_userids: users = apcli_ex('findUserBriefsByIds', ret_userids) user_dict = {i.uid: i.__dict__ for i in users} user_exts = apcli_ex('getUserExts', ret_userids) user_ext_dict = {i.uid: i.__dict__ for i in user_exts} trade_key = '_paycell_trade_stat_{}_'.format(time.strftime('%Y%m')) trade_stats = redis_pool.hmget(trade_key, ret_userids) trade_dict = dict(zip(ret_userids, trade_stats)) ret = [] now = time.strftime('%Y-%m-%d %H:%M:%S') for userid in ret_userids: user = user_dict.get(int(userid)) or {} tmp = { 'shopname': user.get('shopname', ''), 'mobile': user.get('mobile', ''), 'address': user.get('address', ''), 'enuserid': hids.encode(userid) } # 图片 user_ext = user_ext_dict.get(userid, {}) tmp['head_img'] = user_ext.get('head_img', '') tmp['logo_url'] = user_ext.get('logo_url', '') if not tmp['head_img']: tmp['head_img'] = get_qd_conf_value_ex(groupid=user.get( 'groupid' or 0), mode='default_head_img', key='ext') or '' if not tmp['logo_url']: tmp['logo_url'] = get_qd_conf_value_ex(groupid=user.get( 'groupid', 0), mode='default_logo_url', key='ext') or '' # 总的交易 tmp['trade_num'] = trade_dict.get(userid) or 0 # 获取活动消息 rkey = '_mchnt_all_actv_cache_{}_'.format(userid) tmp['actv_info'] = {} all_actv = redis_pool.hgetall(rkey) if 'coupon_actv' in all_actv: try: data = json.loads(all_actv['coupon_actv']) if data['expire_time'] > now: tmp['actv_info']['coupon'] = { 'amt': data.get('amt', 0) } except: pass if 'coupon_union_actv' in all_actv: try: data = json.loads(all_actv['coupon_union_actv']) if data['expire_time'] > now: tmp['actv_info']['coupon_union'] = { 'amt': data.get('amt', 0) } except: pass if 'prepaid_actv' in all_actv: try: data = json.loads(all_actv['prepaid_actv']) if data['expire_time'] > now: tmp['actv_info']['prepaid'] = { 'max_present_amt': data.get('max_present', 0) } except: pass if 'card_actv' in all_actv: try: data = json.loads(all_actv['card_actv']) if data['expire_time'] > now: tmp['actv_info']['card'] = data except: pass ret.append(tmp) return success({'shops': ret})
def GET(self): input_cid = self.req.input().get('customer_id') try: customer_id = hids.decode(input_cid)[0] except: customer_id = input_cid if not is_valid_int(customer_id): raise ParamError('参数错误') customer_id = int(customer_id) userid = int(self.user.userid) userids = self.get_link_ids() or [] userids.append(userid) member = None with get_connection('qf_mchnt') as db: member = db.select_one( table= 'member', where= { 'userid': ('in', userids), 'customer_id': customer_id }, fields= 'customer_id, txamt, num, last_txdtm, userid' ) if not member: raise ParamError('暂未获得会员信息~') profile = {} try: profile = thrift_callex( config.OPENUSER_SERVER, QFCustomer, 'get_profiles', config.OPENUSER_APPID, json.dumps({'user_id': customer_id}) )[0].__dict__ except: log.warn('get openuser_info error:%s' % traceback.format_exc()) tags = self.get_tags(customer_id) tags_dict = {flag.keys()[0]:flag.values()[0] for flag in config.MEMBER_FLAGS} default_val = '暂无' member['per_txamt'] = member['txamt'] / (member['num'] or 1) member['avatar'] = profile.get('avatar') or config.HJ_AVATAR member['gender'] = profile.get('gender', 1) member['birthday'] = default_val member['mobile'] = default_val member['name'] = default_val member['is_auth'] = 0 if 'submit' in tags: member['birthday'] = profile.get('birthday') or default_val member['mobile'] = profile.get('mobile') or default_val member['name'] = profile.get('cname') or default_val member['is_auth'] = 1 member['nickname'] = profile.get('nickname') or default_val member['last_txdtm'] = tstamp_to_str(member['last_txdtm']) member['tag'] = [tags_dict[tag] for tag in tags if tag in tags_dict] member['customer_id'] = hids.encode(customer_id) actvinfo = [] actvinfo.append(self.get_actv_card(userid, customer_id)) actvinfo.append(self.get_actv_prepaid(userid, customer_id)) return success({ 'baseinfo': member, 'actvinfo': actvinfo })
def GET(self): encode = (self.MEMBER_PRE_CODE + hids.encode(int(self.get_cid()), int(time.time()))) return success({'encid': encode})
def GET(self): customer_id = self.get_cid() userid = hids.decode(self.req.input().get('userid')) if not userid: raise ParamError('商户userid为空') userid = userid[0] openid = self.req.input().get('openid', '') ret = dict() # 消费者信息 ret['profile'] = {} profile = get_profile(customer_id) ret['profile']['avatar'] = profile['avatar'] ret['profile']['is_new'] = self.be_member(userid, customer_id) ret['profile']['customer_id'] = hids.encode(customer_id) ret['profile']['is_submit'] = self.get_submit_info(userid, customer_id) # 活动信息 ret['actvs'] = {} ret['actvs']['privilege'] = self.get_privilege(userid) ret['actvs']['balance'] = self.get_balance(userid, customer_id) or 0 card = self.get_actv_card(userid, customer_id) or {} ret['actvs']['card'] = card.get('desc') ret['actvs']['card_actv_id'] = card.get('mp_id') # 店铺信息 bg_urls = config.CARDS_INFO_BG_URLS ret['shopinfo'] = {} ret['shopinfo']['mchnt_id'] = userid ret['shopinfo']['userid'] = hids.encode(int(userid)) ret['shopinfo']['bg_url'] = bg_urls[userid % 10 % len(bg_urls)] user = apcli_ex('findUserBriefById', userid) if user: ret['shopinfo']['address'] = user.address ret['shopinfo']['mobile'] = user.mobile ret['shopinfo']['shopname'] = user.shopname user_ext = apcli_ex('getUserExt', int(userid)) if user_ext: ret['shopinfo']['head_img'] = user_ext.head_img or '' ret['shopinfo']['logo_url'] = user_ext.logo_url or '' ret['shopinfo']['mobile'] = user_ext.contact or user.mobile # 实用门店 ret['shops'] = self.get_shops(userid) ret['shop_num'] = self._shop_num # 是否卡包信息 ret['wxcard'] = self.get_wxcard(userid, customer_id) or {} # 从weixin_card获取此openid,appid对应的卡包里的所有的卡券列表 # 如果cardid在里面则返回1, 不然异常情况或者不在都返回0 appid, card_id = '', '' if ret['wxcard']: appid = ret['wxcard']['appid'] card_id = ret['wxcard']['card_id'] if not appid: is_added = 0 card_code = '' else: # 如果前端没有给传openid,则先获取openid if not openid: try: openid = thrift_callex( config.OPENUSER_SERVER, QFCustomer, 'get_openid_by_wxappid_and_customid', wx_appid=appid, customid=customer_id) except CustomerError: is_added = 0 log.debug(traceback.format_exc()) if not openid: is_added = 0 card_code = '' else: client = ThriftClient(config.WXCARD_SERVERS, WXCard) card_code = client.call("get_cardcode_by_openid", openid=openid, card_id=card_id) try: card_list = client.call("get_card_list", openid, appid) if card_id: if card_id in card_list: is_added = 1 else: is_added = 0 else: is_added = 0 except WXCardError: log.debug(traceback.format_exc()) is_added = 0 ret['wxcard']['is_added'] = is_added # 获取用户领卡时候的code ret['wxcard']['code'] = card_code return self.write(success(ret))