3 订单系统

3.1 功能分析

1、在购物车页面点击“去结算”按钮跳转到订单确认页面。

             a)  展示商品列表

             b)  配送地址列表

             c)  选择支付方式

2、展示订单确认页面之前,应该确认用户身份。

             a)  使用拦截器实现。

             b)  Cookie中取token

             c)  取不到token跳转到登录页面

             d)  取到token,根据token查询用户信息。

             e)  如果没有用户信息,登录过期跳转到登录页面

             f)  取到用户信息,放行。

3、提交订单

             a)  生成订单

             b)  展示订单提交成功页面。

 

订单系统系统:订单确认页面、订单提交成功页面。

订单服务系统

3.2 工程搭建

订单系统

创建一个订单服务系统:

e3-order

   |--e3-order-interface

   |--e3-order-Service

 

可以参考e3-manager整合。

 

表现层工程:

e3-order-web打包方式war。

订单系统

3.3 展示订单确认页面

3.3.1 功能分析

        1. 在购物车页面点击“去结算”按钮跳转到订单确认页面。

        2. 请求的url:

订单系统

/order/order-cart

        3. 参数:没有参数。

        4. 购物车商品数据从cookie中取出来的。可以在订单系统中取到cookie中的购物车数据。

        5. 配送地址列表,需要用户登录。需要根据用户id查询收货地址列表。静态数据。

        6. 支付方式。静态数据。

        7. 返回值:逻辑视图String,展示订单确认页面。

3.3.2 Dao层、Service层(没有)

需要根据用户id查询收货地址列表。没有此功能。

3.3.3 表现层

请求的url:/order/order-cart

参数:无

业务逻辑:

从cookie中取商品列表展示到页面。

返回值:逻辑视图。

@Controller

public class OrderController {

     

      @Value("${TT_CART}")

      private String TT_CART;

 

      /**

       * 展示订单确认页面。

       * <p>Title: showOrderCart</p>

       * <p>Description: </p>

       * @return

       */

      @RequestMapping("/order/order-cart")

      public String showOrderCart(HttpServletRequest request) {

            //取用户id

            //从cookie中取token,然后根据token查询用户信息。需要调用sso系统的服务。

            //根据用户id查询收货地址列表

            //从cookie中取商品列表

            List<TbItem> cartList = getCartList(request);

            //传递给页面

            request.setAttribute("cartList", cartList);

            //返回逻辑视图

            return "order-cart";

      }

     

      /**

       * 从cookie中取购物车列表

       * <p>Title: getCartList</p>

       * <p>Description: </p>

       * @param request

       * @return

       */

      private List<TbItem> getCartList(HttpServletRequest request) {

            //取购物车列表

            String json = CookieUtils.getCookieValue(request, TT_CART, true);

            //判断json是否为null

            if (StringUtils.isNotBlank(json)) {

                  //把json转换成商品列表返回

                  List<TbItem> list = JsonUtils.jsonToList(json, TbItem.class);

                  return list;

            }

            return new ArrayList<>();

      }

}

3.4 用户身份认证

在展示订单确认页面之前,需要对用户身份进行认证,要求用户必须登录。

3.4.1 功能分析

      1. 使用springmvc的拦截器实现。需要实现一个接口HandlerInterceptor接口。

      2. 业务逻辑

           a)  从cookie中取token。

           b)  没有token,需要跳转到登录页面。

           c)  有token。调用sso系统的服务,根据token查询用户信息。

           d)  如果查不到用户信息。用户登录已经过期。需要跳转到登录页面。

           e)  查询到用户信息。放行。

      3. 在springmvc.xml中配置拦截器。

3.4.2 拦截器实现

public class LoginInterceptor implements HandlerInterceptor {

     

      @Value("${TT_TOKEN}")

      private String TT_TOKEN;

      @Value("${SSO_LOGIN_URL}")

      private String SSO_LOGIN_URL;

     

      @Autowired

      private UserService userService;

 

      @Override

      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

                  throws Exception {

            //执行Handler之前执行此方法

            // a)从cookie中取token。

            String token = CookieUtils.getCookieValue(request, TT_TOKEN);

            if (StringUtils.isBlank(token)) {

                  //取当前请求的url

                  String url = request.getRequestURL().toString();

                  // b)没有token,需要跳转到登录页面。

                  response.sendRedirect(SSO_LOGIN_URL + "?redirectUrl=" + url);

                  //拦截

                  return false;

            }

            // c)有token。调用sso系统的服务,根据token查询用户信息。

            e3Result result = userService.getUserByToken(token);

            if (result.getStatus() != 200) {

                  // d)如果查不到用户信息。用户登录已经过期。需要跳转到登录页面。

                  //取当前请求的url

                  String url = request.getRequestURL().toString();

                  // b)没有token,需要跳转到登录页面。

                  response.sendRedirect(SSO_LOGIN_URL + "?redirectUrl=" + url);

                  //拦截

                  return false;

            }

            // e)查询到用户信息。放行。

            return true;

      }

 

      @Override

      public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,

                  ModelAndView modelAndView) throws Exception {

            // 执行Handler之后返回ModelAndView之前

 

      }

 

      @Override

      public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)

                  throws Exception {

            // 返回ModelAndView之后,执行。异常处理。

 

      }

 

}

 

3.4.3 配置拦截器

中springmvc.xml中配置拦截器。

3.4.4 实现sso系统的回调

订单系统

相关文章: