| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package com.izouma.nineth.service;
- import com.izouma.nineth.domain.DomainOrder;
- import com.izouma.nineth.domain.PhotoAsset;
- import com.izouma.nineth.domain.User;
- import com.izouma.nineth.dto.PageQuery;
- import com.izouma.nineth.enums.CollectionStatus;
- import com.izouma.nineth.enums.OrderStatus;
- import com.izouma.nineth.enums.PayMethod;
- import com.izouma.nineth.exception.BusinessException;
- import com.izouma.nineth.repo.DomainOrderRepo;
- import com.izouma.nineth.repo.UserRepo;
- import com.izouma.nineth.utils.JpaUtils;
- import lombok.AllArgsConstructor;
- import org.springframework.data.annotation.Transient;
- import org.springframework.data.domain.Page;
- import org.springframework.stereotype.Service;
- import javax.print.DocFlavor;
- import java.math.BigDecimal;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- @Service
- @AllArgsConstructor
- public class DomainOrderService {
- private DomainOrderRepo domainOrderRepo;
- private ContentAuditService contentAuditService;
- private UserRepo userRepo;
- private AssetService assetService;
- public Page<DomainOrder> all(PageQuery pageQuery) {
- return domainOrderRepo
- .findAll(JpaUtils.toSpecification(pageQuery, DomainOrder.class), JpaUtils.toPageRequest(pageQuery));
- }
- public DomainOrder create(Long userId, String domain, BigDecimal price) {
- if (domain.length() < 5) {
- throw new BusinessException("四位及以下域名只能官方创建。");
- }
- Map<String, Object> checkResult = check(domain);
- if (!(Boolean) checkResult.get("result")) {
- throw new BusinessException(checkResult.get("reason").toString());
- }
- if (price.compareTo(BigDecimal.valueOf(40L)) != 0) {
- throw new BusinessException("订单价格与配置不符,请重新下单.");
- }
- User user = userRepo.findById(userId).orElseThrow(new BusinessException("未找到用户"));
- if (domain.contains(".")) {
- int dotIndex = domain.indexOf(".");
- domain = domain.substring(0, dotIndex);
- }
- DomainOrder domainOrder = new DomainOrder();
- domainOrder.setPicName(domain);
- domainOrder.setPrice(price);
- domainOrder.setDomainName(domain + ".uni");
- domainOrder.setStatus(CollectionStatus.PENDING);
- domainOrder.setUserId(user.getId());
- domainOrder.setUserAvatar(user.getAvatar());
- domainOrder.setUserName(user.getNickname());
- return domainOrderRepo.save(domainOrder);
- }
- public Map<String, Object> check(String domain) {
- Map<String, Object> result = new HashMap<>();
- Integer count = domainOrderRepo.countAllByDomainNameEqualsAndStatus(domain, CollectionStatus.SUCCESS);
- if (domain.length() < 5 || domain.length() > 20) {
- result.put("result", false);
- result.put("reason", "域名长度不合规");
- return result;
- }
- if (count > 0) {
- result.put("result", false);
- result.put("reason", "该域名已被注册");
- return result;
- }
- if (!contentAuditService.auditText(domain)) {
- result.put("result", false);
- result.put("reason", "该域名内容不合规");
- return result;
- }
- result.put("result", true);
- result.put("reason", "可以注册");
- return result;
- }
- public List<Map<String, Object>> search(String domain) {
- if (domain.contains(".")) {
- int dotIndex = domain.indexOf(".");
- domain = domain.substring(0, dotIndex);
- }
- List<DomainOrder> used = domainOrderRepo.searchUsedDomain(domain, CollectionStatus.SUCCESS);
- String n = domain.substring(domain.length() - 1);
- List<Map<String, Object>> recommend = new ArrayList<>();
- for (int i = 0; i < 100; i++) {
- domain = domain + n;
- Map<String, Object> checkResult = check(domain + ".uni");
- if ((Boolean) checkResult.get("result")) {
- Map<String, Object> sold = new HashMap<>();
- sold.put("domain", domain + ".uni");
- sold.put("sold", false);
- recommend.add(sold);
- }
- if (recommend.size() > 2) {
- break;
- }
- }
- List<Map<String, Object>> result = new ArrayList<>(recommend);
- used.forEach(domainOrder -> {
- Map<String, Object> sold = new HashMap<>();
- sold.put("domain", domainOrder.getDomainName());
- sold.put("sold", true);
- result.add(sold);
- });
- return result;
- }
- @Transient
- public void notify(Long id, PayMethod payMethod, String transactionId) {
- DomainOrder domainOrder = domainOrderRepo.findById(id).orElseThrow(new BusinessException("未找到星图"));
- if (!domainOrder.getOrderStatus().equals(OrderStatus.NOT_PAID)) {
- throw new BusinessException("订单已经处理");
- }
- domainOrder.setOrderStatus(OrderStatus.FINISH);
- domainOrder.setPayMethod(payMethod);
- domainOrder.setTransactionId(transactionId);
- domainOrder.setStatus(CollectionStatus.SUCCESS);
- createAsset(domainOrder);
- domainOrderRepo.save(domainOrder);
- }
- public void cancel(DomainOrder domainOrder) {
- domainOrder.setOrderStatus(OrderStatus.CANCELLED);
- domainOrder.setStatus(CollectionStatus.FAIL);
- domainOrderRepo.save(domainOrder);
- }
- public void createAsset(DomainOrder domainOrder) {
- Long createId = assetService.createAsset(domainOrder, userRepo.findById(domainOrder.getUserId())
- .orElseThrow(new BusinessException("无用户记录")), null, BigDecimal.ZERO, "域名", null, false).getId();
- }
- }
|