diff --git a/src/main/java/com/cultural/heritage/controller/good/CartExperienceController.java b/src/main/java/com/cultural/heritage/controller/good/CartExperienceController.java index 6a7acbd..2c3de61 100644 --- a/src/main/java/com/cultural/heritage/controller/good/CartExperienceController.java +++ b/src/main/java/com/cultural/heritage/controller/good/CartExperienceController.java @@ -189,43 +189,8 @@ public class CartExperienceController { // 封装用户购物车中的商品信息 List cartExperienceVOList = cartExperienceService.transformToCartRecordVOList(cartExperienceList); - List pendingServiceGoodList = commonService.findByFieldInTargetField(cartExperienceList, pendingServiceGoodService, CartExperience::getGoodId, "goodId"); - - List pendingServiceOrderList = commonService.findByFieldInTargetField(pendingServiceGoodList, pendingServiceOrderService, PendingServiceGood::getId, "pendingId"); - - // 封装Map集合(键:服务类商品待处理id,值:预约人数) - Map countMap = new HashMap<>(); - for (PendingServiceOrder pendingServiceOrder : pendingServiceOrderList) { - Long pendingId = pendingServiceOrder.getPendingId(); - Integer quantity = pendingServiceOrder.getQuantity(); - Integer currentNumber = countMap.get(pendingId); - countMap.put(pendingId, currentNumber == null ? quantity : currentNumber + quantity); - } - // 封装Map集合(键:预约情况,值:剩余可预约人数) - Map bookingNumberMap = new HashMap<>(); - for (PendingServiceGood pendingServiceGood : pendingServiceGoodList) { - Long pendingId = pendingServiceGood.getId(); - Integer count = countMap.get(pendingId); - Long goodId = pendingServiceGood.getGoodId(); - String reservationDate = pendingServiceGood.getReservationDate(); - String timeSlot = pendingServiceGood.getTimeSlot(); - BookingOrderQueryRequest bookingOrderQueryRequest = new BookingOrderQueryRequest(goodId, reservationDate, timeSlot); - Integer maxNumber = pendingServiceGood.getMaxNumber(); - bookingNumberMap.put(bookingOrderQueryRequest.toString(), count == null ? maxNumber : maxNumber - count); - } - - List cartExperienceVOPluses = cartExperienceVOList.stream().map(cartExperienceVO -> { - CartExperienceVOPlus cartExperienceVOPlus = new CartExperienceVOPlus(); - BeanUtils.copyProperties(cartExperienceVO, cartExperienceVOPlus); - Long goodId = cartExperienceVO.getGoodId(); - String reservationDate = cartExperienceVO.getReservationDate(); - String timeSlot = cartExperienceVO.getTimeSlot(); - BookingOrderQueryRequest bookingOrderQueryRequest = new BookingOrderQueryRequest(goodId, reservationDate, timeSlot); - Integer restNumber = bookingNumberMap.get(bookingOrderQueryRequest.toString()); - cartExperienceVOPlus.setRestNumber(restNumber); - return cartExperienceVOPlus; - }).toList(); - + // 封装成CartExperienceVOPlus + List cartExperienceVOPluses = cartExperienceService.packageToCartExperienceVOPlusList(cartExperienceVOList); return ResultUtils.success(cartExperienceVOPluses); } @@ -291,6 +256,9 @@ public class CartExperienceController { goodService.checkServiceGoodCartBookingDetailIsProperly(goodId, reservationDate, timeSlot, quantity, pendingServiceGoodMap, pendingServiceOrderList); } + List cartExperienceVOList = commonService.convertList(cartExperiences, CartExperienceVO.class); + // 获取Map集合(键:预约情况,值:剩余预约人数) + Map restNumberMap = cartExperienceService.getRestNumberMap(cartExperienceVOList); // 封装提交订单页的商品信息列表 List cartOrderVOList = new ArrayList<>(); @@ -298,6 +266,8 @@ public class CartExperienceController { Integer quantity = cartExperience.getQuantity(); Long goodId = cartExperience.getGoodId(); Good good = goodMap.get(goodId); + String reservationDate = cartExperience.getReservationDate(); + String timeSlot = cartExperience.getTimeSlot(); CartExperienceGoodVO cartExperienceGoodVO = new CartExperienceGoodVO(); BeanUtils.copyProperties(good, cartExperienceGoodVO); @@ -305,8 +275,10 @@ public class CartExperienceController { CartExperienceOrderVO cartExperienceOrderVO = new CartExperienceOrderVO(); cartExperienceOrderVO.setCartExperienceGoodVO(cartExperienceGoodVO); cartExperienceOrderVO.setQuantity(quantity); - cartExperienceOrderVO.setReservationDate(cartExperience.getReservationDate()); - cartExperienceOrderVO.setTimeSlot(cartExperience.getTimeSlot()); + cartExperienceOrderVO.setReservationDate(reservationDate); + cartExperienceOrderVO.setTimeSlot(timeSlot); + BookingOrderQueryRequest bookingOrderQueryRequest = new BookingOrderQueryRequest(goodId, reservationDate, timeSlot); + cartExperienceOrderVO.setRestNumber(restNumberMap.get(bookingOrderQueryRequest.toString())); cartOrderVOList.add(cartExperienceOrderVO); } Collections.reverse(cartOrderVOList); diff --git a/src/main/java/com/cultural/heritage/model/vo/cartService/CartExperienceOrderVO.java b/src/main/java/com/cultural/heritage/model/vo/cartService/CartExperienceOrderVO.java index 4aa6190..e9e0b79 100644 --- a/src/main/java/com/cultural/heritage/model/vo/cartService/CartExperienceOrderVO.java +++ b/src/main/java/com/cultural/heritage/model/vo/cartService/CartExperienceOrderVO.java @@ -33,6 +33,12 @@ public class CartExperienceOrderVO implements Serializable { private String timeSlot; + /** + * 剩余人数 + */ + private Integer restNumber; + + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/com/cultural/heritage/service/good/CartExperienceService.java b/src/main/java/com/cultural/heritage/service/good/CartExperienceService.java index 1636462..65201f8 100644 --- a/src/main/java/com/cultural/heritage/service/good/CartExperienceService.java +++ b/src/main/java/com/cultural/heritage/service/good/CartExperienceService.java @@ -5,9 +5,11 @@ import com.cultural.heritage.model.dto.cartService.CartExperienceAddRequest; import com.cultural.heritage.model.dto.cartService.CartExperienceOrderItemAddRequest; import com.cultural.heritage.model.entity.CartExperience; import com.cultural.heritage.model.vo.cartService.CartExperienceVO; +import com.cultural.heritage.model.vo.cartService.CartExperienceVOPlus; import jakarta.servlet.http.HttpServletRequest; import java.util.List; +import java.util.Map; public interface CartExperienceService extends IService { @@ -43,4 +45,16 @@ public interface CartExperienceService extends IService { */ List getInvalidCartIds(List cartExperienceList); + + + /** + * 封装成CartExperienceVOPlus + */ + List packageToCartExperienceVOPlusList(List cartExperienceVOList); + + + /** + * 获取Map集合(键:预约情况,值:剩余预约人数) + */ + Map getRestNumberMap (List cartExperienceVOList); } diff --git a/src/main/java/com/cultural/heritage/service/good/impl/CartExperienceServiceImpl.java b/src/main/java/com/cultural/heritage/service/good/impl/CartExperienceServiceImpl.java index 19e419f..9515bd3 100644 --- a/src/main/java/com/cultural/heritage/service/good/impl/CartExperienceServiceImpl.java +++ b/src/main/java/com/cultural/heritage/service/good/impl/CartExperienceServiceImpl.java @@ -9,12 +9,15 @@ import com.cultural.heritage.exception.ThrowUtils; import com.cultural.heritage.mapper.CartExperienceMapper; import com.cultural.heritage.model.dto.cartService.CartExperienceAddRequest; import com.cultural.heritage.model.dto.cartService.CartExperienceOrderItemAddRequest; +import com.cultural.heritage.model.dto.order.BookingOrderQueryRequest; import com.cultural.heritage.model.entity.*; import com.cultural.heritage.model.vo.cartService.CartExperienceGoodVO; import com.cultural.heritage.model.vo.cartService.CartExperienceVO; +import com.cultural.heritage.model.vo.cartService.CartExperienceVOPlus; import com.cultural.heritage.service.common.CommonService; import com.cultural.heritage.service.good.CartExperienceService; import com.cultural.heritage.service.good.GoodService; +import com.cultural.heritage.service.order.PendingServiceGoodService; import com.cultural.heritage.service.order.PendingServiceOrderService; import com.cultural.heritage.service.user.UserService; import jakarta.annotation.Resource; @@ -54,6 +57,10 @@ public class CartExperienceServiceImpl extends ServiceImpl packageToCartExperienceVOPlusList(List cartExperienceVOList) { + + List pendingServiceGoodList = commonService.findByFieldInTargetField(cartExperienceVOList, pendingServiceGoodService, CartExperienceVO::getGoodId, "goodId"); + + List pendingServiceOrderList = commonService.findByFieldInTargetField(pendingServiceGoodList, pendingServiceOrderService, PendingServiceGood::getId, "pendingId"); + + // 封装Map集合(键:服务类商品待处理id,值:预约人数) + Map countMap = new HashMap<>(); + for (PendingServiceOrder pendingServiceOrder : pendingServiceOrderList) { + Long pendingId = pendingServiceOrder.getPendingId(); + Integer quantity = pendingServiceOrder.getQuantity(); + Integer currentNumber = countMap.get(pendingId); + countMap.put(pendingId, currentNumber == null ? quantity : currentNumber + quantity); + } + // 封装Map集合(键:预约情况,值:剩余可预约人数) + Map bookingNumberMap = new HashMap<>(); + for (PendingServiceGood pendingServiceGood : pendingServiceGoodList) { + Long pendingId = pendingServiceGood.getId(); + Integer count = countMap.get(pendingId); + Long goodId = pendingServiceGood.getGoodId(); + String reservationDate = pendingServiceGood.getReservationDate(); + String timeSlot = pendingServiceGood.getTimeSlot(); + BookingOrderQueryRequest bookingOrderQueryRequest = new BookingOrderQueryRequest(goodId, reservationDate, timeSlot); + Integer maxNumber = pendingServiceGood.getMaxNumber(); + bookingNumberMap.put(bookingOrderQueryRequest.toString(), count == null ? maxNumber : maxNumber - count); + } + + return cartExperienceVOList.stream().map(cartExperienceVO -> { + CartExperienceVOPlus cartExperienceVOPlus = new CartExperienceVOPlus(); + BeanUtils.copyProperties(cartExperienceVO, cartExperienceVOPlus); + Long goodId = cartExperienceVO.getGoodId(); + String reservationDate = cartExperienceVO.getReservationDate(); + String timeSlot = cartExperienceVO.getTimeSlot(); + BookingOrderQueryRequest bookingOrderQueryRequest = new BookingOrderQueryRequest(goodId, reservationDate, timeSlot); + Integer restNumber = bookingNumberMap.get(bookingOrderQueryRequest.toString()); + cartExperienceVOPlus.setRestNumber(restNumber); + return cartExperienceVOPlus; + }).toList(); + + } + + + + /** + * 获取Map集合(键:预约情况,值:剩余预约人数) + */ + @Override + public Map getRestNumberMap(List cartExperienceVOList) { + List pendingServiceGoodList = commonService.findByFieldInTargetField(cartExperienceVOList, pendingServiceGoodService, CartExperienceVO::getGoodId, "goodId"); + + List pendingServiceOrderList = commonService.findByFieldInTargetField(pendingServiceGoodList, pendingServiceOrderService, PendingServiceGood::getId, "pendingId"); + + // 封装Map集合(键:服务类商品待处理id,值:预约人数) + Map countMap = new HashMap<>(); + for (PendingServiceOrder pendingServiceOrder : pendingServiceOrderList) { + Long pendingId = pendingServiceOrder.getPendingId(); + Integer quantity = pendingServiceOrder.getQuantity(); + Integer currentNumber = countMap.get(pendingId); + countMap.put(pendingId, currentNumber == null ? quantity : currentNumber + quantity); + } + // 封装Map集合(键:预约情况,值:剩余可预约人数) + Map bookingNumberMap = new HashMap<>(); + for (PendingServiceGood pendingServiceGood : pendingServiceGoodList) { + Long pendingId = pendingServiceGood.getId(); + Integer count = countMap.get(pendingId); + Long goodId = pendingServiceGood.getGoodId(); + String reservationDate = pendingServiceGood.getReservationDate(); + String timeSlot = pendingServiceGood.getTimeSlot(); + BookingOrderQueryRequest bookingOrderQueryRequest = new BookingOrderQueryRequest(goodId, reservationDate, timeSlot); + Integer maxNumber = pendingServiceGood.getMaxNumber(); + bookingNumberMap.put(bookingOrderQueryRequest.toString(), count == null ? maxNumber : maxNumber - count); + } + return bookingNumberMap; + } + }