Example #1
0
    def POST(self):
        params = self.req.inputjson()

        # 获取customer_id
        customer_id = None
        try:
            customer_id = self.get_cid()
        except:
            if self.check_ip():
                cid = hids.decode(params.get('cid'))
                customer_id = cid[0] if cid else None
        if not customer_id:
            raise SessionError('用户未登录')

        # 消费者进行认证
        # 将更新商户member_tag
        if params.get('mode') == 'submit':
            userids = hids.decode(params.get('userid'))
            if userids:
                self.add_tag(userids[0], customer_id, 'submit',
                             MemDefine.MEMBER_SRC_SUBMIT)

        fields = ['nickname', 'cname', 'mobile', 'birthday']
        update_data = {i: params[i] for i in fields if params.get(i)}
        if 'birthday' in update_data:
            profile = get_profile(customer_id)
            if profile['birthday']:
                raise ParamError('已经设置了生日信息')

        # 更新消费者信息
        if update_data:
            thrift_callex(config.OPENUSER_SERVER, QFCustomer, 'profile_update',
                          customer_id, tcProfile(**update_data))

        return success({})
Example #2
0
    def GET(self):
        d = {k: v.strip() for k, v in self.req.input().iteritems()}
        data = {}

        # userid
        try:
            data['mchnt_id'] = hids.decode(d['mchnt_id'])[0]
        except:
            data['mchnt_id'] = int(d.get('mchnt_id') or 0)

        # customer_id
        try:
            data['customer_id'] = hids.decode(d['customer_id'])[0]
        except:
            if self.customer.customer_id:
                data['customer_id'] = self.customer.customer_id
            else:
                raise SessionError('消费者未登录')
        # groupid
        groupid = d.get('groupid')
        if is_valid_int(groupid):
            data['groupid'] = groupid

        # 分页信息
        page, pagesize = d.get('page', 0), d.get('pagesize', 10)
        if not all(map(is_valid_int, (pagesize, page))):
            raise ParamError('分页信息错误')
        data['offset'], data['limit'] = int(page) * int(pagesize), int(
            pagesize)

        # 获取列表
        r, total_num = self.card_list(data)

        return self.write(success({'cards': r, 'total_num': total_num}))
Example #3
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}))
Example #4
0
    def GET(self):
        if not self.customer.is_login():
            raise SessionError('登录以后才可以使用!')

        customer_id = self.customer.customer_id

        code = self.req.input().get('code')
        if not code:
            raise ParamError('未能获取二维码')

        decode = hids.decode(code)
        if not decode:
            raise ParamError('解析二维码失败')
        cb_id = decode[0]

        # 查询数据库
        status = {}
        with get_connection('qf_marketing') as db:
            status = db.select_one(table='coupon_bind',
                                   fields='status, customer_id',
                                   where={
                                       'id': cb_id,
                                       'customer_id': customer_id
                                   })

        if not status:
            raise ParamError('没能获取到券的状态')

        return self.write(success(status))
Example #5
0
    def _(self, *args, **kwargs):
        userid = int(self.user.userid)

        params = self.req.input()
        if params.has_key("shopid"):
            shopid = params.get("shopid", '')
            if not shopid:
                raise ParamError("商户id参数错误")

            try:
                shopid = hids.decode(shopid)[0]
            except:
                raise ParamError("商户id参数错误")

            # 验证是否是当前商户的子商户
            cate = self.get_cate()
            if cate == "bigmerchant":
                subids = get_linkids(userid)
                if shopid not in subids:
                    raise ParamError("非大商户的子商户")
                else:
                    userid = shopid

        ret = func(self, userid)
        return ret
Example #6
0
    def _trans_input(self):
        d = {k:v.strip() for k, v in self.req.input().iteritems()}
        log.info('d:%s' % d)
        r = {}
        try:
            r['customer_id'] = hids.decode(d.get('customer_id'))[0]
        except:
            if self.customer.customer_id:
                r['customer_id'] = self.customer.customer_id
            else:
                r['customer_id'] = -1

        r['mode'] = d.get('mode', '')
        r['userid'] = d.get('userid', '')
        if is_valid_int(d.get('groupid')):
            r['groupid'] = d.get('groupid')

        if r['mode'] not in ('info', 'list'):
            raise ParamError('请求参数错误')
        elif r['mode'] == 'info':
            r['userid'] = int(r['userid'])
        elif r['mode'] == 'list':
            r['mchnt_id'] = int(d.get('mchnt_id') or 0)
            if r['customer_id'] == -1:
                raise ParamError('消费者id不正确')
            page, pagesize = d.get('page', 0), d.get('pagesize', 10)
            if not all(map(is_valid_int, (pagesize, page))):
                raise ParamError('分页信息错误')
            r['offset'], r['limit'] = int(page)*int(pagesize), int(pagesize)
        return r
