示例#1
0
 def add(self, formdata, bas_ids=[], **kwargs):
     try:
         node = models.TrNode()
         node.id = formdata.node_id if 'node_id' in formdata else utils.get_uuid(
         )
         node.node_name = formdata.node_name
         node.node_type = utils.safeunicode(
             formdata.get('node_type', 'other'))
         node.rule_id = formdata.rule_id
         node.node_desc = formdata.get('node_desc', '')
         node.sync_ver = tools.gen_sync_ver()
         self.db.add(node)
         for bas_id in bas_ids:
             basnode = models.TrBasNode()
             basnode.bas_id = bas_id
             basnode.node_id = node.id
             basnode.sync_ver = tools.gen_sync_ver()
             self.db.add(basnode)
         self.add_oplog(u'新增区域信息:%s' %
                        utils.safeunicode(formdata.node_name))
         self.db.commit()
         return node
     except Exception as err:
         self.db.rollback()
         logger.exception(err, tag='node_add_error')
         self.last_error = u'区域创建失败:%s' % utils.safeunicode(err)
         return False
示例#2
0
 def update(self, formdata, bas_ids=[], **kwargs):
     try:
         node = self.get_safe_node(formdata.id)
         node.node_type = utils.safeunicode(
             formdata.get('node_type', 'other'))
         node.node_name = formdata.node_name
         node.node_desc = formdata.get('node_desc', '')
         if 'rule_id' in formdata:
             node.rule_id = formdata.rule_id
         node.sync_ver = tools.gen_sync_ver()
         self.db.query(models.TrBasNode).filter_by(node_id=node.id).delete()
         for bas_id in bas_ids:
             basnode = models.TrBasNode()
             basnode.bas_id = bas_id
             basnode.node_id = node.id
             basnode.sync_ver = tools.gen_sync_ver()
             self.db.add(basnode)
         self.add_oplog(u'修改区域信息:%s' %
                        utils.safeunicode(formdata.node_name))
         self.db.commit()
         return node
     except Exception as err:
         self.db.rollback()
         logger.exception(err, tag='node_update_error')
         self.last_error = u'修改区域失败:%s' % utils.safeunicode(err)
         return False
示例#3
0
    def post(self):
        nodes = [(n.id, n.node_desc) for n in self.db.query(models.TrNode)]
        products = [(p.id, p.product_name)
                    for p in self.db.query(models.TrProduct)]
        form = operator_form.operator_add_form(nodes, products)
        if not form.validates(source=self.get_params()):
            return self.render('opr_form.html',
                               form=form,
                               rules=self.get_arguments('rule_item'))
        if self.db.query(models.TrOperator.id).filter_by(
                operator_name=form.d.operator_name).count() > 0:
            return self.render('opr_form.html',
                               form=form,
                               msg=u'操作员已经存在',
                               rules=self.get_arguments('rule_item'))
        operator = models.TrOperator()
        operator.id = utils.get_uuid()
        operator.operator_name = form.d.operator_name
        operator.operator_pass = md5(form.d.operator_pass.encode()).hexdigest()
        operator.operator_type = 1
        operator.operator_desc = form.d.operator_desc
        operator.operator_status = form.d.operator_status
        operator.sync_ver = tools.gen_sync_ver()
        self.db.add(operator)
        self.add_oplog(u'新增操作员信息:%s' %
                       utils.safeunicode(operator.operator_name))
        for node_id in self.get_arguments('operator_nodes'):
            onode = models.TrOperatorNodes()
            onode.operator_name = form.d.operator_name
            onode.node_id = node_id
            onode.sync_ver = tools.gen_sync_ver()
            self.db.add(onode)

        for product_id in self.get_arguments('operator_products'):
            oproduct = models.TrOperatorProducts()
            oproduct.operator_name = form.d.operator_name
            oproduct.product_id = product_id
            oproduct.sync_ver = tools.gen_sync_ver()
            self.db.add(oproduct)

        for path in self.get_arguments('rule_item'):
            item = permit.get_route(path)
            if not item:
                continue
            rule = models.TrOperatorRule()
            rule.id = utils.get_uuid()
            rule.operator_name = operator.operator_name
            rule.rule_name = item['name']
            rule.rule_path = item['path']
            rule.rule_category = item['category']
            rule.sync_ver = tools.gen_sync_ver()
            self.db.add(rule)

        self.db.commit()
        for rule in self.db.query(models.TrOperatorRule).filter_by(
                operator_name=operator.operator_name):
            permit.bind_opr(rule.operator_name, rule.rule_path)

        self.redirect('/admin/operator', permanent=False)
