添加购物车
需求分析和设计


接口设计

数据库表设计


这里设置冗余字段为了方便后续查询,且这些冗余字段数据相对比较稳定
具体代码开发
控制层-ShoppingCartController
@RestController
@RequestMapping("/user/shoppingCart")
@Slf4j
@Api(tags = "C端购物车相关接口")
public class ShoppingCartController {
@Autowired
private ShoppingCartService shoppingCartService;
/**
* 添加购物车
*
* @param shoppingCartDTO
* @return
*/
@PostMapping("/add")
@ApiOperation("添加购物车")
public Result add( @RequestBody ShoppingCartDTO shoppingCartDTO){
log.info("添加购物车,商品信息为:{}",shoppingCartDTO);
shoppingCartService.addShoppingCart(shoppingCartDTO);
return null;
}
}
业务层
@Service
@Slf4j
public class ShoppingCartServiceImpl implements ShoppingCartService {
@Autowired
private ShoppingCartMapper shoppingCartMapper;
@Autowired
private DishMapper dishMapper;
@Autowired
private SetmealMapper setmealMapper;
/**
* 添加购物车
*
* @param shoppingCartDTO
* @return
*/
public void addShoppingCart(ShoppingCartDTO shoppingCartDTO) {
//判断商品是否存在 购物车中
ShoppingCart shoppingCart = new ShoppingCart();
//拷贝数据
BeanUtils.copyProperties(shoppingCartDTO,shoppingCart);
Long userId = BaseContext.getCurrentId(); //拦截器中获取userId
shoppingCart.setUserId(userId); //将userId存入购物车商品对象
//查询数据
List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);
//存在:数量+1
if (list !=null && list.size() > 0 ){
ShoppingCart cart = list.get(0);
cart.setNumber(cart.getNumber() + 1);
//更新操作,只需要更改number
shoppingCartMapper.updateNumberById(cart);
}else {
//不存在:插入商品信息
//判断本次添加的 是菜品还是套餐
Long dishId = shoppingCartDTO.getDishId();
if (dishId != null){
//本次添加的 是菜品
Dish dish = dishMapper.getById(dishId);
shoppingCart.setName(dish.getName());
shoppingCart.setImage(dish.getImage());
shoppingCart.setAmount(dish.getPrice());
}else {
//本次添加的 是套餐 因为dishId和setmealId 只能有一项为空
Long setmealId = shoppingCartDTO.getSetmealId();
Setmeal setmeal = setmealMapper.getById(setmealId);
shoppingCart.setName(setmeal.getName());
shoppingCart.setImage(setmeal.getImage());
shoppingCart.setAmount(setmeal.getPrice());
}
//数量和创建时间操作都是相同的,执行一次就行
shoppingCart.setNumber(1);
shoppingCart.setCreateTime(LocalDateTime.now());
shoppingCartMapper.insert(shoppingCart);//插入
}
}
}
数据持久层-ShoppingCartMapper
@Mapper
public interface ShoppingCartMapper {
/**
* 动态调节查询
*
* @param
* @param shoppingCart
* @return
*/
List<ShoppingCart> list(ShoppingCart shoppingCart);
/**
* 根据id修改商品数量
*
* @param
* @param cart
* @return
*/
@Update("update shopping_cart set number = #{number} where id = #{id} ")
void updateNumberById(ShoppingCart cart);
/**
* 插入购物车数据
*
* @param
* @param shoppingCart
* @return
*/
@Insert("insert into shopping_cart (name,user_id,dish_id,setmeal_id,dish_flavor,number,amount,image,create_time)"+
"values (#{name},#{userId},#{dishId},#{setmealId},#{dishFlavor},#{number},#{amount},#{image},#{createTime})")
void insert(ShoppingCart shoppingCart);
}
ShoppingCartMapper .xml
<select id="list" resultType="com.sky.entity.ShoppingCart">
select * from shopping_cart
<where>
<if test="userId != null">
and user_id = #{userId}
</if>
<if test="setmealId != null">
and setmeal_id = #{setmealId}
</if>
<if test="dishId != null">
and dish_id = #{dishId}
</if>
<if test="dishFlavor != null">
and dish_flavor = #{dishFlavor}
</if>
</where>
</select>
查看购物车
需求分析和设计


具体代码开发
控制层-ShoppingCartController
/**
* 查看购物车
*
* @param
* @return
*/
@GetMapping("/list")
@ApiOperation("查看购物车")
public Result<List<ShoppingCart>> list(){
List<ShoppingCart> list = shoppingCartService.showShoppingCart();
return Result.success(list);
}
业务层-ShoppingCartServiceImpl
/**
* 查看购物车
*
* @param
* @return
*/
public List<ShoppingCart> showShoppingCart() {
Long userid = BaseContext.getCurrentId();
ShoppingCart shoppingCart = ShoppingCart.builder()
.userId(userid)
.build();
List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);
return list;
}
数据持久层
之前写的list
清空购物车
需求分析和设计

具体代码开发
控制层-ShoppingCartController
/**
* 清空购物车
*
* @param
* @return
*/
@DeleteMapping("/clean")
@ApiOperation("清空购物车")
public Result clean(){
shoppingCartService.cleanShoppingCart();
return Result.success();
}
业务层-ShoppingCartServiceImpl
public void cleanShoppingCart() {
Long userId = BaseContext.getCurrentId();
shoppingCartMapper.deleteByUserId(userId);
}
数据持久层-ShoppingCartMapper
/**
* 根据用户id删除购物车数据
*
*
* @return
*/
@Delete("delete from shopping_cart where user_id = #{userId}")
void deleteByUserId(Long userId);
}
在购物车中删除商品(作业无视频)
需求分析和设计
接口设计

具体代码开发
控制层-ShoppingCartController
/**
* 删除购物车中的一个商品
*
* @param
* @return
*/
@PostMapping("/sub")
@ApiOperation("删除购物车中的一个商品")
public Result sub(@RequestBody ShoppingCartDTO shoppingCartDTO){
shoppingCartService.subShoppingCart(shoppingCartDTO);
return Result.success();
}
业务层-ShoppingCartServiceImpl
/**
* 删除购物车中一个商品
* @param shoppingCartDTO
*/
public void subShoppingCart(ShoppingCartDTO shoppingCartDTO) {
ShoppingCart shoppingCart = new ShoppingCart();
BeanUtils.copyProperties(shoppingCartDTO,shoppingCart);
//设置查询条件,查询当前登录用户的购物车数据
shoppingCart.setUserId(BaseContext.getCurrentId());
List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);
if(list != null && list.size() > 0){
shoppingCart = list.get(0); //list查询符合要求的一定只有一条
Integer number = shoppingCart.getNumber();
if(number == 1){
//当前商品在购物车中的份数为1,直接删除当前记录
shoppingCartMapper.deleteById(shoppingCart.getId());
}else {
//当前商品在购物车中的份数不为1,修改份数即可
shoppingCart.setNumber(shoppingCart.getNumber() - 1);
shoppingCartMapper.updateNumberById(shoppingCart);
}
}
}
数据持久层-ShoppingCartMapper
/**
* 根据id删除购物车数据
* @param id
*/
@Delete("delete from shopping_cart where id = #{id}")
void deleteById(Long id);
1377

被折叠的 条评论
为什么被折叠?



