DepositOrderServiceImpl.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package cn.hobbystocks.auc.service.impl;
  2. import cn.hobbystocks.auc.common.exception.ServiceException;
  3. import cn.hobbystocks.auc.domain.Auction;
  4. import cn.hobbystocks.auc.domain.DepositOrder;
  5. import cn.hobbystocks.auc.domain.Lot;
  6. import cn.hobbystocks.auc.dto.DepositRecordDTO;
  7. import cn.hobbystocks.auc.dto.DepositOrderDTO;
  8. import cn.hobbystocks.auc.forest.OrderApi;
  9. import cn.hobbystocks.auc.mapper.DepositOrderMapper;
  10. import cn.hobbystocks.auc.request.DepositRecordRequest;
  11. import cn.hobbystocks.auc.service.DepositOrderService;
  12. import cn.hobbystocks.auc.service.IAuctionService;
  13. import cn.hobbystocks.auc.service.ILotService;
  14. import cn.hutool.core.collection.CollUtil;
  15. import cn.hutool.core.util.IdUtil;
  16. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  17. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  18. import org.springframework.beans.BeanUtils;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import javax.annotation.Resource;
  23. import java.util.Date;
  24. import java.util.List;
  25. import java.util.Objects;
  26. @Service
  27. public class DepositOrderServiceImpl extends ServiceImpl<DepositOrderMapper, DepositOrder> implements DepositOrderService {
  28. @Autowired
  29. ILotService lotService;
  30. @Autowired
  31. IAuctionService auctionService;
  32. @Resource
  33. OrderApi orderApi;
  34. final String DEPOSIT_ORDER_PRE = "DT";
  35. private static final String DEPOSIT_TYPE_LOT = "拍品";
  36. private static final String DEPOSIT_TYPE_AUCTION = "拍卖会";
  37. private static final Integer DEPOSIT_STATUS_WAITING_PAYMENT = 0;
  38. private static final Integer DEPOSIT_STATUS_PAID = 1;
  39. @Override
  40. @Transactional
  41. public int createDepositOrder(DepositOrderDTO depositOrderDTO) {
  42. //查询拍品保证金配置
  43. Long lotId = depositOrderDTO.getLotId();
  44. Lot lot = lotService.selectLotById(lotId);
  45. Long deposit = lot.getDeposit();
  46. String name= lot.getName();
  47. String depositType=DEPOSIT_TYPE_LOT;
  48. if (deposit ==null){
  49. //如果没有拍品保证金配置,创建拍卖会保证金配置
  50. Auction auction = auctionService.selectAuctionById(lot.getAuctionId());
  51. deposit=auction.getDeposit();
  52. name=auction.getName();
  53. depositType=DEPOSIT_TYPE_AUCTION;
  54. }
  55. if (hasPaidDeposit(depositOrderDTO.getUserId(), lot, depositType)) {
  56. throw new ServiceException("当前已有相关数据保证金订单");
  57. }
  58. depositOrderDTO.setAmount(deposit);
  59. depositOrderDTO.setAuctionId(lot.getAuctionId());
  60. depositOrderDTO.setName(name);
  61. depositOrderDTO.setDepositType(depositType);
  62. depositOrderDTO.setLotId(lotId);
  63. depositOrderDTO.setMerchantId(lot.getMerchantId());
  64. // OrderVO orderVO = orderApi.createDepositOrder(depositOrderDTO);
  65. //保存保证金订单记录
  66. DepositOrder depositOrder=new DepositOrder();
  67. BeanUtils.copyProperties(depositOrderDTO,depositOrder);
  68. depositOrder.setStatus(0);
  69. //生成订单号
  70. depositOrder.setOrderNo(DEPOSIT_ORDER_PRE + IdUtil.getSnowflakeNextId());
  71. depositOrder.setCreateTime(new Date());
  72. return baseMapper.insert(depositOrder);
  73. }
  74. private boolean hasPaidDeposit(Integer userId, Lot lot, String depositType) {
  75. LambdaQueryWrapper<DepositOrder> queryWrapper = new LambdaQueryWrapper<DepositOrder>()
  76. .eq(DepositOrder::getUserId, userId)
  77. .in(DepositOrder::getStatus, CollUtil.newArrayList(DEPOSIT_STATUS_PAID,DEPOSIT_STATUS_WAITING_PAYMENT))
  78. .eq(DepositOrder::getDepositType, depositType);
  79. if (Objects.equals(DEPOSIT_TYPE_LOT, depositType)) {
  80. queryWrapper.eq(DepositOrder::getLotId, lot.getId());
  81. } else {
  82. queryWrapper.eq(DepositOrder::getAuctionId, lot.getAuctionId());
  83. }
  84. return baseMapper.selectCount(queryWrapper) > 0;
  85. }
  86. @Override
  87. public void refundDepositOrder(String orderNo) {
  88. // OrderVO orderVO=new OrderVO();
  89. // orderVO.setOrderNo(orderNo);
  90. // //TODO 执行保证金退款逻辑
  91. // return orderApi.refundDepositOrder(orderVO);
  92. this.lambdaUpdate().eq(DepositOrder::getOrderNo,orderNo).set(DepositOrder::getStatus,2);
  93. }
  94. @Override
  95. public void reduceDeposit(String orderNo) {
  96. // OrderVO orderVO=new OrderVO();
  97. // orderVO.setOrderNo(orderNo);
  98. // //TODO 执行扣减保证金
  99. //
  100. // return orderApi.reduceDeposit(orderVO);
  101. this.lambdaUpdate().eq(DepositOrder::getOrderNo,orderNo).set(DepositOrder::getStatus,3);
  102. }
  103. @Override
  104. public List<DepositOrder> selectDepositOrder(DepositOrder depositOrder) {
  105. return getBaseMapper().selectDepositList(depositOrder);
  106. }
  107. @Override
  108. public List<DepositRecordDTO> selectDepositRecordPage(DepositRecordRequest request) {
  109. return getBaseMapper().selectDepositRecordPage(request);
  110. }
  111. }