您的位置 首页 java

SSM搭建二手市场交易平台(二十):购物车商品的状态设置

写在前面

本篇主要介绍如何实现购物车商品的全选,全反选,单选,单反选以及购物车商品数量查询等功能。

购物车商品的全选

我们打开CartController.java文件,在里面写入以下代码:

 /***
 * 前台购物车商品全选
 * @author lenovo
 * */ @RequestMapping(value = "select_all. do ") //这里就是具体的每个方法的url链接
 @ResponseBody //自动 序列化 json功能
 public ServerResponse<CartVo> selectAll(HttpSession session){
 //验证用户是否登录
 User user =(User) session.getAttribute(Const.CURRENT_USER);
 //未登录需要用户强制登录
 if(user ==null){
 return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
 }
 //实现我们购物车商品全选的逻辑
 return iCartService.selectOrUnSelect(user.getId(),null,Const.Cart.CHECKED);
 }
 

接着打开CartServiceImpl.java文件,往里面添加如下代码:

 /***
 * 前台购物车商品全选或者全反选
 * @author envy
 * */ public ServerResponse<CartVo> selectOrUnSelect(Integer userId,Integer productId,Integer checked){
 cartMapper.checkedOrUncheckedProduct(userId,productId,checked);
 return this.list(userId);
 }
 

注意一下,之前我们最后返回的都是两行代码:

CartVo cartVo =this.getCartVoLimit(userId);
return ServerResponse.createBySuccess(cartVo); 
 

但是呢,前面我们也说过因为这两行代码已经被list进行封装了,因此现在直接调用list即可:

 return this.list(userId);
 

看到cartMapper.checkedOrUncheckedProduct(userId,productId,checked);这行代码,我们就知道需要去CartMapper.java文件里面新增一行代码:

//注意在mybatis中使用多个参数时,需要使用param注解
int checkedOrUncheckedProduct(@Param("userId") Integer userId,@Param("productId")Integer productId,@Param("checked") Integer checked);
 

紧接着去CartMapper.xml文件里面新增sql查询语句:

<!--注意set多个值时,需要用逗号隔开-->
 <update id="checkedOrUncheckedProduct" parameterType="map">
 update store_cart
 set checked =#{checked},
 update_time =now()
 where user_id =#{userId}
<if test="productId != null">
 and product_id = #{productId}
 </if>
 </update>
 

有人可能要问了,你全选与全反选是不需要商品id的,那在这里写干嘛,的确是不需要,但是我们后面要实现的单选和单反选却是需要的,因此写在这里只是为了后面代码更好的复用。这也就是我们为什么将参数productId设置为null的原因。

最后打开ICartService.java文件,新增以下代码:

ServerResponse<CartVo> selectOrUnSelectAll(Integer userId,Integer productId,Integer checked); //前台购物车商品全选或者全反选,或者单选,或者单反选
 

接下来完成购物车商品的全反选功能,这个和全选相反,你除了需要修改控制器controller里面的代码以外,其余的代码就可以不要修改了。

购物车商品的全反选

我们打开CartController.java文件,在里面写入以下代码:

 /***
 * 前台购物车商品全反选
 * @author lenovo
 * */ @RequestMapping(value = "un_select_all.do") //这里就是具体的每个方法的url链接
 @ResponseBody //自动序列化json功能
 public ServerResponse<CartVo> unSelectAll(HttpSession session){
 //验证用户是否登录
 User user =(User) session.getAttribute(Const.CURRENT_USER);
 //未登录需要用户强制登录
 if(user ==null){
 return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
 }
 //实现我们购物车商品全选的逻辑
 return iCartService.selectOrUnSelectAll(user.getId(),null,Const.Cart.UN_CHECKED);
 }
 

然后就可以了,是不是超级简单。

购物车商品的单选

想起我们前面做的工作了莫,这个依旧很简单,和我们购物车商品的全反选操作一样。打开CartController.java文件,在里面写入以下代码:

 /***
 * 前台购物车商品单选
 * @author lenovo
 * */ @RequestMapping(value = "select_one.do") //这里就是具体的每个方法的url链接
 @ResponseBody //自动序列化json功能
 public ServerResponse<CartVo> selectOne(HttpSession session,Integer productId){
 //验证用户是否登录
 User user =(User) session.getAttribute(Const.CURRENT_USER);
 //未登录需要用户强制登录
 if(user ==null){
 return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
 }
 //实现我们购物车商品单选的逻辑
 return iCartService.selectOrUnSelect(user.getId(),productId,Const.Cart.CHECKED);
 }
 

