订单信息,删除购物车商品

main
王宇航 2024-09-03 20:47:38 +08:00
parent c20b304c67
commit 27d2203d2d
15 changed files with 425 additions and 5 deletions

View File

@ -0,0 +1,34 @@
package com.wyh.common.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@ApiModel("订单商品实体")
public class GoodsOrder implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value="id", type= IdType.AUTO)
@ApiModelProperty(value = "")
private Integer id;
@ApiModelProperty(value = "商品id")
private Integer goodsId;
@ApiModelProperty(value = "订单id")
private String orderSn;
@ApiModelProperty(value = "商品数量")
private Integer num;
@ApiModelProperty(value = "商品金额")
private BigDecimal price;
}

View File

@ -49,4 +49,8 @@ public class Order implements Serializable {
@ApiModelProperty(value = "外部订单号")
private String outSn;
@ApiModelProperty(value = "来源:1:商品2:购物车")
private Integer source;
}

View File

@ -0,0 +1,13 @@
package com.wyh.common.mapper;
import com.wyh.common.core.basics.IBaseMapper;
import com.wyh.common.entity.GoodsOrder;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper
* @author LikeAdmin
*/
@Mapper
public interface GoodsOrderMapper extends IBaseMapper<GoodsOrder> {
}

View File

@ -17,6 +17,8 @@ public class OrderSearchValidate implements Serializable {
@ApiModelProperty(value = "地址信息id")
private Integer adId;
@ApiModelProperty(value = "订单id")
private Integer id;
@ApiModelProperty(value = "订单状态1:待审核2:待收货3:租用中4:已返还")
private Integer status;

View File

@ -0,0 +1,35 @@
package com.wyh.common.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel(value = "订单详情响应对象")
public class OrderDetailResponseVo {
@ApiModelProperty(value = "订单id")
private Integer id;
@ApiModelProperty(value = "订单编号")
private String sn;
@ApiModelProperty(value = "收货地址")
private String address;
@ApiModelProperty(value = "创建时间")
private String createTime;
@ApiModelProperty(value = "用户id")
private Integer userId;
@ApiModelProperty(value = "用户名")
private String nickName;
@ApiModelProperty(value = "手机号")
private String mobile;
@ApiModelProperty(value = "订单状态 0-待付款 1-待发货 2-待收货 3-已完成 4-已取消")
private Integer status;
@ApiModelProperty(value = "订单总金额")
private BigDecimal totalPrice;
@ApiModelProperty(value = "订单商品列表")
private List<OrderItemResponseVo> orderItem;
}

View File

@ -0,0 +1,24 @@
package com.wyh.common.vo;
import com.wyh.common.entity.goods.Goods;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel(value = "订单-商品列表对象")
public class OrderItemResponseVo {
@ApiModelProperty(value = "商品信息")
private Goods goods;
@ApiModelProperty(value = "商品数量")
private Integer num;
@ApiModelProperty(value = "商品价格")
private BigDecimal price;
}

View File

@ -0,0 +1,29 @@
package com.wyh.common.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel(value = "订单响应对象")
public class OrderResponseVo {
@ApiModelProperty(value = "订单id")
private Integer id;
@ApiModelProperty(value = "订单编号")
private String sn;
@ApiModelProperty(value = "创建时间")
private String createTime;
@ApiModelProperty(value = "用户id")
private Integer userId;
@ApiModelProperty(value = "订单状态 0-待付款 1-待发货 2-待收货 3-已完成 4-已取消")
private Integer status;
@ApiModelProperty(value = "订单总金额")
private BigDecimal totalPrice;
@ApiModelProperty(value = "订单商品列表")
private List<OrderItemResponseVo> orderItem;
}

View File

@ -45,4 +45,13 @@ public class CartController {
CartVo cartVo = cartService.updateCheck(userId, type);
return AjaxResult.success(cartVo);
}
@PostMapping("remove")
@ApiOperation(value = "删除购物车中商品")
public AjaxResult<Object> remove(@RequestParam(name = "ids") @ApiParam(value = "商品id数组") List<Integer> ids) {
cartService.remove(ids);
return AjaxResult.success();
}
}

View File

