DomainOrderService.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.domain.DomainOrder;
  3. import com.izouma.nineth.domain.PhotoAsset;
  4. import com.izouma.nineth.domain.User;
  5. import com.izouma.nineth.dto.PageQuery;
  6. import com.izouma.nineth.enums.CollectionStatus;
  7. import com.izouma.nineth.enums.OrderStatus;
  8. import com.izouma.nineth.enums.PayMethod;
  9. import com.izouma.nineth.exception.BusinessException;
  10. import com.izouma.nineth.repo.DomainOrderRepo;
  11. import com.izouma.nineth.repo.UserRepo;
  12. import com.izouma.nineth.utils.JpaUtils;
  13. import lombok.AllArgsConstructor;
  14. import org.springframework.data.annotation.Transient;
  15. import org.springframework.data.domain.Page;
  16. import org.springframework.stereotype.Service;
  17. import javax.print.DocFlavor;
  18. import java.math.BigDecimal;
  19. import java.util.ArrayList;
  20. import java.util.HashMap;
  21. import java.util.List;
  22. import java.util.Map;
  23. @Service
  24. @AllArgsConstructor
  25. public class DomainOrderService {
  26. private DomainOrderRepo domainOrderRepo;
  27. private ContentAuditService contentAuditService;
  28. private UserRepo userRepo;
  29. private AssetService assetService;
  30. public Page<DomainOrder> all(PageQuery pageQuery) {
  31. return domainOrderRepo
  32. .findAll(JpaUtils.toSpecification(pageQuery, DomainOrder.class), JpaUtils.toPageRequest(pageQuery));
  33. }
  34. public DomainOrder create(Long userId, String domain, BigDecimal price) {
  35. if (domain.length() < 5) {
  36. throw new BusinessException("四位及以下域名只能官方创建。");
  37. }
  38. Map<String, Object> checkResult = check(domain);
  39. if (!(Boolean) checkResult.get("result")) {
  40. throw new BusinessException(checkResult.get("reason").toString());
  41. }
  42. if (price.compareTo(BigDecimal.valueOf(40L)) != 0) {
  43. throw new BusinessException("订单价格与配置不符,请重新下单.");
  44. }
  45. User user = userRepo.findById(userId).orElseThrow(new BusinessException("未找到用户"));
  46. if (domain.contains(".")) {
  47. int dotIndex = domain.indexOf(".");
  48. domain = domain.substring(0, dotIndex);
  49. }
  50. DomainOrder domainOrder = new DomainOrder();
  51. domainOrder.setPicName(domain);
  52. domainOrder.setPrice(price);
  53. domainOrder.setDomainName(domain + ".uni");
  54. domainOrder.setStatus(CollectionStatus.PENDING);
  55. domainOrder.setUserId(user.getId());
  56. domainOrder.setUserAvatar(user.getAvatar());
  57. domainOrder.setUserName(user.getNickname());
  58. return domainOrderRepo.save(domainOrder);
  59. }
  60. public Map<String, Object> check(String domain) {
  61. Map<String, Object> result = new HashMap<>();
  62. Integer count = domainOrderRepo.countAllByDomainNameEqualsAndStatus(domain, CollectionStatus.SUCCESS);
  63. if (domain.length() < 5 || domain.length() > 20) {
  64. result.put("result", false);
  65. result.put("reason", "域名长度不合规");
  66. return result;
  67. }
  68. if (count > 0) {
  69. result.put("result", false);
  70. result.put("reason", "该域名已被注册");
  71. return result;
  72. }
  73. if (!contentAuditService.auditText(domain)) {
  74. result.put("result", false);
  75. result.put("reason", "该域名内容不合规");
  76. return result;
  77. }
  78. result.put("result", true);
  79. result.put("reason", "可以注册");
  80. return result;
  81. }
  82. public List<Map<String, Object>> search(String domain) {
  83. if (domain.contains(".")) {
  84. int dotIndex = domain.indexOf(".");
  85. domain = domain.substring(0, dotIndex);
  86. }
  87. List<DomainOrder> used = domainOrderRepo.searchUsedDomain(domain, CollectionStatus.SUCCESS);
  88. String n = domain.substring(domain.length() - 1);
  89. List<Map<String, Object>> recommend = new ArrayList<>();
  90. for (int i = 0; i < 100; i++) {
  91. domain = domain + n;
  92. Map<String, Object> checkResult = check(domain + ".uni");
  93. if ((Boolean) checkResult.get("result")) {
  94. Map<String, Object> sold = new HashMap<>();
  95. sold.put("domain", domain + ".uni");
  96. sold.put("sold", false);
  97. recommend.add(sold);
  98. }
  99. if (recommend.size() > 2) {
  100. break;
  101. }
  102. }
  103. List<Map<String, Object>> result = new ArrayList<>(recommend);
  104. used.forEach(domainOrder -> {
  105. Map<String, Object> sold = new HashMap<>();
  106. sold.put("domain", domainOrder.getDomainName());
  107. sold.put("sold", true);
  108. result.add(sold);
  109. });
  110. return result;
  111. }
  112. @Transient
  113. public void notify(Long id, PayMethod payMethod, String transactionId) {
  114. DomainOrder domainOrder = domainOrderRepo.findById(id).orElseThrow(new BusinessException("未找到星图"));
  115. if (!domainOrder.getOrderStatus().equals(OrderStatus.NOT_PAID)) {
  116. throw new BusinessException("订单已经处理");
  117. }
  118. domainOrder.setOrderStatus(OrderStatus.FINISH);
  119. domainOrder.setPayMethod(payMethod);
  120. domainOrder.setTransactionId(transactionId);
  121. domainOrder.setStatus(CollectionStatus.SUCCESS);
  122. createAsset(domainOrder);
  123. domainOrderRepo.save(domainOrder);
  124. }
  125. public void cancel(DomainOrder domainOrder) {
  126. domainOrder.setOrderStatus(OrderStatus.CANCELLED);
  127. domainOrder.setStatus(CollectionStatus.FAIL);
  128. domainOrderRepo.save(domainOrder);
  129. }
  130. public void createAsset(DomainOrder domainOrder) {
  131. Long createId = assetService.createAsset(domainOrder, userRepo.findById(domainOrder.getUserId())
  132. .orElseThrow(new BusinessException("无用户记录")), null, BigDecimal.ZERO, "域名", null, false).getId();
  133. }
  134. }