예제 #1
0
파일: v1.py 프로젝트: zcxey2911/api_rpc
 def _vip(self, userid):
     '''获取商户充值信息'''
     mchnt_info = adjust_payinfo_ex(userid,
                                    service_code='card_actv',
                                    groupid=self.get_groupid())
     log.debug('mchnt_info:%s' % mchnt_info)
     return self.eval_advice('vip', mchnt_info)
예제 #2
0
파일: member.py 프로젝트: zcxey2911/api_rpc
    def _trans_input(self):
        d = {k: v.strip() for k, v in self.req.input().iteritems()}
        r = {}
        r['userid'] = int(self.user.ses.get('userid', ''))

        # 排序信息
        allow_order_field = ['num', 'txamt', 'last_txdtm']
        allow_order_type = ['desc', 'asc']
        order_field = d.get('order_field') or 'last_txdtm'
        order_type = d.get('order_type') or 'desc'
        if order_field not in allow_order_field or order_type not in allow_order_type:
            raise ParamError('排序信息错误')
        r['orderby'] = 'order by %s %s' % (order_field, order_type)

        # 分页信息
        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)

        # 商户付费信息
        r['mchnt_info'] = adjust_payinfo_ex(r['userid'],
                                            service_code='member_manage',
                                            groupid=self.get_groupid())

        return r
예제 #3
0
파일: v1.py 프로젝트: zcxey2911/api_rpc
    def GET(self):
        d = {k: v.strip() for k, v in self.req.input().iteritems()}
        try:
            userid = self.user.ses['userid']
            groupid = self.get_groupid()
        except:
            userid = d.get('userid')
            groupid = self.get_groupid(userid=userid)
        if not userid or not is_valid_int(userid):
            raise ParamError('商户ID不能为空')

        service_code = d.get('service_code') or d.get('code') or 'card_actv'
        goods_code = d.get('goods_code')

        mchnt_info = adjust_payinfo_ex(userid,
                                       goods_code,
                                       service_code,
                                       groupid=groupid)
        mchnt_info['now'] = time.strftime(DATETIME_FMT)

        # 登录状态时, 返回会员数
        if self._ck_mode == 'sid':
            with get_connection('qf_mchnt') as db:
                mchnt_info['member_num'] = db.select_one(
                    'member',
                    where={'userid': int(userid)},
                    fields='count(*) as num')['num']

        # 是否是直营商户
        mchnt_info['is_qfgroup'] = int(groupid in config.QF_GROUPIDS)

        return self.write(success(mchnt_info))
예제 #4
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)
예제 #5
0
    def get_overdue(self, limit, offset):
        '''
        会员服务过期
        '''
        member_limit = get_qd_conf_value(mode='member_limit', key='service',
                                         groupid=self.get_groupid(), default=10)

        overdue = {'limit': member_limit, 'warn': 0, 'note': ''}
        if limit+offset < member_limit:
            return overdue

        payinfo = adjust_payinfo_ex(self.user.userid,
                service_code= 'member_manage', groupid= self.get_groupid())
        if payinfo['overdue']:
            overdue['warn'] = 1
            overdue['note'] = ('未开通会员服务,仅可显示{}个会'
                               '员信息'.format(member_limit))
            overdue['limit'] = max(min(member_limit-offset, limit), 0)

        return overdue
예제 #6
0
파일: base.py 프로젝트: zcxey2911/api_rpc
    def get_recharge_info(userid, groupid=None):
        '''获取商户付费信息'''
        # 商户付费情况
        mchnt_info = adjust_payinfo_ex(userid,
                                       service_code='card_actv',
                                       groupid=groupid)

        # 付费过期
        if mchnt_info['status'] and mchnt_info['overdue']:
            num = 0
            with get_connection('qf_mchnt') as db:
                num = db.select_one('member',
                                    where={'userid': userid},
                                    fields='count(*) as num')['num']
            # 过期提示
            mchnt_info['note'] = ('抱歉,您的会员服务已到期,会员功能将无法继续使用,正常收款不受影响。'
                                  '为保证{num}已有会员的体验,建议尽快续费哦~'.format(
                                      num='%d位' % num if num else ''))
            mchnt_info['num'] = num

        return mchnt_info
