OrderRepo.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package com.izouma.nineth.repo;
  2. import com.izouma.nineth.domain.Order;
  3. import com.izouma.nineth.enums.CollectionSource;
  4. import com.izouma.nineth.enums.OrderStatus;
  5. import com.izouma.nineth.enums.OrderType;
  6. import com.izouma.nineth.enums.PayMethod;
  7. import org.springframework.data.domain.Page;
  8. import org.springframework.data.domain.Pageable;
  9. import org.springframework.data.jpa.repository.JpaRepository;
  10. import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  11. import org.springframework.data.jpa.repository.Modifying;
  12. import org.springframework.data.jpa.repository.Query;
  13. import javax.transaction.Transactional;
  14. import java.math.BigDecimal;
  15. import java.time.LocalDateTime;
  16. import java.util.*;
  17. public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationExecutor<Order> {
  18. @Query("update Order t set t.del = true where t.id = ?1")
  19. @Modifying
  20. @Transactional
  21. void softDelete(Long id);
  22. Optional<Order> findByIdAndDelFalse(Long id);
  23. List<Order> findByStatusAndCreatedAtBeforeAndDelFalse(OrderStatus status, LocalDateTime time);
  24. List<Order> findByCollectionId(Long collectionId);
  25. int countByCollectionIdAndUserIdAndStatus(Long collectionId, Long userId, OrderStatus orderStatus);
  26. int countByUserIdAndCollectionIdAndStatusIn(Long userId, Long collectionId, Iterable<OrderStatus> orderStatuses);
  27. int countByUserIdAndCountIdAndStatusIn(Long userId, String countId, Iterable<OrderStatus> orderStatuses);
  28. List<Order> findByStatus(OrderStatus orderStatus);
  29. @Query("select count(o) from Order o join Collection c on o.collectionId = c.id " +
  30. "where c.minterId = ?1 and c.source = 'OFFICIAL' and o.status <> 'NOT_PAID' and o.status <> 'CANCELLED'")
  31. long countSales(Long userId);
  32. Order findByTransactionId(String txId);
  33. long countAllByPayTimeAfter(LocalDateTime payTime);
  34. @Query("select id from Order where userId = ?1 and opened = false")
  35. List<Long> findAllByUserIdAndOpenedFalse(Long userId);
  36. int countByUserIdAndCollectionIdAndVipTrueAndStatusIn(Long userId, Long collectionId, Collection<OrderStatus> status);
  37. List<Order> findAllByStatusAndCompanyId(OrderStatus status, Long companyId);
  38. List<Order> findAllByStatusAndCompanyIdAndOrderTypeNotIn(OrderStatus status, Long companyId, Set<OrderType> orderTypes);
  39. List<Order> findAllByStatusAndMinterId(OrderStatus status, Long minterId);
  40. List<Order> findAllByCreatedAtIsAfterAndStatusInAndCompanyIdAndOrderTypeNot(LocalDateTime payTime, List<OrderStatus> status, Long companyId, OrderType orderType);
  41. List<Order> findAllByCreatedAtBetweenAndStatusInAndCompanyId(LocalDateTime start, LocalDateTime end, List<OrderStatus> status, Long companyId);
  42. List<Order> findAllByCreatedAtBetweenAndStatusInAndCompanyIdAndOrderTypeNot(LocalDateTime start, LocalDateTime end, List<OrderStatus> status, Long companyId, OrderType orderType);
  43. List<Order> findAllByCreatedAtIsAfterAndMinterIdAndStatusIn(LocalDateTime payTime, Long minterId, List<OrderStatus> status);
  44. List<Order> findAllByCreatedAtBetweenAndMinterIdAndStatusIn(LocalDateTime start, LocalDateTime end, Long minterId, List<OrderStatus> status);
  45. @Query(nativeQuery = true, value = "select user_id, sum(price) total from raex.order_info " +
  46. "where (status = 'FINISH' or status = 'PROCESSING') " +
  47. "group by user_id order by sum(price) desc limit 50")
  48. List<Object[]> sumPrice();
  49. List<Order> findByCreatedAtBetweenAndSourceAndStatusIn(LocalDateTime start, LocalDateTime end, CollectionSource source, Collection<OrderStatus> statuses);
  50. @Query(nativeQuery = true, value = "select o.user_id from order_info o " +
  51. " WHERE o.created_at < ?1 and o.created_at > ?2 and ( o.status = 'NOT_PAID' OR o.status = 'CANCELLED')" +
  52. "GROUP BY o.user_id " +
  53. "HAVING count(*) > 2")
  54. List<Long> checkBlackList(LocalDateTime start, LocalDateTime end);
  55. @Query("update Order o set o.status = com.izouma.nineth.enums.OrderStatus.FINISH where o.id = ?1")
  56. @Transactional
  57. @Modifying
  58. int finishOrder(Long id);
  59. @Query("update Order o set o.status = com.izouma.nineth.enums.OrderStatus.PROCESSING, " +
  60. "o.payTime = ?2, o.payMethod = ?3, o.transactionId = ?4 where o.id = ?1")
  61. @Transactional
  62. @Modifying
  63. int processingOrder(Long id, LocalDateTime payTime, PayMethod payMethod, String transactionId);
  64. @Query(value = "select sum(price) from order_info where user_id = ?1 and status = 'FINISH'", nativeQuery = true)
  65. BigDecimal sumUserPrice(Long userId);
  66. @Query("select o from Order o " +
  67. " join Asset a on a.id = o.assetId " +
  68. " join a.tags t on t.id = ?1 " +
  69. "where o.userId not in ?2 " +
  70. " and o.source = com.izouma.nineth.enums.CollectionSource.TRANSFER " +
  71. " and o.status = com.izouma.nineth.enums.OrderStatus.FINISH")
  72. Page<Order> byTag(Long tagId, List<Long> excludeUserId, Pageable pageable);
  73. @Query("select o from Order o " +
  74. " join Asset a on a.id = o.assetId " +
  75. " join a.tags t on t.id = ?1 " +
  76. "where o.userId = ?2" +
  77. " and o.source = com.izouma.nineth.enums.CollectionSource.TRANSFER " +
  78. " and o.status = com.izouma.nineth.enums.OrderStatus.FINISH")
  79. Page<Order> byTag(Long tagId, Long userId, Pageable pageable);
  80. @Query(value = "select user_id from asset where id = ?1", nativeQuery = true)
  81. Long selectUserId(Long assetId);
  82. int countAllByUserIdAndCollectionIdAndStatusIn(Long userId, Long collectionId, Collection<OrderStatus> status);
  83. Order findFirstByCollectionIdOrderByCreatedAtDesc(Long collectionId);
  84. @Query(value = "SELECT a.id id, a.name name ,a.prefixName prefixName, a.source source, SUM(a.num) num FROM " +
  85. "(SELECT a.id id, o.name name,a.prefix_name prefixName, o.source source,COUNT(*) num FROM order_info o LEFT JOIN asset a ON o.asset_id = a.id WHERE o.`status` = 'FINISH' AND o.source = 'TRANSFER' AND o.pay_time > ?1 GROUP BY a.prefix_name " +
  86. "UNION ALL" +
  87. " SELECT a.id id, o.name name,a.prefix_name prefixName, o.source source,COUNT(*) num FROM order_info o LEFT JOIN collection_info a ON o.collection_id = a.id WHERE o.`status` = 'FINISH' and o.source = 'OFFICIAL' AND o.pay_time > ?1 GROUP BY a.prefix_name) a " +
  88. "GROUP BY a.prefixName ORDER BY (SUM(a.num)) DESC LIMIT 10", nativeQuery = true)
  89. List<Map<String, String>> transactionTopTen(LocalDateTime payTime);
  90. @Query("select sum(totalPrice) from Order where status = 'FINISH' and createdAt <= ?2 and createdAt >= ?1 and companyId <> 1")
  91. BigDecimal sumSaas(LocalDateTime start, LocalDateTime end);
  92. @Query(nativeQuery = true, value = "select O.`name` domainName,u.nickname nickname from order_info o inner join asset a on o.asset_id = a.id inner join user u on u.id = o.user_id where o.status = 'FINISH' and (a.prefix_name = 'RID3' or prefix_name = 'RIDN3') order by o.pay_time desc LIMIT 50")
  93. List<Map<String, Object>> newestDomainOrder();
  94. List<Order> findAllByParentOrderId(Long id);
  95. }