示例#4
0
 def recharge(self, formdata, **kwargs):
     try:
         rfee = utils.yuan2fen(formdata.fee_value)
         if rfee <= 0:
             raise ValueError(u'充值金额必须大于0')
         agency = self.db.query(models.TrAgency).get(formdata.agency_id)
         agency.amount += rfee
         aorder = models.TrAgencyOrder()
         aorder.id = utils.get_uuid()
         aorder.agency_id = agency.id
         aorder.fee_type = 'recharge'
         aorder.fee_value = rfee
         aorder.fee_total = agency.amount
         aorder.fee_desc = u'代理商 (%s) 充值' % utils.safeunicode(agency.agency_name)
         aorder.create_time = utils.get_currtime()
         aorder.sync_ver = tools.gen_sync_ver()
         self.db.add(aorder)
         self.add_oplog(u'代理商(%s)充值' % utils.safeunicode(agency.agency_name))
         self.db.commit()
         return agency
     except Exception as err:
         self.db.rollback()
         logger.exception(err, tag='agency_recharge_error')
         self.last_error = u'代理商充值失败:%s' % utils.safeunicode(err)
         return False
示例#5
0
    def password(self, formdata, **kwargs):
        """用户密码修改

        :param formdata:   密码修改参数表
        :type formdata:    dict
        
        formdata params:

        :param account_number:   用户账号
        :type account_number:    string
        :param password:    用户新密码
        :type password:     string
        """
        try:
            account_number = self.parse_arg(formdata, 'account_number', rule=rules.not_null)
            password = self.parse_arg(formdata, 'password', rule=rules.not_null)
            print password
            account = self.db.query(models.TrAccount).get(account_number)
            account.password = self.aes.encrypt(password)
            account.sync_ver = tools.gen_sync_ver()
            node_id = self.db.query(models.TrCustomer.node_id).filter(models.TrCustomer.customer_id == models.TrAccount.customer_id, models.TrAccount.account_number == account_number).scalar()
            self.add_oplog(u'修改用户%s密码 ' % account_number)
            self.db.commit()
            dispatch.pub(CACHE_DELETE_EVENT, account_cache_key(account_number), async=True)
            return True
        except Exception as err:
            self.db.rollback()
            self.last_error = u'用户修改密码失败:%s' % utils.safeunicode(err.message)
            logger.error(self.last_error, tag='account_uppwd_error', username=formdata.get('account_number'))
            return False
示例#6
0
 def add_ticket(self, ticket):
     ticket['id'] = utils.get_uuid()
     ticket['sync_ver'] = tools.gen_sync_ver()
     table = models.TrTicket.__table__
     data = {k.name:ticket.get(k.name, '') for k in table.columns}
     with self.dbengine.begin() as conn:
         conn.execute(table.insert().values(**data))
示例#7
0
    def post(self):
        params = self.get_params()
        domain_code = params.pop('domain_code')
        domain = self.db.query(
            models.TrDomain).filter_by(domain_code=domain_code).first()
        for attr_name in params:
            if attr_name in ('active', 'submit', 'domain_code', 'tpl_name'):
                continue
            domain_attr = self.db.query(models.TrDomainAttr).filter_by(
                domain_code=domain_code, attr_name=attr_name).first()
            if not domain_attr:
                domain_attr = models.TrDomainAttr()
                domain_attr.id = tools.gen_num_id(16)
                domain_attr.domain_code = domain_code
                domain_attr.attr_name = attr_name
                domain_attr.attr_value = self.get_argument(attr_name)
                domain_attr.attr_desc = ''
                domain_attr.sync_ver = tools.gen_sync_ver()
                self.db.add(domain_attr)
            else:
                domain_attr.attr_value = self.get_argument(attr_name)
            dispatch.pub(db_cache.CACHE_SET_EVENT,
                         settings.wlanattr_cache_key(domain_attr.attr_name),
                         domain_attr.attr_value, 600)

        self.add_oplog(u'操作员(%s)修改wlan参数' % self.current_user.username)
        self.db.commit()
        self.redirect('/admin/wlan/domain/detail?domain_id=%s' % domain.id)
