CourseOrderServiceImpl.java 4.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package cn.seecoder.courselearning.serviceimpl;
  2. import cn.seecoder.courselearning.mapperservice.CourseOrderMapper;
  3. import cn.seecoder.courselearning.mapperservice.UserMapper;
  4. import cn.seecoder.courselearning.po.CourseOrder;
  5. import cn.seecoder.courselearning.po.User;
  6. import cn.seecoder.courselearning.service.CourseOrderService;
  7. import cn.seecoder.courselearning.util.Constant;
  8. import cn.seecoder.courselearning.vo.CourseOrderVO;
  9. import cn.seecoder.courselearning.vo.ResultVO;
  10. import org.springframework.stereotype.Service;
  11. import javax.annotation.Resource;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. @Service
  15. public class CourseOrderServiceImpl implements CourseOrderService {
  16. @Resource
  17. CourseOrderMapper orderMapper;
  18. @Resource
  19. UserMapper userMapper;
  20. @Override
  21. public ResultVO<CourseOrderVO> insertCourseOrder(CourseOrderVO orderVO) {
  22. CourseOrder order;
  23. try{
  24. if((order = orderMapper.queryMostRecentOrder(orderVO.getUserId(), orderVO.getCourseId())) != null
  25. && !order.getStatus().equals(Constant.ORDER_STATUS_CANCEL)){
  26. return new ResultVO<>(Constant.REQUEST_FAIL, "当前用户已经购买过此课程,或者有上一笔未支付的订单", new CourseOrderVO(order));
  27. }
  28. order = new CourseOrder(orderVO);
  29. Integer status = order.getStatus();
  30. if(status.equals(Constant.ORDER_STATUS_UNPAID)){
  31. // 当订单状态为未支付时,检查用户余额是否足够
  32. User user = userMapper.selectByPrimaryKey(order.getUserId());
  33. if(user.getBalance()>=orderVO.getCost()){
  34. userMapper.decreaseBalance(user.getId(), order.getCost());
  35. // 支付成功,将订单存入数据库
  36. order.setStatus(Constant.ORDER_STATUS_SUCCESS);
  37. orderMapper.insert(order);
  38. }else {
  39. // 将订单存入数据库
  40. orderMapper.insert(order);
  41. // 若用户余额不足,则不保存订单,返回失败信息
  42. return new ResultVO<>(Constant.REQUEST_FAIL, "用户余额不足,未支付订单已保存", new CourseOrderVO(order));
  43. }
  44. }else if(status.equals(Constant.ORDER_STATUS_SUCCESS) || status.equals(Constant.ORDER_STATUS_WAIT)) {
  45. // 若订单状态为已支付或等待发货,则直接存入数据库
  46. orderMapper.insert(order);
  47. return new ResultVO<>(Constant.REQUEST_SUCCESS, "订单保存成功", new CourseOrderVO(order));
  48. }
  49. }catch (Exception e){
  50. return new ResultVO<>(Constant.REQUEST_FAIL, e.toString());
  51. }
  52. return new ResultVO<>(Constant.REQUEST_SUCCESS, "课程购买成功", new CourseOrderVO(order));
  53. }
  54. @Override
  55. public ResultVO<CourseOrderVO> updateCourseOrder(Integer orderId, Integer orderStatus) {
  56. CourseOrder order = orderMapper.selectByPrimaryKey(orderId);
  57. if(order == null) return new ResultVO<>(Constant.REQUEST_FAIL, "找不到当前订单!");
  58. if(order.getStatus().equals(Constant.ORDER_STATUS_SUCCESS))
  59. return new ResultVO<>(Constant.REQUEST_FAIL, "当前订单已完成交易,不支持再次修改订单状态!", new CourseOrderVO(order));
  60. if((orderStatus.equals(Constant.ORDER_STATUS_SUCCESS)||orderStatus.equals(Constant.ORDER_STATUS_WAIT)) &&
  61. order.getStatus().equals(Constant.ORDER_STATUS_UNPAID)){
  62. // 当订单原始状态为待支付 并且此时为支付成功时,需扣除用户余额
  63. User user = userMapper.selectByPrimaryKey(order.getUserId());
  64. if(user.getBalance()>=order.getCost()){
  65. userMapper.decreaseBalance(user.getId(), order.getCost());
  66. }else
  67. return new ResultVO<>(Constant.REQUEST_FAIL, "用户余额不足");
  68. }
  69. order.setStatus(orderStatus);
  70. orderMapper.updateByPrimaryKey(order);
  71. return new ResultVO<>(Constant.REQUEST_SUCCESS, "课程购买成功", new CourseOrderVO(order));
  72. }
  73. @Override
  74. public List<CourseOrderVO> getCourseOrders(Integer uid) {
  75. List<CourseOrderVO> ret = new ArrayList<>();
  76. List<CourseOrder> orderList = orderMapper.selectByUserId(uid);
  77. for(CourseOrder order: orderList){
  78. ret.add(new CourseOrderVO(order));
  79. }
  80. return ret;
  81. }
  82. }