齐桂芳
(东营市胜利油田物资供应处信息档案中心,山东东营257024)
现代社会生产力的快速发展,普通的市场交易已经远远不能满足我们的购物需求。 随着网络的发展和普及,网上交易系统就显得格外重要。 本课题将模拟一个小型制造企业构建一个网上订单交易系统,使客户能够从很便捷的在网上订购公司产品,以扩大公司产品销售市场。
网上交易系统将产品管理系统与网上订购系统有效地结合在一起,通过网站实现企业的在线交易来销售自己的产品,进一步扩大市场范围;网上交易系统有效地整合了产品发布系统、客户管理系统、购物车功能、订单管理、在线支付模块。
开发环境简介。 本项目的运行环境是Win2000 或更高、IIS5.0 以上版本以及IE6.0 以上版本;数据库使用Oracle 9i;开发工具包括Visual Studio 2003、PL/SQL Developer 和VSS 等。
本系统是使企业能有效处理网上定购、 材料采购业务的管理系统,具体实现功能模块包括:权限维护、产品浏览、购物车、客户订制订单、显示订单详细、订单类型转换、订单审计、原材料采购、原材料入库、产品生产、产品销售和库存预警订单。整个系统的功能构成分为前台和后台两个部分。
本系统处理的订单包括以下四种:客户预定订单、客户实际订单、预计转实际订单和库存预警订单。
它们的基本流程:订单定制→订单审计→原来料采购→原材料入库→产品生产→订单发货,其中预计订单到原料入库结束,预计转实际订单从产品生产开始。
本系统的核心是对4 种类型订单的处理,主要过程包括:订单订制、订单查询、订单转化、订单审计、材料采购、材料入库、产品生产和产品销售。 另外,为使系统功能丰富完备,又加入了以下过程:权限维护和产品浏览等。
2.2.1 权限维护描述
提供注册功能,建立客户基本资料(如:客户编号、名称、地址、电话、统一编号等)。 用户在下次进入时需要先登陆,提高用户信息保密性和安全性。
2.2.2 产品浏览描述
在网页上分类显示公司的所有产品,这些产品可以被任何用户所浏览。此外,用户还能查看这些产品的详细信息,以方便客户对自己感兴趣的商品进行筛选。
2.2.3 订单订制描述
成功登陆本系统的合法用户可以按照自身的需求定制预计产品需求订单(需要注明实际需求日期)。 系统提供产品实际生产周期,并且实际需求日期必须不大于产品最大生产周期, 否则定制订单失败。此外,客户确认风险内容,并按照订单金额提供订金。
2.2.4 订单查询描述
客户合法登陆后可以对以前订制过的订单进行查询,要求操作简便,界面友好。系统需要为用户提供订单的详细信息,提高与用户的交互能力。
2.2.5 订单转化描述
用户可以根据自己的需要和产品的生产周期订制预计订单和实际订单。客户按照预定需求所下订单,待到预计订单原材料入库完毕,通知用户将预计订单转为实际订单,减少损失,缩短实际需求时的生产时间。
2.2.6 订单审计描述
客户提交的订单由销售部门确认得到订单及验证资料的合法性。如果资料合法, 提供备料风险说明以及赔偿信息等订单认证信息;如果资料不合法,驳回客户订单并注明原因等信息。
销售部门审计订单及订金数额,如无误订单审计结束,并将合法订单提供给采购部门,更改订单状态为【审计通过】。
2.2.7 材料采购描述
采购部门将【审计通过】的订单汇总,按照每单、每产品生成采购批次信息。 合计需求采购原料信息,生成采购订单,提交给原料提供商。并更改订单状态为【正在采购】,注明原料预计购入日期。订单所有原料材料采购完成,订单状态更改为【采购完成】。
2.2.8 材料入库描述
当采购的原料入库后,仓库管理将材料入库信息按照原材料信息进行入库。 并标明所属采购批次,如果完成采购批次对应的订单材料已经备齐,系统按照采购批次更改订单中状态为【采购完成】。
2.2.9 产品生产描述
采购完毕的订单进入生产环节,生产部门按照每单、每产品为单位制定生产批次。 订单状态设置为【正在生产中】。
生产按照产品为单位进行。 每生产结束一批产品,按照生产批次将订单中产品状态设置为【生产完成】。
当订单中所有产品生产完成,订单状态设置为【生产完成】。
2.2.10 产品销售描述
当订单状态为 【生产完成】, 销售部门按照客户提供信息进行发货。订单状态设置为【发货中】。客户得到货物后,确认订单完成。订单状态设置为【完成】。
2.2.11 库存预警订单描述
为保障销售顺畅,对于低成本,高需求的产品,若数量低于安全库存数量内部制定库存预警订单。
完成网上交易系统所需要的订单订制、订单查询、订单转化、订单审计、材料采购、材料入库、产品生产、产品销售、权限维护和产品浏览等业务需求。
采用Client-Server 模式,应用程序在服务器端运行,用户在客户端通过网络访问应用程序和数据库,使用之前先要对应用程序和数据库服务器进行部署。
本系统的数据库可以用5 个部分来概括: 用户权限维护部分、客户订单部分、产品信息部分、材料采购部分和日志部分。
4.1.1 用户权限维护部分
用户权限又分为客户权限和管理权限两部分。客户权限主要包括客户网页登陆权限、商品浏览权限、查看商品详细信息权限、定制订单权限、修改订单权限以及当条件满足时下达预计订单转实际订单命令权限等;而管理权限主要指部门网页登陆权限、客户订单审计权限、生成原料采购订单权限、原料入库权限、商品生产权限、产品发货权限和管理查询权限等。 使用用户信息表记录客户注册时所填写的内容,如登陆名、电话、公司、邮箱等,还要记录用户登陆权限等信息。使用内部操作人员表来记录公司的内部人员的注册信息, 如登录名、 电话、部门、邮箱、传真等,同样也需要记录该用户的相关权限等信息。
4.1.2 客户订单部分
订单信息表等记录了关于客户订单的所有信息,其中包括订单基础信息表(订单编号、用户编号、订单类型、创建和结束日期等),订单详细信息表(订单编号、产品编号、仍需数量、预定数量、单位、价格、需求日期和结束日期等),订单状态信息表(订单编号、订单类型、审计状态和日期、采购状态和日期、入库状态和日期、生产状态和日期、发送状态和日期、结束状态和日期等)。 另外还有一个库存预警订单表。
预计订单向实际订单的转换是本系统的一个重点。为了完成该功能,需要建立预计订单转正式订单信息表(预计订单编号、转换后的订单编号、转换日期等)和预计订单转正式订单产品信息表(预计订单编号、转换后的订单编号、转制产品编号、需求数量、需求日期等)。
4.1.3 产品信息部分
该部分包括了产品信息描述表(产品编号、类型编号、产品名称、单位名称、单位数量、价格、生产周期等),产品详细信息描述表(产品编号、产品名称、产品大小、装包大小、重量等),产品类别表(类型编号、类型名称、父类型编号等),原材料构成表(产品编号、材料编号、需求数量等),原材料信息表(材料编号、材料名称、价格、购买周期、单位名称、单位数量、供应商名称等),以及产品库存表(产品编号、入库数量、安全库存量、需要购买数量等)。
4.1.4 材料采购部分
这部分包含了原材料采购订单表(采购订单编号、供应商名称、入库日期等),采购订单详细信息表(采购订单编号、原材料编号、需求数量总和、需求日期、入库日期等),订单材料批次信息表(批次号、采购订单编号、客户订单编号、产品编号、原材料编号、需求数量、入库日期等)。
材料采购设计是为了采购客户订单中所订购产品需要的材料而设计的,其中设计订单材料批次信息表的目的是为了能够实现将采购回来的原材料按照客户订单的需求进行分别入库,便于日后生产。
4.1.5 日志部分
日志包括客户浏览日志(时间、用户编号、浏览页面编号、产品编号、时间戳等)和操作日志(时间戳、时间、用户编号、页面编号、)产品编号、操作编号、操作状态等)。
门面模式就是其中的一种,其含义是指外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行。 门面模式就如同医院的接待员一样, 它的门面类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与门面对象打交道,而不需要与子系统内部的很多对象打交道。
本系统共包括权限控制、用户登陆、产品浏览、定单定制、原材料采购、库存及生产和产品销售7 个模块,逻辑性强,适合使用UML 进行类图设计。
4.4.1 分析理解项目需求
4.4.2 安装项目需求环境
4.4.3 搭建程序框架
4.4.4 按照需求设计WEB 页面
4.4.5 创建数据表,并插入测试数据
4.4.6 根据业务流程编写代码
4.4.7 进行单元测试
4.4.8 进行集成测试
4.4.9 分析存在问题,对系统进行改进
订单采购模块对已经审计通过的非转换类型的客户订单建立批次信息、在以上订单中选出需要进行采购的客户订单、将选出的订单按照原材料和供应商关系整合并生成原材料采购订单、最后更改原材料购买状态为“正在购买”。
第一,批次信息的建立。 利用ORACLE 的触发器,在订单审计过程中,使用PL/SQL 实现该功能。
第二,原材料订单生成。 在选择客户订单并点击生成采购订单按钮后,使用ORACLE 的存储过程实现该功能。
原材料入库模块首先查找购买状态为完成的客户订单,将这些客户订单按照批次信息进行原材料入库。若向一个供应商提供的订单材料已经全部入库则该采购订单状态更改为“完成”,若一个客户订单的所有原材料已经采购完成则将该客户订单状态更改为“已入库”。
库存预警订单生成模块是一个比较特殊的模块,采用数据库触发器实现。 这样做的好处是可以自动生成库存预警订单,以后都不需要人工干预,十分方便。
本项目业务流程复杂,知识点多,开发难度较大,这里将主要介绍具有代表性的数据结构和算法。
6.1.1 原材料采购订单模块
在订单审计过程中,ORACLE 的行级触发器Trigger_BatchInfo 就已经开始工作了。 它建立在订单状态表的审计状态字段上,当条件满足时在订单材料批次表中创建批次信息。 此时,该批次信息对应的采购订单还没有产生。
在内部管理人员选择了审计通过的非转换类型的客户的订单,并且点击生成采购订单按钮后,ORACLE 的存储过程p_create_stock 就被启动了。 该存储过程几乎操作了除权限管理模块之外所有的数据表,但是主要操作的数据表为原材料采购订单表、采购订单详细表和订单材料批次表。 对前两个表的操作主要是生成原材料采购订单,即向数据表中插入数据;而对后一个表的操作主要是更新批次信息中以前设置为null 的采购订单编号字段。 对这三个表的操作结束后,还需要更改订单状态信息表中的购买状态字段。
6.1.2 原材料入库模块
入库部分的主要工作是将内部管理人员选择的订单状态信息表中的购买状态为“完成”的客户订单,按照批次信息表中的相应信息,在采购订单详细表中的完成状态置为“完成”。并判断该原材料采购订单中的所有的原材料是否都已经完成入库,若完成则把该原材料采购订单的入库状态置为“完成”,否则不修改数据。 然后判断客户订单中的所有原材料是否都已经完成入库,即订单材料批次信息表中的同一订单包含的原材料的入库状态是否都已经被置为“完成”,若为“完成”则修改订单状态表中入库状态字段置为“完成”,并注明入库时间,否则不修改数据。
6.1.3 库存预警订单模块
库存预警订单是由ORACLE 的触发器trigger_AlertOrder 实现。它的功能是当产品库存表中的库存量stockNum 小于安全库存量safe-Stock 时,自动生成一个新订单,即在订单基础信息表、订单详细信息表和订单状态表中各插入一条记录。
6.1.4 CHECKBOX 全选代码
使用JavaScript 实现。 函数参数是CheckBox 本身。 其主要思想是通过将该页面所有的CheckBox 与全选CheckBox 进行比较, 如果该CheckBox 不是全选CheckBox 的话就将其置为与全选CheckBox 相同的状态。
本程序采用了白盒测试与黑盒测试这两种方法来进行的。 其中,白盒测试最常用的是全路径覆盖法;黑盒测试则是边界值法。 在单元测试中,我们集中使用了白盒测试中的全路径测试法,测试达到路径覆盖率100%时结束测试。在集成测试环节,黑盒测试中的边界值法被广泛使用。 同时尤其注意对WEB 程序点击次序的测试。
本系统的目标是实现一个纯动态网站,其中所有的数据都是从数据库获取,这使得对数据的维护变得容易。
它的另一个特点是使用了三层结构来访问数据库,这减弱了代码之间的关联、增强了模块独立性、提高了代码的重用性、加快了程序的开发效率。
除此之外,在设计阶段采用了门面设计的思想。 在项目开发过程中严格遵照软件工程的思想,有效的避免了许多常见错误。
[1]Thuan Thai, Hoang Q. Lam. .NET 框架精髓[M].王敏之,译.中国电力出版社,2001,12.
[2]Jesse Liberty, Dan Hurwitz.Programming ASP.NET 中文版[M].第3 版.瞿杰,赵立东,张昊,译.电子工业出版社,2007,2.
[3]David Flanagan.JavaScript 权威指南[M].4 版. 张铭泽, 译. 机械工业出版社,2003,1.
[4]李兰友.Visual C#.NET 程序设计[M].北方交大出版社,2004,4.