创建订单

This commit is contained in:
jieyuu 2024-09-23 20:32:42 +08:00
parent 290eea787e
commit 97727917c0
4 changed files with 121 additions and 5 deletions

View File

@ -2,6 +2,9 @@ package net.jieyuu.mapper;
import net.jieyuu.model.ProductOrderItemDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
@ -13,4 +16,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface ProductOrderItemMapper extends BaseMapper<ProductOrderItemDO> {
/**
* 批量插入
*
* @param orderItemList
*/
void insertBatch(@Param("orderItemList") List<ProductOrderItemDO> orderItemList);
}

View File

@ -70,7 +70,7 @@ public class ProductOrderDO implements Serializable {
/**
* 用户id
*/
private Integer userId;
private Long userId;
/**
* 0表示未删除1表示已经删除

View File

@ -1,19 +1,21 @@
package net.jieyuu.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import net.jieyuu.enums.BizCodeEnum;
import net.jieyuu.enums.CouponStateEnum;
import net.jieyuu.enums.*;
import net.jieyuu.exception.BizException;
import net.jieyuu.feign.CouponFeignService;
import net.jieyuu.feign.ProductFeignService;
import net.jieyuu.feign.UserFeignService;
import net.jieyuu.interceptor.LoginInterceptor;
import net.jieyuu.mapper.ProductOrderItemMapper;
import net.jieyuu.model.LoginUser;
import net.jieyuu.model.OrderItemVO;
import net.jieyuu.model.ProductOrderDO;
import net.jieyuu.mapper.ProductOrderMapper;
import net.jieyuu.model.ProductOrderItemDO;
import net.jieyuu.request.ConfirmOrderRequest;
import net.jieyuu.request.LockCouponRecordRequest;
import net.jieyuu.request.LockProductRequest;
@ -29,6 +31,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@ -56,6 +59,9 @@ public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, Pro
@Autowired
private CouponFeignService couponFeignService;
@Autowired
private ProductOrderItemMapper productOrderItemMapper;
/**
* * 防重提交
* * 用户微服务-确认收货地址
@ -100,13 +106,90 @@ public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, Pro
// 锁定库存
this.lockProductStocks(orderItemList, orderOutTradeNo);
// 创建订单 todo
// 创建订单
ProductOrderDO productOrderDO = this.saveProductOrder(orderRequest, loginUser, orderOutTradeNo, addressVO);
//创建订单项
this.saveproductOrderItems(orderOutTradeNo, productOrderDO.getId(), orderItemList);
// 发送延迟消息用于自动关单 todo
//创建支付 todo
return null;
}
/**
* 新增订单项
*
* @param orderOutTradeNo
* @param orderId
* @param orderItemList
*/
private void saveproductOrderItems(String orderOutTradeNo, Long orderId, List<OrderItemVO> orderItemList) {
List<ProductOrderItemDO> orderItemDOList = orderItemList.stream().map(obj -> {
ProductOrderItemDO itemDO = new ProductOrderItemDO();
itemDO.setBuyNum(obj.getBuyNum());
itemDO.setProductId(obj.getProductId());
itemDO.setProductName(obj.getProductTitle());
itemDO.setProductImg(obj.getProductImg());
itemDO.setOutTradeNo(orderOutTradeNo);
itemDO.setCreateTime(new Date());
// 单价
itemDO.setAmount(obj.getAmount());
// 总价
itemDO.setTotalAmount(obj.getTotalAmount());
itemDO.setProductOrderId(orderId);
return itemDO;
}).collect(Collectors.toList());
productOrderItemMapper.insertBatch(orderItemDOList);
}
/**
* 创建订单
*
* @param orderRequest
* @param loginUser
* @param orderOutTradeNo
* @param addressVO
* @return
*/
private ProductOrderDO saveProductOrder(ConfirmOrderRequest orderRequest, LoginUser loginUser, String orderOutTradeNo, ProductOrderAddressVO addressVO) {
ProductOrderDO productOrderDO = new ProductOrderDO();
productOrderDO.setUserId(loginUser.getId());
productOrderDO.setHeadImg(loginUser.getHeadImg());
productOrderDO.setNickname(loginUser.getName());
productOrderDO.setOutTradeNo(orderOutTradeNo);
productOrderDO.setDel(0);
productOrderDO.setOrderType(ProductOrderTypeEnum.DAILY.name());
//实际支付的价格
productOrderDO.setPayAmount(orderRequest.getRealPayAmount());
productOrderDO.setTotalAmount(orderRequest.getTotalAmount());
productOrderDO.setState(ProductOrderStateEnum.NEW.name());
//
productOrderDO.setPayType(ProductOrderPayTypeEnum.valueOf(orderRequest.getPayType()).name());
// 收货地址
productOrderDO.setReceiverAddress(JSON.toJSONString(addressVO));
// 插入数据库
productOrderMapper.insert(productOrderDO);
return productOrderDO;
}
/**
* 锁定商品库存
*

View File

@ -21,4 +21,28 @@
id, product_order_id, out_trade_no, product_id, product_name, product_img, buy_num, create_time, total_amount, amount
</sql>
<!-- 通用查询结果列 -->
<sql id="Base_Column_NO_List">
id, product_order_id, out_trade_no, product_id, product_name, product_img, buy_num, create_time, total_amount, amount
</sql>
<insert id="insertBatch">
insert into product_order_item
(<include refid="Base_Column_NO_List"/>)
values
<foreach collection="orderItemList" item="item" index="index" separator=",">
(
#{item.productOrderId}
#{item.outTradeNo}
#{item.productId}
#{item.productName}
#{item.productImg}
#{item.buyNum}
#{item.createTime}
#{item.totalAmount}
#{item.amount}
)
</foreach>
</insert>
</mapper>