更新了优惠券模块

This commit is contained in:
chen-xin-zhi 2025-02-09 11:04:03 +08:00
parent 40af05caf9
commit 6b95ba86ff
10 changed files with 222 additions and 55 deletions

View File

@ -25,20 +25,14 @@ import com.cultural.heritage.model.dto.good.service.ServiceGoodQueryRequest;
import com.cultural.heritage.model.dto.good.service.ServiceGoodSingleUpdateRequest; import com.cultural.heritage.model.dto.good.service.ServiceGoodSingleUpdateRequest;
import com.cultural.heritage.model.dto.good.service.ServiceGoodUpdateRequest; import com.cultural.heritage.model.dto.good.service.ServiceGoodUpdateRequest;
import com.cultural.heritage.model.dto.timeperiod.TimePeriodAddRequest; import com.cultural.heritage.model.dto.timeperiod.TimePeriodAddRequest;
import com.cultural.heritage.model.entity.AppointmentDate; import com.cultural.heritage.model.entity.*;
import com.cultural.heritage.model.entity.CartRecord;
import com.cultural.heritage.model.entity.Good;
import com.cultural.heritage.model.entity.TimePeriod;
import com.cultural.heritage.model.vo.appointment.AppointmentDateTimePeriodVO; import com.cultural.heritage.model.vo.appointment.AppointmentDateTimePeriodVO;
import com.cultural.heritage.model.vo.appointment.AppointmentDateVO; import com.cultural.heritage.model.vo.appointment.AppointmentDateVO;
import com.cultural.heritage.model.vo.good.GoodPageVO; import com.cultural.heritage.model.vo.good.GoodPageVO;
import com.cultural.heritage.model.vo.good.ServiceGoodCardVO; import com.cultural.heritage.model.vo.good.ServiceGoodCardVO;
import com.cultural.heritage.model.vo.good.ServiceGoodVO; import com.cultural.heritage.model.vo.good.ServiceGoodVO;
import com.cultural.heritage.model.vo.timeperiod.TimePeriodVO; import com.cultural.heritage.model.vo.timeperiod.TimePeriodVO;
import com.cultural.heritage.service.good.AppointmentDateService; import com.cultural.heritage.service.good.*;
import com.cultural.heritage.service.good.CartRecordService;
import com.cultural.heritage.service.good.GoodService;
import com.cultural.heritage.service.good.TimePeriodService;
import com.cultural.heritage.service.user.UserService; import com.cultural.heritage.service.user.UserService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -83,6 +77,10 @@ public class GoodController {
private CartRecordService cartRecordService; private CartRecordService cartRecordService;
@Resource
private CartExperienceService cartExperienceService;
/** /**
@ -704,6 +702,11 @@ public class GoodController {
if (serviceGoodSingleUpdateRequest == null || serviceGoodSingleUpdateRequest.getId() <= 0) { if (serviceGoodSingleUpdateRequest == null || serviceGoodSingleUpdateRequest.getId() <= 0) {
throw new BusinessException(ErrorCode.PARAMS_ERROR); throw new BusinessException(ErrorCode.PARAMS_ERROR);
} }
// 获取原来的商品价格
Long sourceId = serviceGoodSingleUpdateRequest.getId();
Good resourceGood = goodService.getById(sourceId);
BigDecimal resourcePrice = resourceGood.getPrice();
// 更新服务类商品的基本信息 // 更新服务类商品的基本信息
Good good = new Good(); Good good = new Good();
BeanUtils.copyProperties(serviceGoodSingleUpdateRequest, good); BeanUtils.copyProperties(serviceGoodSingleUpdateRequest, good);
@ -716,6 +719,16 @@ public class GoodController {
boolean result = goodService.updateById(good); boolean result = goodService.updateById(good);
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR, "服务类商品信息更新失败"); ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR, "服务类商品信息更新失败");
// 如果更新了商品的价格就需要更新购物车中的小计
Long id = good.getId();
BigDecimal targetPrice = good.getPrice();
if (resourcePrice.compareTo(targetPrice) != 0) {
// 更新购物车中的小计
List<CartExperience> cartExperienceList = goodService.updateCartExperienceGoodPrice(id, targetPrice);
boolean update = cartExperienceService.updateBatchById(cartExperienceList);
ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "购物车商品价格更新失败");
}
return ResultUtils.success(true); return ResultUtils.success(true);
} }

View File

@ -14,6 +14,8 @@ import com.cultural.heritage.exception.ThrowUtils;
import com.cultural.heritage.model.dto.CommonRequest; import com.cultural.heritage.model.dto.CommonRequest;
import com.cultural.heritage.model.dto.cart.CartOrderAddRequest; import com.cultural.heritage.model.dto.cart.CartOrderAddRequest;
import com.cultural.heritage.model.dto.cart.CartOrderItemAddRequest; import com.cultural.heritage.model.dto.cart.CartOrderItemAddRequest;
import com.cultural.heritage.model.dto.cartService.CartExperienceOrderAddRequest;
import com.cultural.heritage.model.dto.cartService.CartExperienceOrderItemAddRequest;
import com.cultural.heritage.model.dto.order.OrderQueryRequest; import com.cultural.heritage.model.dto.order.OrderQueryRequest;
import com.cultural.heritage.model.dto.order.OrderUpdateRequest; import com.cultural.heritage.model.dto.order.OrderUpdateRequest;
import com.cultural.heritage.model.dto.order.capital.GeneralGoodSingleBuyAddRequest; import com.cultural.heritage.model.dto.order.capital.GeneralGoodSingleBuyAddRequest;
@ -24,6 +26,7 @@ import com.cultural.heritage.model.entity.Order;
import com.cultural.heritage.model.entity.OrderItems; import com.cultural.heritage.model.entity.OrderItems;
import com.cultural.heritage.model.entity.User; import com.cultural.heritage.model.entity.User;
import com.cultural.heritage.model.vo.order.OrderVO; import com.cultural.heritage.model.vo.order.OrderVO;
import com.cultural.heritage.service.good.CartExperienceService;
import com.cultural.heritage.service.good.CartRecordService; import com.cultural.heritage.service.good.CartRecordService;
import com.cultural.heritage.service.good.GoodService; import com.cultural.heritage.service.good.GoodService;
import com.cultural.heritage.service.order.OrderItemService; import com.cultural.heritage.service.order.OrderItemService;
@ -73,6 +76,10 @@ public class OrderController {
private CartRecordService cartRecordService; private CartRecordService cartRecordService;
@Resource
private CartExperienceService cartExperienceService;
@Resource @Resource
private GoodService goodService; private GoodService goodService;
@ -88,7 +95,7 @@ public class OrderController {
*/ */
@PostMapping("/add") @PostMapping("/add")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Operation(summary = "小程序端用户创建常规类商品订单", description = "参数订单创建请求体权限所有人方法名addOrder") @Operation(summary = "小程序端用户创建常规类(服务类)商品订单", description = "参数订单创建请求体权限所有人方法名addOrder")
public BaseResponse<Long> addOrder(@RequestBody GeneralGoodSingleBuyAddRequest generalGoodSingleBuyAddRequest, HttpServletRequest request) { public BaseResponse<Long> addOrder(@RequestBody GeneralGoodSingleBuyAddRequest generalGoodSingleBuyAddRequest, HttpServletRequest request) {
if (generalGoodSingleBuyAddRequest == null) { if (generalGoodSingleBuyAddRequest == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR); throw new BusinessException(ErrorCode.PARAMS_ERROR);
@ -158,6 +165,40 @@ public class OrderController {
/**
* 小程序端用户创建服务类商品购物车订单
*/
@PostMapping("/add/experience/cart")
@Transactional(rollbackFor = Exception.class)
@Operation(summary = "小程序端用户创建服务类商品购物车订单", description = "参数购物车订单创建请求体权限所有人方法名addCartOrder")
public BaseResponse<Long> addCartExperienceOrder(@RequestBody CartExperienceOrderAddRequest cartExperienceOrderAddRequest, HttpServletRequest request) {
if (cartExperienceOrderAddRequest == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR);
}
// 校验用户当前是否处于登录态
User loginUser = userService.getLoginUser(request);
Long userId = loginUser.getId();
// 校验购物车数据是否准确
List<CartExperienceOrderItemAddRequest> cartExperienceOrderItemAddRequestList = cartExperienceOrderAddRequest.getCartOrderItemAddRequestList();
boolean isAccurate = cartExperienceService.validIsConsistent(cartExperienceOrderItemAddRequestList);
ThrowUtils.throwIf(!isAccurate, ErrorCode.OPERATION_ERROR, "当前购物车中的某些商品已下架或者不存在,无法生成订单");
// 封装成订单主要信息请求体
OrderMainInfoAddRequest orderMainInfoAddRequest = orderService.packagedOrderMainInfoAddRequest(cartExperienceOrderAddRequest);
// 创建通用订单(常规类和服务类商品)
List<Long> cartIds = cartExperienceOrderItemAddRequestList.stream().map(CartExperienceOrderItemAddRequest::getCartExperienceId).toList();
Long orderId = orderService.createCommonOrder(orderMainInfoAddRequest, userId, true, cartIds, false);
// 向消息队列中发送订单创建的消息
orderService.sendCreateOrderMessage(orderId);
return ResultUtils.success(orderId);
}
/** /**
* Web端管理员分页查询订单 * Web端管理员分页查询订单
@ -247,7 +288,6 @@ public class OrderController {
map.put(orderId, orderItemsArrayList); map.put(orderId, orderItemsArrayList);
} }
List<OrderVO> orderVOS = orders.stream().map(order -> { List<OrderVO> orderVOS = orders.stream().map(order -> {
Long orderId = order.getId(); Long orderId = order.getId();
QueryWrapper<OrderItems> orderItemsQueryWrapper = new QueryWrapper<>(); QueryWrapper<OrderItems> orderItemsQueryWrapper = new QueryWrapper<>();

View File

@ -30,8 +30,8 @@ public class CartExperienceOrderAddRequest implements Serializable {
/** /**
* 地址id * 地址id
*/ */
@Schema(description = "地址id(id > 0)", example = "12") @Schema(description = "联系人(id > 0)", example = "12")
private Long addressId; private Long contactsId;
/** /**
@ -41,7 +41,6 @@ public class CartExperienceOrderAddRequest implements Serializable {
private Long couponId; private Long couponId;
/** /**
* 订单备注 * 订单备注
*/ */

View File

@ -16,7 +16,7 @@ public class CartExperienceOrderItemAddRequest implements Serializable {
* 购物车id * 购物车id
*/ */
@Schema(description = "购物车id(id > 0)", example = "20") @Schema(description = "购物车id(id > 0)", example = "20")
private Long cartRecordId; private Long cartExperienceId;
/** /**
* 数量 * 数量

View File

@ -2,6 +2,7 @@ package com.cultural.heritage.service.good;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
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.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 jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@ -30,10 +31,10 @@ public interface CartExperienceService extends IService<CartExperience> {
// /** /**
// * 在提交订单页校验购物车商品项的准确性 * 在提交订单页校验购物车商品项的准确性
// */ */
// boolean validIsConsistent(List<CartOrderItemAddRequest> cartOrderItemAddRequestList); boolean validIsConsistent(List<CartExperienceOrderItemAddRequest> cartExperienceOrderItemAddRequestList);

View File

@ -3,6 +3,7 @@ package com.cultural.heritage.service.good;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.cultural.heritage.model.dto.good.GoodQueryRequest; import com.cultural.heritage.model.dto.good.GoodQueryRequest;
import com.cultural.heritage.model.entity.CartExperience;
import com.cultural.heritage.model.entity.CartRecord; import com.cultural.heritage.model.entity.CartRecord;
import com.cultural.heritage.model.entity.Good; import com.cultural.heritage.model.entity.Good;
@ -30,9 +31,15 @@ public interface GoodService extends IService<Good> {
/** /**
* 更新购物车中的小计 * 更新常规类购物车中的小计
*/ */
List<CartRecord> updateCartGoodPrice(Long goodId, BigDecimal targetPrice); List<CartRecord> updateCartGoodPrice(Long goodId, BigDecimal targetPrice);
/**
* 更新服务类购物车中的小计
*/
List<CartExperience> updateCartExperienceGoodPrice(Long goodId, BigDecimal targetPrice);
} }

View File

@ -8,6 +8,7 @@ import com.cultural.heritage.exception.BusinessException;
import com.cultural.heritage.exception.ThrowUtils; 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.entity.CartExperience; import com.cultural.heritage.model.entity.CartExperience;
import com.cultural.heritage.model.entity.Good; import com.cultural.heritage.model.entity.Good;
import com.cultural.heritage.model.entity.User; import com.cultural.heritage.model.entity.User;
@ -193,34 +194,34 @@ public class CartExperienceServiceImpl extends ServiceImpl<CartExperienceMapper,
} }
// /** /**
// * 在提交订单页校验购物车商品项的准确性 * 在提交订单页校验购物车商品项的准确性
// */ */
// @Override @Override
// public boolean validIsConsistent(List<CartOrderItemAddRequest> cartOrderItemAddRequestList) { public boolean validIsConsistent(List<CartExperienceOrderItemAddRequest> cartExperienceOrderItemAddRequestList) {
// if (cartOrderItemAddRequestList.size() == 0) { if (cartExperienceOrderItemAddRequestList.size() == 0) {
// throw new BusinessException(ErrorCode.PARAMS_ERROR, "购物车中没有商品"); throw new BusinessException(ErrorCode.PARAMS_ERROR, "购物车中没有商品");
// } }
// // 封装map集合购物车id, 购买数量 // 封装map集合购物车id, 购买数量
// Map<Long, Integer> map = new HashMap<>(); Map<Long, Integer> map = new HashMap<>();
// for (CartOrderItemAddRequest cartOrderItemAddRequest : cartOrderItemAddRequestList) { for (CartExperienceOrderItemAddRequest cartExperienceOrderItemAddRequest : cartExperienceOrderItemAddRequestList) {
// Long cartRecordId = cartOrderItemAddRequest.getCartRecordId(); Long cartExperienceId = cartExperienceOrderItemAddRequest.getCartExperienceId();
// Integer quantity = cartOrderItemAddRequest.getQuantity(); Integer quantity = cartExperienceOrderItemAddRequest.getQuantity();
// map.put(cartRecordId, quantity); map.put(cartExperienceId, quantity);
// } }
// // 修改购物车商品项的购买数量 // 修改购物车商品项的购买数量
// List<Long> cartRecordIds = cartOrderItemAddRequestList.stream().map(CartOrderItemAddRequest::getCartRecordId).toList(); List<Long> cartExperienceIds = cartExperienceOrderItemAddRequestList.stream().map(CartExperienceOrderItemAddRequest::getCartExperienceId).toList();
// QueryWrapper<CartRecord> queryWrapper = new QueryWrapper<>(); QueryWrapper<CartExperience> queryWrapper = new QueryWrapper<>();
// queryWrapper.in("id", cartRecordIds); queryWrapper.in("id", cartExperienceIds);
// List<CartRecord> cartRecordList = this.list(queryWrapper); List<CartExperience> cartExperiences = this.list(queryWrapper);
// for (CartRecord cartRecord : cartRecordList) { for (CartExperience cartExperience : cartExperiences) {
// Long id = cartRecord.getId(); Long id = cartExperience.getId();
// Integer quantity = map.get(id); Integer quantity = map.get(id);
// cartRecord.setQuantity(quantity); cartExperience.setQuantity(quantity);
// } }
// List<Long> cartIds = getInvalidCartIds(cartRecordList); List<Long> cartIds = getInvalidCartIds(cartExperiences);
// return cartIds.isEmpty(); return cartIds.isEmpty();
// } }
/** /**

View File

@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cultural.heritage.common.ErrorCode; import com.cultural.heritage.common.ErrorCode;
import com.cultural.heritage.constant.CommonConstant; import com.cultural.heritage.constant.CommonConstant;
import com.cultural.heritage.exception.BusinessException; import com.cultural.heritage.exception.BusinessException;
import com.cultural.heritage.mapper.CartExperienceMapper;
import com.cultural.heritage.mapper.CartRecordMapper; import com.cultural.heritage.mapper.CartRecordMapper;
import com.cultural.heritage.mapper.GoodMapper; import com.cultural.heritage.mapper.GoodMapper;
import com.cultural.heritage.model.dto.good.GoodQueryRequest; import com.cultural.heritage.model.dto.good.GoodQueryRequest;
import com.cultural.heritage.model.entity.CartExperience;
import com.cultural.heritage.model.entity.CartRecord; import com.cultural.heritage.model.entity.CartRecord;
import com.cultural.heritage.model.entity.Good; import com.cultural.heritage.model.entity.Good;
import com.cultural.heritage.service.good.GoodService; import com.cultural.heritage.service.good.GoodService;
@ -30,6 +32,10 @@ public class GoodServiceImpl extends ServiceImpl<GoodMapper, Good> implements Go
private CartRecordMapper cartRecordMapper; private CartRecordMapper cartRecordMapper;
@Resource
private CartExperienceMapper cartExperienceMapper;
/** /**
* 商品查询条件 * 商品查询条件
*/ */
@ -116,7 +122,7 @@ public class GoodServiceImpl extends ServiceImpl<GoodMapper, Good> implements Go
/** /**
* 更新购物车中的小计 * 更新常规类购物车中的小计
*/ */
@Override @Override
public List<CartRecord> updateCartGoodPrice(Long goodId, BigDecimal targetPrice) { public List<CartRecord> updateCartGoodPrice(Long goodId, BigDecimal targetPrice) {
@ -132,4 +138,22 @@ public class GoodServiceImpl extends ServiceImpl<GoodMapper, Good> implements Go
} }
/**
* 更新服务类购物车中的小计
*/
@Override
public List<CartExperience> updateCartExperienceGoodPrice(Long goodId, BigDecimal targetPrice) {
QueryWrapper<CartExperience> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("goodId", goodId);
List<CartExperience> cartExperienceList = cartExperienceMapper.selectList(queryWrapper);
// 更新购物车中的小计
for (CartExperience cartExperience : cartExperienceList) {
Integer quantity = cartExperience.getQuantity();
cartExperience.setSubtotal(targetPrice.multiply(BigDecimal.valueOf(quantity)));
}
return cartExperienceList;
}
} }