Example #7
0
    def get_input_userid(self):
        cate = self.get_cate()
        if cate == 'bigmerchant':
            params = self.req.input()
            if params.get('userid'):
                userid = int(params['userid'])

            elif params.get('enuserid'):
                userid = hids.decode(params['enuserid'])
                if not userid:
                    raise ParamError('商户不存在')

                else:
                    userid = userid[0]

            else:
                return int(self.user.userid)

            link_ids = self.get_link_ids()
            if userid not in link_ids:
                raise ParamError('商户不存在')

            return userid
        else:
            return int(self.user.userid)
Example #8
0
    def GET(self):
        ret = {}
        tmp = []
        d = self.validator.data

        mode = d['mode']
        page = d['page']
        pagesize = d['pagesize']
        userid = d.get('userid')

        if not userid:
            userid = int(self.user.userid)
        else:
            userid_tuple = hids.decode(userid)
            if userid_tuple:
                userid = userid_tuple[0]
            else:
                if not userid.isdigit():
                    raise ParamError('用户编号不存在')

        log.debug('decoded userid={}'.format(userid))

        # 操作员登录,返回空列表
        if 'opuid' in self.user.ses:
            ret['opusers'] = []
            return self.write(success(ret))

        # 判断分页显示或者全部显示,根据status筛选
        other = 'order by create_time desc limit {limit} offset {offset}'.format(
            limit=pagesize, offset=pagesize * page)
        if mode == 'all':
            other = 'order by create_time desc'

        where = {'userid': userid}

        # 获取商户下操作员
        opusers = []
        with get_connection('qf_core') as db:
            opusers = db.select(table='opuser',
                                where=where,
                                fields='opname, opuid, perms',
                                other=other)
        for opuser in opusers:
            result = {}
            source_opuid = opuser['opuid']
            prefix = (4 - len(str(source_opuid))) * '0'
            result['opuid'] = prefix + str(source_opuid)
            try:
                perms = json.loads(opuser['perms'])
                refund = perms.get('refund', 0)
            except:
                refund = 0
            result['refund'] = refund
            result['opname'] = opuser['opname']
            tmp.append(result)
        ret['opusers'] = tmp

        return self.write(success(ret))
Example #9
0
    def GET(self):
        default_info = {
            'nickname': '微信支付顾客',
            'avatar': config.HJ_AVATAR,
            'gender': 3,
            'num': 0,
            'txamt': 0,
            'last_txdtm': ''
        }
        d = self.req.inputjson()
        userid = int(self.user.userid)

        customer_id = None
        if d.get('customer_id'):
            try:
                customer_id = hids.decode(d['customer_id'])[0]
            except:
                if is_valid_int(d['customer_id']):
                    customer_id = int(d['customer_id'])

        # 如果包含openid
        elif d.get('openid'):
            customer_id = thrift_call(OpenUser, 'get_user_id_by_openid',
                                      config.OPENUSER_SERVER,
                                      config.OPENUSER_APPID, d['openid'])

        if customer_id <= 0:
            return self.write(success(default_info))

        # 获取消费者信息
        r = get_member_info(customer_id) or {}
        member = {}
        with get_connection('qf_mchnt') as db:
            member = db.select_one('member',
                                   where={
                                       'userid': userid,
                                       'customer_id': customer_id
                                   }) or {}

        info = {}
        info['nickname'] = r.get('nickname') or default_info['nickname']
        info['avatar'] = r.get('avatar') or default_info['avatar']
        info['gender'] = r.get('gender') or default_info['gender']
        info['num'] = member.get('num') or default_info['num']
        info['txamt'] = member.get('txamt') or default_info['txamt']
        info['last_txdtm'] = (tstamp_to_str(member['last_txdtm'])
                              if 'last_txdtm' in member else
                              default_info['last_txdtm'])

        # 如果是储值交易
        # 获取储值信息
        if d.get('busicd', '').startswith('7'):
            balance = self.get_balance(userid, customer_id)
            if balance is not None:
                info['balance'] = balance

        return self.write(success(info))