示例#8
0
 def test_add_update_delete_bas(self):
     node = self.add_node()
     bas = None
     with make_db(self.db) as db:
         serv = BasService(db, self.aes, config=self.config)
         ret = serv.add(
             Storage({
                 'ip_addr': '127.0.0.2',
                 'nas_id': '12121211',
                 'nodes': [node.id],
                 'dns_name': '',
                 'bas_name': 'taurusxac',
                 'bas_secret': '123456',
                 'vendor_id': '0',
                 'coa_port': '3799',
                 'sync_ver': tools.gen_sync_ver()
             }))
         if hasattr(serv, 'last_error'):
             print serv.last_error
         bas = self.warp(ret)
         raise bas or AssertionError
     with make_db(self.db) as db:
         serv = BasService(db, self.aes, config=self.config)
         ret = serv.update(
             Storage({
                 'id': bas.id,
                 'ip_addr': '127.1.0.1',
                 'nas_id': '12121211',
                 'nodes': [node.id],
                 'dns_name': '',
                 'bas_name': 'taurusxac2',
                 'bas_secret': '123456',
                 'vendor_id': '0',
                 'coa_port': '3799',
                 'sync_ver': tools.gen_sync_ver()
             }))
         if hasattr(serv, 'last_error'):
             print serv.last_error
         bas = self.warp(ret)
         raise bas or AssertionError
     with make_db(self.db) as db:
         serv = BasService(db, self.aes, config=self.config)
         ret = serv.delete(bas.id)
         if hasattr(serv, 'last_error'):
             print serv.last_error
         raise ret or AssertionError
     return
示例#9
0
    def update(self, formdata, **kwargs):
        """用户账号策略修改

        :param formdata:   密码修改参数表
        :type formdata:    dict
        
        formdata params:
        
        :param account_number:   用户账号
        :type account_number:    string
        :param ip_address:    用户IP地址
        :type ip_address:     string - x.x.x.x
        :param install_address:    用户安装地址
        :type install_address:    string
        :param domain:    用户域,对BRAS的特定扩展
        :type domain:    string
        :param user_concur_number:   用户在线数限制
        :type user_concur_number:    int
        :param bind_mac:    用户是否绑定mac
        :type bind_mac:    int - 0 不绑定 1 绑定
        :param bind_vlan:    用户是否绑定vlan
        :type bind_vlan:    int 0 不绑定 1 绑定
        :param account_desc:    用户描述
        :type account_desc:    string
        """
        try:
            account_number = self.parse_arg(formdata, 'account_number', rule=rules.not_null)
            user_concur_number = self.parse_arg(formdata, 'user_concur_number', rule=rules.is_number)
            bind_mac = self.parse_arg(formdata, 'bind_mac', rule=rules.is_number)
            bind_vlan = self.parse_arg(formdata, 'bind_vlan', rule=rules.is_number)
            ip_address = self.parse_arg(formdata, 'ip_address')
            install_address = self.parse_arg(formdata, 'install_address')
            domain = self.parse_arg(formdata, 'domain')
            account_desc = self.parse_arg(formdata, 'account_desc')
            account = self.db.query(models.TrAccount).get(account_number)
            node_id = self.db.query(models.TrCustomer.node_id).filter(models.TrCustomer.customer_id == models.TrAccount.customer_id, models.TrAccount.account_number == account_number).scalar()
            if ip_address is not None:
                account.ip_address = ip_address
            if install_address is not None:
                account.install_address = install_address
            account.user_concur_number = user_concur_number
            account.bind_mac = bind_mac
            account.bind_vlan = bind_vlan
            if domain is not None:
                account.domain = domain
            if account_desc is not None:
                account.account_desc = account_desc
            account.sync_ver = tools.gen_sync_ver()
            self.add_oplog(u'修改上网账号信息:%s' % account.account_number)
            self.db.commit()
            dispatch.pub(CACHE_DELETE_EVENT, account_cache_key(account.account_number), async=True)
            return True
        except Exception as err:
            self.db.rollback()
            self.last_error = u'用户修改失败:%s' % utils.safeunicode(err.message)
            logger.error(self.last_error, tag='account_update_error', username=formdata.get('account_number'))
            return False

        return
