ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day86(.查询\删除\清空\修改购物车功能,订单业务:删除购物车商品,新增订单功能)

2022-07-04 08:32:55  阅读:198  来源: 互联网

标签:OmsCartMapper 删除 id 订单 购物车 order


day86(.查询\删除\清空\修改购物车功能,订单业务:删除购物车商品,新增订单功能)

目录

1.续开发购物车功能

1.查询购物车功能

1.开发控制层

上次课我们完成了开发持久层和业务逻辑层的代码

下面开发控制层,调用方法进行测试

1.OmsCartController

// 分页查询当前用户购物车中的信息
@GetMapping("/list")
@ApiOperation("分页查询当前用户购物车中的信息")
@ApiImplicitParams({
        @ApiImplicitParam(value = "页码",name = "page",dataType = "int",example = "1"),
        @ApiImplicitParam(value = "每页条数",name = "pageSize",
                                    dataType = "int",example = "5")
})
@PreAuthorize("hasRole('ROLE_user')")
public JsonResult<JsonPage<CartStandardVO>> listCartByPage(
        // 当控制器参数可能为空,当空时,我们要给它赋默认值时,可以用下面的格式
        @RequestParam(required = false,defaultValue = WebConsts.DEFAULT_PAGE)
                                                                    Integer page,
        @RequestParam(required = false,defaultValue = WebConsts.DEFAULT_PAGE_SIZE)
                                                                    Integer pageSize
){
    // 控制层调用业务逻辑层代码
    JsonPage<CartStandardVO> jsonPage=omsCartService.listCarts(page,pageSize);
    return JsonResult.ok(jsonPage);

}

2.测试

1.启动nacos\seata
2.启动leaf\sso\order模块
3.测试http://localhost:10005/doc.html

2.删除购物车

1.删除购物车的持久层

我们删除购物车的功能支持同时删除一个或多个购物车中的商品

  • 基本思路就是将一个要删除的购物车商品的id数组传入到Mapper中进行删除

1.OmsCartMapper接口中添加放方法

// 根据购物车的id删除商品(支持删除多个商品)
int deleteCartsByIds(Long[] ids);

2.OmsCartMapper.xml

<!--  根据id删除购物车信息  -->
<delete id="deleteCartsByIds">
    delete from
        oms_cart
    where 
        id in 
    <foreach collection="ids" item="id" separator="," open="(" close=")">
        #{id}
    </foreach>
</delete>

2.删除购物车的业务逻辑层

1.OmsCartServiceImpl添加方法

// 按ids数组中的id值删除cart表中信息
@Override
public void removeCart(Long[] ids) {
    // 删除是包含返回值的
    int rows=omsCartMapper.deleteCartsByIds(ids);
    if(rows==0){
        throw new CoolSharkServiceException(ResponseCode.NOT_FOUND,
                "购物车中没有您要删除的商品");
    }
}

3.开发控制层代码

1.OmsCartController

@PostMapping("/delete")
@ApiOperation("根据用户选择的购物车商品删除(支持批量)")
@ApiImplicitParam(value = "删除购物车的id",name="ids",required = true,
                                dataType = "array")
@PreAuthorize("hasRole('ROLE_user')")
public JsonResult removeCartsByIds(Long[] ids){
    omsCartService.removeCart(ids);
    return JsonResult.ok();
}

4.测试:同上1.1.2

3.清空购物车

1.持久层

1.OmsCartMapper接口中添加放方法

// 删除当前用户购物车中所有内容
int deleteCartsByUserId(Long userId);

2.OmsCartMapper.xml

<!-- 删除当前用户购物车中所有内容  -->
<delete id="deleteCartsByUserId">
    delete from
        oms_cart
    where
        user_id=#{userId}
</delete>
@Override
public void removeAllCarts() {

}

2.业务逻辑层

1.OmsCartServiceImpl

// 清空当前登录用户购物车
@Override
public void removeAllCarts() {
    Long userId=getUserId();
    int rows=omsCartMapper.deleteCartsByUserId(userId);
    if(rows==0){
        throw new CoolSharkServiceException(ResponseCode.NOT_FOUND,"您的购物车中没有商品");
    }
}

3.控制层

1.OmsCartController

// 根据用户id清空购物车
@PostMapping("/delete/all")
@ApiOperation("根据用户id清空购物车")
@PreAuthorize("hasRole('ROLE_user')")
public JsonResult removeCartsByUserId(){
    omsCartService.removeAllCarts();;
    return JsonResult.ok("购物车已清空");
}

4.测试:同上1.1.2

4.修改购物车数量

1.业务逻辑层

OmsCartServiceImpl

// 修改购物车商品数量的方法
@Override
public void updateQuantity(CartUpdateDTO cartUpdateDTO) {
    // 持久层中已经包含了修改数量的方法,但是参数是OmsCart
    // 将本方法的cartUpdateDTO参数值赋值给OmsCart再调用持久层方法即可
    OmsCart omsCart=new OmsCart();
    BeanUtils.copyProperties(cartUpdateDTO,omsCart);
    // 调用持久层实施修改
    omsCartMapper.updateQuantityById(omsCart);
}

2.控制层

