订单系统——展现订单商品信息

1.  订单系统

1.1. 功能分析

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

a)        展示商品列表

b)       配送地址列表

c)        选择支付方式

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

a)        使用拦截器实现。

b)       Cookie中取token

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

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

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

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

扫描二维码关注公众号,回复: 2873286 查看本文章

3、提交订单

a)        生成订单

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

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

订单服务系统

1.1. 工程搭建

1.1. 展示订单确认页面

1.1.1.    功能分析

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

2、请求的url:

/order/order-cart

3、参数:没有参数。

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

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

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

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

1.1.1.    Dao层、Service层(没有)

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

1.1.2.    表现层

请求的url:/order/order-cart

参数:无

业务逻辑:

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

返回值:逻辑视图。

/**
 * 订单Controller
 *
 * @Auther: jun
 * @Date: 2018/6/1 0001 19:35
 * @Description:
 */
@Controller
public class OrderController {

    @Autowired
    private CartService cartService;
    @Autowired
    private OrderService orderService;

    /**
     * 跳转到订单页面并判断用户是否登录
     *
     * @param request
     * @auther: jun
     * @date: 2018/6/1 0001 22:27
     * @return: java.lang.String
     * @Description:
     */
    @RequestMapping("order/order-cart")
    public String showOrderCart(HttpServletRequest request) {
        //获取登录用户信息
        TbUser user = (TbUser) request.getAttribute ( "user" );
        //通过调用购物车服务查询购物车中的商品列表
        List<TbItem> cartList = cartService.getCartList ( user.getId () );
        //将购物车中的商品列表转递给页面
        request.setAttribute ( "cartList", cartList );
        //返回逻辑页面
        return "order-cart";
    }

引用服务


Service这是CartService中的实现类代码

@Override
public List<TbItem> getCartList(Long userId) {
    //根据用户id查询购物车商品列表(redis 中的键找值)
    List<String> jsonList = jedisClient.hvals(REDIS_CART_PRE + ":" + userId);
    //创建一个商品列表信息
    List<TbItem> itemList=new ArrayList<>();
    for (String string : jsonList) {
        //获取到json中一个数据并转换数据类型成pojo对象
        TbItem item = JsonUtils.jsonToPojo(string, TbItem.class);
        //添加到列表
        itemList.add(item);
    }
    //返回列表
    return itemList;
}

发布服务

购物车发布服务


1.1. 用户身份认证

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

1.1.1.    功能分析

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

2、业务逻辑

a)        从cookie中取token。

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

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

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

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

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

1.1.2.    拦截器实现   (配置文件)


/**
 * 用户登录拦截器
 * @Auther: jun
 * @Date: 2018/6/1 0001 19:52
 * @Description:
 */
public class Logininterceptor implements HandlerInterceptor {
    @Autowired
    private TokenService tokenService;
    @Autowired
    private CartService cartService;
    @Value("${SSO_URL}")
    private  String SSO_URL ;

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {
        //执行Handler之前执行此方法
        // a)从cookie中取token。

        //从cookie中获取到token
        String token = CookieUtils.getCookieValue(httpServletRequest, "token");
        //判断token是否存在
        if (StringUtils.isBlank(token)){
            //如果不存在,未登录状态,跳转到sso服务系统的登录页面,登录页面成功后,跳转到当前请求的url
            httpServletResponse.sendRedirect(SSO_URL+"/page/login/redirect="+httpServletRequest.getRequestURL());
            //拦截
            return false;
        }
        //如果token存在
        //需要调用sso服务取用户信息
        E3Result result = tokenService.getUserByToker(token);
        //取到了判断用户信息状态是否过期
        if (result.getStatus()!=200){
            //过期就要重新登录,跳转到sso服务系统的登录页面,登录页面成功后,跳转到当前请求的url
            httpServletResponse.sendRedirect(SSO_URL+"/page/login?redirect="+httpServletRequest.getRequestURL());
            //拦截
            return  false;
        }
        //如果取到用户信息,是登录状态,需要放入request中
        TbUser user = (TbUser) result.getData();
        httpServletRequest.setAttribute("user",user);
        //判断cookie中是否有购物车数据,有就要合并
        String jsonCartList = CookieUtils.getCookieValue(httpServletRequest, "cart", true);
        //判断jsonCartList不为空
        if (StringUtils.isNoneBlank(jsonCartList)){
            //合并购物车数据
            cartService.mergeCart(JsonUtils.jsonToList(jsonCartList,TbItem.class),user.getId());
        }
        //放行
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, ModelAndView modelAndView) throws Exception {
// 执行Handler之后返回ModelAndView之前
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, Exception e) throws Exception {
// 返回ModelAndView之后,执行。异常处理。
    }
}

1.1.1.    配置拦截器

中springmvc.xml中配置拦截器。


<!--拦截器配置-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--拦截所有的url-->
        <mvc:mapping path="/**"/>
        <!--配置拦截器的实现类-->
        <bean class="com.e3mall.order.interceptor.Logininterceptor"/>
    </mvc:interceptor>


猜你喜欢

转载自blog.csdn.net/qq_39537939/article/details/80570001
今日推荐