Просмотр исходного кода

Merge branch 'dev' of http://git.izouma.com/xiongzhu/9th into dev

panhui 3 лет назад
Родитель
Сommit
e3fbaaec3a

+ 1 - 0
src/main/java/com/izouma/nineth/enums/AssetStatus.java

@@ -6,6 +6,7 @@ public enum AssetStatus {
     TRANSFERRED("已转让"),
     GIFTING("转赠中"),
     GIFTED("已转赠"),
+    REDEEMED("已兑换")
     ;
 
     private final String description;

+ 2 - 0
src/main/java/com/izouma/nineth/repo/AssetRepo.java

@@ -75,4 +75,6 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
     List<Asset> findByStatusIn(Iterable<AssetStatus> statuses);
 
     List<Asset> findByFromAssetId(Long id);
+
+    List<Asset> findAllByCollectionIdAndUserIdAndStatus(Long collectionId, Long userId, AssetStatus status);
 }

+ 53 - 7
src/main/java/com/izouma/nineth/service/ActivityOrderService.java

@@ -1,19 +1,23 @@
 package com.izouma.nineth.service;
 
-import com.izouma.nineth.domain.ActivityCollection;
-import com.izouma.nineth.domain.ActivityOrder;
+import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.AssetStatus;
+import com.izouma.nineth.enums.OrderStatus;
 import com.izouma.nineth.exception.BusinessException;
-import com.izouma.nineth.repo.ActivityCollectionRepo;
-import com.izouma.nineth.repo.ActivityOrderRepo;
+import com.izouma.nineth.repo.*;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 @AllArgsConstructor
 public class ActivityOrderService {
@@ -21,23 +25,65 @@ public class ActivityOrderService {
     private ActivityOrderRepo         activityOrderRepo;
     private ActivityCollectionRepo    activityCollectionRepo;
     private ActivityCollectionService activityCollectionService;
+    private AssetRepo                 assetRepo;
+    private OrderRepo                 orderRepo;
+    private CollectionRepo            collectionRepo;
 
     public Page<ActivityOrder> all(PageQuery pageQuery) {
         return activityOrderRepo.findAll(JpaUtils.toSpecification(pageQuery, ActivityOrder.class), JpaUtils.toPageRequest(pageQuery));
     }
 
 
-    public void created(List<Long> assetId, Long mintActivityId) {
-        ActivityCollection collection = activityCollectionRepo.findById(mintActivityId)
+    public void created(Long userId, Long mintActivityId) {
+        ActivityCollection activity = activityCollectionRepo.findById(mintActivityId)
                 .orElseThrow(new BusinessException("活动不存在"));
 
+        //库存
         int stock = Optional.ofNullable(activityCollectionService.increaseStock(mintActivityId, -1))
                 .map(Math::toIntExact)
                 .orElseThrow(new BusinessException("很遗憾,活动已无库存"));
-
         if (stock < 0) {
             throw new BusinessException("活动已无库存");
         }
 
+        //数量
+        List<Asset> assets = assetRepo.findAllByCollectionIdAndUserIdAndStatus(activity.getCollectionId(), userId, AssetStatus.NORMAL);
+        if (assets.size() < activity.getNum()) {
+            throw new BusinessException("数量不足,无法领取");
+        }
+
+        List<Asset> consumption = assets.stream().limit(activity.getNum()).collect(Collectors.toList());
+        //消耗资产
+        consumption.forEach(asset -> {
+            if (asset.isPublicShow()) {
+                if (asset.isConsignment()) {
+                    asset.setConsignment(false);
+                }
+
+                if (asset.getPublicCollectionId() != null) {
+                    List<Order> orders = orderRepo.findByCollectionId(asset.getPublicCollectionId());
+                    if (orders.stream().anyMatch(o -> o.getStatus() != OrderStatus.CANCELLED)) {
+                        throw new BusinessException("已有订单不可兑换");
+                    }
+                    Collection collection = collectionRepo.findById(asset.getPublicCollectionId())
+                            .orElseThrow(new BusinessException("无展示记录"));
+                    List<Long> collectionIds = collectionRepo.findAllByAssetId(collection.getAssetId());
+                    if (CollectionUtils.isNotEmpty(collectionIds)) {
+                        log.info("删除collection {}", collectionIds);
+                        collectionRepo.deleteAllByIdIn(collectionIds);
+                    } else {
+                        log.info("删除collection {}", collection.getId());
+                        collectionRepo.delete(collection);
+                    }
+                }
+
+                asset.setPublicShow(false);
+                asset.setPublicCollectionId(null);
+            }
+            asset.setStatus(AssetStatus.REDEEMED);
+            assetRepo.save(asset);
+        });
+
+
     }
 }

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

@@ -474,10 +474,11 @@ public class OrderService {
                         Asset asset = assetRepo.findById(collection.getAssetId()).orElse(null);
                         assetService.transfer(asset, order.getPrice(), user, "转让", order.getId());
                         List<Long> collectionIds = collectionRepo.findAllByAssetId(collection.getAssetId());
-                        log.info("删除collection {}", collectionIds);
                         if (CollectionUtils.isNotEmpty(collectionIds)) {
+                            log.info("删除collection {}", collectionIds);
                             collectionRepo.deleteAllByIdIn(collectionIds);
                         } else {
+                            log.info("删除collection {}", collection.getId());
                             collectionRepo.delete(collection);
                         }