AuctionServiceImpl.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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.extension.service.impl.ServiceImpl;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.TransactionDefinition;
  18. import org.springframework.transaction.TransactionStatus;
  19. import org.springframework.transaction.annotation.Isolation;
  20. import org.springframework.transaction.annotation.Transactional;
  21. import org.springframework.transaction.support.DefaultTransactionDefinition;
  22. import javax.annotation.Resource;
  23. import java.util.Date;
  24. import java.util.List;
  25. import java.util.Objects;
  26. @Service
  27. @Slf4j
  28. public class AuctionServiceImpl extends ServiceImpl<AuctionMapper,Auction> implements IAuctionService
  29. {
  30. @Autowired
  31. private AuctionMapper auctionMapper;
  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 auctionMapper.selectAuctionById(id);
  44. }
  45. @Override
  46. public Auction selectAuctionByNo(String no) {
  47. return auctionMapper.selectAuctionByNo(no);
  48. }
  49. @Override
  50. public List<Auction> selectAuctionList(Auction auction) {
  51. return auctionMapper.selectAuctionList(auction);
  52. }
  53. @Override
  54. public int insertAuction(Auction auction) {
  55. auction.setCreateTime(DateUtils.getNowDate());
  56. return auctionMapper.insertAuction(auction);
  57. }
  58. @Override
  59. public int updateAuction(Auction auction) {
  60. auction.setUpdateTime(DateUtils.getNowDate());
  61. return auctionMapper.updateAuction(auction);
  62. }
  63. @Override
  64. public int deleteAuctionByIds(String ids)
  65. {
  66. return auctionMapper.deleteAuctionByIds(Convert.toLongArray(ids));
  67. }
  68. @Override
  69. public int deleteAuctionById(Long id)
  70. {
  71. return auctionMapper.deleteAuctionById(id);
  72. }
  73. @Override
  74. @Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
  75. public void pubAuction(AuctionVO auction) {
  76. auction.setPubStatus(Constants.PUB_STATUS_PUBLISHED);
  77. auction.setPubTime(new Date());
  78. auction.setStatus(Constants.LOT_STATUS_WAITING);
  79. auctionMapper.updateAuction(auction);
  80. Auction db = auctionMapper.selectAuctionById(auction.getId());
  81. redisCache.setCacheObject(String.format(Constants.REDIS_AUC_TEMPLATE, auction.getId()), db);
  82. if (auction.getPubLots()) {
  83. lotService.pubLots(auction);
  84. }
  85. }
  86. @Override
  87. public void auctionLive() {
  88. auctionMapper.selectNeedStart().forEach(auction -> updateAuction(auction, Constants.GROUP_STATUS_STARTING));
  89. // auctionMapper.selectNeedEnd().forEach(auction -> updateAuction(auction, Constants.AUC_STATUS_FINISH));
  90. }
  91. @Override
  92. public List<Auction> live() {
  93. return auctionMapper.selectLive();
  94. }
  95. private void updateAuction(Auction auction, String status) {
  96. auction.setUpdateTime(new Date());
  97. auction.setStatus(status);
  98. TransactionStatus transaction = null;
  99. try {
  100. DefaultTransactionDefinition def = new DefaultTransactionDefinition();
  101. def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
  102. def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
  103. transaction = transactionManager.getTransaction(def);
  104. auctionMapper.updateAuction(auction);
  105. if (status.equals(Constants.GROUP_STATUS_FINISH)) {
  106. redisCache.deleteObject(String.format(Constants.REDIS_AUC_TEMPLATE, auction.getId()));
  107. redisCache.deleteObject(String.format(Constants.REDIS_MAP_AUC_LOT_TEMPLATE, auction.getId()));
  108. cacheMap.end(auction.getId());
  109. }else {
  110. redisCache.setCacheObject(String.format(Constants.REDIS_AUC_TEMPLATE, auction.getId()), auction);
  111. }
  112. transactionManager.commit(transaction);
  113. }catch (Exception e){
  114. log.error("auction end error, {}", auction, e);
  115. if(Objects.nonNull(transaction)){
  116. transactionManager.rollback(transaction);
  117. }
  118. }
  119. }
  120. }