|
@@ -0,0 +1,117 @@
|
|
|
+package com.futu.course.orders.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.futu.course.commons.utils.SnowflakeIdWorker;
|
|
|
+import com.futu.course.commons.utils.TokenUtils;
|
|
|
+import com.futu.course.commons.vo.AppHttpCodeEnum;
|
|
|
+import com.futu.course.commons.vo.ResponseResult;
|
|
|
+import com.futu.course.orders.domain.Coupons;
|
|
|
+import com.futu.course.orders.domain.OrderInfo;
|
|
|
+import com.futu.course.orders.domain.OrderItem;
|
|
|
+import com.futu.course.orders.domain.UserCoupon;
|
|
|
+import com.futu.course.orders.dto.AddOrderDto;
|
|
|
+import com.futu.course.orders.dto.OrderItemDto;
|
|
|
+import com.futu.course.orders.mapper.CouponsMapper;
|
|
|
+import com.futu.course.orders.mapper.UserCouponMapper;
|
|
|
+import com.futu.course.orders.service.OrderInfoService;
|
|
|
+import com.futu.course.orders.mapper.OrderInfoMapper;
|
|
|
+import com.futu.course.orders.service.OrderItemService;
|
|
|
+import com.futu.course.sku.domain.Sku;
|
|
|
+import com.futu.course.sku.mapper.SkuMapper;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+* @author yuu
|
|
|
+* @description 针对表【order_info】的数据库操作Service实现
|
|
|
+* @createDate 2025-05-10 10:01:58
|
|
|
+*/
|
|
|
+@Service
|
|
|
+public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo>
|
|
|
+ implements OrderInfoService{
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrderInfoMapper mapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CouponsMapper couponsMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserCouponMapper userCouponMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SkuMapper skuMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrderItemService service;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RedisTemplate redisTemplate;
|
|
|
+ @Override
|
|
|
+ public ResponseResult createOrder(AddOrderDto dto) {
|
|
|
+
|
|
|
+ String token =(String) redisTemplate.opsForValue().get("user");
|
|
|
+ Long userId = TokenUtils.getUserId(token);
|
|
|
+ System.out.println(userId);
|
|
|
+ SnowflakeIdWorker worker=new SnowflakeIdWorker(1,1);
|
|
|
+ OrderInfo info = new OrderInfo();
|
|
|
+ info.setId(worker.nextId());
|
|
|
+
|
|
|
+
|
|
|
+ List<Sku> skus = skuMapper.selectBatchIds(dto.getDtos().stream().map(OrderItemDto::getSkuId).collect(Collectors.toList()));
|
|
|
+ HashMap<Long,Sku>map=new HashMap<>();
|
|
|
+ for (Sku sku : skus) {
|
|
|
+ map.put(sku.getId(),sku);
|
|
|
+ }
|
|
|
+ BigDecimal total = BigDecimal.ZERO;
|
|
|
+ List<OrderItem>items=new ArrayList<>();
|
|
|
+ for (OrderItemDto itemDto : dto.getDtos()) {
|
|
|
+ Sku sku = map.get(itemDto.getSkuId());
|
|
|
+ BigDecimal multiply = sku.getPrice().multiply(BigDecimal.valueOf(itemDto.getQuantity()));
|
|
|
+ total=total.add(multiply);
|
|
|
+ OrderItem item = new OrderItem();
|
|
|
+ item.setId(worker.nextId());
|
|
|
+ item.setOrderId(info.getId());
|
|
|
+ item.setPrice(sku.getPrice());
|
|
|
+ item.setStatus(null);
|
|
|
+ item.setQuantity(itemDto.getQuantity());
|
|
|
+ item.setSubTotal(multiply);
|
|
|
+ item.setUserId(userId);
|
|
|
+ items.add(item);
|
|
|
+
|
|
|
+ }
|
|
|
+ UserCoupon userCoupon = userCouponMapper.selectOne(new LambdaQueryWrapper<UserCoupon>().eq(UserCoupon::getUserId, userId));
|
|
|
+ Coupons coupons = couponsMapper.selectById(userCoupon.getCouponId());
|
|
|
+ System.out.println(coupons);
|
|
|
+ info.setUserId(userId);
|
|
|
+ info.setCreateTime(new Date());
|
|
|
+ info.setTotalAount(total);
|
|
|
+ info.setCouponId(coupons.getId());
|
|
|
+ info.setStatus(1);
|
|
|
+ info.setDesAount(coupons.getTotalValue());
|
|
|
+ info.setQueAount(total.subtract(coupons.getTotalValue()));
|
|
|
+ boolean b = service.saveBatch(items);
|
|
|
+ int insert = mapper.insert(info);
|
|
|
+ if (insert>0)
|
|
|
+ {
|
|
|
+ return ResponseResult.okResult(info);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|