Example #10
0
    def get_customer_id(self):
        '''获取customer_id'''
        try:
            customer_id = hids.decode(self.req.input().get('customer_id'))[0]
        except:
            if self.customer.customer_id:
                customer_id = self.customer.customer_id
            else:
                raise ParamError('消费者不存在')

        return customer_id
Example #11
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)
Example #12
0
    def get_submit_profile(self, customer_id):
        profile = get_profile(customer_id)
        ret = {}
        for field in ('nickname', 'cname', 'mobile', 'birthday'):
            ret[field] = profile[field] or ''

        tags = []
        data = self.req.inputjson()
        userids = hids.decode(data.get('userid'))
        if userids:
            tags = self.get_tags(customer_id, userids[0])
        ret['submit'] = int('submit' in tags)

        return success(ret)
Example #13
0
    def get_mchnt_id_list(self, mchnt_id_list, aid=None):
        ''' 获取mchnt_id_list'''
        userid = int(self.user.userid)
        if self.get_cate() != 'bigmerchant':
            return json.dumps([str(userid)])

        mchnt_id_list = [i for i in mchnt_id_list if i]

        # 获取适用门店列表
        link_ids = apcli.userids_by_linkid(userid, 'merchant')
        link_ids = {i.userid for i in link_ids}
        if not mchnt_id_list:
            mchnt_ids = link_ids
        else:
            mchnt_ids = set()
            for i in mchnt_id_list:
                try:
                    mchnt_ids.add(hids.decode(i)[0])
                except:
                    pass

        if mchnt_ids - link_ids:
            raise ParamError('包含了非自己的子商户')

        with get_connection_exception('qf_mchnt') as db:
            userids = list(mchnt_ids) + [userid]
            actvs = db.select('card_actv',
                              where={
                                  'expire_time': ('>', int(time.time())),
                                  'userid': ('in', userids)
                              },
                              fields='userid, mchnt_id_list, id')
            for actv in actvs:
                if aid == actv['id']:
                    continue
                try:
                    uids = json.loads(actv['mchnt_id_list'])
                    uids = {int(i) for i in uids}
                except:
                    uids = set()

                onuids = uids & mchnt_ids
                if onuids:
                    mchnt = apcli_ex('findUserBriefsByIds',
                                     [list(onuids)[0]]) or []
                    shopname = mchnt[0].shopname if mchnt else ''
                    raise ParamError('{}等子商户有正在进行的集点活动'.format(shopname))

        return json.dumps([str(i) for i in mchnt_ids])
Example #14
0
    def get_userid(self, params):
        userid = None
        if params.get('enuserid'):
            userids = hids.decode(params['enuserid']) or [
                None,
            ]
            userid = userids[0]

        elif is_valid_int(params.get('userid')):
            userid = int(params['userid'])

        if not userid:
            raise ParamError('商户不存在')

        return userid
Example #15
0
    def GET(self):
        userid = hids.decode(self.req.input().get('userid'))
        if not userid:
            raise ParamError('商户userid为空')
        userid = userid[0]

        data = self.validator.data

        limit = data['pagesize']
        offset = data['page'] * data['pagesize']

        ret = {}
        ret['shops'] = self.get_shops(userid, offset, limit)
        ret['shop_num'] = self._shop_num

        return self.write(success(ret))
Example #16
0
    def _trans_input(self):
        d = {k:v.strip() for k, v in self.req.input().iteritems()}
        # 活动id
        r = {'id' : d.get('id', '')}
        if not is_valid_int(r['id']):
            raise ParamError('活动id不合法')

        try:
            r['customer_id'] = hids.decode(d.get('customer_id'))[0]
        except:
            if self.customer.customer_id:
                r['customer_id'] = self.customer.customer_id
            else:
                raise ParamError('消费者id不正确')

        return r
