|
|
@@ -2,6 +2,7 @@ package cn.seecoder.courselearning.serviceimpl.order;
|
|
|
|
|
|
import cn.seecoder.courselearning.mapperservice.*;
|
|
|
import cn.seecoder.courselearning.po.*;
|
|
|
+import cn.seecoder.courselearning.service.coupon.CouponService;
|
|
|
import cn.seecoder.courselearning.service.course.CourseService;
|
|
|
import cn.seecoder.courselearning.service.order.CourseOrderService;
|
|
|
import cn.seecoder.courselearning.service.user.UserService;
|
|
|
@@ -24,57 +25,13 @@ public class CourseOrderServiceImpl implements CourseOrderService {
|
|
|
@Resource
|
|
|
CourseOrderMapper orderMapper;
|
|
|
@Resource
|
|
|
- UserMapper userMapper;
|
|
|
- @Resource
|
|
|
CourseOrderCouponMapper courseOrderCouponMapper;
|
|
|
@Resource
|
|
|
- CouponMapper couponMapper;
|
|
|
+ UserService userService;
|
|
|
@Resource
|
|
|
- UserCouponMapper userCouponMapper;
|
|
|
- @Resource
|
|
|
- CourseMapper courseMapper;
|
|
|
-
|
|
|
+ CouponService couponService;
|
|
|
@Resource
|
|
|
CourseService courseService;
|
|
|
- @Resource
|
|
|
- UserService userService;
|
|
|
-
|
|
|
- @Override
|
|
|
- public ResultVO<CourseOrderVO> insertCourseOrder(CourseOrderVO orderVO) {
|
|
|
- CourseOrder order;
|
|
|
- try{
|
|
|
- if((order = orderMapper.queryMostRecentOrder(orderVO.getUserId(), orderVO.getCourseId())) != null
|
|
|
- && !order.getStatus().equals(Constant.ORDER_STATUS_CANCEL)){
|
|
|
- return new ResultVO<>(Constant.REQUEST_FAIL, "当前用户已经购买过此课程,或者有上一笔未支付的订单", new CourseOrderVO(order));
|
|
|
- }
|
|
|
- order = new CourseOrder(orderVO);
|
|
|
- Integer status = order.getStatus();
|
|
|
- if(status.equals(Constant.ORDER_STATUS_UNPAID)){
|
|
|
- // 当订单状态为未支付时,检查用户余额是否足够
|
|
|
- User user = userMapper.selectByPrimaryKey(order.getUserId());
|
|
|
- if(user.getBalance()>=orderVO.getCost()){
|
|
|
- userMapper.decreaseBalance(user.getId(), order.getCost());
|
|
|
- // 支付成功,将订单存入数据库
|
|
|
- order.setStatus(Constant.ORDER_STATUS_SUCCESS);
|
|
|
- orderMapper.insert(order);
|
|
|
- updateUserCoupon(order.getId(), user.getId());
|
|
|
- }else {
|
|
|
- // 将订单存入数据库
|
|
|
- orderMapper.insert(order);
|
|
|
- // 若用户余额不足,则不保存订单,返回失败信息
|
|
|
- return new ResultVO<>(Constant.REQUEST_FAIL, "用户余额不足,未支付订单已保存", new CourseOrderVO(order));
|
|
|
- }
|
|
|
- }else if(status.equals(Constant.ORDER_STATUS_SUCCESS) || status.equals(Constant.ORDER_STATUS_WAIT)) {
|
|
|
- // 若订单状态为已支付或等待发货,则直接存入数据库
|
|
|
- orderMapper.insert(order);
|
|
|
- updateUserCoupon(order.getId(), order.getUserId());
|
|
|
- return new ResultVO<>(Constant.REQUEST_SUCCESS, "订单保存成功", new CourseOrderVO(order));
|
|
|
- }
|
|
|
- }catch (Exception e){
|
|
|
- return new ResultVO<>(Constant.REQUEST_FAIL, e.toString());
|
|
|
- }
|
|
|
- return new ResultVO<>(Constant.REQUEST_SUCCESS, "课程购买成功", new CourseOrderVO(order));
|
|
|
- }
|
|
|
|
|
|
@Override
|
|
|
public ResultVO<CourseOrderVO> updateCourseOrder(Integer orderId, Integer orderStatus) {
|
|
|
@@ -85,9 +42,9 @@ public class CourseOrderServiceImpl implements CourseOrderService {
|
|
|
if((orderStatus.equals(Constant.ORDER_STATUS_SUCCESS)||orderStatus.equals(Constant.ORDER_STATUS_WAIT)) &&
|
|
|
order.getStatus().equals(Constant.ORDER_STATUS_UNPAID)){
|
|
|
// 当订单原始状态为待支付 并且此时为支付成功时,需扣除用户余额
|
|
|
- User user = userMapper.selectByPrimaryKey(order.getUserId());
|
|
|
+ UserVO user = userService.getUser(order.getUserId());
|
|
|
if(user.getBalance()>=order.getCost()){
|
|
|
- userMapper.decreaseBalance(user.getId(), order.getCost());
|
|
|
+ userService.decreaseBalance(user.getId(), order.getCost());
|
|
|
updateUserCoupon(orderId, user.getId());
|
|
|
}else
|
|
|
return new ResultVO<>(Constant.REQUEST_FAIL, "用户余额不足");
|
|
|
@@ -104,15 +61,15 @@ public class CourseOrderServiceImpl implements CourseOrderService {
|
|
|
*/
|
|
|
public void updateUserCoupon(Integer orderId, Integer userId) {
|
|
|
// 更新用户优惠券状态
|
|
|
- List<Coupon> orderCoupons = couponMapper.selectByOrderId(orderId);
|
|
|
- List<UserCoupon> userCouponList = userCouponMapper.selectByUserId(userId);
|
|
|
+ List<Coupon> orderCoupons = couponService.getByOrderId(orderId);
|
|
|
+ List<UserCoupon> userCouponList = couponService.getUserCouponsByUserId(userId);
|
|
|
for (UserCoupon userCoupon : userCouponList) {
|
|
|
if (orderCoupons.stream().anyMatch(coupon -> coupon.getId().equals(userCoupon.getCouponId()))) {
|
|
|
if (userCoupon.getNums() == 1) {
|
|
|
- userCouponMapper.deleteByUserIdAndCouponId(userId, userCoupon.getCouponId());
|
|
|
+ couponService.deleteUserCoupon(userId, userCoupon.getCouponId());
|
|
|
} else if (userCoupon.getNums() > 1) {
|
|
|
userCoupon.setNums(userCoupon.getNums() - 1);
|
|
|
- userCouponMapper.update(userCoupon);
|
|
|
+ couponService.updateUserCoupon(userCoupon);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -125,7 +82,7 @@ public class CourseOrderServiceImpl implements CourseOrderService {
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
for(CourseOrder order: orderList){
|
|
|
// 获取订单对应的优惠券
|
|
|
- List<Coupon> courseOrderCoupons = couponMapper.selectByOrderId(order.getId());
|
|
|
+ List<Coupon> courseOrderCoupons = couponService.getByOrderId(order.getId());
|
|
|
List<Coupon> coupons = new ArrayList<>();
|
|
|
boolean updated = false;
|
|
|
// 查询的时候更新一下,以防优惠券在这个时候过期了
|
|
|
@@ -156,7 +113,7 @@ public class CourseOrderServiceImpl implements CourseOrderService {
|
|
|
*/
|
|
|
@Override
|
|
|
public ResultVO<Boolean> useCoupon(CourseOrderVO orderVO, Integer couponId) {
|
|
|
- Coupon coupon = couponMapper.selectByPrimaryKey(couponId);
|
|
|
+ Coupon coupon = couponService.getByPrimaryKey(couponId);
|
|
|
if (coupon == null) {
|
|
|
return new ResultVO<>(Constant.REQUEST_FAIL, "错误的优惠券");
|
|
|
}
|
|
|
@@ -165,12 +122,12 @@ public class CourseOrderServiceImpl implements CourseOrderService {
|
|
|
return new ResultVO<>(Constant.REQUEST_FAIL, "优惠券过期或还未能使用");
|
|
|
}
|
|
|
// 判断用户有没有该优惠券
|
|
|
- UserCoupon userCoupon = userCouponMapper.selectByCouponIdAndUserId(couponId, orderVO.getUserId());
|
|
|
+ UserCoupon userCoupon = couponService.getUserCouponByCouponIdAndUserId(couponId, orderVO.getUserId());
|
|
|
if (userCoupon == null) {
|
|
|
return new ResultVO<>(Constant.REQUEST_FAIL, "尚未拥有该优惠券");
|
|
|
}
|
|
|
// 判断能否使用
|
|
|
- Course course = courseMapper.selectByPrimaryKey(orderVO.getCourseId());
|
|
|
+ Course course = courseService.getByPrimaryKey(orderVO.getCourseId());
|
|
|
if (!coupon.getScope().canUse(course, coupon)) {
|
|
|
return new ResultVO<>(Constant.REQUEST_FAIL, "该课程无法使用该优惠券");
|
|
|
}
|
|
|
@@ -252,8 +209,18 @@ public class CourseOrderServiceImpl implements CourseOrderService {
|
|
|
return new ResultVO<>(Constant.REQUEST_SUCCESS,"创建成功",courseOrderVO);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public CourseOrder queryMostRecentOrder(Integer uid, Integer courseId) {
|
|
|
+ return orderMapper.queryMostRecentOrder(uid, courseId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CourseOrder getByPrimaryKey(Integer orderId) {
|
|
|
+ return orderMapper.selectByPrimaryKey(orderId);
|
|
|
+ }
|
|
|
+
|
|
|
public void updateBestCost(CourseOrderVO orderVO) {
|
|
|
- List<Coupon> usedCoupons = couponMapper.selectByOrderId(orderVO.getId());
|
|
|
+ List<Coupon> usedCoupons = couponService.getByOrderId(orderVO.getId());
|
|
|
boolean[] used = new boolean[usedCoupons.size()];
|
|
|
Arrays.fill(used, false);
|
|
|
// 这里通过dfs算法计算最优价格,而IntHolder为可变的int,用于记录最小值
|