コード例 #1
0
ファイル: promotion.py プロジェクト: zcxey2911/api_rpc
    def get_effect_list(self, user_id, page_number, page_size, req=None):
        result = []
        data_report_map = self.get_promotion_data_report(user_id)

        # 活动状态
        status = [1, 2, 3]
        if req:
            version, platform = get_app_info(
                req.environ.get('HTTP_USER_AGENT', ''))
            if version and version < "030300":
                status = [1, 2]

        # 活动列表
        actvs = []
        with get_connection('qf_mchnt') as conn:
            where = dict(userid=user_id, status=('in', status), type=1)
            actvs = conn.select('member_actv',
                                where=where,
                                other="order by id desc limit %d, %d" %
                                (page_number, page_size))

        now = datetime.datetime.now()
        for actv in actvs:
            new = {}
            new['id'] = actv['id']
            new['content'] = actv['content'] or actv['title']
            new['start_time'] = actv['start_time'].strftime(DATE_FMT)
            new['end_time'] = actv['expire_time'].strftime(DATE_FMT)

            ctime = datetime.datetime.fromtimestamp(actv['ctime'])
            notify_datetime = base.get_notify_datetime(ctime)
            new['notify_time'] = notify_datetime.strftime('%Y-%m-%d %H:%M')
            new['ctime'] = timestamp_str(actv['ctime'], DATETIME_FMT)

            # 被终止
            if actv['status'] == 3:
                new['state'] = new['status'] = 4
            # 审核失败
            elif actv['status'] == 2:
                new['state'] = new['status'] = 3
                new['audit_info'] = actv['audit_info']
            # 已结束
            elif actv['expire_time'] < now:
                new['state'] = new['status'] = 2
            # 进行中
            else:
                new['state'] = new['status'] = 1
                if now < notify_datetime:
                    new['status'] = 0

            # get data resport
            _report = dict(member_count=0,
                           transaction_count=0,
                           payment_count=0)
            data_report = data_report_map.get(actv['id'], _report.copy())
            new.update(data_report)
            result.append(new)

        return dict(allow_create=self.check_allow_create(user_id),
                    promotion_list=result)
コード例 #2
0
ファイル: v1.py プロジェクト: zcxey2911/api_rpc
    def GET(self):
        # 如果是大商户或者操作员, 暂不展示
        user_cate = self.get_user_cate()
        if user_cate in ('bigmerchant', 'opuser'):
            return success({'panels': []})

        # 版本号
        ua = self.req.environ.get('HTTP_USER_AGENT', '')
        self.version, self.platform = get_app_info(ua)

        # 根据渠道获取面板数据
        default_func_names = getattr(config, 'DATA_FUNCS', data_funcs.keys())
        func_names = get_qd_conf_value_ex(mode='data_func_names',
                                          key='ext',
                                          groupid=self.get_groupid(),
                                          default=default_func_names)

        funcs = get_value(func_names, self.platform, self.version)

        panels = []
        if funcs:
            with futures.ThreadPoolExecutor(10) as executor:
                for panel in executor.map(self._get_panel, funcs):
                    if panel:
                        panels += (panel
                                   if isinstance(panel, MulType) else [panel])
            panels.sort(key=lambda d: d.get('create_time'), reverse=True)
        return success({'panels': panels})
コード例 #3
0
    def GET(self):
        self._ua = self.req.environ.get('HTTP_USER_AGENT', '')
        log.debug('user_agent:%s userid:%s' % (self._ua, self.user.userid))
        ret = {}

        # app版本号 手机platform
        version, platform = get_app_info(self._ua)
        self._platform = (platform or self.req.inputjson().get('platform'))
        self._version = version

        # 获取appid
        self.appid = self.get_appid()

        # 获取语言
        self._language = self.get_language()

        #香港渠道是否可退款
        ret['is_refund'] = 1
        groupid = self.get_groupid()
        if groupid in config.HK_GROUPID:
            opuid = self.user.ses.get("opuid", '')
            cate = self.get_cate()
            if cate == 'submerchant' or opuid:
                ret['is_refund'] = 0

        # 获取配置
        app_conf = config.USER_CONF
        for k, v in app_conf.iteritems():
            if isinstance(v, types.DictType):
                try:
                    mode = v.get('mode', 'mchnt')
                    func = getattr(self, mode + '_conf')
                    value = func(**v)
                    # 版本控制
                    if v.get('app_control'):
                        value = get_value(value, self._platform, self._version)

                    # 如果是pay_sequence, 单独处理
                    if k == 'pay_sequence':
                        value = self.del_pay_sequence(value)

                    # 语言控制
                    if k == 'trade_config':
                        value = self.del_trade_config(value)

                    if value is not None:
                        ret[k] = value
                except:
                    log.debug(traceback.format_exc())

            elif hasattr(config, v):
                ret[k] = getattr(config, v)

        return self.write(success(ret))
