Преглед изворни кода

铸造活动取消公开展示和寄售

licailing пре 4 година
родитељ
комит
d9f0014685

+ 6 - 2
src/main/java/com/izouma/nineth/repo/OrderRepo.java

@@ -25,8 +25,6 @@ public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationE
 
     List<Order> findByCollectionId(Long collectionId);
 
-    List<Order> findByCollectionIdIn(Iterable<Long> collectionId);
-
     int countByUserIdAndCollectionIdAndStatusIn(Long userId, Long collectionId, Iterable<OrderStatus> orderStatuses);
 
     int countByUserIdAndCountIdAndStatusIn(Long userId, String countId, Iterable<OrderStatus> orderStatuses);
@@ -45,4 +43,10 @@ public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationE
     List<Long> findAllByUserIdAndOpenedFalse(Long userId);
 
     int countByUserIdAndCollectionIdAndVipTrueAndStatusIn(Long userId, Long collectionId, Collection<OrderStatus> status);
+
+    List<Order> findAllByStatus(OrderStatus status);
+
+    List<Order> findAllByPayTimeBetween(LocalDateTime start, LocalDateTime end);
+
+    List<Order> findAllByPayTimeIsAfter(LocalDateTime payTime);
 }

+ 7 - 6
src/main/java/com/izouma/nineth/repo/UserRepo.java

@@ -23,7 +23,7 @@ public interface UserRepo extends JpaRepository<User, Long>, JpaSpecificationExe
     void softDelete(Long id);
 
     @NonNull
-    @CachePut(value = "userInfo",key = "#user.id")
+    @CachePut(value = "userInfo", key = "#user.id")
     User save(@NonNull User user);
 
     @Cacheable("user")
@@ -166,15 +166,16 @@ public interface UserRepo extends JpaRepository<User, Long>, JpaSpecificationExe
     @Query("update User u set u.sales = COALESCE(u.sales, 0) + ?2 where u.id = ?1")
     public void increaseSales(Long id, int num);
 
-    List<User> findByInviteCode(String inviteCode);
-
     @Query("select phone from User where id = ?1 and del = false")
     String findPhoneById(Long id);
 
-    //每日普通用户新增
-    long countAllByCreatedAtAfterAndAuthoritiesContainsAndDelFalse(LocalDateTime createdAt, Authority authority);
-
     List<User> findAllByCollectionIdAndCollectionInvitor(Long collectionId, Long collectionInvitor);
 
     long countAllByCollectionIdAndCollectionInvitor(Long collectionId, Long collectionInvitor);
+
+    long countAllByAuthoritiesContainsAndDelFalse(Authority authority);
+
+    List<User> findAllByCreatedAtBetweenAndAuthoritiesContains(LocalDateTime start, LocalDateTime end, Authority authorities);
+
+    List<User> findAllByCreatedAtIsAfterAndAuthoritiesContains(LocalDateTime createdAt, Authority authorities);
 }

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

@@ -17,9 +17,11 @@ import com.izouma.nineth.config.GeneralProperties;
 import com.izouma.nineth.config.RedisKeys;
 import com.izouma.nineth.config.WxPayProperties;
 import com.izouma.nineth.domain.*;
+import com.izouma.nineth.domain.Collection;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.enums.AssetStatus;
 import com.izouma.nineth.enums.MintOrderStatus;
+import com.izouma.nineth.enums.OrderStatus;
 import com.izouma.nineth.enums.PayMethod;
 import com.izouma.nineth.event.OrderNotifyEvent;
 import com.izouma.nineth.exception.BusinessException;
