AuctionServiceImpl.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package cn.hobbystocks.auc.service.impl;
  2. import cn.hobbystocks.auc.cache.CacheMap;
  3. import cn.hobbystocks.auc.service.ILotService;
  4. import cn.hobbystocks.auc.common.constant.Constants;
  5. import cn.hobbystocks.auc.common.core.redis.RedisCache;
  6. import cn.hobbystocks.auc.common.core.text.Convert;
  7. import cn.hobbystocks.auc.common.utils.DateUtils;
  8. import cn.hobbystocks.auc.domain.Auction;
  9. import cn.hobbystocks.auc.mapper.AuctionMapper;
  10. import cn.hobbystocks.auc.service.IAuctionService;
  11. import cn.hobbystocks.auc.vo.AuctionVO;
  12. import com.baomidou.mybatisplus.core.metadata.IPage;
  13. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  14. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.TransactionDefinition;
  20. import org.springframework.transaction.TransactionStatus;
  21. import org.springframework.transaction.annotation.Isolation;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import org.springframework.transaction.support.DefaultTransactionDefinition;
  24. import javax.annotation.Resource;
  25. import java.util.Date;
  26. import java.util.List;
  27. import java.util.Objects;
  28. @Service
  29. @Slf4j
  30. public class AuctionServiceImpl extends ServiceImpl<AuctionMapper,Auction> implements IAuctionService
  31. {
  32. @Autowired
  33. private ILotService lotService;
  34. @Autowired
  35. private RedisCache redisCache;
  36. @Resource
  37. private DataSourceTransactionManager transactionManager;
  38. @Autowired(required = false)
  39. private CacheMap cacheMap;
  40. @Override
  41. public Auction selectAuctionById(Long id)
  42. {
  43. return getBaseMapper().selectAuctionById(id);
  44. }
  45. @Override
  46. public Auction selectAuctionByNo(String no) {
  47. return getBaseMapper().selectAuctionByNo(no);
  48. }
  49. @Override
  50. public List<Auction> selectAuctionList(Auction auction) {
  51. IPage<Auction> page=new Page<>(auction.getPageNum(),auction.getPageSize());
  52. return getBaseMapper().selectAuctionList(page,auction);
  53. }
  54. @Override
  55. public int insertAuction(Auction auction) {
  56. auction.setCreateTime(DateUtils.getNowDate());
  57. return getBaseMapper().insertAuction(auction);
  58. }
  59. @Override
  60. public int updateAuction(Auction auction) {
  61. auction.setUpdateTime(DateUtils.getNowDate());
  62. return getBaseMapper().updateAuction(auction);
  63. }
  64. @Override
  65. public int deleteAuctionByIds(String ids)
  66. {
  67. return getBaseMapper().deleteAuctionByIds(Convert.toLongArray(ids));
  68. }
  69. @Override
  70. public int deleteAuctionById(Long id)
  71. {
  72. return getBaseMapper().deleteAuctionById(id);
  73. }
  74. @Override
  75. @Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
  76. public void pubAuction(AuctionVO auction) {
  77. if (Objects.equals(Constants.PUB_STATUS_PUBLISHED, auction.getPubStatus())) {
  78. auction.setPubTime(new Date());
  79. auction.setStatus(Constants.LOT_STATUS_WAITING);
  80. Auction db = getBaseMapper().selectAuctionById(auction.getId());
  81. redisCache.setCacheObject(String.format(Constants.REDIS_AUC_TEMPLATE, auction.getId()), db);
  82. }else if (Objects.equals(Constants.PUB_STATUS_CANCEL_PUBLISHED, auction.getPubStatus())){
  83. auction.setUpdateTime(new Date());
  84. auction.setStatus(Constants.LOT_STATUS_CANCELLED);
  85. redisCache.deleteObject(String.format(Constants.REDIS_AUC_TEMPLATE, auction.getId()));
  86. }
  87. getBaseMapper().updateAuction(auction);
  88. if (auction.getPubLots()) {
  89. lotService.pubLots(auction);
  90. }
  91. }
  92. @Override
  93. public void auctionLive() {
  94. getBaseMapper().selectNeedStart().forEach(auction -> updateAuction(auction, Constants.GROUP_STATUS_STARTING));
  95. getBaseMapper().selectNeedEnd().forEach(auction -> updateAuction(auction, Constants.GROUP_STATUS_FINISH));
  96. }
  97. @Override
  98. public List<Auction> live() {
  99. return getBaseMapper().selectLive();
  100. }
  101. private void updateAuction(Auction auction, String status) {
  102. auction.setUpdateTime(new Date());
  103. auction.setStatus(status);
  104. TransactionStatus transaction = null;
  105. try {
  106. DefaultTransactionDefinition def = new DefaultTransactionDefinition();
  107. def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
  108. def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
  109. transaction = transactionManager.getTransaction(def);
  110. getBaseMapper().updateAuction(auction);
  111. if (status.equals(Constants.GROUP_STATUS_FINISH)) {
  112. redisCache.deleteObject(String.format(Constants.REDIS_AUC_TEMPLATE, auction.getId()));
  113. redisCache.deleteObject(String.format(Constants.REDIS_MAP_AUC_LOT_TEMPLATE, auction.getId()));
  114. cacheMap.end(auction.getId());
  115. }else {
  116. redisCache.setCacheObject(String.format(Constants.REDIS_AUC_TEMPLATE, auction.getId()), auction);
  117. }
  118. transactionManager.commit(transaction);
  119. }catch (Exception e){
  120. log.error("auction end error, {}", auction, e);
  121. if(Objects.nonNull(transaction)){
  122. transactionManager.rollback(transaction);
  123. }
  124. }
  125. }
  126. }