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 getid(): '''通过spring生成id''' return ThriftClient(config.SPING_SERVERS, Spring).getid()
def getids(num=1): '''通过spring生成id''' if num: return ThriftClient(config.SPING_SERVERS, Spring).getids(num)
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)