springboot整合项目-商城项目实现购物车功能

购物车模块

加入购物车

持久层

1.规划持久层的语句

1.向购物车表中插入数据

insert into t_cart (aid除外) values (值列表)

2.当当前的商品已经在购物车中存在,则直接更新 number的数量即可

update t_cart set number = #{number} where cid= #{cid}

3.查询当前cid是否存在

select  * from t_cart where cid= #{cid} and uid =?

2.接口与方法

CartMapper CartMapper.xml

 /**
     * 插入购物车的收据
     * @param cart
     * @return
     */
    Integer insert(Cart cart);

    /**
     * 更新购物车里面某个商品的数量
     * @param cid
     * @param num
     * @param modifiedUser
     * @param modifiedTime
     * @return
     */
   Integer updateNumerByCid(@Param("cid") Integer cid, @Param("num") Integer num, @Param("modifiedUser") String modifiedUser, @Param("modifiedTime") Date modifiedTime);

    /**
     * 根据用户的id和商品的id来查询购物车中的数据
     * @param uid
     * @param pid
     * @return
     */
   Cart findByUidAndPid(@Param("uid") Integer uid,@Param("pid") Integer pid);
<resultMap id="CartEntityMap" type="com.cy.store.pojo.Cart">
        <id column="cid" property="cid"/>
        <result column="created_user" property="createdUser"/>
        <result column="created_time" property="createdTime"/>
        <result column="modified_user" property="modifiedUser"/>
        <result column="modified_time" property="modifiedTime"/>
    </resultMap>
    <insert id="insert" useGeneratedKeys="true" keyProperty="cid">
        INSERT INTO t_cart (uid, pid, price, num, created_user, created_time, modified_user, modified_time)
        VALUES (#{uid}, #{pid}, #{price}, #{num}, #{createdUser}, #{createdTime}, #{modifiedUser}, #{modifiedTime})
    </insert>
    <update id="updateNumerByCid">
        update t_cart set num= #{num},
        modified_user =#{modifiedUser},
        modified_time =#{modifiedTime}
        where cid =#{cid}
    </update>
    <select id="findByUidAndPid" resultMap="CartEntityMap">
         SELECT
            *
        FROM
            t_cart
        WHERE
            uid=#{uid} AND pid=#{pid}
    </select>

测试

/**
     * 测试插入购物车的方法
     */
    @Test
    void  testInsert(){
        Cart cart = new Cart();
        cart.setUid(10);
        cart.setPid(10000010);
        cart.setPrice(1000l);
        cart.setNum(2);
        Integer insert = cartMapper.insert(cart);
        log.info("插入的结果为:{}",insert);
    }

    /**
     * 测试更新某个商品在购物车里的数量
     */
    @Test
    void  testUpdataNum(){
        Integer admin = cartMapper.updateNumerByCid(1, 4, "admin", new Date());
        log.info("更新的结果为:{}",admin);
    }

    /**
     * 测试通过uid和pid查找指定的某个商品
     */
    @Test
    void  testFindByCidAndPid() {
        Cart byUidAndPid = cartMapper.findByUidAndPid(10, 10000010);
        log.info("查找的结果为:{}",byUidAndPid);
    }

业务层

1.规划异常

1.在插入数据时可能会产生异常:insetException

2.更新数据时可能会产生异常: updateException

2.接口

创建一个ICartService 实现类: CartServiceImpl

3.实现方法

 @Override
    public void addToCart(Integer uid, Integer pid, Integer count, String username) {
        //执行插入操作之前
        Cart result = cartMapper.findByUidAndPid(uid, pid);
        if (result == null) {//表示这个商品从来没有被添加在购物车内
            Cart cart = new Cart();
            cart.setUid(uid);
            cart.setPid(pid);
            cart.setPid(pid);
            cart.setNum(count);
            cart.setModifiedUser(username);
            cart.setModifiedTime(new Date());
            cart.setCreatedTime(new Date());
            cart.setCreatedUser(username);
            //价格 来至于商品中的数据  补全价格
            Product product = productMapper.findById(pid);
            cart.setPrice(product.getPrice());
            Integer insert = cartMapper.insert(cart);
            if (insert == null||insert !=1) {
                throw new InsertException("插入时发生未知的异常");
            }
        }else{//表示当前的商品在购物车中,则更新这条数据的num值

            Integer integer = cartMapper.updateNumerByCid(result.getCid(), count+result.getNum(), username, new Date());
            if (integer != 1) {
                throw new UpdateException("更新数据时发生了未知的异常");
            }
        }

    }

4.测试

 @Test
    void addToCart(){
        cartService.addToCart(10,10000011,2,"管理员");
    }

控制层

1.异常处理

不需要处理

2.请求设计

/carts/add_to_cart
/get
/pid amount session
/JsonResult

3.实现方法

   /**
     * 添加某个商品到购物车
     * @param session
     * @param pid
     * @param amount
     * @return
     */
    @RequestMapping("/add_to_carts")
    public JsonResult<Void> addToCart(HttpSession session,Integer pid,Integer amount){
        Integer uid = getUidFromSession(session);
        String username = getUsernameFromSession(session);
        cartService.addToCart(uid,pid,amount,username);

        return new JsonResult<Void>(OK);

    }

测试

 @Test
    void addToCart(){
        cartService.addToCart(10,10000011,2,"管理员");
    }

前端页面

$("#btn-add-to-collect").click(function() {
				$.ajax({
					url: "/carts/add_to_carts",
					type: "GET",
					date:{
						"pid":id,
						"amount":$("#num").val()
					},
					dataType: "JSON",
					success: function (json) {
						if (json.state == 200) {
							alert("加入购物车成功");
						} else {
							alert("加入购物车失败!");
						}
					},
					error: function (xhr) {
						alert("加入购物车时产生了位置的异常" + xhr.message);
					}
				});
			});
posted @ 2022-11-09 13:49  wiselee/  阅读(522)  评论(0编辑  收藏  举报