Browse Source

转赠天数限制

xiongzhu 4 years ago
parent
commit
d322db9f4b

+ 8 - 0
src/main/java/com/izouma/nineth/domain/Asset.java

@@ -7,6 +7,7 @@ import com.izouma.nineth.converter.FileObjectConverter;
 import com.izouma.nineth.converter.FileObjectListConverter;
 import com.izouma.nineth.converter.PrivilegeListConverter;
 import com.izouma.nineth.converter.PropertyListConverter;
+import com.izouma.nineth.enums.AssetSource;
 import com.izouma.nineth.enums.AssetStatus;
 import com.izouma.nineth.enums.CollectionType;
 import com.izouma.nineth.utils.CollectionTagSerializer;
@@ -179,6 +180,11 @@ public class Asset extends CollectionBaseEntity {
 //    @ApiModelProperty("vip权利")
 //    private Boolean vip;
 
+    @ApiModelProperty("来源")
+    @Enumerated(EnumType.STRING)
+    @Column(length = 20)
+    private AssetSource source = AssetSource.OFFICIAL;
+
     @Transient
     private boolean opened = true;
 
@@ -218,6 +224,7 @@ public class Asset extends CollectionBaseEntity {
                 .ownerAvatar(user.getAvatar())
                 .type(collection.getType())
                 .holdDays(collection.getHoldDays())
+                .source(AssetSource.OFFICIAL)
                 .tags(new HashSet<>(collection.getTags()))
                 .build();
     }
@@ -246,6 +253,7 @@ public class Asset extends CollectionBaseEntity {
                 .ownerAvatar(user.getAvatar())
                 .type(CollectionType.BLIND_BOX)
                 .holdDays(holdDays)
+                .source(AssetSource.OFFICIAL)
                 .build();
     }
 }

+ 17 - 0
src/main/java/com/izouma/nineth/enums/AssetSource.java

