Browse Source

Merge branch 'dev' of http://git.izouma.com/licailing/modern_point into dev

panhui 3 years ago
parent
commit
2690a139a8

+ 10 - 0
src/main/java/com/izouma/nineth/domain/AssetPost.java

@@ -1,19 +1,26 @@
 package com.izouma.nineth.domain;
 
+import com.izouma.nineth.enums.PostStatus;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
 
 @Data
 @Entity
+@Builder
 @AllArgsConstructor
 @NoArgsConstructor
 @ApiModel("资产邮寄")
 public class AssetPost extends BaseEntity {
+    private Long userId;
+
     private Long assetId;
 
     @ApiModelProperty("收货人")
@@ -31,4 +38,7 @@ public class AssetPost extends BaseEntity {
     @ApiModelProperty("快递单号")
     private String courierId;
 
+    @Enumerated(EnumType.STRING)
+    private PostStatus status;
+
 }

+ 20 - 0
src/main/java/com/izouma/nineth/enums/PostStatus.java

@@ -0,0 +1,20 @@
+package com.izouma.nineth.enums;
+
+public enum PostStatus {
+
+    DELIVERY("待发货"),
+    RECEIVE("待收货"),
+    FINISH("已完成"),
+    CANCELLED("已取消")
+    ;
+
+    private final String description;
+
+    PostStatus(String description) {
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+}

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

@@ -13,4 +13,6 @@ public interface AssetPostRepo extends JpaRepository<AssetPost, Long>, JpaSpecif
     @Modifying
     @Transactional
     void softDelete(Long id);
+
+    AssetPost findFirstByAssetIdAndDelFalseOrderByIdDesc(Long assetId);
 }

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

@@ -1,20 +1,86 @@
 package com.izouma.nineth.service;
 
+import com.izouma.nineth.domain.Asset;
 import com.izouma.nineth.domain.AssetPost;
+import com.izouma.nineth.domain.UserAddress;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.AssetStatus;
+import com.izouma.nineth.enums.PostStatus;
+import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.AssetPostRepo;
+import com.izouma.nineth.repo.AssetRepo;
+import com.izouma.nineth.repo.UserAddressRepo;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Optional;
+
 @Service
 @AllArgsConstructor
 public class AssetPostService {
 
-    private AssetPostRepo assetPostRepo;
+    private AssetPostRepo   assetPostRepo;
+    private AssetRepo       assetRepo;
+    private UserAddressRepo userAddressRepo;
 
     public Page<AssetPost> all(PageQuery pageQuery) {
         return assetPostRepo.findAll(JpaUtils.toSpecification(pageQuery, AssetPost.class), JpaUtils.toPageRequest(pageQuery));
     }
+
+    /*
+    衍生品上链
+    衍生品有盲盒类型
+    衍生品邮寄不支付快递费
+    衍生品暂不可以取消邮寄
+    */
+    public void post(Long userId, Long assetId, Long addressId) {
+        Asset asset = assetRepo.findById(assetId).orElseThrow(new BusinessException("无此衍生品"));
+        if (asset.isPublicShow()) {
+            if (asset.isConsignment()) {
+                throw new BusinessException("请先取消寄售");
+            }
+            throw new BusinessException("请先取消公开展示");
+        }
+        if (AssetStatus.POSTED.equals(asset.getStatus())) {
+            throw new BusinessException("已邮寄,无需再邮寄");
+        }
+        if (!AssetStatus.NORMAL.equals(asset.getStatus())) {
+            throw new BusinessException("当前状态不可邮寄");
+        }
+        AssetPost assetPost = assetPostRepo.findFirstByAssetIdAndDelFalseOrderByIdDesc(assetId);
+        if (ObjectUtils.isNotEmpty(assetPost) && !PostStatus.CANCELLED.equals(assetPost.getStatus())) {
+            throw new BusinessException("已邮寄,无需再邮寄");
+        }
+
+        UserAddress userAddress = userAddressRepo.findById(addressId).orElseThrow(new BusinessException("地址信息不存在"));
+
+        AssetPost build = AssetPost.builder()
+                .assetId(assetId)
+                .userId(userId)
+                .contactName(userAddress.getName())
+                .contactPhone(userAddress.getPhone())
+                .address(userAddress.getProvinceName() + " " + userAddress.getCityName() + " " +
+                        userAddress.getDistrictName() + " " + userAddress.getAddress())
+                .status(PostStatus.DELIVERY)
+                .build();
+
+        assetPostRepo.save(build);
+        asset.setStatus(AssetStatus.POSTING);
+    }
+
+    public void updateStatus(Long assetPostId, PostStatus status) {
+        AssetPost assetPost = assetPostRepo.findById(assetPostId).orElseThrow(new BusinessException("无邮寄信息"));
+        assetPost.setStatus(status);
+        if (PostStatus.FINISH.equals(status)) {
+            Asset asset = assetRepo.findById(assetPost.getAssetId()).orElseThrow(new BusinessException("无衍生品"));
+            asset.setStatus(AssetStatus.POSTED);
+            assetRepo.save(asset);
+        }
+        assetPostRepo.save(assetPost);
+    }
+
 }

+ 41 - 0
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -491,4 +491,45 @@ public class AssetService {
 
         return leaderboardDTOS;
     }
+
+    public List<LeaderboardDTO> ranking(int size) {
+        LocalDate now = LocalDate.now();
+        LocalDateTime start = LocalDateTime.of(now.getYear(), now.getMonth(), 1, 0, 0, 0, 0);
+        LocalDateTime end = start.plusMonths(1).minusSeconds(1);
+        List<TokenHistory> all = tokenHistoryRepo.findAllByPriceIsNotNullAndOperationLikeAndCreatedAtBetween("出售", start, end);
+        Map<Long, Long> countMap = all.stream()
+                .collect(Collectors.groupingBy(TokenHistory::getToUserId, Collectors.counting()));
+
+        List<LeaderboardDTO> dtos = new ArrayList<>();
+
+        countMap.forEach((k, v) ->
+                dtos.add(LeaderboardDTO.builder()
+                        .userId(k)
+                        .num(v)
+                        .build())
+        );
+        dtos.sort((a, b) -> b.getNum().compareTo(a.getNum()));
+
+        List<LeaderboardDTO> leaderboardDTOS = new ArrayList<>();
+        int i = 1;
+
+        for (LeaderboardDTO dto : dtos) {
+            Long id = dto.getUserId();
+
+            if (i > size) {
+                break;
+            }
+            User user = userRepo.findByIdAndDelFalse(id).orElse(null);
+            if (user == null) {
+                continue;
+            }
+            dto.setAvatar(user.getAvatar());
+            dto.setNickname(user.getNickname());
+            dto.setRank(i);
+            leaderboardDTOS.add(dto);
+            i++;
+        }
+
+        return leaderboardDTOS;
+    }
 }

+ 3 - 0
src/main/java/com/izouma/nineth/web/AssetController.java

@@ -144,6 +144,9 @@ public class AssetController extends BaseController {
     @ApiOperation("排行榜")
     @PostMapping("/ranking")
     public List<LeaderboardDTO> ranking() {
+        if (SecurityUtils.getAuthenticatedUser() == null) {
+            return assetService.ranking(100);
+        }
         return assetService.ranking(SecurityUtils.getAuthenticatedUser().getId(), 100);
     }
 }

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

@@ -96,6 +96,6 @@ class AssetServiceTest extends ApplicationTests {
 
     @Test
     public void test() {
-        assetService.ranking(439L, 20).forEach(System.out::println);
+        assetService.ranking(3).forEach(System.out::println);
     }
 }