说了两次,那么购物车商品的单反选,你也就知道了吧!

购物车商品的单反选

打开CartController.java文件,在里面写入以下代码:

 /***
 * 前台购物车商品单反选
 * @author lenovo
 * */ @RequestMapping(value = "un_select_one.do") //这里就是具体的每个方法的url链接
 @ResponseBody //自动序列化json功能
 public ServerResponse<CartVo> UnSelectOne(HttpSession session,Integer productId){
 //验证用户是否登录
 User user =(User) session.getAttribute(Const.CURRENT_USER);
 //未登录需要用户强制登录
 if(user ==null){
 return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
 }
 //实现我们购物车商品单反选的逻辑
 return iCartService.selectOrUnSelect(user.getId(),productId,Const.Cart.UN_CHECKED);
 }
 

接下来完成购物车商品数量查询这个功能,这个也还是简单的。

购物车商品数量查询

这里的购物车商品数量查询是说,当你查询当前用户的购物车里面的商品数量时,假设一个商品有 8个,那么数量就是 8,我们是不按照商品种类来算,而是按数量算的,这也是目前电商的通用做法。

我们打开CartController.java文件,在里面写入以下代码:

 /***
 * 前台购物车商品数量查询
 * @author lenovo
 * */ @RequestMapping(value = "get_cart_product_count.do") //这里就是具体的每个方法的url链接
 @ResponseBody //自动序列化json功能
 public ServerResponse<Integer> getCartProductCount(HttpSession session){
 //验证用户是否登录
 User user =(User) session.getAttribute(Const.CURRENT_USER);
 //未登录,那么就返回0
 if(user ==null){
 return ServerResponse.createBySuccess(0);
 }
 //实现我们购物车商品数量查询的逻辑
 return iCartService.getCartProductCount(user.getId());
 }
 

接着打开CartServiceImpl.java文件,往里面添加如下代码:

 /***
 * 前台购物车商品数量查询
 * @author lenovo
 * */ public ServerResponse<Integer> getCartProductCount(Integer userId){
 if(userId ==null){
 return ServerResponse.createBySuccess(0);
 }
 //购物车商品数量查询
 return ServerResponse.createBySuccess(cartMapper.selectCartProductCount(userId));
 }
 

看到cartMapper.selectCartProductCount(userId)这行代码,我们就知道需要去CartMapper.java文件里面新增一行代码:

 int selectCartProductCount(Integer userId);
 

然后去CartMapper.xml文件里面新增 sql语句 :(其中select * as count 是给它起了一个别称)

 <select id="selectCartProductCount" parameterType="int" resultType="int">
 select sum(quantity) as count
 from store_cart
 where user_id = #{userId}
 </select>
 

不过这样做有一个问题,就是我们前面返回的是一个int,假设我们这个sql语句最后返回的是0,而你知道Int类型是不能传给0给它的,因此可以将代码代码修改如下,使用IFNULL(sum(quantity),0),就是说默认就是0。

 <select id="selectCartProductCount" parameterType="int" resultType="int">
 select IFNULL(sum(quantity),0) as count
 from store_cart
 where user_id = #{userId}
 </select>
 

当然你也可以使用另一种方法,就是修改CartMapper.java文件的返回类型,修改为Integer这一也是可以的。

然后就是关于购物车模块的接口测试了,很简单,大家可以参看我提供的接口文档自行进行测试,这里就不进行了。

这样我们本篇关于如何实现购物车商品的全选,全反选,单选,单反选以及购物车商品数量查询等功能的介绍就到此为止了,感谢你的赏阅!

文章来源:智云一二三科技

文章标题:SSM搭建二手市场交易平台(二十):购物车商品的状态设置

文章地址:https://www.zhihuclub.com/183057.shtml

关于作者: 智云科技

热门文章

网站地图