feat(新增): 确认订单
This commit is contained in:
parent
f70211ce62
commit
e5e132a9cb
|
@ -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" charset="UTF-8" />
|
||||||
<file url="file://$PROJECT_DIR$/model/src/main/resources-filtered" 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-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-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-region-client/src/main/java" charset="UTF-8" />
|
||||||
<file url="file://$PROJECT_DIR$/service-client/service-search-client/src/main/java" charset="UTF-8" />
|
<file url="file://$PROJECT_DIR$/service-client/service-search-client/src/main/java" charset="UTF-8" />
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</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" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="PrettierConfiguration">
|
|
||||||
<option name="myRunOnSave" value="true" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
|
@ -19,7 +19,7 @@ public class CodeGet {
|
||||||
// 全局配置
|
// 全局配置
|
||||||
GlobalConfig gc = new GlobalConfig();
|
GlobalConfig gc = new GlobalConfig();
|
||||||
// TODO 需要修改路径名称
|
// 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.setServiceName("%sService"); // 去掉Service接口的首字母I
|
||||||
gc.setAuthor("bunny");
|
gc.setAuthor("bunny");
|
||||||
|
|
|
@ -34,4 +34,5 @@ public class MessageConstant {
|
||||||
public static final String DATA_IS_EMPTY = "数据为空";
|
public static final String DATA_IS_EMPTY = "数据为空";
|
||||||
public static final String STOCK_LESS = "库存不足";
|
public static final String STOCK_LESS = "库存不足";
|
||||||
public static final String SKU_NUM_CANNOT_BE_LESS = "商品数量不能再少了";
|
public static final String SKU_NUM_CANNOT_BE_LESS = "商品数量不能再少了";
|
||||||
|
public static final String CART_IS_EMPTY = "购物车为空";
|
||||||
}
|
}
|
||||||
|
|
5
pom.xml
5
pom.xml
|
@ -44,6 +44,11 @@
|
||||||
<!--配置dependencyManagement锁定依赖的版本-->
|
<!--配置dependencyManagement锁定依赖的版本-->
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.30</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.cloud</groupId>
|
<groupId>org.springframework.cloud</groupId>
|
||||||
<artifactId>spring-cloud-dependencies</artifactId>
|
<artifactId>spring-cloud-dependencies</artifactId>
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
<module>service-user-client</module>
|
<module>service-user-client</module>
|
||||||
<module>service-search-client</module>
|
<module>service-search-client</module>
|
||||||
<module>service-activity-client</module>
|
<module>service-activity-client</module>
|
||||||
|
<module>service-cart-client</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -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>
|
|
@ -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);
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package com.atguigu.ssyx.cart.controller;
|
package com.atguigu.ssyx.cart.controller;
|
||||||
|
|
||||||
|
|
||||||
import com.atguigu.ssyx.cart.service.CartInfoService;
|
import com.atguigu.ssyx.cart.service.CartInfoService;
|
||||||
import com.atguigu.ssyx.client.ActivityFeignClient;
|
import com.atguigu.ssyx.client.ActivityFeignClient;
|
||||||
import com.atguigu.ssyx.common.context.BaseContext;
|
import com.atguigu.ssyx.common.context.BaseContext;
|
||||||
|
@ -13,10 +14,11 @@ import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
@Api(tags = "购物车相关接口")
|
@Api(tags = "购物车相关接口")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/cart")
|
@RequestMapping("/api/cart")
|
||||||
public class CartApiController {
|
public class CartInfoController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private CartInfoService cartInfoService;
|
private CartInfoService cartInfoService;
|
||||||
@Autowired
|
@Autowired
|
|
@ -71,4 +71,12 @@ public interface CartInfoService {
|
||||||
* @param isChecked 是否选中
|
* @param isChecked 是否选中
|
||||||
*/
|
*/
|
||||||
void batchCheckCart(List<Long> skuIdList, Long userId, Integer isChecked);
|
void batchCheckCart(List<Long> skuIdList, Long userId, Integer isChecked);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 根据用户Id查询购物车列表
|
||||||
|
* @param userId 用户ID
|
||||||
|
* @return 购物车列表
|
||||||
|
*/
|
||||||
|
List<CartInfo> getCartCheckedList(Long userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,10 +16,8 @@ import org.springframework.data.redis.core.BoundHashOperations;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Comparator;
|
import java.util.stream.Collectors;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class CartInfoServiceImpl implements CartInfoService {
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,24 @@
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.atguigu</groupId>
|
<groupId>com.atguigu</groupId>
|
||||||
<artifactId>service-product-client</artifactId>
|
<artifactId>service-user-client</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</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>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
package com.atguigu.ssyx.order.controller;
|
package com.atguigu.ssyx.order.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import com.atguigu.ssyx.common.context.BaseContext;
|
||||||
import com.atguigu.ssyx.common.result.Result;
|
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.order.service.OrderInfoService;
|
||||||
import com.atguigu.ssyx.vo.order.OrderConfirmVo;
|
import com.atguigu.ssyx.vo.order.OrderConfirmVo;
|
||||||
|
import com.atguigu.ssyx.vo.order.OrderSubmitVo;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import java.util.List;
|
||||||
|
|
||||||
@Api(value = "Order管理", tags = "Order管理")
|
@Api(value = "Order管理", tags = "Order管理")
|
||||||
@RestController
|
@RestController
|
||||||
|
@ -24,5 +28,20 @@ public class OrderInfoController {
|
||||||
OrderConfirmVo vo = orderInfoService.confirmOrder();
|
OrderConfirmVo vo = orderInfoService.confirmOrder();
|
||||||
return Result.success(vo);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.atguigu.ssyx.order.service;
|
||||||
|
|
||||||
import com.atguigu.ssyx.model.order.OrderInfo;
|
import com.atguigu.ssyx.model.order.OrderInfo;
|
||||||
import com.atguigu.ssyx.vo.order.OrderConfirmVo;
|
import com.atguigu.ssyx.vo.order.OrderConfirmVo;
|
||||||
|
import com.atguigu.ssyx.vo.order.OrderSubmitVo;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
public interface OrderInfoService extends IService<OrderInfo> {
|
public interface OrderInfoService extends IService<OrderInfo> {
|
||||||
|
@ -12,4 +13,19 @@ public interface OrderInfoService extends IService<OrderInfo> {
|
||||||
* @return 订单确认内容
|
* @return 订单确认内容
|
||||||
*/
|
*/
|
||||||
OrderConfirmVo confirmOrder();
|
OrderConfirmVo confirmOrder();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 获取订单详情
|
||||||
|
* @param orderId 订单ID
|
||||||
|
* @return 订单详情
|
||||||
|
*/
|
||||||
|
OrderInfo getOrderInfoById(Long orderId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 生成订单
|
||||||
|
* @param vo 订单提交信息
|
||||||
|
* @param userId 用户ID
|
||||||
|
* @return 订单编号
|
||||||
|
*/
|
||||||
|
Long submitOrder(OrderSubmitVo vo, Long userId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,36 @@
|
||||||
package com.atguigu.ssyx.order.service.impl;
|
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.model.order.OrderInfo;
|
||||||
import com.atguigu.ssyx.order.mapper.OrderInfoMapper;
|
import com.atguigu.ssyx.order.mapper.OrderInfoMapper;
|
||||||
import com.atguigu.ssyx.order.service.OrderInfoService;
|
import com.atguigu.ssyx.order.service.OrderInfoService;
|
||||||
import com.atguigu.ssyx.vo.order.OrderConfirmVo;
|
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 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 org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo> implements OrderInfoService {
|
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
|
@Override
|
||||||
public OrderConfirmVo confirmOrder() {
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue