更新了优惠券模块

This commit is contained in:
chen-xin-zhi 2025-02-26 09:43:52 +08:00
parent dc43642574
commit b988787fa5
4 changed files with 119 additions and 39 deletions

View File

@ -189,43 +189,8 @@ public class CartExperienceController {
// 封装用户购物车中的商品信息 // 封装用户购物车中的商品信息
List<CartExperienceVO> cartExperienceVOList = cartExperienceService.transformToCartRecordVOList(cartExperienceList); List<CartExperienceVO> cartExperienceVOList = cartExperienceService.transformToCartRecordVOList(cartExperienceList);
List<PendingServiceGood> pendingServiceGoodList = commonService.findByFieldInTargetField(cartExperienceList, pendingServiceGoodService, CartExperience::getGoodId, "goodId"); // 封装成CartExperienceVOPlus
List<CartExperienceVOPlus> cartExperienceVOPluses = cartExperienceService.packageToCartExperienceVOPlusList(cartExperienceVOList);
List<PendingServiceOrder> pendingServiceOrderList = commonService.findByFieldInTargetField(pendingServiceGoodList, pendingServiceOrderService, PendingServiceGood::getId, "pendingId");
// 封装Map集合服务类商品待处理id预约人数
Map<Long, Integer> 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<String, Integer> 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<CartExperienceVOPlus> 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();
return ResultUtils.success(cartExperienceVOPluses); return ResultUtils.success(cartExperienceVOPluses);
} }
@ -291,6 +256,9 @@ public class CartExperienceController {
goodService.checkServiceGoodCartBookingDetailIsProperly(goodId, reservationDate, timeSlot, quantity, pendingServiceGoodMap, pendingServiceOrderList); goodService.checkServiceGoodCartBookingDetailIsProperly(goodId, reservationDate, timeSlot, quantity, pendingServiceGoodMap, pendingServiceOrderList);
} }
List<CartExperienceVO> cartExperienceVOList = commonService.convertList(cartExperiences, CartExperienceVO.class);
// 获取Map集合预约情况剩余预约人数
Map<String, Integer> restNumberMap = cartExperienceService.getRestNumberMap(cartExperienceVOList);
// 封装提交订单页的商品信息列表 // 封装提交订单页的商品信息列表
List<CartExperienceOrderVO> cartOrderVOList = new ArrayList<>(); List<CartExperienceOrderVO> cartOrderVOList = new ArrayList<>();
@ -298,6 +266,8 @@ public class CartExperienceController {
Integer quantity = cartExperience.getQuantity(); Integer quantity = cartExperience.getQuantity();
Long goodId = cartExperience.getGoodId(); Long goodId = cartExperience.getGoodId();
Good good = goodMap.get(goodId); Good good = goodMap.get(goodId);
String reservationDate = cartExperience.getReservationDate();
String timeSlot = cartExperience.getTimeSlot();
CartExperienceGoodVO cartExperienceGoodVO = new CartExperienceGoodVO(); CartExperienceGoodVO cartExperienceGoodVO = new CartExperienceGoodVO();
BeanUtils.copyProperties(good, cartExperienceGoodVO); BeanUtils.copyProperties(good, cartExperienceGoodVO);
@ -305,8 +275,10 @@ public class CartExperienceController {
CartExperienceOrderVO cartExperienceOrderVO = new CartExperienceOrderVO(); CartExperienceOrderVO cartExperienceOrderVO = new CartExperienceOrderVO();
cartExperienceOrderVO.setCartExperienceGoodVO(cartExperienceGoodVO); cartExperienceOrderVO.setCartExperienceGoodVO(cartExperienceGoodVO);
cartExperienceOrderVO.setQuantity(quantity); cartExperienceOrderVO.setQuantity(quantity);
cartExperienceOrderVO.setReservationDate(cartExperience.getReservationDate()); cartExperienceOrderVO.setReservationDate(reservationDate);
cartExperienceOrderVO.setTimeSlot(cartExperience.getTimeSlot()); cartExperienceOrderVO.setTimeSlot(timeSlot);
BookingOrderQueryRequest bookingOrderQueryRequest = new BookingOrderQueryRequest(goodId, reservationDate, timeSlot);
cartExperienceOrderVO.setRestNumber(restNumberMap.get(bookingOrderQueryRequest.toString()));
cartOrderVOList.add(cartExperienceOrderVO); cartOrderVOList.add(cartExperienceOrderVO);
} }
Collections.reverse(cartOrderVOList); Collections.reverse(cartOrderVOList);