View File

@ -3,6 +3,7 @@ package com.cultural.heritage.service.order;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.cultural.heritage.model.dto.cart.CartOrderAddRequest; import com.cultural.heritage.model.dto.cart.CartOrderAddRequest;
import com.cultural.heritage.model.dto.cartService.CartExperienceOrderAddRequest;
import com.cultural.heritage.model.dto.order.OrderAddRequest; import com.cultural.heritage.model.dto.order.OrderAddRequest;
import com.cultural.heritage.model.dto.order.OrderQueryRequest; import com.cultural.heritage.model.dto.order.OrderQueryRequest;
import com.cultural.heritage.model.dto.order.capital.GeneralGoodSingleBuyAddRequest; import com.cultural.heritage.model.dto.order.capital.GeneralGoodSingleBuyAddRequest;
@ -66,8 +67,14 @@ public interface OrderService extends IService<Order> {
/** /**
* 购物车封装订单主要信息请求体 * 常规类商品购物车封装订单主要信息请求体
*/ */
OrderMainInfoAddRequest packagedOrderMainInfoAddRequest(CartOrderAddRequest cartOrderAddRequest); OrderMainInfoAddRequest packagedOrderMainInfoAddRequest(CartOrderAddRequest cartOrderAddRequest);
/**
* 服务类商品购物车封装订单主要信息请求体
*/
OrderMainInfoAddRequest packagedOrderMainInfoAddRequest(CartExperienceOrderAddRequest cartExperienceOrderAddRequest);
} }

