Beispiel #1
0
    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
Beispiel #2
0
    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}))
Beispiel #3
0
    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
Beispiel #4
0
    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())
Beispiel #5
0
    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
Beispiel #6
0
    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)
Beispiel #7
0
    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
Beispiel #8
0
    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)
Beispiel #9
0
    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
        })
Beispiel #10
0
 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))
Beispiel #11
0
    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})
Beispiel #12
0
    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
Beispiel #13
0
    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)
        })
Beispiel #14
0
    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})
Beispiel #15
0
    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])
Beispiel #16
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)
        })
Beispiel #17
0
    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))
Beispiel #18
0
    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)
Beispiel #19
0
    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}))
Beispiel #20
0
    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})
Beispiel #21
0
    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
        })
Beispiel #22
0
    def GET(self):
        encode = (self.MEMBER_PRE_CODE +
                  hids.encode(int(self.get_cid()), int(time.time())))

        return success({'encid': encode})
Beispiel #23
0
    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))