示例#10
0
 def update_billing(self, billing):
     billing['sync_ver'] = tools.gen_sync_ver()
     acctount_table = models.TrAccount.__table__
     acctount_attr_table = models.TrAccountAttr.__table__
     online_table = models.TrOnline.__table__
     with self.dbengine.begin() as conn:
         conn.execute(acctount_table.update().where(acctount_table.c.account_number == billing.account_number).values(time_length=billing.time_length, flow_length=billing.flow_length))
         conn.execute(online_table.update().where(online_table.c.nas_addr == billing.nas_addr).where(online_table.c.acct_session_id == billing.acct_session_id).values(billing_times=billing.acct_session_time, input_total=billing.input_total, output_total=billing.output_total))
示例#11
0
 def post(self):
     order_id = self.get_argument('order_id')
     note = self.db.query(
         models.TrCustomerNote).filter_by(order_id=order_id).first()
     note.print_times = note.print_times + 1
     note.sync_ver = tools.gen_sync_ver()
     self.add_oplog(u'打印票据:%s' % note.note_id)
     self.db.commit()
     self.render_json(code=0)
示例#12
0
 def add_oplog(self, message):
     ops_log = models.TrOperateLog()
     ops_log.id = utils.get_uuid()
     ops_log.operator_name = self.current_user.username
     ops_log.operate_ip = self.current_user.ipaddr
     ops_log.operate_time = utils.get_currtime()
     ops_log.operate_desc = message
     ops_log.sync_ver = tools.gen_sync_ver()
     self.db.add(ops_log)
示例#13
0
 def add_attr(self, pid, attr_name, attr_value, attr_desc, attr_type=0):
     attr = models.TrProductAttr()
     attr.id = utils.get_uuid()
     attr.product_id = pid
     attr.attr_type = attr_type
     attr.attr_name = attr_name
     attr.attr_value = attr_value
     attr.attr_desc = attr_desc
     attr.sync_ver = tools.gen_sync_ver()
     self.db.add(attr)
示例#14
0
 def add_account_fixdflows(self, account_number, flows):
     attr = models.TrAccountAttr()
     attr.id = utils.get_uuid()
     attr.account_number = account_number
     attr.attr_type = 0
     attr.attr_name = 'fixd_flows'
     attr.attr_value = flows
     attr.attr_desc = '用户固定流量'
     attr.sync_ver = tools.gen_sync_ver()
     self.db.add(attr)
示例#15
0
 def post(self):
     form = issues_forms.issues_process_form()
     if not form.validates(source=self.get_params()):
         return self.render('base_form', form=form)
     iflow = models.TrIssuesFlow()
     iflow.id = tools.gen_num_id(16)
     iflow.issues_id = form.d.issues_id
     iflow.accept_time = utils.get_currtime()
     iflow.accept_status = form.d.accept_status
     iflow.accept_result = form.d.accept_result
     iflow.operator_name = self.current_user.username
     iflow.sync_ver = tools.gen_sync_ver()
     self.db.add(iflow)
     issues = self.db.query(models.TrIssues).get(iflow.issues_id)
     issues.status = iflow.accept_status
     issues.sync_ver = tools.gen_sync_ver()
     self.add_oplog(u'处理工单%s' % iflow.issues_id)
     self.db.commit()
     self.redirect('/admin/issues/detail?issues_id=%s' % iflow.issues_id)