예제 #7
0
파일: notify.py 프로젝트: zcxey2911/api_rpc
    def _query(self, d):
        rcard, rcustomer, overdue = {}, {}, 0
        now = int(time.time())
        # 获取生效的集点活动
        with get_connection('qf_mchnt') as db:
            rcard = db.select_one(
                'card_actv',
                where={
                    'userid': self.get_userid_condition(d['userid']),
                    'expire_time': ('>=', now),
                    'start_time': ('<', now)
                },
                fields=('id, start_time, expire_time, status, goods_name,'
                        'goods_amt, exchange_pt, obtain_amt, obtain_limit,'
                        'statement'),
                other='order by ctime desc')
            # 暂无生效的集点活动
            if not rcard:
                return None, None, 0

        # 商户过期信息
        overdue = adjust_payinfo_ex(
            userid=d['userid'],
            service_code='card_actv',
            groupid=self.get_groupid(userid=d['userid']))['overdue']

        with get_connection('qf_mchnt') as db:
            # 消费者信息
            customer_info = db.select_one('member_pt',
                                          where={
                                              'activity_id': rcard['id'],
                                              'customer_id': d['customer_id']
                                          }) or {}

            # 若商户过期
            if overdue:
                # 若是新消费者或者老商户且已经兑换过礼品,
                # 则不能继续集点活动了
                if (not customer_info or (not customer_info['cur_pt']
                                          and customer_info['total_pt'])):
                    return None, None, overdue

            # 返回的消费者信息
            rcustomer['cur_pt'] = customer_info.get('cur_pt') or 0
            rcustomer['is_new'] = CardBase.is_new_card(d['userid'],
                                                       d['customer_id'],
                                                       d['src'])
            rcustomer['diff_obtain_amt'] = max(
                rcard['obtain_amt'] - d['txamt'], 0)
            rcustomer['card_id'] = customer_info.get('id')
            obtain_pts = min(d['txamt'] / rcard['obtain_amt'],
                             rcard['obtain_limit'] or sys.maxint)
            rcustomer['obtain_pts'] = obtain_pts
            rcustomer['exchange'] = rcustomer['cur_pt'] / rcard['exchange_pt']

            # 插入pt_record
            # 插入失败即代表已领取过集点
            is_obtain = False
            try:
                # 若满足条件
                if not rcustomer['diff_obtain_amt']:
                    fields = [
                        'userid', 'customer_id', 'out_sn', 'txamt', 'total_amt'
                    ]
                    pt_indata = {field: d[field] for field in fields}
                    pt_indata['ctime'] = pt_indata['utime'] = now
                    pt_indata['activity_id'] = rcard['id']
                    pt_indata['type'] = PT_RECORD_GET
                    pt_indata['id'] = getid()
                    pt_indata['pts'] = obtain_pts

                    db.insert('pt_record', pt_indata)
            except:
                is_obtain = True

            # 若未领取集点
            if not is_obtain:
                try:
                    # 新集点卡消费者
                    if not customer_info:
                        m = {
                            field: d[field]
                            for field in
                            ['userid', 'customer_id', 'txamt', 'total_amt']
                        }
                        if not obtain_pts:
                            m['txamt'] = m['total_amt'] = 0

                        rcustomer['card_id'] = m['id'] = getid()
                        m['activity_id'] = rcard['id']
                        m['ctime'] = m['utime'] = now
                        m['cur_pt'] = m['total_pt'] = obtain_pts

                        db.insert('member_pt', m)

                    # 有集点的老客户
                    elif obtain_pts:
                        umwhere = {
                            'activity_id': rcard['id'],
                            'customer_id': d['customer_id']
                        }
                        umdata = {
                            'txamt': DBFunc('txamt+%s' % d['txamt']),
                            'total_amt':
                            DBFunc('total_amt+%s' % d['total_amt']),
                            'total_pt': DBFunc('total_pt+%d' % obtain_pts),
                            'cur_pt': DBFunc('cur_pt+%d' % obtain_pts),
                            'utime': now
                        }
                        db.update('member_pt', umdata, umwhere)

                except:
                    log.debug('更新消费者集点信息失败, %s' % traceback.format_exc())
                else:
                    rcustomer['cur_pt'] += obtain_pts
                    # 获取到集点, 更新活动统计信息
                    if obtain_pts:
                        try:
                            ucwhere = {'id': rcard['id']}
                            ucdata = {
                                'total_pt': DBFunc('total_pt+%d' % obtain_pts),
                                'utime': now
                            }
                            db.update('card_actv', ucdata, ucwhere)
                        except:
                            log.debug(traceback.format_exc())

                    # 延后跟新member_tag
                    gevent.spawn(self.update, d['userid'], d['customer_id'])

            # 活动信息
            rcard['id'] = str(rcard['id'])
            rcard['start_time'] = str_to_tstamp(str(rcard['start_time']))
            rcard['expire_time'] = str_to_tstamp(str(rcard['expire_time']))

            # 消费者
            org_pt, now_pt = rcustomer['cur_pt'] - obtain_pts, rcustomer[
                'cur_pt']
            rcustomer['add_exchange'] = (now_pt / rcard['exchange_pt'] -
                                         org_pt / rcard['exchange_pt'])
            rcustomer['diff_exchange'] = max(
                rcard['exchange_pt'] -
                rcustomer['cur_pt'] % rcard['exchange_pt'], 0)

        return rcard, rcustomer, overdue