Beispiel #1
0
    def del_trade_config(self, value):
        '''处理交易流水筛选多语言'''
        if not value:
            return value

        confs = copy.deepcopy(value)

        for conf in confs:
            for k, v in conf.iteritems():
                if k in ('choose_name', 'user_type'):
                    conf[k] = get_constant(v, self._language)
                elif k in ('ptype_name'):
                    conf[k] = [get_constant(i, self._language) for i in v]

        return confs
Beispiel #2
0
    def get_user(self, username):
        '''验证用户账号信息'''
        user = None
        with get_connection('qf_core') as db:
            if '@' in username:
                where = {'auth_user.email': username}
            else:
                where = {'auth_user.username': username}
            user = db.select_join_one(
                table1='auth_user',
                table2='profile',
                on={'auth_user.id': 'profile.userid'},
                where=where,
                fields=('auth_user.id as userid, auth_user.state, '
                        'auth_user.password, profile.groupid'))

        # 若用户未注册
        if not user:
            raise ParamError('您的账号未注册,请先注册一下吧')

        # 若用户状态错误
        elif user['state'] not in ALLOW_STATE:
            phone = get_qd_conf_value(mode='phone',
                                      key='csinfo',
                                      groupid=user['groupid'])
            errinfo = get_constant('账号状态有问题哟,联系客服问问吧。电话', self.get_language())
            raise UserError(errinfo + decode_from_utf8(phone))

        return user
Beispiel #3
0
    def get_mchnt_info(self, userid):
        mchnt_info = {}
        with get_connection('qf_core') as db:
            mchnt_info = db.select_one(table='auth_user',
                                       fields=['state as status', 'mobile'],
                                       where={'id': userid})

        if not mchnt_info:
            raise ParamError('主账号信息不存在')

        opname = get_constant('门店主账户', self.get_language())
        mchnt_info['opuid'] = '0000'
        mchnt_info['opname'] = opname

        return mchnt_info
Beispiel #4
0
    def get_user_modules(self, pos='all', addon=None, modules=None, **kw):
        '''
        获取用户功能模块
        参数:
            pos all:全部功能 home_page:首页
            addon 功能多加载的数据
            modules 模块(默认config.MODULES)
        '''
        language = self.get_language()
        # 用户所有功能
        services = self.get_user_services(pos, addon)
        services.sort(key=lambda x: x.get('weight', 0), reverse=True)

        # 用户模块定义
        gmodules = get_qd_conf_value(
            None,
            'modules',
            'service',
            groupid=self.get_groupid(),
            default=config.MODULES,
        )
        modules = copy.deepcopy(modules or gmodules)
        for i in modules:
            i['services'] = []
            if 'name' in i:
                i['name'] = get_constant(i['name'], language)
        module_dict = {
            module['module']: idx
            for idx, module in enumerate(modules)
        }

        # 分组
        for i in services:
            idx = module_dict[i.pop('module', None) or 'default']
            if 'fields' in kw:
                modules[idx]['services'].append({
                    field: i.get(field, '')
                    for field in kw['fields'] if field != 'tip' or i.get(field)
                })
            else:
                modules[idx]['services'].append(i)

        return [i for i in modules if i['services']]
Beispiel #5
0
    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,
        }))
Beispiel #6
0
    def get_audit_info(self):
        '''获取审核信息'''
        userid = int(self.user.userid)
        language = self.get_language()
        ret = {}

        # 获取用户审核信息
        ret['audit_state'] = self.get_audit_state(userid)
        title = UserDefine.AUDIT_STATE_DICT[ret['audit_state']]['title']
        ret['audit_title'] = get_constant(title, language)

        # 更新上次缓存的审核信息
        cache_state = self.get_cache_audit(userid)
        audit_update = 0
        if cache_state != -1:
            audit_update = 0 if ret['audit_state'] == int(cache_state) else 1
            self.set_cache_audit(userid, ret['audit_state'])
        ret['audit_update'] = audit_update

        return ret
Beispiel #7
0
    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})
Beispiel #8
0
    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]