示例#16
0
    def update(self, formdata, nodes=[], **kwargs):
        try:
            bas = self.db.query(models.TrBas).get(formdata.id)
            bas.ip_addr = formdata.ip_addr
            if 'nas_id' in formdata:
                bas.nas_id = formdata.nas_id
            if 'dns_name' in formdata:
                bas.dns_name = formdata.dns_name
            if 'bas_name' in formdata:
                bas.bas_name = formdata.bas_name
            if 'vendor_id' in formdata:
                bas.vendor_id = formdata.vendor_id
            if 'bas_secret' in formdata:
                bas.bas_secret = formdata.bas_secret
            if 'coa_port' in formdata:
                bas.coa_port = formdata.coa_port
            if 'portal_vendor' in formdata:
                bas.portal_vendor = formdata.portal_vendor
            if 'ac_port' in formdata:
                bas.ac_port = formdata.ac_port
            bas.sync_ver = tools.gen_sync_ver()
            self.db.query(models.TrBasNode).filter_by(bas_id=bas.id).delete()
            for node_id in nodes:
                basnode = models.TrBasNode()
                basnode.bas_id = bas.id
                basnode.node_id = node_id
                basnode.sync_ver = tools.gen_sync_ver()
                self.db.add(basnode)

            self.add_oplog(u'修改接入设备信息:%s' % bas.ip_addr)
            self.db.commit()
            dispatch.pub(CACHE_DELETE_EVENT,
                         bas_cache_key(bas.nas_id),
                         async=True)
            dispatch.pub(CACHE_DELETE_EVENT,
                         bas_cache_key(bas.ip_addr),
                         async=True)
            return bas
        except Exception as err:
            self.db.rollback()
            logger.exception(err, tag='bas_update_error')
            self.last_error = u'修改接入设备失败:%s' % utils.safeunicode(err)
            return False
示例#17
0
def import_product(imetadata, ometadata, rate=32, imetadata20=None):
    """ \xe7\x89\x88\xe6\x9c\xac20\xe6\xb2\xa1\xe6\x9c\x89 free_auth \xe5\xb1\x9e\xe6\x80\xa7\xef\xbc\x8c\xe9\x9c\x80\xe8\xa6\x81\xe5\x81\x9a\xe9\xa2\x9d\xe5\xa4\x96\xe5\xa4\x84\xe7\x90\x86
    """
    try:
        results = []
        with imetadata.bind.begin() as db:
            for row in db.execute(imetadata.tables['tr_product'].select()):
                item = dict(row)
                item['id'] = newid(item['id'])
                item['sync_ver'] = tools.gen_sync_ver()
                results.append(item)

        with ometadata.bind.begin() as db:
            db.execute(_sql('delete from tr_product'))
        for rs in cut_result(results, rate=rate):
            with ometadata.bind.begin() as db:
                db.execute(ometadata.tables['tr_product'].insert().values(rs))
                db.execute(
                    _sql('delete from tr_product where product_policy=6'))
                print '- Append into table tr_product %s rows' % len(rs)

    except:
        print 'import v211 error , try import v20'
        results = []
        with imetadata20.bind.begin() as db:
            for row in db.execute(imetadata20.tables['tr_product'].select()):
                item = dict(row)
                item['id'] = newid(item['id'])
                item['sync_ver'] = tools.gen_sync_ver()
                item['free_auth'] = 0
                item['free_auth_uprate'] = 0
                item['free_auth_downrate'] = 0
                results.append(item)

        with ometadata.bind.begin() as db:
            db.execute(_sql('delete from tr_product'))
        for rs in cut_result(results, rate=rate):
            with ometadata.bind.begin() as db:
                db.execute(ometadata.tables['tr_product'].insert().values(rs))
                db.execute(
                    _sql('delete from tr_product where product_policy=6'))
                print '- Append into table tr_product %s rows' % len(rs)