View File

@ -13,6 +13,8 @@ import com.cultural.heritage.exception.ThrowUtils;
import com.cultural.heritage.mapper.*; import com.cultural.heritage.mapper.*;
import com.cultural.heritage.model.dto.cart.CartOrderAddRequest; import com.cultural.heritage.model.dto.cart.CartOrderAddRequest;
import com.cultural.heritage.model.dto.cart.CartOrderItemAddRequest; import com.cultural.heritage.model.dto.cart.CartOrderItemAddRequest;
import com.cultural.heritage.model.dto.cartService.CartExperienceOrderAddRequest;
import com.cultural.heritage.model.dto.cartService.CartExperienceOrderItemAddRequest;
import com.cultural.heritage.model.dto.order.OrderAddRequest; import com.cultural.heritage.model.dto.order.OrderAddRequest;
import com.cultural.heritage.model.dto.order.OrderItemAddRequest; import com.cultural.heritage.model.dto.order.OrderItemAddRequest;
import com.cultural.heritage.model.dto.order.OrderQueryRequest; import com.cultural.heritage.model.dto.order.OrderQueryRequest;
@ -26,10 +28,7 @@ import com.cultural.heritage.model.dto.snapshot.GoodSnapshot;
import com.cultural.heritage.model.entity.*; import com.cultural.heritage.model.entity.*;
import com.cultural.heritage.model.enums.GoodTypeEnum; import com.cultural.heritage.model.enums.GoodTypeEnum;
import com.cultural.heritage.model.vo.coupon.CouponVO; import com.cultural.heritage.model.vo.coupon.CouponVO;
import com.cultural.heritage.service.good.CartRecordService; import com.cultural.heritage.service.good.*;
import com.cultural.heritage.service.good.CouponService;
import com.cultural.heritage.service.good.GoodService;
import com.cultural.heritage.service.good.UserCouponService;
import com.cultural.heritage.service.order.OrderItemService; import com.cultural.heritage.service.order.OrderItemService;
import com.cultural.heritage.service.order.OrderService; import com.cultural.heritage.service.order.OrderService;
import com.cultural.heritage.utils.MultiDelayMessage; import com.cultural.heritage.utils.MultiDelayMessage;
@ -77,6 +76,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
private CartRecordService cartRecordService; private CartRecordService cartRecordService;
@Resource
private CartExperienceService cartExperienceService;
@Resource @Resource
private RabbitTemplate rabbitTemplate; private RabbitTemplate rabbitTemplate;
@ -254,7 +257,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
return orderItems; return orderItems;
}).toList(); }).toList();
boolean save = orderItemService.saveBatch(newOrderItemsList); boolean save = orderItemService.saveBatch(newOrderItemsList);
ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR); ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR, "订单明细生成失败");
if (isGeneral) { if (isGeneral) {
// 扣减商品库存 // 扣减商品库存
@ -388,7 +391,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
/** /**
* 购物车封装订单主要信息请求体 * 常规类商品购物车封装订单主要信息请求体
*/ */
@Override @Override
public OrderMainInfoAddRequest packagedOrderMainInfoAddRequest(CartOrderAddRequest cartOrderAddRequest) { public OrderMainInfoAddRequest packagedOrderMainInfoAddRequest(CartOrderAddRequest cartOrderAddRequest) {
@ -455,6 +458,78 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
} }
/**
* 服务类商品购物车封装订单主要信息请求体
*/
@Override
public OrderMainInfoAddRequest packagedOrderMainInfoAddRequest(CartExperienceOrderAddRequest cartExperienceOrderAddRequest) {
// 封装成订单主要信息请求体
OrderMainInfoAddRequest orderMainInfoAddRequest = new OrderMainInfoAddRequest();
BeanUtils.copyProperties(cartExperienceOrderAddRequest, orderMainInfoAddRequest);
// 获取购物车id列表
List<CartExperienceOrderItemAddRequest> cartExperienceOrderItemAddRequestList = cartExperienceOrderAddRequest.getCartOrderItemAddRequestList();
List<Long> cartIds = cartExperienceOrderItemAddRequestList.stream().map(CartExperienceOrderItemAddRequest::getCartExperienceId).toList();
// 根据id列表获取购物车商品信息
QueryWrapper<CartExperience> queryWrapper = new QueryWrapper<>();
queryWrapper.in("id", cartIds);
List<CartExperience> cartExperienceList = cartExperienceService.list(queryWrapper);
List<Long> goodIds = cartExperienceList.stream().map(CartExperience::getGoodId).toList();
QueryWrapper<Good> goodQueryWrapper = new QueryWrapper<>();
goodQueryWrapper.in("id", goodIds);
List<Good> goodList = goodService.list(goodQueryWrapper);
// 封装map集合商品id, 商品信息
Map<Long, Good> goodMap = new HashMap<>();
for (Good good : goodList) {
goodMap.put(good.getId(), good);
}
// 封装成一个map集合购物车id, 购物车商品数量
Map<Long, Integer> map = new HashMap<>();
for (CartExperienceOrderItemAddRequest cartExperienceOrderItemAddRequest : cartExperienceOrderItemAddRequestList) {
Long cartExperienceId = cartExperienceOrderItemAddRequest.getCartExperienceId();
Integer quantity = cartExperienceOrderItemAddRequest.getQuantity();
map.put(cartExperienceId, quantity);
}
// 计算订单总金额
BigDecimal totalAmount = BigDecimal.ZERO;
for (CartExperience cartExperience : cartExperienceList) {
Long goodId = cartExperience.getGoodId();
Good good = goodMap.get(goodId);
Long cartExperienceId = cartExperience.getId();
Integer quantity = map.get(cartExperienceId);
totalAmount = totalAmount.add(good.getPrice().multiply(BigDecimal.valueOf(quantity)));
}
// 处理优惠券满减金额
Long couponId = orderMainInfoAddRequest.getCouponId();
if (couponId != null) {
UserCoupon userCoupon = userCouponService.getById(couponId);
ThrowUtils.throwIf(userCoupon == null || userCoupon.getCouponVO().getStatus().equals("已过期"), ErrorCode.OPERATION_ERROR, "用户优惠券不存在或已过期");
BigDecimal conditionAmount = userCoupon.getCouponVO().getConditionAmount();
totalAmount = totalAmount.subtract(conditionAmount);
}
// 填充订单主要信息请求体金额
orderMainInfoAddRequest.setTotalAmount(totalAmount);
// 封装成订单明细主要信息请求体列表
List<OrderItemMainInfoAddRequest> orderItemMainInfoAddRequestList = new ArrayList<>();
OrderItemMainInfoAddRequest orderItemMainInfoAddRequest;
for (CartExperience cartExperience : cartExperienceList) {
Long goodId = cartExperience.getGoodId();
Long cartExperienceId = cartExperience.getId();
Integer quantity = map.get(cartExperienceId);
String reservationDate = cartExperience.getReservationDate();
String timeSlot = cartExperience.getTimeSlot();
orderItemMainInfoAddRequest = new OrderItemMainInfoAddRequest(goodId, quantity, reservationDate, timeSlot);
orderItemMainInfoAddRequestList.add(orderItemMainInfoAddRequest);
}
// 填充到订单主要信息请求体
orderMainInfoAddRequest.setOrderItemMainInfoAddRequestList(orderItemMainInfoAddRequestList);
return orderMainInfoAddRequest;
}
/** /**
* 根据id获取订单(地址联系人商品)信息 * 根据id获取订单(地址联系人商品)信息
*/ */