コード例 #4
0
ファイル: notify_base.py プロジェクト: zcxey2911/api_rpc
    def GET(self):
        userid = self.user.ses.get('userid')

        # 获取版本号
        req = self.req
        log.debug('user_agent:%s' % req.environ.get('HTTP_USER_AGENT', ''))
        version, platform = get_app_info(req.environ.get(
            'HTTP_USER_AGENT', ''))
        log.info('version:%s  platform:%s' % (version, platform))

        type_list = self.get_type_list(userid, version)
        return self.write(success(type_list))
コード例 #5
0
ファイル: user.py プロジェクト: zcxey2911/api_rpc
    def _get_user_service(self):
        # 用户服务列表, 最少返回默认的列表
        user_service = Apollo(config.APOLLO_SERVERS).user_service(
            self.user.userid)
        user_service = {}.fromkeys([i['code'] for i in user_service] +
                                   config.DEFAULT_SERVICES).keys()

        # 获取版本号
        log.debug('user_agent:%s' %
                  self.req.environ.get('HTTP_USER_AGENT', ''))
        version, platform = get_app_info(
            self.req.environ.get('HTTP_USER_AGENT', ''))
        log.info('version:%s  platform:%s' % (version, platform))
        # 根据版本号和平台获取服务列表
        services = get_services(version, platform)
        services.sort(key=lambda x: x.get('weight', 0), reverse=True)
        scodes = [i['code'] for i in services]

        return [i for i in scodes if i in user_service]
コード例 #6
0
    def GET(self):
        log.debug('user_agent:%s' %
                  self.req.environ.get('HTTP_USER_AGENT', ''))
        version, platform = get_app_info(
            self.req.environ.get('HTTP_USER_AGENT', ''))
        log.info('version:%s  platform:%s' % (version, platform))

        # 获取服务列表
        # 早期版本没有带version
        default = 'middle' if 'version' in self.req.input() else 'origin'
        services = get_services(version, platform, default)
        services.sort(key=lambda x: x.get('weight', 0), reverse=True)

        return self.write(
            success({
                'system_services': services,
                'zip_conf': config.ZIP_CONFIG,
                'activity_conf': config.ACT_CONF,
                'pay_sequence': config.PAY_SEQUENCE,
            }))
コード例 #7
0
ファイル: v1.py プロジェクト: zcxey2911/api_rpc
    def GET(self):
        groupid = self.get_groupid()
        version, platform = get_app_info(
            self.req.environ.get('HTTP_USER_AGENT', ''))
        platform = platform or 'ios'

        # tabs配置
        menus = get_qd_conf_value(
            mode=platform + '_tabs', key='service', groupid=groupid) or []
        menus = copy.deepcopy(menus)

        language = self.get_language()
        for menu in menus:
            # 語言控制
            if 'name' in menu:
                menu['name'] = get_constant(menu['name'], language)

        return self.write(success({
            'tabs': menus,
        }))
コード例 #8
0
 def GET(self):
     r = deepcopy(paying_goods)
     r['now'] = int(time.time())
     _, platform = get_app_info(self.req.environ.get('HTTP_USER_AGENT',''))
     if self._ck_mode == 'sid':
         userid = self.user.userid
     for i in r['goods']:
         # 根据平台配置
         t = getattr(config, '_'.join([i['code'],platform,'SERVICE']).upper(), None)
         if t:
             i['services'] = t
         # 个人配置
         if self._ck_mode == 'sid':
             try:
                 redis_key = '__mchnt_api_goods_info_{}__'.format(i['code'])
                 tservices = json.loads(redis_pool.hget(redis_key, userid))
             except:
                 pass
             else:
                 i['services'] = tservices
         if not i.get('show_price'):
             i['price'] = []
     return self.write(success(r))
