def get_card_values(first_code, last_code, card_id): """ 银行卡:获取卡片年度权益价值和消费收益价值 :param random_str: 8位随机字符串 :param token: :param first_code: :param last_code: :param card_id: :return: 卡片年度权益价值和消费收益价值 """ if not first_code or len(first_code) != 8 or not first_code.isdigit() or \ not last_code or len(last_code) != 4 or not last_code.isdigit() or not card_id: raise ServerExceptions.FORMAT_ERROR end_date = time.strftime('%Y-%m-%d 00:00:00', time.localtime(time.time())) # TODO ORM化 sql = 'select id, bin_code, (select sum(repay) from act where status=1 and end_date > \'{}\' and ' \ 'id in (select act_id from act_card_ref where card_id={})) from card where id={};'.format( end_date, card_id, card_id) card_info = DBSession().execute(sql).fetchone() card_id, bin_code, cost_value = card_info # 判断bin 的前6位是不是一样的 if not [bc for bc in bin_code if bc.startswith(first_code[:6])]: raise ServerExceptions.DATA_NOT_FOUND benefits = DBSession().query(CardBenefit.id, CardBenefit.pay, CardBenefit.repay, CardBenefit.usage_count, CardBenefit.period_type).filter( CardBenefitRef.benefit_id == CardBenefit.id, CardBenefitRef.card_id == card_id, CardBenefitRef.status == 1, CardBenefit.status == 1).all() benefit_keys = ("id", "pay", "repay", "usage_count", "period_type") benefit_data = [dict(zip(benefit_keys, cf)) for cf in benefits] year_benefit = 0.0 for benefit in benefit_data: if benefit.get('period_type') == CardBenefit.PERIOD_TYPE_SEASON and benefit['usage_count']: benefit['usage_count'] *= 4 elif benefit.get('period_type') == CardBenefit.PERIOD_TYPE_MONTH and benefit['usage_count']: benefit['usage_count'] *= 12 if benefit['repay'] and float(benefit['repay']) and benefit['usage_count'] and int(benefit['usage_count']): year_benefit += float(benefit['repay']) * benefit['usage_count'] return { 'year_benefit': year_benefit, 'cost_value': cost_value, 'currency': u'人民币', }
def check_access_key(token, endpoint): config = current_app.config # 判断access_key是否有效, 如果redis里面有这个company id,就表示公司存在,如果没有就去数据库查找 company_key = 'company:{}'.format(token) company_id = get_rds(company_key) if not company_id: companys = DBSession().query(AccessKey.company_id, TokenHistory.create_time)\ .filter(TokenHistory.token == token, TokenHistory.status == 1, AccessKey.access_key == TokenHistory.access_key, AccessKey.status == 1).first() if not companys: logger.error('没有找到用户账号, token:{}, company_id:{}'.format( token, company_id)) raise ServerExceptions.TOKEN_ERROR company_id, token_create_time = companys # 判断token有没有过期 t = token_create_time + datetime.timedelta( seconds=config['TOKEN_MAX_EFFECTIVE_SEC']) - datetime.datetime.now( ) if t <= datetime.timedelta(seconds=0): TokenHistory.set_invaild_token(token) raise ServerExceptions.TOKEN_ERROR set_rds_ex(company_key, company_id, t.seconds) print token, endpoint, company_id # 判断访问接口的权限 access_right = get_rds('access_right:{}:{}'.format(token, endpoint)) if not access_right: ref = DBSession().query(Uri).filter( Uri.endpoint == endpoint, UriAccessRef.company_id == company_id, Uri.id == UriAccessRef.uri_id, Uri.status == 1, UriAccessRef.status == 1).first() if not ref: logger.error('没有访问权限, token:{}, company_id:{}'.format( token, company_id)) raise ServerExceptions.ACCESS_RIGHT_ERROR set_rds_ex('access_right:{}:{}'.format(token, endpoint), 1, config['RDS_TIME']) return company_id
def get_card_benefits(first_code, last_code, card_id): verify_and_get(first_code, last_code, card_id) benefits = DBSession().query(CardBenefit.id, CardBenefit.pay, CardBenefit.repay).filter( CardBenefitRef.card_id == card_id, CardBenefitRef.status == 1, CardBenefitRef.benefit_id == CardBenefit.id, CardBenefit.status == 1).all() benefit_keys = ("id", "pay", "repay") benefit_data = [dict(zip(benefit_keys, cf)) for cf in benefits] for benefit in benefit_data: benefit.update({'pay_currency': u'人民币' if benefit.get('pay') else None, 'repay_currency': u'人民币' if benefit.get('repay') else None}) card_info = { 'card_benefit': benefit_data, } return card_info
def get_card_benefits_graphics(first_code, last_code, card_id, category_style): if not category_style in (1, 2): raise ServerExceptions.FORMAT_ERROR verify_and_get(first_code, last_code, card_id) benefits = DBSession().query(CardBenefit.id, CardBenefit.pay, CardBenefit.repay, CardBenefit.tags).filter( CardBenefitRef.card_id == card_id, CardBenefitRef.status == 1, CardBenefitRef.benefit_id == CardBenefit.id, CardBenefit.status == 1).all() benefit_keys = ("id", "pay", "repay", "tags") benefit_data = [dict(zip(benefit_keys, cf)) for cf in benefits] all_repay = 0 benefit_dict = {} for benefit in benefit_data: tag_list = benefit['tags'] new_category = None if len(tag_list) > 1: if category_style == 1: new_category = tag_list[0]['name'] elif category_style == 2: new_category = u'综合' else: new_category = tag_list[0]['name'] if len(tag_list) == 1 else u'其他' repay = float(benefit['repay']) if benefit['repay'] else 0.0 all_repay += repay if benefit_dict.get(new_category, None): benefit_dict[new_category] += repay else: benefit_dict[new_category] = repay result = [] for (key, val) in benefit_dict.items(): result.append({ 'category': key, 'rate': float(val / all_repay), }) return result
def mget_fields(cls, ids): if not ids: return [] return DBSession().query(cls.id, cls.repay).filter(cls.id.in_(ids), cls.status == 1).all()
def mget_online(cls, ids): if not ids: return [] return DBSession().query(cls).filter( cls.id.in_(ids), cls.status == 1, cls.end_date > datetime.datetime.today().date()).all()
def mget_fields(cls, ids): if not ids: return [] return DBSession().query(cls.id, cls.pay, cls.repay, cls.category, cls.usage_scene).filter( cls.id.in_(ids), cls.status == 1).all()
def set_invaild_token(cls, token): row = DBSession().query(cls).filter(cls.token == token).first() if not row: row.status = 0 row.save()