|
|
@@ -1,7 +1,6 @@
|
|
|
package com.izouma.nineth.service;
|
|
|
|
|
|
import cn.hutool.core.convert.Convert;
|
|
|
-import com.fasterxml.jackson.annotation.JsonView;
|
|
|
import com.izouma.nineth.TokenHistory;
|
|
|
import com.izouma.nineth.config.GeneralProperties;
|
|
|
import com.izouma.nineth.domain.Collection;
|
|
|
@@ -10,7 +9,6 @@ import com.izouma.nineth.dto.PageQuery;
|
|
|
import com.izouma.nineth.dto.PageWrapper;
|
|
|
import com.izouma.nineth.dto.UserHistory;
|
|
|
import com.izouma.nineth.enums.*;
|
|
|
-import com.izouma.nineth.event.TransferAssetEvent;
|
|
|
import com.izouma.nineth.exception.BusinessException;
|
|
|
import com.izouma.nineth.repo.*;
|
|
|
import com.izouma.nineth.utils.JpaUtils;
|
|
|
@@ -18,9 +16,8 @@ import com.izouma.nineth.utils.SecurityUtils;
|
|
|
import com.izouma.nineth.utils.TokenUtils;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.commons.lang3.RandomStringUtils;
|
|
|
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.cache.annotation.Cacheable;
|
|
|
@@ -29,15 +26,11 @@ import org.springframework.data.domain.Page;
|
|
|
import org.springframework.data.domain.PageImpl;
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
import org.springframework.data.jpa.domain.Specification;
|
|
|
-import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import javax.persistence.criteria.CriteriaBuilder;
|
|
|
-import javax.persistence.criteria.CriteriaQuery;
|
|
|
import javax.persistence.criteria.Predicate;
|
|
|
-import javax.persistence.criteria.Root;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
@@ -339,6 +332,10 @@ public class AssetService {
|
|
|
}
|
|
|
|
|
|
public void transfer(Asset asset, BigDecimal price, User toUser, TransferReason reason, Long orderId) {
|
|
|
+ transfer(asset, price, toUser, reason, orderId, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void transfer(Asset asset, BigDecimal price, User toUser, TransferReason reason, Long orderId, boolean safeTransfer) {
|
|
|
Objects.requireNonNull(asset, "原藏品不能为空");
|
|
|
Objects.requireNonNull(toUser, "转让人不能为空");
|
|
|
Objects.requireNonNull(reason, "转让原因不能为空");
|
|
|
@@ -363,7 +360,7 @@ public class AssetService {
|
|
|
newAsset.setTags(new HashSet<>(asset.getTags()));
|
|
|
assetRepo.save(newAsset);
|
|
|
|
|
|
- tokenHistoryRepo.save(TokenHistory.builder()
|
|
|
+ TokenHistory tokenHistory = TokenHistory.builder()
|
|
|
.tokenId(asset.getTokenId())
|
|
|
.fromUser(asset.getOwner())
|
|
|
.fromUserId(asset.getOwnerId())
|
|
|
@@ -373,7 +370,13 @@ public class AssetService {
|
|
|
.toAvatar(toUser.getAvatar())
|
|
|
.operation(reason.getDescription())
|
|
|
.price(TransferReason.GIFT == reason ? null : price)
|
|
|
- .build());
|
|
|
+ .sFromUser(tokenHistoryRepo.findByTokenIdOrderByCreatedAtDesc(asset.getTokenId())
|
|
|
+ .stream().findFirst().map(TokenHistory::getSToUser).orElse(null))
|
|
|
+ .build();
|
|
|
+ if (safeTransfer) {
|
|
|
+ tokenHistory.setSToUser("9th_" + RandomStringUtils.randomAlphabetic(8));
|
|
|
+ }
|
|
|
+ tokenHistoryRepo.save(tokenHistory);
|
|
|
|
|
|
asset.setPublicShow(false);
|
|
|
asset.setConsignment(false);
|