文章目录
1、订单系统搭建
1.1、功能分析
1.2、工程搭建
2、展示订单确认页面
2.1、导入静态页面
2.2、功能分析
2.3、Dao层、Service层(无)
2.4、发布服务
2.5、引用服务
2.6、Controller
2.7、访问测试
3、用户身份认证
3.1、功能分析
3.2、拦截器实现
3.3、配置拦截器
3.4、访问测试
3.5、实现拦截器后存在的问题
4、实现提交订单功能
4.1、数据库表分析
4.2、前端如何传递三张表的数据
4.3、功能分析
4.4、Dao层
4.5、Service层
4.6、发布服务
4.7、引用服务
4.8、Controller
4.9、访问测试
5、参考文章
课程计划
1、订单系统搭建
2、订单确认页面展示
3、用户认证
4、创建订单
5、创建订单成功后显示订单号
回到顶部
1、订单系统搭建
1.1、功能分析
1、在购物车页面点击【去结算】按钮跳转到订单确认页面。
a) 展示商品列表
b) 配送地址列表
c) 选择支付方式
2、展示订单确认页面之前,应该确认用户身份。
a) 使用拦截器实现。
b) Cookie中取token。
c) 取不到token跳转到登录页面。
d) 取到token,根据token查询用户信息。
e) 如果没有用户信息,登录过期跳转到登录页面。
f) 取到用户信息,放行。
3、提交订单
a) 生成订单。
b) 展示订单提交成功页面。
1.2、工程搭建
1.2.1、创建订单服务层工程
taotao-order
|--taotao-order-interface
|--taotao-order-service
taotao-order
pom.xml
4.0.0
com.taotao
taotao-parent
0.0.1-SNAPSHOT
taotao-order
pom
taotao-order-interface
taotao-order-service
com.taotao
taotao-common
0.0.1-SNAPSHOT
org.apache.tomcat.maven
tomcat7-maven-plugin
8091
/
taotao-order-interface
pom.xml
4.0.0
com.taotao
taotao-order
0.0.1-SNAPSHOT
taotao-order-interface
com.taotao
taotao-manager-pojo
0.0.1-SNAPSHOT
taotao-order-service
pom.xml
4.0.0
com.taotao
taotao-order
0.0.1-SNAPSHOT
taotao-order-service
war
com.taotao
taotao-manager-dao
0.0.1-SNAPSHOT
com.taotao
taotao-order-interface
0.0.1-SNAPSHOT
org.springframework
spring-context
org.springframework
spring-beans
org.springframework
spring-webmvc
org.springframework
spring-jdbc
org.springframework
spring-aspects
org.springframework
spring-jms
org.springframework
spring-context-support
com.alibaba
dubbo
spring
org.springframework
netty
org.jboss.netty
org.apache.zookeeper
zookeeper
com.github.sgroschupf
zkclient
org.apache.maven.plugins
maven-surefire-plugin
true
可以参考taotao-manager整合。
web.xml
taotao-order-service
index.jsp
contextConfigLocation
classpath:spring/applicationContext*.xml
org.springframework.web.context.ContextLoaderListener
1.2.2、创建订单表现层工程
表现层工程处理订单的确认页面和订单提交后产生的订单号。
taotao-order-web打包方式war。
pom.xml
4.0.0
com.taotao
taotao-parent
0.0.1-SNAPSHOT
taotao-order-web
war
com.taotao
taotao-common
0.0.1-SNAPSHOT
com.taotao
taotao-order-interface
0.0.1-SNAPSHOT
org.springframework
spring-context
org.springframework
spring-beans
org.springframework
spring-webmvc
org.springframework
spring-jdbc
org.springframework
spring-aspects
org.springframework
spring-jms
org.springframework
spring-context-support
jstl
jstl
javax.servlet
servlet-api
provided
javax.servlet
jsp-api
provided
com.alibaba
dubbo
spring
org.springframework
netty
org.jboss.netty
org.apache.zookeeper
zookeeper
com.github.sgroschupf
zkclient
junit
junit
test
org.apache.tomcat.maven
tomcat7-maven-plugin
8092
/
可以参考taotao-portal-web整合。
回到顶部
2、展示订单确认页面
2.1、导入静态页面
修改taotao-order-web工程中的src/main/resources/spring/下的springmvc.xml文件,添加配置资源映射标签:
2.2、功能分析
在购物车表现层工程中的,有我们订单确认页面的URL:
/taotao-cart-web/src/main/webapp/WEB-INF/jsp/cart.jsp
由于订单确认页面展示在taotao-order-web系统,所以修改跳转地址为:http://localhost:8092/order/order-cart.html
在购物车页面点击“去结算”按钮跳转到订单确认页面。
我们打开订单确认页面order-cart.jsp,看看需要准备什么数据。我们发现只需要准备购物车列表List
,就可以了,但是还需要将${cart.images[0]}改为${cart.image}
order-cart.jsp的第191行还需要修改:
不然会报错!
请求分析:
请求的url:/order/order-cart
参数:没有参数。
返回值:逻辑视图String(order-cart.jsp),展示订单确认页面。
业务逻辑:
1、首先用户先登录,从cookie中获取token,根据token调用SSO服务获取登录的用户信息。
2、从cookie中获取购物车的商品的列表数据。
3、从redis中获取该用户的购物车的商品列表数据。
4、将这两者的数据进行合并,展示商品数据。并清除cookie中的数据。
5、展示配送地址列表,需要根据用户id从数据库中查询收货地址列表,这里暂时使用静态数据。
6、展示支付方式,也需要从数据库中查询支付的方式列表,这里暂时使用静态数据。
2.3、Dao层、Service层(无)
需要根据用户id查询收货地址列表。
需要查询支付方式。
但是由于这两个都使用的静态数据,所以服务层不需要编写。
静态数据,做静态页面处理。
业务逻辑:
直接调用其他的服务层的服务即可。(需要添加对应的依赖,并引用服务。)
2.4、发布服务
由于表现层需要调服务层的SSO服务和购物车服务,所以需要在taotao-sso-service和taotao-cart-service工程中发布服务。
2.5、引用服务
在taotao-order-web工程中的springmvc.xml文件中引用服务:
2.6、Controller
参考功能分析的业务逻辑。
请求的url:/order/order-cart
参数:无
@Autowired
private UserLoginService userLoginService;
@Autowired
private CartService cartService;
@Value("COOKIE_TOKEN_KEY")
private String COOKIE_TOKEN_KEY;
@Value("COOKIE_CART_KEY")
private String COOKIE_CART_KEY;
@RequestMapping("/order/order-cart")
public String showOrderCart(HttpServletRequest request, HttpServletResponse response) {
// 1、从cookie中获取token
String token = CookieUtils.getCookieValue(request, COOKIE_TOKEN_KEY);
// 2、根据token调用SSO服务获取登录的用户信息,查看用户是否已经过期
TbUser tbUser = null;
if (StringUtils.isNotBlank(token)) {
TaotaoResult result = userLoginService.getUserByToken(token);
if (result.getStatus() == 200) {
tbUser = (TbUser) result.getData();
}
}
// 3、用户必须登录才展示订单页面
// 4、展示用户的配送地址列表,根据用户id从数据库中查询收货地址列表,这里暂时使用静态数据
// 5、展示支付方式列表,从数据库中查询支付的方式列表,这里暂时使用静态数据
// 6、从cookie中获取购物车的商品列表
List cartList2 = getCartListFromCookie(request);
// 7、调用购物车服务从redis数据库中获取购物车的商品列表
List cartList1 = cartService.queryCartListByUserId(tbUser == null ? -1 : tbUser.getId());
// 8、合并数据到redis中
for (TbItem tbItem2 : ca