@@ -72,6 +74,8 @@ public class MintOrderService {
     private MintActivityService           mintActivityService;
     private RedisTemplate<String, Object> redisTemplate;
     private RocketMQTemplate              rocketMQTemplate;
+    private CollectionRepo                collectionRepo;
+    private OrderRepo                     orderRepo;
 
     public Page<MintOrder> all(PageQuery pageQuery) {
         return mintOrderRepo.findAll(JpaUtils.toSpecification(pageQuery, MintOrder.class), JpaUtils.toPageRequest(pageQuery));
@@ -223,6 +227,27 @@ public class MintOrderService {
             } else {
                 // 消耗改为转赠
                 assets.forEach(asset -> {
+                    // 取消公开展示
+                    if (asset.isPublicShow()) {
+                        if (!asset.getUserId().equals(user.getId())) {
+                            throw new BusinessException("此藏品不属于你");
+                        }
+                        if (asset.isConsignment()) {
+                            if (asset.getPublicCollectionId() != null) {
+                                List<Order> orders = orderRepo.findByCollectionId(asset.getPublicCollectionId());
+                                if (orders.stream().anyMatch(o -> o.getStatus() != OrderStatus.CANCELLED)) {
+                                    throw new BusinessException("已有订单不可取消寄售");
+                                }
+                            }
+                            asset.setConsignment(false);
+                        }
+                        Collection collection = collectionRepo.findById(asset.getPublicCollectionId())
+                                .orElseThrow(new BusinessException("无展示记录"));
+                        collectionRepo.delete(collection);
+
+                        asset.setPublicShow(false);
+                        asset.setPublicCollectionId(null);
+                    }
                     asset.setStatus(AssetStatus.MINTING);
                     assetRepo.save(asset);
                 });
@@ -267,9 +292,6 @@ public class MintOrderService {
 
             mintMaterialRepo.saveAll(materials);
 
-            //库存
-//        mintActivity.setStock(mintActivity.getStock() - 1);
-//        mintActivityRepo.save(mintActivity);
             //销量
 //        mintActivityService.increaseSale(mintActivityId, 1);
 
@@ -506,7 +528,6 @@ public class MintOrderService {
             mintOrderRepo.save(order);
 
             // 加库存
-//        mintActivityRepo.addStock(order.getMintActivityId());
             mintActivityService.increaseStock(order.getMintActivityId(), 1);
 //        mintActivityService.decreaseSale(order.getMintActivityId(), 1);
 

+ 57 - 6
src/main/java/com/izouma/nineth/service/StatisticService.java

@@ -1,15 +1,27 @@
 package com.izouma.nineth.service;
 
+import com.izouma.nineth.domain.Order;
+import com.izouma.nineth.domain.User;
 import com.izouma.nineth.enums.AuthorityName;
+import com.izouma.nineth.enums.CollectionSource;
+import com.izouma.nineth.enums.OrderStatus;
 import com.izouma.nineth.repo.OrderRepo;
 import com.izouma.nineth.repo.UserRepo;
 import com.izouma.nineth.security.Authority;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
@@ -18,12 +30,51 @@ public class StatisticService {
     private UserRepo  userRepo;
     private OrderRepo orderRepo;
 
-    public void dayAdd() {
-        LocalDateTime day = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
-        // 用户今日新增
-        long user = userRepo.countAllByCreatedAtAfterAndAuthoritiesContainsAndDelFalse(day, Authority.get(AuthorityName.ROLE_USER));
-        // 订单今日新增
-        long order = orderRepo.countAllByPayTimeAfter(day);
+    public Map<String, Object> total() {
+        Map<String, Object> total = new HashMap<>();
 
+        long user = userRepo.countAllByAuthoritiesContainsAndDelFalse(Authority.get(AuthorityName.ROLE_USER));
+        total.put("userNum", user);
+
+        List<Order> orders = orderRepo.findAllByStatus(OrderStatus.FINISH);
+        Map<CollectionSource, List<Order>> orderMap = orders.stream().collect(Collectors.groupingBy(Order::getSource));
+        List<Order> officialOrders = orderMap.get(CollectionSource.OFFICIAL);
+        List<Order> transferOrders = orderMap.get(CollectionSource.TRANSFER);
+        total.put("officialNum", officialOrders.size());
+        total.put("transferNum", transferOrders.size());
+
+        BigDecimal officialPrice = officialOrders.stream()
+                .map(Order::getTotalPrice)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal transferPrice = transferOrders.stream()
+                .map(Order::getTotalPrice)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        total.put("officialPrice", officialPrice);
+        total.put("transferPrice", transferPrice);
+
+        return total;
+    }
+
+    /*
+    按天
+     */
+    public Map<String, Long> userTrend(int day) {
+        LocalDateTime date = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
+        LocalDateTime start = date.minusDays(day);
+        List<User> users = userRepo.findAllByCreatedAtIsAfterAndAuthoritiesContains(start, Authority.get(AuthorityName.ROLE_USER));
+        return users.stream().collect(Collectors.groupingBy(
+                item -> DateTimeFormatter.ofPattern("yyyy-MM-dd").format(item.getCreatedAt()), Collectors.counting()));
+    }
+
+    public Map<String, Map<String, Long>> orderNumTrend(int day) {
+        LocalDateTime date = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
+        LocalDateTime start = date.minusDays(day);
+        List<Order> orders = orderRepo.findAllByPayTimeIsAfter(start);
+        Map<CollectionSource, List<Order>> orderMap = orders.stream().collect(Collectors.groupingBy(Order::getSource));
+        orderMap.get(CollectionSource.OFFICIAL).stream().collect(Collectors.groupingBy(
+                item -> new SimpleDateFormat("yyyy-MM-dd").format(item.getPayTime()), Collectors.counting()));
+        orderMap.get(CollectionSource.TRANSFER).stream().collect(Collectors.groupingBy(
+                item -> new SimpleDateFormat("yyyy-MM-dd").format(item.getPayTime()), Collectors.counting()));
+        return null;
     }
 }

+ 26 - 0
src/test/java/com/izouma/nineth/service/StatisticServiceTest.java

@@ -0,0 +1,26 @@
+package com.izouma.nineth.service;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class StatisticServiceTest{
+
+    @Autowired
+    private StatisticService statisticService;
+
+    @Test
+    public void total() {
+        System.out.println(statisticService.total());
+    }
+
+    @Test
+    public void userTrend() {
+        System.out.println(statisticService.userTrend(7));
+    }
+}