Bladeren bron

购物车/下订单

licailing 4 jaren geleden
bovenliggende
commit
a7db96bae5

+ 0 - 1
src/main/java/com/izouma/jiashanxia/domain/ShoppingCart.java

@@ -8,7 +8,6 @@ import lombok.NoArgsConstructor;
 
 import javax.persistence.Entity;
 import java.math.BigDecimal;
-import java.time.LocalDate;
 
 @Data
 @AllArgsConstructor

+ 8 - 7
src/main/java/com/izouma/jiashanxia/service/ConsumptionService.java

@@ -10,6 +10,7 @@ import com.github.binarywang.wxpay.service.WxPayService;
 import com.izouma.jiashanxia.domain.OrderInfo;
 import com.izouma.jiashanxia.domain.User;
 import com.izouma.jiashanxia.domain.WxFee;
+import com.izouma.jiashanxia.enums.PayMethod;
 import com.izouma.jiashanxia.exception.BusinessException;
 import com.izouma.jiashanxia.repo.OrderInfoRepo;
 import com.izouma.jiashanxia.repo.UserRepo;
@@ -28,12 +29,12 @@ import java.util.Arrays;
 @Slf4j
 @AllArgsConstructor
 public class ConsumptionService {
-    private UserRepo         userRepo;
-    private OrderInfoRepo    orderInfoRepo;
-    private Environment      environment;
-    private WxPayService     wxPayService;
-    private WxFeeRepo        wxFeeRepo;
-    private OrderInfoService orderInfoService;
+    private final UserRepo         userRepo;
+    private final OrderInfoRepo    orderInfoRepo;
+    private final Environment      environment;
+    private final WxPayService     wxPayService;
+    private final WxFeeRepo        wxFeeRepo;
+    private final OrderInfoService orderInfoService;
 
     /*
     微信支付
@@ -102,7 +103,7 @@ public class ConsumptionService {
         }
 
 //        orderInfoService.completed(orderId, transactionId);
-        orderInfoService.completed1(orderId, transactionId);
+        orderInfoService.completed1(orderId, transactionId, PayMethod.WEIXIN);
     }
 
 

+ 18 - 3
src/main/java/com/izouma/jiashanxia/service/OrderInfoService.java

@@ -172,12 +172,13 @@ public class OrderInfoService {
         }
     }
 
-    public void completed1(Long orderInfoId, String transactionId) {
+    public void completed1(Long orderInfoId, String transactionId, PayMethod payMethod) {
         // 修改订单状态
         OrderInfo order = orderInfoRepo.findById(orderInfoId).orElseThrow(new BusinessException("无订单"));
         order.setStatus(OrderInfoStatus.PAID);
         order.setTransactionId(transactionId);
         order.setPaidAt(LocalDateTime.now());
+        order.setPayMethod(payMethod);
         orderInfoRepo.save(order);
 
         Integer num = order.getNum();
@@ -661,21 +662,35 @@ public class OrderInfoService {
     /*
     购物车一起付款
      */
-    public void batchByCart(List<Long> shoppingCartIds,PayMethod payMethod) {
+    public void batchByCart(List<Long> shoppingCartIds) {
         List<ShoppingCart> carts = shoppingCartRepo.findAllById(shoppingCartIds);
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
         String localTime = df.format(LocalDateTime.now());
+        Set<Long> packageIds = carts.stream().map(ShoppingCart::getPackageId).collect(Collectors.toSet());
+        Map<Long, Package> packageMap = packageRepo.findAllById(packageIds)
+                .stream()
+                .collect(Collectors.toMap(Package::getId, aPackage -> aPackage));
         carts.forEach(cart -> {
+            // 判断套餐库存
+            Package aPackage = packageMap.get(cart.getPackageId());
+            if (cart.getNum() > aPackage.getInventory()) {
+                throw new BusinessException("库存不足");
+            }
             OrderInfo orderInfo = new OrderInfo();
             BeanUtil.copyProperties(cart, orderInfo);
             orderInfo.setStatus(OrderInfoStatus.UNPAID);
-            orderInfo.setPayMethod(payMethod);
+//            orderInfo.setPayMethod(payMethod);
             // 订单号
             String orderNum = String.format("%05d", orderInfoRepo.orderNum() + 1);
             orderInfo.setOrderNumber(localTime + orderNum);
             // 规格
             if (ObjectUtil.isNotNull(cart.getStockId())) {
                 Stock stock = stockRepo.findById(cart.getStockId()).orElseThrow(new BusinessException("无规格"));
+                // 判断规格库存
+                if (cart.getNum() > stock.getInventory()) {
+                    throw new BusinessException("库存不足");
+                }
+
                 orderInfo.setSpecification(stock.getSpecification());
                 orderInfo.setDay(stock.getDay());
                 orderInfo.setPrice(stock.getPrice());

+ 3 - 2
src/main/java/com/izouma/jiashanxia/web/OrderInfoController.java

@@ -101,10 +101,11 @@ public class OrderInfoController extends BaseController {
     }
 
     @ApiOperation("多个购物车下单")
-    public void batchByCart(String cartIds, PayMethod payMethod) {
+    @PostMapping("/batchByCart")
+    public void batchByCart(@RequestParam String cartIds) {
         LongArrayConverter converter = new LongArrayConverter();
         List<Long> shoppingCart = converter.convertToEntityAttribute(cartIds);
-        orderInfoService.batchByCart(shoppingCart, payMethod);
+        orderInfoService.batchByCart(shoppingCart);
     }
 }
 

+ 11 - 1
src/main/java/com/izouma/jiashanxia/web/ShoppingCartController.java

@@ -1,11 +1,15 @@
 package com.izouma.jiashanxia.web;
+
 import com.izouma.jiashanxia.domain.ShoppingCart;
+import com.izouma.jiashanxia.dto.CreateCart;
 import com.izouma.jiashanxia.service.ShoppingCartService;
 import com.izouma.jiashanxia.dto.PageQuery;
 import com.izouma.jiashanxia.exception.BusinessException;
 import com.izouma.jiashanxia.repo.ShoppingCartRepo;
 import com.izouma.jiashanxia.utils.ObjUtils;
+import com.izouma.jiashanxia.utils.SecurityUtils;
 import com.izouma.jiashanxia.utils.excel.ExcelUtils;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -20,7 +24,7 @@ import java.util.List;
 @AllArgsConstructor
 public class ShoppingCartController extends BaseController {
     private ShoppingCartService shoppingCartService;
-    private ShoppingCartRepo shoppingCartRepo;
+    private ShoppingCartRepo    shoppingCartRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -56,5 +60,11 @@ public class ShoppingCartController extends BaseController {
         List<ShoppingCart> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
+
+    @PostMapping("/add")
+    @ApiOperation("加入购物车")
+    public ShoppingCart add(@RequestBody CreateCart cart) {
+        return shoppingCartService.save(cart, SecurityUtils.getAuthenticatedUser().getId());
+    }
 }
 

+ 7 - 2
src/test/java/com/izouma/jiashanxia/service/OrderInfoServiceTest.java

@@ -30,7 +30,7 @@ public class OrderInfoServiceTest {
 
     @Test
     public void completed() {
-        orderInfoService.completed1(1043L, "11000001");
+        orderInfoService.completed1(1043L, "11000001", PayMethod.WEIXIN);
     }
 
     @Test
@@ -88,8 +88,13 @@ public class OrderInfoServiceTest {
     public void backAll() {
         PageQuery pageQuery = new PageQuery();
         Map<String, Object> query = pageQuery.getQuery();
-        query.put("attractionsId",955L);
+        query.put("attractionsId", 955L);
         Page<OrderInfo> orderInfos = orderInfoService.backAll(pageQuery);
         orderInfos.getContent().forEach(System.out::println);
     }
+
+    @Test
+    public void test3() {
+        orderInfoService.batchByCart(Collections.singletonList(1536L));
+    }
 }

+ 28 - 0
src/test/java/com/izouma/jiashanxia/service/ShoppingCartServiceTest.java

@@ -0,0 +1,28 @@
+package com.izouma.jiashanxia.service;
+
+import com.izouma.jiashanxia.ApplicationTests;
+import com.izouma.jiashanxia.domain.ShoppingCart;
+import com.izouma.jiashanxia.dto.CreateCart;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+public class ShoppingCartServiceTest extends ApplicationTests {
+
+    @Autowired
+    private ShoppingCartService shoppingCartService;
+
+    @Test
+    public void save() {
+        CreateCart createCart = CreateCart.builder()
+                .stockId(1009L)
+                .packageId(17L)
+                .num(1)
+                .buyPhone("18200000000")
+                .realName("XXX")
+                .IDNo("32011100000")
+                .build();
+        ShoppingCart save = shoppingCartService.save(createCart, 916L);
+        System.out.println(save);
+    }
+}