@@ -0,0 +1,17 @@
+package com.izouma.nineth.enums;
+
+public enum AssetSource {
+    OFFICIAL("官方"),
+    TRANSFER("转让"),
+    GIFT("转赠");
+
+    private final String description;
+
+    AssetSource(String description) {
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+}

+ 18 - 0
src/main/java/com/izouma/nineth/enums/TransferReason.java

@@ -0,0 +1,18 @@
+package com.izouma.nineth.enums;
+
+public enum TransferReason {
+    TRANSFER("转让"),
+    GIFT("转赠"),
+
+    ;
+
+    TransferReason(String description) {
+        this.description = description;
+    }
+
+    private String description;
+
+    public String getDescription() {
+        return description;
+    }
+}

+ 18 - 13
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -9,10 +9,7 @@ import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.dto.PageWrapper;
 import com.izouma.nineth.dto.UserHistory;
-import com.izouma.nineth.enums.AssetStatus;
-import com.izouma.nineth.enums.CollectionSource;
-import com.izouma.nineth.enums.CollectionType;
-import com.izouma.nineth.enums.OrderStatus;
+import com.izouma.nineth.enums.*;
 import com.izouma.nineth.event.TransferAssetEvent;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
@@ -67,8 +64,7 @@ public class AssetService {
     private ShowCollectionRepo      showCollectionRepo;
     private CollectionPrivilegeRepo collectionPrivilegeRepo;
     private PasswordEncoder         passwordEncoder;
-    private MintActivityRepo        mintActivityRepo;
-    private TagRepo                 tagRepo;
+
 
     public Page<Asset> all(PageQuery pageQuery) {
         Page<Asset> all = assetRepo
@@ -196,10 +192,14 @@ public class AssetService {
         }
 
         int holdDays;
-        if (ObjectUtils.isEmpty(asset.getHoldDays())) {
-            holdDays = sysConfigService.getInt("hold_days");
+        if (asset.getSource() == AssetSource.GIFT) {
+            holdDays = sysConfigService.getInt("gift_days");
         } else {
-            holdDays = asset.getHoldDays();
+            if (ObjectUtils.isEmpty(asset.getHoldDays())) {
+                holdDays = sysConfigService.getInt("hold_days");
+            } else {
+                holdDays = asset.getHoldDays();
+            }
         }
 
         if (ChronoUnit.DAYS.between(asset.getCreatedAt(), LocalDateTime.now()) < holdDays) {
@@ -330,7 +330,11 @@ public class AssetService {
         assetRepo.save(asset);
     }
 
-    public void transfer(Asset asset, BigDecimal price, User toUser, String reason, Long orderId) {
+    public void transfer(Asset asset, BigDecimal price, User toUser, TransferReason reason, Long orderId) {
+        Objects.requireNonNull(asset, "原藏品不能为空");
+        Objects.requireNonNull(toUser, "转让人不能为空");
+        Objects.requireNonNull(reason, "转让原因不能为空");
+
         Asset newAsset = new Asset();
         BeanUtils.copyProperties(asset, newAsset);
         newAsset.setId(null);
@@ -347,6 +351,7 @@ public class AssetService {
         newAsset.setOrderId(orderId);
         newAsset.setFromAssetId(asset.getId());
         newAsset.setType(CollectionType.DEFAULT);
+        newAsset.setSource(TransferReason.GIFT == reason ? AssetSource.GIFT : AssetSource.TRANSFER);
         newAsset.setTags(new HashSet<>(asset.getTags()));
         assetRepo.save(newAsset);
 
@@ -358,14 +363,14 @@ public class AssetService {
                 .toUser(toUser.getNickname())
                 .toUserId(toUser.getId())
                 .toAvatar(toUser.getAvatar())
-                .operation(reason)
-                .price("转赠".equals(reason) ? null : price)
+                .operation(reason.getDescription())
+                .price(TransferReason.GIFT == reason ? null : price)
                 .build());
 
         asset.setPublicShow(false);
         asset.setConsignment(false);
         asset.setPublicCollectionId(null);
-        asset.setStatus("转赠".equals(reason) ? AssetStatus.GIFTED : AssetStatus.TRANSFERRED);
+        asset.setStatus(TransferReason.GIFT == reason ? AssetStatus.GIFTED : AssetStatus.TRANSFERRED);
         asset.setOwner(toUser.getNickname());
         asset.setOwnerId(toUser.getId());
         asset.setOwnerAvatar(toUser.getAvatar());

+ 3 - 2
src/main/java/com/izouma/nineth/service/GiftOrderService.java

@@ -24,6 +24,7 @@ import com.izouma.nineth.domain.User;
 import com.izouma.nineth.enums.AssetStatus;
 import com.izouma.nineth.enums.OrderStatus;
 import com.izouma.nineth.enums.PayMethod;
+import com.izouma.nineth.enums.TransferReason;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
 import com.izouma.nineth.utils.SnowflakeIdWorker;
@@ -127,7 +128,7 @@ public class GiftOrderService {
         giftOrder.setPayMethod(PayMethod.FREE);
 
         User newOwner = userRepo.findById(giftOrder.getToUserId()).orElseThrow(new BusinessException("用户不存在"));
-        assetService.transfer(asset, asset.getPrice(), newOwner, "转赠", null);
+        assetService.transfer(asset, asset.getPrice(), newOwner, TransferReason.GIFT, null);
 
         return giftOrderRepo.save(giftOrder);
     }
@@ -199,7 +200,7 @@ public class GiftOrderService {
             giftOrder.setPayTime(LocalDateTime.now());
             giftOrder.setPayMethod(PayMethod.ALIPAY);
 
-            assetService.transfer(asset, asset.getPrice(), newOwner, "转赠", null);
+            assetService.transfer(asset, asset.getPrice(), newOwner, TransferReason.GIFT, null);
         } else {
             log.error("转赠回调出错 状态错误 orderid={} transactionid={} status={}", orderId, transactionId, giftOrder
                     .getStatus());

+ 2 - 2
src/main/java/com/izouma/nineth/service/MintOrderService.java

@@ -119,7 +119,7 @@ public class MintOrderService {
 
         mintMaterialRepo.saveAll(materials);
         // 改为转赠
-        assets.forEach(asset -> assetService.transfer(asset, asset.getPrice(), blackHole, "转赠", null));
+        assets.forEach(asset -> assetService.transfer(asset, asset.getPrice(), blackHole, TransferReason.GIFT, null));
 
     }
 
@@ -506,7 +506,7 @@ public class MintOrderService {
 
             if (mintOrder.isConsume()) {
                 User newOwner = userRepo.findByIdAndDelFalse(1435297L).orElseThrow(new BusinessException("无法铸造"));
-                assets.forEach(asset -> assetService.transfer(asset, asset.getPrice(), newOwner, "转赠", null));
+                assets.forEach(asset -> assetService.transfer(asset, asset.getPrice(), newOwner, TransferReason.GIFT, null));
             }
             mintOrderRepo.save(mintOrder);
 

+ 1 - 1
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -642,7 +642,7 @@ public class OrderService {
                     if (collection.getSource() == CollectionSource.TRANSFER) {
                         orderRepo.save(order);
                         Asset asset = assetRepo.findById(collection.getAssetId()).orElse(null);
-                        assetService.transfer(asset, order.getPrice(), user, "转让", order.getId());
+                        assetService.transfer(asset, order.getPrice(), user, TransferReason.TRANSFER, order.getId());
                         order.setStatus(OrderStatus.FINISH);
                         orderRepo.save(order);
                         collectionRepo.delete(collection);

+ 8 - 0
src/main/java/com/izouma/nineth/service/SysConfigService.java

@@ -115,6 +115,14 @@ public class SysConfigService {
                     .options("hmPay,sandPay")
                     .build());
         }
+        if (sysConfigRepo.findByName("gift_days").isEmpty()) {
+            sysConfigRepo.save(SysConfig.builder()
+                    .name("gift_days")
+                    .desc("转赠满多少天可销售")
+                    .type(SysConfig.ValueType.NUMBER)
+                    .value("20")
+                    .build());
+        }
         SearchMode searchMode = SearchMode.valueOf(sysConfigRepo.findByName("default_search_mode").get().getValue());
         JpaUtils.setDefaultSearchMode(searchMode);
 

+ 2 - 1
src/test/java/com/izouma/nineth/service/AssetServiceTest.java

@@ -6,6 +6,7 @@ import com.izouma.nineth.ApplicationTests;
 import com.izouma.nineth.TokenHistory;
 import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.TransferReason;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
 import com.izouma.nineth.utils.TokenUtils;
@@ -258,7 +259,7 @@ class AssetServiceTest extends ApplicationTests {
     public void transfer() {
         Asset asset = assetRepo.findById(662035L).orElse(null);
         User user = userRepo.findById(9972L).orElse(null);
-        assetService.transfer(asset, BigDecimal.ZERO, user, "转赠", null);
+        assetService.transfer(asset, BigDecimal.ZERO, user, TransferReason.GIFT, null);
     }
 
 }

+ 2 - 1
src/test/java/com/izouma/nineth/service/OrderServiceTest.java

@@ -12,6 +12,7 @@ import com.izouma.nineth.dto.UserBankCard;
 import com.izouma.nineth.enums.AssetStatus;
 import com.izouma.nineth.enums.AuthStatus;
 import com.izouma.nineth.enums.OrderStatus;
+import com.izouma.nineth.enums.TransferReason;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
 import com.izouma.nineth.utils.DateTimeUtils;
@@ -272,7 +273,7 @@ public class OrderServiceTest extends ApplicationTests {
         Asset asset = assetRepo.findById(order.getAssetId()).orElseThrow(new BusinessException("无"));
         User user = userRepo.findById(order.getUserId()).orElseThrow(new BusinessException("暂无"));
         if (asset.getStatus() == AssetStatus.TRADING) {
-            assetService.transfer(asset, order.getPrice(), user, "转让", order.getId());
+            assetService.transfer(asset, order.getPrice(), user, TransferReason.TRANSFER, order.getId());
         }
     }
 }