|
@@ -0,0 +1,124 @@
|
|
|
+package com.zhentao.system.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.zhentao.system.domain.Coupon;
|
|
|
+import com.zhentao.system.domain.OrderDetail;
|
|
|
+import com.zhentao.system.domain.OrderMaster;
|
|
|
+import com.zhentao.system.domain.ProductSku;
|
|
|
+import com.zhentao.system.dto.OrderDto;
|
|
|
+import com.zhentao.system.mapper.CouponMapper;
|
|
|
+import com.zhentao.system.mapper.OrderDetailMapper;
|
|
|
+import com.zhentao.system.mapper.OrderMasterMapper;
|
|
|
+import com.zhentao.system.mapper.ProductSkuMapper;
|
|
|
+import com.zhentao.system.service.OrderMasterService;
|
|
|
+import com.zhentao.system.utils.TokenUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+* @author ASUS
|
|
|
+* @description 针对表【order_master(订单主表)】的数据库操作Service实现
|
|
|
+* @createDate 2025-05-09 20:31:23
|
|
|
+*/
|
|
|
+@Service
|
|
|
+public class OrderMasterServiceImpl implements OrderMasterService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private StringRedisTemplate stringRedisTemplate;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProductSkuMapper productSkuMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CouponMapper couponMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrderDetailMapper orderDetailMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ OrderMasterMapper orderMasterMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void addOrder(OrderDto dto) {
|
|
|
+ // 创建一个对象
|
|
|
+ OrderMaster orderMaster = new OrderMaster();
|
|
|
+ // 雪花算法id
|
|
|
+ Long id = IdUtil.getSnowflake(1, 1).nextId();
|
|
|
+ orderMaster.setOrderId(String.valueOf(id));
|
|
|
+ // 判断order是否为空, 设置用户id
|
|
|
+ String userIdFromToken = TokenUtils.getUserIdFromToken(dto.getToken());
|
|
|
+ System.err.println("用户id: " + userIdFromToken);
|
|
|
+ if(userIdFromToken == null){
|
|
|
+ String userId = stringRedisTemplate.opsForValue().get("userId");
|
|
|
+ String userIdFromToken1 = TokenUtils.getUserIdFromToken(userId);
|
|
|
+ orderMaster.setUserId(userIdFromToken1);
|
|
|
+ }else{
|
|
|
+ orderMaster.setUserId(userIdFromToken);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询商品信息转化为Map
|
|
|
+ List<Long> collect = dto.getOrderDetails().stream().map(OrderDetail::getSkuId).collect(Collectors.toList());
|
|
|
+ System.err.println("所有的skuId: " + collect);
|
|
|
+ List<ProductSku> productSkus = new ArrayList<>();
|
|
|
+ for (Long aLong : collect) {
|
|
|
+ QueryWrapper<ProductSku> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("sku_id", aLong);
|
|
|
+ ProductSku one = productSkuMapper.getOne(queryWrapper);
|
|
|
+ productSkus.add(one);
|
|
|
+ }
|
|
|
+ System.err.println("商品信息: " + productSkus);
|
|
|
+ Map<Long, ProductSku> collect1 = productSkus.stream().collect(Collectors.toMap(ProductSku::getSkuId, p -> p));
|
|
|
+ System.err.println("商品信息Map: " + collect1);
|
|
|
+ // 计算总价格
|
|
|
+ BigDecimal totalAmount = new BigDecimal("0");
|
|
|
+ List<OrderDetail> orderDetails = dto.getOrderDetails();
|
|
|
+ for (OrderDetail orderDetail : orderDetails) {
|
|
|
+ // 获取sku的基本信息
|
|
|
+ ProductSku productSku = collect1.get(orderDetail.getSkuId());
|
|
|
+ // 小计
|
|
|
+ BigDecimal amount = productSku.getUnitPrice().multiply(new BigDecimal(orderDetail.getQuantity()));
|
|
|
+ orderDetail.setAmount(amount);
|
|
|
+ totalAmount = totalAmount.add(amount);
|
|
|
+ }
|
|
|
+ orderMaster.setTotalAmount(totalAmount);
|
|
|
+ System.err.println("总价格: " + totalAmount);
|
|
|
+ // 扣减的优惠券
|
|
|
+ QueryWrapper<Coupon> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("coupon_id", dto.getCouponId());
|
|
|
+ Coupon one = couponMapper.getOne(queryWrapper);
|
|
|
+ // 设置优惠券id
|
|
|
+ orderMaster.setCouponId(Long.valueOf(String.valueOf(one.getCouponId())));
|
|
|
+ // 设置优惠券优惠金额
|
|
|
+ orderMaster.setDiscountAmount(one.getDiscountAmount());
|
|
|
+ // 设置实际支付金额
|
|
|
+ orderMaster.setActualAmount(totalAmount.subtract(one.getDiscountAmount()));
|
|
|
+ System.err.println("订单的所有信息: " + orderMaster);
|
|
|
+ orderMasterMapper.save(orderMaster);
|
|
|
+ for (OrderDetail orderDetail : orderDetails) {
|
|
|
+ long id1 = IdUtil.getSnowflake(1, 1).nextId();
|
|
|
+ orderDetail.setDetailId(id);
|
|
|
+ orderDetail.setOrderId(id);
|
|
|
+ orderDetailMapper.save(orderDetail);
|
|
|
+ }
|
|
|
+ for (ProductSku skus : productSkus) {
|
|
|
+ for (OrderDetail orderDetail : orderDetails) {
|
|
|
+ if(skus.getSkuId().equals(orderDetail.getSkuId())){
|
|
|
+ skus.setStock(skus.getStock() - orderDetail.getQuantity());
|
|
|
+ productSkuMapper.updateById(skus);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|