示例#18
0
        def post(self):
            form = print_tpl_forms.print_tpl_update_form()
            if not form.validates(source=self.get_params()):
                return self.render('base_form.html', form=form)
            tpl = self.db.query(models.TrPrintTemplate).get(form.d.id)
            tpl.tpl_name = form.d.tpl_name
            tpl.tpl_content = utils.safeunicode(form.d.tpl_content)
            tpl.sync_ver = tools.gen_sync_ver()
            self.db.query(
                models.TrPrintTemplateTypes).filter_by(tpl_id=tpl.id).delete()
            for tpl_type in self.get_arguments('tpl_types'):
                tpltype = models.TrPrintTemplateTypes()
                tpltype.tpl_id = tpl.id
                tpltype.tpl_type = tpl_type
                tpltype.sync_ver = tools.gen_sync_ver()
                self.db.add(tpltype)

            self.add_oplog(u'修改票据模板信息:%s' % utils.safeunicode(form.d.tpl_name))
            self.db.commit()
            self.redirect('/admin/printtpl', permanent=False)
示例#19
0
 def post(self):
     form = domain_form.domain_update_vform()
     if not form.validates(source=self.get_params()):
         return self.render('base_form.html', form=form)
     domain = self.db.query(models.TrDomain).get(form.d.id)
     domain.tpl_name = form.d.tpl_name
     domain.domain_desc = form.d.domain_desc
     domain.sync_ver = tools.gen_sync_ver()
     self.add_oplog(u'修改域信息:%s' % domain.domain_code)
     self.db.commit()
     self.redirect('/admin/wlan/domain', permanent=False)
示例#20
0
    def post(self):
        areas = [ (a.id, n + ' -> ' + a.area_name) for n, a in self.get_opr_areas() ]
        form = builder_forms.builder_update_form(areas)
        if not form.validates(source=self.get_params()):
            return self.render('base_form.html', form=form)
        builder = self.db.query(models.TrBuilder).get(form.d.id)
        builder.builder_name = form.d.builder_name
        builder.builder_phone = form.d.builder_phone
        builder.sync_ver = tools.gen_sync_ver()
        self.db.query(models.TrAreaBuilder).filter_by(builder_id=builder.id).delete()
        for area_id in self.get_arguments('areas'):
            area_builder = models.TrAreaBuilder()
            area_builder.area_id = area_id
            area_builder.builder_id = builder.id
            area_builder.sync_ver = tools.gen_sync_ver()
            self.db.add(area_builder)

        self.add_oplog(u'修改服务人员:%s' % utils.safeunicode(form.d.builder_name))
        self.db.commit()
        self.redirect('/admin/builder', permanent=False)
示例#21
0
 def post(self):
     form = charges_forms.charge_update_form()
     if not form.validates(source=self.get_params()):
         return self.render('base_form.html', form=form)
     charge = self.db.query(models.TrCharges).get(form.d.charge_code)
     charge.charge_name = form.d.charge_name
     charge.charge_value = utils.yuan2fen(form.d.charge_value)
     charge.charge_desc = form.d.charge_desc
     charge.sync_ver = tools.gen_sync_ver()
     self.add_oplog(u'修改收费项信息:%s' % utils.safeunicode(form.d.charge_name))
     self.db.commit()
     self.redirect('/admin/charge', permanent=False)
示例#22
0
 def post(self):
     form = content_tpl_forms.content_tpl_update_form()
     if not form.validates(source=self.get_params()):
         return self.render('base_form.html', form=form)
     tpl = self.db.query(models.TrContentTemplate).get(form.d.id)
     tpl.tpl_type = form.d.tpl_type
     tpl.tpl_id = form.d.tpl_id
     tpl.tpl_content = form.d.tpl_content
     tpl.sync_ver = tools.gen_sync_ver()
     self.add_oplog(u'修改模板信息:%s' % form.d.tpl_type)
     self.db.commit()
     self.redirect('/admin/contenttpl', permanent=False)