Example #17
0
    def check_customer(self, mobile):
        '''
        消费者补充会员休息
        '''
        enuserid = self.req.input().get('enuserid')
        if enuserid:
            try:
                userid = hids.decode(enuserid)[0]
            except:
                if not is_valid_int(enuserid):
                    return
                userid = int(enuserid)

            user = apcli('findUserBriefById', userid)
            if user:
                self._groupid = user.groupid
Example #18
0
    def GET(self):
        params = self.req.input()

        groupid = None

        if 'userid' in params:
            groupid = self.get_groupid(userid=params['userid'])

        elif 'enuserid' in params:
            userid = hids.decode(params['enuserid'])
            if userid:
                groupid = self.get_groupid(userid=userid)

        else:
            if self.check_login():
                groupid = self.get_groupid()

        return self.write(success({'is_baipai': self.is_baipai(groupid)}))
Example #19
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)
        })
Example #20
0
    def get_code_info(self, code):
        code_info = hids.decode(code)
        if len(code_info) < 2:
            raise ParamError('核销失败,兑换码不存在!')

        code_type, code_id = code_info[:2]
        if code_type != CodeDef.DW_CODE:
            raise ParamError('核销失败,兑换码不存在!')

        with get_connection_exception('qf_marketing') as db:
            code_info = db.select_one('verify_coupon', where={'id': code_id})
            if not code_info:
                raise ParamError('核销失败,兑换码不存在!')

            if (code_info['status']
                    not in (CodeDef.DW_STATUS_CREATE, CodeDef.DW_STATUS_BIND)):
                raise ParamError('核销失败,兑换码已被使用')

            actv_info = db.select_one('activity_verify',
                                      where={'id': code_info['activity_id']})
            try:
                mchnt_id_list = json.loads(actv_info['mchnt_id_list'])
                mchnt_ids = set(map(int, mchnt_id_list))
            except:
                mchnt_ids = []

            now = datetime.datetime.now()
            if now > actv_info['expire_time']:
                raise ParamError('核销失败, 兑换码已过期')

            if now < actv_info['start_time']:
                raise ParamError('核销失败, 请在{}至{}兑换'.format(
                    str(actv_info['start_time']),
                    str(actv_info['expire_time'])))

            if int(self.user.userid) not in mchnt_ids:
                raise ParamError('核销失败, 该兑换码不能在该店核销')

        return code_info
Example #21
0
    def POST(self):
        # 转化input参数
        d = {k: v.strip() for k, v in self.req.input().iteritems()}
        code = d.get('code') or ''
        try:
            data = {}
            data['userid'], data['customer_id'], data['out_sn'], data[
                'txamt'], data['total_amt'] = hids.decode(code)
            data['src'] = d.get('src') or 'query'
        except:
            raise ParamError('参数错误')

        data['out_sn'] = str(data['out_sn'])

        # query
        actv, customer, overdue = self._query(data)

        return success({
            'actv': actv or {},
            'customer_info': customer or {},
            'overdue': overdue
        })
Example #22
0
    def POST(self):
        # 获取参数
        d = {k: v.strip() for k, v in self.req.input().iteritems()}
        code = d.get('code') or ''
        try:
            data = {}
            data['userid'], data['customer_id'], data['out_sn'], data[
                'txamt'], data['total_amt'], data['orig_out_sn'] = hids.decode(
                    code)
        except:
            raise ParamError('参数错误')
        data['out_sn'] = str(data['out_sn'])
        data['orig_out_sn'] = str(data['orig_out_sn'])

        # cancel
        r = (self._cancel(data) or {
            'cancel_pt': 0,
            'activity_id': '0',
            'card_id': 0
        })

        return success(r)
Example #23
0
    def GET(self):
        where = {'status': CODE_STATUS_EXCHANGED}
        params = self.req.input()
        if is_valid_int(params.get('id')):
            where['id'] = int(params['id'])

        elif 'code' in params:
            try:
                code = params['code']
                encode = code[len(self.pre_code):]
                code, actv_id, code_id = hids.decode(encode)
                code = '{:0>4d}'.format(code)
                where['id'] = code_id
            except:
                raise ParamError('兑换码不存在')

        else:
            raise ParamError('兑换码不存在')

        with get_connection_exception('qf_mchnt') as db:
            r = db.select_one('exchange_record', where=where)

        return success({'exchanged': int(bool(r))})