@ -1,11 +1,16 @@
package com.wyh.front.controller;
import com.wyh.common.core.AjaxResult;
import com.wyh.common.validator.OrderSearchValidate;
import com.wyh.front.service.OrderService;
import com.wyh.front.validate.OrderCreateDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("front/order")
@ -13,13 +18,29 @@ import org.springframework.web.bind.annotation.RestController;
public class OrderController {
@Resource
private OrderService orderService;
@PostMapping("add")
@ApiOperation("添加订单")
public void add(){
public AjaxResult<Object> add(@Validated @RequestBody OrderCreateDto orderCreateDto){
orderService.add(orderCreateDto);
return AjaxResult.success();
}
@GetMapping("get")
@ApiOperation("获取订单")
public AjaxResult<Object> get(@Validated OrderSearchValidate validate){
return AjaxResult.success(orderService.get(validate));
}
@GetMapping("getDetail")
@ApiOperation("订单详情")
public AjaxResult<Object> getDetail(@Validated OrderSearchValidate validate){
return AjaxResult.success(orderService.getDetail(validate));
}
}

View File

@ -11,4 +11,8 @@ public interface CartService {
CartVo getCart();
CartVo updateCheck(Integer userId,Integer type);
void remove(Integer[] ids);
void remove(List<Integer> ids);
}

View File

@ -0,0 +1,16 @@
package com.wyh.front.service;
import com.wyh.common.validator.OrderSearchValidate;
import com.wyh.common.vo.OrderDetailResponseVo;
import com.wyh.common.vo.OrderResponseVo;
import com.wyh.front.validate.OrderCreateDto;
import java.util.List;
public interface OrderService {
void add(OrderCreateDto orderCreateDto);
List<OrderResponseVo> get(OrderSearchValidate validate);
OrderDetailResponseVo getDetail(OrderSearchValidate validate);
}

View File

@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@ -117,6 +118,16 @@ public class CartServiceImpl implements CartService {
return cart;
}
@Override
public void remove(Integer[] ids) {
userGoodsMapper.deleteBatchIds(Arrays.asList(ids));
}
@Override
public void remove(List<Integer> ids) {
userGoodsMapper.deleteBatchIds(ids);
}
private void updateCheckDown(Integer userId) {
userGoodsMapper.update(null, Wrappers.<UserGoods>lambdaUpdate()
.set(UserGoods::getIsCheck, 0)

View File

@ -0,0 +1,175 @@
package com.wyh.front.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.wyh.common.entity.GoodsOrder;
import com.wyh.common.entity.Order;
import com.wyh.common.entity.goods.Goods;
import com.wyh.common.entity.user.User;
import com.wyh.common.entity.user.UserAddress;
import com.wyh.common.mapper.GoodsOrderMapper;
import com.wyh.common.mapper.OrderMapper;
import com.wyh.common.mapper.goods.GoodsMapper;
import com.wyh.common.mapper.user.UserAddressMapper;
import com.wyh.common.mapper.user.UserMapper;
import com.wyh.common.util.TimeUtils;
import com.wyh.common.util.ToolUtils;
import com.wyh.common.validator.OrderSearchValidate;
import com.wyh.common.vo.OrderDetailResponseVo;
import com.wyh.common.vo.OrderItemResponseVo;
import com.wyh.common.vo.OrderResponseVo;
import com.wyh.front.ZJFrontThreadLocal;
import com.wyh.front.service.OrderService;
import com.wyh.front.validate.OrderCreateDto;
import com.wyh.front.validate.OrderGoodsDto;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class OrderServiceImpl implements OrderService {
@Resource
private OrderMapper orderMapper;
@Resource
private GoodsMapper goodsMapper;
@Resource
UserAddressMapper addressMapper;
@Resource
private UserMapper userMapper;
@Resource
private GoodsOrderMapper goodsOrderMapper;
@Override
public void add(OrderCreateDto orderCreateDto) {
Integer userId = ZJFrontThreadLocal.getUserId();
Integer source = orderCreateDto.getSource();
String sn = "order" + ToolUtils.randomString(16);
BigDecimal totalPrice = new BigDecimal(0);
if (CollectionUtils.isEmpty(orderCreateDto.getGoodsDtos())) {
throw new RuntimeException("请选择商品");
}
List<OrderGoodsDto> goodsList = orderCreateDto.getGoodsDtos();
List<Goods> goods = goodsMapper.selectList(Wrappers.<Goods>lambdaQuery().in(Goods::getId, goodsList.stream().map(OrderGoodsDto::getGoodsId).collect(Collectors.toList())));
Map<Integer, Integer> quantityMap = goodsList.stream()
.collect(Collectors.toMap(OrderGoodsDto::getGoodsId, OrderGoodsDto::getNum));
for (Goods good : goods) {
Integer quantity = quantityMap.getOrDefault(good.getId(), 0);
BigDecimal orderPrice = good.getPrice().multiply(new BigDecimal(quantity));
totalPrice = totalPrice.add(orderPrice);
GoodsOrder goodsOrder = new GoodsOrder();
goodsOrder.setOrderSn(sn);
goodsOrder.setGoodsId(good.getId());
goodsOrder.setNum(quantity);
goodsOrder.setPrice(orderPrice);
goodsOrderMapper.insert(goodsOrder);
}
User user = userMapper.selectById(userId);
Assert.isTrue(user != null, "用户不存在");
Assert.isTrue(user.getMoney().compareTo(totalPrice) >= 0, "余额不足");
Order order = new Order();
order.setSn(sn);
order.setUserId(userId);
order.setStatus(1);
order.setCreateTime(System.currentTimeMillis() / 1000);
order.setUpdateTime(System.currentTimeMillis() / 1000);
order.setSource(source);
order.setTotalPrice(totalPrice);
order.setAdId(orderCreateDto.getAdId());
orderMapper.insert(order);
}
@Override
public List<OrderResponseVo> get(OrderSearchValidate validate) {
LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
if (validate.getStatus() != null && validate.getStatus() != 0) {
orderLambdaQueryWrapper.eq(Order::getStatus, validate.getStatus());
}
Integer userId = ZJFrontThreadLocal.getUserId();
orderLambdaQueryWrapper.eq(Order::getUserId, userId);
List<Order> orders = orderMapper.selectList(orderLambdaQueryWrapper);
List<OrderResponseVo> orderResponseVos = new ArrayList<>();
if (CollectionUtils.isEmpty(orders)) {
return orderResponseVos;
}
List<String> orderSns = orders.stream().map(Order::getSn).collect(Collectors.toList());
List<GoodsOrder> goodsOrders = goodsOrderMapper.selectList(Wrappers.<GoodsOrder>lambdaQuery().in(GoodsOrder::getOrderSn, orderSns));
for (Order order : orders) {
OrderResponseVo orderResponseVo = new OrderResponseVo();
BeanUtils.copyProperties(order, orderResponseVo);
orderResponseVo.setCreateTime(TimeUtils.timestampToDate(order.getCreateTime()));
List<OrderItemResponseVo> orderItemResponseVos = new ArrayList<>();
for (GoodsOrder goodsOrder : goodsOrders) {
if (goodsOrder.getOrderSn().equals(order.getSn())) {
OrderItemResponseVo orderItemResponseVo = new OrderItemResponseVo();
Goods goods = goodsMapper.selectById(goodsOrder.getGoodsId());
orderItemResponseVo.setGoods(goods);
orderItemResponseVo.setNum(goodsOrder.getNum());
orderItemResponseVo.setPrice(goodsOrder.getPrice());
orderItemResponseVos.add(orderItemResponseVo);
System.out.println(goods);
orderResponseVo.setOrderItem(orderItemResponseVos);
}
}
orderResponseVos.add(orderResponseVo) ;
}
return orderResponseVos;
}
@Override
public OrderDetailResponseVo getDetail(OrderSearchValidate validate) {
Integer userId = ZJFrontThreadLocal.getUserId();
String sn = validate.getSn();
Order order = orderMapper.selectOne(Wrappers.<Order>lambdaQuery().eq(Order::getSn, sn));
Assert.notNull(order, "订单不存在");
UserAddress userAddresses = addressMapper.selectOne(Wrappers.<UserAddress>lambdaQuery().eq(UserAddress::getUserId, userId).eq(UserAddress::getId, order.getAdId()));
User user = userMapper.selectById(order.getUserId());
Assert.notNull(user, "用户不存在");
OrderDetailResponseVo orderDetailResponseVo = new OrderDetailResponseVo();
orderDetailResponseVo.setId(order.getId());
orderDetailResponseVo.setSn(order.getSn());
orderDetailResponseVo.setTotalPrice(order.getTotalPrice());
orderDetailResponseVo.setStatus(order.getStatus());
orderDetailResponseVo.setUserId(order.getUserId());
orderDetailResponseVo.setCreateTime(TimeUtils.timestampToDate(order.getCreateTime()));
orderDetailResponseVo.setAddress(userAddresses.getAddress());
orderDetailResponseVo.setMobile(user.getMobile());
orderDetailResponseVo.setNickName(user.getNickname());
List<GoodsOrder> goodsOrders = goodsOrderMapper.selectList(Wrappers.<GoodsOrder>lambdaQuery().eq(GoodsOrder::getOrderSn, order.getSn()));
List<OrderItemResponseVo> orderItemResponseVos = new ArrayList<>();
for (GoodsOrder goodsOrder : goodsOrders) {
OrderItemResponseVo orderItemResponseVo = new OrderItemResponseVo();
Goods goods = goodsMapper.selectById(goodsOrder.getGoodsId());
orderItemResponseVo.setGoods(goods);
orderItemResponseVo.setNum(goodsOrder.getNum());
orderItemResponseVo.setPrice(goodsOrder.getPrice());
orderItemResponseVos.add(orderItemResponseVo);
}
orderDetailResponseVo.setOrderItem(orderItemResponseVos);
return orderDetailResponseVo;
}
}

View File

@ -0,0 +1,25 @@
package com.wyh.front.validate;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "订单创建对象")
public class OrderCreateDto {
@ApiModelProperty(value = "商品id")
private List<OrderGoodsDto> goodsDtos;
@ApiModelProperty(value = "地址信息id")
private Integer adId;
@ApiModelProperty(value = "来源:1:商品2:购物车")
private Integer source;
}

View File

@ -0,0 +1,18 @@
package com.wyh.front.validate;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value="OrderGoodsDto对象", description="订单商品信息")
public class OrderGoodsDto {
@ApiModelProperty(value="商品")
private Integer goodsId;
@ApiModelProperty(value="数量")
private Integer num;
}