コード例 #9
0
ファイル: signup.py プロジェクト: zcxey2911/api_rpc
    def get_src(self):
        if hasattr(self, '_src'):
            return self._src

        useragent = self.req.environ.get('HTTP_USER_AGENT', '')
        log.debug('useragent:%s' % useragent)

        # 通过useragent判断
        version, platform = get_app_info(useragent)
        if platform:
            self._src = 'mchnt'
            return 'mchnt'

        # 通过上传值判断
        input_src = self.req.input().get('src')
        if not input_src:
            if 'QYB' in useragent:
                self._src = 'salesman'
            else:
                self._src = 'mchnt'
        else:
            self._src = input_src
        return self._src
コード例 #10
0
ファイル: v1.py プロジェクト: zcxey2911/api_rpc
    def GET(self):
        mode = self.req.input().get('mode')
        if mode not in ('main', 'settings'):
            mode = 'main'

        # 版本号, 平台
        version, platform = get_app_info(
            self.req.environ.get('HTTP_USER_AGENT', ''))
        platform = platform or 'ios'
        prefix = platform + ('' if mode == 'main' else '_' + mode)

        # 用户角色
        user_cate = self.get_user_cate()

        # 用户groupid
        groupid = self.get_groupid()

        # 用户信息
        userinfo = {}
        user = apcli_ex('findUserByid', int(self.user.userid))
        if user:
            userinfo = user.__dict__
            userinfo['userid'] = userinfo['uid']

        # 菜单配置
        menus = get_qd_conf_value_ex(
            mode=prefix + '_menu', key='service', groupid=groupid) or []
        menus = copy.deepcopy(menus)

        language = self.get_language()
        # 根据条件配置
        ret_menus = []
        for group in menus:
            t = []
            for menu in group['menu']:
                # 操作员管理不展示
                if (menu['tag'] == 'operator' and user_cate == 'opuser'):
                    continue

                # 根据角色控制展示
                cate_control = menu.pop('cate_control', None)
                if (cate_control is not None
                        and user_cate not in cate_control):
                    continue

                # 根据版本号控制
                app_control = menu.pop('app_control', None)
                if app_control is None:
                    tmp_menu = menu
                elif (app_control
                      and get_value(app_control, platform, version)):
                    tmp_menu = {
                        k: get_value(v, platform, version)
                        for k, v in menu.iteritems()
                    }
                else:
                    continue

                # 如果需要展示联系业务员
                if menu['tag'] == 'contact_salesman':
                    slsm_info = self.get_slsm_info(int(self.user.userid))
                    if not slsm_info:
                        continue

                    tmp_menu['content'] = slsm_info['telephone'] or slsm_info[
                        'mobile']
                    if not tmp_menu['content']:
                        continue

                tmp_menu['link'] = str(tmp_menu['link']).format(**userinfo)

                # 語言控制
                if 'title' in tmp_menu:
                    tmp_menu['title'] = get_constant(tmp_menu['title'],
                                                     language)

                t.append(tmp_menu)

            if t:
                ret_menus.append({'menu': t})

        # 能否修改基本信息
        # 国家不是中国的, 暂不支持修改
        qdinfo = get_qudaoinfo(groupid)
        support_cates = getattr(config, 'EDIT_INFO_CATES',
                                ['bigmerchant', 'merchant', 'submerchant'])
        if qdinfo['country'] != "CN" or user_cate not in support_cates:
            edit_info = 0

        else:
            edit_info = get_qd_conf_value(mode=platform + '_edit_info',
                                          key='service',
                                          groupid=groupid,
                                          default=1)

        return success({'menus': ret_menus, 'edit_info': edit_info})
