feat(新增): 确认订单

This commit is contained in:
bunny 2024-04-11 10:05:12 +08:00
parent f70211ce62
commit e5e132a9cb
17 changed files with 221 additions and 17 deletions

View File

@ -15,6 +15,7 @@
<file url="file://$PROJECT_DIR$/model/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/model/src/main/resources-filtered" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/service-client/service-activity-client/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/service-client/service-cart-client/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/service-client/service-product-client/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/service-client/service-region-client/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/service-client/service-search-client/src/main/java" charset="UTF-8" />

View File

@ -14,7 +14,7 @@
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PrettierConfiguration">
<option name="myRunOnSave" value="true" />
</component>
</project>

View File

@ -19,7 +19,7 @@ public class CodeGet {
// 全局配置
GlobalConfig gc = new GlobalConfig();
// TODO 需要修改路径名称
gc.setOutputDir("G:\\File\\Java\\ssyx\\ssyx-parent\\service\\service-order" + "/src/main/java");
gc.setOutputDir("F:\\File\\Java\\ssyx\\ssyx-parent\\service\\service-order" + "/src/main/java");
gc.setServiceName("%sService"); // 去掉Service接口的首字母I
gc.setAuthor("bunny");

View File

@ -34,4 +34,5 @@ public class MessageConstant {
public static final String DATA_IS_EMPTY = "数据为空";
public static final String STOCK_LESS = "库存不足";
public static final String SKU_NUM_CANNOT_BE_LESS = "商品数量不能再少了";
public static final String CART_IS_EMPTY = "购物车为空";
}

View File

@ -44,6 +44,11 @@
<!--配置dependencyManagement锁定依赖的版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>

View File

@ -18,6 +18,7 @@
<module>service-user-client</module>
<module>service-search-client</module>
<module>service-activity-client</module>
<module>service-cart-client</module>
</modules>
<properties>

View File

@ -0,0 +1,23 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.atguigu</groupId>
<artifactId>service-client</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>service-cart-client</artifactId>
<packaging>jar</packaging>
<name>service-cart-client</name>
<url>https://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
</dependencies>
</project>

View File

@ -0,0 +1,15 @@
package com.atguigu.ssyx.client.cart;
import com.atguigu.ssyx.model.order.CartInfo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
@FeignClient(value = "service-cart", path = "/api/cart")
public interface CartFeignClient {
// 根据用户Id查询购物车列表
@GetMapping("inner/getCartCheckedList/{userId}")
List<CartInfo> getCartCheckedList(@PathVariable Long userId);
}

View File

@ -0,0 +1,27 @@
package com.atguigu.ssyx.cart.api;
import com.atguigu.ssyx.cart.service.CartInfoService;
import com.atguigu.ssyx.model.order.CartInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "购物车相关接口")
@RestController
@RequestMapping("/api/cart")
public class CartApiController {
@Autowired
private CartInfoService cartInfoService;
@ApiOperation(value = "根据用户Id查询购物车列表")
@GetMapping("inner/getCartCheckedList/{userId}")
public List<CartInfo> getCartCheckedList(@PathVariable Long userId) {
return cartInfoService.getCartCheckedList(userId);
}
}

View File

@ -1,5 +1,6 @@
package com.atguigu.ssyx.cart.controller;
import com.atguigu.ssyx.cart.service.CartInfoService;
import com.atguigu.ssyx.client.ActivityFeignClient;
import com.atguigu.ssyx.common.context.BaseContext;
@ -13,10 +14,11 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(tags = "购物车相关接口")
@RestController
@RequestMapping("/api/cart")
public class CartApiController {
public class CartInfoController {
@Autowired
private CartInfoService cartInfoService;
@Autowired

View File

@ -71,4 +71,12 @@ public interface CartInfoService {
* @param isChecked 是否选中
*/
void batchCheckCart(List<Long> skuIdList, Long userId, Integer isChecked);
/**
* * 根据用户Id查询购物车列表
* @param userId 用户ID
* @return 购物车列表
*/
List<CartInfo> getCartCheckedList(Long userId);
}

View File

@ -16,10 +16,8 @@ import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class CartInfoServiceImpl implements CartInfoService {
@ -223,4 +221,24 @@ public class CartInfoServiceImpl implements CartInfoService {
}
});
}
/**
* * 根据用户Id查询购物车列表
*
* @param userId 用户ID
* @return 购物车列表
*/
@Override
public List<CartInfo> getCartCheckedList(Long userId) {
String cartKey = module.getCartKey(userId);
BoundHashOperations<String, String , CartInfo> hashOperations = redisTemplate.boundHashOps(cartKey);
List<CartInfo> cartInfoList = hashOperations.values();
// 当购物车为空时抛出异常
if (cartInfoList==null) {
throw new BunnyException(MessageConstant.CART_IS_EMPTY);
}
cartInfoList = cartInfoList.stream().filter(cartInfo -> cartInfo.getIsChecked() == 1).collect(Collectors.toList());
return cartInfoList;
}
}

