From ea8347d6b9373773a4b095e7b479366ccb004ec0 Mon Sep 17 00:00:00 2001 From: slhaf Date: Wed, 18 Dec 2024 22:33:01 +0800 Subject: [PATCH] add set meal or dish into shopping cart --- .../controller/user/SetmealController.java | 1 + .../user/ShoppingCartController.java | 38 ++++++++++ .../com/sky/mapper/ShoppingCartMapper.java | 40 ++++++++++ .../com/sky/service/ShoppingCartService.java | 16 ++++ .../service/impl/ShoppingCartServiceImpl.java | 74 +++++++++++++++++++ .../resources/mapper/ShoppingCartMapper.xml | 24 ++++++ 6 files changed, 193 insertions(+) create mode 100644 sky-server/src/main/java/com/sky/controller/user/ShoppingCartController.java create mode 100644 sky-server/src/main/java/com/sky/mapper/ShoppingCartMapper.java create mode 100644 sky-server/src/main/java/com/sky/service/ShoppingCartService.java create mode 100644 sky-server/src/main/java/com/sky/service/impl/ShoppingCartServiceImpl.java create mode 100644 sky-server/src/main/resources/mapper/ShoppingCartMapper.xml diff --git a/sky-server/src/main/java/com/sky/controller/user/SetmealController.java b/sky-server/src/main/java/com/sky/controller/user/SetmealController.java index c4a6825..a7a70e5 100644 --- a/sky-server/src/main/java/com/sky/controller/user/SetmealController.java +++ b/sky-server/src/main/java/com/sky/controller/user/SetmealController.java @@ -4,6 +4,7 @@ package com.sky.controller.user; import com.sky.entity.Setmeal; import com.sky.result.Result; import com.sky.service.SetmealService; +import com.sky.service.ShoppingCartService; import com.sky.vo.DishItemVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/sky-server/src/main/java/com/sky/controller/user/ShoppingCartController.java b/sky-server/src/main/java/com/sky/controller/user/ShoppingCartController.java new file mode 100644 index 0000000..030c283 --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/user/ShoppingCartController.java @@ -0,0 +1,38 @@ +package com.sky.controller.user; + +import com.sky.dto.ShoppingCartDTO; +import com.sky.result.Result; +import com.sky.service.ShoppingCartService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/user/shoppingCart") +@Slf4j +@Api(tags = "shoppingCart-controller") +public class ShoppingCartController { + + @Autowired + private ShoppingCartService shoppingCartService; + + /** + * Adds an item into the shopping cart. + * + * @param shoppingCartDTO The data transfer object encapsulating the details of the item to be added. + * Includes 'dishId' for individual dishes, 'setmealId' for set meals, and 'dishFlavor' to specify dish flavors if applicable. + * @return A {@link Result} indicating the outcome of the operation, with a success code and no specific data content. + */ + @PostMapping("/add") + @ApiOperation("add into shopping cart") + public Result add(@RequestBody ShoppingCartDTO shoppingCartDTO){ + log.info("add into shopping cart, details: {}",shoppingCartDTO); + shoppingCartService.addIntoShoppingCart(shoppingCartDTO); + return Result.success(); + } +} diff --git a/sky-server/src/main/java/com/sky/mapper/ShoppingCartMapper.java b/sky-server/src/main/java/com/sky/mapper/ShoppingCartMapper.java new file mode 100644 index 0000000..29d457c --- /dev/null +++ b/sky-server/src/main/java/com/sky/mapper/ShoppingCartMapper.java @@ -0,0 +1,40 @@ +package com.sky.mapper; + +import com.sky.entity.ShoppingCart; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +@Mapper +public interface ShoppingCartMapper { + + /** + * Retrieves a list of shopping carts based on a given ShoppingCart instance. + * This method is typically used to fetch carts matching specific criteria + * encapsulated within the provided ShoppingCart object. + * + * @param shoppingCart An instance of ShoppingCart containing criteria + * for the search. The fields within this object may be + * used to filter or customize the retrieval of shopping carts. + * @return A list of ShoppingCart instances that match the criteria specified + * in the input ShoppingCart object. If no carts match, an empty list is returned. + */ + List list(ShoppingCart shoppingCart); + + /** + * update the item number by item's id + * @param shoppingCart + */ + @Update("update sky_take_out.shopping_cart set number = #{number} where id = #{id}") + void updateNumberById(ShoppingCart shoppingCart); + + /** + * insert a new item into the shopping cart + * @param shoppingCart + */ + @Insert("insert into sky_take_out.shopping_cart(name, image, user_id, dish_id, setmeal_id, dish_flavor, amount, create_time) " + + "values (#{name},#{image},#{userId},#{dishId},#{setmealId},#{dishFlavor},#{amount},#{createTime})") + void insert(ShoppingCart shoppingCart); +} diff --git a/sky-server/src/main/java/com/sky/service/ShoppingCartService.java b/sky-server/src/main/java/com/sky/service/ShoppingCartService.java new file mode 100644 index 0000000..b942b48 --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/ShoppingCartService.java @@ -0,0 +1,16 @@ +package com.sky.service; + +import com.sky.dto.ShoppingCartDTO; +import org.springframework.stereotype.Service; + +@Service +public interface ShoppingCartService { + + /** + * Adds a setmeal or dish to the shopping cart. + * + * @param shoppingCartDTO The data transfer object containing details of the item to be added to the shopping cart. + * It includes dishId, setmealId, and dishFlavor necessary for identifying and customizing the item. + */ + void addIntoShoppingCart(ShoppingCartDTO shoppingCartDTO); +} diff --git a/sky-server/src/main/java/com/sky/service/impl/ShoppingCartServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/ShoppingCartServiceImpl.java new file mode 100644 index 0000000..8961494 --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/impl/ShoppingCartServiceImpl.java @@ -0,0 +1,74 @@ +package com.sky.service.impl; + +import com.sky.context.BaseContext; +import com.sky.dto.ShoppingCartDTO; +import com.sky.entity.Dish; +import com.sky.entity.Setmeal; +import com.sky.entity.ShoppingCart; +import com.sky.mapper.DishMapper; +import com.sky.mapper.SetmealMapper; +import com.sky.mapper.ShoppingCartMapper; +import com.sky.service.ShoppingCartService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +@Service +@Slf4j +public class ShoppingCartServiceImpl implements ShoppingCartService { + + @Autowired + private ShoppingCartMapper shoppingCartMapper; + @Autowired + private DishMapper dishMapper; + @Autowired + private SetmealMapper setmealMapper; + + /** + * Adds an item to the shopping cart. + * + * @param shoppingCartDTO The data transfer object containing details of the item to be added. + * It includes the dish ID, setmeal ID, and dish flavor if applicable. + */ + @Override + public void addIntoShoppingCart(ShoppingCartDTO shoppingCartDTO) { + //check the item if exists in the shopping cart + //fix properties + ShoppingCart shoppingCart = new ShoppingCart(); + BeanUtils.copyProperties(shoppingCartDTO, shoppingCart); + shoppingCart.setUserId(BaseContext.getCurrentId()); + + List list = shoppingCartMapper.list(shoppingCart); + + if (list != null && !list.isEmpty()){ + //if exists + ShoppingCart cart = list.get(0); + cart.setNumber(cart.getNumber() +1); + shoppingCartMapper.updateNumberById(cart); + }else { + //if not,fix the rest properties: name, amount, image + //check the item to be added is of dish or set meal + Long dishId = shoppingCartDTO.getDishId(); + if (dishId != null){ + Dish dish = dishMapper.selectById(dishId); + shoppingCart.setName(dish.getName()); + shoppingCart.setImage(dish.getImage()); + shoppingCart.setAmount(dish.getPrice()); + }else { + Long setmealId = shoppingCartDTO.getSetmealId(); + Setmeal setmeal = setmealMapper.selectById(setmealId); + shoppingCart.setName(setmeal.getName()); + shoppingCart.setImage(setmeal.getImage()); + shoppingCart.setAmount(setmeal.getPrice()); + } + shoppingCart.setNumber(1); + shoppingCart.setCreateTime(LocalDateTime.now()); + + shoppingCartMapper.insert(shoppingCart); + } + } +} diff --git a/sky-server/src/main/resources/mapper/ShoppingCartMapper.xml b/sky-server/src/main/resources/mapper/ShoppingCartMapper.xml new file mode 100644 index 0000000..43881ff --- /dev/null +++ b/sky-server/src/main/resources/mapper/ShoppingCartMapper.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file