View File

@ -33,6 +33,12 @@ public class CartExperienceOrderVO implements Serializable {
private String timeSlot; private String timeSlot;
/**
* 剩余人数
*/
private Integer restNumber;
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }

View File

@ -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.dto.cartService.CartExperienceOrderItemAddRequest;
import com.cultural.heritage.model.entity.CartExperience; import com.cultural.heritage.model.entity.CartExperience;
import com.cultural.heritage.model.vo.cartService.CartExperienceVO; import com.cultural.heritage.model.vo.cartService.CartExperienceVO;
import com.cultural.heritage.model.vo.cartService.CartExperienceVOPlus;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import java.util.List; import java.util.List;
import java.util.Map;
public interface CartExperienceService extends IService<CartExperience> { public interface CartExperienceService extends IService<CartExperience> {
@ -43,4 +45,16 @@ public interface CartExperienceService extends IService<CartExperience> {
*/ */
List<Long> getInvalidCartIds(List<CartExperience> cartExperienceList); List<Long> getInvalidCartIds(List<CartExperience> cartExperienceList);
/**
* 封装成CartExperienceVOPlus
*/
List<CartExperienceVOPlus> packageToCartExperienceVOPlusList(List<CartExperienceVO> cartExperienceVOList);
/**
* 获取Map集合预约情况剩余预约人数
*/
Map<String, Integer> getRestNumberMap (List<CartExperienceVO> cartExperienceVOList);
} }

View File

@ -9,12 +9,15 @@ import com.cultural.heritage.exception.ThrowUtils;
import com.cultural.heritage.mapper.CartExperienceMapper; import com.cultural.heritage.mapper.CartExperienceMapper;
import com.cultural.heritage.model.dto.cartService.CartExperienceAddRequest; import com.cultural.heritage.model.dto.cartService.CartExperienceAddRequest;
import com.cultural.heritage.model.dto.cartService.CartExperienceOrderItemAddRequest; 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.entity.*;
import com.cultural.heritage.model.vo.cartService.CartExperienceGoodVO; import com.cultural.heritage.model.vo.cartService.CartExperienceGoodVO;
import com.cultural.heritage.model.vo.cartService.CartExperienceVO; 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.common.CommonService;
import com.cultural.heritage.service.good.CartExperienceService; import com.cultural.heritage.service.good.CartExperienceService;
import com.cultural.heritage.service.good.GoodService; 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.order.PendingServiceOrderService;
import com.cultural.heritage.service.user.UserService; import com.cultural.heritage.service.user.UserService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -54,6 +57,10 @@ public class CartExperienceServiceImpl extends ServiceImpl<CartExperienceMapper,
private PendingServiceOrderService pendingServiceOrderService; private PendingServiceOrderService pendingServiceOrderService;
@Resource
private PendingServiceGoodService pendingServiceGoodService;
/** /**
* 更新购物车的商品属性 * 更新购物车的商品属性
*/ */
@ -246,4 +253,85 @@ public class CartExperienceServiceImpl extends ServiceImpl<CartExperienceMapper,
return cartExperiences.stream().map(CartExperience::getId).toList(); return cartExperiences.stream().map(CartExperience::getId).toList();
} }
/**
* 封装成CartExperienceVOPlus
*/
@Override
public List<CartExperienceVOPlus> packageToCartExperienceVOPlusList(List<CartExperienceVO> cartExperienceVOList) {
List<PendingServiceGood> pendingServiceGoodList = commonService.findByFieldInTargetField(cartExperienceVOList, pendingServiceGoodService, CartExperienceVO::getGoodId, "goodId");
List<PendingServiceOrder> pendingServiceOrderList = commonService.findByFieldInTargetField(pendingServiceGoodList, pendingServiceOrderService, PendingServiceGood::getId, "pendingId");
// 封装Map集合服务类商品待处理id预约人数
Map<Long, Integer> 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<String, Integer> 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<String, Integer> getRestNumberMap(List<CartExperienceVO> cartExperienceVOList) {
List<PendingServiceGood> pendingServiceGoodList = commonService.findByFieldInTargetField(cartExperienceVOList, pendingServiceGoodService, CartExperienceVO::getGoodId, "goodId");
List<PendingServiceOrder> pendingServiceOrderList = commonService.findByFieldInTargetField(pendingServiceGoodList, pendingServiceOrderService, PendingServiceGood::getId, "pendingId");
// 封装Map集合服务类商品待处理id预约人数
Map<Long, Integer> 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<String, Integer> 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;
}
} }