示例#23
0
 def post(self):
     form = account_rule_forms.account_rule_update_form()
     if not form.validates(source=self.get_params()):
         return self.render('base_form.html', form=form)
     rule = self.db.query(models.TrAccountRule).get(form.d.id)
     rule.rule_name = form.d.rule_name
     rule.user_prefix = form.d.user_prefix
     rule.user_suffix_len = int(form.d.user_suffix_len)
     rule.sync_ver = tools.gen_sync_ver()
     self.add_oplog(u'修改账号生成规则信息:%s' % utils.safeunicode(form.d.rule_name))
     self.db.commit()
     self.redirect('/admin/account_rule', permanent=False)
示例#24
0
 def event_ppmf_user_renew(self, account_number, product_id):
     with make_db(self.db) as db:
         try:
             account = db.query(models.TrAccount).get(account_number)
             product = db.query(models.TrProduct).get(product_id)
             if not product:
                 logger.error(u'执行流量包月续费时,用户[%s]资费id[%s]不存在' %
                              (account_number, product_id))
                 return
             if product.fee_price > account.balance:
                 logger.error(u'执行流量包月续费时,用户[%s]余额不足' % account_number)
                 return
             old_balance = account.balance
             old_flows = account.flow_length
             account.balance -= product.fee_price
             account.flow_length = product.fee_flows
             account.sync_ver = tools.gen_sync_ver()
             accept_log = models.TrAcceptLog()
             accept_log.id = utils.get_uuid()
             accept_log.accept_type = 'auto_renew'
             accept_log.accept_source = 'task'
             accept_log.account_number = account_number
             accept_log.accept_time = utils.get_currtime()
             accept_log.operator_name = 'admin'
             accept_log.accept_desc = u'用户[%s]流量包月套餐续费, 续费前余额为(%s)元,流量为(%s)G,续费后余额为(%s)元,流量为(%s)G' % (
                 account_number, utils.fen2yuan(old_balance),
                 utils.kb2gb(old_flows), utils.fen2yuan(
                     account.balance), utils.kb2gb(account.flow_length))
             accept_log.stat_year = accept_log.accept_time[0:4]
             accept_log.stat_month = accept_log.accept_time[0:7]
             accept_log.stat_day = accept_log.accept_time[0:10]
             accept_log.sync_ver = tools.gen_sync_ver()
             self.db.add(accept_log)
             self.db.commit()
             logger.info(u'用户[%s]流量包月套餐续费完成' % account_number,
                         trace='event')
         except Exception as err:
             logger.exception(err)
             logger.error(u'用户[%s]流量包月套餐续费失败' % account_number,
                          trace='event')
示例#25
0
    def add(self, formdata, nodes=[], **kwargs):
        try:
            if not formdata.ip_addr:
                raise ValueError(u'接入设备地址不能为空')
            if self.db.query(models.TrBas.id).filter_by(
                    ip_addr=formdata.ip_addr).count() > 0:
                raise ValueError(u'接入设备地址已经存在')
            if self.db.query(models.TrBas.id).filter_by(
                    nas_id=formdata.nas_id).count() > 0:
                raise ValueError(u'接入设备标识已经存在')
            bas = models.TrBas()
            bas.id = utils.get_uuid()
            bas.nas_id = formdata.get('nas_id', '')
            bas.ip_addr = formdata.ip_addr
            bas.dns_name = formdata.get('dns_name', '')
            bas.bas_name = formdata.bas_name
            bas.vendor_id = formdata.vendor_id
            bas.bas_secret = formdata.bas_secret
            bas.coa_port = formdata.coa_port
            bas.portal_vendor = formdata.portal_vendor
            bas.ac_port = formdata.ac_port
            bas.time_type = formdata.get('time_type', 0)
            bas.sync_ver = tools.gen_sync_ver()
            self.db.add(bas)
            for node_id in nodes:
                basnode = models.TrBasNode()
                basnode.bas_id = bas.id
                basnode.node_id = node_id
                basnode.sync_ver = tools.gen_sync_ver()
                self.db.add(basnode)

            self.add_oplog(u'新增接入设备信息:%s' % bas.ip_addr)
            self.db.commit()
            return bas
        except Exception as err:
            self.db.rollback()
            logger.exception(err, tag='bas_add_error')
            self.last_error = u'接入设备创建失败:%s' % utils.safeunicode(err)
            return False
