OrderServiceImpl.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package cn.hobbystocks.auc.service.impl;
  2. import cn.hobbystocks.auc.common.exception.ServiceException;
  3. import cn.hobbystocks.auc.common.utils.DateUtils;
  4. import cn.hobbystocks.auc.domain.Auction;
  5. import cn.hobbystocks.auc.domain.Lot;
  6. import cn.hobbystocks.auc.domain.Order;
  7. import cn.hobbystocks.auc.dto.OrderApiResponse;
  8. import cn.hobbystocks.auc.dto.SkuOrderDTO;
  9. import cn.hobbystocks.auc.forest.OrderApi;
  10. import cn.hobbystocks.auc.mapper.OrderMapper;
  11. import cn.hobbystocks.auc.service.IAuctionService;
  12. import cn.hobbystocks.auc.service.ILotService;
  13. import cn.hobbystocks.auc.service.IOrderService;
  14. import cn.hobbystocks.auc.vo.OrderVO;
  15. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.beans.factory.annotation.Value;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.annotation.Transactional;
  20. import javax.annotation.Resource;
  21. import java.math.BigDecimal;
  22. import java.math.RoundingMode;
  23. import java.util.Date;
  24. import java.util.List;
  25. import java.util.Objects;
  26. @Service
  27. public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
  28. @Autowired
  29. ILotService lotService;
  30. @Autowired
  31. IAuctionService auctionService;
  32. @Resource
  33. OrderApi orderApi;
  34. @Value("${hobbystocks.host.orderUrl}")
  35. private String orderUrl;
  36. @Override
  37. @Transactional
  38. public OrderVO createSkuOrder(Order order) {
  39. Lot lot = lotService.selectLotById(order.getLotId());
  40. Auction auction = auctionService.selectAuctionById(lot.getAuctionId());
  41. BigDecimal serviceTariff = lot.getServiceTariff();
  42. Integer payTimeLimit = lot.getPayTimeLimit();
  43. if (serviceTariff == null) {
  44. serviceTariff = auction.getServiceTariff();
  45. }
  46. if (payTimeLimit == null) {
  47. payTimeLimit = auction.getPayTimeLimit();
  48. }
  49. if (Objects.isNull(order.getAmount())) {
  50. throw new ServiceException("创建订单失败:成交金额为空");
  51. }
  52. BigDecimal amount = BigDecimal.valueOf(order.getAmount());
  53. BigDecimal serviceExpense = serviceTariff.multiply(amount)
  54. .divide(BigDecimal.valueOf(100), 0, RoundingMode.HALF_UP);
  55. order.setServiceExpense(serviceExpense);
  56. Date expireTime = DateUtils.addHours(new Date(), payTimeLimit);
  57. order.setExpireTime(expireTime);
  58. save(order);
  59. OrderApiResponse response = orderApi.createSkuOrder(orderUrl, buildSkuOrderDTO(order, lot, auction));
  60. OrderVO orderVO = response.toOrderVO();
  61. order.setOrderId(orderVO.getOrderId());
  62. order.setOrderNo(orderVO.getOrderNo());
  63. order.setStatus(orderVO.getStatus());
  64. updateById(order);
  65. return orderVO;
  66. }
  67. SkuOrderDTO buildSkuOrderDTO(Order order, Lot lot, Auction auction) {
  68. SkuOrderDTO skuOrderDTO = new SkuOrderDTO();
  69. skuOrderDTO.setLotId(order.getLotId());
  70. skuOrderDTO.setSpuId(order.getSkuId());
  71. skuOrderDTO.setUserId(order.getUserId());
  72. skuOrderDTO.setAuctionId(lot.getAuctionId());
  73. skuOrderDTO.setAuctionName(auction.getName());
  74. skuOrderDTO.setLotName(lot.getName());
  75. skuOrderDTO.setLotImage(lot.getImgs());
  76. skuOrderDTO.setMerchantId(Objects.isNull(order.getMerchantId()) ? lot.getMerchantId() : order.getMerchantId());
  77. skuOrderDTO.setPaymentAmount(order.getAmount());
  78. skuOrderDTO.setServiceExpense(order.getServiceExpense().longValue());
  79. skuOrderDTO.setTotalAmount(BigDecimal.valueOf(order.getAmount()).add(order.getServiceExpense()).longValue());
  80. skuOrderDTO.setExpireTime(order.getExpireTime());
  81. return skuOrderDTO;
  82. }
  83. @Override
  84. public int modifyOrder(Order order) {
  85. return getBaseMapper().updateOrderStatus(order);
  86. }
  87. @Override
  88. public List<Order> getOrderListByUserAndAuction(Long auctionId, Integer userId) {
  89. return getBaseMapper().selectOrderByAuctionId(auctionId, userId);
  90. }
  91. }