bsn(businesssupportnetwork)计费系统的预付费入库毕业论文(编辑修改稿)内容摘要:

月的帐单,如: 4月份支付 3月份的话费,固定电话一般采取这种付费方式。 预付费入库 预付费入库在计费中系统 中的位置 因为预付费业务在通话过程中就实现了计费,所以预付费话单在产生时就已经有了费用记录,所以不需要经过批价处理来进行算费。 可以直接将采集的原始话单文件,经过预处理,再通过拣重处理的生成的话单文件入库,并根据事件类型填充缺省的帐目类型。 入库后产生了三张表:清单表、费用表和总帐( sd)表,清单表、费用表是给 web前台查询用的 ,为客户提供清单级的查询 ; sd表的帐目数据是给后面出帐用的 ,可以为客户提供总帐级的查询。 预付费入库在计费系统中的位置如下图所示: 出 帐预 处 理 拣 重 批 价 合 帐采 集 到 的原 始 文 件预 付 费 入 库清 单 表 , 费用 表 和 S D 表 图 5,预付费入库在计费系统中的位置 由上面的预付费入库流程图可以看到,要实现预付费入库,我们在计费系统中只需要关注预处理、拣重和预付费入库这些模块。 在前面。 下面我们来稍微具体得了解这些模块。 预处理是按照一定的规则将数据采集模块采集到的文本话单、二进制话单、 DBF文件、数据话单等原始话单转换成标准的文件格式,提供给后续模块进行处理。 预处理模块是整个计费系统的计费数据源,它屏蔽了外部数据之间的差异,给后续的业务流程提供了一套 标准的数据格式(计费帐务事件),并且这套数据格式是可扩展的。 在整个预处理内部,所有的处理逻辑都是通过前台配置来实现的,包括话单格式的解析、映射、分拣、过滤、转换等,通过配置,将整个预处理业务逻辑分解为内部可见的处理流程,并最终输出标准的计费帐务事件话单,整个处理逻辑的配置方式充分体现了系统的灵活性、可扩展性。 通过配置方式,预处理可以解析高达 99%以上的话单类型。 8 计费系统的预处理模块,可以认为是计费系统的一个子系统,可以独立于计费系统之外进行处理。 它可以根据需要,按其他系统的格式要求,输出所需要的话单(比 如,结算系统),实现了预处理与其他系统之间的无缝连接。 预处理模块的主要功能: 1将采集后的各种类型的话单,根据配置的话单格式进行解析,获取需要的话单信息; 2解析成标准化话单; 3分拣 amp。 过滤话单; 4形成批价进程所需要的标准话单,并按需要分发; 5交由拣重进程进行拣重。 预处理可以处理的话单类型包括:语音话单、数据话单和代收话单。 预处理流程:预处理流程由以下部分组成:  源事件获取  格式化  标准事件映射成目标事件  分割 /分发 源 事 件 获 取是 否 有 话 单待 处 理取 一 条 话 单目 的 事 件 分 割 / 分 发话 单 格 式 化内 部 事 件 映 射 为 目标 事 件 图 6,预处理流程图 格式化的 主要任务是:将源事件映射成内部事件。 通过配置内部事件字段和源事件字段之间的关系来映射关系来实现格式化。 内部事件映射成目的事件,根据批价模块的输入事件格式,从内部事件中选取相关的字段组成目的事件,包括以下操作:  转换:标准事件映射成目的事件前进行字段转换;  分拆:从事件中分出另一事件;  过滤:运用过滤规则组过滤错单; 9  分拣:将目的事件分类。 分割:根据分割规则,将目的事件文件划分成若干子文件。 分发:将子文件分发上传的指定的文件目录中。 话单的拣重是在预处理之后的一个环节,在计费系统中处于一个比较关键的位 置。 拣重对代码执行效率有较高的要求,拣重代码质量的优劣,影响到整个计费系统的处理速度。 拣重模块目前包括话单合并和话单排重功能。 目前拣重模块的话单索引存储方式为文件形式。 通过配置决定拣重 /合并关键字、支持拣重例外的配置、拣重时间范围的灵活定值。 拣重在计费系统中位置: 预 处 理 拣 重 批 价标 准 话 单E V E N T _ S O U R C E存 档 文 件存 档 话 单重 单正 常 话 单拣 重 规 则 图 7,拣重在计费系统中位置 拣重的主要功能:处理预处理正常处理完成的文件,将待合并话单进行合并,重复的话单作为错单输出,正常单则输出给批价模块计费。 具体包括: (1)支持根据事件类 型组、拣重关键字进行合并、拣重; (2)支持事件类型组之间的完全、交叉拣重; (4)支持拣重时间范围的灵活定值; (3)支持对某个时间偏差内的话单作为非重单规则; (5)支持拣重例外的设置:可以设置某个事件属性满足一定条件时不拣重,或者主产品或附属产品为某个值时不拣重,或者它们之间的组合; (6)支持连续话单、连续短话单等特殊方法拣重; (7)支持与主控连接 拣重处理流程: 10 拣 重获取话单查询存档话单分析规则加载资料重单分析话单存档输出话单 图 8,拣重处理流程图 从话单接口获得话单内容。 根据拣重规则定义查询存档话 单。 查询到话单之后先判断是否需要合并,如果需要合并则根据规则合并。 然后根据完全重单及交叉重单要求判断重单类型。 如果查不到话单或不符合重单要求,则话单为正常话单。 正常话单需存档备查。 最后将话单输出。 拣重的数据存放策略:每种类型的话单量是巨大的,而判断话单是否为重单等仅仅需要根据几个关键字段即可。 故拣重模块存放的为关键字串,以存档文件形式存放。 存档文件以各拣重组设定的时间为单位写。 存档文件的索引存放在 dup_file表内,以供拣重查询。 为了提高效率,存档文件以存档类型、拣重组、客户分组、拣重内部组分类存放,以 保证各个组之间的相对独立。 组内拣重简单快捷,组与组之间拣重效率也显著提高。 经过拣重以后,话单可以被批价处理也可以进行预付费入库。 本文的 组织 结构 下面简要叙述本文的大致组织情况。 第二章主要 介绍了预付费入库程序的开发环境,运行环境,和预付费入库程序设计的基础包括基本类与相关表,计费系统的基本表与相关类是现有的,它是实现预付费入库的基础。 第三章 对预付费入库的基类和预付费流程进行了设计,简单的介绍了预付费入库的基类是怎样设计出来的,以及类的大体结构;并详细介绍了流程图和流程图中各个函数的功能;还画出了数据转移图,它是数据在程序中的转移过程的结合。 在第四章中 对预付费入库具体的函数进行了具体的实现,把程序的大概写了出来,为了更清晰的表达程序的意思,有些地方作了省略。 第 五 章 主要讲程序的运行,以及程序运行的结果。 11 第二章 开发环境和开发基础介绍 本课题要求 在 C++、 ORACLE、 UNIX( IBM AIX)的开发环境中实现。 利用 VC++.NET编程工具 编写程序,在 UNIX下编译 、调试 和运行程序。 基于 ORACLE数据库的程序开发,是在程序中用一些类封装了 Oracle数据库的 OCI函数来实现对数据库进行 连接和操作的,具体的不需要了解太多,只要学会使用这些类来连接和操作数据库就可以了。 程序在 UNIX下的编译与 Windows有所不同,没有 Widows所提供的编译按钮,在 UNIX下要自己编写 Makefile,然后运行 make命令来编译程序。 也可以编写 shell脚本来编译程序,就是把编译命令集成到 shell上,让 shell自动的执行编译命令来编译程序。 调试程序可以使用 GDB调试程序,也可以使用 dbx 命令来调试程序。 GDB是一个强大的命令行调试工具。 大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。 UNIX下的软件全是命令行的,这给程序开发提供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。 于是 UNIX下的软件比 Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。 GDB是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具。 或许,各位比较喜欢那种图形界面方式的,像 VC、 BCB等 IDE的调试。 一般来说, GDB主要帮忙你完成下面四个方面的功能: 启动你的程序,可以按照你的自定义的要求随心所欲的 运行程序。 可让被调试的程序在你所指定的调置的断点处停住。 (断点可以是条件表达式) 当程序被停住时,可以检查此时你的程序中所发生的事。 动态的改变你程序的执行环境。 从上面看来, GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现 GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。 在这里不细说了。 dbx与 GDB类似,在这里也不细讲了。 UNIX下运行程序很简单,把可执行文件名看作命令,带上指定的 参数程序就可以运行了。 预付费入库程序的设计是有一定的基础的,它可以复用公司已有的 公用 类,和已有的数据结构。 要想进行预付费入库程序设计,首先要了解这些基础,然后才能在这些基础上进行程序设计。 下面就有选择的介绍一下这些基础。 基础类和结构体的介绍: TConfigInfo: 系统配置信息结构体 ,它的成员包括:正常文件路径 sNorFilePath, 异常文件路径sErrFilePath, 是否将设为正处理的文件改为未处理 iRefresh, 每次取文件数 iStep, 轮询过程中 sleep的秒数 iSleepSec。 12 TAppConfig:程序配置类,用来存放应用程序的配置信息,利用重载构造函数 TAppConfig(const char *AppCfgName,const char *AppSection) 从 COMMON段中读取应用程序的配置信息到它的各个成员变量。 TDBDatabase:数据库类,成员变量包括数据库名、用户名和密码等信息;成员函数有 Connect()用于连接数据库,它封装 Oracle数据库的 OCI函数来实现和数据库的连接。 TDBConfig:数据库配置类,用来存 放数据库的配置信息,这些信息是用来连接数据库的,利用重载构造函数 TDBConfig(const char *AppCfgName,const char *AppSection)可以从 COMMON段中读取数据库的配置信息到它的各个成员变量。 TAppComponent:数据库连接类,用来连接数据库,它继承了类 TComponent。 它的成员函数ConnectDB()封装了 TDBDatabase:: Connect(),因此它也可以连接数据库。 TDBQuery:数据库操作类,用于对数据库的 操作,可以用来查询数据库,向数据库里插入数据和修改数据等。 它封装 Oracle数据库的 OCI函数来实现对数据库的操作,具体的不需要了解太多,只要学会使用这个类来操作数据库就可以了。 如要查找数据库中的一条记录,先设置好查询语句 SQl,然后调用它的成员函数 SetSQL(const char *inSqlstmt)把查询语句设置到 Sqlstatement中,然后调用Open(int prefetchRows=PREFETCH_ROWS)打 SELECT语句返回结果集 ,接着用 Next()移动到下一个记录 ,用 Field()取一个列的值。 如果是非查询语句,要调用 Execute()函数来执行,然后用 Commit()来提交。 TPcsTransExecInfo,程序运行参数结构体,用于存放程序运行参数,它的成员变量包含有:当前帐期标识、下个帐期标识、帐期开始时间、帐期结束时间、客户分组 ID、流程 ID 等。 TEventSourceFileInfo:未处理文件信息结构体,用于描述话单文件的信息,它的成员变量包含有:文件 ID、文件名称、文件路径、流程 ID、文件处理状态、话单总数、文件正常记录数、文件异常记录数、文件总费用、客户分组、文 件类型等。 VUnsettledFileInfo: typedef vectorTEventSourceFileInfo VUnsettledFileInfo 用于装载未处理文件信息的 vector。 TTbInfoManager:内存资料类,其成员为指向私有和共享内存的资料的指针对象。 可以用来初始化计费文件数据库接口类和计费文件解析类。 TPCSInfoManager:预付费入库涉及的静态资料类,可用来初始化数据组织操作类( TeventPcsInfo)。 TRateFileDBInterface:计费文 件数据库接口类, 主要用于从数据库中查询未处理的计费文件,同时对数据库中的计费文件状态进行更新。 (为了更好介绍,我们只列举我们预付费入库中用到的成员。 )它的成员变量有:用于存放取得的未处理文件信息的 vector m_vUnsettledFileInfo,查询条件 m_sQuerySql,每次从数据库中取得的文件数 m_iDBSearchStep。 它的成员函数有:设置查询条件函数SetQueryCondition(),取得一条待处理的计费文件记录 GetOneUnsettledRec(),更新计费文件信息函数: UpdateUnsettleRecInfo(),根据设置的数据库查询的步长取得未处理的文件信息GetUnsettledRec(),预设批量选出文件的状态为正在处理 PreSetF。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。