SpotifyUserUpgradeOrderServiceImpl.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package com.cyksj.service.spotify.impl;
  2. import cn.hutool.core.lang.Validator;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.toolkit.Assert;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.cyksj.common.constant.Constant;
  7. import com.cyksj.common.exception.BusinessRuntimeException;
  8. import com.cyksj.common.snowflake.Sequence;
  9. import com.cyksj.mapper.*;
  10. import com.cyksj.mapper.sys.SysConfigMapper;
  11. import com.cyksj.model.entity.*;
  12. import com.cyksj.model.request.SpotifyUpgradeInfoReq;
  13. import com.cyksj.model.request.SpotifyUpgradeOrderReq;
  14. import com.cyksj.service.spotify.SpotifyUserUpgradeOrderService;
  15. import com.cyksj.service.user.UserBindRelationService;
  16. import lombok.RequiredArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.dao.DuplicateKeyException;
  19. import org.springframework.stereotype.Service;
  20. import java.math.BigDecimal;
  21. import java.util.List;
  22. import java.util.Optional;
  23. /**
  24. * 项目名: yhlxj
  25. * 文件名: SpotifyUserUpgradeOrderServiceImpl
  26. * 创建者: JavaZou
  27. * 创建时间:2024/12/3 15:40
  28. */
  29. @Service
  30. @RequiredArgsConstructor
  31. @Slf4j
  32. public class SpotifyUserUpgradeOrderServiceImpl implements SpotifyUserUpgradeOrderService {
  33. private final SpotifyUserUpgradeOrderMapper spotifyUserUpgradeOrderMapper;
  34. private final GroupsRelationMapper relationMapper;
  35. private final UserBindRelationService userBindRelationService;
  36. private final GroupsMapper groupsMapper;
  37. private final GoodsDonSkuMapper skuMapper;
  38. private final static Sequence SEQUENCE = new Sequence(0);
  39. private final SysConfigMapper sysConfigMapper;
  40. private final SpotifyUserUpgradeSubmitRecordMapper spotifyUserUpgradeSubmitRecordMapper;
  41. private final OrderDonMapper orderDonMapper;
  42. @Override
  43. public SpotifyUserUpgradeOrder upgradeSubmit(SpotifyUpgradeOrderReq spotifyUpgradeOrderReq) {
  44. Long userId = spotifyUpgradeOrderReq.getUserId();
  45. List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
  46. Long relationId = spotifyUpgradeOrderReq.getRelationId();
  47. GroupsRelation relation = relationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getId, relationId).in(GroupsRelation::getUserId, userIdList).eq(GroupsRelation::getStatus, GroupsRelation.Status.validity));
  48. if (relation == null) {
  49. throw BusinessRuntimeException.getInstance("车票已过期");
  50. }
  51. GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
  52. GoodsDonSku sku = skuMapper.selectById(groupsTrips.getSkuId());
  53. if (sku.getGoodsId() != Constant.SPOTIFY_GOODS_ID) {
  54. throw BusinessRuntimeException.getInstance("暂只支持spotify车票");
  55. }
  56. SpotifyUserUpgradeOrder order = spotifyUserUpgradeOrderMapper.selectOne(Wrappers.lambdaQuery(SpotifyUserUpgradeOrder.class).eq(SpotifyUserUpgradeOrder::getRelationId, relationId).in(SpotifyUserUpgradeOrder::getUserId, userIdList).eq(SpotifyUserUpgradeOrder::getStatus, SpotifyUserUpgradeOrder.Status.noPayment).last("limit 1"));
  57. if (order == null) {
  58. order = new SpotifyUserUpgradeOrder();
  59. }
  60. order.setUserId(userId);
  61. order.setGoodsId(sku.getGoodsId());
  62. order.setSkuId(sku.getId());
  63. order.setOrderNo(SEQUENCE.nextId().toString());
  64. order.setStatus(SpotifyUserUpgradeOrder.Status.noPayment);
  65. order.setRelationId(relationId);
  66. OrderDon relateOrder = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
  67. .in(OrderDon::getUserId, userIdList)
  68. .eq(OrderDon::getRelationId, relationId)
  69. .notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
  70. .orderByDesc(OrderDon::getId)
  71. .last("limit 1"));
  72. if (relateOrder != null) {
  73. order.setRelateOrderNo(relateOrder.getOrderNo());
  74. }
  75. SysConfig sysConfig = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey, Constant.SPOTIFY_UPGRADE_PRICE_KEY).last("limit 1"));
  76. order.setMoney(BigDecimal.valueOf(Long.parseLong(sysConfig.getSysValue())));
  77. if (order.getId() == null) spotifyUserUpgradeOrderMapper.insert(order);
  78. else spotifyUserUpgradeOrderMapper.updateById(order);
  79. return order;
  80. }
  81. @Override
  82. public void submitUpgradeInfo(SpotifyUpgradeInfoReq spotifyUpgradeInfoReq) {
  83. Long relationId = spotifyUpgradeInfoReq.getRelationId();
  84. Assert.notNull(relationId, "参数错误");
  85. String account = spotifyUpgradeInfoReq.getAccount();
  86. if (StrUtil.isEmpty(account) || account.length() > 64) {
  87. throw BusinessRuntimeException.getInstance("请输入正确的账号信息");
  88. }
  89. String password = spotifyUpgradeInfoReq.getPassword();
  90. if (StrUtil.isEmpty(password) || password.length() > 64) {
  91. throw BusinessRuntimeException.getInstance("请输入正确的账号信息");
  92. }
  93. String email = spotifyUpgradeInfoReq.getEmail();
  94. if (!Validator.isEmail(email)) {
  95. throw BusinessRuntimeException.getInstance("请输入正确的邮箱");
  96. }
  97. Long userId = spotifyUpgradeInfoReq.getUserId();
  98. List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
  99. SpotifyUserUpgradeOrder order = spotifyUserUpgradeOrderMapper.selectOne(Wrappers.lambdaQuery(SpotifyUserUpgradeOrder.class)
  100. .eq(SpotifyUserUpgradeOrder::getRelationId, relationId)
  101. .in(SpotifyUserUpgradeOrder::getUserId, userIdList)
  102. .eq(SpotifyUserUpgradeOrder::getStatus, SpotifyUserUpgradeOrder.Status.hasPayment));
  103. if (order == null) {
  104. throw BusinessRuntimeException.getInstance("订单不存在");
  105. }
  106. Long orderId = order.getId();
  107. SpotifyUserUpgradeSubmitRecord upgradeSubmitRecord = Optional.ofNullable(spotifyUserUpgradeSubmitRecordMapper.selectOne(Wrappers.lambdaQuery(SpotifyUserUpgradeSubmitRecord.class)
  108. .ne(SpotifyUserUpgradeSubmitRecord::getStatus, SpotifyUserUpgradeSubmitRecord.Status.fail)
  109. .eq(SpotifyUserUpgradeSubmitRecord::getOrderId, orderId)
  110. .last("limit 1"))).orElse(new SpotifyUserUpgradeSubmitRecord());
  111. if (upgradeSubmitRecord != null && upgradeSubmitRecord.getStatus() != SpotifyUserUpgradeSubmitRecord.Status.fail) {
  112. throw BusinessRuntimeException.getInstance("您已提交记录");
  113. }
  114. try {
  115. upgradeSubmitRecord.setUserId(order.getUserId());
  116. upgradeSubmitRecord.setAccount(account);
  117. upgradeSubmitRecord.setPassword(password);
  118. upgradeSubmitRecord.setEmail(email);
  119. upgradeSubmitRecord.setStatus(SpotifyUserUpgradeSubmitRecord.Status.waiting);
  120. upgradeSubmitRecord.setOrderId(orderId);
  121. upgradeSubmitRecord.setRelationId(order.getRelationId());
  122. if (upgradeSubmitRecord.getId() == null) {
  123. spotifyUserUpgradeSubmitRecordMapper.insert(upgradeSubmitRecord);
  124. } else spotifyUserUpgradeSubmitRecordMapper.updateById(upgradeSubmitRecord);
  125. } catch (DuplicateKeyException e) {
  126. }
  127. }
  128. }