师温馨
(厦门大学,福建厦门,361005)
随着计算机技术的发展,生活水平的不断提高,人们已经不会仅仅满足于在商场内购买商品而越来越多地希望可以在网络上看到并获得更多的货物,电子商务网站就在这样的环境下孕育而生了。电子商务购物网站能够充分迎合大家的需求,为店铺管理员、顾客提供最方便的平台实现安全交易。它为顾客提供更多的购物选择,使店铺管理员可以在全国范围内销售产品,更符合大家的生活习惯,其快捷方便赢得了每一个人的喜爱。
Struts2 框架是一个基于Web 的MVC 设计模式实现框架,结构清晰,简单、方便、易用, 加上Apache 组织对此开源项目的支持,是一个很好的轻量级应用。Struts 2 以Web Work 为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API 完全脱离开。Struts2 通过Action 的调用完成界面跳转时的动作处理,使得界面与动作分离,降低了代码的耦合度。选用struts2 框架是开发电子商务购物网站的一个合适的选择。
Hibernate 实现了Java 对象和表之间的映射。它还提供了数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL 和JDBC 处理数据的时间。Hibernate 的目标是对开发者通常的数据持久化相关的编程任务,解放其中的95%。Hibernate 避免直接使用sql 导致的代码混乱繁杂。同时,使用大量的sql 语句,编译时不知对错,测试时也很难覆盖全面,而Hibernate 完美地解决了这一点。使用Hibernate 可以使我们通过针对类的属性进行操作改变数据库中的值而不用直接更改数据库底部的值。
Spr ing 贯穿表现层、业务层、持久层,在各方面都表现出较优良的特性,同时其具有高度开放性,使得我们可以根据需要选择仅运用Spr ing 框架的某些部分。Spr ing 对POJO 之间依赖关系的管理由Ioc 容器负责,容器根据配置文件将依赖注入指定的对象中,这不仅提高了组件之间的解耦,还使得Spr ing 框架管理的任何对象都很容易支持AOP。虽然在广义上看,st ruts 中的拦截器与AOP 工作原理相同,但是Spr ing AOP 基于Ioc 基础,采用动态代理,同时具备对事务、日志等的集中式处理,具有更好的复用性。如果我们只是单纯使用St ruts,那么各个模块的交叉关注点处将存在许多代码冗余,这对后期维护是不利的。Spr ing AOP 则只需将处理aspect的代码注入主程序,大大降低了后期维护的复杂度。所以选择Spr ing 框架,实现依赖注入,适合开发电子商务购物网站。
基于SSH 框架的电子商务购物网站主要包括以下模块。
网站管理员包括普通网站管理员和超级网站管理员。网站管理员,有删除、更改、增加用户资料的权限;可以审核店铺申请,管理已经通过审核的店铺,包括增加一个卖家管辖的店铺、更改店铺资料、关闭该店铺;可以更改店铺的类别,包括增加一个新的类别或者删除一个已有的类别,同时指定拥有该类别的店铺页面的默认风格;可以在操作页面加入网站的界面风格选择,同时增加店铺某一类别的界面风格的选择;也要实现对广告位的管理,包括申请广告位的店铺的选择,店铺打折信息的实时发布以及在对应的时间与时段广告位的正确发布;超级管理员拥有普通网站管理员的管理权限以及可以选择查看普通网站管理员所做的所有操作。
店铺管理员包括店铺卖家、店铺经理与店铺客服人员。对于所有的店铺管理员来说,均可以删除、更改、增加商品。
店铺卖家与店铺经理可实现对商品的增加、删除、上架、下架等处理。只有上架的产品才可以被网站用户看到并加入购物车;可以设定增加的商品的描述信;以增加、删除、修改店铺的显示目录,同时制定的目录可以有子目录。店铺经理拥有店铺卖家与店铺客服人员的权限以及可以选择查看店铺卖家与店铺客服人员所做的所有操作。
店铺包括三种店铺:综合体店铺、精品馆和精品店。每种店铺拥有的商品数量限制,商品上传图片大小以及指定店铺风格均不同。综合体店铺可以允许其他店铺加盟该店铺,为加盟店铺增加广告位,并管理自己和加盟店铺的页面风格。
用户可以在任意界面进行登录和注册,如果用户没有登录,不允许用户查看购物车以及进行之后的操作;可以通过首页目录或者广告位进入卖家界面进行选购商品;还可以在首页切换自己希望拥有的网站界面风格;用户可以通过搜索关键字查找相关的商品并进行查看。在进行选择商品加入购物车完毕之后,可以支付自己的订单。在商品到达之后,用户可以选择退货或进行对商品的评价。
Ad Info 类:描述每一个广告位的信息,其中包括:id(Integer);ad_number(Integer); real_storeInfo(StoreInfo);image_url(String);apply_time(Date);price(Double);apply_people_name(String);email(String);credit_card_number(String);telephone_number(String);status(Str ing);date_string(String);apply_time_long(Integer);discount(Double);final_time(Date)。
ApplyAdInfo 类:描述正在等待申请的每一个广告位的信息,其中包括:id(Integer);ad_id(Integer);storeInfo(StoreInfo);image_url(String);apply_time(Date);apply_people_name(String);ema i l(S tring);c redit_card_number(String);telephone_number(String)。
StoreInfo类:描述每一个店铺的信息;其中包括:id(Integer);store_name(String);goods_number(Integer);open_time(Date);status(String);total_price(Dou ble);reason(String);seller(Seller);store_type(StoreType);ad_status(String)。
DiscountCategory 类:描述每一种广告位打包信息,其中包括:id(Integer);pr ice(Double);discount_l ist(Li st
User 类:描述所有用户的信息,其中包括id(Integer),username(String),password(String),regist_time(Date),last_login(Date)。
Seller 类:描述所有店铺管理员信息,继承User类。 其 中 包 括:seller_credit(Integer);phone_number(String);email_address(String);image_url(String);real_name(String);sex(String);address(String);education(String);storeInfo(StoreInfo);id_card_number(String);category(String)。
Manager 类:描述所有网站管理员信息,继承User 类。其中 包 括:birthday(Date);phone_number(String);email_address(String);image_url(String);real_name(String);sex(String);address(String);education(String)。
Customer 类:描述所有顾客信息,继承User 类。其中包 括: birthday(Date);phone_number(String);email_address(String);image_url(String);real_name(Strin g);sex(String);address(String);education(String);o ccupation(String);status(String);remainMoney(Doub le)。
广告位是根据不同时间以及不同时间段来进行收费的。打包的套餐会将不同价位的广告位打包进行销售,将价格略贵以及价格便宜的打包至一起,用更优惠的价格售出。如果售出的广告位除了打包套餐中的广告位剩余的广告位数量不小于3 的话,则将这些剩余的广告位总价格乘以0.8,最终的所有套餐总价格与剩余的广告位总价格之和即为店铺管理员应付的价格。
根据用户选择的广告位获得多个广告位id,根据广告位id 分别获得广告位实例(即类AdInfo 的实例),从而获得各个广告位的价格。找出所有可能组成的套餐组合,计算各个组合的价格,再循环比较所有的组合价格,得到最低价,通知店铺管理员最优组合的套餐类别以及其余无法打包进入套餐的广告位,告知店铺管理员价格明细及最终价格,如果店铺管理员同意继续申请,则继续广告位申请操作,店铺广告位进入申请等待状态。具体算法如下。
用List> apply_discount_list 记录所有的广告位组合的店铺id 序列。在对List
> 的循环遍历中嵌套两次循环遍历。在最外层的循环遍历中,依次对每一个DiscountCategory 进行遍历。在循环中,依次进行两次循环遍历,第一次循环遍历记录所有出现广告位组合的DiscountCategory 的id,第二次遍历从第一次出现广告位组合的DiscountCategory 的id 开始遍历,逐步寻找记录所有的套餐组合。计算所有可能的广告位打包的情况并分别计算出广告位的价钱,最优组合(价格最低的组合)即为店铺管理员最终选择的组合。
订单优惠包括店铺优惠和全网优惠。全网优惠是指顾客购买的商品金额大于一定数值时进行打折或者是免运费等优惠活动。店铺优惠是指店铺内的部分商品进行打包套餐销售或者是部分商品进行打折销售,优惠活动由卖家管理员进行操作。
在结算订单时,根据顾客购买的商品按照不同的店铺进行分类。先分别根据不同店铺的优惠条件计算顾客在不同店铺中购买商品的总金额,再将其加和用于判断是否符合全网优惠的条件以及参与全网优惠后的商品价格。
在计算一个店铺的所有商品的优惠价格时,分别对该店铺与购买商品相关的优惠政策进行遍历,找出所有的可能情况后进行价格计算比较,价格最低的方法即为顾客在该店铺购买商品的最终价格。
电子商务购物网站已经越来越受到大家的青睐并逐渐成为许多人购物的主流方式。它使人们能够避免旅途的劳累、时间的拥挤而充分根据自己的情况进行更大范围地、更廉价的购物选择。电子商务购物网站的便捷将会让它受到越来越多人的喜爱,此次开发的电子商务购物平台也正是为了迎合大众的需求。
[1] 孙鑫编.Java Web 开发详解[M]. 北京:电子工业出版社,2006,169-296.
[2] 李刚. 轻量级J2EE 企业应用实战[M] 北京:电子工业出版社,2007,344-786