From 595cf086067e3dae05f7896b7772d8b689cc6ea4 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 22 Sep 2021 11:50:23 +0800
Subject: [PATCH] add addOrder and fix
---
src/main/resources/mapper/modules/MallGoodsMapper.xml | 2
src/main/java/cc/mrbird/febs/mall/dto/AddOrderItemDto.java | 24 ++++
src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java | 18 ++-
src/main/java/cc/mrbird/febs/common/enumerates/OrderStatusEnum.java | 46 +++++++
src/main/java/cc/mrbird/febs/common/utils/MallUtils.java | 30 +++++
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsSkuMapper.java | 3
src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java | 16 ++
src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java | 3
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 83 +++++++++++++
sql/xc_mall.sql | 62 ++++++++++
src/main/resources/mapper/modules/MallGoodsSkuMapper.xml | 10 +
src/main/java/cc/mrbird/febs/mall/entity/MallGoodsSku.java | 7 +
12 files changed, 290 insertions(+), 14 deletions(-)
diff --git a/sql/xc_mall.sql b/sql/xc_mall.sql
index 1b723cd..51a5b35 100644
--- a/sql/xc_mall.sql
+++ b/sql/xc_mall.sql
@@ -144,3 +144,65 @@
is_default INT COMMENT '是否默认;1-是2-否' ,
PRIMARY KEY (ID)
) COMMENT = '用户地址';
+
+DROP TABLE IF EXISTS mall_order_info;
+CREATE TABLE mall_order_info(
+ REVISION INT COMMENT '乐观锁' ,
+ CREATED_BY VARCHAR(32) COMMENT '创建人' ,
+ CREATED_TIME DATETIME COMMENT '创建时间' ,
+ UPDATED_BY VARCHAR(32) COMMENT '更新人' ,
+ UPDATED_TIME DATETIME COMMENT '更新时间' ,
+ ID BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键' ,
+ order_no VARCHAR(32) COMMENT '订单号' ,
+ member_id BIGINT COMMENT '用户ID' ,
+ order_time DATETIME COMMENT '下单时间' ,
+ pay_time DATETIME COMMENT '支付时间' ,
+ amount DECIMAL(20,2) COMMENT '订单金额' ,
+ pay_method VARCHAR(32) COMMENT '支付方式' ,
+ status INT COMMENT '状态;1-待支付2-待发货3-待收货4-已完成5-退款中6-已退款7-已取消' ,
+ cancel_type INT COMMENT '取消类型;1-超时未支付2-主动取消' ,
+ name VARCHAR(32) COMMENT '联系人' ,
+ phone VARCHAR(32) COMMENT '联系方式' ,
+ address TEXT COMMENT '收货地址' ,
+ longitude VARCHAR(255) COMMENT '经度' ,
+ latitude VARCHAR(255) COMMENT '纬度' ,
+ remark TEXT COMMENT '备注' ,
+ PRIMARY KEY (ID)
+) COMMENT = '订单表';
+
+DROP TABLE IF EXISTS mall_order_item;
+CREATE TABLE mall_order_item(
+ REVISION INT COMMENT '乐观锁' ,
+ CREATED_BY VARCHAR(32) COMMENT '创建人' ,
+ CREATED_TIME DATETIME COMMENT '创建时间' ,
+ UPDATED_BY VARCHAR(32) COMMENT '更新人' ,
+ UPDATED_TIME DATETIME COMMENT '更新时间' ,
+ ID BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键' ,
+ order_id BIGINT COMMENT '订单ID' ,
+ sku_id BIGINT COMMENT 'skuID' ,
+ goods_id BIGINT COMMENT '商品ID' ,
+ goods_name VARCHAR(255) COMMENT '商品名称' ,
+ style_name VARCHAR(255) COMMENT '样式名称' ,
+ sku_name VARCHAR(255) COMMENT 'sku名称' ,
+ cnt INT COMMENT '数量' ,
+ price DECIMAL(20,2) COMMENT '单价' ,
+ amount DECIMAL(20,2) COMMENT '金额' ,
+ PRIMARY KEY (ID)
+) COMMENT = '订单明细表';
+
+DROP TABLE IF EXISTS mall_money_flow;
+CREATE TABLE mall_money_flow(
+ REVISION INT COMMENT '乐观锁' ,
+ CREATED_BY VARCHAR(32) COMMENT '创建人' ,
+ CREATED_TIME DATETIME COMMENT '创建时间' ,
+ UPDATED_BY VARCHAR(32) COMMENT '更新人' ,
+ UPDATED_TIME DATETIME COMMENT '更新时间' ,
+ ID BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键' ,
+ member_id BIGINT COMMENT '用户ID' ,
+ amount DECIMAL(20,2) COMMENT '金额' ,
+ type INT COMMENT '流水类型;1-分红收入2-业绩奖励3-订单支付4-退款' ,
+ order_no VARCHAR(32) COMMENT '订单号' ,
+ description TEXT COMMENT '描述' ,
+ remark TEXT COMMENT '备注' ,
+ PRIMARY KEY (ID)
+) COMMENT = '资金流水';
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/OrderStatusEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/OrderStatusEnum.java
new file mode 100644
index 0000000..a03318e
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/OrderStatusEnum.java
@@ -0,0 +1,46 @@
+package cc.mrbird.febs.common.enumerates;
+
+import lombok.Getter;
+
+@Getter
+public enum OrderStatusEnum {
+
+ /**
+ * 待支付
+ */
+ WAIT_PAY(1),
+ /**
+ * 待发货
+ */
+ WAIT_SHIPPING(2),
+ /**
+ * 待收货
+ */
+ WAIT_FINISH(3),
+ /**
+ * 完成
+ */
+ FINISH(4),
+ /**
+ * 退款中
+ */
+ REFUNDING(5),
+ /**
+ * 已退款
+ */
+ REFUNDED(6),
+ /**
+ * 取消
+ */
+ CANCEL(7),
+ /**
+ * 不退款
+ */
+ UNREFUND(8);
+
+ private final int value;
+
+ OrderStatusEnum(int value) {
+ this.value = value;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/common/utils/MallUtils.java b/src/main/java/cc/mrbird/febs/common/utils/MallUtils.java
new file mode 100644
index 0000000..fb61d3f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/utils/MallUtils.java
@@ -0,0 +1,30 @@
+package cc.mrbird.febs.common.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+/**
+ * @author wzy
+ * @date 2021-09-22
+ **/
+public class MallUtils {
+
+ public static String getRandomNum(int length) {
+ String str = "0123456789";
+ Random random = new Random();
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < length; ++i) {
+ int number = random.nextInt(str.length());
+ sb.append(str.charAt(number));
+ }
+
+ return sb.toString();
+ }
+
+ public static String getOrderNum() {
+ SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dd=df.format(new Date());
+ return dd+getRandomNum(5);
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
index 72f57c1..cd8fb00 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
@@ -8,10 +8,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -29,9 +26,18 @@
private final IApiMallOrderInfoService mallOrderInfoService;
- @ApiOperation(value = "addOrder", notes = "提交订单")
+ @ApiOperation(value = "提交订单", notes = "提交订单")
@PostMapping(value = "/addOrder")
- public FebsResponse addOrder(@RequestBody List<AddOrderDto> list) {
+ public FebsResponse addOrder(@RequestBody AddOrderDto addOrderDto) {
+ String orderNo = mallOrderInfoService.createOrder(addOrderDto);
+
+ // TODO 创建支付订单
+ return new FebsResponse().success().message("创建订单成功");
+ }
+
+ @ApiOperation(value = "取消订单", notes = "取消订单")
+ @PostMapping(value = "/cancelOrder/{id}")
+ public FebsResponse cancelOrder(@PathVariable("id") Long id) {
return null;
}
}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
index 2d78d52..6cb01fc 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
@@ -4,6 +4,9 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
/**
* @author wzy
* @date 2021-09-18
@@ -12,9 +15,14 @@
@ApiModel(value = "AddOrderDto", description = "新增订单接口参数接收类")
public class AddOrderDto {
- @ApiModelProperty(value = "skuID", example = "1")
- private Long skuId;
+ @NotNull(message = "参数不能为空")
+ @ApiModelProperty(value = "地址ID", example = "1")
+ private Long addressId;
- @ApiModelProperty(value = "数量", example = "2")
- private Integer cnt;
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+ @ApiModelProperty(value = "商品明细")
+ private List<AddOrderItemDto> items;
+
}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AddOrderItemDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AddOrderItemDto.java
new file mode 100644
index 0000000..f4f9be6
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/AddOrderItemDto.java
@@ -0,0 +1,24 @@
+package cc.mrbird.febs.mall.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author wzy
+ * @date 2021-09-22
+ **/
+@Data
+@ApiModel(value = "AddOrderItemDto", description = "新增订单明细参数接收类")
+public class AddOrderItemDto {
+
+ @NotNull(message = "参数不能为空")
+ @ApiModelProperty(value = "skuID", example = "1")
+ private Long skuId;
+
+ @NotNull(message = "参数不能为空")
+ @ApiModelProperty(value = "数量", example = "2")
+ private Integer cnt;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallGoodsSku.java b/src/main/java/cc/mrbird/febs/mall/entity/MallGoodsSku.java
index 9d52895..4c2317b 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallGoodsSku.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallGoodsSku.java
@@ -1,6 +1,7 @@
package cc.mrbird.febs.mall.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -29,4 +30,10 @@
private Long styleId;
private Long goodsId;
+
+ @TableField(exist = false)
+ private String goodsName;
+
+ @TableField(exist = false)
+ private String styleName;
}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsSkuMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsSkuMapper.java
index 2fb2f54..9781436 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsSkuMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsSkuMapper.java
@@ -2,6 +2,9 @@
import cc.mrbird.febs.mall.entity.MallGoodsSku;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
public interface MallGoodsSkuMapper extends BaseMapper<MallGoodsSku> {
+
+ MallGoodsSku selectSkuInfoById(@Param("id") Long id);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java
index fc76a83..aea0580 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java
@@ -1,7 +1,10 @@
package cc.mrbird.febs.mall.service;
+import cc.mrbird.febs.mall.dto.AddOrderDto;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import com.baomidou.mybatisplus.extension.service.IService;
public interface IApiMallOrderInfoService extends IService<MallOrderInfo> {
+
+ String createOrder(AddOrderDto addOrderDto);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 41a6417..d6b93d2 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -1,12 +1,24 @@
package cc.mrbird.febs.mall.service.impl;
-import cc.mrbird.febs.mall.entity.MallOrderInfo;
-import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.LoginUserUtil;
+import cc.mrbird.febs.common.utils.MallUtils;
+import cc.mrbird.febs.mall.dto.AddOrderDto;
+import cc.mrbird.febs.mall.dto.AddOrderItemDto;
+import cc.mrbird.febs.mall.entity.*;
+import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
+import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
/**
* @author wzy
@@ -16,4 +28,71 @@
@Service
@RequiredArgsConstructor
public class ApiMallOrderInfoServiceImpl extends ServiceImpl<MallOrderInfoMapper, MallOrderInfo> implements IApiMallOrderInfoService {
+
+ private final MallGoodsMapper mallGoodsMapper;
+ private final MallGoodsSkuMapper mallGoodsSkuMapper;
+ private final MallAddressInfoMapper mallAddressInfoMapper;
+ private final MallOrderItemMapper mallOrderItemMapper;
+
+ @Override
+ public String createOrder(AddOrderDto addOrderDto) {
+ MallMember member = LoginUserUtil.getLoginUser();
+
+ MallAddressInfo address = mallAddressInfoMapper.selectById(addOrderDto.getAddressId());
+ if (address == null) {
+ throw new FebsException("地址不存在");
+ }
+
+ String orderNo = MallUtils.getOrderNum();
+ MallOrderInfo orderInfo = new MallOrderInfo();
+ orderInfo.setOrderNo(orderNo);
+ orderInfo.setOrderTime(new Date());
+ orderInfo.setMemberId(member.getId());
+ orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
+ orderInfo.setName(address.getName());
+ orderInfo.setAddress(address.getArea() + address.getAddress());
+ orderInfo.setPhone(address.getPhone());
+ orderInfo.setLatitude(address.getLatitude());
+ orderInfo.setLongitude(address.getLongitude());
+ orderInfo.setRemark(addOrderDto.getRemark());
+
+ if (CollUtil.isEmpty(addOrderDto.getItems())) {
+ throw new FebsException("参数错误");
+ }
+
+ this.baseMapper.insert(orderInfo);
+ BigDecimal total = BigDecimal.ZERO;
+ for (AddOrderItemDto item : addOrderDto.getItems()) {
+ MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
+ if (sku == null) {
+ throw new FebsException("购买商品或sku不存在");
+ }
+
+ if (sku.getStock() < item.getCnt()) {
+ throw new FebsException("库存不足");
+ }
+
+ MallOrderItem orderItem = new MallOrderItem();
+ BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
+ orderItem.setAmount(amount);
+ orderItem.setCnt(item.getCnt());
+ orderItem.setOrderId(orderInfo.getId());
+ orderItem.setPrice(sku.getPresentPrice());
+ orderItem.setGoodsId(sku.getGoodsId());
+ orderItem.setGoodsName(sku.getGoodsName());
+ orderItem.setSkuId(sku.getId());
+ orderItem.setStyleName(sku.getStyleName());
+
+ total = total.add(amount);
+ mallOrderItemMapper.insert(orderItem);
+
+ sku.setStock(sku.getStock() - item.getCnt());
+ mallGoodsSkuMapper.updateById(sku);
+ }
+
+
+ return orderNo;
+ }
+
+
}
diff --git a/src/main/resources/mapper/modules/MallGoodsMapper.xml b/src/main/resources/mapper/modules/MallGoodsMapper.xml
index 39bc47b..c0c3d02 100644
--- a/src/main/resources/mapper/modules/MallGoodsMapper.xml
+++ b/src/main/resources/mapper/modules/MallGoodsMapper.xml
@@ -72,7 +72,7 @@
and a.is_hot = 1
</if>
<if test="record.categoryId != null and record.categoryId != ''">
- and (c.category_id = #{record.categoryId} or c.parent_id=#{record.categoryId})
+ and (c.id = #{record.categoryId} or c.parent_id=#{record.categoryId})
</if>
<if test="record.query != null and record.query != ''">
and a.goods_name like CONCAT('%', CONCAT(#{record.query}, '%'))
diff --git a/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml b/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
index 176ea27..f742c02 100644
--- a/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
+++ b/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
@@ -4,6 +4,14 @@
<select id="selectSkuInfoById" resultType="cc.mrbird.febs.mall.entity.MallGoodsSku">
- select * from mall_goods_sku where id=#{id}
+ select
+ a.*,
+ b.name styleName,
+ c.goods_name goodsName
+ from mall_goods_sku a
+ inner join mall_goods_style b on a.style_id=b.ID
+ inner join mall_goods c on a.goods_id= c.ID
+ where a.id=#{id}
</select>
+
</mapper>
\ No newline at end of file
--
Gitblit v1.9.1