View File

@ -20,8 +20,24 @@
<dependencies>
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>service-product-client</artifactId>
<artifactId>service-user-client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>service-cart-client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>service-activity-client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@ -1,15 +1,19 @@
package com.atguigu.ssyx.order.controller;
import com.atguigu.ssyx.common.context.BaseContext;
import com.atguigu.ssyx.common.result.Result;
import com.atguigu.ssyx.model.order.CartInfo;
import com.atguigu.ssyx.model.order.OrderInfo;
import com.atguigu.ssyx.order.service.OrderInfoService;
import com.atguigu.ssyx.vo.order.OrderConfirmVo;
import com.atguigu.ssyx.vo.order.OrderSubmitVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(value = "Order管理", tags = "Order管理")
@RestController
@ -24,5 +28,20 @@ public class OrderInfoController {
OrderConfirmVo vo = orderInfoService.confirmOrder();
return Result.success(vo);
}
@ApiOperation("获取订单详情")
@GetMapping("auth/getOrderInfoById/{orderId}")
public Result<OrderInfo> getOrderInfoById(@PathVariable Long orderId) {
OrderInfo orderInfo = orderInfoService.getOrderInfoById(orderId);
return Result.success(orderInfo);
}
@ApiOperation("生成订单")
@PostMapping("auth/submitOrder")
public Result<Long> submitOrder(@RequestBody OrderSubmitVo vo) {
Long userId = BaseContext.getUserId();
Long orderId = orderInfoService.submitOrder(vo, userId);
return Result.success(orderId);
}
}

View File

@ -2,6 +2,7 @@ package com.atguigu.ssyx.order.service;
import com.atguigu.ssyx.model.order.OrderInfo;
import com.atguigu.ssyx.vo.order.OrderConfirmVo;
import com.atguigu.ssyx.vo.order.OrderSubmitVo;
import com.baomidou.mybatisplus.extension.service.IService;
public interface OrderInfoService extends IService<OrderInfo> {
@ -12,4 +13,19 @@ public interface OrderInfoService extends IService<OrderInfo> {
* @return 订单确认内容
*/
OrderConfirmVo confirmOrder();
/**
* * 获取订单详情
* @param orderId 订单ID
* @return 订单详情
*/
OrderInfo getOrderInfoById(Long orderId);
/**
* * 生成订单
* @param vo 订单提交信息
* @param userId 用户ID
* @return 订单编号
*/
Long submitOrder(OrderSubmitVo vo, Long userId);
}

View File

@ -1,14 +1,36 @@
package com.atguigu.ssyx.order.service.impl;
import com.atguigu.ssyx.client.ActivityFeignClient;
import com.atguigu.ssyx.client.cart.CartFeignClient;
import com.atguigu.ssyx.client.user.UserFeignClient;
import com.atguigu.ssyx.common.constant.RedisConst;
import com.atguigu.ssyx.common.context.BaseContext;
import com.atguigu.ssyx.model.order.CartInfo;
import com.atguigu.ssyx.model.order.OrderInfo;
import com.atguigu.ssyx.order.mapper.OrderInfoMapper;
import com.atguigu.ssyx.order.service.OrderInfoService;
import com.atguigu.ssyx.vo.order.OrderConfirmVo;
import com.atguigu.ssyx.vo.order.OrderSubmitVo;
import com.atguigu.ssyx.vo.user.LeaderAddressVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@Service
public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo> implements OrderInfoService {
@Autowired
private UserFeignClient userFeignClient;
@Autowired
private CartFeignClient cartFeignClient;
@Autowired
private ActivityFeignClient activityFeignClient;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
* * 确认订单
@ -17,6 +39,42 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
*/
@Override
public OrderConfirmVo confirmOrder() {
Long userId = BaseContext.getUserId();
LeaderAddressVo leaderAddressVo = userFeignClient.getLeaderAddressByUserId(userId);
// 得到用户想要购买的商品
List<CartInfo> cartInfoList = cartFeignClient.getCartCheckedList(userId);
// 生成订单Id
String orderNo = System.currentTimeMillis() + UUID.randomUUID().toString();
// 设置过期时间一天
redisTemplate.opsForValue().set(RedisConst.ORDER_REPEAT + orderNo, orderNo, 24, TimeUnit.HOURS);
// 获取购物车满足条件的促销与优惠券信息
OrderConfirmVo orderTradeVo = activityFeignClient.findCartActivityAndCoupon(cartInfoList, userId);
orderTradeVo.setLeaderAddressVo(leaderAddressVo);
orderTradeVo.setOrderNo(orderNo);
return orderTradeVo;
}
/**
* * 获取订单详情
*
* @param orderId 订单ID
* @return 订单详情
*/
@Override
public OrderInfo getOrderInfoById(Long orderId) {
return null;
}
/**
* * 生成订单
*
* @param vo 订单提交信息
* @param userId 用户ID
* @return 订单编号
*/
@Override
public Long submitOrder(OrderSubmitVo vo, Long userId) {
return null;
}
}