コード例 #11
0
ファイル: base.py プロジェクト: zcxey2911/api_rpc
    def get_user_services(self, pos='all', addon=None, limit=None):
        '''
        获取用户功能列表
        参数:
            pos all:全部功能 home_page:首页 head: 头部
            addon 功能多加载的数据
            limit 限制数量
        '''
        userid = int(self.user.userid)
        language = self.get_language()

        # 获取用户的信息
        user = apcli('findUserBriefById', userid)
        if not user:
            raise ThirdError('商户不存在')
        user = user.__dict__
        self._user = user

        # 获取用户的登录角色
        user_cate = self.get_user_cate()

        # 获取渠道配置
        qd_conf = get_qd_conf()

        # 用户服务列表
        groupid = user['groupid']
        default_services = get_qd_conf_value(userid,
                                             'default',
                                             'service',
                                             groupid=groupid,
                                             default=config.DEFAULT_SERVICES,
                                             qd_confs=qd_conf)
        user_service = apcli.user_service(userid)
        self._user_service = {i['code']
                              for i in user_service} | set(default_services)

        # 根据版本号和平台获取服务列表
        version, platform = get_app_info(
            self.req.environ.get('HTTP_USER_AGENT', ''))
        log.info('user_agent:%s version:%s  platform:%s userid:%s' %
                 (self.req.environ.get('HTTP_USER_AGENT',
                                       ''), version, platform, userid))
        sys_services = get_qd_conf_value(userid,
                                         'services',
                                         'service',
                                         groupid=groupid,
                                         default=config.SYSTEM_SERVICES,
                                         qd_confs=qd_conf)
        must_addon = [
            'recharge_link', 'group_link', 'condition', 'dis_groupids',
            'nodis_groupids', 'dis_service', 'dis_condition', 'show_cate'
        ]
        addon = (addon or []) + must_addon
        services = get_services(version,
                                platform,
                                addon=addon,
                                sys_services=sys_services)

        # 调整返回值
        ret = []
        payinfo = None
        user_open_service = {i['code'] for i in user_service}
        for service in services:
            # 若不满足条件, 直接跳过
            if service['code'] not in self._user_service:
                continue

            # 指定角色才展示
            show_cates = service.pop('show_cate') or [
                'merchant', 'submerchant'
            ]
            if user_cate not in show_cates:
                continue

            # 显示位置判断
            tpos = service.pop('pos') or ['all']
            if pos not in tpos:
                continue

            dis_condition = service.pop('dis_condition', None)
            if dis_condition:
                try:
                    if not eval(
                            dis_condition,
                        {
                            'user': user,
                            'user_open': service['code'] in user_open_service
                        }):
                        continue
                except:
                    log.warn(traceback.format_exc())
                    continue

            # 条件
            condition = service.pop('condition', None)

            # 渠道link
            group_link = service.pop('group_link', None)  # 渠道link

            # 根据grouid配置是否展示
            dis_groupids = service.pop('dis_groupids') or config.QF_GROUPIDS
            nodis_groupids = service.pop(
                'nodis_groupids') or config.QF_GROUPIDS

            # 付费后的链接
            recharge_link = service.pop('recharge_link', None)

            # 余额提现链接
            dis_service = service.pop('dis_service', '')

            # 根据条件判断
            if condition:
                # 如果指定服务存在将不展示
                if ('dis_service' in condition
                        and dis_service in self._user_service):
                    continue

                # 根据渠道判断
                # 白牌渠道不展示
                if 'group_dis' in condition:
                    if groupid in qd_conf:
                        continue

                # 根据渠道id来控制展示
                if 'group_control' in condition:
                    if groupid not in dis_groupids:
                        continue

                # 根据渠道id来控制展示
                if 'nogroup_control' in condition:
                    if groupid in nodis_groupids:
                        continue

                # 白牌渠道link
                if 'group_link' in condition:
                    if groupid in qd_conf:
                        service['link'] = group_link

                # 开通点餐服务
                if 'diancan_service' in condition:
                    if payinfo is None:
                        payinfo = get_mchnt_paying(userid, code='diancan')
                    if payinfo and str(payinfo['expire_time']) > time.strftime(
                            DATETIME_FMT):
                        service['link'] = recharge_link

            # 链接带上参数
            service['link'] = service['link'].format(**user)

            # name根据语言可控制
            if 'name' in service:
                service['name'] = get_constant(service['name'], language)

            ret.append(service)

        return ret[:limit]
コード例 #12
0
ファイル: signup.py プロジェクト: zcxey2911/api_rpc
    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)