示例#26
0
 def post(self):
     account_number = self.current_user.username
     user = self.db.query(
         models.TrAccount).filter_by(account_number=account_number).first()
     user.mac_addr = ''
     user.vlan_id1 = 0
     user.vlan_id2 = 0
     user.sync_ver = tools.gen_sync_ver()
     self.db.commit()
     dispatch.pub(db_cache.CACHE_DELETE_EVENT,
                  account_cache_key(account_number),
                  async=True)
     return self.render_json(msg=u'解绑成功')
示例#27
0
def import_charges(imetadata, ometadata, rate=32, **kwargs):
    results = []
    with imetadata.bind.begin() as db:
        for row in db.execute(imetadata.tables['tr_charges'].select()):
            item = dict(row)
            item['sync_ver'] = tools.gen_sync_ver()
            results.append(item)

    for rs in cut_result(results, rate=rate):
        with ometadata.bind.begin() as db:
            db.execute(_sql('delete from tr_charges'))
            db.execute(ometadata.tables['tr_charges'].insert().values(rs))
            print '- Append into table tr_charges %s rows' % len(rs)
示例#28
0
 def post(self):
     form = bas_forms.bas_attr_update_form()
     if not form.validates(source=self.get_params()):
         return self.render('basattr_form.html', form=form)
     attr = self.db.query(models.TrBasAttr).get(form.d.id)
     attr.attr_name = form.d.attr_name
     attr.attr_value = form.d.attr_value
     attr.attr_desc = form.d.attr_desc
     attr.sync_ver = tools.gen_sync_ver()
     self.add_oplog(u'修改BAS属性信息:%s' % attr.attr_name)
     self.db.commit()
     dispatch.pub(CACHE_DELETE_EVENT, bas_attr_cache_key(form.d.bas_id, attr.attr_name), async=True)
     dispatch.pub(ROSSYNC_RELOAD, form.d.bas_id, async=True)
     self.redirect('/admin/bas/detail?bas_id=%s' % form.d.bas_id)
示例#29
0
 def test_add_and_update_node(self):
     node = None
     with make_db(self.db) as db:
         serv = NodeService(db, self.aes, config=self.config)
         ret = serv.add(Storage({'node_name': 'node2',
          'node_desc': '\xe6\xb5\x8b\xe8\xaf\x95\xe5\x8c\xba\xe5\x9f\x9f2',
          'rule_id': '0',
          'sync_ver': tools.gen_sync_ver()}))
         if hasattr(serv, 'last_error'):
             print serv.last_error
         node = self.warp(ret)
         raise node or AssertionError
     with make_db(self.db) as db:
         serv = NodeService(db, self.aes, config=self.config)
         ret = serv.update(Storage({'id': node.id,
          'node_name': '\xe6\xb5\x8b\xe8\xaf\x95\xe4\xbf\xae\xe6\x94\xb9\xe5\x8c\xba\xe5\x9f\x9f',
          'node_desc': '\xe6\xb5\x8b\xe8\xaf\x95\xe4\xbf\xae\xe6\x94\xb9\xe5\x8c\xba\xe5\x9f\x9f',
          'rule_id': '0',
          'sync_ver': tools.gen_sync_ver()}))
         if hasattr(serv, 'last_error'):
             print serv.last_error
         raise self.warp(ret) or AssertionError
     return
示例#30
0
 def update_account_attr(self, account_number, name, value, attr_type = 0):
     attr = self.db.query(models.TrAccountAttr).filter_by(attr_name=name).first()
     if not attr:
         attr = models.TrAccountAttr()
         attr.id = utils.get_uuid()
         attr.account_number = account_number
         attr.attr_type = attr_type
         attr.attr_name = name
         attr.attr_value = value
         attr.attr_desc = name
         attr.sync_ver = tools.gen_sync_ver()
         self.db.add(attr)
     else:
         attr.attr_value = value