Exemple #1
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}))
Exemple #2
0
def getid():
    '''通过spring生成id'''
    return ThriftClient(config.SPING_SERVERS, Spring).getid()
Exemple #3
0
def getids(num=1):
    '''通过spring生成id'''
    if num:
        return ThriftClient(config.SPING_SERVERS, Spring).getids(num)
Exemple #4
0
    def auto_apply(self, userid):
        data = self._data
        td, now = time.strftime(DATE_FMT), time.strftime(DATETIME_FMT)
        #新审核系统预设参数
        info = {}
        #凭证参数
        piclist = []

        # 字典转码
        def byteify(input):
            if isinstance(input, dict):
                return {
                    byteify(key): byteify(value)
                    for key, value in input.iteritems()
                }
            elif isinstance(input, list):
                return [byteify(element) for element in input]
            elif isinstance(input, unicode):
                return input.encode('utf-8')
            else:
                return input

        # 写入凭证
        with get_connection('qf_mis') as db:
            d = {k: v.strip() for k, v in self.req.input().iteritems()}
            cert_types = UserDefine.CERT_TYPE
            for code in UserDefine.CERT_TYPE_LIST:
                if (code not in d or not d[code] or code not in cert_types):
                    continue
                insert_data = {
                    'user_id': userid,
                    'upgrade_id': 0,
                    'apply_level': 0,
                    'cert_type': cert_types[code],
                    'name': code,
                    'submit_time': now,
                    'state': 1,
                    'input_state': 1,
                    'typist_user': 0,
                    'typist_time': now,
                    'imgname': d[code]
                }

                try:
                    piclist.append({
                        "name": str(code),
                        "src": str(d[code]),
                        "cert_type": str(cert_types[code])
                    })
                    db.insert('mis_upgrade_voucher', insert_data)
                except:
                    log.debug(traceback.format_exc())

        info["piclist"] = piclist

        # 写入审核
        version, platform = get_app_info(
            self.req.environ.get('HTTP_USER_AGENT', ''))
        src = ''.join([data['src'], platform, version])
        idstatdate = (data['idstatdate'] if is_valid_date(
            data.get('idstatdate')) else td)
        idenddate = (data['idenddate']
                     if is_valid_date(data.get('idenddate')) else td)

        # mcc
        if data['cate'] == 'saleman' and not data['shoptype_id']:
            mcc = UserDefine.DEFAULT_SALEMAN_MCC
        else:
            mcc = UserUtil.get_mcc(data['shoptype_id'])

        apply_values = {
            'user': int(userid),
            'usertype': data['usertype'],
            'legalperson': data['legalperson'] or data['bankuser'],
            'name': data['name'],
            'idnumber': data['idnumber'],
            'idstatdate': idstatdate,
            'idenddate': idenddate,
            'telephone': data['landline'],
            'idphoto1': data['idcardfront'],
            'idphoto2': data['idcardback'],
            'licenseend_date': td,
            'licensephoto': '',
            'taxenddate': td,
            'longitude': covert(data['longitude'], float),
            'latitude': covert(data['latitude'], float),
            'address':
            ''.join([data['city'], data['location'], data['address']]),
            'city': data['city'],
            'province': data['province'],
            'mobile': data['username'],
            'headbankname': data['headbankname'],
            'banktype': (2 if data['banktype'] == '2' else 1),
            'bankname': data['bankname'],
            'bankuser': data['bankuser'],
            'bankProvince': data['bankprovince'],
            'bankCity': data['bankcity'],
            'bankaccount': data['bankaccount'].replace(' ', ''),
            'state': 4,
            'brchbank_code': data['bankcode'],
            'mcc': mcc,
            'nickname': data['shopname'],
            'src': src,
            'groupid': data['groupid'],
            'srctype': UserDefine.SIGNUP_SRCTYPE_TINY,  # 先固定为小微商户
            'edu': 1,
            'monthincome': 0,
            'monthexpense': 0,
            'tid': '',
            'terminalcount': 1,
            'last_admin': 0,
            'allowarea': 0,
            'needauth': 2,
            'passcheck': 2,
            'last_modify': now,
            'post': '',
            'provision': '',
            'bankmobile': data['bankmobile'],
            'monthtradeamount': 1,
            'founddate': td,
            'area': 100,
            'payment_type': 1,
            'rent_count': 0,
            'pertradeamount': 1,
            'rent_total_amt': -1,
            'utime': now,
            'uploadtime': now,
            "licensenumber": data.get("licensenumber", "")
        }

        # 获取上传费率
        apply_values['ratio'] = self.get_ratio() or ''

        #收集后台需要的字段,摒弃废弃字段,后期只用下面的字段
        userid = int(userid)
        groupid = int(data['groupid'])

        info["usertype"] = data['usertype']
        info["mobile"] = data['username']
        info["name"] = data['name']
        info["cardstart"] = data['idstatdate']
        info["cardend"] = data['idenddate']
        info["legalperson"] = data['legalperson'] or data['bankuser']
        info["src"] = data['src']
        info["licensenumber"] = data['licensenumber']
        info["mcc"] = mcc
        info["risk_level"] = "54"
        info["telephone"] = data['landline']
        info["nickname"] = data['shopname']
        info["bankaccount"] = data['bankaccount'].replace(' ', '')
        info["shop_province"] = data['province']
        info["shop_city"] = data['city']
        info["shop_address"] = data['address']
        info["banktype"] = (2 if data['banktype'] == '2' else 1)
        info["bankname"] = data['bankname']
        info["bankuser"] = data['bankuser']
        info["headbankname"] = data['headbankname']
        info["bankcode"] = data['bankcode']

        fee = self.get_ratio() or ''
        if fee != '':
            fee = json.loads(fee)
            for (k, v) in fee.items():
                info[k] = v

        info = byteify(info)
        info = json.dumps(info, ensure_ascii=False)

        #指定的灰度渠道下商户进入新审核逻辑
        if groupid in config.NEW_AUDIT_GROUP:
            client = ThriftClient(config.AUDIT_SERVERS,
                                  AuditServer,
                                  framed=False)
            client.raise_except = True
            re = client.call(
                'add_audit',
                audit_api(audit_type='signup',
                          userid=userid,
                          groupid=groupid,
                          info=info))

        #其他渠道的商户继续老的审核系统
        else:
            with get_connection('qf_mis') as db:
                db.insert('apply', apply_values)

        self.set_cache_audit(userid, 2)