更新了商品类别
This commit is contained in:
parent
110b49d2fc
commit
562ac2af62
|
@ -10,7 +10,7 @@ import com.cultural.heritage.common.ResultUtils;
|
||||||
import com.cultural.heritage.constant.UserConstant;
|
import com.cultural.heritage.constant.UserConstant;
|
||||||
import com.cultural.heritage.exception.BusinessException;
|
import com.cultural.heritage.exception.BusinessException;
|
||||||
import com.cultural.heritage.exception.ThrowUtils;
|
import com.cultural.heritage.exception.ThrowUtils;
|
||||||
import com.cultural.heritage.model.dto.CommonDelBatchRequest;
|
import com.cultural.heritage.model.dto.CommonBatchRequest;
|
||||||
import com.cultural.heritage.model.dto.CommonRequest;
|
import com.cultural.heritage.model.dto.CommonRequest;
|
||||||
import com.cultural.heritage.model.dto.category.CategoryAddRequest;
|
import com.cultural.heritage.model.dto.category.CategoryAddRequest;
|
||||||
import com.cultural.heritage.model.dto.category.CategoryUpdateRequest;
|
import com.cultural.heritage.model.dto.category.CategoryUpdateRequest;
|
||||||
|
@ -113,7 +113,7 @@ public class CategoryController {
|
||||||
@PostMapping("/delBatch")
|
@PostMapping("/delBatch")
|
||||||
@Operation(summary = "Web端管理员批量删除商品类别", description = "参数:类别删除请求体,权限:管理员(admin, boss),方法名:deleteCategory")
|
@Operation(summary = "Web端管理员批量删除商品类别", description = "参数:类别删除请求体,权限:管理员(admin, boss),方法名:deleteCategory")
|
||||||
@AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
@AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
||||||
public BaseResponse<Boolean> delBatchCategory(@RequestBody CommonDelBatchRequest commonDelBatchRequest) {
|
public BaseResponse<Boolean> delBatchCategory(@RequestBody CommonBatchRequest commonDelBatchRequest) {
|
||||||
if (commonDelBatchRequest == null || CollectionUtils.isEmpty(commonDelBatchRequest.getIdList())) {
|
if (commonDelBatchRequest == null || CollectionUtils.isEmpty(commonDelBatchRequest.getIdList())) {
|
||||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||||
}
|
}
|
||||||
|
@ -206,6 +206,7 @@ public class CategoryController {
|
||||||
String typeName = category.getTypeName();
|
String typeName = category.getTypeName();
|
||||||
QueryWrapper<Good> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<Good> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("type", typeName);
|
queryWrapper.eq("type", typeName);
|
||||||
|
queryWrapper.eq("isShelves", 1);
|
||||||
long count = goodService.count(queryWrapper);
|
long count = goodService.count(queryWrapper);
|
||||||
return count != 0;
|
return count != 0;
|
||||||
}).toList();
|
}).toList();
|
||||||
|
|
|
@ -14,7 +14,7 @@ import com.cultural.heritage.common.ResultUtils;
|
||||||
import com.cultural.heritage.constant.UserConstant;
|
import com.cultural.heritage.constant.UserConstant;
|
||||||
import com.cultural.heritage.exception.BusinessException;
|
import com.cultural.heritage.exception.BusinessException;
|
||||||
import com.cultural.heritage.exception.ThrowUtils;
|
import com.cultural.heritage.exception.ThrowUtils;
|
||||||
import com.cultural.heritage.model.dto.CommonDelBatchRequest;
|
import com.cultural.heritage.model.dto.CommonBatchRequest;
|
||||||
import com.cultural.heritage.model.dto.CommonRequest;
|
import com.cultural.heritage.model.dto.CommonRequest;
|
||||||
import com.cultural.heritage.model.dto.appointment.AppointmentDateAddRequest;
|
import com.cultural.heritage.model.dto.appointment.AppointmentDateAddRequest;
|
||||||
import com.cultural.heritage.model.dto.good.GoodAddRequest;
|
import com.cultural.heritage.model.dto.good.GoodAddRequest;
|
||||||
|
@ -26,6 +26,7 @@ import com.cultural.heritage.model.dto.good.service.ServiceGoodSingleUpdateReque
|
||||||
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.AppointmentDate;
|
||||||
|
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.model.entity.TimePeriod;
|
import com.cultural.heritage.model.entity.TimePeriod;
|
||||||
import com.cultural.heritage.model.vo.appointment.AppointmentDateTimePeriodVO;
|
import com.cultural.heritage.model.vo.appointment.AppointmentDateTimePeriodVO;
|
||||||
|
@ -35,6 +36,7 @@ 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.AppointmentDateService;
|
||||||
|
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.good.TimePeriodService;
|
import com.cultural.heritage.service.good.TimePeriodService;
|
||||||
import com.cultural.heritage.service.user.UserService;
|
import com.cultural.heritage.service.user.UserService;
|
||||||
|
@ -47,6 +49,7 @@ import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,6 +79,11 @@ public class GoodController {
|
||||||
private TimePeriodService timePeriodService;
|
private TimePeriodService timePeriodService;
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CartRecordService cartRecordService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Web端管理员添加常规类商品
|
* Web端管理员添加常规类商品
|
||||||
|
@ -271,12 +279,27 @@ public class GoodController {
|
||||||
if (goodUpdateRequest == null || goodUpdateRequest.getId() <= 0) {
|
if (goodUpdateRequest == null || goodUpdateRequest.getId() <= 0) {
|
||||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取原来的商品价格
|
||||||
|
Long sourceId = goodUpdateRequest.getId();
|
||||||
|
Good resourceGood = goodService.getById(sourceId);
|
||||||
|
BigDecimal resourcePrice = resourceGood.getPrice();
|
||||||
Good good = new Good();
|
Good good = new Good();
|
||||||
BeanUtils.copyProperties(goodUpdateRequest, good);
|
BeanUtils.copyProperties(goodUpdateRequest, good);
|
||||||
// 校验
|
// 校验
|
||||||
goodService.validGood(good, true);
|
goodService.validGood(good, true);
|
||||||
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<CartRecord> cartRecordList = goodService.updateCartGoodPrice(id, targetPrice);
|
||||||
|
boolean update = cartRecordService.updateBatchById(cartRecordList);
|
||||||
|
ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "购物车商品价格更新失败");
|
||||||
|
}
|
||||||
return ResultUtils.success(true);
|
return ResultUtils.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -323,7 +346,7 @@ public class GoodController {
|
||||||
@PostMapping("/delBatch")
|
@PostMapping("/delBatch")
|
||||||
@Operation(summary = "Web端管理员批量删除常规类商品", description = "参数:商品批量删除请求体,权限:管理员(admin, boss),方法名:delBatchGoods")
|
@Operation(summary = "Web端管理员批量删除常规类商品", description = "参数:商品批量删除请求体,权限:管理员(admin, boss),方法名:delBatchGoods")
|
||||||
@AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
@AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
||||||
public BaseResponse<Boolean> delBatchGoods(@RequestBody CommonDelBatchRequest commonDelBatchRequest) {
|
public BaseResponse<Boolean> delBatchGoods(@RequestBody CommonBatchRequest commonDelBatchRequest) {
|
||||||
List<Long> idList = commonDelBatchRequest.getIdList();
|
List<Long> idList = commonDelBatchRequest.getIdList();
|
||||||
boolean result = goodService.removeBatchByIds(idList);
|
boolean result = goodService.removeBatchByIds(idList);
|
||||||
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
||||||
|
@ -681,17 +704,6 @@ public class GoodController {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * (小程序端)在支付订单前找出不合理的商品项
|
|
||||||
// * @return 存在问题的购物车id列表
|
|
||||||
// */
|
|
||||||
// @PostMapping("/cart/pay/error")
|
|
||||||
// @Operation(summary = "(小程序端)在支付订单前找出不合理的商品项", description = "参数:无,权限:所有人,方法名:listInvalidCartIds")
|
|
||||||
// public BaseResponse<List<Long>> listInvalidCartIdsBeforePay(@RequestBody List<CartPayRequest> cartPayRequests, HttpServletRequest request) {
|
|
||||||
// User loginUser = userService.getLoginUser(request);
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,19 +12,21 @@ import com.cultural.heritage.constant.UserConstant;
|
||||||
import com.cultural.heritage.exception.BusinessException;
|
import com.cultural.heritage.exception.BusinessException;
|
||||||
import com.cultural.heritage.exception.ThrowUtils;
|
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.order.OrderAddRequest;
|
import com.cultural.heritage.model.dto.cart.CartOrderAddRequest;
|
||||||
import com.cultural.heritage.model.dto.order.OrderItemAddRequest;
|
import com.cultural.heritage.model.dto.cart.CartOrderItemAddRequest;
|
||||||
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.OrderItemMainInfoAddRequest;
|
||||||
import com.cultural.heritage.model.dto.order.capital.OrderMainInfoAddRequest;
|
import com.cultural.heritage.model.dto.order.capital.OrderMainInfoAddRequest;
|
||||||
|
import com.cultural.heritage.model.entity.CartRecord;
|
||||||
import com.cultural.heritage.model.entity.Order;
|
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.CartRecordService;
|
||||||
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.service.user.UserService;
|
import com.cultural.heritage.service.user.UserService;
|
||||||
import com.cultural.heritage.utils.OrderNumberUtils;
|
|
||||||
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;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
@ -37,7 +39,10 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/order")
|
@RequestMapping("/order")
|
||||||
|
@ -60,6 +65,69 @@ public class OrderController {
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CartRecordService cartRecordService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户通过购物车创建订单
|
||||||
|
*/
|
||||||
|
@PostMapping("/add/cart")
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Operation(summary = "用户通过购物车创建订单", description = "参数:")
|
||||||
|
public BaseResponse<Long> addCartOrder(@RequestBody CartOrderAddRequest cartOrderAddRequest, HttpServletRequest request) {
|
||||||
|
if (cartOrderAddRequest == null) {
|
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||||
|
}
|
||||||
|
// 校验用户当前是否处于登录态
|
||||||
|
User loginUser = userService.getLoginUser(request);
|
||||||
|
Long userId = loginUser.getId();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 封装成订单创建请求体
|
||||||
|
OrderMainInfoAddRequest orderMainInfoAddRequest = new OrderMainInfoAddRequest();
|
||||||
|
BeanUtils.copyProperties(cartOrderAddRequest, orderMainInfoAddRequest);
|
||||||
|
|
||||||
|
// 校验购物车数据是否准确
|
||||||
|
List<CartOrderItemAddRequest> cartOrderItemAddRequestList = cartOrderAddRequest.getCartOrderItemAddRequestList();
|
||||||
|
|
||||||
|
// 获取购物车id列表
|
||||||
|
List<Long> cartIds = cartOrderItemAddRequestList.stream().map(CartOrderItemAddRequest::getCartRecordId).toList();
|
||||||
|
// 根据id列表获取购物车商品信息
|
||||||
|
QueryWrapper<CartRecord> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.in("id", cartIds);
|
||||||
|
List<CartRecord> cartRecordList = cartRecordService.list(queryWrapper);
|
||||||
|
|
||||||
|
// 封装成一个map集合(键:购物车id, 值:购物车商品数量)
|
||||||
|
Map<Long, Integer> map = new HashMap<>();
|
||||||
|
for (CartOrderItemAddRequest cartOrderItemAddRequest : cartOrderItemAddRequestList) {
|
||||||
|
Long cartRecordId = cartOrderItemAddRequest.getCartRecordId();
|
||||||
|
Integer quantity = cartOrderItemAddRequest.getQuantity();
|
||||||
|
map.put(cartRecordId, quantity);
|
||||||
|
}
|
||||||
|
// 封装成订单明细主要信息请求体列表
|
||||||
|
List<OrderItemMainInfoAddRequest> orderItemMainInfoAddRequestList = new ArrayList<>();
|
||||||
|
OrderItemMainInfoAddRequest orderItemMainInfoAddRequest;
|
||||||
|
for (CartRecord cartRecord : cartRecordList) {
|
||||||
|
Long goodId = cartRecord.getGoodId();
|
||||||
|
Long id = cartRecord.getId();
|
||||||
|
Integer quantity = map.get(id);
|
||||||
|
orderItemMainInfoAddRequest = new OrderItemMainInfoAddRequest(goodId, quantity, null, null);
|
||||||
|
orderItemMainInfoAddRequestList.add(orderItemMainInfoAddRequest);
|
||||||
|
}
|
||||||
|
// 填充到订单主要信息请求体
|
||||||
|
orderMainInfoAddRequest.setOrderItemMainInfoAddRequestList(orderItemMainInfoAddRequestList);
|
||||||
|
|
||||||
|
Long orderId = orderService.createCommonOrder(orderMainInfoAddRequest, userId);
|
||||||
|
return ResultUtils.success(orderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户创建订单
|
* 用户创建订单
|
||||||
* @param orderMainInfoAddRequest 订单创建请求体
|
* @param orderMainInfoAddRequest 订单创建请求体
|
||||||
|
@ -67,43 +135,17 @@ public class OrderController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/add")
|
@PostMapping("/add")
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Operation(summary = "小程序端创建用户订单", description = "参数:订单创建请求体,排序字段 sortField: totalAmount id createTime,权限:所有人,方法名:addOrder")
|
@Operation(summary = "小程序端创建用户订单", description = "参数:订单创建请求体,权限:所有人,方法名:addOrder")
|
||||||
public BaseResponse<Long> addOrder(@RequestBody OrderMainInfoAddRequest orderMainInfoAddRequest, HttpServletRequest request) {
|
public BaseResponse<Long> addOrder(@RequestBody OrderMainInfoAddRequest orderMainInfoAddRequest, HttpServletRequest request) {
|
||||||
if (orderMainInfoAddRequest == null) {
|
if (orderMainInfoAddRequest == null) {
|
||||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||||
}
|
}
|
||||||
// 校验用户当前是否处于登录态
|
// 校验用户当前是否处于登录态
|
||||||
User loginUser = userService.getLoginUser(request);
|
User loginUser = userService.getLoginUser(request);
|
||||||
// 封装订单详细信息请求体
|
Long userId = loginUser.getId();
|
||||||
OrderAddRequest orderAddRequest = orderService.initOrderMainInfo(orderMainInfoAddRequest);
|
// 创建通用订单(常规类和服务类商品)
|
||||||
if (orderAddRequest == null) {
|
Long orderId = orderService.createCommonOrder(orderMainInfoAddRequest, userId);
|
||||||
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
return ResultUtils.success(orderId);
|
||||||
}
|
|
||||||
// 创建一个总订单
|
|
||||||
Order order = new Order();
|
|
||||||
BeanUtils.copyProperties(orderAddRequest, order);
|
|
||||||
order.setUserId(loginUser.getId());
|
|
||||||
// 生成订单编号
|
|
||||||
String orderNumber = OrderNumberUtils.generateOrderId();
|
|
||||||
order.setOrderNumber(orderNumber);
|
|
||||||
// 设置订单状态
|
|
||||||
order.setOrderStatus(OrderStatusConstant.PENDING_PAYMENT);
|
|
||||||
// 校验订单
|
|
||||||
orderService.validOrder(order);
|
|
||||||
boolean result = orderService.save(order);
|
|
||||||
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
|
||||||
// 创建订单明细
|
|
||||||
Long id = order.getId();
|
|
||||||
List<OrderItemAddRequest> orderItemList = orderAddRequest.getOrderItemList();
|
|
||||||
List<OrderItems> newOrderItemsList = orderItemList.stream().map(orderItem -> {
|
|
||||||
OrderItems orderItems = new OrderItems();
|
|
||||||
BeanUtils.copyProperties(orderItem, orderItems);
|
|
||||||
orderItems.setOrderId(id);
|
|
||||||
return orderItems;
|
|
||||||
}).toList();
|
|
||||||
boolean save = orderItemService.saveBatch(newOrderItemsList);
|
|
||||||
ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR);
|
|
||||||
return ResultUtils.success(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -249,5 +291,4 @@ public class OrderController {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "商品批量删除请求体", requiredProperties = {"idList"})
|
@Schema(description = "商品批量删除请求体", requiredProperties = {"idList"})
|
||||||
public class CommonDelBatchRequest implements Serializable {
|
public class CommonBatchRequest implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
@Schema(description = "批量删除的商品id列表(id > 0)", example = "[8, 9, 17]")
|
@Schema(description = "批量删除的商品id列表(id > 0)", example = "[8, 9, 17]")
|
|
@ -0,0 +1,69 @@
|
||||||
|
package com.cultural.heritage.model.dto.cart;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Schema(description = "购物车订单创建请求体", requiredProperties = {"orderType", "userName", "addressId",
|
||||||
|
"couponId", "totalAmount", "note", "cartPayRequestList"})
|
||||||
|
public class CartOrderAddRequest implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单类别
|
||||||
|
*/
|
||||||
|
@Schema(description = "订单类别", example = "product")
|
||||||
|
private String orderType;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户昵称
|
||||||
|
*/
|
||||||
|
@Schema(description = "用户昵称", example = "张三")
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地址id
|
||||||
|
*/
|
||||||
|
@Schema(description = "地址id(id > 0)", example = "12")
|
||||||
|
private Long addressId;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 优惠券id
|
||||||
|
*/
|
||||||
|
@Schema(description = "优惠券id(id > 0)", example = "2")
|
||||||
|
private Long couponId;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单总金额
|
||||||
|
*/
|
||||||
|
@Schema(description = "订单总金额", example = "500")
|
||||||
|
private BigDecimal totalAmount;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单备注
|
||||||
|
*/
|
||||||
|
@Schema(description = "订单备注", example = "希望能完整体验非遗文化,保持产品原貌,妥善包装")
|
||||||
|
private String note;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 购物车订单明细创建请求体
|
||||||
|
*/
|
||||||
|
@Schema(description = "购物车订单明细创建请求体")
|
||||||
|
private List<CartOrderItemAddRequest> cartOrderItemAddRequestList;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
}
|
|
@ -4,15 +4,19 @@ package com.cultural.heritage.model.dto.cart;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "购物车商品项支付请求体", requiredProperties = {"id", "quantity"})
|
@Schema(description = "购物车订单明细创建请求体", requiredProperties = {"cartRecordId", "quantity"})
|
||||||
public class CartPayRequest {
|
public class CartOrderItemAddRequest implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 购物车id
|
* 购物车id
|
||||||
*/
|
*/
|
||||||
@Schema(description = "购物车id(id > 0)", example = "20")
|
@Schema(description = "购物车id(id > 0)", example = "20")
|
||||||
private Long id;
|
private Long cartRecordId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数量
|
* 数量
|
||||||
|
@ -21,5 +25,6 @@ public class CartPayRequest {
|
||||||
private Integer quantity;
|
private Integer quantity;
|
||||||
|
|
||||||
|
|
||||||
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
}
|
}
|
|
@ -12,7 +12,7 @@ import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "订单添加请求体", requiredProperties = {"userId", "orderNumber", "addressSnapshot", "contactsSnapshot",
|
@Schema(description = "订单添加请求体", requiredProperties = {"userId", "addressSnapshot", "contactsSnapshot",
|
||||||
"couponSnapshot", "totalAmount", "orderStatus", "orderItemList"})
|
"couponSnapshot", "totalAmount", "orderStatus", "orderItemList"})
|
||||||
public class OrderAddRequest implements Serializable {
|
public class OrderAddRequest implements Serializable {
|
||||||
|
|
||||||
|
@ -30,12 +30,6 @@ public class OrderAddRequest implements Serializable {
|
||||||
@Schema(description = "用户昵称", example = "张三")
|
@Schema(description = "用户昵称", example = "张三")
|
||||||
private String userName;
|
private String userName;
|
||||||
|
|
||||||
/**
|
|
||||||
* 订单编号
|
|
||||||
*/
|
|
||||||
@Schema(description = "订单编号", example = "20241105342838428324834")
|
|
||||||
private String orderNumber;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 地址信息快照
|
* 地址信息快照
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
package com.cultural.heritage.model.dto.order.capital;
|
package com.cultural.heritage.model.dto.order.capital;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
@Schema(description = "订单明细主要信息请求体", requiredProperties = {"goodId", "quantity"})
|
@Schema(description = "订单明细主要信息请求体", requiredProperties = {"goodId", "quantity"})
|
||||||
public class OrderItemMainInfoAddRequest implements Serializable {
|
public class OrderItemMainInfoAddRequest implements Serializable {
|
||||||
|
|
||||||
|
@ -41,4 +43,5 @@ public class OrderItemMainInfoAddRequest implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,6 +95,10 @@ public class Order implements Serializable {
|
||||||
*/
|
*/
|
||||||
private String note;
|
private String note;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物流单号
|
||||||
|
*/
|
||||||
|
private String trackingNumber;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 创建时间
|
||||||
|
|
|
@ -77,6 +77,11 @@ public class OrderVO implements Serializable {
|
||||||
*/
|
*/
|
||||||
private String note;
|
private String note;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物流单号
|
||||||
|
*/
|
||||||
|
private String trackingNumber;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单明细信息
|
* 订单明细信息
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.cultural.heritage.service.good;
|
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.cart.CartOrderItemAddRequest;
|
||||||
import com.cultural.heritage.model.dto.cart.CartRecordAddRequest;
|
import com.cultural.heritage.model.dto.cart.CartRecordAddRequest;
|
||||||
import com.cultural.heritage.model.entity.CartRecord;
|
import com.cultural.heritage.model.entity.CartRecord;
|
||||||
import com.cultural.heritage.model.vo.cart.CartRecordVO;
|
import com.cultural.heritage.model.vo.cart.CartRecordVO;
|
||||||
|
@ -28,10 +29,11 @@ public interface CartRecordService extends IService<CartRecord> {
|
||||||
void validCart(CartRecord cartRecord, boolean update);
|
void validCart(CartRecord cartRecord, boolean update);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验购物车商品项的准确性
|
* 根据购物车订单明细列表校验购物车商品项的准确性
|
||||||
*/
|
*/
|
||||||
boolean validIsConsistent(CartRecord cartRecord);
|
boolean validIsConsistent(List<CartOrderItemAddRequest> cartOrderItemAddRequestList);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,10 @@ 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.CartRecord;
|
||||||
import com.cultural.heritage.model.entity.Good;
|
import com.cultural.heritage.model.entity.Good;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface GoodService extends IService<Good> {
|
public interface GoodService extends IService<Good> {
|
||||||
|
@ -26,4 +28,9 @@ public interface GoodService extends IService<Good> {
|
||||||
*/
|
*/
|
||||||
void validGood(Good good, boolean update);
|
void validGood(Good good, boolean update);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新购物车中的小计
|
||||||
|
*/
|
||||||
|
List<CartRecord> updateCartGoodPrice(Long goodId, BigDecimal targetPrice);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,12 +7,13 @@ import com.cultural.heritage.exception.BusinessException;
|
||||||
import com.cultural.heritage.exception.ThrowUtils;
|
import com.cultural.heritage.exception.ThrowUtils;
|
||||||
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.cart.CartOrderItemAddRequest;
|
||||||
import com.cultural.heritage.model.dto.cart.CartRecordAddRequest;
|
import com.cultural.heritage.model.dto.cart.CartRecordAddRequest;
|
||||||
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.model.entity.User;
|
import com.cultural.heritage.model.entity.User;
|
||||||
import com.cultural.heritage.model.vo.cart.CartRecordVO;
|
|
||||||
import com.cultural.heritage.model.vo.cart.CartGoodVO;
|
import com.cultural.heritage.model.vo.cart.CartGoodVO;
|
||||||
|
import com.cultural.heritage.model.vo.cart.CartRecordVO;
|
||||||
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.user.UserService;
|
import com.cultural.heritage.service.user.UserService;
|
||||||
|
@ -24,7 +25,9 @@ import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@ -57,12 +60,22 @@ public class CartRecordServiceImpl extends ServiceImpl<CartRecordMapper, CartRec
|
||||||
queryWrapper.eq("goodId", goodId);
|
queryWrapper.eq("goodId", goodId);
|
||||||
CartRecord cartRecord = this.baseMapper.selectOne(queryWrapper);
|
CartRecord cartRecord = this.baseMapper.selectOne(queryWrapper);
|
||||||
if (cartRecord != null) {
|
if (cartRecord != null) {
|
||||||
|
// 判断数量是否超出库存
|
||||||
|
int currentQuantity = cartRecord.getQuantity() + cartRecordAddRequest.getQuantity();
|
||||||
|
if (currentQuantity > good.getInventory()) {
|
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR, "商品库存不足, 无法添加");
|
||||||
|
}
|
||||||
// 如果购物车中已存在该商品, 就叠加数量
|
// 如果购物车中已存在该商品, 就叠加数量
|
||||||
cartRecord.setQuantity(cartRecord.getQuantity() + cartRecordAddRequest.getQuantity());
|
cartRecord.setQuantity(currentQuantity);
|
||||||
cartRecord.setSubtotal(good.getPrice().multiply(BigDecimal.valueOf(cartRecord.getQuantity())));
|
cartRecord.setSubtotal(good.getPrice().multiply(BigDecimal.valueOf(currentQuantity)));
|
||||||
boolean result = this.updateById(cartRecord);
|
boolean result = this.updateById(cartRecord);
|
||||||
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR, "更新购物车商品数量失败");
|
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR, "更新购物车商品数量失败");
|
||||||
} else {
|
} else {
|
||||||
|
// 判断数量是否超出库存
|
||||||
|
Integer currentQuantity = cartRecordAddRequest.getQuantity();
|
||||||
|
if (currentQuantity > good.getInventory()) {
|
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR, "商品库存不足, 无法添加");
|
||||||
|
}
|
||||||
// 如果购物车不存在该商品,就向购物车中添加一项
|
// 如果购物车不存在该商品,就向购物车中添加一项
|
||||||
CartRecord cartGood = new CartRecord();
|
CartRecord cartGood = new CartRecord();
|
||||||
BeanUtils.copyProperties(cartRecordAddRequest, cartGood);
|
BeanUtils.copyProperties(cartRecordAddRequest, cartGood);
|
||||||
|
@ -85,6 +98,18 @@ public class CartRecordServiceImpl extends ServiceImpl<CartRecordMapper, CartRec
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<CartRecordVO> transformToCartRecordVOList(List<CartRecord> list) {
|
public List<CartRecordVO> transformToCartRecordVOList(List<CartRecord> list) {
|
||||||
|
|
||||||
|
// 获取所有商品id
|
||||||
|
List<Long> goodIds = list.stream().map(CartRecord::getGoodId).toList();
|
||||||
|
QueryWrapper<Good> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.in("id", goodIds);
|
||||||
|
List<Good> goodList = goodService.list(queryWrapper);
|
||||||
|
// 封装map集合(键:商品id, 值:商品详情信息)
|
||||||
|
Map<Long, Good> map = new HashMap<>();
|
||||||
|
for (Good good : goodList) {
|
||||||
|
map.put(good.getId(), good);
|
||||||
|
}
|
||||||
|
|
||||||
return list.stream().map(cartRecord -> {
|
return list.stream().map(cartRecord -> {
|
||||||
// 封装购物车记录VO
|
// 封装购物车记录VO
|
||||||
CartRecordVO cartRecordVO = new CartRecordVO();
|
CartRecordVO cartRecordVO = new CartRecordVO();
|
||||||
|
@ -92,9 +117,7 @@ public class CartRecordServiceImpl extends ServiceImpl<CartRecordMapper, CartRec
|
||||||
|
|
||||||
// 封装商品类GoodVO
|
// 封装商品类GoodVO
|
||||||
Long goodId = cartRecord.getGoodId();
|
Long goodId = cartRecord.getGoodId();
|
||||||
QueryWrapper<Good> queryWrapper = new QueryWrapper<>();
|
Good good = map.get(goodId);
|
||||||
queryWrapper.eq("id", goodId);
|
|
||||||
Good good = goodMapper.selectOne(queryWrapper);
|
|
||||||
CartGoodVO goodVO = new CartGoodVO();
|
CartGoodVO goodVO = new CartGoodVO();
|
||||||
BeanUtils.copyProperties(good, goodVO);
|
BeanUtils.copyProperties(good, goodVO);
|
||||||
cartRecordVO.setCartGoodVO(goodVO);
|
cartRecordVO.setCartGoodVO(goodVO);
|
||||||
|
@ -134,11 +157,8 @@ public class CartRecordServiceImpl extends ServiceImpl<CartRecordMapper, CartRec
|
||||||
/**
|
/**
|
||||||
* 校验购物车商品项的准确性
|
* 校验购物车商品项的准确性
|
||||||
*/
|
*/
|
||||||
@Override
|
private boolean validIsConsistent(CartRecord cartRecord, Good good) {
|
||||||
public boolean validIsConsistent(CartRecord cartRecord) {
|
|
||||||
// 校验购物车中的商品是否存在
|
// 校验购物车中的商品是否存在
|
||||||
Long goodId = cartRecord.getGoodId();
|
|
||||||
Good good = goodService.getById(goodId);
|
|
||||||
if (good == null || good.getIsShelves() == 0) {
|
if (good == null || good.getIsShelves() == 0) {
|
||||||
log.info("商品不存在或者已下架, 购物车id为" + cartRecord.getId());
|
log.info("商品不存在或者已下架, 购物车id为" + cartRecord.getId());
|
||||||
return false;
|
return false;
|
||||||
|
@ -154,13 +174,35 @@ public class CartRecordServiceImpl extends ServiceImpl<CartRecordMapper, CartRec
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据购物车订单明细列表校验购物车商品项的准确性
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean validIsConsistent(List<CartOrderItemAddRequest> cartOrderItemAddRequestList) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 找出存在问题的购物车id列表
|
* 找出存在问题的购物车id列表
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<Long> getInvalidCartIds(List<CartRecord> cartRecords) {
|
public List<Long> getInvalidCartIds(List<CartRecord> cartRecords) {
|
||||||
List<CartRecord> cartRecordList = cartRecords.stream().filter(cartRecord -> !validIsConsistent(cartRecord)).toList();
|
// 获取购物车的商品id列表
|
||||||
|
List<Long> goodIds = cartRecords.stream().map(CartRecord::getGoodId).toList();
|
||||||
|
QueryWrapper<Good> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.in("id", goodIds);
|
||||||
|
List<Good> goodList = goodService.list(queryWrapper);
|
||||||
|
// 封装map集合(键:商品id, 值:商品详情信息)
|
||||||
|
Map<Long, Good> map = new HashMap<>();
|
||||||
|
for (Good good : goodList) {
|
||||||
|
map.put(good.getId(), good);
|
||||||
|
}
|
||||||
|
List<CartRecord> cartRecordList = cartRecords.stream().filter(cartRecord -> {
|
||||||
|
Long goodId = cartRecord.getGoodId();
|
||||||
|
Good good = map.get(goodId);
|
||||||
|
return !validIsConsistent(cartRecord, good);
|
||||||
|
}).toList();
|
||||||
return cartRecordList.stream().map(CartRecord::getId).toList();
|
return cartRecordList.stream().map(CartRecord::getId).toList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,11 +5,14 @@ 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.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.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;
|
||||||
import com.cultural.heritage.utils.SqlUtils;
|
import com.cultural.heritage.utils.SqlUtils;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -22,6 +25,11 @@ import java.util.List;
|
||||||
@Service
|
@Service
|
||||||
public class GoodServiceImpl extends ServiceImpl<GoodMapper, Good> implements GoodService {
|
public class GoodServiceImpl extends ServiceImpl<GoodMapper, Good> implements GoodService {
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CartRecordMapper cartRecordMapper;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品查询条件
|
* 商品查询条件
|
||||||
*/
|
*/
|
||||||
|
@ -107,5 +115,21 @@ public class GoodServiceImpl extends ServiceImpl<GoodMapper, Good> implements Go
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新购物车中的小计
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<CartRecord> updateCartGoodPrice(Long goodId, BigDecimal targetPrice) {
|
||||||
|
QueryWrapper<CartRecord> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("goodId", goodId);
|
||||||
|
List<CartRecord> cartRecordList = cartRecordMapper.selectList(queryWrapper);
|
||||||
|
// 更新购物车中的小计
|
||||||
|
for (CartRecord cartRecord : cartRecordList) {
|
||||||
|
Integer quantity = cartRecord.getQuantity();
|
||||||
|
cartRecord.setSubtotal(targetPrice.multiply(BigDecimal.valueOf(quantity)));
|
||||||
|
}
|
||||||
|
return cartRecordList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,4 +26,11 @@ public interface OrderService extends IService<Order> {
|
||||||
* 校验订单
|
* 校验订单
|
||||||
*/
|
*/
|
||||||
void validOrder(Order order);
|
void validOrder(Order order);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建通用订单(常规类和服务类商品)
|
||||||
|
*/
|
||||||
|
Long createCommonOrder(OrderMainInfoAddRequest orderMainInfoAddRequest, Long userId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.constant.OrderStatusConstant;
|
||||||
import com.cultural.heritage.exception.BusinessException;
|
import com.cultural.heritage.exception.BusinessException;
|
||||||
import com.cultural.heritage.exception.ThrowUtils;
|
import com.cultural.heritage.exception.ThrowUtils;
|
||||||
import com.cultural.heritage.mapper.*;
|
import com.cultural.heritage.mapper.*;
|
||||||
|
@ -18,8 +19,11 @@ import com.cultural.heritage.model.dto.snapshot.ContactsSnapshot;
|
||||||
import com.cultural.heritage.model.dto.snapshot.CouponSnapshot;
|
import com.cultural.heritage.model.dto.snapshot.CouponSnapshot;
|
||||||
import com.cultural.heritage.model.dto.snapshot.GoodSnapshot;
|
import com.cultural.heritage.model.dto.snapshot.GoodSnapshot;
|
||||||
import com.cultural.heritage.model.entity.Order;
|
import com.cultural.heritage.model.entity.Order;
|
||||||
|
import com.cultural.heritage.model.entity.OrderItems;
|
||||||
import com.cultural.heritage.model.enums.GoodTypeEnum;
|
import com.cultural.heritage.model.enums.GoodTypeEnum;
|
||||||
|
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.OrderNumberUtils;
|
||||||
import com.cultural.heritage.utils.SqlUtils;
|
import com.cultural.heritage.utils.SqlUtils;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
@ -52,6 +56,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private OrderItemService orderItemService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取查询条件
|
* 获取查询条件
|
||||||
*/
|
*/
|
||||||
|
@ -178,6 +186,47 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建通用订单(常规类和服务类商品)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Long createCommonOrder(OrderMainInfoAddRequest orderMainInfoAddRequest, Long userId) {
|
||||||
|
// 封装订单详细信息请求体
|
||||||
|
OrderAddRequest orderAddRequest = this.initOrderMainInfo(orderMainInfoAddRequest);
|
||||||
|
if (orderAddRequest == null) {
|
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR);
|
||||||
|
}
|
||||||
|
// 创建一个总订单
|
||||||
|
Order order = new Order();
|
||||||
|
BeanUtils.copyProperties(orderAddRequest, order);
|
||||||
|
order.setUserId(userId);
|
||||||
|
// 生成订单编号
|
||||||
|
String orderNumber = OrderNumberUtils.generateOrderId();
|
||||||
|
order.setOrderNumber(orderNumber);
|
||||||
|
// 设置物流单号
|
||||||
|
order.setTrackingNumber("无");
|
||||||
|
// 设置订单状态
|
||||||
|
order.setOrderStatus(OrderStatusConstant.PENDING_PAYMENT);
|
||||||
|
// 校验订单
|
||||||
|
this.validOrder(order);
|
||||||
|
boolean result = this.save(order);
|
||||||
|
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
||||||
|
// 创建订单明细
|
||||||
|
Long id = order.getId();
|
||||||
|
List<OrderItemAddRequest> orderItemList = orderAddRequest.getOrderItemList();
|
||||||
|
List<OrderItems> newOrderItemsList = orderItemList.stream().map(orderItem -> {
|
||||||
|
OrderItems orderItems = new OrderItems();
|
||||||
|
BeanUtils.copyProperties(orderItem, orderItems);
|
||||||
|
orderItems.setOrderId(id);
|
||||||
|
return orderItems;
|
||||||
|
}).toList();
|
||||||
|
boolean save = orderItemService.saveBatch(newOrderItemsList);
|
||||||
|
ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据id获取订单(地址,联系人,优惠券,商品)信息
|
* 根据id获取订单(地址,联系人,优惠券,商品)信息
|
||||||
*/
|
*/
|
||||||
|
@ -185,20 +234,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||||
// 创建查询条件
|
// 创建查询条件
|
||||||
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("id", id);
|
queryWrapper.eq("id", id);
|
||||||
|
|
||||||
// 查询实体对象
|
// 查询实体对象
|
||||||
T entity = mapper.selectOne(queryWrapper);
|
T entity = mapper.selectOne(queryWrapper);
|
||||||
|
|
||||||
// 判断实体对象是否存在,不存在则抛出异常
|
// 判断实体对象是否存在,不存在则抛出异常
|
||||||
ThrowUtils.throwIf(entity == null, ErrorCode.NOT_FOUND_ERROR);
|
ThrowUtils.throwIf(entity == null, ErrorCode.NOT_FOUND_ERROR);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 创建快照对象实例
|
// 创建快照对象实例
|
||||||
S snapshot = snapshotClass.getDeclaredConstructor().newInstance();
|
S snapshot = snapshotClass.getDeclaredConstructor().newInstance();
|
||||||
|
|
||||||
// 复制属性到快照对象
|
// 复制属性到快照对象
|
||||||
BeanUtils.copyProperties(entity, snapshot);
|
BeanUtils.copyProperties(entity, snapshot);
|
||||||
|
|
||||||
return snapshot;
|
return snapshot;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new BusinessException(ErrorCode.SYSTEM_ERROR);
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user