订单信息,删除购物车商品
parent
c20b304c67
commit
27d2203d2d
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -49,4 +49,8 @@ public class Order implements Serializable {
|
|||
@ApiModelProperty(value = "外部订单号")
|
||||
private String outSn;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "来源:1:商品,2:购物车")
|
||||
private Integer source;
|
||||
|
||||
}
|
||||
|
|
@ -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> {
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,4 +11,8 @@ public interface CartService {
|
|||
CartVo getCart();
|
||||
|
||||
CartVo updateCheck(Integer userId,Integer type);
|
||||
|
||||
void remove(Integer[] ids);
|
||||
|
||||
void remove(List<Integer> ids);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue