下单前校验、计算订单

pull/1/head
chuzhichao 2 years ago
parent 61e2b33b79
commit d84285761b

@ -4,6 +4,7 @@ import com.cyl.h5.service.H5MemberAddressService;
import com.cyl.ums.domain.MemberAddress; import com.cyl.ums.domain.MemberAddress;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@RestController @RestController
@ -19,8 +20,8 @@ public class H5MemberAddressController {
} }
@GetMapping("/default") @GetMapping("/default")
public AjaxResult getDefault(){ public ResponseEntity<MemberAddress> getDefault(){
return AjaxResult.success(h5MemberAddressService.getDefault()); return ResponseEntity.ok(h5MemberAddressService.getDefault());
} }
@PostMapping("/create") @PostMapping("/create")

@ -1,9 +1,12 @@
package com.cyl.h5.controller; package com.cyl.h5.controller;
import com.cyl.h5.pojo.dto.OrderCreateDTO;
import com.cyl.h5.pojo.vo.OrderCalcVO;
import com.cyl.h5.pojo.vo.form.OrderSubmitForm; import com.cyl.h5.pojo.vo.form.OrderSubmitForm;
import com.cyl.h5.pojo.vo.query.OrderH5Query; import com.cyl.h5.pojo.vo.query.OrderH5Query;
import com.cyl.oms.pojo.vo.OrderVO; import com.cyl.oms.pojo.vo.OrderVO;
import com.cyl.oms.service.OrderService; import com.cyl.oms.service.OrderService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
@ -16,11 +19,11 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
@RestController @RestController
@RequestMapping("/h5-order") @RequestMapping("/h5/order")
public class Order1Controller { public class H5OrderController {
@Autowired @Autowired
private OrderService orderService; private OrderService orderService;
@PostMapping("submit") @PostMapping("/add")
public ResponseEntity<OrderVO> submit(@RequestBody OrderSubmitForm form) { public ResponseEntity<OrderVO> submit(@RequestBody OrderSubmitForm form) {
return ResponseEntity.ok(orderService.submit(form)); return ResponseEntity.ok(orderService.submit(form));
} }
@ -28,4 +31,10 @@ public class Order1Controller {
public ResponseEntity<Page<OrderVO>> queryOrderPage(@RequestBody OrderH5Query query, Pageable pageReq) { public ResponseEntity<Page<OrderVO>> queryOrderPage(@RequestBody OrderH5Query query, Pageable pageReq) {
return ResponseEntity.ok(orderService.queryOrderPage(query, pageReq)); return ResponseEntity.ok(orderService.queryOrderPage(query, pageReq));
} }
@ApiOperation("下单前校验")
@PostMapping("/addOrderCheck")
public ResponseEntity<OrderCalcVO> addOrderCheck(@RequestBody OrderCreateDTO orderCreateDTO){
return ResponseEntity.ok(orderService.addOrderCheck(orderCreateDTO));
}
} }

@ -0,0 +1,36 @@
package com.cyl.h5.pojo.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* VO
* @author Jinxin
*
*/
@Data
@ApiModel(value = "创建订单请求VO")
public class OrderCreateDTO {
@ApiModelProperty(value = "商品购买明细",required = true)
private List<OrderProductListDTO> skuList;
@ApiModelProperty(value = "收货地址id")
private Long receiveAddressId;
@ApiModelProperty(value = "收货方式 1快递 2:自提 代理商只有1", required = false)
private Integer deliveryType = 1;
@ApiModelProperty(value = "支付方式1-支付宝2-微信(默认)", required = false, allowableValues = "1,2")
// @NotNull(message = "支付方式不能为空")
private Integer payType;
@ApiModelProperty(value = "订单备注")
private String note;
@ApiModelProperty(value = "订单来源 购物车是 cart")
private String from;
}

@ -0,0 +1,42 @@
package com.cyl.h5.pojo.dto;
import com.cyl.pms.domain.Product;
import com.cyl.pms.domain.Sku;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* VO
* @author Jinxin
*
*/
@Data
@ApiModel(value = "创建订单请求VO")
public class OrderProductListDTO {
@ApiModelProperty(value = "商品skuId", required = true)
@NotNull(message = "商品skuId不能为空")
private Long skuId;
@ApiModelProperty(value = "数量", required = true)
@NotNull(message = "数量不能为空")
@Min(value = 1, message = "数量不能小于1")
private Integer quantity;
@ApiModelProperty(value = "消费金", hidden = true)
private BigDecimal consumption;
@ApiModelProperty(value = "运费", hidden = true)
private BigDecimal freightAmount;
@ApiModelProperty(value = "隐藏 业务过程中的数据", hidden = true)
private Sku sku;
@ApiModelProperty(value = "隐藏 业务过程中的数据", hidden = true)
private Product product;
}

@ -0,0 +1,20 @@
package com.cyl.h5.pojo.vo;
import com.cyl.pms.pojo.vo.SkuVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel("下单前校验返回数据")
public class OrderCalcVO {
@ApiModelProperty("sku数据")
private List<SkuViewDTO> skuList;
@ApiModelProperty("商品总金额")
private BigDecimal productTotalAmount;
@ApiModelProperty("订单总金额")
private BigDecimal orderTotalAmount;
}

@ -0,0 +1,30 @@
package com.cyl.h5.pojo.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* sku
*
* @author Jinxin
*/
@Data
@ApiModel(value = "sku渲染详情")
public class SkuViewDTO {
private Long productId;
private Long skuId;
@ApiModelProperty(value = "商品名称")
private String productName;
@ApiModelProperty(value = "销售属性")
private String spData;
@ApiModelProperty(value = "购买数量")
private Integer quantity;
@ApiModelProperty(value = "主图")
private String pic;
@ApiModelProperty(value = "售价")
private BigDecimal price;
}

@ -7,28 +7,38 @@ import java.time.LocalDateTime;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cyl.h5.pojo.dto.OrderCreateDTO;
import com.cyl.h5.pojo.dto.OrderProductListDTO;
import com.cyl.h5.pojo.vo.OrderCalcVO;
import com.cyl.h5.pojo.vo.SkuViewDTO;
import com.cyl.h5.pojo.vo.form.OrderSubmitForm; import com.cyl.h5.pojo.vo.form.OrderSubmitForm;
import com.cyl.h5.pojo.vo.query.OrderH5Query; import com.cyl.h5.pojo.vo.query.OrderH5Query;
import com.cyl.oms.convert.OrderConvert; import com.cyl.oms.convert.OrderConvert;
import com.cyl.oms.domain.OrderItem; import com.cyl.oms.domain.OrderItem;
import com.cyl.oms.mapper.OrderItemMapper; import com.cyl.oms.mapper.OrderItemMapper;
import com.cyl.oms.pojo.vo.OrderVO; import com.cyl.oms.pojo.vo.OrderVO;
import com.cyl.pms.convert.SkuConvert;
import com.cyl.pms.domain.Product; import com.cyl.pms.domain.Product;
import com.cyl.pms.domain.Sku; import com.cyl.pms.domain.Sku;
import com.cyl.pms.mapper.ProductMapper; import com.cyl.pms.mapper.ProductMapper;
import com.cyl.pms.mapper.SkuMapper; import com.cyl.pms.mapper.SkuMapper;
import com.cyl.pms.pojo.vo.SkuVO;
import com.cyl.ums.domain.Member;
import com.cyl.ums.domain.MemberAddress; import com.cyl.ums.domain.MemberAddress;
import com.cyl.ums.mapper.MemberAddressMapper; import com.cyl.ums.mapper.MemberAddressMapper;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.config.LocalDataUtil;
import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
@ -40,6 +50,8 @@ import com.cyl.oms.mapper.OrderMapper;
import com.cyl.oms.domain.Order; import com.cyl.oms.domain.Order;
import com.cyl.oms.pojo.query.OrderQuery; import com.cyl.oms.pojo.query.OrderQuery;
import javax.validation.constraints.NotNull;
/** /**
* Service * Service
* *
@ -60,6 +72,8 @@ public class OrderService {
private SkuMapper skuMapper; private SkuMapper skuMapper;
@Autowired @Autowired
private ProductMapper productMapper; private ProductMapper productMapper;
@Autowired
private SkuConvert skuConvert;
/** /**
* *
@ -341,4 +355,54 @@ public class OrderService {
}); });
return new PageImpl<>(res, pageReq, total); return new PageImpl<>(res, pageReq, total);
} }
public OrderCalcVO addOrderCheck(OrderCreateDTO orderCreateDTO) {
OrderCalcVO res = new OrderCalcVO();
List<SkuViewDTO> skuList = new ArrayList<>();
List<OrderProductListDTO> list = orderCreateDTO.getSkuList();
if (CollectionUtil.isEmpty(list)){
throw new RuntimeException("商品SKU信息不能为空");
}
//将购买的sku信息转化为keyskuId value数量
Map<Long, Integer> quantityMap = list.stream().
collect(Collectors.toMap(OrderProductListDTO::getSkuId, OrderProductListDTO::getQuantity, (v1, v2) -> v2));
//查询所有sku信息
Set<Long> collect = list.stream().map(OrderProductListDTO::getSkuId).collect(Collectors.toSet());
Map<Long, Sku> querySkuMap = skuMapper.selectBatchIds(collect).stream().collect(Collectors.toMap(Sku::getId, it -> it));
//计算商品总金额、订单总金额
BigDecimal productTotalAmount = BigDecimal.ZERO;
BigDecimal orderTotalAmount = BigDecimal.ZERO;
for (OrderProductListDTO dto : list){
if (!querySkuMap.containsKey(dto.getSkuId())){
throw new RuntimeException("商品SKU不存在");
}
Sku sku = querySkuMap.get(dto.getSkuId());
//查product
Product product = productMapper.selectById(sku.getProductId());
if (product == null){
throw new RuntimeException("商品不存在");
}
if (Constants.PublishStatus.UNDERCARRIAGE.equals(product.getPublishStatus())){
throw new RuntimeException("商品" + product.getName() + "已下架");
}
BigDecimal addAmount = sku.getPrice().multiply(BigDecimal.valueOf(dto.getQuantity()));
//由于目前没有运费等数据,暂时订单总金额=商品总金额了
productTotalAmount = productTotalAmount.add(addAmount);
orderTotalAmount = orderTotalAmount.add(addAmount);
//封装sku信息
SkuViewDTO skuViewDTO = new SkuViewDTO();
skuViewDTO.setPic(product.getPic());
skuViewDTO.setPrice(sku.getPrice());
skuViewDTO.setProductId(product.getId());
skuViewDTO.setProductName(product.getName());
skuViewDTO.setQuantity(quantityMap.get(sku.getId()));
skuViewDTO.setSkuId(sku.getId());
skuViewDTO.setSpData(sku.getSpData());
skuList.add(skuViewDTO);
}
res.setSkuList(skuList);
res.setOrderTotalAmount(orderTotalAmount);
res.setProductTotalAmount(productTotalAmount);
return res;
}
} }

Loading…
Cancel
Save