Example #24
0
    def POST(self):
        params = self.req.inputjson()
        code = params.get('code')
        if code.startswith(self.pre_code):
            encode = code[len(self.pre_code):]
            code, actv_id, code_id = hids.decode(encode)
            code = '{:0>4d}'.format(code)
        else:
            actv_id = params.get('id')
            if not is_valid_int(actv_id):
                raise ParamError('活动不存在')
            actv_id = int(actv_id)

        # 检查活动
        actv = self.check_allow_query(actv_id)

        # 检查兑换码
        if (not is_valid_int(code) or len(code) != 4 or not int(code)):
            raise ParamError('兑换码错误,请确认')

        with get_connection_exception('qf_mchnt') as db:
            # 获取兑换码信息
            records = db.select('exchange_record',
                                where={
                                    'activity_id': actv_id,
                                    'code': int(code)
                                })
            if not records:
                raise ParamError('兑换码错误,请确认')

            # 查看兑换码的状态
            codes = {}
            for i in records:
                codes[i['status']] = i
            if codes.get(CODE_STATUS_CREATE):
                code_info = codes[CODE_STATUS_CREATE]
                cid = code_info['customer_id']
            elif codes.get(CODE_STATUS_EXCHANGED):
                raise ParamError('兑换失败,此码不可重复使用')
            else:
                raise ParamError('兑换码错误,请确认')

            # 查询消费者信息
            member = db.select_one('member_pt',
                                   where={
                                       'activity_id': actv_id,
                                       'customer_id': cid
                                   })
            if not member:
                raise ParamError('消费者不存在')

            if actv['exchange_pt'] > member['cur_pt']:
                raise ParamError('兑换码信息错误')

        # 更新兑换信息
        self.exchange(actv, member, code_info)

        # 推送
        self.trade_push(actv, member, code_info)

        return self.write(success({}))
Example #25
0
    def POST(self):
        userid = self.user.userid

        # 验证兑换码
        code = self.req.input().get('code')
        de_code = hids.decode(code)
        if not de_code:
            raise ParamError('兑换码不存在')
        cb_id = de_code[0]

        # 获取红包绑定信息和活动信息
        cb_info = {}
        act_id = ''
        with get_connection_exception('qf_marketing') as db:
            cb_info = db.select_one(table='coupon_bind', where={'id': cb_id})

            if not cb_info:
                raise ParamError('兑换码不存在')

            act_id = cb_info.get('activity_id')

            if not act_id:
                raise ParamError('查询活动信息失败')

        amt = cb_info.get('amt')

        start_time = cb_info.get('start_time')
        expire_time = cb_info.get('expire_time')

        status = cb_info.get('status')
        coupon_mchnt_id = cb_info.get('mchnt_id')
        coupon_rule_id = cb_info.get('coupon_rule_id')

        now = datetime.datetime.now()
        if not (start_time < now < expire_time):
            raise ParamError('不在活动时间内')
        if status != COUPON_STATUS_BIND:
            raise ParamError('这张消费券不能使用了!')

        if not coupon_mchnt_id:
            mchnt_id_list = []
            mchnt_id_json = ''
            with get_connection('qf_marketing') as db:
                mchnt_id_json = db.select_one(
                    fields='mchnt_id_list',
                    where={'coupon_rule_id': coupon_rule_id})

            if not mchnt_id_json:
                raise ParamError('查询可使用商户列表失败')

            mchnt_id_list = json.loads(mchnt_id_json)

            if not (str(userid) in mchnt_id_list):
                raise ParamError('该消费券不能在该店铺使用')
        if int(coupon_mchnt_id) != int(userid):
            raise ParamError('该消费券不能在该店铺使用')

        # 使用红包
        coas = CouponOperateArgs()
        coas.coupon_code = cb_info.get('coupon_code')
        coas.src = cb_info.get('src')
        coas.type = COUPON_STATUS_USE
        coas.trade_amt = int(amt)
        coas.customer_id = str(cb_info.get('customer_id'))
        coas.out_sn = str(getid())
        coas.content = '交易使用消费券'
        coas.mchnt_id = userid

        try:
            thrift_callex(config.QF_MARKETING_SERVERS, QFMarketing,
                          'coupon_use', coas)
        except:
            log.warn(traceback.format_exc())
            raise ThirdError('使用红包失败')

        return self.write(success({}))
Example #26
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
        })
Example #27
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))