OmsCartController

// 修改购物车数量
@PostMapping("/update/quantity")
@ApiOperation("修改购物车数量")
@PreAuthorize("hasRole('ROLE_user')")
public JsonResult updateQuantity(@Validated CartUpdateDTO cartUpdateDTO){
    omsCartService.updateQuantity(cartUpdateDTO);
    return JsonResult.ok("修改完成");
}

3.测试:同上1.1.2

2.订单功能

1.订单业务逻辑

1.逻辑:

  1. 用户选中购物车中的商品后
  2. 点击添加订单
  3. 收集订单信息(sku商品信息,价格信息,优惠和运费信息等)
  4. 执行生成订单操作

2.步骤:

  1. 首先将用户选中的sku库存减少响应的数量
  2. 用户购物车要删除对应的商品
  3. 对应oms_order表执行新增,也就是创建一个订单
  4. 在新增订单成功后,我们还要将订单中的每种商品和订单关系添加在oms_order_item表中

3.技术要求:

这个业务中注意的事项或使用的技术有

整体是多个模块的数据操作所以需要seata分布式事务保证数据完整性

修改库存是mallProduct的功能,删除购物车和新增订单时mallOrder模块的功能

2.开发删除购物车商品功能

因为本次删除是要根据用户的id和skuid进行删除

之前没有开发过,所以要新编写方法

1.持久层

1.1OmsCartMapper添加方法

// 根据用户id和skuId删除商品
void deleteCartByUserIdAndSkuId(OmsCart omsCart);

1.2.OmsCartMapper.xml

<!--  根据userId和skuId删除购物车中商品   -->
<delete id="deleteCartByUserIdAndSkuId">
    delete from
        oms_cart
    where
        user_id=#{userId}
    and
        sku_id=#{skuId}
</delete>

2.业务逻辑层

1.OmsCartController

// 生成订单时,删除购物车中信息的方法
@Override
public void removeUserCarts(OmsCart omsCart) {
    // 根据omsCart的userId和skuId删除购物车信息
    omsCartMapper.deleteCartByUserIdAndSkuId(omsCart);
}

3.不需要控制层

原因:

当前删除购物车商品的功能是为生成订单准备的,

所以只需要开发出业务逻辑层即可不需要控制层的代码

3.开发新增订单功能

1.开发新增order_item的持久层

order_item表中保存每张订单包含什么商品的信息

我们新增这个表,要包含订单号,商品id和相关信息

1.mapper.OmsOrderItemMapper

@Repository
public interface OmsOrderItemMapper {

    // 新增订单业务时,需要一个能够新增oms_order_item表信息的方法
    // 因为一个订单中的商品可能有多个,所以我们新增方法的参数是List
    // 在Xml中试下list的遍历,实现连接一次数据库新增多条数据
    void insertOrderItems(List<OmsOrderItem> omsOrderItems);

}

2.OmsOrderItemMapper.xml

<!--  批量新增OmsOrderItem对象到数据库的方法  -->
<insert id="insertOrderItems" >
    insert into oms_order_item(
             id,
             order_id,
             sku_id,
             title,
             bar_code,
             data,
             main_picture,
             price,
             quantity
    ) values
    <foreach collection="omsOrderItems" item="ooi" separator=",">
        (
        #{ooi.id},
        #{ooi.orderId},
        #{ooi.skuId},
        #{ooi.title},
        #{ooi.barCode},
        #{ooi.data},
        #{ooi.mainPicture},
        #{ooi.price},
        #{ooi.quantity}
        )
    </foreach>
</insert>

2.开发新增Order的持久层

1.mapper.OmsOrderMapper.java

@Repository
public interface OmsOrderMapper {
    // 新增订单对象到数据库的方法
    void insertOrder(OmsOrder order);
    
}

2.OmsOrderMapper.xml

<insert id="insertOrder">
    insert into oms_order(
        id,
        sn,
        user_id,
        contact_name,
        mobile_phone,
        telephone,
        province_code,
        province_name,
        city_code,
        city_name,
        district_code,
        district_name,
        street_code,
        street_name,
        detailed_address,
        tag,
        payment_type,
        state,
        reward_point,
        amount_of_original_price,
        amount_of_freight,
        amount_of_discount,
        amount_of_actual_pay,
        gmt_pay,
        gmt_order,
        gmt_create,
        gmt_modified
    )  VALUES (
          #{id},
          #{sn},
          #{userId},
          #{contactName},
          #{mobilePhone},
          #{telephone},
          #{provinceCode},
          #{provinceName},
          #{cityCode},
          #{cityName},
          #{districtCode},
          #{districtName},
          #{streetCode},
          #{streetName},
          #{detailedAddress},
          #{tag},
          #{paymentType},
          #{state},
          #{rewardPoint},
          #{amountOfOriginalPrice},
          #{amountOfFreight},
          #{amountOfDiscount},
          #{amountOfActualPay},
          #{gmtPay},
          #{gmtOrder},
          #{gmtCreate},
          #{gmtModified}
      )
</insert>

标签:OmsCartMapper,删除,id,订单,购物车,order
来源: https://www.cnblogs.com/xiaoyezilei/p/16441649.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有